diff --git a/.gitignore b/.gitignore index d5075446e673..7609467500f5 100644 --- a/.gitignore +++ b/.gitignore @@ -244,5 +244,6 @@ config/dbconfig.txt # Running OpenDream locally tgstation.json +rust_g64.dll !/libaneri.so diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 4a0d3e84053a..81e6e4e6245b 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -50,11 +50,6 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/bridge) -"ao" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien/drone, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "ap" = ( /obj/structure/alien/weeds/node, /obj/structure/alien/egg/burst, @@ -87,6 +82,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) +"av" = ( +/obj/machinery/atmospherics/miner/oxygen, +/turf/open/floor/engine/o2, +/area/ruin/space/ancientstation/beta/atmos) "ax" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue{ @@ -94,6 +93,21 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) +"ay" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/hall) "aA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/firecloset/full, @@ -171,6 +185,7 @@ /area/ruin/space/ancientstation/charlie/bridge) "aM" = ( /obj/structure/alien/weeds, +/obj/machinery/recharge_station, /obj/effect/decal/cleanable/xenoblood/xgibs/up, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) @@ -274,7 +289,6 @@ "be" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/alien/weeds, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "bg" = ( @@ -310,6 +324,9 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 8 }, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "bk" = ( @@ -332,21 +349,15 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) -"bo" = ( -/obj/machinery/door/airlock/highsecurity, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "bp" = ( /obj/machinery/door/window/brigdoor/left/directional/west, /obj/effect/decal/cleanable/robot_debris, -/obj/structure/alien/weeds/node, +/obj/machinery/flasher/directional/east{ + id = "IsolationFlash"; + pixel_y = 40 + }, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) -"bq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/layer4, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) "bs" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -370,20 +381,6 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) -"bw" = ( -/obj/machinery/door/airlock/engineering{ - name = "Gravity Generator" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/gravity) "bx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch, @@ -401,17 +398,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) -"bA" = ( -/obj/structure/ai_core/deactivated, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) -"bC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/biogenerator, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "bD" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/delta/rnd) @@ -464,6 +450,9 @@ /obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "bQ" = ( @@ -697,14 +686,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"cz" = ( -/obj/structure/window/reinforced/spawner/directional/west, -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/table, -/obj/machinery/door/window/brigdoor/right/directional/east, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "cA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -739,7 +720,6 @@ "cF" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/alien/weeds, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "cG" = ( @@ -772,6 +752,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/mining) "cP" = ( @@ -852,28 +833,11 @@ /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) -"de" = ( -/obj/structure/alien/weeds, -/mob/living/basic/alien/queen, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "df" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/hall) -"dg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/science{ - name = "Artificial Program Core Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/alien/weeds, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "oldstation-aisat" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/hall) "dh" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -883,6 +847,7 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 1 }, +/obj/structure/table, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "dk" = ( @@ -900,6 +865,14 @@ "dl" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/charlie/engie) +"dn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/storage/crayons, +/obj/item/toy/cards/deck, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) "do" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/green{ @@ -907,10 +880,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) -"dp" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/ruin/space/ancientstation/charlie/hydro) "dq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/watertank/high{ @@ -972,8 +941,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 10 }, +/obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"dy" = ( +/obj/item/surgery_tray, +/turf/template_noop, +/area/template_noop) "dB" = ( /obj/structure/alien/weeds, /obj/effect/gibspawner/human, @@ -996,17 +970,19 @@ }, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) +"dE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "dF" = ( /obj/structure/lattice, /turf/template_noop, /area/template_noop) -"dG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/mob/living/basic/alien/drone, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/hall) "dH" = ( /obj/structure/lattice/catwalk, /turf/template_noop, @@ -1017,18 +993,6 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/mining) -"dL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/command/glass{ - name = "Bridge" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/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/ancientstation/charlie/bridge) "dM" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -1127,6 +1091,7 @@ /obj/item/screwdriver/power, /obj/item/storage/belt/utility, /obj/item/clothing/head/utility/hardhat/welding, +/obj/item/holosign_creator/atmos, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/supermatter) "ec" = ( @@ -1134,6 +1099,7 @@ /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/mapping_helpers/apc/no_charge, +/obj/structure/table, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "ed" = ( @@ -1146,7 +1112,10 @@ /obj/machinery/firealarm/directional/west, /obj/effect/decal/cleanable/dirt, /obj/item/storage/backpack/old, -/obj/structure/closet, +/obj/structure/closet{ + anchored = 1 + }, +/obj/effect/spawner/random/clothing/backpack, /obj/effect/spawner/random/clothing/backpack, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) @@ -1219,28 +1188,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) -"ep" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/seeds/wheat, -/obj/item/seeds/poppy, -/obj/item/seeds/potato, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "eq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/seed_extractor, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) "er" = ( +/obj/machinery/pipedispenser/disposal/transit_tube, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/seeds/wheat/rice, -/obj/item/seeds/grape, -/obj/effect/spawner/random/food_or_drink/seed, -/obj/item/seeds/ambrosia, /turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) +/area/ruin/space/ancientstation/beta/atmos) "et" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -1287,6 +1247,8 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 4 }, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/maintenance, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "eA" = ( @@ -1302,8 +1264,8 @@ "eB" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/autolathe, -/obj/machinery/duct, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/structure/table, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "eD" = ( @@ -1311,6 +1273,13 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 4 }, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/obj/structure/rack, +/obj/item/assembly/prox_sensor, +/obj/item/stack/cable_coil, +/obj/item/assembly/prox_sensor, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "eE" = ( @@ -1318,11 +1287,6 @@ /obj/machinery/light/directional/west, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) -"eF" = ( -/obj/machinery/computer/rdconsole, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) "eH" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -1390,23 +1354,24 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) -"eR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/cultivator{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/shovel/spade, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "eS" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/turf_decal/tile/green, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) +"eT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/item/storage/backpack/old, +/obj/effect/spawner/random/clothing/backpack, +/obj/effect/spawner/random/clothing/backpack, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) "eU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -1456,11 +1421,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"fa" = ( -/obj/machinery/rnd/destructive_analyzer, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) "fb" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 1 @@ -1561,21 +1521,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"fu" = ( -/obj/machinery/mecha_part_fabricator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) -"fv" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/stack/sheet/iron/fifty, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) "fw" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/east, @@ -1621,18 +1566,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) -"fG" = ( -/obj/machinery/door/airlock/engineering/glass, -/obj/machinery/door/poddoor{ - id = "ancient" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "fI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/rust, @@ -1646,6 +1579,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, /obj/structure/cable, +/obj/machinery/firealarm/directional/west, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) "fK" = ( @@ -1658,6 +1595,7 @@ dir = 8 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "fL" = ( @@ -1782,6 +1720,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"gj" = ( +/obj/machinery/door/airlock/research{ + name = "Research and Development" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor/closed, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "gk" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood/old, @@ -1851,13 +1800,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) -"gD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/alien/drone, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/hall) "gE" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1874,8 +1816,13 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) "gG" = ( -/obj/machinery/rnd/production/protolathe/offstation, /obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/stock_parts/matter_bin, +/obj/item/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "gH" = ( @@ -1893,6 +1840,10 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) +"gK" = ( +/obj/structure/mecha_wreckage/ripley, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "gL" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 4 @@ -1900,9 +1851,15 @@ /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/mining) "gM" = ( -/obj/machinery/rnd/production/circuit_imprinter/offstation, /obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/dropper, +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/item/experi_scanner{ + pixel_x = 4 + }, +/obj/item/experi_scanner, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "gO" = ( @@ -1917,18 +1874,18 @@ /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) "gP" = ( +/obj/effect/decal/cleanable/glass, /obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath/medical, +/obj/machinery/duct, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "gQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/table/optable{ - name = "Robotics Operating Table" - }, -/obj/item/surgical_drapes, +/obj/effect/decal/cleanable/xenoblood/xgibs/core, +/obj/machinery/duct, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "gR" = ( @@ -1995,6 +1952,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"hc" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/turf/open/floor/engine/n2, +/area/ruin/space/ancientstation/beta/atmos) "hi" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/charlie/hall) @@ -2101,13 +2062,6 @@ /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) -"hE" = ( -/mob/living/basic/alien/drone, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) "hI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2131,6 +2085,9 @@ /obj/structure/alien/weeds, /obj/structure/cable, /obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) "hM" = ( @@ -2187,10 +2144,10 @@ /area/ruin/space/ancientstation/charlie/hall) "hV" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/turf_decal/tile/blue/half/contrasted{ dir = 4 }, +/obj/machinery/computer/security/hos, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) "hW" = ( @@ -2247,7 +2204,8 @@ dir = 4 }, /obj/machinery/duct, -/turf/open/floor/iron, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hall) "ic" = ( /obj/effect/decal/cleanable/dirt, @@ -2381,6 +2339,7 @@ /obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 8 }, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "ir" = ( @@ -2397,21 +2356,6 @@ /obj/effect/decal/cleanable/glass/plasma, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"iy" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Medical Bay" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/firedoor/closed, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/medbay) "iA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -2503,8 +2447,11 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/cobweb, /obj/structure/cable, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/storage) "iV" = ( @@ -2516,24 +2463,25 @@ /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/storage) -"jc" = ( -/obj/machinery/door/airlock/research{ - name = "Research and Development" +"iX" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 8 }, -/obj/machinery/door/firedoor, +/obj/structure/table_frame, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) -"jd" = ( -/obj/machinery/door/airlock/research{ - name = "Research and Development" +/obj/item/shard{ + icon_state = "medium" }, -/obj/machinery/door/firedoor, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) +"iY" = ( /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/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) +/area/ruin/space/ancientstation/charlie/hall) "je" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2635,6 +2583,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"jw" = ( +/obj/structure/alien/weeds/node, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "jx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/east, @@ -2749,9 +2704,9 @@ "jP" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/duffelbag, -/obj/structure/closet, -/obj/effect/spawner/random/clothing/backpack, +/obj/structure/table, +/obj/item/storage/photo_album, +/obj/item/pai_card, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "jU" = ( @@ -2764,32 +2719,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) -"jV" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/mining) "jW" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/east, /obj/effect/turf_decal/tile/purple/anticorner/contrasted, +/obj/structure/table/optable{ + name = "Robotics Operating Table" + }, +/obj/item/surgical_drapes, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) -"jX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/seeds/harebell, -/obj/item/seeds/carrot, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "jY" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -2867,6 +2809,9 @@ /obj/item/shard, /obj/effect/mapping_helpers/broken_floor, /obj/structure/broken_flooring/singular/directional/east, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/hall) "ko" = ( @@ -2897,6 +2842,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/structure/table, +/obj/item/stock_parts/capacitor, +/obj/item/stock_parts/manipulator, +/obj/item/stock_parts/micro_laser, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "kr" = ( @@ -2977,6 +2926,7 @@ /obj/item/crowbar, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/item/crowbar, /obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) @@ -2986,17 +2936,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) -"kH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/door/airlock/external/ruin{ - name = "External Access" - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "kI" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ @@ -3042,6 +2981,7 @@ /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, +/obj/item/crowbar, /obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) @@ -3083,6 +3023,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"kT" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "kU" = ( /obj/machinery/light/directional/east, /obj/structure/table/reinforced, @@ -3168,6 +3113,9 @@ name = "N2 Input" }, /obj/effect/turf_decal/tile/yellow/half/contrasted, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "li" = ( @@ -3199,12 +3147,6 @@ /obj/effect/mob_spawn/ghost_role/human/oldeng, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) -"lq" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs/old, -/mob/living/basic/alien, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "lr" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -3224,6 +3166,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) "lv" = ( @@ -3265,6 +3208,7 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) "lF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "lG" = ( @@ -3273,14 +3217,6 @@ }, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) -"lH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch/directional/north, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "lI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door/directional/west{ @@ -3306,6 +3242,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "lM" = ( @@ -3314,6 +3253,9 @@ /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 }, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "lO" = ( @@ -3365,28 +3307,11 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) "lV" = ( -/obj/structure/grille/broken, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/medbay) -"lW" = ( -/obj/structure/grille/broken, /obj/item/shard{ icon_state = "medium" }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/medbay) -"lY" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Station Atmospherics" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/atmos) +/turf/template_noop, +/area/template_noop) "lZ" = ( /obj/structure/alien/weeds, /obj/structure/cable, @@ -3425,17 +3350,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"mj" = ( -/obj/machinery/door/airlock/highsecurity, -/obj/structure/alien/weeds, -/obj/structure/cable, -/obj/effect/decal/cleanable/xenoblood/xtracks, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "oldstation-aisat" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "mk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -3451,14 +3365,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"mm" = ( -/obj/machinery/power/supermatter_crystal/shard, -/obj/structure/closet/crate/engineering{ - name = "supermatter shard crate" - }, -/turf/open/floor/iron/white/textured, -/area/ruin/space/ancientstation/delta/proto) "mn" = ( +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, /turf/open/floor/iron/white/corner{ dir = 4 }, @@ -3519,9 +3429,10 @@ "mz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/item/storage/backpack/old, -/obj/structure/closet, -/obj/effect/spawner/random/clothing/backpack, +/obj/structure/table, +/obj/item/crowbar, +/obj/item/crowbar, +/obj/effect/spawner/random/decoration/glowstick, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "mA" = ( @@ -3589,16 +3500,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/mining) -"mM" = ( -/obj/machinery/door/airlock/mining/glass{ - name = "Mining Equipment" - }, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/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/ancientstation/beta/mining) "mN" = ( /obj/structure/closet, /obj/effect/decal/cleanable/dirt, @@ -3740,6 +3641,7 @@ dir = 10 }, /obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) "nf" = ( @@ -3753,10 +3655,10 @@ /area/ruin/space/ancientstation/beta/hall) "ng" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/pipedispenser/disposal/transit_tube, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/closet/crate/bin, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "nh" = ( @@ -3776,6 +3678,9 @@ /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 }, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "nm" = ( @@ -3823,42 +3728,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/visible/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) -"nv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/atmos/glass{ - name = "Station Atmospherics" - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/beta/atmos) "nw" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/structure/broken_flooring/side/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/hall) -"nx" = ( -/obj/item/shard, -/obj/machinery/atmospherics/components/binary/pump/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, /obj/effect/decal/cleanable/glass, -/obj/effect/mapping_helpers/broken_floor, -/obj/structure/cable, +/obj/item/shard, +/obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 + dir = 8 }, -/obj/structure/broken_flooring/singular/directional/west, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/hall) +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "ny" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{ @@ -3893,33 +3771,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) -"nC" = ( -/obj/structure/closet/crate, -/obj/item/cautery{ - pixel_x = 4 - }, -/obj/item/hemostat, -/obj/item/circular_saw, -/obj/item/scalpel{ - pixel_y = 12 - }, -/obj/item/retractor, -/obj/item/surgical_drapes, -/obj/machinery/light/small/broken/directional/west, -/obj/item/tank/internals/anesthetic, -/obj/item/clothing/mask/breath/medical, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) -"nD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table/optable, -/obj/machinery/light_switch/directional/east, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) "nJ" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -3953,11 +3804,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) -"nN" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/alien/drone, -/turf/open/floor/iron/white, -/area/ruin/space/ancientstation/delta/rnd) "nO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ @@ -3998,32 +3844,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"nV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/science{ - name = "Artificial Program Core Room" - }, -/obj/machinery/door/firedoor, -/obj/structure/alien/weeds, -/obj/structure/cable, -/obj/effect/decal/cleanable/blood/tracks, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "oldstation-aisat" - }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/hall) -"nW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/east, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/tracks{ - dir = 1 - }, -/mob/living/basic/alien, -/obj/structure/cable, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/hall) "nX" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -4042,6 +3862,9 @@ dir = 8 }, /obj/structure/cable, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) "oa" = ( @@ -4056,6 +3879,14 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"ob" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/growing/tray, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "oc" = ( /obj/machinery/door/airlock/science, /obj/effect/decal/cleanable/dirt, @@ -4074,27 +3905,27 @@ /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) "oe" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/stack/sheet/iron/fifty, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/rdconsole{ + dir = 1 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "of" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical/old, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, +/obj/machinery/rnd/production/protolathe/offstation, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "og" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, +/obj/machinery/door/window/right/directional/west{ + state_open = 1 + }, +/obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "oh" = ( @@ -4103,53 +3934,21 @@ /obj/machinery/washing_machine, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"oi" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass, -/obj/item/stack/sheet/glass, -/obj/item/stock_parts/matter_bin, -/obj/item/stock_parts/scanning_module{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) "oj" = ( -/obj/structure/table, -/obj/item/stock_parts/manipulator, -/obj/item/stock_parts/capacitor, -/obj/item/stock_parts/micro_laser, -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) -"ok" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical/old, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) -"ol" = ( -/obj/effect/decal/cleanable/dirt, +"om" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/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/ancientstation/delta/rnd) -"on" = ( -/obj/machinery/door/airlock/highsecurity, -/obj/structure/alien/weeds, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "oldstation-aisat" +/obj/machinery/power/energy_accumulator/tesla_coil, +/obj/machinery/camera/autoname/directional/north{ + status = 0 }, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) +/turf/open/floor/plating, +/area/ruin/space/ancientstation/beta/supermatter) "oo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -4169,6 +3968,31 @@ /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"or" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/effect/decal/remains/human{ + pixel_y = -4; + pixel_x = -4 + }, +/obj/item/paper/fluff/ruins/oldstation/survivor_note{ + pixel_x = 17; + pixel_y = 12 + }, +/obj/item/organ/internal/cyberimp/arm/item_set/toolset{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/organ/internal/cyberimp/cyberlink/nt_low, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plating{ + initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" + }, +/area/ruin/space/ancientstation/delta/hall) +"ot" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/composters, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "ou" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -4183,17 +4007,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"ow" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/light/small/broken/directional/west, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) "oy" = ( /obj/structure/table, /obj/item/tank/internals/oxygen, @@ -4206,42 +4019,15 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) -"oB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/glass, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) "oD" = ( -/obj/effect/decal/cleanable/xenoblood/xgibs/core, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) -"oE" = ( -/obj/item/stack/rods, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) -"oF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/effect/decal/cleanable/glass, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) "oG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/xenoblood, +/obj/structure/table, +/obj/machinery/cell_charger, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) "oH" = ( @@ -4256,13 +4042,6 @@ }, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) -"oJ" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/maintenance, -/obj/effect/spawner/random/trash/garbage, -/obj/structure/broken_flooring/corner/directional/west, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/medbay) "oK" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/east, @@ -4299,6 +4078,9 @@ icon_state = "medium" }, /obj/structure/broken_flooring/side/directional/south, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) "oQ" = ( @@ -4360,6 +4142,17 @@ }, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) +"pd" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/machinery/door/window/brigdoor/right/directional/east, +/obj/machinery/computer/upload/borg{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "pf" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/machinery/portable_atmospherics/pump, @@ -4372,6 +4165,16 @@ /obj/structure/broken_flooring/corner/directional/north, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/hall) +"pg" = ( +/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/duct, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "ph" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/mirror/directional/north, @@ -4380,6 +4183,9 @@ /obj/machinery/power/apc/auto_name/directional/east, /obj/effect/mapping_helpers/apc/no_charge, /obj/structure/cable, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) "pi" = ( @@ -4450,10 +4256,22 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/wall/rust, /area/ruin/space/ancientstation/charlie/kitchen) +"py" = ( +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/obj/machinery/vending/hydroseeds{ + onstation = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "pz" = ( /obj/structure/rack, /obj/effect/decal/cleanable/dirt, -/obj/item/card/id/away/old/apc, +/obj/item/card/id/advanced/old{ + trim = /datum/id_trim/away/old/apc; + name = "Engineering Equipment Access" + }, /obj/item/crowbar, /obj/item/stock_parts/cell/high, /obj/machinery/door/window/right/directional/east{ @@ -4522,6 +4340,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/item/paper/fluff/ruins/oldstation/distro_guide, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) "qm" = ( @@ -4540,11 +4359,24 @@ /area/ruin/space/ancientstation/beta/supermatter) "qn" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, -/obj/item/paper/fluff/ruins/oldstation/report, /obj/effect/decal/cleanable/dirt, +/obj/structure/closet/emcloset/anchored, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, +/obj/item/storage/box/emergency_eva, /turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/bridge) +/area/ruin/space/ancientstation/charlie/dorms) +"qz" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "qA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -4562,6 +4394,9 @@ "qH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/plumbing/input, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) "qK" = ( @@ -4574,6 +4409,9 @@ /obj/machinery/power/energy_accumulator/grounding_rod, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/supermatter) +"rf" = ( +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "rg" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -4590,6 +4428,11 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"ri" = ( +/obj/structure/cable, +/obj/item/solar_assembly, +/turf/open/floor/iron/solarpanel/airless, +/area/ruin/space/solars/ancientstation/charlie/solars) "rl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -4624,37 +4467,41 @@ /obj/machinery/gravity_generator/main/off, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) -"rN" = ( +"rJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/table/glass, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = 4; - list_reagents = list(/datum/reagent/growthserum=30); - name = "Experimental solution"; - renamedByPlayer = 1; - pixel_y = 8 - }, -/obj/item/reagent_containers/cup/bottle{ - pixel_x = -4; - list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); - name = "Solution for Molly"; - renamedByPlayer = 1 - }, -/obj/item/reagent_containers/dropper{ - pixel_x = -7; - pixel_y = 10 +/obj/machinery/camera/autoname/directional/west{ + status = 0 }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) +"rQ" = ( +/obj/structure/closet/crate/medical{ + opened = 1 }, -/turf/open/floor/iron/white/textured_edge, -/area/ruin/space/ancientstation/delta/biolab) +/obj/item/skillchip/bonsai, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "rR" = ( /obj/effect/decal/cleanable/generic, /obj/item/stack/rods, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"rS" = ( +/obj/machinery/door/airlock/engineering{ + name = "Gravity Generator" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/gravity) "rT" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -4702,6 +4549,26 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"sh" = ( +/obj/item/radio/intercom/directional/south{ + freerange = 1; + frequency = 1447; + listening = 0; + name = "Private Channel" + }, +/obj/item/radio/intercom/directional/east{ + freerange = 1; + name = "Uncommon Channel"; + frequency = 1363 + }, +/obj/item/radio/intercom/directional/north{ + freerange = 1; + listening = 0; + name = "Custom Channel" + }, +/obj/structure/ai_core/deactivated, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "si" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, @@ -4712,6 +4579,25 @@ /obj/structure/chair, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"sm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/sec) +"sn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "sq" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /obj/structure/cable, @@ -4769,11 +4655,9 @@ "sJ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/sink/kitchen/directional/west{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink"; - has_water_reclaimer = 0 - }, +/obj/structure/table, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) "sL" = ( @@ -4784,15 +4668,21 @@ /area/ruin/space/ancientstation/delta/hall) "sM" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old{ - dir = 1 - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 8 }, +/obj/machinery/computer/security{ + dir = 1 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"sO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/chem_master/condimaster, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "sP" = ( /obj/machinery/space_heater, /turf/open/floor/plating/rust, @@ -4817,8 +4707,24 @@ }, /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/all_access, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) +"ta" = ( +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/engine/airless, +/area/ruin/space/ancientstation/beta/supermatter) +"tc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "td" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, @@ -4831,9 +4737,38 @@ }, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"tk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/mob_spawn/ghost_role/human/oldexplorer, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) +"tm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/alien/drone, +/obj/machinery/duct, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "tr" = ( /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"tu" = ( +/obj/structure/grille/broken, +/obj/item/shard{ + icon_state = "medium" + }, +/obj/effect/mapping_helpers/broken_floor, +/obj/item/stack/rods, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "tv" = ( /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, @@ -4857,6 +4792,19 @@ "tC" = ( /turf/closed/mineral/gold, /area/space/nearstation) +"tH" = ( +/obj/machinery/door/airlock/engineering/glass, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "tJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -4876,13 +4824,44 @@ /area/ruin/space/ancientstation/charlie/kitchen) "ua" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, +/obj/machinery/computer/records/security, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"ue" = ( +/obj/machinery/door/airlock/research{ + name = "Research and Development" + }, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) +"uh" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/layer4, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) +"ui" = ( +/obj/effect/decal/cleanable/shreds, +/obj/structure/alien/weeds, +/obj/structure/closet/crate/secure/science{ + req_access = list("away_science") + }, +/obj/item/transfer_valve, +/obj/item/raw_anomaly_core/bluespace, +/obj/item/raw_anomaly_core/random, +/obj/item/clothing/suit/toggle/labcoat/science, +/obj/item/reagent_containers/cup/soda_cans/dr_gibb, +/obj/item/mmi/posibrain, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "uj" = ( /turf/closed/wall/r_wall, /area/ruin/space/ancientstation/delta/proto) @@ -4928,6 +4907,13 @@ /obj/structure/cable, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"ur" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/duct, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "uu" = ( /obj/structure/table/glass, /obj/structure/closet/mini_fridge{ @@ -4979,6 +4965,10 @@ }, /turf/open/floor/engine/n2, /area/ruin/space/ancientstation/beta/atmos) +"uE" = ( +/obj/machinery/portable_atmospherics/canister/water_vapor, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/hall) "uG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -5069,14 +5059,34 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"vt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/research{ + name = "Research and Development" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "vy" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) "vA" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/biolab) +"vD" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/sleeper, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "vE" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -5109,17 +5119,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) -"vM" = ( -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external/ruin{ - name = "Engineering External Access" - }, -/turf/open/floor/plating, -/area/ruin/space/ancientstation/charlie/engie) "vO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet/directional/south, @@ -5210,6 +5209,19 @@ /obj/item/ammo_box/a762, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"wh" = ( +/obj/machinery/door/airlock/engineering/glass, +/obj/machinery/door/poddoor{ + id = "ancient" + }, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/engie) "wi" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/command{ @@ -5234,6 +5246,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, +/obj/machinery/camera/autoname/directional/south{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/biolab) "wn" = ( @@ -5286,33 +5301,23 @@ "wD" = ( /turf/closed/mineral/uranium, /area/space/nearstation) -"wE" = ( -/obj/machinery/door/airlock/engineering{ - name = "Supermatter Chamber" - }, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/supermatter) -"wF" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/botanical_waste, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hydro) "wG" = ( /obj/effect/spawner/structure/window/hollow/middle, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hydro) -"wK" = ( -/obj/machinery/computer/pandemic{ - machine_stat = 1 +"wI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/science{ + name = "Artificial Program Core Room" }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/structure/alien/weeds, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "oldstation-aisat" }, -/turf/open/floor/iron/white/textured_edge, -/area/ruin/space/ancientstation/delta/biolab) +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/hall) "wL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -5320,11 +5325,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) -"wO" = ( -/obj/machinery/growing/soil, -/obj/machinery/light/small/directional/south, -/turf/open/floor/grass, -/area/ruin/space/ancientstation/charlie/hydro) "wS" = ( /obj/item/stack/rods, /obj/machinery/atmospherics/components/unary/vent_scrubber{ @@ -5333,6 +5333,31 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"wT" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/machinery/door/window/brigdoor/right/directional/east, +/obj/machinery/computer/upload/ai{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) +"wU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 1 + }, +/obj/structure/table, +/obj/structure/window/reinforced/survival_pod/spawner/directional/west, +/obj/item/stack/sheet/iron/fifty, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "xb" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, @@ -5343,21 +5368,21 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) -"xj" = ( -/obj/machinery/door/airlock/science{ - name = "Biolab" - }, +"xo" = ( +/obj/item/storage/medkit/ancient, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/item/paper/fluff/ruins/oldstation/protosleep{ + default_raw_text = "*Prototype Sleeper*

We have deliverted the lastest in medical technology to the medical bay for your use." + }, /obj/structure/cable, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/no_charge, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ dir = 4 }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/biolab) +/obj/structure/table/reinforced/rglass, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "xr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -5385,40 +5410,82 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/sec) +"xw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/atmos/glass{ + name = "Station Atmospherics" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/atmos) "xD" = ( /obj/effect/decal/cleanable/dirt, /obj/item/stack/rods, /obj/structure/broken_flooring/pile/directional/south, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/dorms) +"xF" = ( +/obj/structure/table/optable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) +"xG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/north, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/botanical_waste, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "xH" = ( /obj/effect/decal/cleanable/generic, /obj/structure/cable, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"xM" = ( -/obj/machinery/door/window/right/directional/east{ - req_access = list("away_general") - }, -/turf/open/floor/engine, -/area/ruin/space/ancientstation/delta/biolab) "xP" = ( /obj/machinery/light/small/directional/east, /obj/structure/alien/weeds, /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/iron/dark, /area/ruin/space/ancientstation/delta/ai) +"xQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/seeds/potato, +/obj/item/seeds/poppy, +/obj/item/seeds/wheat, +/obj/item/seeds/carrot, +/obj/item/seeds/harebell, +/obj/item/seeds/ambrosia, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/item/seeds/grape, +/obj/item/seeds/wheat/rice, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "xS" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/hall) +"xY" = ( +/turf/template_noop, +/area/space/nearstation) "ye" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"yf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "yj" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -5444,23 +5511,17 @@ /obj/structure/sign/warning/biohazard, /turf/closed/wall/rust, /area/ruin/space/ancientstation/delta/biolab) -"yu" = ( -/obj/machinery/door/airlock/engineering/glass, -/obj/machinery/door/poddoor{ - id = "ancient" - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/engie) "yx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"yz" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "yE" = ( /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/airalarm/all_access, @@ -5472,8 +5533,17 @@ "yF" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/duct, +/obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) +"yG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/alien/weeds, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/hall) "yO" = ( /obj/structure/rack, /obj/item/storage/bag/ore, @@ -5514,6 +5584,31 @@ /obj/machinery/light/broken/directional/east, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"zc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) +"zj" = ( +/obj/machinery/door/airlock/science{ + name = "Biolab" + }, +/obj/machinery/door/firedoor/closed, +/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, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/biolab) "zl" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, @@ -5535,20 +5630,6 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/atmos) -"zn" = ( -/obj/machinery/door/airlock/engineering{ - name = "Gravity Generator" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/diagonal, -/area/ruin/space/ancientstation/beta/gravity) "zp" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ @@ -5560,6 +5641,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) +"zq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/hall) "zr" = ( /obj/effect/spawner/structure/window/hollow/reinforced/end{ dir = 8 @@ -5676,19 +5765,16 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"Ap" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/ruin/space/solars/ancientstation/charlie/solars) "Ar" = ( /obj/structure/transit_tube_pod{ dir = 4; anchored = 0 }, -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, -/obj/structure/cable, /turf/template_noop, /area/space/nearstation) "Au" = ( @@ -5702,6 +5788,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ dir = 10 }, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) "Ax" = ( @@ -5754,6 +5843,14 @@ /obj/structure/mirror/directional/east, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/charlie/hall) +"AS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "AV" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -5803,10 +5900,6 @@ }, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) -"Bs" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/engine/o2, -/area/ruin/space/ancientstation/beta/atmos) "Bt" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -5827,16 +5920,6 @@ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" }, /area/ruin/space/ancientstation/delta/hall) -"Bv" = ( -/obj/machinery/door/airlock/research{ - name = "Research and Development" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/machinery/door/firedoor/closed, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) "By" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/monitor, @@ -5863,6 +5946,18 @@ /obj/structure/cable, /turf/template_noop, /area/space/nearstation) +"BD" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Station Atmospherics" + }, +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/atmos) "BH" = ( /obj/item/solar_assembly, /obj/structure/cable, @@ -5878,10 +5973,28 @@ /obj/machinery/duct, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"BN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/mob_spawn/ghost_role/human/oldcmo, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) "BP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"BQ" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "BX" = ( /obj/effect/decal/cleanable/glass, /obj/structure/cable, @@ -5899,12 +6012,27 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) +"Ca" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/door/airlock/external/ruin{ + name = "Engineering External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "Cc" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 4 }, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) "Ci" = ( @@ -5912,6 +6040,7 @@ name = "Engineering External Access" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) "Cj" = ( @@ -5928,6 +6057,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) "Cq" = ( @@ -5943,6 +6073,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"CJ" = ( +/obj/structure/closet/emcloset/anchored, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/hall) "CK" = ( /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/cup/beaker/oldstation, @@ -5952,6 +6086,14 @@ /obj/effect/decal/cleanable/glass/plasma, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"CQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 4 + }, +/obj/machinery/computer/crew, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "CR" = ( /obj/machinery/power/smes{ input_level = 5000; @@ -5982,25 +6124,6 @@ /obj/effect/spawner/structure/window/hollow/middle, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/kitchen) -"Dd" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human{ - pixel_y = -4; - pixel_x = -4 - }, -/obj/item/paper/fluff/ruins/oldstation/survivor_note{ - pixel_x = 17; - pixel_y = 12 - }, -/obj/item/organ/internal/cyberimp/arm/item_set/toolset{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/organ/internal/cyberimp/cyberlink/nt_high, -/turf/open/floor/plating{ - initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" - }, -/area/ruin/space/ancientstation/delta/hall) "Df" = ( /obj/structure/grille/broken, /turf/open/floor/plating/airless, @@ -6033,6 +6156,20 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) +"Ds" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/autolathe, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) +"Dv" = ( +/obj/machinery/door/airlock/highsecurity, +/obj/structure/alien/weeds, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "oldstation-aisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "Dw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6051,6 +6188,15 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"Dy" = ( +/obj/structure/closet/crate/bin, +/obj/effect/spawner/random/trash/garbage, +/obj/effect/spawner/random/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/all_access, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "DJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch/directional/south, @@ -6069,16 +6215,16 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) -"DW" = ( +"DX" = ( +/obj/item/clothing/mask/breath/medical, +/turf/template_noop, +/area/template_noop) +"Ed" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/filingcabinet/chestdrawer{ - pixel_y = 3 - }, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/white/textured_edge, -/area/ruin/space/ancientstation/delta/biolab) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/modular_computer/preset/id, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "Eg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6095,6 +6241,12 @@ /obj/structure/chair, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"ED" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/rnd/destructive_analyzer, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "EE" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, @@ -6189,26 +6341,27 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"Fd" = ( +"EZ" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/iron/cafeteria, -/area/ruin/space/ancientstation/charlie/kitchen) -"Ff" = ( -/obj/structure/table/glass, -/obj/item/storage/medkit/ancient, /obj/effect/decal/cleanable/dirt, -/obj/item/paper/fluff/ruins/oldstation/protosleep{ - default_raw_text = "*Prototype Sleeper*

We have deliverted the lastest in medical technology to the medical bay for your use." - }, /obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/effect/mapping_helpers/apc/no_charge, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) +"Fa" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/textured_edge{ + dir = 1 }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) +/area/ruin/space/ancientstation/delta/biolab) +"Fd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/iron/cafeteria, +/area/ruin/space/ancientstation/charlie/kitchen) "Fh" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle, /turf/open/floor/plating, @@ -6218,6 +6371,14 @@ /obj/machinery/space_heater, /turf/open/floor/plating/rust, /area/ruin/space/ancientstation/delta/hall) +"Fn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/disease2/incubator, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "Fo" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/glass, @@ -6262,6 +6423,13 @@ /obj/item/stack/rods, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"FE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/alien/drone, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "FH" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/machinery/portable_atmospherics/scrubber, @@ -6359,6 +6527,12 @@ }, /turf/open/floor/plating/rust, /area/ruin/space/ancientstation/charlie/hall) +"Gh" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/gibs/old, +/mob/living/basic/alien, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "Gi" = ( /obj/machinery/portable_atmospherics/canister/plasma, /obj/effect/decal/cleanable/dirt, @@ -6388,6 +6562,11 @@ /obj/structure/closet/firecloset/full, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"Gv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/mecha_part_fabricator, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "Gz" = ( /turf/closed/wall/rust, /area/ruin/space/ancientstation/delta/hall) @@ -6395,26 +6574,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"GJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "GK" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Storage Room" }, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/hall) -"GM" = ( -/obj/machinery/door/airlock/science{ - name = "Biolab" - }, -/obj/machinery/door/firedoor/closed, -/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, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/biolab) "GN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -6474,6 +6643,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white/side, /area/ruin/space/ancientstation/delta/proto) +"Ho" = ( +/obj/structure/table/reinforced/rglass, +/obj/item/surgery_tray, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "Hp" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ @@ -6492,8 +6666,13 @@ /area/ruin/space/ancientstation/charlie/hall) "Hr" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/card/id/away/old/robo, /obj/effect/decal/cleanable/glass, +/obj/item/card/id/advanced/old{ + trim = /datum/id_trim/away/old/robo; + registered_name = "Ash Holm"; + name = "Ash Holm"; + assignment = "Charlie Station Roboticist" + }, /turf/open/floor/plating{ initial_gas_mix = "co2=6;o2=16;n2=82;TEMP=293.15" }, @@ -6505,6 +6684,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) +"Hx" = ( +/obj/structure/transit_tube{ + dir = 4; + anchored = 0 + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, +/turf/template_noop, +/area/space/nearstation) "HA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/yellow/half/contrasted, @@ -6512,6 +6705,7 @@ /area/ruin/space/ancientstation/beta/atmos) "HI" = ( /obj/machinery/light/small/directional/west, +/obj/structure/mop_bucket/janitorialcart, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/hall) "HJ" = ( @@ -6599,6 +6793,22 @@ }, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"Id" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/ruins/oldstation/damagereport, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/communications, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) +"Ih" = ( +/obj/structure/alien/weeds, +/obj/item/robot_suit/prebuilt, +/obj/structure/alien/weeds, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "Ii" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/north, @@ -6610,6 +6820,10 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"Im" = ( +/obj/structure/curtain, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/ancientstation/delta/biolab) "Ip" = ( /obj/effect/decal/cleanable/dirt, /obj/item/kitchen/fork{ @@ -6652,16 +6866,11 @@ /obj/effect/turf_decal/tile/green/half/contrasted{ dir = 1 }, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hydro) -"IL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/south, -/obj/effect/decal/cleanable/dirt, -/mob/living/basic/alien/drone, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/hall) "IM" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6672,6 +6881,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"IR" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/broken/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "IT" = ( /obj/machinery/power/solar, /obj/structure/cable, @@ -6691,19 +6908,10 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"IY" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/mapping_helpers/airalarm/all_access, -/obj/structure/table_frame, -/obj/item/shard{ - icon_state = "medium" - }, -/obj/item/defibrillator, -/obj/effect/turf_decal/tile/blue/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/airless, -/area/ruin/space/ancientstation/beta/medbay) +"IZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/mineral/random, +/area/space/nearstation) "Ja" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -6725,11 +6933,31 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"Jc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) "Jd" = ( /obj/structure/transit_tube{ anchored = 0 }, /obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 6 + }, /turf/template_noop, /area/space/nearstation) "Jf" = ( @@ -6740,6 +6968,15 @@ /obj/structure/lattice, /turf/template_noop, /area/space/nearstation) +"Jj" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/structure/filingcabinet/chestdrawer{ + pixel_y = 3 + }, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "Jo" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -6767,6 +7004,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/white/textured_large, /area/ruin/space/ancientstation/delta/biolab) +"Jv" = ( +/obj/structure/cable, +/obj/structure/broken_flooring/side/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/hall) "Jx" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 @@ -6921,6 +7164,32 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/mining) +"Kj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/mob/living/basic/alien/drone, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) +"Ks" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/alien/weeds, +/mob/living/basic/alien, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) +"Kt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) +"Ku" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "Kv" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/oven/range, @@ -6945,6 +7214,15 @@ /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/hall) +"KD" = ( +/obj/machinery/door/airlock/highsecurity, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) +"KF" = ( +/obj/item/shard, +/turf/template_noop, +/area/template_noop) "KG" = ( /obj/machinery/light/directional/east, /obj/structure/table/reinforced, @@ -6988,6 +7266,30 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"KQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/greenglow, +/obj/structure/table, +/obj/item/cultivator{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/shovel/spade, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) +"KR" = ( +/obj/machinery/door/airlock/engineering{ + name = "Supermatter Chamber" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/supermatter) +"KU" = ( +/obj/structure/cable, +/turf/template_noop, +/area/space/nearstation) "KV" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/light_switch/directional/west, @@ -6996,6 +7298,21 @@ /obj/item/paper/guides/jobs/engi/gravity_gen, /turf/open/floor/iron/diagonal, /area/ruin/space/ancientstation/beta/gravity) +"KZ" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/item/kirbyplants{ + icon_state = "plant-25" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/textured_edge{ + dir = 8 + }, +/area/ruin/space/ancientstation/delta/biolab) +"Lc" = ( +/turf/closed/wall/rust, +/area/space/nearstation) "Le" = ( /obj/machinery/door/airlock/science, /obj/effect/decal/cleanable/dirt, @@ -7078,8 +7395,23 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/freezer/fridge/open, /obj/machinery/light/small/directional/north, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"LD" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, +/turf/open/floor/iron/white/textured_edge{ + dir = 8 + }, +/area/ruin/space/ancientstation/delta/biolab) "LG" = ( /obj/item/shard{ icon_state = "medium" @@ -7189,10 +7521,33 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"MC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/ancientstation/delta/biolab) +"MG" = ( +/obj/machinery/door/airlock/highsecurity, +/obj/structure/alien/weeds, +/obj/structure/cable, +/obj/effect/decal/cleanable/xenoblood/xtracks, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "oldstation-aisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "MH" = ( /obj/structure/girder/displaced, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"MI" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "MM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -7221,8 +7576,14 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/machinery/duct, +/obj/effect/decal/cleanable/blood/drip, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"MW" = ( +/obj/structure/alien/weeds, +/mob/living/basic/alien/drone, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "MY" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -7246,6 +7607,17 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/supermatter) +"Nj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) "Np" = ( /obj/effect/decal/cleanable/xenoblood/xtracks{ dir = 10 @@ -7275,19 +7647,33 @@ dir = 8 }, /area/ruin/space/ancientstation/delta/biolab) -"NB" = ( -/obj/item/shard, -/obj/effect/decal/cleanable/glass, -/obj/structure/table_frame, +"NC" = ( +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 1 + }, +/obj/item/kirbyplants{ + icon_state = "plant-25" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) "NE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hall) +"NF" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/hall) +/area/ruin/space/ancientstation/delta/rnd) "NG" = ( /turf/closed/wall, /area/ruin/space/ancientstation/delta/biolab) @@ -7305,6 +7691,27 @@ /obj/item/toy/seashell, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/charlie/hall) +"NN" = ( +/obj/structure/rack, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/brown/anticorner/contrasted{ + dir = 1 + }, +/obj/item/pickaxe/drill, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/obj/item/pickaxe/drill, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/mining) +"NQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/computer/apc_control, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "NU" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/textured_half, @@ -7338,15 +7745,18 @@ dir = 8 }, /area/ruin/space/ancientstation/delta/biolab) +"Of" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/rnd/production/circuit_imprinter/offstation, +/obj/item/reagent_containers/dropper, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "Om" = ( /obj/effect/decal/cleanable/oil/slippery, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) -"Os" = ( -/obj/structure/door_assembly/door_assembly_eng, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/supermatter) "Ox" = ( /turf/closed/wall, /area/ruin/space/ancientstation/charlie/storage) @@ -7378,6 +7788,17 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/charlie/hall) +"OJ" = ( +/mob/living/basic/alien/drone, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/item/shard{ + icon_state = "small" + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "OM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7391,10 +7812,6 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/biolab) -"OQ" = ( -/obj/structure/girder, -/turf/open/floor/plating/airless, -/area/ruin/space/ancientstation/beta/medbay) "OR" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/side/directional/north, @@ -7429,6 +7846,11 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"OW" = ( +/obj/structure/alien/weeds, +/mob/living/basic/alien/queen, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "Pa" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7442,6 +7864,10 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"Pc" = ( +/obj/structure/girder, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/hall) "Pd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7570,14 +7996,16 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) -"PD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/bridge) +"PE" = ( +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/disease2/centrifuge, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "PG" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -7601,6 +8029,43 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"PL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) +"PQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/science{ + name = "Artificial Program Core Room" + }, +/obj/machinery/door/firedoor, +/obj/structure/alien/weeds, +/obj/structure/cable, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "oldstation-aisat" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/hall) +"PR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/kitchen/directional/west{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "old sink"; + has_water_reclaimer = 0 + }, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "PS" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -7610,18 +8075,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/hall) -"PZ" = ( -/obj/item/kirbyplants{ - icon_state = "plant-25" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, +"Qb" = ( +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/growing/tray, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/white/textured, -/area/ruin/space/ancientstation/delta/biolab) +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) "Qh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7634,6 +8093,9 @@ /obj/structure/cable, /turf/open/floor/engine/airless, /area/ruin/space/ancientstation/beta/supermatter) +"Qj" = ( +/turf/open/floor/iron/white/textured_large, +/area/ruin/space/ancientstation/delta/biolab) "Ql" = ( /obj/machinery/door/airlock, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ @@ -7645,9 +8107,24 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hall) +"Qr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "Qs" = ( /turf/closed/mineral/gibtonite, /area/space/nearstation) +"QB" = ( +/obj/machinery/door/airlock/research{ + name = "Research and Development" + }, +/obj/machinery/door/firedoor, +/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/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "QC" = ( /obj/machinery/atmospherics/components/unary/passive_vent/layer2{ dir = 8 @@ -7655,6 +8132,15 @@ /obj/structure/lattice, /turf/template_noop, /area/space/nearstation) +"QG" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/basic/alien/drone, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) +"QH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall, +/area/ruin/space/ancientstation/beta/medbay) "QK" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -7713,6 +8199,29 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/engie) +"Rb" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/green/half/contrasted, +/obj/machinery/growing/tray, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) +"Rc" = ( +/obj/machinery/door/airlock/science{ + name = "Biolab" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/biolab) "Rf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -7740,6 +8249,18 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) +"Rs" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/stack/sheet/iron/fifty, +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/sheet/glass, +/obj/item/stack/sheet/glass, +/turf/open/floor/iron/white, +/area/ruin/space/ancientstation/delta/rnd) "Rt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/safety_internals/directional/north, @@ -7794,6 +8315,23 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) +"RQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/door/firedoor/closed, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/obj/machinery/door/airlock/medical/glass{ + name = "Medical Bay"; + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/medbay) "RV" = ( /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/east, @@ -7807,6 +8345,7 @@ "RX" = ( /obj/machinery/door/airlock/external/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating, /area/ruin/space/ancientstation/beta/mining) "Sb" = ( @@ -7834,6 +8373,18 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/hall) +"Sq" = ( +/obj/item/shard, +/obj/machinery/atmospherics/components/binary/pump/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, +/obj/structure/broken_flooring/singular/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/hall) "Sr" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/green/half/contrasted, @@ -7856,6 +8407,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) "Sz" = ( @@ -7903,19 +8455,6 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/charlie/hall) -"SQ" = ( -/obj/effect/decal/cleanable/shreds, -/obj/structure/alien/weeds, -/obj/structure/closet/crate/secure/science{ - req_access = list("away_science") - }, -/obj/item/transfer_valve, -/obj/item/raw_anomaly_core/bluespace, -/obj/item/raw_anomaly_core/random, -/obj/item/clothing/suit/toggle/labcoat/science, -/obj/item/reagent_containers/cup/soda_cans/dr_gibb, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "ST" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -7927,22 +8466,23 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) -"SV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/research{ - name = "Research and Development" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/obj/machinery/duct, -/turf/open/floor/iron, -/area/ruin/space/ancientstation/delta/rnd) "SZ" = ( /turf/closed/mineral/bscrystal, /area/space/nearstation) "Td" = ( /turf/closed/mineral/random, /area/ruin/space/ancientstation/beta/hall) +"Tf" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Mining Equipment" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/beta/mining) "Ti" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -7988,6 +8528,26 @@ "Tu" = ( /turf/open/floor/plating/rust, /area/ruin/space/ancientstation/beta/hall) +"Tv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) +"Tw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/door/airlock/external/ruin{ + name = "External Access" + }, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/engie) "Tx" = ( /obj/structure/closet/radiation, /obj/item/clothing/suit/utility/radiation, @@ -8032,6 +8592,10 @@ }, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) +"TQ" = ( +/obj/structure/broken_flooring/corner/directional/west, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/medbay) "TX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -8059,6 +8623,16 @@ /obj/structure/cable, /turf/open/floor/iron/solarpanel/airless, /area/ruin/space/solars/ancientstation/charlie/solars) +"Uh" = ( +/obj/machinery/power/supermatter_crystal/shard, +/obj/structure/closet/crate/engineering{ + name = "supermatter shard crate"; + secure = 1; + locked = 1; + icon_state = "engi_secure_crate" + }, +/turf/open/floor/iron/white/textured, +/area/ruin/space/ancientstation/delta/proto) "Uj" = ( /obj/structure/girder, /turf/closed/mineral/random, @@ -8073,6 +8647,9 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) +"Um" = ( +/turf/closed/mineral/random, +/area/template_noop) "Un" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/light_switch/directional/west{ @@ -8087,20 +8664,38 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) -"Up" = ( -/obj/structure/closet/crate/medical, -/obj/item/skillchip/bonsai, -/obj/item/circuitboard/machine/sleeper, -/turf/open/floor/plating/airless, +"Uq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/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/ancientstation/delta/rnd) +"Ut" = ( +/obj/machinery/defibrillator_mount/loaded/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/operating{ + dir = 1 + }, +/turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) "Uu" = ( /turf/closed/mineral/plasma, /area/space/nearstation) +"Uv" = ( +/obj/structure/door_assembly/door_assembly_eng, +/obj/machinery/door/firedoor, +/turf/open/floor/plating/airless, +/area/ruin/space/ancientstation/beta/supermatter) "UB" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, /obj/machinery/power/apc/auto_name/directional/north, /obj/effect/mapping_helpers/apc/no_charge, +/obj/machinery/camera/autoname/directional/north{ + status = 0 + }, /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) "UG" = ( @@ -8122,9 +8717,44 @@ "UJ" = ( /turf/open/floor/iron/white/textured, /area/ruin/space/ancientstation/delta/proto) +"UK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/mob_spawn/ghost_role/human/oldchef, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) +"UN" = ( +/obj/structure/cable, +/obj/machinery/power/solar, +/turf/open/floor/iron/solarpanel/airless, +/area/ruin/space/solars/ancientstation/charlie/solars) "UP" = ( /turf/closed/mineral/random, /area/space/nearstation) +"UQ" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/table, +/obj/machinery/door/window/brigdoor/right/directional/east, +/obj/machinery/computer/aifixer{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) +"UR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/ruins/oldstation/report, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/modular_computer/preset/command, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/bridge) "UV" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -8146,6 +8776,28 @@ /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/hall) +"Ve" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/hydro) +"Vh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/duct, +/obj/item/stack/cable_coil{ + amount = 1 + }, +/turf/open/floor/plating, +/area/ruin/space/ancientstation/charlie/hall) "Vk" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -8161,12 +8813,35 @@ /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"Vq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "Vu" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/engie) +"Vv" = ( +/obj/machinery/door/airlock/engineering{ + name = "Gravity Generator" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/mapping_helpers/airlock/access/all/away/general, +/turf/open/floor/iron/diagonal, +/area/ruin/space/ancientstation/beta/gravity) "Vw" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -8179,6 +8854,18 @@ /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/iron/white, /area/ruin/space/ancientstation/delta/rnd) +"VG" = ( +/obj/structure/alien/weeds, +/obj/machinery/recharge_station, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) +"VL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/bot_assembly/hygienebot, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/rnd) "VT" = ( /obj/effect/decal/cleanable/dirt, /obj/item/shard/plasma{ @@ -8193,6 +8880,11 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/engine, /area/ruin/space/ancientstation/delta/biolab) +"VZ" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "Wd" = ( /obj/effect/decal/cleanable/xenoblood/xtracks{ dir = 5 @@ -8228,18 +8920,29 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/beta/atmos) -"Ws" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/alien/weeds, -/mob/living/basic/alien, -/turf/open/floor/iron/dark, -/area/ruin/space/ancientstation/delta/ai) "Wu" = ( /obj/machinery/duct, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"Wv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/item/storage/backpack/duffelbag, +/obj/effect/spawner/random/clothing/backpack, +/obj/effect/spawner/random/clothing/backpack, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/charlie/dorms) +"Ww" = ( +/obj/structure/alien/weeds, +/mob/living/basic/alien/drone, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "WA" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -8299,6 +9002,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/hall) +"Xl" = ( +/obj/machinery/computer/old, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "Xt" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/diagonal, @@ -8309,6 +9016,15 @@ }, /turf/open/floor/plating, /area/ruin/space/ancientstation/delta/rnd) +"Xx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 + }, +/obj/machinery/disease2/diseaseanalyser, +/turf/open/floor/iron/white/textured_edge, +/area/ruin/space/ancientstation/delta/biolab) "Xy" = ( /obj/structure/alien/egg/burst, /obj/effect/decal/cleanable/insectguts, @@ -8339,6 +9055,15 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"XI" = ( +/obj/effect/turf_decal/tile/blue/half/contrasted{ + dir = 8 + }, +/obj/machinery/light/small/broken/directional/west, +/obj/structure/table_frame, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "XJ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -8377,10 +9102,10 @@ /area/ruin/space/ancientstation/beta/gravity) "XX" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 1 }, +/obj/machinery/computer/warrant, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/sec) "XY" = ( @@ -8399,6 +9124,13 @@ }, /turf/open/floor/iron/cafeteria, /area/ruin/space/ancientstation/charlie/kitchen) +"Yc" = ( +/obj/structure/alien/weeds, +/obj/machinery/camera/autoname/directional/west{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "Yg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -8490,11 +9222,6 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/charlie/bridge) -"YH" = ( -/obj/structure/lattice, -/obj/item/stack/rods, -/turf/template_noop, -/area/space/nearstation) "YJ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -8514,6 +9241,12 @@ /obj/structure/sign/poster/contraband/lamarr, /turf/closed/wall/rust, /area/ruin/space/ancientstation/delta/biolab) +"YV" = ( +/obj/machinery/door/window/right/directional/east{ + req_access = list("away_general") + }, +/turf/open/floor/engine, +/area/ruin/space/ancientstation/delta/biolab) "YW" = ( /turf/open/floor/iron/textured_half, /area/ruin/space/ancientstation/beta/supermatter) @@ -8522,23 +9255,18 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/ruin/space/ancientstation/charlie/hall) -"Zb" = ( +"Za" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/old, -/obj/item/paper/fluff/ruins/oldstation/damagereport, /obj/effect/decal/cleanable/dirt, +/obj/machinery/biogenerator, /turf/open/floor/iron, -/area/ruin/space/ancientstation/charlie/bridge) +/area/ruin/space/ancientstation/charlie/hydro) "Zc" = ( /obj/effect/spawner/structure/window/hollow/reinforced/middle{ dir = 4 }, /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) -"Ze" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/open/floor/engine/n2, -/area/ruin/space/ancientstation/beta/atmos) "Zg" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible/layer2{ @@ -8551,6 +9279,10 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating/rust, /area/ruin/space/ancientstation/delta/hall) +"Zq" = ( +/obj/item/tank/internals/anesthetic, +/turf/template_noop, +/area/template_noop) "Zs" = ( /obj/effect/decal/cleanable/dirt, /obj/item/wrench, @@ -8565,6 +9297,34 @@ "Zt" = ( /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/rnd) +"Zx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = -4; + list_reagents = list(/datum/reagent/consumable/nutriment/peptides=30); + name = "Solution for Molly"; + renamedByPlayer = 1 + }, +/obj/item/reagent_containers/cup/bottle{ + pixel_x = 4; + list_reagents = list(/datum/reagent/growthserum=30); + name = "Experimental solution"; + renamedByPlayer = 1; + pixel_y = 8 + }, +/obj/item/extrapolator, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/dropper{ + pixel_x = -7; + pixel_y = 10 + }, +/turf/open/floor/iron/white/textured, +/area/ruin/space/ancientstation/delta/biolab) "ZA" = ( /obj/effect/spawner/structure/window/hollow/end{ dir = 1 @@ -8595,6 +9355,25 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"ZU" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/mob/living/basic/alien, +/obj/structure/cable, +/turf/open/floor/iron, +/area/ruin/space/ancientstation/delta/hall) +"ZV" = ( +/obj/structure/alien/weeds, +/obj/machinery/camera/autoname/directional/east{ + status = 0 + }, +/turf/open/floor/iron/dark, +/area/ruin/space/ancientstation/delta/ai) "ZY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, @@ -9576,8 +10355,8 @@ aa aa aa aa -aa -aa +lV +dy aa aa aa @@ -9640,7 +10419,7 @@ aa aa aa aa -aa +DX aa aa aa @@ -9707,8 +10486,8 @@ aa aa aa aa -aa -aa +KF +Zq aa aa aa @@ -9765,15 +10544,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Ck +Ck +AK +bF +kT +AK +AK +GJ +rf aa aa aa @@ -9831,15 +10610,15 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +Ck +NC +IR +yz +Qr +Dy +XI +iX +AK aa aa aa @@ -9897,15 +10676,15 @@ UP Td aa dF +Ck +Xl +Qr +VZ +yz +Qr +Qr +xF AK -AK -AK -bF -lV -AK -AK -aa -aa aa UP UP @@ -9964,14 +10743,14 @@ Uj fT gO AK -ow -IY -NB -oE -nC +vD +uh +dE +qz +MI +Qr +Ut Ck -aa -aa UP UP Uu @@ -10030,15 +10809,15 @@ jE bH hJ AK -Up -bq -oB -oF -oJ -lW -YH -Jg -UP +rQ +Qr +zc +Qr +TQ +Qr +xF +tu +IZ UP UP Uu @@ -10096,22 +10875,22 @@ sA bI je Ck -Ff +xo dD kb eH -nD -AK -aa -aa +yf +BQ +Ho +QH Jg aa aa UP UP Yp -lY -nv +BD +xw mH mH kX @@ -10119,9 +10898,9 @@ kA kL le pp -mH +er bJ -aa +Um UP UP aa @@ -10164,12 +10943,12 @@ mY AK Ck rr -iy +RQ vd Ck -OQ +Ck Bz -kQ +Pc kQ kQ gJ @@ -10177,7 +10956,7 @@ Ax Ax kQ jO -nw +Jv gf mH ko @@ -10186,7 +10965,7 @@ Dp Wp lf mH -UP +Lc UP wD wD @@ -10221,10 +11000,10 @@ Md rG Md zp -zn +Vv eA gw -bw +rS gz PS gi @@ -10243,7 +11022,7 @@ oV nQ BX pc -nx +Sq pf bJ TB @@ -10291,7 +11070,7 @@ FT RV CR sA -zJ +zq mY KC nf @@ -10368,9 +11147,9 @@ Vl Vl Zc SK -Os +Uv Lm -wE +KR SK Df SK @@ -10378,11 +11157,11 @@ gJ kQ kQ bJ -Bs +av Lh Gi pv -Ze +hc mH nr aa @@ -10556,9 +11335,9 @@ SZ UP jE mW -mV +ay Vl -ES +om NU YW NU @@ -10574,7 +11353,7 @@ Hj Ci tr Sy -Jg +dH aa aa aa @@ -10640,7 +11419,7 @@ JL Vl Lj GR -Jg +dH aa aa aa @@ -10654,9 +11433,9 @@ Ua dH Ua aa -aa -aa -aa +UN +dH +Ua aa aa aa @@ -10706,7 +11485,7 @@ vO SK Jg Jg -Jg +dH aa aa aa @@ -10719,10 +11498,10 @@ Jg Ua my IT -aa -aa -aa -aa +Jg +Ua +dH +UN aa aa aa @@ -10762,7 +11541,7 @@ HI FK sP Vl -Sk +ta QT Ns Ul @@ -10772,7 +11551,7 @@ Sb Df Jg Jg -Jg +dH aa aa aa @@ -10786,9 +11565,9 @@ IT dH BH aa -aa -aa -aa +Ua +my +ri aa aa aa @@ -10838,7 +11617,7 @@ LG rm UP Jg -aa +dH aa aa aa @@ -10852,9 +11631,9 @@ Jg dH Jg aa -aa -aa -aa +Jg +dH +Jg aa aa aa @@ -10904,7 +11683,7 @@ rm rm UP Jg -aa +dH aa aa aa @@ -10918,9 +11697,9 @@ BH dH Ua aa -aa -aa -aa +Ua +my +Ua aa aa aa @@ -10946,7 +11725,7 @@ aa aa aa iT -jV +NN yO mL mN @@ -10970,7 +11749,7 @@ rm rm Jg Jg -aa +dH aa aa aa @@ -10984,9 +11763,9 @@ Ua my Ua aa -aa -aa -aa +Ua +dH +Ua aa aa aa @@ -11036,7 +11815,7 @@ Jg Jg Jg Jg -aa +dH aa aa aa @@ -11050,9 +11829,9 @@ IT dH Ua aa -aa -aa -aa +Ua +my +Ua aa aa aa @@ -11102,7 +11881,7 @@ aa Jg aa Jg -aa +dH aa aa aa @@ -11116,9 +11895,9 @@ Jg my Jg aa -aa -aa -aa +Jg +my +Jg aa aa aa @@ -11148,7 +11927,7 @@ mB mG cm gh -mM +Tf gi mZ mw @@ -11180,16 +11959,16 @@ dH my dH my +Ap +dH +my +my Ua aa aa aa aa aa -aa -aa -aa -aa "} (40,1,1) = {" aa @@ -11248,9 +12027,9 @@ Jg dH Jg aa -aa -aa -aa +Jg +dH +Jg aa aa aa @@ -11314,9 +12093,9 @@ Ua dH Ua aa -aa -aa -aa +UN +my +Ua aa aa aa @@ -11356,7 +12135,7 @@ aa aa aa fB -vM +Ca fB aa aa @@ -11380,9 +12159,9 @@ Ua my Ua aa -aa -aa -aa +Ua +my +Ua aa aa aa @@ -11446,9 +12225,9 @@ Ua dH IT aa -aa -aa -aa +Ua +dH +UN aa aa aa @@ -11479,7 +12258,7 @@ aa aa aa kQ -zJ +zq mV jE aa @@ -11512,9 +12291,9 @@ Jg dH Jg aa -aa -aa -aa +Jg +dH +Jg aa aa aa @@ -11554,7 +12333,7 @@ eI eI fb fD -kH +Tw gV Vu eI @@ -11578,9 +12357,9 @@ Ua my Ua aa -aa -aa -aa +Ua +dH +Ua aa aa aa @@ -11643,10 +12422,10 @@ Jg Ua my IT -aa -aa -aa -aa +Jg +UN +dH +Ua aa aa aa @@ -11710,9 +12489,9 @@ IT dH IT aa -aa -aa -aa +UN +dH +Ua aa aa aa @@ -11934,8 +12713,8 @@ aa aa aa aa -aa -aa +aT +aT aT aT hi @@ -11949,9 +12728,9 @@ eI dl dl eI -fG +tH gn -yu +wh gX eI eI @@ -12000,9 +12779,9 @@ aa aa aa aa -aT -aT bb +uE +CJ aA Mu Gd @@ -12024,7 +12803,7 @@ ih FV cW FV -FV +rJ bQ aT oh @@ -12081,7 +12860,7 @@ UV UV eP fh -cP +Nj Pa tz fh @@ -12103,9 +12882,9 @@ aa aa aa aa -UP aa aa +UP aa aa aa @@ -12139,7 +12918,7 @@ as as as hi -FV +AS jJ bZ ey @@ -12166,6 +12945,8 @@ kM aG nk nk +aG +aG aa aa Uu @@ -12178,8 +12959,6 @@ aa aa aa aa -aa -aa "} (55,1,1) = {" aa @@ -12199,7 +12978,7 @@ aa as as dW -YF +NQ aV YF bj @@ -12213,7 +12992,7 @@ IB qc eQ xb -wF +py gI hr Mh @@ -12231,6 +13010,8 @@ gZ kN kD mz +qn +eT nk aG aa @@ -12244,8 +13025,6 @@ aa aa aa aa -aa -aa "} (56,1,1) = {" aa @@ -12279,7 +13058,7 @@ do qc Vk dR -dp +Qb gI Kv ht @@ -12297,6 +13076,8 @@ bN bN pi pk +bN +bN ns aG UP @@ -12310,8 +13091,6 @@ aa aa aa aa -aa -aa "} (57,1,1) = {" aa @@ -12340,12 +13119,12 @@ sq FV jJ wG -dp +ob dR dR dQ dR -wO +Rb gI LA hu @@ -12363,6 +13142,8 @@ bN kO bN lr +bN +tk pm mc UP @@ -12376,8 +13157,6 @@ aa aa aa aa -aa -aa "} (58,1,1) = {" aa @@ -12395,7 +13174,7 @@ aa aa aa am -PD +Ed aJ bi dc @@ -12406,10 +13185,10 @@ Oz FV jJ wG -dp +Ve dR -ep -eR +eq +Za dR Sr Yj @@ -12429,6 +13208,8 @@ bN bN bN pl +bN +bN mc mc UP @@ -12442,8 +13223,6 @@ aa aa aa aa -aa -aa "} (59,1,1) = {" aa @@ -12461,21 +13240,21 @@ aa aa aa am -Zb +Id aK bi dk bz bz bz -dL +PL UV cp wG dq dR -eq -bC +xQ +KQ OU Sr gt @@ -12495,6 +13274,8 @@ Aa kP bT kp +bN +BN xD mc UP @@ -12508,8 +13289,6 @@ aa aa aa aa -aa -aa "} (60,1,1) = {" aa @@ -12527,7 +13306,7 @@ aa aa aa am -qn +UR aL aI ei @@ -12538,10 +13317,10 @@ zr zy OT wG -dp +ob dR -er -jX +ot +sO dR Sr Ss @@ -12561,6 +13340,8 @@ kE bN pj bN +bN +bN po nk UP @@ -12574,8 +13355,6 @@ aa aa aa aa -aa -aa "} (61,1,1) = {" aa @@ -12604,12 +13383,12 @@ sq cq OT wG -dp +Ve dR dR dQ dR -wO +Rb pw Yk lx @@ -12627,6 +13406,8 @@ bN ln bN kp +bN +UK pk Fh aa @@ -12640,8 +13421,6 @@ aa aa aa aa -aa -aa "} (62,1,1) = {" aa @@ -12675,7 +13454,7 @@ dr gE dO dR -dp +Qb gY hx td @@ -12693,6 +13472,8 @@ bN bN bN bN +bN +bN ns aG aa @@ -12706,8 +13487,6 @@ aa aa aa aa -aa -aa "} (63,1,1) = {" aa @@ -12727,7 +13506,7 @@ aa as as BY -hV +CQ aX hV bn @@ -12737,7 +13516,7 @@ bR rU ey cQ -lH +xG hI eS gF @@ -12759,6 +13538,8 @@ QQ jB pV jP +dn +Wv aG aG aa @@ -12772,8 +13553,6 @@ aa aa aa aa -aa -aa "} (64,1,1) = {" aa @@ -12826,8 +13605,8 @@ aG nk nk aG -aa -aa +nk +aG aa aa aa @@ -12933,7 +13712,7 @@ cg hi Mf KM -FV +iY du FV Ka @@ -12947,8 +13726,8 @@ cq mh FV hj -FV -ia +iY +Vh FV hi lQ @@ -13081,7 +13860,7 @@ bd eJ cW ia -FV +rJ hi aa aa @@ -13337,7 +14116,7 @@ eV fs fO fO -fO +sm hB hX im @@ -13395,7 +14174,7 @@ aa aa aa Ar -ZZ +Hx aa eJ eJ @@ -13460,7 +14239,7 @@ aa aa ZZ aa -HK +xY aa aa aa @@ -13526,7 +14305,7 @@ aa aa aa aa -HK +KU aa aa aa @@ -13729,7 +14508,7 @@ sg bE bE zL -UP +zL bE bE Cp @@ -13796,7 +14575,7 @@ bE Yg Fo Hr -Dd +or Gz Rt bE @@ -13855,7 +14634,7 @@ aa aa aa bE -En +Tv RD cX Gz @@ -13873,7 +14652,7 @@ Gr Gz lB jr -GH +tc bE aa aa @@ -14003,7 +14782,7 @@ Hb oU yE dw -cD +sn jr od Gz @@ -14175,26 +14954,26 @@ aa aa ad ad -ag +VG aM cC bh -cz -cz -cz +pd +wT +UQ ad ad aa bE cD -Ao +ur wx di eE fx -kw +Ku gR -ca +ED Mw zG hY @@ -14240,26 +15019,26 @@ aa aa aa ad +Ih af -ag aB ag ag ag cG cZ -SQ +ui ad bE bE -dG +Kj Ao wx +Rs kw -eF oG gG -nN +QG oe Mw ca @@ -14310,7 +15089,7 @@ ad ad ad ad -bo +KD ad ad ad @@ -14318,11 +15097,11 @@ ad ad df bE -cD +EZ ov wx ec -fa +kw kq gM oH @@ -14374,16 +15153,16 @@ aa ad ag aH -ag +Yc cH ag ag ag db ag -on +Dv df -dg +wI cD Ao wx @@ -14392,10 +15171,10 @@ kw oI lF hS -zG +Of Xv -ca SI +Vq ip iF DJ @@ -14442,30 +15221,30 @@ ag ap aC dd -ao +MW ge hL ld lZ -mj +MG nL -nV +PQ oo MS -Bv +gj Eg jL mk -ca +NF jL ca -ok +Kt ca ea NZ ca mo -jc +ue ST cD Iu @@ -14508,30 +15287,30 @@ ad ad ad ad -bo +KD ad ad ad ad ad -df +yG Gz En Ao -SV +vt SM yF mI nS nS nS -ol +Uq Ke rV ir lT Ke -jd +QB QR wC Hl @@ -14571,13 +15350,13 @@ aa aa ad ah -ao +Ww aD dB ag ai jC -aq +jw aN ad bE @@ -14585,10 +15364,10 @@ bE op Ao wx -di +wU oD og -lF +nw iq eB wx @@ -14598,7 +15377,7 @@ Ps bD bD bD -ST +Jc cD uj Ii @@ -14643,20 +15422,20 @@ ai ai ai ag -de +OW ag ad aa bE oq -IL +tm bD +Ds kw -fu -hE +OJ gP kw -oi +VL bD QO lM @@ -14717,9 +15496,9 @@ bE En Ao wx +Gv kw -fv -lF +gK gQ kw oj @@ -14786,7 +15565,7 @@ bD eD fw Vy -kw +PR jW sJ bD @@ -14799,7 +15578,7 @@ bD Yr cD uj -mm +Uh KG uj kU @@ -14900,14 +15679,14 @@ aa aa aa ad -ao -ag +MW +ZV aC aN ag ai xP -ag +ZV dB ad aa @@ -14920,7 +15699,7 @@ Jp rh OM OM -vU +pg QR rg QR @@ -14970,7 +15749,7 @@ ad ad ad ad -bo +KD ad ad ad @@ -14979,10 +15758,10 @@ ad aa bE ou -En +Tv jx Xz -gD +FE nP oK sL @@ -14992,7 +15771,7 @@ nT Wk Se uJ -nW +ZU nY Yh od @@ -15035,10 +15814,10 @@ aa ad ar aE -lq -ag +Gh +aq gk -Ws +Ks vX ad aa @@ -15052,7 +15831,7 @@ NG GX GX yr -xj +Rc rp rp rp @@ -15168,7 +15947,7 @@ aa ad ad ad -bA +sh ad ad ad @@ -15179,7 +15958,7 @@ Vb yj Fi YO -wK +PE Jq UG GX @@ -15245,14 +16024,14 @@ bE bE bE GX -DW +Fn rl FW GX NG -GM +zj md -xM +YV Go Yl rC @@ -15311,7 +16090,7 @@ aa aa aa vA -rN +Xx Pg zI PA @@ -15377,17 +16156,17 @@ aa aa aa vA -PZ -Ob -Ob -EH -Ob -HN -HJ -NA -Ob -Ob -Ay +Jj +MC +MC +MC +MC +Qj +Im +Qj +MC +MC +Fa vA aa aa @@ -15442,19 +16221,19 @@ aa aa aa aa -vJ -ON -ON -NG -GX -NG -ON -GX -GX -NG -ON -ON -WM +vA +Zx +KZ +LD +EH +Ob +HN +HJ +NA +LD +Ob +Ay +vA aa aa aa @@ -15508,19 +16287,19 @@ aa aa aa aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +vJ +ON +ON +NG +GX +NG +ON +GX +GX +NG +ON +ON +WM aa aa aa diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm index 83bcd0cfc87b..12e55043d40d 100644 --- a/_maps/map_files/Blueshift/Blueshift.dmm +++ b/_maps/map_files/Blueshift/Blueshift.dmm @@ -607,12 +607,6 @@ /obj/effect/spawner/liquids_spawner, /turf/open/floor/lowered/iron/pool/cobble/side, /area/station/common/pool) -"agJ" = ( -/obj/effect/turf_decal/stripes{ - dir = 9 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "agL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -7428,9 +7422,8 @@ /turf/open/floor/iron/dark, /area/station/security/prison/upper) "bwW" = ( -/obj/structure/flora/bush/jungle/b/style_2, -/obj/structure/flora/bush/flowers_pp, /obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/grass, /area/station/hallway/primary/upper) "bwY" = ( @@ -14713,13 +14706,6 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/plating, /area/station/hallway/secondary/construction) -"cMo" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/rock/pile/jungle/style_4, -/turf/open/misc/asteroid, -/area/station/hallway/primary/upper) "cMq" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -15093,10 +15079,8 @@ /turf/open/floor/wood, /area/station/commons/dorms/room5) "cQg" = ( -/obj/effect/turf_decal/stripes{ - dir = 6 - }, -/turf/open/floor/plating, +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/carpet/blue, /area/station/maintenance/port/upper) "cQn" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ @@ -19591,12 +19575,6 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/wall, /area/station/medical/power_station) -"dKI" = ( -/obj/structure/flora/bush/jungle/b/style_2, -/obj/structure/flora/bush/flowers_pp/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "dKK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -23502,10 +23480,7 @@ /turf/open/floor/mineral/plastitanium/red, /area/station/science/robotics/lab) "ezM" = ( -/obj/effect/turf_decal/stripes{ - dir = 10 - }, -/turf/open/floor/plating, +/turf/open/floor/carpet/blue, /area/station/maintenance/port/upper) "ezN" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -24330,6 +24305,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/xmastree, /turf/open/floor/iron, /area/station/hallway/primary/upper) "eGI" = ( @@ -25824,13 +25800,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/rd, /turf/open/floor/iron/dark, /area/station/science/server) -"eUH" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/ocean/glowweed, -/turf/open/misc/asteroid, -/area/station/hallway/primary/upper) "eUL" = ( /obj/structure/chair/pew/left{ dir = 4 @@ -34090,8 +34059,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "gBx" = ( -/obj/structure/flora/bush/jungle, -/obj/structure/flora/bush/flowers_yw/style_3, /obj/structure/window/reinforced/fulltile, /turf/open/floor/grass, /area/station/hallway/primary/upper) @@ -36395,6 +36362,7 @@ }, /obj/machinery/status_display/ai/directional/east, /obj/machinery/light/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/upper) "hbb" = ( @@ -38491,12 +38459,6 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/plating, /area/station/maintenance/department/security/greater) -"hwe" = ( -/obj/structure/flora/bush/jungle/a/style_2, -/obj/structure/flora/bush/flowers_yw/style_2, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "hwi" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -45004,10 +44966,6 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/service/bar) -"iKG" = ( -/obj/item/circuitboard/mecha/ripley/main, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "iKI" = ( /obj/structure/railing{ dir = 6 @@ -45178,12 +45136,6 @@ "iMc" = ( /turf/closed/wall/r_wall, /area/station/common/pool) -"iMf" = ( -/obj/structure/flora/bush/jungle/c/style_3, -/obj/structure/flora/bush/flowers_br, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "iMj" = ( /obj/structure/closet, /obj/effect/turf_decal/delivery, @@ -46072,12 +46024,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/blue, /area/station/command/captain_dining) -"iWF" = ( -/obj/structure/flora/bush/jungle/c/style_3, -/obj/structure/flora/bush/flowers_yw/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "iWJ" = ( /obj/structure/bed, /obj/item/bedsheet/medical, @@ -50012,12 +49958,6 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/iron/dark, /area/station/common/gaskiosk) -"jJh" = ( -/obj/structure/flora/bush/jungle/c/style_3, -/obj/structure/flora/bush/flowers_pp/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "jJi" = ( /obj/structure/railing, /obj/effect/turf_decal/stripes, @@ -53306,12 +53246,6 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/workout) -"knr" = ( -/obj/structure/flora/bush/jungle/a, -/obj/structure/flora/bush/flowers_br/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "knt" = ( /obj/structure/chair/pew/right{ dir = 8 @@ -55174,12 +55108,6 @@ dir = 8 }, /area/station/science) -"kER" = ( -/obj/structure/flora/bush/jungle/a/style_3, -/obj/structure/flora/bush/flowers_br/style_2, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "kFd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ @@ -58494,6 +58422,10 @@ dir = 9 }, /area/station/hallway/secondary/exit) +"loV" = ( +/obj/effect/spawner/xmastree, +/turf/open/floor/stone, +/area/station/hallway/primary/central) "loW" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -65819,11 +65751,11 @@ }, /area/station/common/wrestling/arena) "mMJ" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) +/obj/structure/flora/bush/jungle/a/style_2, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 }, -/obj/structure/flora/rock/pile/jungle/style_5, -/turf/open/misc/asteroid, +/turf/open/floor/grass, /area/station/hallway/primary/upper) "mMK" = ( /obj/machinery/shieldgen, @@ -66112,13 +66044,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) -"mPK" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/item/toy/seashell, -/turf/open/misc/asteroid, -/area/station/hallway/primary/upper) "mPL" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/stairs{ @@ -66669,12 +66594,6 @@ }, /turf/open/floor/engine/hull/reinforced, /area/space/nearstation) -"mVh" = ( -/obj/structure/flora/bush/jungle/b, -/obj/structure/flora/bush/flowers_yw, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "mVi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 @@ -73923,12 +73842,8 @@ /turf/open/floor/iron, /area/station/science/ordnance/testlab) "oqO" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/ocean/seaweed, -/mob/living/basic/carp/passive, -/turf/open/misc/asteroid, +/obj/structure/flora/bush/sparsegrass/style_random, +/turf/open/floor/grass, /area/station/hallway/primary/upper) "oqT" = ( /obj/machinery/door/airlock/security/glass{ @@ -78081,11 +77996,7 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "pgY" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/machinery/light/directional/north, -/turf/open/misc/asteroid, +/turf/open/floor/grass, /area/station/hallway/primary/upper) "phg" = ( /obj/structure/closet/emcloset, @@ -78223,9 +78134,8 @@ /turf/open/floor/iron, /area/station/common/wrestling/arena) "pit" = ( -/obj/structure/flora/bush/jungle/c, -/obj/structure/flora/bush/flowers_pp/style_2, /obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/grass, /area/station/hallway/primary/upper) "piw" = ( @@ -80260,12 +80170,6 @@ /mob/living/basic/slime, /turf/open/floor/engine, /area/station/science/xenobiology) -"pCO" = ( -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "pCQ" = ( /obj/effect/turf_decal/delivery, /obj/structure/tank_dispenser, @@ -80509,8 +80413,8 @@ /turf/open/floor/iron, /area/station/tcommsat/computer) "pFO" = ( -/obj/effect/turf_decal/stripes, -/turf/open/floor/plating, +/mob/living/basic/carp/passive, +/turf/open/floor/carpet/blue, /area/station/maintenance/port/upper) "pFS" = ( /obj/item/radio/intercom/directional/north, @@ -81329,12 +81233,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/crew_quarters/dorms) -"pNa" = ( -/obj/effect/turf_decal/stripes{ - dir = 5 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "pNb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -83272,12 +83170,6 @@ }, /turf/open/floor/engine/hull, /area/space/nearstation) -"qiS" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/maintenance/port/upper) "qjb" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/west, @@ -85443,12 +85335,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"qDe" = ( -/obj/structure/flora/bush/jungle/a/style_2, -/obj/structure/flora/bush/flowers_yw/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "qDf" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -88798,12 +88684,8 @@ /turf/open/floor/iron, /area/station/maintenance/department/medical/central) "rko" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/rock/pile/jungle, -/obj/item/toy/seashell, -/turf/open/misc/asteroid, +/obj/structure/flora/bush/flowers_br, +/turf/open/floor/grass, /area/station/hallway/primary/upper) "rkp" = ( /obj/structure/cable, @@ -93522,9 +93404,10 @@ /turf/open/floor/plating, /area/station/security/checkpoint/customs/auxiliary) "sgt" = ( -/obj/structure/flora/bush/jungle/b, -/obj/structure/flora/bush/flowers_br, -/obj/structure/window/reinforced/fulltile, +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/grass, /area/station/hallway/primary/upper) "sgv" = ( @@ -99120,14 +99003,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/command/captain_dining) -"tiA" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/ocean/glowweed, -/mob/living/basic/carp/passive, -/turf/open/misc/asteroid, -/area/station/hallway/primary/upper) "tiD" = ( /obj/machinery/computer/prisoner/management{ dir = 8 @@ -104102,6 +103977,7 @@ }, /obj/machinery/status_display/evac/directional/west, /obj/machinery/light/directional/west, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/upper) "ugJ" = ( @@ -114435,12 +114311,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"wdN" = ( -/obj/structure/flora/bush/jungle/b/style_2, -/obj/structure/flora/bush/flowers_br/style_3, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, -/area/station/hallway/primary/upper) "wdS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -114664,11 +114534,8 @@ /turf/open/floor/plating, /area/station/maintenance/fore/upper) "wfr" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/ocean/longseaweed, -/turf/open/misc/asteroid, +/mob/living/carbon/human/species/monkey, +/turf/open/floor/grass, /area/station/hallway/primary/upper) "wfs" = ( /obj/structure/rack/shelf, @@ -121311,10 +121178,8 @@ /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) "xtV" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/turf/open/misc/asteroid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/r_wall, /area/station/hallway/primary/upper) "xtX" = ( /obj/machinery/door/airlock/external, @@ -122979,15 +122844,6 @@ dir = 1 }, /area/station/science/research) -"xLg" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/rock/pile/jungle/style_3, -/obj/structure/flora/ocean/coral, -/obj/machinery/light/directional/south, -/turf/open/misc/asteroid, -/area/station/hallway/primary/upper) "xLh" = ( /obj/structure/table/wood/fancy/green, /obj/item/flashlight/lamp/green{ @@ -123873,11 +123729,8 @@ /turf/open/floor/grass, /area/station/hallway/primary/central/aft) "xVz" = ( -/obj/effect/spawner/liquids_spawner{ - reagent_list = list(/datum/reagent/water=600) - }, -/obj/structure/flora/rock/style_3, -/turf/open/misc/asteroid, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/closed/wall/r_wall, /area/station/hallway/primary/upper) "xVF" = ( /obj/effect/turf_decal/tile/neutral{ @@ -157198,7 +157051,7 @@ jKx bBd bOT gCJ -gCJ +loV gCJ dGC bGm @@ -217271,11 +217124,11 @@ ulI ulI ulI wMx -agJ -bgP -bgP +pFO ezM -wMx +ezM +ezM +xsa ulI pyO pyO @@ -217528,11 +217381,11 @@ ybT fEG bVe wMx -pCO -ybT -ybT +ezM +ezM +ezM pFO -wMx +xsa oIL pyO vzG @@ -217785,11 +217638,11 @@ wmI wMx aNm aNm -pCO -ybT -iKG -pFO -aNm +ezM +ezM +ezM +ezM +xsa nUr vQK qNG @@ -218042,11 +217895,11 @@ ybT sZG cmY aNm -pNa -qiS -qiS +ezM +pFO +ezM cQg -aNm +xsa ulI kNf pcs @@ -218299,10 +218152,10 @@ aNm flY wMx aNm -aNm -aNm -wMx -aNm +xsa +xsa +xsa +xsa aNm ulI fDI @@ -221982,9 +221835,9 @@ pQF tYT tYT tYT -mzu -mVh -iMf +xVz +gBx +gBx gBx ukH qJk @@ -222240,9 +222093,9 @@ cfl cfl cfl bwW -wfr -cMo -tiA +sgt +pgY +oqO mzu coT gST @@ -222496,11 +222349,11 @@ eRh cfl eLB cfl -kER +gBx rko wfr -xtV -jJh +pgY +gBx cfl cfl gyk @@ -222753,11 +222606,11 @@ eRh mkE wMo wMo -hwe +gBx pgY -xVz -xLg -sgt +pgY +oqO +gBx cfl cfl lcX @@ -223010,11 +222863,11 @@ eRh cfl uGh cfl -wdN +gBx oqO -mPK -xtV -qDe +wfr +pgY +gBx cfl cfl gyk @@ -223269,8 +223122,8 @@ cfl cfl pit mMJ -xtV -eUH +pgY +rko mzu ugc uol @@ -223524,10 +223377,10 @@ pQF akt akt akt -mzu -iWF -knr -dKI +xtV +gBx +gBx +gBx ukH wiK wiK diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 63453f1774a3..82cec3c519f6 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -1540,6 +1540,11 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/textured, /area/station/science/xenobiology) +"ayU" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) "azm" = ( /obj/effect/turf_decal/trimline/dark_blue/filled/line{ dir = 1 @@ -16286,7 +16291,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ - name = "Detective Office Maintenance" + name = "Detective's Office Maintenance" }, /obj/effect/mapping_helpers/airlock/access/any/security/detective, /turf/open/floor/plating, @@ -19516,7 +19521,7 @@ /obj/machinery/door/airlock/maintenance{ name = "Law Office Maintenance" }, -/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/plating, /area/station/service/lawoffice) "gtA" = ( @@ -41633,6 +41638,7 @@ /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, /obj/machinery/door/airlock/security{ name = "Private Interrogation" }, @@ -50031,6 +50037,10 @@ /obj/effect/turf_decal/trimline/red/filled/line, /turf/open/floor/iron/dark, /area/station/security/execution/transfer) +"qoA" = ( +/obj/machinery/firealarm/directional/north, +/turf/open/floor/wood, +/area/station/service/lawoffice) "qoB" = ( /obj/structure/sign/poster/random/directional/south, /obj/effect/spawner/random/structure/crate, @@ -51265,6 +51275,11 @@ /obj/effect/landmark/start/quartermaster, /turf/open/floor/wood, /area/station/command/heads_quarters/qm) +"qJG" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/dark, +/area/station/security/detectives_office) "qKk" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -53549,10 +53564,11 @@ /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, /obj/machinery/door/airlock/service{ name = "Law Office Quarters" }, -/obj/effect/mapping_helpers/airlock/access/any/security/detective, +/obj/effect/mapping_helpers/airlock/access/any/service/lawyer, /turf/open/floor/iron/dark/textured, /area/station/service/lawoffice) "rzs" = ( @@ -59628,6 +59644,10 @@ "txI" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal/incinerator) +"txJ" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/security/detectives_office) "txT" = ( /turf/open/floor/wood/large, /area/station/command/heads_quarters/nt_rep) @@ -71790,6 +71810,10 @@ /obj/machinery/vending/access/command, /turf/open/floor/wood, /area/station/command/meeting_room) +"xrT" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/wood, +/area/station/service/lawoffice) "xrX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -73146,6 +73170,10 @@ /obj/machinery/photocopier, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) +"xOB" = ( +/obj/machinery/firealarm/directional/south, +/turf/open/floor/wood, +/area/station/service/lawoffice) "xOH" = ( /turf/closed/wall/r_wall, /area/station/maintenance/department/engineering/central) @@ -100455,7 +100483,7 @@ mUw mUw xhv mUw -mUw +xOB dIW mUw iua @@ -100971,9 +100999,9 @@ mUw bpe dor dIW -mUw +qoA pVB -mUw +xrT fPN wfE dwJ @@ -101999,9 +102027,9 @@ mHH tbg tFs hjG -hPT +qJG rKe -hPT +ayU fPN fhe dwJ @@ -102511,7 +102539,7 @@ tbg tbg qid tbg -tbg +txJ hjG hPT jUt diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 25569a0663fb..75b2cdf82042 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -374,15 +374,20 @@ /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) "ahr" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral/fourcorners, /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/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, +/obj/effect/mapping_helpers/airlock/unres{ + dir = 8 + }, /turf/open/floor/iron/dark, -/area/station/hallway/primary/central) +/area/station/maintenance/port) "ahD" = ( /obj/structure/displaycase/trophy, /turf/open/floor/wood, @@ -2857,8 +2862,11 @@ pixel_y = 7; pixel_x = -8 }, +/obj/machinery/cassette/adv_cassette_deck{ + pixel_y = 8 + }, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "aWl" = ( /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating/airless, @@ -9014,6 +9022,13 @@ }, /turf/open/floor/iron/white, /area/station/science/robotics/lab) +"dph" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/iron, +/area/station/hallway/primary/central) "dpn" = ( /obj/effect/spawner/random/food_or_drink/donkpockets, /obj/structure/table/glass, @@ -9291,6 +9306,7 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/item/kirbyplants/random, +/obj/machinery/camera/autoname/directional/north, /turf/open/floor/iron/white, /area/station/science/explab) "dtB" = ( @@ -10722,11 +10738,12 @@ /turf/open/floor/iron/white, /area/station/medical/chemistry) "dVR" = ( -/obj/machinery/light/small/directional/north, /obj/machinery/computer/security/telescreen/entertainment/directional/east, /obj/machinery/vending/wardrobe/curator_wardrobe, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "dWd" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -15737,7 +15754,7 @@ "fKG" = ( /obj/effect/landmark/blobstart, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "fKP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -18170,8 +18187,11 @@ /turf/open/floor/wood, /area/station/smithing) "gDv" = ( -/obj/item/kirbyplants, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, /turf/open/floor/iron, /area/station/hallway/primary/central) "gDT" = ( @@ -19525,7 +19545,7 @@ pixel_y = 8 }, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "haE" = ( /obj/structure/mirror/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -20548,6 +20568,10 @@ /obj/machinery/telecomms/bus/preset_four, /turf/open/floor/circuit/telecomms/mainframe, /area/station/tcommsat/server) +"hqF" = ( +/obj/machinery/newscaster/directional/east, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/private) "hqL" = ( /obj/machinery/light_switch/directional/east, /obj/machinery/shower/directional/west{ @@ -23169,7 +23193,7 @@ pixel_x = -4 }, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "ilx" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -26023,13 +26047,12 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "jfa" = ( -/obj/effect/decal/cleanable/cobweb, /obj/structure/table/wood, /obj/machinery/cassette/dj_station{ pixel_y = 12 }, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "jff" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 @@ -29181,9 +29204,6 @@ /turf/open/floor/plating, /area/station/hallway/primary/central) "kir" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/disposalpipe/segment{ @@ -29490,11 +29510,10 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "knK" = ( -/obj/structure/table/wood, -/obj/machinery/cassette/adv_cassette_deck, +/obj/structure/filingcabinet, /obj/machinery/light/small/directional/south, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "knP" = ( /obj/machinery/light/directional/west, /obj/machinery/computer/camera_advanced/base_construction/aux{ @@ -32451,6 +32470,10 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) +"loa" = ( +/obj/machinery/light/floor/has_bulb, +/turf/open/floor/iron/vaporwave, +/area/station/service/library/private) "lof" = ( /obj/structure/window/reinforced/spawner/directional/north{ pixel_y = 1 @@ -32685,7 +32708,7 @@ }, /obj/item/storage/photo_album/library, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "lrZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -34658,10 +34681,9 @@ "maB" = ( /obj/structure/destructible/cult/item_dispenser/archives/library, /obj/item/clothing/under/suit/red, -/obj/effect/decal/cleanable/cobweb, -/obj/item/book/codex_gigas, +/obj/item/book/kindred, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "maF" = ( /obj/structure/closet/secure_closet/nanotrasen_representative, /turf/open/floor/carpet/green, @@ -34770,7 +34792,7 @@ /area/station/security/prison/visit) "mda" = ( /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "mdo" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -47717,6 +47739,9 @@ "qzS" = ( /obj/structure/table/wood, /obj/machinery/newscaster/directional/west, +/obj/machinery/cassette/adv_cassette_deck{ + pixel_y = 8 + }, /turf/open/floor/wood, /area/station/service/library) "qAc" = ( @@ -48625,6 +48650,9 @@ /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/iron, /area/station/hallway/primary/central) "qQu" = ( @@ -49216,20 +49244,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"qZn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance, -/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/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/turf/open/floor/plating, -/area/station/maintenance/port) "qZD" = ( /obj/effect/turf_decal/trimline/blue/filled/corner{ dir = 8 @@ -50281,10 +50295,6 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) -"rur" = ( -/obj/machinery/newscaster/directional/west, -/turf/open/floor/iron/vaporwave, -/area/station/service/library) "rut" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=14.2-Central-CrewQuarters"; @@ -51141,8 +51151,30 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "rIa" = ( -/obj/machinery/photocopier{ - pixel_y = 3 +/obj/structure/table/wood, +/obj/item/device/walkman{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/device/walkman{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/device/walkman{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/item/device/cassette_tape/blank{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/item/device/cassette_tape/blank{ + pixel_y = 3; + pixel_x = 5 + }, +/obj/item/device/cassette_tape/blank{ + pixel_y = 3; + pixel_x = 5 }, /turf/open/floor/wood, /area/station/service/library) @@ -52624,7 +52656,7 @@ }, /obj/item/storage/fancy/candle_box, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "sgc" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -55305,6 +55337,9 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"tdI" = ( +/turf/closed/wall, +/area/station/service/library/private) "tdP" = ( /obj/effect/turf_decal/bot_white/left, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -56464,15 +56499,6 @@ }, /turf/open/floor/iron, /area/station/commons/locker) -"txz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/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/primary/central) "txG" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple/layer2{ dir = 5 @@ -56583,6 +56609,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) "tAH" = ( @@ -59966,7 +59993,7 @@ name = "Forbidden Knowledge" }, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) "uJs" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes, @@ -67389,7 +67416,7 @@ req_access = list("library") }, /turf/open/floor/engine/cult, -/area/station/service/library) +/area/station/service/library/private) "xrf" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -67680,11 +67707,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) -"xxk" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/iron/dark, -/area/station/hallway/primary/central) "xxp" = ( /obj/machinery/airalarm/directional/west, /obj/effect/mapping_helpers/burnt_floor, @@ -69937,8 +69959,9 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, +/obj/effect/landmark/start/librarian, /turf/open/floor/iron/vaporwave, -/area/station/service/library) +/area/station/service/library/private) (1,1,1) = {" aaa @@ -90379,12 +90402,12 @@ nPu mjr nxz ueD -sVY -sVY -sVY -sVY -sVY -pOa +tdI +tdI +tdI +tdI +tdI +tdI hdx cIW pOa @@ -90636,14 +90659,14 @@ tmB wcL yfT klf -sVY +tdI jfa mda -rur +mda knK -pOa +tdI kir -vXH +clp pOa wKe aez @@ -90893,12 +90916,12 @@ inH flQ mjr fUM -sVY +tdI ils ymh +mda aWj -sVY -pOa +tdI sQY nPt qSk @@ -91150,12 +91173,12 @@ tot bsu mjr wih -sVY +tdI maB +loa mda haA -sVY -vXH +tdI sQY tWq pOa @@ -91410,9 +91433,9 @@ qRf xrd fKG mda +mda lrL -sVY -clp +tdI etn ayH pOa @@ -91664,13 +91687,13 @@ sVY sVY sVY sVY -sVY +tdI dVR sfO +hqF uJm -sVY -pOa -qZn +tdI +sQY pOa pOa bMY @@ -91921,12 +91944,12 @@ sVY jPo apB ooP -sVY -sVY -sVY -sVY -sVY -xxk +tdI +tdI +tdI +tdI +tdI +tdI ahr bMY sTe @@ -92183,7 +92206,7 @@ usA jWg tKu bBA -txz +xuS wYe bMY kua @@ -92697,7 +92720,7 @@ wcN uyr fDk vVV -htd +dph tAG gDv oNP diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 363d3383b24f..6b504af71e97 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -345,7 +345,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bF" = ( -/obj/machinery/computer/rdconsole, +/obj/machinery/computer/rdconsole/unlocked, /turf/open/floor/iron, /area/station/science) "bH" = ( diff --git a/_maps/map_files/debug/shiptest.dmm b/_maps/map_files/debug/shiptest.dmm index 48f19b748324..c68625a35fb7 100644 --- a/_maps/map_files/debug/shiptest.dmm +++ b/_maps/map_files/debug/shiptest.dmm @@ -365,7 +365,7 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "bF" = ( -/obj/machinery/computer/rdconsole, +/obj/machinery/computer/rdconsole/unlocked, /turf/open/floor/iron, /area/station/science) "bG" = ( diff --git a/_maps/shuttles/ert_deathsquad.dmm b/_maps/shuttles/ert_deathsquad.dmm new file mode 100644 index 000000000000..1336cff54dfe --- /dev/null +++ b/_maps/shuttles/ert_deathsquad.dmm @@ -0,0 +1,371 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/effect/turf_decal/stripes/red/box, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + dir = 8; + id = "rightdoor" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"b" = ( +/obj/machinery/button/door/directional/east{ + req_access = list(188); + id = "rightdoor" + }, +/obj/machinery/light/red/dim/directional/east, +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"c" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered/deathsquad) +"e" = ( +/turf/open/space/basic, +/area/template_noop) +"f" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1; + name = "tactical chair" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"g" = ( +/obj/machinery/door/poddoor{ + dir = 8; + id = "cockpit" + }, +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered/deathsquad) +"i" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8; + name = "tactical chair" + }, +/obj/machinery/light/red/dim/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"j" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/docking_port/mobile/ert{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered/deathsquad) +"k" = ( +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"l" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + dir = 8; + id = "cockpit" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered/deathsquad) +"m" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"n" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 8; + name = "tactical chair" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"o" = ( +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/machinery/computer/shuttle/ert/deathsquad, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/powered/deathsquad) +"p" = ( +/obj/effect/turf_decal/stripes/red/box, +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + dir = 8; + id = "leftdoor" + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"q" = ( +/obj/machinery/teleport/station, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"r" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered/deathsquad) +"s" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/shuttle/ert/powered/deathsquad) +"u" = ( +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"w" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/red/dim/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"x" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"y" = ( +/obj/effect/turf_decal/caution/red{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"A" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/machinery/button/door/directional/west{ + id = "leftdoor"; + req_access = list(188) + }, +/obj/machinery/light/red/dim/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"B" = ( +/obj/machinery/computer/teleporter{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"C" = ( +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"D" = ( +/obj/item/storage/box/syndie_kit/imp_deathrattle/nanotrasen, +/obj/structure/rack, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"E" = ( +/obj/structure/rack, +/obj/item/stack/cable_coil/five, +/obj/item/weldingtool/experimental, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"F" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "cockpit"; + req_access = list(188) + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"H" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 8 + }, +/obj/effect/turf_decal/caution/stand_clear/red{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"I" = ( +/obj/effect/turf_decal/delivery/red, +/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/elite, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"K" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"N" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"O" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/computer/security, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/powered/deathsquad) +"P" = ( +/obj/machinery/teleport/hub, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"R" = ( +/obj/machinery/door/airlock/hatch{ + id_tag = "infiltrator_bridge"; + name = "Infiltrator Bridge" + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/specops, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"T" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 1 + }, +/obj/machinery/vending/wallmed/directional/north, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"U" = ( +/turf/closed/wall/r_wall/syndicate, +/area/shuttle/ert/powered/deathsquad) +"Y" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/ert/powered/deathsquad) +"Z" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert/deathsquad{ + x_offset = -1; + y_offset = 7 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/powered/deathsquad) + +(1,1,1) = {" +e +e +U +s +U +U +p +U +U +U +e +"} +(2,1,1) = {" +U +U +U +U +N +w +H +A +P +c +r +"} +(3,1,1) = {" +l +O +Y +U +T +C +u +u +q +c +r +"} +(4,1,1) = {" +l +o +f +R +x +D +E +k +B +c +j +"} +(5,1,1) = {" +g +Z +F +U +x +C +u +y +I +c +r +"} +(6,1,1) = {" +U +U +U +U +n +i +m +b +K +c +r +"} +(7,1,1) = {" +e +e +U +s +U +U +a +U +U +U +e +"} diff --git a/_maps/shuttles/ert_dropship-clown.dmm b/_maps/shuttles/ert_dropship-clown.dmm new file mode 100644 index 000000000000..291b37a06098 --- /dev/null +++ b/_maps/shuttles/ert_dropship-clown.dmm @@ -0,0 +1,389 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/chair/comfy/lime{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"b" = ( +/obj/structure/rack, +/obj/item/storage/backpack/duffelbag/clown/cream_pie, +/obj/item/storage/backpack/duffelbag/clown/cream_pie{ + pixel_x = 0; + pixel_y = 9 + }, +/obj/item/storage/backpack/duffelbag/clown/cream_pie{ + pixel_x = 0; + pixel_y = 9 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"e" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{ + x_offset = 0; + y_offset = 10 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"f" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "ert_dropship_bridge-clown"; + req_access = list("cent_general") + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"g" = ( +/obj/machinery/light/directional/west, +/obj/vehicle/sealed/mecha/honker/dark/loaded/not_evil, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"h" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"l" = ( +/obj/machinery/computer/shuttle/ert, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"m" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"p" = ( +/obj/structure/sign/poster/contraband/clown/directional/north, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"r" = ( +/obj/structure/railing{ + dir = 1; + custom_materials = list(/datum/material/bananium = 100) + }, +/obj/vehicle/sealed/car/clowncar{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"s" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"t" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"u" = ( +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"w" = ( +/turf/closed/wall/mineral/bananium, +/area/shuttle/ert/powered) +"x" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"y" = ( +/turf/open/space/basic, +/area/template_noop) +"z" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"A" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_dropship_bridge-clown" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"C" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light/directional/east, +/obj/item/sbeacondrop/clownbomb{ + pixel_x = -4; + pixel_y = 13 + }, +/obj/item/sbeacondrop/clownbomb{ + pixel_x = 7; + pixel_y = 10 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"D" = ( +/mob/living/simple_animal/bot/secbot/honkbot, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"E" = ( +/obj/structure/chair/comfy/beige{ + dir = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"F" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + id = "ert_dropship_bridge-clown" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"G" = ( +/obj/machinery/holopad, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"H" = ( +/obj/structure/chair/comfy/teal{ + dir = 8 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"K" = ( +/obj/structure/table/reinforced, +/obj/item/toy/windup_toolbox{ + pixel_x = 1; + pixel_y = 13 + }, +/obj/item/bikehorn{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/bikehorn{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/bikehorn{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/bikehorn/airhorn{ + pixel_x = -9; + pixel_y = 3 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"M" = ( +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/machinery/door/airlock/bananium/glass, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"N" = ( +/obj/machinery/computer/security, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"O" = ( +/obj/machinery/button/door/directional/south{ + id = "ert_dropship_doors-clown"; + req_access = list("cent_general") + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"P" = ( +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"Q" = ( +/obj/machinery/vending/wallmed/directional/north, +/obj/structure/rack, +/obj/item/pneumatic_cannon/pie/selfcharge, +/obj/item/pneumatic_cannon/pie/selfcharge{ + pixel_x = 6; + pixel_y = -6 + }, +/obj/item/pneumatic_cannon/pie/selfcharge{ + pixel_x = -2; + pixel_y = 1 + }, +/obj/item/pneumatic_cannon/pie/selfcharge{ + pixel_x = -10; + pixel_y = 6 + }, +/obj/item/pneumatic_cannon/pie/selfcharge{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/pneumatic_cannon/pie/selfcharge{ + pixel_x = -6; + pixel_y = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"R" = ( +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"S" = ( +/obj/structure/chair/comfy/carp{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"T" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/poddoor{ + dir = 8; + id = "ert_dropship_doors-clown" + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"U" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"V" = ( +/obj/structure/table/reinforced, +/obj/item/inspector/clown/bananium, +/obj/item/megaphone/clown, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"W" = ( +/obj/structure/railing{ + dir = 1; + custom_materials = list(/datum/material/bananium = 100) + }, +/obj/machinery/portable_atmospherics/canister/helium, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"X" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/turf/open/floor/mineral/bananium, +/area/shuttle/ert/powered) +"Y" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/docking_port/mobile/ert{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) + +(1,1,1) = {" +y +y +w +w +T +T +T +T +T +T +w +w +w +w +y +"} +(2,1,1) = {" +A +A +w +w +p +R +R +R +R +P +r +g +b +h +U +"} +(3,1,1) = {" +F +N +V +w +P +t +E +H +s +P +P +P +D +h +U +"} +(4,1,1) = {" +F +l +z +M +O +w +m +m +w +Q +u +G +P +h +Y +"} +(5,1,1) = {" +F +e +f +w +P +S +a +x +X +P +P +P +P +h +U +"} +(6,1,1) = {" +A +A +w +w +p +R +R +R +R +P +W +C +K +h +U +"} +(7,1,1) = {" +y +y +w +w +T +T +T +T +T +T +w +w +w +w +y +"} diff --git a/_maps/shuttles/ert_dropship-janitor.dmm b/_maps/shuttles/ert_dropship-janitor.dmm new file mode 100644 index 000000000000..d521d1926ae4 --- /dev/null +++ b/_maps/shuttles/ert_dropship-janitor.dmm @@ -0,0 +1,459 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"b" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"c" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"d" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/rack, +/obj/item/watertank/janitor{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/watertank/janitor{ + pixel_x = 1; + pixel_y = 0 + }, +/obj/item/watertank/janitor{ + pixel_x = -5; + pixel_y = -4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"e" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{ + x_offset = 0; + y_offset = 10 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"f" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "ert_dropship_bridge-janitor"; + req_access = list("cent_general") + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"g" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/west, +/obj/structure/closet/crate, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/mob/living/basic/bot/cleanbot, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"h" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"i" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"j" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"l" = ( +/obj/machinery/computer/shuttle/ert, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"m" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"n" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/powered) +"p" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"q" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"r" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/engineering, +/obj/structure/liquid_pump, +/obj/structure/liquid_pump, +/obj/structure/liquid_pump, +/obj/item/wrench/caravan, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"s" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"t" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"u" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"v" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"w" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/powered) +"x" = ( +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"y" = ( +/turf/open/space/basic, +/area/template_noop) +"z" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"A" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_dropship_bridge-janitor" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"C" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"D" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"E" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"F" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + id = "ert_dropship_bridge-janitor" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"G" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"H" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"J" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"K" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -7; + pixel_y = 0 + }, +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 0 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"L" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"M" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/machinery/door/airlock/shuttle/glass, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"N" = ( +/obj/machinery/computer/security, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"O" = ( +/obj/machinery/button/door/directional/south{ + id = "ert_dropship_doors-janitor"; + req_access = list("cent_general") + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"P" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"Q" = ( +/obj/machinery/vending/wallmed/directional/north, +/obj/structure/rack, +/obj/item/storage/medkit{ + pixel_x = 0; + pixel_y = 3 + }, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"R" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"S" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/ert/powered) +"T" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/blue/box, +/obj/machinery/door/poddoor{ + dir = 8; + id = "ert_dropship_doors-janitor" + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"U" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"V" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"W" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"X" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 5 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"Y" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/docking_port/mobile/ert{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) + +(1,1,1) = {" +y +y +w +S +T +T +T +T +T +T +w +w +w +w +y +"} +(2,1,1) = {" +A +A +w +n +p +E +j +j +E +X +r +g +b +h +U +"} +(3,1,1) = {" +F +N +V +w +P +t +t +t +t +x +L +v +D +h +U +"} +(4,1,1) = {" +F +l +z +M +O +w +m +m +w +Q +u +G +c +h +Y +"} +(5,1,1) = {" +F +e +f +w +P +a +a +a +a +x +i +q +d +h +U +"} +(6,1,1) = {" +A +A +w +n +s +R +H +H +R +J +W +C +K +h +U +"} +(7,1,1) = {" +y +y +w +S +T +T +T +T +T +T +w +w +w +w +y +"} diff --git a/_maps/shuttles/ert_dropship.dmm b/_maps/shuttles/ert_dropship.dmm new file mode 100644 index 000000000000..b796890ea2b4 --- /dev/null +++ b/_maps/shuttles/ert_dropship.dmm @@ -0,0 +1,430 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"b" = ( +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"c" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"d" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"e" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{ + x_offset = 0; + y_offset = 10 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"f" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "ert_dropship_bridge"; + req_access = list("cent_general") + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"g" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"h" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"i" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"j" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"l" = ( +/obj/machinery/computer/shuttle/ert, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"m" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"n" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/powered) +"p" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"q" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"r" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"s" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"t" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"u" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"v" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"w" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/powered) +"x" = ( +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"y" = ( +/turf/open/space/basic, +/area/template_noop) +"z" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"A" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_dropship_bridge" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"C" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light/directional/east, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"D" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"E" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"F" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/machinery/door/poddoor/preopen{ + id = "ert_dropship_bridge" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"G" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"H" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"J" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"K" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -7; + pixel_y = 0 + }, +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 0 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"L" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"M" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/machinery/door/airlock/shuttle/glass, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"N" = ( +/obj/machinery/computer/security, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/powered) +"O" = ( +/obj/machinery/button/door/directional/south{ + id = "ert_dropship_doors"; + req_access = list("cent_general") + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"P" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"Q" = ( +/obj/machinery/vending/wallmed/directional/north, +/obj/structure/rack, +/obj/item/storage/medkit{ + pixel_x = 0; + pixel_y = 3 + }, +/obj/effect/turf_decal/stripes/blue, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"R" = ( +/obj/effect/turf_decal/caution/stand_clear/blue{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"S" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/ert/powered) +"T" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/blue/box, +/obj/machinery/door/poddoor{ + dir = 8; + id = "ert_dropship_doors" + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"U" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) +"V" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/powered) +"W" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/powered) +"X" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 5 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert/powered) +"Y" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/obj/docking_port/mobile/ert{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/powered) + +(1,1,1) = {" +y +y +w +S +T +T +T +T +T +T +w +w +w +w +y +"} +(2,1,1) = {" +A +A +w +n +p +E +j +j +E +X +r +g +b +h +U +"} +(3,1,1) = {" +F +N +V +w +P +t +t +t +t +x +L +v +D +h +U +"} +(4,1,1) = {" +F +l +z +M +O +w +m +m +w +Q +u +G +c +h +Y +"} +(5,1,1) = {" +F +e +f +w +P +a +a +a +a +x +i +q +d +h +U +"} +(6,1,1) = {" +A +A +w +n +s +R +H +H +R +J +W +C +K +h +U +"} +(7,1,1) = {" +y +y +w +S +T +T +T +T +T +T +w +w +w +w +y +"} diff --git a/_maps/shuttles/ert_generic.dmm b/_maps/shuttles/ert_generic.dmm new file mode 100644 index 000000000000..b3363c9b2edb --- /dev/null +++ b/_maps/shuttles/ert_generic.dmm @@ -0,0 +1,1970 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ad" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_shuttle_breakroom" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/engineering) +"ao" = ( +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"ap" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"ar" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"as" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/bridge) +"aB" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"aH" = ( +/obj/structure/sign/warning/vacuum/directional/east, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/obj/machinery/light/small/blacklight/directional/east, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"aL" = ( +/obj/machinery/door/airlock/shuttle/glass, +/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, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"aN" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"aR" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"bd" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"bv" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"bx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/landmark/ert_shuttle_spawn, +/obj/machinery/light/warm/dim/directional/west, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"bW" = ( +/obj/machinery/door/airlock/shuttle, +/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, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"ce" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"cq" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/engineering) +"dG" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_x = -7; + pixel_y = 0 + }, +/obj/machinery/recharger{ + pixel_x = 2; + pixel_y = 0 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 1; + pixel_y = 15 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"dX" = ( +/obj/effect/turf_decal/stripes/red/full, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ + dir = 1 + }, +/obj/item/reagent_containers/cup/beaker/cryoxadone{ + pixel_x = 6; + pixel_y = 6 + }, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"dY" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"ee" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"eo" = ( +/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/machinery/power/terminal, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"fH" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/burgundy, +/turf/open/space/basic, +/area/shuttle/ert/cargo) +"fT" = ( +/obj/structure/sign/warning/vacuum/directional/west, +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/obj/machinery/light/small/blacklight/directional/west, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"gf" = ( +/obj/structure/closet/emcloset/anchored, +/obj/item/bodybag/environmental/nanotrasen, +/obj/item/bodybag/environmental/nanotrasen, +/obj/item/bodybag/environmental/nanotrasen, +/obj/item/storage/box/oxygen_candles, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"gl" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/door/poddoor{ + id = "ert_shuttle_cargo_outer" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/cargo) +"gF" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"hd" = ( +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"hu" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/shuttle/ert/cargo) +"hF" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"hJ" = ( +/obj/machinery/door/airlock/shuttle/glass, +/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, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/bridge) +"im" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"iE" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/effect/turf_decal/box/red, +/obj/machinery/portable_atmospherics/canister/anesthetic_mix, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"jw" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/movable/cargo, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"kc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"kl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/warm/dim/directional/east, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"ko" = ( +/obj/structure/closet/crate/solarpanel_small, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"kS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/newscaster/directional/south, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"ln" = ( +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line, +/obj/item/storage/box/smart_metal_foam, +/obj/item/storage/box/smart_metal_foam{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/item/storage/box/smart_metal_foam{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/holosign_creator/atmos, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"lW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 0; + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = -2; + pixel_y = 5 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"mv" = ( +/obj/structure/chair/office/tactical, +/obj/effect/turf_decal/stripes/blue/line{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"mz" = ( +/obj/machinery/door/airlock/shuttle, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"mM" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ert_shuttle_security" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/armory) +"mZ" = ( +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert{ + x_offset = 0; + y_offset = 10 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"nq" = ( +/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/caution/stand_clear/blue{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "ert_shuttle_cargo" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/cargo) +"nt" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"nx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"nC" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"nN" = ( +/obj/machinery/computer/records/security{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"nU" = ( +/obj/structure/rack, +/obj/structure/rack, +/obj/item/storage/box/zipties{ + pixel_x = -7; + pixel_y = 2 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"oT" = ( +/obj/machinery/computer/shuttle/ert, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"oW" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/shuttle/ert/bridge) +"pl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"pm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"pv" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/door/poddoor{ + id = "ert_shuttle_cargo" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/cargo) +"pB" = ( +/obj/structure/table/woodentable, +/obj/item/flashlight/lamp/bananalamp{ + pixel_x = 8; + pixel_y = 17 + }, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/item/food/pie/cream{ + pixel_x = -4; + pixel_y = 0 + }, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"pE" = ( +/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/west, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"pO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"qN" = ( +/obj/machinery/clonepod, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/shuttle/ert/clonerybay) +"qP" = ( +/obj/structure/tank_dispenser, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"qQ" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden/layer2, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"qT" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/folder/blue{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/pen{ + pixel_x = -6; + pixel_y = 6 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 9; + pixel_y = 9 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"qZ" = ( +/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/east, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"rc" = ( +/obj/structure/rack, +/obj/item/stack/sheet/plasteel/twenty{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/stack/sheet/plasteel/twenty{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/stack/rods/fifty{ + pixel_x = 1; + pixel_y = 0 + }, +/obj/item/stack/rods/fifty{ + pixel_x = 3; + pixel_y = -1 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"rM" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/sleeper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"rQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/effect/landmark/ert_shuttle_spawn, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"sR" = ( +/obj/machinery/atmospherics/components/binary/pump/on/supply/hidden/layer4{ + dir = 1; + pixel_x = 0; + pixel_y = 0 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump/on/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"sU" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/vending/wallmed/directional/west, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"tM" = ( +/obj/machinery/computer/cloning{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/shuttle/ert/clonerybay) +"uL" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/port_gen/pacman/super, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"uR" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"vl" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"vm" = ( +/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/shuttle/ert/engineering) +"vo" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert) +"vQ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/power/terminal, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"vT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"wN" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/cargo) +"wO" = ( +/obj/structure/rack, +/obj/item/stack/sheet/mineral/uranium{ + amount = 50 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/item/inducer, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"xb" = ( +/obj/machinery/door/airlock/shuttle/glass, +/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, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"xy" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/rack, +/obj/item/storage/medkit/fire{ + pixel_x = 0; + pixel_y = 12 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 0; + pixel_y = 9 + }, +/obj/item/storage/medkit/brute{ + pixel_x = 0; + pixel_y = 6 + }, +/obj/item/storage/medkit/brute{ + pixel_x = 0; + pixel_y = 3 + }, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"xS" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 6 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"yg" = ( +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"yw" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/item/chair/plastic, +/obj/machinery/light/warm/dim/directional/north, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"yB" = ( +/obj/item/crowbar/large/heavy, +/obj/machinery/light/warm/dim/directional/west, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"yG" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ert_shuttle_clonebay" + }, +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating/airless, +/area/shuttle/ert/clonerybay) +"yJ" = ( +/obj/machinery/flasher/directional/east{ + id = "ert_shuttle_flash" + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/structure/chair, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"yU" = ( +/obj/machinery/computer/aifixer{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/shuttle/ert/clonerybay) +"zy" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ert_shuttle_clonebay" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/clonerybay) +"zC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/rack, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = -1; + pixel_y = 0 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 5; + pixel_y = -1 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/stack/sheet/iron/fifty{ + pixel_x = 1; + pixel_y = 2 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"zX" = ( +/obj/structure/closet/wardrobe/white, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"AL" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/clonerybay) +"AM" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"Bd" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/machinery/computer/crew, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"Bu" = ( +/obj/machinery/light/warm/directional/west, +/obj/machinery/dna_scannernew, +/obj/effect/turf_decal/stripes/end, +/turf/open/floor/mineral/titanium/tiled/purple, +/area/shuttle/ert/clonerybay) +"BE" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"BP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"Cb" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/button/door/directional/east{ + name = "Cargo Hold Blastdoors"; + id = "ert_shuttle_cargo"; + req_access = list("cent_general") + }, +/obj/machinery/door/poddoor{ + id = "ert_shuttle_cargo" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/cargo) +"Cm" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"Cq" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"CD" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = -7; + pixel_y = 23 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_x = -7; + pixel_y = 27 + }, +/obj/machinery/coffeemaker, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 5; + pixel_y = 13 + }, +/obj/item/reagent_containers/cup/glass/mug/nanotrasen{ + pixel_x = 11; + pixel_y = 13 + }, +/obj/item/coffee_cartridge{ + pixel_x = -7; + pixel_y = 9 + }, +/obj/item/coffee_cartridge{ + pixel_x = -7; + pixel_y = 11 + }, +/obj/item/coffee_cartridge{ + pixel_x = -7; + pixel_y = 13 + }, +/obj/item/coffee_cartridge{ + pixel_x = -7; + pixel_y = 15 + }, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"Di" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"Du" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/spawner/directional/north, +/turf/open/floor/plating, +/area/shuttle/ert/medical) +"DB" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"DD" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/ert) +"DK" = ( +/turf/template_noop, +/area/template_noop) +"DP" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/folder/white{ + pixel_x = 6; + pixel_y = 5 + }, +/obj/item/pen/fourcolor{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/box/bodybags, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"EB" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/computer/records/medical, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"EO" = ( +/obj/structure/chair/office/tactical{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"EU" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/cargo) +"Fi" = ( +/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/shuttle/ert/armory) +"Fl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"FI" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/shuttle/ert) +"FL" = ( +/obj/item/storage/box/stingbangs{ + pixel_x = 8; + pixel_y = 42 + }, +/obj/item/storage/box/flashbangs{ + pixel_x = 8; + pixel_y = 34 + }, +/obj/item/storage/box/flashes{ + pixel_x = -7; + pixel_y = 42 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"FX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"GB" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"Hk" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 1; + pixel_y = 15 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 1; + pixel_y = 11 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 1 + }, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"Hl" = ( +/obj/docking_port/mobile/ert{ + dir = 2 + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/cargo) +"Ho" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"Hu" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"Hv" = ( +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/window/brigdoor/right/directional{ + req_access = list("cent_general") + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"HN" = ( +/obj/machinery/computer/apc_control{ + req_access = list("cent_general") + }, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"HZ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"Ie" = ( +/obj/effect/turf_decal/stripes{ + dir = 5 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"Il" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert) +"Iq" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/medical) +"JT" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/cargo) +"JZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/flasher{ + id = "ert_shuttle_flash" + }, +/obj/item/storage/secure/briefcase{ + pixel_x = 0; + pixel_y = 12 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"Ku" = ( +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"KA" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/rack, +/obj/item/storage/medkit/regular{ + pixel_x = 0; + pixel_y = 13 + }, +/obj/item/storage/medkit/regular{ + pixel_x = 0; + pixel_y = 10 + }, +/obj/item/storage/medkit/o2{ + pixel_x = 0; + pixel_y = 7 + }, +/obj/item/storage/medkit/o2{ + pixel_x = 0; + pixel_y = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"KK" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating/airless, +/area/shuttle/ert/medical) +"KL" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/engineering) +"Ln" = ( +/obj/effect/turf_decal/stripes/blue{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"LO" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/box, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"LW" = ( +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs/cable/zipties{ + pixel_x = 7; + pixel_y = 2 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/storage/fancy/donut_box{ + pixel_x = 0; + pixel_y = 16; + open_status = 0 + }, +/obj/item/spess_knife{ + pixel_x = -7; + pixel_y = -3 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"LZ" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"Mp" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/structure/sign/flag/nanotrasen/directional/north, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"Mq" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/rack, +/obj/item/storage/medkit/advanced{ + pixel_x = 0; + pixel_y = 13 + }, +/obj/item/storage/medkit/advanced{ + pixel_x = 0; + pixel_y = 10 + }, +/obj/structure/rack, +/obj/item/storage/medkit/toxin{ + pixel_x = 0; + pixel_y = 7 + }, +/obj/item/storage/medkit/toxin{ + pixel_x = 0; + pixel_y = 4 + }, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"Mu" = ( +/obj/machinery/computer/security, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"MA" = ( +/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/flat_white, +/area/shuttle/ert) +"NV" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"Ot" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "ert_shuttle_bridge"; + name = "Bridge Blastdoors"; + pixel_x = 0; + pixel_y = -12; + req_access = list("cent_general") + }, +/obj/machinery/button/door{ + id = "ert_shuttle_clonebay"; + name = "Cloner Bay Blastdoors"; + pixel_x = -7; + pixel_y = 8; + req_access = list("cent_general") + }, +/obj/machinery/button/door{ + id = "ert_shuttle_security"; + name = "Brig Blastdoors"; + pixel_x = 7; + pixel_y = 8; + req_access = list("cent_general") + }, +/obj/machinery/button/door{ + id = "ert_shuttle_breakroom"; + name = "Breakroom Blastdoors"; + pixel_x = -7; + pixel_y = -2; + req_access = list("cent_general") + }, +/obj/machinery/button/door{ + id = "ert_shuttle_medbay"; + name = "Medbay Blastdoors"; + pixel_x = 7; + pixel_y = -2; + req_access = list("cent_general") + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"ON" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/turf_decal/stripes{ + dir = 10 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"Pt" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/obj/structure/table/optable, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"Ql" = ( +/obj/structure/fireaxecabinet/directional/east, +/obj/machinery/space_heater, +/obj/effect/turf_decal/delivery, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"QQ" = ( +/obj/structure/table/reinforced, +/obj/item/aicard, +/obj/machinery/light/warm/directional/west, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"QX" = ( +/obj/structure/table/reinforced, +/obj/item/stock_parts/cell/hyper{ + pixel_x = 10; + pixel_y = 11 + }, +/obj/item/stock_parts/cell/hyper{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/machinery/light/dim/directional/west, +/obj/machinery/cell_charger, +/obj/item/cargo_teleporter, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"Rg" = ( +/obj/structure/table/reinforced, +/obj/machinery/recharger, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"Rj" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/power/terminal, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/bridge) +"Rq" = ( +/obj/machinery/holopad, +/obj/effect/turf_decal/box/blue, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"RH" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "ert_shuttle_bridge" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/bridge) +"RL" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/computer/atmos_alert, +/turf/open/floor/mineral/titanium/tiled/blue, +/area/shuttle/ert/bridge) +"Tv" = ( +/obj/machinery/atmospherics/components/unary/cryo_cell{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue/opposingcorners, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"UE" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/landmark/ert_shuttle_spawn, +/obj/machinery/light/warm/dim/directional/east, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"UQ" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman/super, +/obj/item/stack/sheet/mineral/uranium/five, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"UX" = ( +/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/blue/opposingcorners, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"VJ" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"Wc" = ( +/obj/structure/chair/office/tactical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/blue{ + dir = 8; + pixel_x = 0; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium/white, +/area/shuttle/ert) +"Wg" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"Wl" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/armory) +"Wu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/shuttle/ert/armory) +"WE" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/computer/operating{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"WP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/reagent_dispensers/foamtank, +/obj/item/extinguisher/advanced{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/extinguisher/advanced{ + pixel_x = 1; + pixel_y = 0 + }, +/obj/item/extinguisher/advanced{ + pixel_x = 7; + pixel_y = 0 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"Xd" = ( +/obj/structure/sign/poster/contraband/missing_gloves/directional/north, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer4, +/turf/open/floor/plating, +/area/shuttle/ert/engineering) +"Xf" = ( +/obj/effect/turf_decal/stripes{ + dir = 9 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock) +"Xm" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/engineering) +"Xq" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/stasis{ + dir = 4 + }, +/obj/machinery/light/warm/directional/west, +/obj/machinery/defibrillator_mount/directional/west, +/obj/item/defibrillator/loaded, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"XG" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_shuttle_medbay" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/medical) +"XH" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/closet/crate/freezer/blood, +/obj/machinery/iv_drip, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"XO" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/machinery/airalarm/directional/north, +/obj/structure/table/reinforced/rglass, +/obj/item/clothing/gloves/latex/surgical, +/obj/item/storage/backpack/duffelbag/med/surgery{ + pixel_x = -1; + pixel_y = 13 + }, +/obj/item/clothing/mask/surgical, +/obj/item/healthanalyzer/advanced, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"XQ" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/light/warm/directional/east, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/clonerybay) +"XS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"XT" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "ert_shuttle_bridge" + }, +/turf/open/floor/plating/airless, +/area/shuttle/ert/bridge) +"Ys" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) +"Yw" = ( +/obj/effect/turf_decal/tile/blue/opposingcorners, +/obj/structure/cable, +/obj/machinery/iv_drip/saline, +/obj/machinery/atmospherics/pipe/smart/manifold/cyan, +/turf/open/floor/mineral/titanium/tiled/white, +/area/shuttle/ert/medical) +"YB" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/power/port_gen/pacman/super, +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shuttle/ert/cargo) +"YD" = ( +/turf/closed/wall/mineral/titanium, +/area/shuttle/ert/airlock) +"YL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium/tiled, +/area/shuttle/ert/cargo) +"Zl" = ( +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/box, +/obj/machinery/button/door/directional/east{ + id = "ert_shuttle_cargo_outer"; + name = "Cargo Hold Blastdoors"; + req_access = list("cent_general") + }, +/obj/machinery/door/poddoor{ + id = "ert_shuttle_cargo_outer" + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/cargo) +"Zn" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/admin/general, +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shuttle/ert/airlock/secondary) +"ZB" = ( +/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/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/obj/machinery/light/warm/dim/directional/west, +/turf/open/floor/catwalk_floor/flat_white, +/area/shuttle/ert) + +(1,1,1) = {" +DK +DK +AL +AL +AL +AL +AL +AL +hF +YD +KL +ad +ad +KL +KL +KL +KL +KL +KL +KL +DK +"} +(2,1,1) = {" +DK +DK +zy +qN +tM +Bu +yU +AL +Xf +fT +KL +Xm +CD +KL +Xd +gf +yB +UQ +aN +cq +DK +"} +(3,1,1) = {" +DK +DK +zy +hd +hd +im +vQ +AL +dY +xS +KL +yw +kS +KL +Hk +HZ +yg +pB +aN +cq +DK +"} +(4,1,1) = {" +DK +DK +yG +zX +DP +XQ +ee +AL +VJ +YD +KL +ao +pl +mz +sR +vm +kl +ar +aN +cq +DK +"} +(5,1,1) = {" +XT +XT +as +oW +as +as +xb +FI +Cq +qP +DD +vo +bW +JT +JT +JT +JT +wN +JT +JT +JT +"} +(6,1,1) = {" +RH +Ot +QQ +RL +NV +as +MA +bx +pm +pm +pE +ZB +MA +JT +QX +ko +wO +YB +uL +wN +EU +"} +(7,1,1) = {" +RH +Mu +vl +HN +Rj +as +MA +bd +Wc +Di +Di +Hu +MA +pv +Fl +XS +FX +XS +YL +gl +fH +"} +(8,1,1) = {" +RH +oT +aB +vT +ce +hJ +MA +mv +qT +LW +dG +Rq +Ys +nq +zC +lW +WP +rc +ln +gl +hu +"} +(9,1,1) = {" +RH +mZ +vl +Bd +nC +as +MA +Ln +EO +EO +EO +ap +MA +Cb +BP +kc +pO +kc +Ho +Zl +fH +"} +(10,1,1) = {" +RH +Ku +LZ +EB +vl +as +Mp +UE +pm +pm +qZ +rQ +MA +JT +aR +jw +Ql +GB +gF +JT +Hl +"} +(11,1,1) = {" +XT +XT +as +oW +as +as +xb +FI +nt +Il +DD +vo +aL +JT +JT +JT +JT +JT +JT +JT +JT +"} +(12,1,1) = {" +DK +DK +mM +nU +FL +nx +Wu +Wl +Zn +BE +Iq +XO +UX +sU +Xq +rM +Wg +Tv +Du +KK +DK +"} +(13,1,1) = {" +DK +DK +mM +Rg +JZ +Fi +eo +Wl +Cm +ON +Iq +Pt +UX +DB +qQ +uR +AM +dX +Du +KK +DK +"} +(14,1,1) = {" +DK +DK +mM +yJ +Hv +bv +nN +Wl +Ie +aH +Iq +WE +XH +Mq +xy +KA +Yw +iE +Du +KK +DK +"} +(15,1,1) = {" +DK +DK +Wl +Wl +Wl +Wl +Wl +Wl +LO +BE +Iq +XG +XG +XG +Iq +XG +XG +XG +Iq +Iq +DK +"} diff --git a/_maps/~monkestation/hunter_events/wonderland.dmm b/_maps/~monkestation/hunter_events/wonderland.dmm index feedc3e24048..fb5e024b2b3a 100644 --- a/_maps/~monkestation/hunter_events/wonderland.dmm +++ b/_maps/~monkestation/hunter_events/wonderland.dmm @@ -7,11 +7,11 @@ dir = 4 }, /obj/item/toy/plush/goatplushie, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "aR" = ( /obj/item/clothing/shoes/costume_2021/doll_shoes, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "bf" = ( /obj/structure/chess/blackrook, @@ -23,7 +23,7 @@ /area/ruin/space/has_grav/wonderland) "bZ" = ( /obj/item/clothing/head/costume_2021/doll_hat, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "cj" = ( /obj/structure/chess/blackbishop, @@ -61,7 +61,7 @@ /area/ruin/space/has_grav/wonderland) "gc" = ( /obj/structure/blood_fountain, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "gw" = ( /obj/structure/chess/blackrook, @@ -70,7 +70,7 @@ "hK" = ( /obj/structure/flora/bush/flowers_br/style_2, /obj/structure/flora/tree/jungle, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "jT" = ( /obj/structure/chess/whiteking, @@ -88,12 +88,12 @@ /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_br/style_2, /mob/living/basic/rabbit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "oC" = ( /obj/structure/chair/wood, /obj/item/clothing/head/collectable/tophat, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "oF" = ( /turf/open/floor/black, @@ -105,7 +105,7 @@ "rr" = ( /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_br/style_2, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "sr" = ( /obj/item/grenade/jack, @@ -122,26 +122,26 @@ /area/ruin/space/has_grav/wonderland) "wY" = ( /mob/living/basic/rabbit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "yW" = ( /obj/structure/flora/bush/flowers_pp/style_2, /obj/item/clothing/under/costume_2021/doll_suit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Av" = ( /obj/structure/flora/bush/flowers_yw, /mob/living/basic/rabbit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "AH" = ( /obj/structure/flora/bush/flowers_yw, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Ck" = ( /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_br, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Cw" = ( /obj/structure/chess/whitebishop, @@ -155,11 +155,11 @@ /area/space) "FO" = ( /obj/structure/flora/tree/jungle, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Gl" = ( /obj/structure/mineral_door/wood, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Gs" = ( /obj/structure/table/wood, @@ -176,7 +176,7 @@ /area/ruin/space/has_grav/wonderland) "Jy" = ( /obj/structure/flora/tree/dead/style_6, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "JP" = ( /obj/structure/chess/whitebishop, @@ -192,11 +192,11 @@ /area/ruin/space/has_grav/wonderland) "Mo" = ( /obj/structure/flora/tree/dead, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Mw" = ( /obj/structure/flora/bush/flowers_br/style_2, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "PU" = ( /obj/structure/chess/redqueen, @@ -206,12 +206,12 @@ "RW" = ( /obj/structure/flora/bush/flowers_pp/style_2, /mob/living/basic/rabbit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Se" = ( /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_pp, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Sy" = ( /turf/open/floor/wood/large, @@ -219,12 +219,12 @@ "Tc" = ( /obj/structure/table/wood, /obj/item/reagent_containers/cup/glass/mug, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "UO" = ( /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_pp/style_2, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Wb" = ( /turf/open/misc/ashplanet/wateryrock{ @@ -241,27 +241,27 @@ /area/ruin/space/has_grav/wonderland) "Xr" = ( /obj/structure/closet/crate/grave/filled, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Xt" = ( /obj/structure/chair/wood{ dir = 1 }, /obj/effect/landmark/wonderland_mark, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Xv" = ( /obj/structure/flora/bush/flowers_yw, /obj/structure/flora/bush/flowers_br, /mob/living/basic/rabbit, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "XC" = ( /obj/structure/chair/wood{ dir = 8 }, /obj/item/toy/plush/goatplushie, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "Yf" = ( /obj/effect/landmark/wonderchess_mark, @@ -273,10 +273,10 @@ /area/ruin/space/has_grav/wonderland) "Yp" = ( /obj/structure/flora/bush/flowers_pp/style_2, -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) "ZA" = ( -/turf/open/misc/grass/jungle, +/turf/open/misc/grass/jungle/planet, /area/ruin/space/has_grav/wonderland) (1,1,1) = {" diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index 02faa4f529df..6be8af3db530 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -336,7 +336,8 @@ ACCESS_VIROLOGY, \ ACCESS_WEAPONS, \ ACCESS_XENOBIOLOGY, \ -) /* monkestation edit: add permabrig-only access */ + ACCESS_BRIG_PHYSICIAN, \ +) // monkestation edit: add permabrig-only access. also added brig physician /// Command staff/secure accesses, think bridge/armoury, ai_upload, notably access to modify ID cards themselves. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_COMMAND) #define COMMAND_ACCESS list( \ @@ -366,7 +367,10 @@ ACCESS_HOP, \ ACCESS_QM, \ ACCESS_RD, \ + ACCESS_BLUESHIELD, \ + ACCESS_NT_REPRESENTATVE, \ ) +// MONKESTATION ADDITION: Added blueshield and nt rep above /// Captains private rooms. Do not use direct, access via SSid_access.get_flag_access_list(ACCESS_FLAG_CAPTAIN) #define CAPTAIN_ACCESS list( \ @@ -462,7 +466,10 @@ ACCESS_PSYCHOLOGY, \ ACCESS_SURGERY, \ ACCESS_VIROLOGY, \ + ACCESS_BRIG_PHYSICIAN, \ ) +//MONKESTATION ADDITION: Added brig physcian access to above + /// Name for the Research region. #define REGION_RESEARCH "Research" /// Used to seed the accesses_by_region list in SSid_access. A list of all research regional accesses that are overseen by the RD. @@ -529,7 +536,11 @@ ACCESS_RC_ANNOUNCE, \ ACCESS_TELEPORTER, \ ACCESS_VAULT, \ + ACCESS_BLUESHIELD, \ + ACCESS_NT_REPRESENTATVE, \ ) +// MONKESTATION ADDITION: Added blueshield and nt rep to command region above + /// Name for the Centcom region. #define REGION_CENTCOM "Central Command" /// Used to seed the accesses_by_region list in SSid_access. A list of all CENTCOM_ACCESS regional accesses. diff --git a/code/__DEFINES/economy.dm b/code/__DEFINES/economy.dm index 32c88cee80cc..694d60dc1162 100644 --- a/code/__DEFINES/economy.dm +++ b/code/__DEFINES/economy.dm @@ -62,6 +62,7 @@ #define CIV_JOB_GROW 12 #define CIV_JOB_ATMOS 13 #define CIV_JOB_RANDOM 14 +#define CIV_JOB_SCI_HEAD 15 //By how much should the station's inflation value be multiplied by when dividing the civilian bounty's reward? #define BOUNTY_MULTIPLIER 10 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 570a9a164355..e4a250ed0fdc 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -294,7 +294,7 @@ GLOBAL_LIST_INIT(book_types, typecacheof(list( #define is_bartender_job(job_type) (istype(job_type, /datum/job/bartender)) #define is_captain_job(job_type) (istype(job_type, /datum/job/captain)) #define is_chaplain_job(job_type) (istype(job_type, /datum/job/chaplain)) -#define is_clown_job(job_type) (istype(job_type, /datum/job/clown) || istype(job_type, /datum/job/yellowclown)) +#define is_clown_job(job_type) (istype(job_type, /datum/job/clown) || istype(job_type, /datum/job/yellowclown) || istype(job_type, /datum/job/ert/clown)) //monkestation edit: adds ERT clowns cus why not #define is_detective_job(job_type) (istype(job_type, /datum/job/detective)) #define is_scientist_job(job_type) (istype(job_type, /datum/job/scientist)) #define is_security_officer_job(job_type) (istype(job_type, /datum/job/security_officer)) diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index fbf8c92621cd..f0e61c8282c0 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -192,7 +192,7 @@ #define DEPARTMENT_CENTRAL_COMMAND "Central Command" #define DEPARTMENT_BITFLAG_LATE (1<<12) -#define DEPARTMENT_LATE "Late Join" +#define DEPARTMENT_LATE "Late Arrival" /* Job datum job_flags */ /// Whether the mob is announced on arrival. diff --git a/code/__DEFINES/mobfactions.dm b/code/__DEFINES/mobfactions.dm index 9805d40645e4..097a7214e891 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -21,6 +21,8 @@ #define FACTION_CLOWN "clowns" /// Headslugs #define FACTION_CREATURE "creature" +/// Cats +#define FACTION_CAT "cat" /// Faithless and shadowpeople #define FACTION_FAITHLESS "faithless" /// Gnomes diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index 63aa502c20c9..f455985e6853 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -52,6 +52,12 @@ #define CALIBER_ARROW "arrow" /// The caliber used by the harpoon gun. #define CALIBER_HARPOON "harpoon" +/// The caliber used by the rebar crossbow. +#define CALIBER_REBAR "sharpened rod" +/// The caliber used by the rebar crossbow when forced to hold 2 rods. +#define CALIBER_REBAR_FORCED "sharpened rod" +/// The caliber used by the syndicate rebar crossbow. +#define CALIBER_REBAR_SYNDIE "sharpened rod" /// The caliber used by the meat hook. #define CALIBER_HOOK "hook" /// The caliber used by the changeling tentacle mutation. diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index 1ca02fa93e6d..a0e25692f4e8 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -57,6 +57,9 @@ #define RADIO_CHANNEL_CTF_GREEN "Green Team" #define RADIO_CHANNEL_CTF_YELLOW "Yellow Team" +#define RADIO_CHANNEL_UNCOMMON "Uncommon" +#define RADIO_KEY_UNCOMMON "f" +#define RADIO_TOKEN_UNCOMMON ":f" #define MIN_FREE_FREQ 1201 // ------------------------------------------------- // Frequencies are always odd numbers and range from 1201 to 1599. @@ -76,6 +79,7 @@ #define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange #define FREQ_SECURITY 1359 // Security comms frequency, red #define FREQ_RADIO 1361 //monkestation edit +#define FREQ_UNCOMMON 1363 //monkestation addition, Light gray #define FREQ_HOLOGRID_SOLUTION 1433 #define FREQ_STATUS_DISPLAYS 1435 diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index b246a89c14a4..357f33169a18 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -15,25 +15,36 @@ // On Windows, looks in the standard places for `rust_g.dll`. // On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of // `librust_g.so` (preferred) or `rust_g` (old). +// On OpenDream, `rust_g64.dll` / `librust_g64.so` are used instead. /* This comment bypasses grep checks */ /var/__rust_g +#ifndef OPENDREAM +#define RUST_G_BASE "rust_g" +#else +#define RUST_G_BASE "rust_g64" +#endif + /proc/__detect_rust_g() if (world.system_type == UNIX) - if (fexists("./librust_g.so")) + if (fexists("./lib[RUST_G_BASE].so")) // No need for LD_LIBRARY_PATH badness. - return __rust_g = "./librust_g.so" - else if (fexists("./rust_g")) + return __rust_g = "./lib[RUST_G_BASE].so" +#ifndef OPENDREAM + else if (fexists("./[RUST_G_BASE]")) // Old dumb filename. - return __rust_g = "./rust_g" - else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g")) + return __rust_g = "./[RUST_G_BASE]" + else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/[RUST_G_BASE]")) // Old dumb filename in `~/.byond/bin`. - return __rust_g = "rust_g" + return __rust_g = RUST_G_BASE +#endif else // It's not in the current directory, so try others - return __rust_g = "librust_g.so" + return __rust_g = "lib[RUST_G_BASE].so" else - return __rust_g = "rust_g" + return __rust_g = RUST_G_BASE + +#undef RUST_G_BASE #define RUST_G (__rust_g || __detect_rust_g()) #endif diff --git a/code/__DEFINES/span.dm b/code/__DEFINES/span.dm index f8320c44c380..fd2395e21aff 100644 --- a/code/__DEFINES/span.dm +++ b/code/__DEFINES/span.dm @@ -126,6 +126,7 @@ #define span_tinynotice(str) ("" + str + "") #define span_tinynoticeital(str) ("" + str + "") #define span_unconscious(str) ("" + str + "") +#define span_uncommonradio(str) ("" + str + "") #define span_userdanger(str) ("" + str + "") #define span_warning(str) ("" + str + "") #define span_yell(str) ("" + str + "") diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index db1506f1be9b..227c01a69162 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -437,7 +437,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Blowing kisses actually does damage to the victim #define TRAIT_KISS_OF_DEATH "kiss_of_death" /// Syndie kisses can apply burn damage -/* #define TRAIT_SYNDIE_KISS "syndie_kiss" */ +#define TRAIT_SYNDIE_KISS "syndie_kiss" /// Used to activate french kissing #define TRAIT_GARLIC_BREATH "kiss_of_garlic_death" /// Addictions don't tick down, basically they're permanently addicted diff --git a/code/__DEFINES/~monkestation/admin.dm b/code/__DEFINES/~monkestation/admin.dm index 9edb809cbaba..64ddc4de5ccd 100644 --- a/code/__DEFINES/~monkestation/admin.dm +++ b/code/__DEFINES/~monkestation/admin.dm @@ -16,3 +16,5 @@ #define AHELP_CLOSEREASON_NONE 0 #define AHELP_CLOSEREASON_IC 1 #define AHELP_CLOSEREASON_MENTOR 2 + +#define ADMIN_SUSINFO(user) "[ADMIN_LOOKUP(user)] [ADMIN_PP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" diff --git a/code/__DEFINES/~monkestation/atom_hud.dm b/code/__DEFINES/~monkestation/atom_hud.dm index 8014d3e4d567..002e44dc5593 100644 --- a/code/__DEFINES/~monkestation/atom_hud.dm +++ b/code/__DEFINES/~monkestation/atom_hud.dm @@ -2,6 +2,14 @@ #define SECHUD_BLUESHIELD "hudblueshield" #define SECHUD_BARBER "hudbarber" #define SECHUD_EXPLORER "hudexplorer" +#define SECHUD_CHIEF_MEDICAL_OFFICER_AWAY "hudchiefmedicalofficer_away" +#define SECHUD_CHEF_AWAY "hudchef_away" +#define SECHUD_EXPLORER_AWAY "hudexplorer_away" +#define SECHUD_SCIENTIST_AWAY "hudscientist_away" +#define SECHUD_SECURITY_OFFICER_AWAY "hudsecurityofficer_away" +#define SECHUD_STATION_ENGINEER_AWAY "hudstationengineer_away" +#define SECHUD_APC_AWAY "hudapc_away" +#define SECHUD_ROBOTICIST_AWAY "hudroboticist_away" #define SECHUD_SIGNAL_TECHINICAN "hudsignaltech" #define SECHUD_CONTRACTOR "hudsyndicatecontractor" #define SECHUD_SYNDIECLOWN "hudsyndicateclown" diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 16c440f96684..0e70672fd92e 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -34,9 +34,11 @@ /// Runs byond's html encoding sanitization proc, after replacing new-lines and tabs for the # character. -/proc/sanitize(text) +/proc/sanitize(text, encode = TRUE) var/static/regex/regex = regex(@"[\n\t]", "g") - return html_encode(regex.Replace(text, "#")) + . = replacetext(text, regex, "#") + if(encode) + return html_encode(.) /// Runs STRIP_HTML_SIMPLE and sanitize. diff --git a/code/__HELPERS/~monkestation-helpers/clients.dm b/code/__HELPERS/~monkestation-helpers/clients.dm index 6f824905e3da..3ee482320d98 100644 --- a/code/__HELPERS/~monkestation-helpers/clients.dm +++ b/code/__HELPERS/~monkestation-helpers/clients.dm @@ -20,3 +20,29 @@ RETURN_TYPE(/datum/admins) var/client/client = CLIENT_FROM_VAR(doohickey) return client?.holder + +/proc/should_be_interviewing(mob/target) + . = FALSE + if(QDELETED(target)) + return + . = target.client?.interviewee + var/ckey = target.ckey + if(ckey) + if(ckey in GLOB.interviews.approved_ckeys) + return FALSE + var/datum/interview/interview = GLOB.interviews.open_interviews[ckey] + if(interview && interview.status != INTERVIEW_APPROVED) + return TRUE + if(ckey in GLOB.interviews.cooldown_ckeys) + return TRUE + +/proc/interview_safety(mob/target, context) + . = should_be_interviewing(target) + if(.) + message_admins(span_danger("WARNING: [ADMIN_SUSINFO(target)] has seemingly bypassed an interview! (context: [context]) note: this detection is still wip, tell absolucy if it's causing false positives")) + log_admin_private("[key_name(target)] has seemingly bypassed an interview! (context: [context])") + if(isnewplayer(target)) + var/mob/dead/new_player/dingbat = target + if(dingbat.ready == PLAYER_READY_TO_PLAY) + dingbat.ready = PLAYER_NOT_READY + qdel(dingbat.client) diff --git a/code/__HELPERS/~monkestation-helpers/roundend.dm b/code/__HELPERS/~monkestation-helpers/roundend.dm index f3c34f4615b9..082c3aaeca38 100644 --- a/code/__HELPERS/~monkestation-helpers/roundend.dm +++ b/code/__HELPERS/~monkestation-helpers/roundend.dm @@ -4,28 +4,35 @@ /datum/controller/subsystem/ticker/proc/distribute_rewards() var/hour = round((world.time - SSticker.round_start_time) / 36000) var/minute = round(((world.time - SSticker.round_start_time) - (hour * 36000)) / 600) - var/added_xp = round(25 + (minute**0.85)) + var/added_xp = round(25 + (minute ** 0.85)) for(var/client/client as anything in GLOB.clients) - if(!istype(client) || QDELING(client)) - continue - if(!QDELETED(client?.prefs)) - client?.prefs?.adjust_metacoins(client?.ckey, 75, "Played a Round") - client?.prefs?.adjust_metacoins(client?.ckey, client?.reward_this_person, "Special Bonus") - // WHYYYYYY - if(QDELETED(client)) - continue - if(client?.mob?.mind?.assigned_role) - add_jobxp(client, added_xp, client?.mob?.mind?.assigned_role?.title) + distribute_rewards_to_client(client, added_xp) + +/datum/controller/subsystem/ticker/proc/distribute_rewards_to_client(client/client, added_xp) + if(!istype(client) || QDELING(client)) + return + var/datum/player_details/details = get_player_details(client) + if(!QDELETED(client?.prefs)) + client?.prefs?.adjust_metacoins(client?.ckey, 75, "Played a Round") + var/bonus = details?.roundend_monkecoin_bonus + if(bonus) + client?.prefs?.adjust_metacoins(client?.ckey, bonus, "Special Bonus") + // WHYYYYYY if(QDELETED(client)) - continue - if(length(client?.applied_challenges)) - var/mob/living/client_mob = client?.mob - if(!istype(client_mob) || QDELING(client_mob) || client_mob?.stat == DEAD) + return + if(client?.mob?.mind?.assigned_role) + add_jobxp(client, added_xp, client?.mob?.mind?.assigned_role?.title) + if(QDELETED(client)) + return + var/list/applied_challenges = details?.applied_challenges + if(LAZYLEN(applied_challenges)) + var/mob/living/client_mob = client?.mob + if(!istype(client_mob) || QDELING(client_mob) || client_mob?.stat == DEAD) + return + var/total_payout = 0 + for(var/datum/challenge/listed_challenge as anything in applied_challenges) + if(listed_challenge.failed) continue - var/total_payout = 0 - for(var/datum/challenge/listed_challenge as anything in client?.applied_challenges) - if(listed_challenge.failed) - continue - total_payout += listed_challenge.challenge_payout - if(total_payout) - client?.prefs?.adjust_metacoins(client?.ckey, total_payout, "Challenge rewards.") + total_payout += listed_challenge.challenge_payout + if(total_payout) + client?.prefs?.adjust_metacoins(client?.ckey, total_payout, "Challenge rewards.") diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index bcb83d5d97e5..c60c9105f541 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -400,7 +400,7 @@ GLOBAL_LIST_INIT(maint_fauna, list(//fauna: there be critters living in yer main #define maint_uncommon_weight 900 #define maint_rarity_weight 99 #define maint_oddity_weight 4 //1 out of 10,000 would give metastation (180 spawns) a 2 in 111 chance of spawning an oddity per round, similar to xeno egg, monkestation edit: from 1 to 4 -#define maint_holiday_weight 3500 // When holiday loot is enabled, it'll give every loot item a 25% chance of being a holiday item +#define maint_holiday_weight 2500 // When holiday loot is enabled, it'll give every loot item a 25% chance of being a holiday item #define maint_fauna_weight 150 //monkestation edit: adds friendly maintenance bees, also allows for other maintenance fauna to be coded in. //Loot pool used by default maintenance loot spawners diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 42ce3dbd17bb..7734282dd4d7 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -291,6 +291,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_JAILBIRD" = TRAIT_JAILBIRD, "TRAIT_JOLLY" = TRAIT_JOLLY, "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, + "TRAIT_SYNDIE_KISS" = TRAIT_SYNDIE_KISS, "TRAIT_KNOCKEDOUT" = TRAIT_KNOCKEDOUT, "TRAIT_KNOW_ENGI_WIRES" = TRAIT_KNOW_ENGI_WIRES, "TRAIT_KNOW_ROBO_WIRES" = TRAIT_KNOW_ROBO_WIRES, diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index e2ead5de016a..d5bee6641c3d 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -169,6 +169,7 @@ if(!new_client.readied_store) new_client.readied_store = new(new_player) new_client.readied_store.ui_interact(new_player) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(interview_safety), new_player, "readied up"), 1 SECONDS, TIMER_UNIQUE) else new_player.ready = PLAYER_NOT_READY base_icon_state = "not_ready" @@ -299,11 +300,10 @@ /atom/movable/screen/lobby/button/intents/Click(location, control, params) . = ..() - if(!hud.mymob.client.challenge_menu) - var/datum/challenge_selector/new_tgui = new(hud.mymob) - new_tgui.ui_interact(hud.mymob) - else - hud.mymob.client.challenge_menu.ui_interact(hud.mymob) + var/datum/player_details/details = get_player_details(hud.mymob) + details.challenge_menu ||= new(details) + details.challenge_menu.ui_interact(hud.mymob) + /atom/movable/screen/lobby/button/discord icon = 'icons/hud/lobby/bottom_buttons.dmi' icon_state = "discord" diff --git a/code/controllers/subsystem/materials.dm b/code/controllers/subsystem/materials.dm index 259545b93e31..ec0280045213 100644 --- a/code/controllers/subsystem/materials.dm +++ b/code/controllers/subsystem/materials.dm @@ -27,7 +27,7 @@ SUBSYSTEM_DEF(materials) new /datum/stack_recipe("Sink Frame", /obj/structure/sinkframe, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), new /datum/stack_recipe("Material floor tile", /obj/item/stack/tile/material, 1, 4, 20, applies_mats = TRUE, check_density = FALSE, category = CAT_TILES), new /datum/stack_recipe("Material airlock assembly", /obj/structure/door_assembly/door_assembly_material, 4, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_DOORS), - new /datum/stack_recipe("Railing", /obj/structure/railing, one_per_turf = FALSE, on_solid_ground = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), + new /datum/stack_recipe("Railing", /obj/structure/railing, one_per_turf = FALSE, on_solid_ground = TRUE, check_direction = TRUE, applies_mats = TRUE, category = CAT_FURNITURE), ) ///List of stackcrafting recipes for materials using rigid recipes var/list/rigid_stack_recipes = list( diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 853f49bd7a99..7593cec6f9e6 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -402,6 +402,10 @@ SUBSYSTEM_DEF(ticker) for(var/i in GLOB.new_player_list) var/mob/dead/new_player/player = i if(player.ready == PLAYER_READY_TO_PLAY && player.mind) + if(interview_safety(player, "readied up")) + player.ready = PLAYER_NOT_READY + QDEL_IN(player.client, 0) + continue GLOB.joined_player_list += player.ckey var/chosen_title = player.client?.prefs.alt_job_titles[player.mind.assigned_role.title] || player.mind.assigned_role.title var/atom/destination = player.mind.assigned_role.get_roundstart_spawn_point(chosen_title) @@ -522,27 +526,33 @@ SUBSYSTEM_DEF(ticker) return output +/datum/controller/subsystem/ticker/proc/transfer_single_character(mob/dead/new_player/player) + var/mob/living = player.transfer_character() + if(!living) + return + qdel(player) + ADD_TRAIT(living, TRAIT_NO_TRANSFORM, SS_TICKER_TRAIT) + if(living.client) + var/atom/movable/screen/splash/splash = new(null, living.client, TRUE) + splash.Fade(TRUE) + living.client?.init_verbs() + . = living + var/datum/player_details/details = get_player_details(living) + if(details) + SSchallenges.apply_challenges(details) + for(var/processing_reward_bitflags in bitflags_to_reward)//you really should use department bitflags if possible + if(living.mind.assigned_role.departments_bitflags & processing_reward_bitflags) + details.roundend_monkecoin_bonus += 150 + for(var/processing_reward_jobs in jobs_to_reward)//just in case you really only want to reward a specific job + if(living.job == processing_reward_jobs) + details.roundend_monkecoin_bonus += 150 + /datum/controller/subsystem/ticker/proc/transfer_characters() var/list/livings = list() for(var/mob/dead/new_player/player as anything in GLOB.new_player_list) - var/mob/living = player.transfer_character() - if(living) - qdel(player) - ADD_TRAIT(living, TRAIT_NO_TRANSFORM, SS_TICKER_TRAIT) - if(living.client) - var/atom/movable/screen/splash/S = new(null, living.client, TRUE) - S.Fade(TRUE) - living.client.init_verbs() - livings += living - if(living.client && length(living.client?.active_challenges)) - SSchallenges.apply_challenges(living.client) - for(var/processing_reward_bitflags in bitflags_to_reward)//you really should use department bitflags if possible - if(living.mind.assigned_role.departments_bitflags & processing_reward_bitflags) - living.client.reward_this_person += 150 - for(var/processing_reward_jobs in jobs_to_reward)//just in case you really only want to reward a specific job - if(living.job == processing_reward_jobs) - living.client.reward_this_person += 150 - if(livings.len) + livings += transfer_single_character(player) + list_clear_nulls(livings) + if(length(livings)) addtimer(CALLBACK(src, PROC_REF(release_characters), livings), 3 SECONDS, TIMER_CLIENT_TIME) /datum/controller/subsystem/ticker/proc/release_characters(list/livings) diff --git a/code/datums/components/crafting/equipment.dm b/code/datums/components/crafting/equipment.dm index 4e57287dba8e..1c71975d1494 100644 --- a/code/datums/components/crafting/equipment.dm +++ b/code/datums/components/crafting/equipment.dm @@ -198,3 +198,14 @@ tool_paths = list(/obj/item/bikehorn) time = 40 SECONDS category = CAT_EQUIPMENT + +/datum/crafting_recipe/rebar_quiver + name = "Rebar Storage Quiver" + result = /obj/item/storage/bag/rebar_quiver + time = 10 + reqs = list( + /obj/item/tank/internals/oxygen = 1, + /obj/item/stack/cable_coil = 15, + ) + category = CAT_EQUIPMENT + tool_behaviors = list(TOOL_WELDER, TOOL_WIRECUTTER) diff --git a/code/datums/components/crafting/ranged_weapon.dm b/code/datums/components/crafting/ranged_weapon.dm index ae6bdda72e4b..c8f680d36778 100644 --- a/code/datums/components/crafting/ranged_weapon.dm +++ b/code/datums/components/crafting/ranged_weapon.dm @@ -224,6 +224,33 @@ time = 5 SECONDS category = CAT_WEAPON_RANGED +/datum/crafting_recipe/rebarxbow + name = "Heated Rebar Crossbow" + result = /obj/item/gun/ballistic/rifle/rebarxbow + reqs = list( + /obj/item/stack/rods = 6, + /obj/item/stack/cable_coil = 12, + /obj/item/inducer = 1, + ) + tool_behaviors = list(TOOL_WELDER) + time = 5 SECONDS + category = CAT_WEAPON_RANGED + +/datum/crafting_recipe/rebarxbowforced + name = "Forced Rebar Crossbow" + desc = "A much quicker reload... for a chance of shooting yourself when you fire it." + result = /obj/item/gun/ballistic/rifle/rebarxbow/forced + reqs = list( + /obj/item/gun/ballistic/rifle/rebarxbow = 1, + ) + blacklist = list( + /obj/item/gun/ballistic/rifle/rebarxbow/forced, + /obj/item/gun/ballistic/rifle/rebarxbow/syndie, + ) + tool_behaviors = list(TOOL_CROWBAR) + time = 1 SECONDS + category = CAT_WEAPON_RANGED + /datum/crafting_recipe/pipegun_prime name = "Regal Pipegun" always_available = FALSE @@ -306,8 +333,7 @@ /obj/item/stack/rods = 4, /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/capacitor = 1, - /obj/item/clothing/glasses/regular = 1, - /obj/item/reagent_containers/cup/glass/drinkingglass = 1, + /obj/item/reagent_containers/cup/glass/drinkingglass = 2, ) tool_behaviors = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) time = 10 SECONDS @@ -351,7 +377,7 @@ /obj/item/gun/energy/disabler/smoothbore = 1, /obj/item/stack/sheet/mineral/gold = 5, /obj/item/stock_parts/cell/hyper = 1, - /datum/reagent/reaction_agent/speed_agent = 10, + /datum/reagent/consumable/red_queen = 10, //monke edit ) tool_behaviors = list(TOOL_SCREWDRIVER) time = 20 SECONDS diff --git a/code/datums/components/crafting/weapon_ammo.dm b/code/datums/components/crafting/weapon_ammo.dm index e7ad919c1de6..4ecaee1fbc2b 100644 --- a/code/datums/components/crafting/weapon_ammo.dm +++ b/code/datums/components/crafting/weapon_ammo.dm @@ -12,6 +12,36 @@ time = 0.5 SECONDS category = CAT_WEAPON_AMMO +/datum/crafting_recipe/paperball + name = "Paper Ball" + result = /obj/item/ammo_casing/rebar/paperball + reqs = list( + /obj/item/paper = 1, + ) + time = 0.1 SECONDS + category = CAT_WEAPON_AMMO + +/datum/crafting_recipe/rebarsyndie + name = "jagged iron rod" + always_available = FALSE + result = /obj/item/ammo_casing/rebar/syndie + reqs = list( + /obj/item/stack/rods = 1, + ) + tool_behaviors = list(TOOL_WIRECUTTER) + time = 0.5 SECONDS + time = 0.1 SECONDS + category = CAT_WEAPON_AMMO + +/datum/crafting_recipe/healium_bolt + name = "healium crystal crossbow bolt" + result = /obj/item/ammo_casing/rebar/healium + reqs = list( + /obj/item/grenade/gas_crystal/healium_crystal = 1 + ) + time = 0.1 SECONDS + category = CAT_WEAPON_AMMO + /datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" result = /obj/item/ammo_casing/shotgun/pulseslug diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm index e52ac35e186b..3ffd95de4d8a 100644 --- a/code/datums/components/fullauto.dm +++ b/code/datums/components/fullauto.dm @@ -8,8 +8,12 @@ var/turf/target_loc //For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves). var/autofire_stat = AUTOFIRE_STAT_IDLE var/mouse_parameters - var/autofire_shot_delay = 0.3 SECONDS //Time between individual shots. - var/mouse_status = AUTOFIRE_MOUSEUP //This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. + /// Time between individual shots. + var/autofire_shot_delay = 0.3 SECONDS + /// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. + var/mouse_status = AUTOFIRE_MOUSEUP + /// Should dual wielding be allowed? + var/allow_akimbo ///windup autofire vars ///Whether the delay between shots increases over time, simulating a spooling weapon @@ -26,7 +30,7 @@ var/timerid COOLDOWN_DECLARE(next_shot_cd) -/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown) +/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown, allow_akimbo = TRUE) . = ..() if(!isgun(parent)) return COMPONENT_INCOMPATIBLE @@ -34,6 +38,7 @@ RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up)) if(autofire_shot_delay) src.autofire_shot_delay = autofire_shot_delay + src.allow_akimbo = allow_akimbo if(windup_autofire) src.windup_autofire = windup_autofire src.windup_autofire_reduction_multiplier = windup_autofire_reduction_multiplier @@ -291,21 +296,21 @@ return COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS -/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, params) +/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params) SIGNAL_HANDLER if(semicd || shooter.incapacitated()) return NONE if(!can_shoot()) shoot_with_empty_chamber(shooter) return NONE - INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, params) + INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, allow_akimbo, params) return COMPONENT_AUTOFIRE_SHOT_SUCCESS //All is well, we can continue shooting. -/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, params) +/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, allow_akimbo, params) var/obj/item/gun/akimbo_gun = shooter.get_inactive_held_item() var/bonus_spread = 0 - if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM) + if(istype(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo) if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter)) bonus_spread = dual_wield_spread addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1) diff --git a/code/datums/components/gun_crank.dm b/code/datums/components/gun_crank.dm index 3768615907db..ad980f93829c 100644 --- a/code/datums/components/gun_crank.dm +++ b/code/datums/components/gun_crank.dm @@ -12,9 +12,11 @@ var/charge_sound_cooldown_time /// Are we currently charging var/is_charging = FALSE + /// Should you be able to move while charging, use IGNORE_USER_LOC_CHANGE if you want to move and crank + var/charge_move = NONE COOLDOWN_DECLARE(charge_sound_cooldown) -/datum/component/gun_crank/Initialize(charging_cell, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS) +/datum/component/gun_crank/Initialize(charging_cell, charge_amount = 500, cooldown_time = 2 SECONDS, charge_sound = 'sound/weapons/laser_crank.ogg', charge_sound_cooldown_time = 1.8 SECONDS, charge_move = NONE) . = ..() if(!isitem(parent)) return COMPONENT_INCOMPATIBLE @@ -25,6 +27,7 @@ src.cooldown_time = cooldown_time src.charge_sound = charge_sound src.charge_sound_cooldown_time = charge_sound_cooldown_time + src.charge_move = charge_move /datum/component/gun_crank/RegisterWithParent() . = ..() @@ -51,7 +54,7 @@ playsound(source, charge_sound, 40) source.balloon_alert(user, "charging...") SEND_SIGNAL(source, COMSIG_GUN_CRANKING, user) // monkestation edit - if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_GUNCRANK)) + if(!do_after(user, cooldown_time, source, interaction_key = DOAFTER_SOURCE_CHARGE_GUNCRANK, timed_action_flags = charge_move)) is_charging = FALSE return charging_cell.give(charge_amount) diff --git a/code/datums/components/life_link.dm b/code/datums/components/life_link.dm index 34cdd0504c6b..3e38bdfb9c54 100644 --- a/code/datums/components/life_link.dm +++ b/code/datums/components/life_link.dm @@ -129,16 +129,14 @@ if(isnull(holder)) return holder.icon_state = "hud[RoundHealth(host)]" - var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) - holder.pixel_y = size_check.Height() - world.icon_size + holder.pixel_y = mob_parent.get_cached_height() - world.icon_size /// Update our vital status on the medical hud /datum/component/life_link/proc/update_med_hud_status(mob/living/mob_parent) var/image/holder = mob_parent.hud_list?[STATUS_HUD] if(isnull(holder)) return - var/icon/size_check = icon(mob_parent.icon, mob_parent.icon_state, mob_parent.dir) - holder.pixel_y = size_check.Height() - world.icon_size + holder.pixel_y = mob_parent.get_cached_height() - world.icon_size if(host.stat == DEAD || HAS_TRAIT(host, TRAIT_FAKEDEATH)) holder.icon_state = "huddead" else diff --git a/code/datums/components/seethrough_mob.dm b/code/datums/components/seethrough_mob.dm index bae87faf6158..0baf76866983 100644 --- a/code/datums/components/seethrough_mob.dm +++ b/code/datums/components/seethrough_mob.dm @@ -55,9 +55,8 @@ for(var/atom/movable/screen/plane_master/seethrough as anything in our_hud.get_true_plane_masters(SEETHROUGH_PLANE)) seethrough.unhide_plane(fool) - var/icon/current_mob_icon = icon(fool.icon, fool.icon_state) render_source_atom.pixel_x = -fool.pixel_x - render_source_atom.pixel_y = ((current_mob_icon.Height() - 32) * 0.5) + render_source_atom.pixel_y = ((fool.get_cached_height() - world.icon_size) * 0.5) initial_render_target_value = fool.render_target fool.render_target = "*transparent_bigmob[personal_uid]" diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 9077b361f7b8..51298592d8f9 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -152,6 +152,8 @@ return if(istype(item, /obj/item/melee/roastingstick)) return FALSE + if(istype(item, /obj/item/toy/crayon/spraycan)) + return FALSE if(istype(item, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = item var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY) diff --git a/code/datums/elements/befriend_petting.dm b/code/datums/elements/befriend_petting.dm index c2006051397e..3037ecb4a6bf 100644 --- a/code/datums/elements/befriend_petting.dm +++ b/code/datums/elements/befriend_petting.dm @@ -36,7 +36,7 @@ if ((user.istate & ISTATE_HARM)) return // We'll deal with this later if (owner.stat == DEAD) - var/additional_text = HAS_TRAIT(user, TRAIT_NAIVE) || HAS_TRAIT(user.mind, TRAIT_NAIVE) ? "It looks like [owner.p_theyre()] sleeping." : "[owner.p_they(capitalized = TRUE)] seem[owner.p_s()] to be dead." + var/additional_text = HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "It looks like [owner.p_theyre()] sleeping." : "[owner.p_they(capitalized = TRUE)] seem[owner.p_s()] to be dead." to_chat(user, span_warning("[owner] feels cold to the touch. [additional_text]")) return if (owner.stat != CONSCIOUS) diff --git a/code/datums/elements/decals/_decal.dm b/code/datums/elements/decals/_decal.dm index 71dd8abdf30f..2f6f2bcf391b 100644 --- a/code/datums/elements/decals/_decal.dm +++ b/code/datums/elements/decals/_decal.dm @@ -113,7 +113,7 @@ return TRUE /datum/element/decal/Detach(atom/source) - UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON)) + UnregisterSignal(source, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_ATOM_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_TURF_ON_SHUTTLE_MOVE, COMSIG_ATOM_SMOOTHED_ICON, COMSIG_ATOM_DECALS_ROTATING)) SSdcs.UnregisterSignal(source, COMSIG_ATOM_DIR_CHANGE) source.update_appearance(UPDATE_OVERLAYS) if(isitem(source)) diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 1ab5594e9497..4a461c4bec96 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -20,6 +20,12 @@ var/datum/map_template/ert_template /// If we should actually _use_ the ert_template custom shuttle var/use_custom_shuttle = TRUE + //MONKESTATION EDIT START + //If we want a custom name for the poll title + var/poll_title = "Emergency Response Team" + //If we want a custom poll icon + var/poll_icon = /obj/item/clothing/head/helmet/space/ert + //MONKESTATION EDIT END /datum/ert/New() if (!polldesc) @@ -126,3 +132,144 @@ mission = "Having heard the station's request for aid, assist the crew in defending themselves." polldesc = "an independent station defense militia" random_names = TRUE + +//MONKESTATION EDIT START +/datum/ert/code + leader_role = /datum/antagonist/ert/generic/commander + roles = list( + /datum/antagonist/ert/generic, + ) + teamsize = 6 + opendoors = FALSE + polldesc = "an Uncoded Emergency Response Team" + ert_template = /datum/map_template/shuttle/ert/dropship + +/datum/ert/code/green + leader_role = /datum/antagonist/ert/generic/commander + roles = list( + /datum/antagonist/ert/generic/medical, + /datum/antagonist/ert/generic/security, + /datum/antagonist/ert/generic/engineer, + /datum/antagonist/ert/generic/janitor, + /datum/antagonist/ert/generic/chaplain, + ) + code = "Green" + polldesc = NONE + opendoors = FALSE + ert_template = /datum/map_template/shuttle/ert/generic + +/datum/ert/code/green/with_clown + teamsize = 7 + roles = list( + /datum/antagonist/ert/generic/medical, + /datum/antagonist/ert/generic/security, + /datum/antagonist/ert/generic/engineer, + /datum/antagonist/ert/generic/janitor, + /datum/antagonist/ert/generic/chaplain, + /datum/antagonist/ert/generic/clown, // Honk + ) + +/datum/ert/code/blue + leader_role = /datum/antagonist/ert/generic/commander/blue + roles = list( + /datum/antagonist/ert/generic/medical/blue, + /datum/antagonist/ert/generic/security/blue, + /datum/antagonist/ert/generic/engineer/blue, + /datum/antagonist/ert/generic/janitor/blue, + /datum/antagonist/ert/generic/chaplain/blue, + ) + code = "Blue" + polldesc = NONE + opendoors = FALSE + ert_template = /datum/map_template/shuttle/ert/generic + +/datum/ert/code/blue/with_clown + teamsize = 7 + roles = list( + /datum/antagonist/ert/generic/medical/blue, + /datum/antagonist/ert/generic/security/blue, + /datum/antagonist/ert/generic/engineer/blue, + /datum/antagonist/ert/generic/janitor/blue, + /datum/antagonist/ert/generic/chaplain/blue, + /datum/antagonist/ert/generic/clown/funny, // Honk + ) + +/datum/ert/code/red + leader_role = /datum/antagonist/ert/generic/commander/red + roles = list( + /datum/antagonist/ert/generic/medical/red, + /datum/antagonist/ert/generic/security/red, + /datum/antagonist/ert/generic/engineer/red, + /datum/antagonist/ert/generic/janitor/red, + /datum/antagonist/ert/generic/chaplain/red, + ) + code = "Red" + polldesc = NONE + opendoors = TRUE + ert_template = /datum/map_template/shuttle/ert/generic + +/datum/ert/code/red/with_clown + teamsize = 7 + roles = list( + /datum/antagonist/ert/generic/medical/red, + /datum/antagonist/ert/generic/security/red, + /datum/antagonist/ert/generic/engineer/red, + /datum/antagonist/ert/generic/janitor/red, + /datum/antagonist/ert/generic/chaplain/red, + /datum/antagonist/ert/generic/clown/funnier, // Honk + ) + +/datum/ert/code/honk + leader_role = /datum/antagonist/ert/generic/clown/funny + roles = list( + /datum/antagonist/ert/generic/clown, + ) + code = "Honk" + polldesc = NONE + opendoors = FALSE + ert_template = /datum/map_template/shuttle/ert/dropship/clown + +/datum/ert/code/purple + leader_role = /datum/antagonist/ert/generic/janitor/blue + roles = list( + /datum/antagonist/ert/generic/janitor, + ) + opendoors = FALSE + ert_template = /datum/map_template/shuttle/ert/dropship/janitor + mission = "Clean up EVERYTHING." + poll_icon = /obj/item/clothing/head/helmet/space/ert/janitor + polldesc = "a Nanotrasen Janitorial Response Team" + +/datum/ert/code/lambda + leader_role = /datum/antagonist/ert/generic/chaplain/red + roles = list( + /datum/antagonist/ert/generic/chaplain/red, + ) + code = "Lambda" + polldesc = NONE + opendoors = FALSE + teamsize = 5 + poll_icon = /obj/item/clothing/head/helmet/space/ert/chaplain + ert_template = /datum/map_template/shuttle/ert/dropship + +/datum/ert/code/epsilon + leader_role = /datum/antagonist/ert/generic/deathsquad + roles = list( + /datum/antagonist/ert/generic/deathsquad, + ) + opendoors = FALSE + rename_team = "Deathsquad" + code = "Epsilon" + mission = "Leave no witnesses." + teamsize = 5 + poll_title = "Deathsquad" + poll_icon = /obj/item/clothing/mask/gas/sechailer/swat + polldesc = "an elite Nanotrasen Strike Team" + ert_template = /datum/map_template/shuttle/ert/deathsquad + +/datum/ert/code/epsilon/dust + leader_role = /datum/antagonist/ert/generic/deathsquad/dust + roles = list( + /datum/antagonist/ert/generic/deathsquad/dust, + ) +//MONKESTATION EDIT END diff --git a/code/datums/id_trim/centcom.dm b/code/datums/id_trim/centcom.dm index c8adf5925c22..53382c658cda 100644 --- a/code/datums/id_trim/centcom.dm +++ b/code/datums/id_trim/centcom.dm @@ -173,7 +173,7 @@ /// Trim for generic ERT janitors. No universal ID card changing access. /datum/id_trim/centcom/ert/janitor assignment = JOB_ERT_JANITOR - trim_state = "trim_ert_janitor" + trim_state = "trim_janitor" subdepartment_color = COLOR_SERVICE_LIME sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER diff --git a/code/datums/status_effects/debuffs/tower_of_babel.dm b/code/datums/status_effects/debuffs/tower_of_babel.dm index bc3df34f2be4..1ba46d0b87b5 100644 --- a/code/datums/status_effects/debuffs/tower_of_babel.dm +++ b/code/datums/status_effects/debuffs/tower_of_babel.dm @@ -15,7 +15,8 @@ owner.add_blocked_language(GLOB.all_languages - random_language, source = LANGUAGE_BABEL) // this lets us bypass tongue language restrictions except for people who have stuff like mute, // no tongue, tongue tied, etc. curse of babel shouldn't let people who have a tongue disability speak - ADD_TRAIT(owner, TRAIT_TOWER_OF_BABEL, trait_source) + if(owner.mind) + ADD_TRAIT(owner.mind, TRAIT_TOWER_OF_BABEL, trait_source) owner.add_mood_event(id, /datum/mood_event/tower_of_babel) return ..() @@ -25,7 +26,8 @@ owner.remove_blocked_language(GLOB.all_languages, source = LANGUAGE_BABEL) owner.remove_all_languages(source = LANGUAGE_BABEL) owner.update_atom_languages() - REMOVE_TRAIT(owner, TRAIT_TOWER_OF_BABEL, trait_source) + if(owner.mind) + REMOVE_TRAIT(owner.mind, TRAIT_TOWER_OF_BABEL, trait_source) return ..() // Used by wizard magic and tower of babel event diff --git a/code/datums/status_effects/stacking_effect.dm b/code/datums/status_effects/stacking_effect.dm index 9a682000eb78..783d9334b215 100644 --- a/code/datums/status_effects/stacking_effect.dm +++ b/code/datums/status_effects/stacking_effect.dm @@ -128,8 +128,7 @@ if(underlay_file) status_underlay = mutable_appearance(underlay_file, "[underlay_state][stacks]") - var/icon/I = icon(owner.icon, owner.icon_state, owner.dir) - var/icon_height = I.Height() + var/icon_height = owner.get_cached_height() if(status_overlay) status_overlay.pixel_x = -owner.pixel_x diff --git a/code/datums/weather/weather_types/snow_storm.dm b/code/datums/weather/weather_types/snow_storm.dm index 03c9bf2aed6e..9db51ee5ad4b 100644 --- a/code/datums/weather/weather_types/snow_storm.dm +++ b/code/datums/weather/weather_types/snow_storm.dm @@ -39,7 +39,7 @@ if(isobserver(player)) return TRUE - if(HAS_TRAIT(player, TRAIT_DETECT_STORM)) + if(HAS_MIND_TRAIT(player, TRAIT_DETECT_STORM)) return TRUE if(istype(get_area(player), /area/mine)) diff --git a/code/game/communications.dm b/code/game/communications.dm index b6c606f0a5c5..320b03d0d041 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -110,6 +110,7 @@ GLOBAL_LIST_INIT(radiochannels, list( RADIO_CHANNEL_CTF_GREEN = FREQ_CTF_GREEN, RADIO_CHANNEL_CTF_YELLOW = FREQ_CTF_YELLOW, RADIO_CHANNEL_RADIO = RADIO_KEY_RADIO, + RADIO_CHANNEL_UNCOMMON = FREQ_UNCOMMON, //monkestation addition )) GLOBAL_LIST_INIT(reverseradiochannels, list( @@ -130,6 +131,7 @@ GLOBAL_LIST_INIT(reverseradiochannels, list( "[FREQ_CTF_GREEN]" = RADIO_CHANNEL_CTF_GREEN, "[FREQ_CTF_YELLOW]" = RADIO_CHANNEL_CTF_YELLOW, "[FREQ_RADIO]" = RADIO_CHANNEL_RADIO, + "[FREQ_UNCOMMON]" = RADIO_CHANNEL_UNCOMMON, //monkestation addition )) /datum/radio_frequency diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 48ddf2749558..3f2dde1cc0ab 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -194,8 +194,7 @@ Medical HUD! Basic mode needs suit sensors on. return holder.icon_state = "hud[RoundHealth(src)]" - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size //for carbon suit sensors /mob/living/carbon/med_hud_set_health() @@ -208,8 +207,7 @@ Medical HUD! Basic mode needs suit sensors on. if (isnull(holder)) return - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) if(sensors) SET_PLANE_EXPLICIT(sensors, ABOVE_LIGHTING_PLANE, src) @@ -225,9 +223,8 @@ Medical HUD! Basic mode needs suit sensors on. if (isnull(holder)) return - var/icon/I = icon(icon, icon_state, dir) var/virus_threat = check_virus() - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(HAS_TRAIT(src, TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) @@ -263,8 +260,7 @@ FAN HUDs! For identifying other fans on-sight. /mob/living/carbon/human/proc/fan_hud_set_fandom() var/image/holder = hud_list[FAN_HUD] - var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "hudfan_no" var/obj/item/clothing/under/undershirt = w_uniform @@ -294,8 +290,7 @@ Security HUDs! Basic mode shows only the job. /mob/living/carbon/human/proc/sec_hud_set_ID() var/image/holder = hud_list[ID_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size var/sechud_icon_state = wear_id?.get_sechud_job_icon_state() if(!sechud_icon_state || HAS_TRAIT(src, TRAIT_UNKNOWN)) sechud_icon_state = "hudno_id" @@ -303,7 +298,7 @@ Security HUDs! Basic mode shows only the job. sec_hud_set_security_status() //monkestation edit start var/image/permit_holder = hud_list[PERMIT_HUD] - permit_holder.pixel_y = I.Height() - world.icon_size + permit_holder.pixel_y = get_cached_height() - world.icon_size var/permit_icon_state = wear_id?.get_gun_permit_iconstate() if(!permit_icon_state) permit_icon_state = "hudfan_no" @@ -320,29 +315,25 @@ Security HUDs! Basic mode shows only the job. for(var/obj/item/implant/I in implants) if(istype(I, /obj/item/implant/tracking)) holder = hud_list[IMPTRACK_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "hud_imp_tracking" set_hud_image_active(IMPTRACK_HUD) else if(istype(I, /obj/item/implant/chem)) holder = hud_list[IMPCHEM_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "hud_imp_chem" set_hud_image_active(IMPCHEM_HUD) if(HAS_TRAIT(src, TRAIT_MINDSHIELD)) holder = hud_list[IMPLOYAL_HUD] - var/icon/IC = icon(icon, icon_state, dir) - holder.pixel_y = IC.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "hud_imp_loyal" set_hud_image_active(IMPLOYAL_HUD) /mob/living/carbon/human/proc/sec_hud_set_security_status() var/image/holder = hud_list[WANTED_HUD] - var/icon/sec_icon = icon(icon, icon_state, dir) - holder.pixel_y = sec_icon.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size var/perp_name = get_face_name(get_id_name("")) if(!perp_name || !GLOB.manifest) @@ -376,8 +367,7 @@ Diagnostic HUDs! /mob/living/proc/hud_set_nanite_indicator() var/image/holder = hud_list[NANITE_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = null if(HAS_TRAIT(src, TRAIT_NANITE_MONITORING)) holder.icon_state = "nanite_ping" @@ -403,8 +393,7 @@ Diagnostic HUDs! //Sillycone hooks /mob/living/silicon/proc/diag_hud_set_health() var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(stat == DEAD) holder.icon_state = "huddiagdead" else @@ -412,8 +401,7 @@ Diagnostic HUDs! /mob/living/silicon/proc/diag_hud_set_status() var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size switch(stat) if(CONSCIOUS) holder.icon_state = "hudstat" @@ -425,8 +413,7 @@ Diagnostic HUDs! //Borgie battery tracking! /mob/living/silicon/robot/proc/diag_hud_set_borgcell() var/image/holder = hud_list[DIAG_BATT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(cell) var/chargelvl = (cell.charge/cell.maxcharge) holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" @@ -436,8 +423,7 @@ Diagnostic HUDs! //borg-AI shell tracking /mob/living/silicon/robot/proc/diag_hud_set_aishell() //Shows tracking beacons on the mech var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(!shell) //Not an AI shell holder.icon_state = null set_hud_image_inactive(DIAG_TRACK_HUD) @@ -451,8 +437,7 @@ Diagnostic HUDs! //AI side tracking of AI shell control /mob/living/silicon/ai/proc/diag_hud_set_deployed() //Shows tracking beacons on the mech var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(!deployed_shell) holder.icon_state = null set_hud_image_inactive(DIAG_TRACK_HUD) @@ -465,15 +450,13 @@ Diagnostic HUDs! ~~~~~~~~~~~~~~~~~~~~~*/ /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechhealth() var/image/holder = hud_list[DIAG_MECH_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "huddiag[RoundDiagBar(atom_integrity/max_integrity)]" /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechcell() var/image/holder = hud_list[DIAG_BATT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(cell) var/chargelvl = cell.charge/cell.maxcharge holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" @@ -482,8 +465,7 @@ Diagnostic HUDs! /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechstat() var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(internal_damage) holder.icon_state = "hudwarn" set_hud_image_active(DIAG_STAT_HUD) @@ -494,8 +476,7 @@ Diagnostic HUDs! ///Shows tracking beacons on the mech /obj/vehicle/sealed/mecha/proc/diag_hud_set_mechtracking() var/image/holder = hud_list[DIAG_TRACK_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size var/new_icon_state //This var exists so that the holder's icon state is set only once in the event of multiple mech beacons. for(var/obj/item/mecha_parts/mecha_tracking/T in trackers) if(T.ai_beacon) //Beacon with AI uplink @@ -508,8 +489,7 @@ Diagnostic HUDs! ///Shows inbuilt camera on the mech; if the camera's view range was affected by an EMP, shows a red blip while it's affected /obj/vehicle/sealed/mecha/proc/diag_hud_set_camera() var/image/holder = hud_list[DIAG_CAMERA_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(chassis_camera.is_emp_scrambled) holder.icon_state = "hudcamera_empd" return @@ -520,14 +500,12 @@ Diagnostic HUDs! ~~~~~~~~~~*/ /mob/living/simple_animal/bot/proc/diag_hud_set_bothealth() var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/simple_animal/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(bot_mode_flags & BOT_MODE_ON) holder.icon_state = "hudstat" else if(stat) //Generally EMP causes this @@ -537,8 +515,7 @@ Diagnostic HUDs! /mob/living/simple_animal/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation var/image/holder = hud_list[DIAG_BOT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(client) //If the bot is player controlled, it will not be following mode logic! holder.icon_state = "hudsentient" return @@ -559,8 +536,7 @@ Diagnostic HUDs! /mob/living/simple_animal/bot/mulebot/proc/diag_hud_set_mulebotcell() var/image/holder = hud_list[DIAG_BATT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(cell) var/chargelvl = (cell.charge/cell.maxcharge) holder.icon_state = "hudbatt[RoundDiagBar(chargelvl)]" @@ -577,3 +553,19 @@ Diagnostic HUDs! var/image/holder = hud_list[DIAG_AIRLOCK_HUD] holder.icon_state = "electrified" set_hud_image_active(DIAG_AIRLOCK_HUD) + +#define CACHED_WIDTH_INDEX "width" +#define CACHED_HEIGHT_INDEX "height" +/atom/proc/get_cached_width() + if (isnull(icon)) + return 0 + var/list/dimensions = get_icon_dimensions(icon) + return dimensions[CACHED_WIDTH_INDEX] + +/atom/proc/get_cached_height() + if (isnull(icon)) + return 0 + var/list/dimensions = get_icon_dimensions(icon) + return dimensions[CACHED_HEIGHT_INDEX] +#undef CACHED_WIDTH_INDEX +#undef CACHED_HEIGHT_INDEX diff --git a/code/game/machinery/civilian_bounties.dm b/code/game/machinery/civilian_bounties.dm index bc412aa4492d..9eda1dfc5f04 100644 --- a/code/game/machinery/civilian_bounties.dm +++ b/code/game/machinery/civilian_bounties.dm @@ -328,7 +328,7 @@ COOLDOWN_START(src, next_nag_time, nag_cooldown) /obj/item/bounty_cube/proc/set_up(datum/bounty/my_bounty, obj/item/card/id/holder_id) - bounty_value = my_bounty.reward + bounty_value = round(my_bounty.reward) bounty_name = my_bounty.name bounty_holder = holder_id.registered_name bounty_holder_job = holder_id.assignment diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 168a3f9b0883..eafdb46f9c32 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -447,8 +447,7 @@ var/size_matrix = matrix() if(size_calc_target) layer = size_calc_target.layer + 0.01 - var/icon/I = icon(size_calc_target.icon, size_calc_target.icon_state, size_calc_target.dir) - size_matrix = matrix() * (I.Height()/world.icon_size) + size_matrix = matrix() * (size_calc_target.get_cached_height() /world.icon_size) transform = size_matrix //scale the bleed overlay's size based on the target's icon size var/matrix/M = transform if(shrink) diff --git a/code/game/objects/items/cards/card_ids.dm b/code/game/objects/items/cards/card_ids.dm new file mode 100644 index 000000000000..505ae50aab2b --- /dev/null +++ b/code/game/objects/items/cards/card_ids.dm @@ -0,0 +1,14 @@ +/obj/item/card/id/away/old/cmo + name = "Charlie Station Chief Medical Officer's ID card" + desc = "A faded Charlie Station ID card. You can make out the rank \"Chief Medical Officer\"." + trim = /datum/id_trim/away/old/cmo + +/obj/item/card/id/away/old/chef + name = "Charlie Station Chef's ID card" + desc = "A faded Charlie Station ID card. You can make out the rank \"Chef\"." + trim = /datum/id_trim/away/old/chef + +/obj/item/card/id/away/old/explorer + name = "Charlie Station Explorer's ID card" + desc = "A faded Charlie Station ID card. You can make out the rank \"Explorer\"." + trim = /datum/id_trim/away/old/explorer diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 21e13d86cad4..f9db8013ca17 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -3,17 +3,19 @@ #define WAND_EMERGENCY "emergency" /obj/item/door_remote - icon_state = "gangtool-white" + icon_state = "remote_omni_open" inhand_icon_state = "electronic" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' - icon = 'icons/obj/device.dmi' + icon = 'icons/obj/devices/remote.dmi' //monkestation edit name = "control wand" desc = "Remotely controls airlocks." w_class = WEIGHT_CLASS_TINY var/mode = WAND_OPEN var/region_access = REGION_GENERAL var/list/access_list + //monkestation addition: remote type for the purpose of updating the icon + var/remote_type = "omni" /obj/item/door_remote/Initialize(mapload) . = ..() @@ -28,6 +30,7 @@ mode = WAND_EMERGENCY if(WAND_EMERGENCY) mode = WAND_OPEN + icon_state = "remote_[remote_type]_[mode]" //monkestation addition balloon_alert(user, "mode: [desc[mode]]") // Airlock remote works by sending NTNet packets to whatever it's pointed at. @@ -85,44 +88,50 @@ /obj/item/door_remote/omni name = "omni door remote" - desc = "This control wand can access any door on the station." - icon_state = "gangtool-yellow" + desc = "Remotely controls airlocks. This remote can access any door on the station." //monkestation edit region_access = REGION_ALL_STATION /obj/item/door_remote/captain name = "command door remote" - icon_state = "gangtool-yellow" + icon_state = "remote_command_open" //monkestation edit + remote_type = "command" //monkestation edit region_access = REGION_COMMAND /obj/item/door_remote/chief_engineer name = "engineering door remote" - icon_state = "gangtool-orange" + icon_state = "remote_engi_open" //monkestation edit + remote_type = "engi" //monkestation edit region_access = REGION_ENGINEERING /obj/item/door_remote/research_director name = "research door remote" - icon_state = "gangtool-purple" + icon_state = "remote_sci_open" //monkestation edit + remote_type = "sci" //monkestation edit region_access = REGION_RESEARCH /obj/item/door_remote/head_of_security name = "security door remote" - icon_state = "gangtool-red" + icon_state = "remote_security_open" //monkestation edit + remote_type = "security" //monkestation edit region_access = REGION_SECURITY /obj/item/door_remote/quartermaster name = "supply door remote" desc = "Remotely controls airlocks. This remote has additional Vault access." - icon_state = "gangtool-green" + icon_state = "remote_cargo_open" //monkestation edit + remote_type = "cargo" //monkestation edit region_access = REGION_SUPPLY /obj/item/door_remote/chief_medical_officer name = "medical door remote" - icon_state = "gangtool-blue" + icon_state = "remote_med_open" //monkestation edit + remote_type = "med" //monkestation edit region_access = REGION_MEDBAY /obj/item/door_remote/civilian name = "civilian+supply door remote" - icon_state = "gangtool-white" + icon_state = "remote_civilian_open" //monkestation edit + remote_type = "civilian" //monkestation edit region_access = (REGION_GENERAL && REGION_SUPPLY) //monkestation addition #undef WAND_OPEN diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index 3171bd2d8ef1..b82418721413 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -13,6 +13,9 @@ /// A trait that's applied while someone has this lipstick applied, and is removed when the lipstick is removed var/lipstick_trait + ///Defines if lipstick color can be spawned as a random lipstick + var/lipstick_random = TRUE + /obj/item/lipstick/Initialize(mapload) . = ..() AddElement(/datum/element/update_icon_updates_onmob) @@ -24,8 +27,10 @@ update_appearance(UPDATE_ICON) /obj/item/lipstick/update_icon_state() - icon_state = "lipstick[open ? "_uncap" : null]" - inhand_icon_state = "lipstick[open ? "open" : null]" + var/initial_icon_state = icon_state + icon_state = "[icon_state][open ? "_uncap" : null]" + inhand_icon_state = "[icon_state][open ? "open" : null]" + icon_state = initial_icon_state return ..() /obj/item/lipstick/update_overlays() @@ -65,6 +70,14 @@ desc = "An incredibly potent tube of lipstick made from the venom of the dreaded Yellow Spotted Space Lizard, as deadly as it is chic. Try not to smear it!" lipstick_trait = TRAIT_KISS_OF_DEATH +/obj/item/lipstick/syndie + name = "syndie lipstick" + desc = "Syndicate branded lipstick with a killer dose of kisses. Observe safety regulations!" + icon_state = "slipstick" + lipstick_color = COLOR_SYNDIE_RED + lipstick_trait = TRAIT_SYNDIE_KISS + lipstick_random = FALSE + /obj/item/lipstick/random name = "lipstick" icon_state = "random_lipstick" @@ -78,7 +91,8 @@ for(var/obj/item/lipstick/lipstick_path as anything in (typesof(/obj/item/lipstick) - src.type)) if(!initial(lipstick_path.lipstick_color)) continue - possible_colors[initial(lipstick_path.lipstick_color)] = initial(lipstick_path.name) + if(lipstick_path.lipstick_random) + possible_colors[initial(lipstick_path.lipstick_color)] = initial(lipstick_path.name) lipstick_color = pick(possible_colors) name = possible_colors[lipstick_color] update_appearance() diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 21517203f5f8..51f5977f92b2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -325,7 +325,7 @@ var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, 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)) + if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE || freq == FREQ_CTF_GREEN || freq == FREQ_CTF_YELLOW || freq == FREQ_UNCOMMON)) signal.data["compression"] = 0 signal.transmission_method = TRANSMISSION_SUPERSPACE signal.levels = list(0) diff --git a/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm new file mode 100644 index 000000000000..04cee4e18a79 --- /dev/null +++ b/code/game/objects/items/granters/crafting/rebarxbowsyndie.dm @@ -0,0 +1,13 @@ +/obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo + name = "SYNDICATE REBAR CROSSBOW AMMO CRAFTING MANUAL" + desc = "This book will self destruct upon being read a second time." + crafting_recipe_types = list( + /datum/crafting_recipe/rebarsyndie + ) + uses = 1 + remarks = list( + "AIM FOR THE LEGS TO CRIPPLE YOUR FOES", + "USE A ROD AND WIRECUTTERS TO MAKE BETTER AMMO", + "BE AWARE OF THE SCOPE'S BLIND SPOTS", + "READ THIS BOOK AGAIN TO DUST IT.", + ) diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 1b9d9ff27d09..616673f72a93 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -71,3 +71,15 @@ inhand_icon_state = null spawner_type = /mob/living/basic/clown/mutant deliveryamt = 5 + +/obj/item/grenade/spawnergrenade/cat + name = "Catnade" + desc = "You can hear faint meowing and the sounds of claws on metal coming from within." + spawner_type = list(/mob/living/simple_animal/hostile/feral, /mob/living/simple_animal/hostile/feraltabby) + deliveryamt = 5 + +/obj/item/grenade/spawnergrenade/cat/syndicate + name = "Syndicatnade" + desc = "You can hear aggressive meowing and the sounds of sharpened claws on metal coming from within." + spawner_type = /mob/living/simple_animal/hostile/syndicat + deliveryamt = 3 diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm index 8f24ae13d876..36f326189fd0 100644 --- a/code/game/objects/items/hand_items.dm +++ b/code/game/objects/items/hand_items.dm @@ -548,6 +548,12 @@ color = COLOR_BLACK kiss_type = /obj/projectile/kiss/death +/obj/item/hand_item/kisser/syndie + name = "syndie kiss" + desc = "oooooo you like syndicate ur a syndiekisser" + color = COLOR_SYNDIE_RED + kiss_type = /obj/projectile/kiss/syndie + /obj/projectile/kiss name = "kiss" icon = 'icons/mob/simple/animal.dmi' @@ -559,13 +565,17 @@ damage_type = BRUTE damage = 0 // love can't actually hurt you armour_penetration = 100 // but if it could, it would cut through even the thickest plate + var/silent_blown = FALSE /obj/projectile/kiss/fire(angle, atom/direct_target) - if(firer) + if(firer && !silent_blown) name = "[name] blown by [firer]" + return ..() /obj/projectile/kiss/Impact(atom/A) + def_zone = BODY_ZONE_HEAD // let's keep it PG, people + if(damage > 0 || !isliving(A)) // if we do damage or we hit a nonliving thing, we don't have to worry about a harmless hit because we can't wrongly do damage anyway return ..() @@ -619,7 +629,6 @@ living_target.visible_message("[living_target] [other_msg]", span_userdanger("Whoa! [self_msg]")) /obj/projectile/kiss/on_hit(atom/target, blocked, pierce_hit) - def_zone = BODY_ZONE_HEAD // let's keep it PG, people . = ..() if(isliving(target)) var/mob/living/living_target = target @@ -641,6 +650,18 @@ var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot(ORGAN_SLOT_HEART) dont_go_breakin_my_heart.apply_organ_damage(999) +// Based on energy gun characteristics +/obj/projectile/kiss/syndie + name = "syndie kiss" + color = COLOR_SYNDIE_RED + impact_effect_type = /obj/effect/temp_visual/impact_effect/red_laser + damage_type = BURN + armor_flag = LASER + armour_penetration = 0 + damage = 25 + wound_bonus = -20 + bare_wound_bonus = 40 + silent_blown = TRUE /obj/projectile/kiss/french name = "french kiss (is that a hint of garlic?)" diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index 2ba0ab73eab0..e6893f9d73e4 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -12,6 +12,7 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ new/datum/stack_recipe("catwalk floor tile", /obj/item/stack/tile/catwalk_tile, 1, 4, 20, category = CAT_TILES), \ new/datum/stack_recipe("stairs frame", /obj/structure/stairs_frame, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("white cane", /obj/item/cane/white, 3, time = 1 SECONDS, one_per_turf = FALSE, category = CAT_TOOLS), \ + new/datum/stack_recipe("sharpened iron rod", /obj/item/ammo_casing/rebar, 1, time = 0.2 SECONDS, one_per_turf = FALSE, category = CAT_WEAPON_AMMO), \ )) /obj/item/stack/rods diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index e994da442d5a..0fa0dbcb662e 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -489,6 +489,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( new /datum/stack_recipe("ancient armor", /obj/item/clothing/suit/armor/elder_atmosian, req_amount = 5, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING), new /datum/stack_recipe("ancient helmet", /obj/item/clothing/head/helmet/elder_atmosian, req_amount = 3, res_amount = 1, check_density = FALSE, category = CAT_CLOTHING), new /datum/stack_recipe("metallic hydrogen axe", /obj/item/fireaxe/metal_h2_axe, req_amount = 15, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_MELEE), + new /datum/stack_recipe("metallic hydrogen bolts", /obj/item/ammo_casing/rebar/hydrogen, req_amount = 1, res_amount = 1, check_density = FALSE, category = CAT_WEAPON_AMMO), )) /obj/item/stack/sheet/mineral/metal_hydrogen @@ -507,6 +508,10 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( . = ..() . += GLOB.metalhydrogen_recipes +GLOBAL_LIST_INIT(zaukerite_recipes, list( + new /datum/stack_recipe("zaukerite shard", /obj/item/ammo_casing/rebar/zaukerite, req_amount=1, res_amount=1, category = CAT_WEAPON_AMMO), + )) + /obj/item/stack/sheet/mineral/zaukerite name = "zaukerite" icon_state = "zaukerite" @@ -517,3 +522,7 @@ GLOBAL_LIST_INIT(metalhydrogen_recipes, list( mats_per_unit = list(/datum/material/zaukerite = SHEET_MATERIAL_AMOUNT) merge_type = /obj/item/stack/sheet/mineral/zaukerite material_type = /datum/material/zaukerite + +/obj/item/stack/sheet/mineral/zaukerite/get_main_recipes() + . = ..() + . += GLOB.zaukerite_recipes diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 28ba42ec8649..83053da43c3e 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -201,12 +201,23 @@ icon_state = "backpack-virology" inhand_icon_state = "viropack" +//MONKESTATION EDIT START// adds generic backpack and touches up the sprites /obj/item/storage/backpack/ert + name = "emergency response team backpack" + desc = "A spacious backpack with lots of pockets." + icon_state = "ert_plain" + inhand_icon_state = "securitypack" + resistance_flags = FIRE_PROOF + alternate_worn_layer = ABOVE_BODY_FRONT_HEAD_LAYER + +/obj/item/storage/backpack/ert/Initialize(mapload) + . = ..() + atom_storage.max_total_storage = 25 //lots of pockets + +/obj/item/storage/backpack/ert/commander name = "emergency response team commander backpack" desc = "A spacious backpack with lots of pockets, worn by the Commander of an Emergency Response Team." icon_state = "ert_commander" - inhand_icon_state = "securitypack" - resistance_flags = FIRE_PROOF /obj/item/storage/backpack/ert/security name = "emergency response team security backpack" @@ -233,6 +244,12 @@ desc = "A spacious backpack with lots of pockets, worn by Clowns of an Emergency Response Team." icon_state = "ert_clown" +/obj/item/storage/backpack/ert/generic + name = "emergency response team backpack" + desc = "A spacious backpack with lots of pockets" + icon_state = "ert_generic" +//MONKESTATION EDIT STOP + /obj/item/storage/backpack/saddlepack name = "saddlepack" desc = "A backpack designed to be saddled on a mount or carried on your back, and switch between the two on the fly. It's quite spacious, at the cost of making you feel like a literal pack mule." diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index dc35fcbab53c..bdac9fec7ce4 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -281,7 +281,7 @@ desc = "A patented Nanotrasen storage system designed for any kind of mineral sheet." icon = 'icons/obj/mining.dmi' icon_state = "sheetsnatcher" - worn_icon_state = "satchel" + worn_icon_state = "construction_bag" //monkestation edit var/capacity = 300; //the number of sheets it can carry. @@ -573,4 +573,28 @@ for(var/i in 1 to 40) new /obj/item/ammo_casing/caseless/harpoon(src) +/obj/item/storage/bag/rebar_quiver + name = "Rebar Storage Quiver" + icon = 'icons/obj/weapons/guns/bows/quivers.dmi' + icon_state = "rebar_quiver" + worn_icon_state = "rebar_quiver" + inhand_icon_state = "rebar_quiver" + desc = "A oxygen tank cut in half, used for holding sharpened rods for the rebar crossbow." + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + resistance_flags = FLAMMABLE + +/obj/item/storage/bag/rebar_quiver/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_TINY + atom_storage.max_slots = 10 + atom_storage.max_total_storage = 15 + atom_storage.set_holdable(list( + /obj/item/ammo_casing/rebar, + /obj/item/ammo_casing/rebar/syndie, + /obj/item/ammo_casing/rebar/healium, + /obj/item/ammo_casing/rebar/hydrogen, + /obj/item/ammo_casing/rebar/zaukerite, + /obj/item/ammo_casing/rebar/paperball, + )) + #undef ORE_BAG_BALOON_COOLDOWN diff --git a/code/game/objects/items/storage/boxes/science_boxes.dm b/code/game/objects/items/storage/boxes/science_boxes.dm index 754a0cb2f5b4..99c652fdbb12 100644 --- a/code/game/objects/items/storage/boxes/science_boxes.dm +++ b/code/game/objects/items/storage/boxes/science_boxes.dm @@ -106,7 +106,7 @@ new /obj/item/circuitboard/machine/protolathe/offstation(src) new /obj/item/circuitboard/machine/destructive_analyzer(src) new /obj/item/circuitboard/machine/circuit_imprinter/offstation(src) - new /obj/item/circuitboard/computer/rdconsole(src) + new /obj/item/circuitboard/computer/rdconsole/unlocked(src) /obj/item/storage/box/stabilized //every single stabilized extract from xenobiology name = "box of stabilized extracts" diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 869b4c659fd6..84d50c607702 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -334,6 +334,14 @@ icon_state = "syndiebox" illustration = "writing_syndie" +/obj/item/storage/box/syndie_kit/rebarxbowsyndie + name = "Boxed Rebar Crossbow" + desc = "A scoped weapon with low armor penetration, but devestating against flesh. Features instruction manual for making specialty ammo." + +/obj/item/storage/box/syndie_kit/rebarxbowsyndie/PopulateContents() + new /obj/item/book/granter/crafting_recipe/dusting/rebarxbowsyndie_ammo(src) + new /obj/item/gun/ballistic/rifle/rebarxbow/syndie(src) + /obj/item/storage/box/syndie_kit/origami_bundle name = "origami kit" desc = "A box full of a number of rather masterfully engineered paper planes and a manual on \"The Art of Origami\"." diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index c1907409d199..09161eb70ff8 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -30,7 +30,6 @@ /obj/item/gbp_punchcard, /obj/item/implanter, /obj/item/lighter, - /obj/item/lipstick, /obj/item/match, /obj/item/paper, /obj/item/pen, diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 1fe02b6a007e..0030e5543b4e 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -439,7 +439,7 @@ /obj/structure/flora/tree/pine/xmas/presents icon_state = "pinepresents" desc = "A wondrous decorated Christmas tree. It has presents!" - var/gift_type = /obj/item/a_gift/anything + var/gift_type = /obj/item/a_gift var/unlimited = FALSE var/static/list/took_presents //shared between all xmas trees @@ -462,9 +462,15 @@ if(!unlimited) took_presents[user.ckey] = TRUE + if(prob(50)) + user.put_in_hands(new gift_type(drop_location())) + return + if(prob(1)) + new /mob/living/carbon/human/species/monkey/angry(drop_location()) + to_chat(user, span_warning("A live monkey crawls out of the gift... its PISSED!!!")) + return + user.put_in_hands(new /obj/item/a_gift/anything(drop_location())) - var/obj/item/G = new gift_type(src) - user.put_in_hands(G) /obj/structure/flora/tree/pine/xmas/presents/unlimited desc = "A wonderous decorated Christmas tree. It has a seemly endless supply of presents!" diff --git a/code/game/say.dm b/code/game/say.dm index 8eb2b780228d..d35b4971f6dd 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -19,7 +19,8 @@ GLOBAL_LIST_INIT(freqtospan, list( "[FREQ_CTF_BLUE]" = "blueteamradio", "[FREQ_CTF_GREEN]" = "greenteamradio", "[FREQ_CTF_YELLOW]" = "yellowteamradio", - "[FREQ_RADIO]" = "radioradio" + "[FREQ_RADIO]" = "radioradio", + "[FREQ_UNCOMMON]" = "uncommonradio" )) /atom/movable/proc/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null, filterproof = FALSE, message_range = 7, datum/saymode/saymode = null) diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index b43d6b01d49b..3ca4a3120320 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -219,6 +219,17 @@ GLOBAL_PROTECT(LastAdminCalledProc) if(target == GLOBAL_PROC) return call("/proc/[procname]")(arglist(arguments)) else if(target != world) + // monkestation start: anti-lag + if(isatom(target) && procname == "Shake") + var/confirmation = UNLINT(tgui_alert( + user = usr, + message = "Are you SURE you want to call Shake()?\nThis has a VERY HIGH CHANCE of causing immense lag or even a crash!", + title = "OH GOD WHY", + buttons = list("I'm sure!", "Nope."), + )) + if(confirmation != "I'm sure!") + return + // monkestation end return call(target, procname)(arglist(arguments)) else log_admin("[key_name(usr)] attempted to call world/proc/[procname] with arguments: [english_list(arguments)]") diff --git a/code/modules/admin/smites/curse_of_babel.dm b/code/modules/admin/smites/curse_of_babel.dm index 4098cbf928c0..dacc797c4150 100644 --- a/code/modules/admin/smites/curse_of_babel.dm +++ b/code/modules/admin/smites/curse_of_babel.dm @@ -1,3 +1,4 @@ +/* monkestation removal. if you REALLY want to do this for some reason, call the proc yourself. /// Strikes the target with a lightning bolt /datum/smite/curse_of_babel name = "Curse of Babel" @@ -15,3 +16,4 @@ target.apply_status_effect(/datum/status_effect/tower_of_babel, duration) to_chat(target, span_userdanger("The gods have punished you for your sins!"), confidential = TRUE) +monkestation end */ diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 73d8ef375b98..dc0a72d7f7d5 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -252,7 +252,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) else SSplexora.aticket_new(src, msg_raw, is_bwoink, urgent) // monkestation edit: PLEXORA MessageNoRecipient(msg_raw, urgent) - send_message_to_tgs(msg, urgent) + send_message_to_tgs(html_decode(msg), urgent) GLOB.ahelp_tickets.active_tickets += src /datum/admin_help/proc/format_embed_discord(message) @@ -798,7 +798,7 @@ GLOBAL_DATUM_INIT(admin_help_ui_handler, /datum/admin_help_ui_handler, new) if(user_client.current_ticket) user_client.current_ticket.TimeoutVerb() if(urgent) - var/sanitized_message = sanitize(copytext_char(message, 1, MAX_MESSAGE_LEN)) + var/sanitized_message = sanitize(trim(message, MAX_MESSAGE_LEN), encode = FALSE) user_client.current_ticket.send_message_to_tgs(sanitized_message, urgent = TRUE) user_client.current_ticket.MessageNoRecipient(message, urgent) return diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index 988f6ca344e8..786effac83e1 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -141,7 +141,7 @@ var/list/spawnpoints = GLOB.emergencyresponseteamspawn var/index = 0 - var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", alert_pic = /obj/item/card/id/advanced/centcom/ert, role_name_text = "emergency response team") + var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [ertemplate.polldesc]?", check_jobban = "deathsquad", alert_pic = ertemplate.poll_icon, role_name_text = "[ertemplate.poll_title]") //monkestation edit: adds custom poll titles var/teamSpawned = FALSE // This list will take priority over spawnpoints if not empty diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm index a172f3d84542..89849d2915c6 100644 --- a/code/modules/admin/verbs/secrets.dm +++ b/code/modules/admin/verbs/secrets.dm @@ -294,6 +294,7 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller) summon_magic(holder.mob, survivor_probability) +/* monkestation removal: if you REALLY want to do this for some reason, call the proc yourself. if("towerOfBabel") if(!is_funmin) return @@ -305,6 +306,7 @@ GLOBAL_DATUM(everyone_an_antag, /datum/everyone_is_an_antag_controller) if(!is_funmin) return holder.tower_of_babel_undo() +monkestation end */ if("events") if(!is_funmin) diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 056e72fc1a05..9bdf5646898a 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -48,8 +48,7 @@ if(!owner) return var/image/holder = owner.hud_list[GLAND_HUD] - var/icon/I = icon(owner.icon, owner.icon_state, owner.dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = owner.get_cached_height() - world.icon_size if(active_mind_control) holder.icon_state = "hudgland_active" else if(mind_control_uses) diff --git a/code/modules/antagonists/changeling/powers/transform.dm b/code/modules/antagonists/changeling/powers/transform.dm index 804dd2bffaca..c2c071a7355d 100644 --- a/code/modules/antagonists/changeling/powers/transform.dm +++ b/code/modules/antagonists/changeling/powers/transform.dm @@ -117,8 +117,7 @@ . = ..() if(hud_icon) var/image/holder = user.hud_list[ID_HUD] - var/icon/I = icon(user.icon, user.icon_state, user.dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = user.get_cached_height() - world.icon_size holder.icon_state = hud_icon /** diff --git a/code/modules/antagonists/clown_ops/clownop.dm b/code/modules/antagonists/clown_ops/clownop.dm index 5353875491e4..79d64bb47007 100644 --- a/code/modules/antagonists/clown_ops/clownop.dm +++ b/code/modules/antagonists/clown_ops/clownop.dm @@ -16,14 +16,12 @@ message_admins("[key_name_admin(admin)] has clown op'ed [key_name_admin(new_owner)].") log_admin("[key_name(admin)] has clown op'ed [key_name(new_owner)].") -/datum/antagonist/nukeop/clownop/apply_innate_effects(mob/living/mob_override) +/datum/antagonist/nukeop/clownop/on_gain() . = ..() - var/mob/living/L = owner.current || mob_override - ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT) + ADD_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT) -/datum/antagonist/nukeop/clownop/remove_innate_effects(mob/living/mob_override) - var/mob/living/L = owner.current || mob_override - REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT) +/datum/antagonist/nukeop/clownop/on_removal() + REMOVE_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT) return ..() /datum/antagonist/nukeop/clownop/equip_op() @@ -48,14 +46,12 @@ challengeitem = /obj/item/nuclear_challenge/clownops suicide_cry = "HAPPY BIRTHDAY!!" -/datum/antagonist/nukeop/leader/clownop/apply_innate_effects(mob/living/mob_override) +/datum/antagonist/nukeop/leader/clownop/on_gain() . = ..() - var/mob/living/L = owner.current || mob_override - ADD_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT) + ADD_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT) -/datum/antagonist/nukeop/leader/clownop/remove_innate_effects(mob/living/mob_override) - var/mob/living/L = owner.current || mob_override - REMOVE_TRAIT(L, TRAIT_NAIVE, CLOWNOP_TRAIT) +/datum/antagonist/nukeop/leader/clownop/on_removal() + REMOVE_TRAIT(owner, TRAIT_NAIVE, CLOWNOP_TRAIT) return ..() /datum/antagonist/nukeop/leader/clownop/equip_op() diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 2c3248a0445a..518a1cd28e18 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -77,21 +77,21 @@ /datum/antagonist/ert/security // kinda handled by the base template but here for completion /datum/antagonist/ert/security/red - outfit = /datum/outfit/centcom/ert/security/alert + outfit = /datum/outfit/centcom/ert/security/red /datum/antagonist/ert/engineer role = "Engineer" outfit = /datum/outfit/centcom/ert/engineer /datum/antagonist/ert/engineer/red - outfit = /datum/outfit/centcom/ert/engineer/alert + outfit = /datum/outfit/centcom/ert/engineer/red /datum/antagonist/ert/medic role = "Medical Officer" outfit = /datum/outfit/centcom/ert/medic /datum/antagonist/ert/medic/red - outfit = /datum/outfit/centcom/ert/medic/alert + outfit = /datum/outfit/centcom/ert/medic/red /datum/antagonist/ert/commander role = "Commander" @@ -99,7 +99,7 @@ plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander /datum/antagonist/ert/commander/red - outfit = /datum/outfit/centcom/ert/commander/alert + outfit = /datum/outfit/centcom/ert/commander/red /datum/antagonist/ert/janitor role = "Janitor" diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 6bab5ebb6fc6..f4218b9b1e88 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -7,6 +7,8 @@ * Used in creating spooky-text for heretic ascension announcements. */ /proc/generate_heretic_text(length = 25) + if(!isnum(length)) // stupid thing so we can use this directly in replacetext + length = 25 . = "" for(var/i in 1 to length) . += pick("!", "$", "^", "@", "&", "#", "*", "(", ")", "?") diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 19098b052105..dc942ee81e1c 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -690,6 +690,14 @@ cost = 2 priority = MAX_KNOWLEDGE_PRIORITY + 1 // Yes, the final ritual should be ABOVE the max priority. required_atoms = list(/mob/living/carbon/human = 3) + /// The typepath of the achievement to grant upon successful ascension. + var/datum/award/achievement/misc/ascension_achievement + /// The text of the ascension announcement. + /// %NAME% is replaced with the heretic's real name, + /// and %SPOOKY% is replaced with output from [generate_heretic_text] + var/announcement_text + /// The sound that's played for the ascension announcement. + var/announcement_sound /datum/heretic_knowledge/ultimate/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() @@ -752,6 +760,15 @@ header = "A Heretic is Ascending!", notify_flags = NOTIFY_CATEGORY_DEFAULT, ) + priority_announce( + text = replacetext(replacetext(announcement_text, "%NAME%", user.real_name), "%SPOOKY%", GLOBAL_PROC_REF(generate_heretic_text)), + title = generate_heretic_text(), + sound = announcement_sound, + color_override = "pink", + ) + + if(!isnull(ascension_achievement)) + user.client?.give_award(ascension_achievement, user) return TRUE /datum/heretic_knowledge/ultimate/cleanup_atoms(list/selected_atoms) diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index 185bb382eb85..01ebcc0cd0ed 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -188,6 +188,9 @@ for the Nightwatcher brought forth the rite to mankind! His gaze continues, as now I am one with the flames, \ WITNESS MY ASCENSION, THE ASHY LANTERN BLAZES ONCE MORE!" route = PATH_ASH + ascension_achievement = /datum/award/achievement/misc/ash_ascension + announcement_text = "%SPOOKY% Fear the blaze, for the Ashlord, %NAME% has ascended! The flames shall consume all! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_ash.ogg' /// A static list of all traits we apply on ascension. var/static/list/traits_to_apply = list( TRAIT_BOMBIMMUNE, @@ -212,13 +215,6 @@ /datum/heretic_knowledge/ultimate/ash_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] Fear the blaze, for the Ashlord, [user.real_name] has ascended! The flames shall consume all! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_ash.ogg', - color_override = "pink", - ) - var/datum/action/cooldown/spell/fire_sworn/circle_spell = new(user.mind) circle_spell.Grant(user) @@ -234,6 +230,4 @@ var/datum/action/cooldown/spell/aoe/fiery_rebirth/fiery_rebirth = locate() in user.actions fiery_rebirth?.cooldown_time *= 0.16 - user.client?.give_award(/datum/award/achievement/misc/ash_ascension, user) - if(length(traits_to_apply)) - user.add_traits(traits_to_apply, MAGIC_TRAIT) + user.add_traits(traits_to_apply, type) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 1c800944ce54..9c9d924fb54e 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -397,6 +397,9 @@ gain_text = "The Torn Champion is freed! I will become the blade reunited, and with my greater ambition, \ I AM UNMATCHED! A STORM OF STEEL AND SILVER IS UPON US! WITNESS MY ASCENSION!" route = PATH_BLADE + ascension_achievement = /datum/award/achievement/misc/blade_ascension + announcement_text = "%SPOOKY% Master of blades, the Torn Champion's disciple, %NAME% has ascended! Their steel is that which will cut reality in a maelstom of silver! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_blade.ogg' /datum/heretic_knowledge/ultimate/blade_final/is_valid_sacrifice(mob/living/carbon/human/sacrifice) . = ..() @@ -407,14 +410,7 @@ /datum/heretic_knowledge/ultimate/blade_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] Master of blades, the Torn Champion's disciple, [user.real_name] has ascended! Their steel is that which will cut reality in a maelstom of silver! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_blade.ogg', - color_override = "pink", - ) - user.client?.give_award(/datum/award/achievement/misc/blade_ascension, user) - user.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_NEVER_WOUNDED), name) + user.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_NEVER_WOUNDED), type) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) user.apply_status_effect(/datum/status_effect/protective_blades/recharging, null, 8, 30, 0.25 SECONDS, 1 MINUTES) @@ -442,3 +438,8 @@ if(target.stat != DEAD) // And! Get some free healing for a portion of the bonus damage dealt. source.heal_overall_damage(bonus_damage / 2, bonus_damage / 2) + // monkestation start: heal pain on lifesteal too + source.cause_pain(BODY_ZONES_ALL, -(bonus_damage / 2), BRUTE) + source.cause_pain(BODY_ZONES_ALL, -(bonus_damage / 2), BURN) + source.adjust_pain_shock(-bonus_damage) + // monkestation end diff --git a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm index a1e8c381ce78..58decbe606ff 100644 --- a/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/cosmic_lore.dm @@ -234,6 +234,9 @@ I closed my eyes with my head laid against their form. I was safe. \ WITNESS MY ASCENSION!" route = PATH_COSMIC + ascension_achievement = /datum/award/achievement/misc/cosmic_ascension + announcement_text = "%SPOOKY% A Star Gazer has arrived into the station, %NAME% has ascended! This station is the domain of the Cosmos! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg' /// A static list of command we can use with our mob. var/static/list/star_gazer_commands = list( /datum/pet_command/idle, @@ -252,12 +255,6 @@ /datum/heretic_knowledge/ultimate/cosmic_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] A Star Gazer has arrived into the station, [user.real_name] has ascended! This station is the domain of the Cosmos! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_cosmic.ogg', - color_override = "pink", - ) var/mob/living/basic/heretic_summon/star_gazer/star_gazer_mob = new /mob/living/basic/heretic_summon/star_gazer(loc) star_gazer_mob.maxHealth = INFINITY star_gazer_mob.health = INFINITY diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index bc88fa654bdd..03fe70fb9908 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -308,21 +308,15 @@ Reality will bend to THE LORD OF THE NIGHT or be unraveled! WITNESS MY ASCENSION!" required_atoms = list(/mob/living/carbon/human = 4) route = PATH_FLESH + ascension_achievement = /datum/award/achievement/misc/flesh_ascension + announcement_text = "%SPOOKY% Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, %NAME% has ascended! Fear the ever twisting hand! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg' /datum/heretic_knowledge/ultimate/flesh_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] Ever coiling vortex. Reality unfolded. ARMS OUTREACHED, THE LORD OF THE NIGHT, [user.real_name] has ascended! Fear the ever twisting hand! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_flesh.ogg', - color_override = "pink", - ) - var/datum/action/cooldown/spell/shapeshift/shed_human_form/worm_spell = new(user.mind) worm_spell.Grant(user) - user.client?.give_award(/datum/award/achievement/misc/flesh_ascension, user) - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/datum/heretic_knowledge/limited_amount/flesh_grasp/grasp_ghoul = heretic_datum.get_knowledge(/datum/heretic_knowledge/limited_amount/flesh_grasp) grasp_ghoul.limit *= 3 diff --git a/code/modules/antagonists/heretic/knowledge/knock_lore.dm b/code/modules/antagonists/heretic/knowledge/knock_lore.dm index 16425bf3a15f..ec75455bfd48 100644 --- a/code/modules/antagonists/heretic/knowledge/knock_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/knock_lore.dm @@ -197,6 +197,8 @@ Reality will soon be torn, the Spider Gate opened! WITNESS ME!" required_atoms = list(/mob/living/carbon/human = 3) route = PATH_KNOCK + announcement_text = "Delta-class dimensional anomaly detec%SPOOKY% Reality rended, torn. Gates open, doors open, %NAME% has ascended! Fear the tide! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_knock.ogg' /datum/heretic_knowledge/ultimate/knock_final/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) . = ..() @@ -220,14 +222,6 @@ /datum/heretic_knowledge/ultimate/knock_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "Delta-class dimensional anomaly detec[generate_heretic_text()] Reality rended, torn. Gates open, doors open, [user.real_name] has ascended! Fear the tide! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_knock.ogg', - color_override = "pink", - ) - user.client?.give_award(/datum/award/achievement/misc/knock_ascension, user) - // buffs var/datum/action/cooldown/spell/shapeshift/eldritch/ascension/transform_spell = new(user.mind) transform_spell.Grant(user) diff --git a/code/modules/antagonists/heretic/knowledge/moon_lore.dm b/code/modules/antagonists/heretic/knowledge/moon_lore.dm index b3392810bf0e..c76dc4cf4f84 100644 --- a/code/modules/antagonists/heretic/knowledge/moon_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/moon_lore.dm @@ -190,6 +190,10 @@ for where the Ringleader had started the parade, I shall continue it unto the suns demise \ WITNESS MY ASCENSION, THE MOON SMILES ONCE MORE AND FOREVER MORE IT SHALL!" route = PATH_MOON + ascension_achievement = /datum/award/achievement/misc/moon_ascension + announcement_text = "%SPOOKY% Laugh, for the ringleader %NAME% has ascended! \ + The truth shall finally devour the lie! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_moon.ogg' /datum/heretic_knowledge/ultimate/moon_final/is_valid_sacrifice(mob/living/sacrifice) @@ -202,17 +206,7 @@ /datum/heretic_knowledge/ultimate/moon_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] Laugh, for the ringleader [user.real_name] has ascended! \ - The truth shall finally devour the lie! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_moon.ogg', - color_override = "pink", - ) - - user.client?.give_award(/datum/award/achievement/misc/moon_ascension, user) - ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, REF(src)) - + ADD_TRAIT(user, TRAIT_MADNESS_IMMUNE, type) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) var/amount_of_lunatics = 0 diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index dbe9e4d77178..61828cf612aa 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -111,9 +111,8 @@ var/turf/mover_turf = get_turf(source) if(HAS_TRAIT(mover_turf, TRAIT_RUSTY)) ADD_TRAIT(source, TRAIT_BATON_RESISTANCE, type) - return - - REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type) + else + REMOVE_TRAIT(source, TRAIT_BATON_RESISTANCE, type) /** * Signal proc for [COMSIG_LIVING_LIFE]. @@ -129,16 +128,20 @@ return // Heals all damage + Stamina - source.adjustBruteLoss(-2, FALSE) - source.adjustFireLoss(-2, FALSE) - source.adjustToxLoss(-2, FALSE, forced = TRUE) // Slimes are people to - source.adjustOxyLoss(-0.5, FALSE) - source.stamina.adjust(2) + var/delta_time = DELTA_WORLD_TIME(SSmobs) + var/needs_update = FALSE // Optimization, if nothing changes then don't update our owner's health. + needs_update += source.adjustBruteLoss(-2 * delta_time, updating_health = FALSE) + needs_update += source.adjustFireLoss(-2 * delta_time, updating_health = FALSE) + needs_update += source.adjustToxLoss(-2 * delta_time, updating_health = FALSE, forced = TRUE) // Slimes are people too + needs_update += source.adjustOxyLoss(-0.5 * delta_time, updating_health = FALSE) + if(needs_update) + source.updatehealth() + source.stamina.adjust(2 * delta_time) // Reduces duration of stuns/etc - source.AdjustAllImmobility(-0.5 SECONDS) + source.AdjustAllImmobility(-0.5 SECONDS * delta_time) // Heals blood loss if(source.blood_volume < BLOOD_VOLUME_NORMAL) - source.blood_volume += 2.5 * seconds_per_tick + source.blood_volume += 2.5 * delta_time /datum/heretic_knowledge/mark/rust_mark name = "Mark of Rust" @@ -222,6 +225,9 @@ gain_text = "Champion of rust. Corruptor of steel. Fear the dark, for the RUSTBRINGER has come! \ The Blacksmith forges ahead! Rusted Hills, CALL MY NAME! WITNESS MY ASCENSION!" route = PATH_RUST + ascension_achievement = /datum/award/achievement/misc/rust_ascension + announcement_text = "%SPOOKY% Fear the decay, for the Rustbringer, %NAME% has ascended! None shall escape the corrosion! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_rust.ogg' /// If TRUE, then immunities are currently active. var/immunities_active = FALSE /// A typepath to an area that we must finish the ritual in. @@ -241,6 +247,12 @@ TRAIT_SHOCKIMMUNE, TRAIT_SLEEPIMMUNE, TRAIT_STUNIMMUNE, + // monkestation addition: pain system + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + // monkestation end ) /datum/heretic_knowledge/ultimate/rust_final/on_research(mob/user, datum/antagonist/heretic/our_heretic) @@ -261,12 +273,6 @@ /datum/heretic_knowledge/ultimate/rust_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] Fear the decay, for the Rustbringer, [user.real_name] has ascended! None shall escape the corrosion! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_rust.ogg', - color_override = "pink", - ) new /datum/rust_spread(loc) RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) @@ -305,11 +311,15 @@ if(!HAS_TRAIT(our_turf, TRAIT_RUSTY)) return - source.adjustBruteLoss(-4, FALSE) - source.adjustFireLoss(-4, FALSE) - source.adjustToxLoss(-4, FALSE, forced = TRUE) - source.adjustOxyLoss(-4, FALSE) - source.stamina.adjust(20) + var/delta_time = DELTA_WORLD_TIME(SSmobs) + var/needs_update = FALSE + needs_update += source.adjustBruteLoss(-4 * delta_time, updating_health = FALSE) + needs_update += source.adjustFireLoss(-4 * delta_time, updating_health = FALSE) + needs_update += source.adjustToxLoss(-4 * delta_time, updating_health = FALSE, forced = TRUE) + needs_update += source.adjustOxyLoss(-4 * delta_time, updating_health = FALSE) + if(needs_update) + source.updatehealth() + source.stamina.adjust(20 * delta_time) /** * #Rust spread datum diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index f4aebf1a0c76..ca4033931c12 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -183,6 +183,9 @@ The Aristocrat stands before me, beckoning. We will play a waltz to the whispers of dying reality, \ as the world is destroyed before our eyes. The void will return all to nothing, WITNESS MY ASCENSION!" route = PATH_VOID + ascension_achievement = /datum/award/achievement/misc/void_ascension + announcement_text = "%SPOOKY% The nobleman of void %NAME% has arrived, stepping along the Waltz that ends worlds! %SPOOKY%" + announcement_sound = 'sound/ambience/antag/heretic/ascend_void.ogg' ///soundloop for the void theme var/datum/looping_sound/void_loop/sound_loop ///Reference to the ongoing voidstrom that surrounds the heretic @@ -202,14 +205,7 @@ /datum/heretic_knowledge/ultimate/void_final/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) . = ..() - priority_announce( - text = "[generate_heretic_text()] The nobleman of void [user.real_name] has arrived, stepping along the Waltz that ends worlds! [generate_heretic_text()]", - title = "[generate_heretic_text()]", - sound = 'sound/ambience/antag/heretic/ascend_void.ogg', - color_override = "pink", - ) - user.client?.give_award(/datum/award/achievement/misc/void_ascension, user) - ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, MAGIC_TRAIT) + ADD_TRAIT(user, TRAIT_RESISTLOWPRESSURE, type) // Let's get this show on the road! sound_loop = new(user, TRUE, TRUE) diff --git a/code/modules/antagonists/nightmare/nightmare_species.dm b/code/modules/antagonists/nightmare/nightmare_species.dm index 647841f6931c..d01a79cf9871 100644 --- a/code/modules/antagonists/nightmare/nightmare_species.dm +++ b/code/modules/antagonists/nightmare/nightmare_species.dm @@ -24,7 +24,12 @@ TRAIT_NODISMEMBER, TRAIT_NOHUNGER, TRAIT_NOBLOOD, - TRAIT_NO_PAIN_EFFECTS, // monkestation edit + // monkestation addition: pain system + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + // monkestation end ) mutantheart = /obj/item/organ/internal/heart/nightmare diff --git a/code/modules/bitrunning/designs.dm b/code/modules/bitrunning/designs.dm index f20497c8dd46..bcf958ab63e6 100644 --- a/code/modules/bitrunning/designs.dm +++ b/code/modules/bitrunning/designs.dm @@ -75,6 +75,18 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +//MONKESTATION ADDITION START +/datum/design/board/bitrunning_order + name = "Bitrunning Vendor Console" + desc = "Allows for the construction of circuit boards used to build a Bitrunning Vendor Console." + id = "bitrunning_order" + build_path = /obj/item/circuitboard/computer/order_console/bitrunning + + category = list( + RND_CATEGORY_COMPUTER + RND_SUBCATEGORY_COMPUTER_CARGO + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +//MONKESTATION ADDITION END /datum/techweb_node/bitrunning id = "bitrunning" @@ -85,5 +97,6 @@ "byteforge", "quantum_console", "netpod", + "bitrunning_order", //MONKESTATION ADDITION ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) diff --git a/code/modules/cargo/bounty.dm b/code/modules/cargo/bounty.dm index 92ccafc40f89..b88a2bc37a36 100644 --- a/code/modules/cargo/bounty.dm +++ b/code/modules/cargo/bounty.dm @@ -44,8 +44,11 @@ switch(bounty_num) if(CIV_JOB_BASIC) chosen_type = pick(subtypesof(/datum/bounty/item/assistant)) - if(CIV_JOB_ROBO) - chosen_type = pick(subtypesof(/datum/bounty/item/mech)) + if(CIV_JOB_ROBO) //monkestation edit: bot bounties + if(prob(50)) + chosen_type = pick(subtypesof(/datum/bounty/item/mech)) + else + chosen_type = pick(subtypesof(/datum/bounty/item/bot)) if(CIV_JOB_CHEF) chosen_type = pick(subtypesof(/datum/bounty/item/chef) + subtypesof(/datum/bounty/reagent/chef)) if(CIV_JOB_SEC) @@ -67,6 +70,17 @@ chosen_type = pick(subtypesof(/datum/bounty/item/science)) else chosen_type = pick(subtypesof(/datum/bounty/item/slime)) + if(CIV_JOB_SCI_HEAD) //monkestation addition : RD bounties. 50% for science bounty, 50% for robo bounty. + if(prob(50)) + if(prob(50)) + chosen_type = pick(subtypesof(/datum/bounty/item/science)) + else + chosen_type = pick(subtypesof(/datum/bounty/item/slime)) + else + if(prob(50)) + chosen_type = pick(subtypesof(/datum/bounty/item/mech)) + else + chosen_type = pick(subtypesof(/datum/bounty/item/bot)) if(CIV_JOB_ENG) chosen_type = pick(subtypesof(/datum/bounty/item/engineering)) if(CIV_JOB_MINE) diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index c5c22c997064..f5e75b2855df 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -226,6 +226,22 @@ crate_name = "energy gun crate" crate_type = /obj/structure/closet/crate/secure/plasma +/datum/supply_pack/security/armory/laser_carbine + name = "Laser Carbine Crate" + desc = "Contains three laser carbines, capable of rapidly firing weak lasers." + cost = CARGO_CRATE_VALUE * 9 + contains = list(/obj/item/gun/energy/laser/carbine = 3) + crate_name = "laser carbine crate" + crate_type = /obj/structure/closet/crate/secure/plasma + +/datum/supply_pack/security/armory/disabler_smg + name = "Disabler SMG Crate" + desc = "Contains three disabler SMGs, capable of rapidly firing weak disabler beams." + cost = CARGO_CRATE_VALUE * 7 + contains = list(/obj/item/gun/energy/disabler/smg = 3) + crate_name = "disabler smg crate" + crate_type = /obj/structure/closet/crate/secure/plasma + /datum/supply_pack/security/armory/exileimp name = "Exile Implants Crate" desc = "Contains five Exile implants." diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 4b59a2f8e738..7d726960b5be 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -275,9 +275,6 @@ /// Does this client have typing indicators enabled? var/typing_indicators = FALSE - /// used for rewarding players monkecoins at round end - var/reward_this_person = 0 - /// Does this client's mob need to rebuild its plane masters after login? /// This is currently only used so a client can switch between 515 and 516 without breaking their rendering. var/rebuild_plane_masters = FALSE diff --git a/code/modules/client/player_details.dm b/code/modules/client/player_details.dm index 658d6f578887..8187dc723e3c 100644 --- a/code/modules/client/player_details.dm +++ b/code/modules/client/player_details.dm @@ -27,6 +27,12 @@ GLOBAL_LIST_EMPTY_TYPED(player_details, /datum/player_details) src.ckey = ckey(player_key) achievements = new(src.ckey) +/datum/player_details/Destroy(force) + if(!force) + stack_trace("Something is trying to delete player details for [ckey]") + return QDEL_HINT_LETMELIVE + return ..() + /// Returns the full version string (i.e 515.1642) of the BYOND version and build. /datum/player_details/proc/full_byond_version() if(!byond_version) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 9df9c53233b6..679c04335989 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -576,6 +576,9 @@ acid = 50 // MONKESTATION ADDITION START +/obj/item/clothing/gloves/chameleon + clothing_traits = list(TRAIT_CAN_SIGN_ON_COMMS) + /obj/item/clothing/gloves/chameleon/attackby(obj/item/W, mob/user, params) if(W.tool_behaviour != TOOL_MULTITOOL) return ..() diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 73e6af9a90a3..9fca789ebd65 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -50,7 +50,7 @@ l_pocket = /obj/item/switchblade additional_radio = /obj/item/encryptionkey/heads/captain -/datum/outfit/centcom/ert/commander/alert +/datum/outfit/centcom/ert/commander/red name = "ERT Commander - High Alert" backpack_contents = list( @@ -76,7 +76,7 @@ gloves = /obj/item/clothing/gloves/tackler/combat/insulated additional_radio = /obj/item/encryptionkey/heads/hos -/datum/outfit/centcom/ert/security/alert +/datum/outfit/centcom/ert/security/red name = "ERT Security - High Alert" l_hand = /obj/item/gun/energy/pulse/carbine/loyalpin @@ -104,7 +104,7 @@ l_pocket = /obj/item/healthanalyzer/advanced additional_radio = /obj/item/encryptionkey/heads/cmo -/datum/outfit/centcom/ert/medic/alert +/datum/outfit/centcom/ert/medic/red name = "ERT Medic - High Alert" backpack_contents = list( @@ -133,7 +133,7 @@ l_pocket = /obj/item/rcd_ammo/large additional_radio = /obj/item/encryptionkey/heads/ce -/datum/outfit/centcom/ert/engineer/alert +/datum/outfit/centcom/ert/engineer/red name = "ERT Engineer - High Alert" backpack_contents = list( @@ -283,7 +283,7 @@ ..() if(visualsOnly) return - ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT) + ADD_TRAIT(H.mind, TRAIT_NAIVE, INNATE_TRAIT) H.dna.add_mutation(/datum/mutation/human/clumsy) for(var/datum/mutation/human/clumsy/M in H.dna.mutations) M.mutadone_proof = TRUE diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 709bbb594f97..ed75f2d2769f 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -493,6 +493,7 @@ max_integrity = 200 resistance_flags = FLAMMABLE armor_type = /datum/armor/vest_durathread + body_parts_covered = CHEST|ARMS //Monke: Durathread covers arms. dog_fashion = null /datum/armor/vest_durathread diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index 7d1f5f52e462..66b768ee9cdf 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -27,7 +27,7 @@ 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/jacket.dm b/code/modules/clothing/suits/jacket.dm index 4b8db2052995..deeb3d290c09 100644 --- a/code/modules/clothing/suits/jacket.dm +++ b/code/modules/clothing/suits/jacket.dm @@ -62,7 +62,7 @@ inhand_icon_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/radio) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/c38/detective, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio) species_exception = list(/datum/species/golem/bone) //bad to the bone /obj/item/clothing/suit/jacket/leather/biker @@ -98,7 +98,7 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" inhand_icon_state = null - allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/radio) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio) //monkestation edit /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -119,6 +119,7 @@ desc = "Oddly, this jacket seems to have a large S on the back..." icon_state = "letterman_s" inhand_icon_state = null + allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/energy/laser/musket, /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/radio) //monkestation edit species_exception = list(/datum/species/golem) /obj/item/clothing/suit/jacket/letterman_nanotrasen diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index cf7aed8ec995..cb7a3dc7947c 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -161,8 +161,11 @@ /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, + /obj/item/gun/ballistic/rifle/boltaction/pipegun, /obj/item/gun/ballistic/rifle/boltaction/pipegun/prime, /obj/item/tank/internals/oxygen, //monkestation edit + /obj/item/storage/bag/rebar_quiver, + /obj/item/gun/ballistic/rifle/rebarxbow, ) resistance_flags = NONE species_exception = list(/datum/species/golem) diff --git a/code/modules/clothing/suits/wintercoats.dm b/code/modules/clothing/suits/wintercoats.dm index 51a85dbac59d..1388818efbf0 100644 --- a/code/modules/clothing/suits/wintercoats.dm +++ b/code/modules/clothing/suits/wintercoats.dm @@ -469,6 +469,10 @@ /obj/item/pipe_dispenser, /obj/item/storage/bag/construction, /obj/item/t_scanner, + /obj/item/construction/rld, + /obj/item/construction/rtd, + /obj/item/gun/ballistic/rifle/rebarxbow, + /obj/item/storage/bag/rebar_quiver, ) armor_type = /datum/armor/wintercoat_engineering hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering diff --git a/code/modules/clothing/under/jobs/centcom.dm b/code/modules/clothing/under/jobs/centcom.dm index 2ed48e066dde..967f95abd70d 100644 --- a/code/modules/clothing/under/jobs/centcom.dm +++ b/code/modules/clothing/under/jobs/centcom.dm @@ -61,6 +61,7 @@ icon_state = "military" inhand_icon_state = "bl_suit" armor_type = /datum/armor/centcom_military + can_adjust = FALSE //monkestation edit /datum/armor/centcom_military melee = 10 diff --git a/code/modules/events/wizard/blobies.dm b/code/modules/events/wizard/blobies.dm index 0a9c96d51354..5d9045fea067 100644 --- a/code/modules/events/wizard/blobies.dm +++ b/code/modules/events/wizard/blobies.dm @@ -4,10 +4,12 @@ typepath = /datum/round_event/wizard/blobies max_occurrences = 3 description = "Spawns a blob spore on every corpse." - min_wizard_trigger_potency = 3 +//monkestation edit start + min_wizard_trigger_potency = 5 max_wizard_trigger_potency = 7 /datum/round_event/wizard/blobies/start() - for(var/mob/living/carbon/human/H in GLOB.dead_mob_list) - new /mob/living/basic/blob_minion/spore/minion(H.loc) // Creates zombies which ghosts can control + if(is_station_level(H.loc)) + new /mob/living/basic/blob_minion/spore/minion(H.loc) // Creates zombies which ghosts can control +//monkestation edit end diff --git a/code/modules/events/wizard/tower_of_babel.dm b/code/modules/events/wizard/tower_of_babel.dm index 316d7520e8e5..31742cec7ae9 100644 --- a/code/modules/events/wizard/tower_of_babel.dm +++ b/code/modules/events/wizard/tower_of_babel.dm @@ -1,3 +1,4 @@ +/* monkestation removal. if you REALLY want to do this for some reason, call the proc yourself. /datum/round_event_control/wizard/tower_of_babel name = "Tower of Babel" weight = 3 @@ -10,4 +11,4 @@ /datum/round_event/wizard/tower_of_babel/start() GLOB.tower_of_babel = new /datum/tower_of_babel() - +monkestation end */ diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 6f8273f8ce3e..ea1426515a5d 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -693,7 +693,7 @@ /datum/holiday/xmas name = CHRISTMAS - begin_day = 23 + begin_day = 8 // monkestation edit begin_month = DECEMBER end_day = 27 holiday_hat = /obj/item/clothing/head/costume/santa @@ -816,7 +816,8 @@ list( /obj/item/toy/xmas_cracker = 3, /obj/item/clothing/head/costume/santa = 1, - /obj/item/a_gift/anything = 1 + /obj/item/a_gift/anything = 1, + /obj/item/a_gift = 4 ) = maint_holiday_weight, ) diff --git a/code/modules/jobs/job_types/ert/ert_generic.dm b/code/modules/jobs/job_types/ert/ert_generic.dm index 4758ac75b285..87af77b3198a 100644 --- a/code/modules/jobs/job_types/ert/ert_generic.dm +++ b/code/modules/jobs/job_types/ert/ert_generic.dm @@ -1,2 +1,38 @@ /datum/job/ert_generic - title = "ERT Generic" + title = "Emergency Response Officer" //monkestation edit + +//MONKESTATION EDIT START +/datum/job/ert/generic + title = "Emergency Response Officer" + liver_traits = list(TRAIT_PRETENDER_ROYAL_METABOLISM) + +/datum/job/ert/commander + title = JOB_ERT_COMMANDER + liver_traits = list(TRAIT_ROYAL_METABOLISM) + +/datum/job/ert/security + title = JOB_ERT_OFFICER + liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + +/datum/job/ert/medical + title = JOB_ERT_MEDICAL_DOCTOR + liver_traits = list(TRAIT_MEDICAL_METABOLISM) + +/datum/job/ert/engineer + title = JOB_ERT_ENGINEER + liver_traits = list(TRAIT_ENGINEER_METABOLISM) + +/datum/job/ert/janitor + title = JOB_ERT_JANITOR + +/datum/job/ert/chaplain + title = JOB_ERT_CHAPLAIN + +/datum/job/ert/clown + title = JOB_ERT_CLOWN + liver_traits = list(TRAIT_COMEDY_METABOLISM) + +/datum/job/ert/deathsquad + title = JOB_ERT_DEATHSQUAD + liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) //from humble beginnings sipping quadsec and harm batoning clowns + diff --git a/code/modules/jobs/job_types/research_director.dm b/code/modules/jobs/job_types/research_director.dm index b8ba0f237606..8e15aa246a4e 100644 --- a/code/modules/jobs/job_types/research_director.dm +++ b/code/modules/jobs/job_types/research_director.dm @@ -31,7 +31,7 @@ liver_traits = list(TRAIT_ROYAL_METABOLISM, TRAIT_BALLMER_SCIENTIST) display_order = JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR - bounty_types = CIV_JOB_SCI + bounty_types = CIV_JOB_SCI_HEAD mail_goodies = list( /obj/item/storage/box/monkeycubes = 30, diff --git a/code/modules/language/language_manuals.dm b/code/modules/language/language_manuals.dm index 15fff94b251f..a0158606393c 100644 --- a/code/modules/language/language_manuals.dm +++ b/code/modules/language/language_manuals.dm @@ -20,7 +20,7 @@ user.grant_language(language) user.remove_blocked_language(language, source=LANGUAGE_ALL) - ADD_TRAIT(user, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects + ADD_TRAIT(user.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects use_charge(user) diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm index 25ffbab8dd85..6fc6640fe077 100644 --- a/code/modules/mapping/access_helpers.dm +++ b/code/modules/mapping/access_helpers.dm @@ -502,6 +502,11 @@ access_list += list(ACCESS_CENT_CAPTAIN) return access_list +/obj/effect/mapping_helpers/airlock/access/any/admin/specops/get_access() + var/list/access_list = ..() + access_list += list(ACCESS_CENT_SPECOPS) + return access_list + /obj/effect/mapping_helpers/airlock/access/any/admin/bar/get_access() var/list/access_list = ..() access_list += list(ACCESS_CENT_CAPTAIN) diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm index dab230b26d2d..a67a9fb483cf 100644 --- a/code/modules/mining/lavaland/tendril_loot.dm +++ b/code/modules/mining/lavaland/tendril_loot.dm @@ -508,7 +508,7 @@ cure_curse_of_babel(user) // removes tower of babel if we have it user.grant_all_languages(source=LANGUAGE_BABEL) user.remove_blocked_language(GLOB.all_languages, source = LANGUAGE_ALL) - ADD_TRAIT(user, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects + ADD_TRAIT(user.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) // this makes you immune to babel effects new /obj/effect/decal/cleanable/ash(get_turf(user)) qdel(src) diff --git a/code/modules/mob/dead/new_player/latejoin_menu.dm b/code/modules/mob/dead/new_player/latejoin_menu.dm index c6831a2fa638..fe7081d07548 100644 --- a/code/modules/mob/dead/new_player/latejoin_menu.dm +++ b/code/modules/mob/dead/new_player/latejoin_menu.dm @@ -117,7 +117,7 @@ GLOBAL_DATUM_INIT(latejoin_menu, /datum/latejoin_menu, new) /datum/latejoin_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(!ui.user.client || ui.user.client.interviewee || !isnewplayer(ui.user)) + if(!ui.user.client || should_be_interviewing(ui.user) || !isnewplayer(ui.user)) return TRUE var/mob/dead/new_player/owner = ui.user diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 6286383fa318..6fb429925942 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -67,6 +67,10 @@ ready = PLAYER_NOT_READY return FALSE + if(interview_safety(src, "attempting to observe")) + qdel(client) + return FALSE + var/less_input_message if(SSlag_switch.measures[DISABLE_DEAD_KEYLOOP]) less_input_message = " - Notice: Observer freelook is currently disabled." @@ -143,6 +147,10 @@ return JOB_AVAILABLE /mob/dead/new_player/proc/AttemptLateSpawn(rank) + if(interview_safety(src, "attempting to latejoin")) + qdel(client) + return FALSE + var/error = IsJobUnavailable(rank) if(error != JOB_AVAILABLE) tgui_alert(usr, get_job_unavailable_error_message(error, rank)) @@ -189,14 +197,15 @@ SSjob.EquipRank(character, job, character.client) job.after_latejoin_spawn(character) - if(character.client && length(character.client?.active_challenges)) - SSchallenges.apply_challenges(character.client) - for(var/processing_reward_bitflags in SSticker.bitflags_to_reward)//you really should use department bitflags if possible - if(character.mind.assigned_role.departments_bitflags & processing_reward_bitflags) - character.client.reward_this_person += 425 - for(var/processing_reward_jobs in SSticker.jobs_to_reward)//just in case you really only want to reward a specific job - if(character.job == processing_reward_jobs) - character.client.reward_this_person += 425 + var/datum/player_details/details = get_player_details(character) + if(details) + SSchallenges.apply_challenges(details) + for(var/processing_reward_bitflags in SSticker.bitflags_to_reward)//you really should use department bitflags if possible + if(character.mind.assigned_role.departments_bitflags & processing_reward_bitflags) + details.roundend_monkecoin_bonus += 425 + for(var/processing_reward_jobs in SSticker.jobs_to_reward)//just in case you really only want to reward a specific job + if(character.job == processing_reward_jobs) + details.roundend_monkecoin_bonus += 425 #define IS_NOT_CAPTAIN 0 #define IS_ACTING_CAPTAIN 1 #define IS_FULL_CAPTAIN 2 diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index d5f2ab6b5db0..606f2187094f 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -1,4 +1,7 @@ /mob/dead/observer/Login() + if(interview_safety(src, "observing")) + qdel(client) + return FALSE . = ..() if(!. || !client) return FALSE diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index e5092601c294..dbed737bdf4b 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -234,7 +234,7 @@ . = ..() if(stat != DEAD) return - . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be [HAS_TRAIT(user.mind, TRAIT_NAIVE) ? "asleep" : "dead"].") + . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "asleep" : "dead"].") /mob/living/basic/proc/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) face_atom(target) diff --git a/code/modules/mob/living/basic/bots/bot_hud.dm b/code/modules/mob/living/basic/bots/bot_hud.dm index cbadab01360e..3bd24f9f1485 100644 --- a/code/modules/mob/living/basic/bots/bot_hud.dm +++ b/code/modules/mob/living/basic/bots/bot_hud.dm @@ -1,13 +1,11 @@ /mob/living/basic/bot/proc/diag_hud_set_bothealth() var/image/holder = hud_list[DIAG_HUD] - var/icon/icon_image = icon(icon, icon_state, dir) - holder.pixel_y = icon_image.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/basic/bot/proc/diag_hud_set_botstat() //On (With wireless on or off), Off, EMP'ed var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/our_icon = icon(icon, icon_state, dir) - holder.pixel_y = our_icon.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(bot_mode_flags & BOT_MODE_ON) holder.icon_state = "hudstat" return @@ -18,8 +16,7 @@ /mob/living/basic/bot/proc/diag_hud_set_botmode() //Shows a bot's current operation var/image/holder = hud_list[DIAG_BOT_HUD] - var/icon/icon_image = icon(icon, icon_state, dir) - holder.pixel_y = icon_image.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(client) //If the bot is player controlled, it will not be following mode logic! holder.icon_state = "hudsentient" return diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm index 2cdf99b9d2ed..b6f904a249c0 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -99,6 +99,7 @@ ///blood we can clean var/static/list/cleanable_blood = typecacheof(list( /obj/effect/decal/cleanable/blood, + /obj/effect/decal/cleanable/xenoblood, // monkestation addition )) ///pests we hunt var/static/list/huntable_pests = typecacheof(list( @@ -110,6 +111,11 @@ /obj/item/trash, /obj/item/food/deadmouse, /obj/effect/decal/remains, + //monkestation addition: start + /obj/item/cigbutt, + /obj/item/storage/box/foodpack, + /obj/item/ammo_casing, + //monkestation addition: end )) ///drawings we hunt var/static/list/cleanable_drawings = typecacheof(list(/obj/effect/decal/cleanable/crayon)) diff --git a/code/modules/mob/living/basic/drone/_drone.dm b/code/modules/mob/living/basic/drone/_drone.dm index f42a439f1e15..d9ebbb8b1ca2 100644 --- a/code/modules/mob/living/basic/drone/_drone.dm +++ b/code/modules/mob/living/basic/drone/_drone.dm @@ -214,14 +214,12 @@ /mob/living/basic/drone/med_hud_set_health() var/image/holder = hud_list[DIAG_HUD] - var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" /mob/living/basic/drone/med_hud_set_status() var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/hud_icon = icon(icon, icon_state, dir) - holder.pixel_y = hud_icon.Height() - world.icon_size + holder.pixel_y = get_cached_height() - world.icon_size if(stat == DEAD) holder.icon_state = "huddead2" else if(incapacitated()) diff --git a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm index 65d16cfb490d..a4ea855ff410 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/magicarp.dm @@ -9,7 +9,7 @@ GLOBAL_LIST_INIT(magicarp_spell_types, list( /obj/projectile/magic/resurrection = "vital", /obj/projectile/magic/spellblade = "vorpal", /obj/projectile/magic/teleport = "warping", - /obj/projectile/magic/babel = "babbling", + /* /obj/projectile/magic/babel = "babbling", [monkestation removal: staff of babel is admin-only now] */ )) /// A reduced list of spells for magicarp spawned in xenobiology, less disruptive @@ -33,7 +33,7 @@ GLOBAL_LIST_INIT(magicarp_spell_colours, list( /obj/projectile/magic/resurrection = COLOR_CARP_PALE_GREEN, /obj/projectile/magic/spellblade = COLOR_CARP_SILVER, /obj/projectile/magic/teleport = COLOR_CARP_GRAPE, - /obj/projectile/magic/babel = COLOR_CARP_BROWN, + /* /obj/projectile/magic/babel = COLOR_CARP_BROWN, [monkestation removal: staff of babel is admin-only now] */ )) /** diff --git a/code/modules/mob/living/carbon/carbon_say.dm b/code/modules/mob/living/carbon/carbon_say.dm index c84f83a30e5e..3e4c29fa0e83 100644 --- a/code/modules/mob/living/carbon/carbon_say.dm +++ b/code/modules/mob/living/carbon/carbon_say.dm @@ -10,6 +10,6 @@ var/obj/item/organ/internal/tongue/spoken_with = get_organ_slot(ORGAN_SLOT_TONGUE) if(spoken_with) // the tower of babel needs to bypass the tongue language restrictions without giving omnitongue - return HAS_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path) + return HAS_MIND_TRAIT(src, TRAIT_TOWER_OF_BABEL) || spoken_with.could_speak_language(language_path) return initial(language_path.flags) & TONGUELESS_SPEECH diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 9755634c3422..046837b18a9f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -120,7 +120,7 @@ var/obj/item/clothing/glasses/G = get_item_by_slot(ITEM_SLOT_EYES) var/are_we_in_weekend_at_bernies = G?.tint && buckled && istype(buckled, /obj/vehicle/ridden/wheelchair) - if(isliving(user) && (HAS_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies)) + if(isliving(user) && (HAS_MIND_TRAIT(user, TRAIT_NAIVE) || are_we_in_weekend_at_bernies)) just_sleeping = TRUE if(!just_sleeping) diff --git a/code/modules/mob/living/carbon/human/species_types/zombies.dm b/code/modules/mob/living/carbon/human/species_types/zombies.dm index 9b0fe7b38226..498f0171f5f1 100644 --- a/code/modules/mob/living/carbon/human/species_types/zombies.dm +++ b/code/modules/mob/living/carbon/human/species_types/zombies.dm @@ -24,7 +24,12 @@ TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, + // monkestation addition: pain system + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + // monkestation end // HIGH FUNCTIONING UNIQUE TRAIT_NOBLOOD, TRAIT_SUCCUMB_OVERRIDE, @@ -103,7 +108,12 @@ TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_TOXIMMUNE, + // monkestation addition: pain system + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + // monkestation end // INFECTIOUS UNIQUE TRAIT_STABLEHEART, // Replacement for noblood. Infectious zombies can bleed but don't need their heart. TRAIT_STABLELIVER, // Not necessary but for consistency with above diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 2debc27d52f5..47d142a54871 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -257,6 +257,9 @@ return var/kiss_type = /obj/item/hand_item/kisser + if(HAS_TRAIT(user, TRAIT_SYNDIE_KISS)) + kiss_type = /obj/item/hand_item/kisser/syndie + if(HAS_TRAIT(user, TRAIT_KISS_OF_DEATH)) kiss_type = /obj/item/hand_item/kisser/death diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 52f2b9eba7f4..7eddf9ddce70 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -712,9 +712,7 @@ /// Returns what the body_position_pixel_y_offset should be if the current size were `value` /mob/living/proc/get_pixel_y_offset_standing(value) - var/icon/living_icon = icon(icon) - var/height = living_icon.Height() - return (value-1) * height * 0.5 + return (value - 1) * get_cached_height() * 0.5 /mob/living/proc/update_density() if(HAS_TRAIT(src, TRAIT_UNDENSE)) @@ -804,7 +802,7 @@ if(!livingdoll.filtered) livingdoll.filtered = TRUE var/icon/mob_mask = icon(icon, icon_state) - if(mob_mask.Height() > world.icon_size || mob_mask.Width() > world.icon_size) + if(get_cached_height() > world.icon_size || get_cached_width() > world.icon_size) var/health_doll_icon_state = health_doll_icon ? health_doll_icon : "megasprite" mob_mask = icon('icons/hud/screen_gen.dmi', health_doll_icon_state) //swap to something generic if they have no special doll livingdoll.add_filter("mob_shape_mask", 1, alpha_mask_filter(icon = mob_mask)) diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 7025795385d9..f68d18969d10 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -28,6 +28,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // Misc RADIO_KEY_AI_PRIVATE = RADIO_CHANNEL_AI_PRIVATE, // AI Upload channel + RADIO_KEY_UNCOMMON = RADIO_CHANNEL_UNCOMMON, //kinda localization -- rastaf0 @@ -56,7 +57,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "в" = MODE_KEY_DEADMIN, // Misc - "щ" = RADIO_CHANNEL_AI_PRIVATE + "щ" = RADIO_CHANNEL_AI_PRIVATE, + "f" = RADIO_CHANNEL_UNCOMMON )) /** diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index c6d6b6a5e9d7..fc64fee3ef00 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -3,6 +3,10 @@ if(!. || !client) return FALSE + if(interview_safety(src, "client in living mob")) + qdel(client) + return FALSE + //Mind updates sync_mind() diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index a3f79cf4f1df..879503f2b7b1 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -298,7 +298,8 @@ visible_message(span_boldnotice("[src] blows apart!")) do_sparks(3, TRUE, src) var/atom/location_destroyed = drop_location() - if(prob(50)) + + if(prob(50) && (bot_type != HONK_BOT)) drop_part(robot_arm, location_destroyed) qdel(src) diff --git a/code/modules/mob/living/simple_animal/hostile/feral.dm b/code/modules/mob/living/simple_animal/hostile/feral.dm new file mode 100644 index 000000000000..307e31892fbe --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/feral.dm @@ -0,0 +1,76 @@ +/mob/living/simple_animal/hostile/feral + name = "feral cat" + desc = "Kitty!! Wait, no no DON'T BITE-" + health = 30 + maxHealth = 30 + melee_damage_lower = 7 + melee_damage_upper = 15 + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat2" + icon_living = "cat2" + icon_dead = "cat2_dead" + held_state = "cat2" + speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") + speak_emote = list("purrs", "meows") + emote_hear = list("meows.", "mews.") + emote_see = list("shakes their head.", "shivers.") + speak_chance = 1 + turns_per_move = 5 + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + bodytemp_cold_damage_limit = 200 + bodytemp_heat_damage_limit = 400 + unsuitable_atmos_damage = 0.5 + animal_species = /mob/living/simple_animal/pet/cat + butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + faction = list(FACTION_CAT, ROLE_SYNDICATE) + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + footstep_type = FOOTSTEP_MOB_CLAW + +/mob/living/simple_animal/hostile/feraltabby + name = "feral cat" + desc = "Kitty!! Wait, no no DON'T BITE-" + health = 45 + maxHealth = 45 + melee_damage_lower = 10 + melee_damage_upper = 20 + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat" + icon_living = "cat" + icon_dead = "cat_dead" + held_state = "cat" + speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") + speak_emote = list("purrs", "meows") + emote_hear = list("meows.", "mews.") + emote_see = list("shakes their head.", "shivers.") + speak_chance = 1 + turns_per_move = 5 + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + bodytemp_cold_damage_limit = 200 + bodytemp_heat_damage_limit = 400 + unsuitable_atmos_damage = 0.5 + animal_species = /mob/living/simple_animal/pet/cat + childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1) + butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + faction = list(FACTION_CAT, ROLE_SYNDICATE) + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + footstep_type = FOOTSTEP_MOB_CLAW diff --git a/code/modules/mob/living/simple_animal/hostile/syndicat.dm b/code/modules/mob/living/simple_animal/hostile/syndicat.dm new file mode 100644 index 000000000000..0f02bc3cd091 --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/syndicat.dm @@ -0,0 +1,46 @@ +/mob/living/simple_animal/hostile/syndicat + name = "Syndie Cat" + desc = "OH GOD! RUN!! IT CAN SMELL THE DISK!" + icon = 'icons/mob/simple/pets.dmi' + icon_state = "syndicat" + icon_living = "syndicat" + icon_dead = "syndicat_dead" + held_state = "syndicat" + speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") + speak_emote = list("purrs", "meows") + emote_hear = list("meows.", "mews.") + emote_see = list("shakes their head.", "shivers.") + speak_chance = 1 + turns_per_move = 5 + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + bodytemp_cold_damage_limit = TCMB + bodytemp_heat_damage_limit = T0C + 40 + unsuitable_atmos_damage = 0 + animal_species = /mob/living/simple_animal/pet/cat + childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1) + butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + health = 80 + maxHealth = 80 + melee_damage_lower = 20 + melee_damage_upper = 35 + faction = list(FACTION_CAT, ROLE_SYNDICATE) + can_be_held = TRUE + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + footstep_type = FOOTSTEP_MOB_CLAW + +/mob/living/simple_animal/hostile/syndicat/Initialize(mapload) + . = ..() + var/obj/item/implant/toinstall = list(/obj/item/implant/weapons_auth, /obj/item/implant/explosive) + for(var/obj/item/implant/original_implants as anything in toinstall) + var/obj/item/implant/copied_implant = new original_implants.type + copied_implant.implant(src, silent = TRUE, force = TRUE) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 9ff9a0cf3def..76256c94d708 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -211,7 +211,7 @@ /mob/living/simple_animal/examine(mob/user) . = ..() if(stat == DEAD) - if(HAS_TRAIT(user, TRAIT_NAIVE)) + if(HAS_MIND_TRAIT(user, TRAIT_NAIVE)) . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be asleep.") else . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be dead.") diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm index 5381a26e88bd..39deff090871 100644 --- a/code/modules/mod/modules/modules_service.dm +++ b/code/modules/mod/modules/modules_service.dm @@ -80,3 +80,21 @@ mod.wearer.RemoveElement(/datum/element/waddling) if(is_clown_job(mod.wearer.mind?.assigned_role)) mod.wearer.clear_mood_event("clownshoes") + +// recharging cleaner spray module +/obj/item/mod/module/mister/cleaner + name = "MOD janitorial mister module" + desc = "An space cleaner mister, able to clean up messes quickly. Synthesizes its own supply over time (if active)." + device = /obj/item/reagent_containers/spray/mister/janitor + volume = 100 + active_power_cost = DEFAULT_CHARGE_DRAIN + +/obj/item/mod/module/mister/cleaner/Initialize(mapload) + . = ..() + reagents.flags = AMOUNT_VISIBLE + reagents.add_reagent(/datum/reagent/space_cleaner, volume) + +/obj/item/mod/module/mister/cleaner/on_active_process(seconds_per_tick) + var/refill_add = min(volume - reagents.total_volume, 2 * seconds_per_tick) + if(refill_add > 0) + reagents.add_reagent(/datum/reagent/space_cleaner, refill_add) diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 873177819cbe..931bf1d2fdfc 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -1,7 +1,5 @@ ///the minimum size of a pill or patch #define MIN_VOLUME 5 -///the maximum size a pill or patch can be -#define MAX_VOLUME 50 ///max amount of pills allowed on our tile before we start storing them instead #define MAX_FLOOR_PRODUCTS 10 @@ -12,16 +10,16 @@ icon_state = "pill_press" ///category for plumbing RCD category="Storage" - /// current operating product (pills or patches) - var/product = "pill" /// selected size of the product var/current_volume = 10 + /// maximum printable volume of the product + var/max_volume = 50 /// prefix for the product name var/product_name = "factory" /// All packaging types wrapped up in 1 big list var/static/list/packaging_types = null ///The type of packaging to use - var/packaging_type + var/obj/item/reagent_containers/packaging_type ///Category of packaging var/packaging_category /// list of products stored in the machine, so we dont have 610 pills on one tile @@ -53,34 +51,28 @@ packaging_types += list(category_item) - packaging_type = REF(GLOB.chem_master_containers[CAT_PILLS][1]) - decode_category() + packaging_type = GLOB.chem_master_containers[CAT_PILLS][1] //monkestation edit: reaplces GLOB.reagent_containers with GLOB.chem_master_containers + max_volume = initial(packaging_type.volume) + current_volume = clamp(current_volume, MIN_VOLUME, max_volume) AddComponent(/datum/component/plumbing/simple_demand, bolt, layer) +/obj/machinery/plumbing/pill_press/Destroy(force) + QDEL_LAZYLIST(stored_products) + return ..() + /obj/machinery/plumbing/pill_press/examine(mob/user) . = ..() . += span_notice("The [name] currently has [stored_products.len] stored. There needs to be less than [MAX_FLOOR_PRODUCTS] on the floor to continue dispensing.") -/// decode product category from it's type path and returns the decoded typepath -/obj/machinery/plumbing/pill_press/proc/decode_category() - var/obj/item/reagent_containers/container = locate(packaging_type) - if(ispath(container, /obj/item/reagent_containers/pill/patch)) - packaging_category = CAT_PATCHES - else if(ispath(container, /obj/item/reagent_containers/pill)) - packaging_category = CAT_PILLS - else - packaging_category = CAT_TUBES - return container - /obj/machinery/plumbing/pill_press/process(seconds_per_tick) if(!is_operational) return //shift & check to account for floating point inaccuracies if(reagents.total_volume >= current_volume) - var/obj/item/reagent_containers/container = locate(packaging_type) - container = new container(src) + var/obj/item/reagent_containers/container = new packaging_type(src) + var/suffix switch(packaging_category) if(CAT_PILLS) @@ -122,7 +114,6 @@ var/list/data = list() data["min_volume"] = MIN_VOLUME - data["max_volume"] = MAX_VOLUME data["packaging_types"] = packaging_types return data @@ -131,8 +122,9 @@ var/list/data = list() data["current_volume"] = current_volume + data["max_volume"] = max_volume data["product_name"] = product_name - data["packaging_type"] = packaging_type + data["packaging_type"] = REF(packaging_type) data["packaging_category"] = packaging_category return data @@ -142,21 +134,57 @@ if(.) return - . = TRUE switch(action) if("change_current_volume") - current_volume = round(clamp(text2num(params["volume"]), MIN_VOLUME, MAX_VOLUME)) + var/value = params["volume"] + if(isnull(value)) + return FALSE + + value = text2num(value) + if(isnull(value)) + return FALSE + + current_volume = clamp(value, MIN_VOLUME, max_volume) + return TRUE + if("change_product_name") var/formatted_name = html_encode(params["name"]) if (length(formatted_name) > MAX_NAME_LEN) product_name = copytext(formatted_name, 1, MAX_NAME_LEN + 1) else product_name = formatted_name + return TRUE + if("change_product") - packaging_type = params["ref"] - var/obj/item/reagent_containers/container = decode_category() - current_volume = clamp(current_volume, MIN_VOLUME, initial(container.volume)) + var/container = params["ref"] + if(!container) + return FALSE + + //is a valid option + var/container_found = FALSE + for(var/list/category as anything in packaging_types) + if(container_found) + break + for(var/list/package_item as anything in category["products"]) + if(container == package_item["ref"]) + container_found = TRUE + break + if(!container_found) + return FALSE + + //decode container & its category + packaging_type = locate(container) + if(ispath(packaging_type, /obj/item/reagent_containers/pill/patch)) + packaging_category = CAT_PATCHES + else if(ispath(packaging_type, /obj/item/reagent_containers/pill)) + packaging_category = CAT_PILLS + else + packaging_category = "Bottles" + + //get new volumes + max_volume = initial(packaging_type.volume) + current_volume = clamp(current_volume, MIN_VOLUME, max_volume) + return TRUE #undef MIN_VOLUME -#undef MAX_VOLUME #undef MAX_FLOOR_PRODUCTS diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 49bae89b563c..4eda376ffe69 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -276,7 +276,7 @@ ///security level and shuttle lockdowns for [/proc/begin_the_end()] /proc/narsie_start_destroy_station() - SSsecurity_level.set_level(SEC_LEVEL_DELTA) + SSsecurity_level.set_level(SEC_LEVEL_LAMBDA) SSshuttle.registerHostileEnvironment(GLOB.cult_narsie) SSshuttle.lockdown = TRUE addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(narsie_apocalypse)), 1 MINUTES) diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index 9d785ba091f2..eb897905f9d2 100644 --- a/code/modules/projectiles/ammunition/ballistic/rifle.dm +++ b/code/modules/projectiles/ammunition/ballistic/rifle.dm @@ -40,6 +40,69 @@ icon_state = "40mmHE" projectile_type = /obj/projectile/bullet/a40mm +/obj/item/ammo_casing/rebar + name = "Sharpened Iron Rod" + desc = "A Sharpened Iron rod. It's Pointy!" + caliber = CALIBER_REBAR + icon_state = "rod_sharp" + base_icon_state = "rod_sharp" + projectile_type = /obj/projectile/bullet/rebar + +/obj/item/ammo_casing/rebar/syndie + name = "Jagged Iron Rod" + desc = "An Iron rod, with notches cut into it. You really dont want this stuck in you." + caliber = CALIBER_REBAR + icon_state = "rod_jagged" + base_icon_state = "rod_jagged" + projectile_type = /obj/projectile/bullet/rebar/syndie + +/obj/item/ammo_casing/rebar/zaukerite + name = "Zaukerite Sliver" + desc = "A sliver of a zaukerite crystal. Due to its irregular, jagged edges, removal of an embedded zaukerite sliver should only be done by trained surgeons." + caliber = CALIBER_REBAR + icon_state = "rod_zaukerite" + base_icon_state = "rod_zaukerite" + projectile_type = /obj/projectile/bullet/rebar/zaukerite + +/obj/item/ammo_casing/rebar/hydrogen + name = "Metallic Hydrogen Bolt" + desc = "An ultra-sharp rod made from pure metallic hydrogen. Armor may as well not exist." + caliber = CALIBER_REBAR + icon_state = "rod_hydrogen" + base_icon_state = "rod_hydrogen" + projectile_type = /obj/projectile/bullet/rebar/hydrogen + +/obj/item/ammo_casing/rebar/healium + name = "Healium Crystal Bolt" + desc = "Who needs a syringe gun, anyway?" + caliber = CALIBER_REBAR + icon_state = "rod_healium" + base_icon_state = "rod_healium" + projectile_type = /obj/projectile/bullet/rebar/healium + +/obj/item/ammo_casing/rebar/supermatter + name = "Supermatter Bolt" + desc = "Wait, how is the bow capable of firing this without dusting?" + caliber = CALIBER_REBAR + icon_state = "rod_supermatter" + base_icon_state = "rod_supermatter" + projectile_type = /obj/projectile/bullet/rebar/supermatter + +/obj/item/ammo_casing/rebar/paperball + name = "Paper Ball" + desc = "Doink!" + caliber = CALIBER_REBAR + icon_state = "paperball" + base_icon_state = "paperball" + projectile_type = /obj/projectile/bullet/paperball + +/obj/item/ammo_casing/rebar/Initialize(mapload) + . = ..() + AddElement(/datum/element/caseless, TRUE) + +/obj/item/ammo_casing/rebar/update_icon_state() + . = ..() + icon_state = "[base_icon_state]" /obj/item/ammo_casing/a223 name = ".223 bullet casing" diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index 42ba3abee6ff..f740447fd8da 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -16,6 +16,11 @@ e_cost = 62.5 select_name = "kill" +/obj/item/ammo_casing/energy/lasergun/carbine + projectile_type = /obj/projectile/beam/laser/carbine + e_cost = 25 // 40 shots + select_name = "kill" + /obj/item/ammo_casing/energy/lasergun/old projectile_type = /obj/projectile/beam/laser e_cost = 200 @@ -30,6 +35,8 @@ /obj/item/ammo_casing/energy/laser/musket/prime projectile_type = /obj/projectile/beam/laser/musket/prime + pellets = 3 + variance = 10 /obj/item/ammo_casing/energy/laser/practice projectile_type = /obj/projectile/beam/practice diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm index 77ca619f094a..9e4aea73f6ff 100644 --- a/code/modules/projectiles/ammunition/energy/stun.dm +++ b/code/modules/projectiles/ammunition/energy/stun.dm @@ -25,6 +25,11 @@ fire_sound = 'sound/weapons/taser2.ogg' harmful = FALSE +/obj/item/ammo_casing/energy/disabler/smg + projectile_type = /obj/projectile/beam/disabler/weak + e_cost = 40 + fire_sound = 'sound/weapons/taser3.ogg' + /obj/item/ammo_casing/energy/disabler/hos e_cost = 60 diff --git a/code/modules/projectiles/boxes_magazines/internal/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 67afbed5b41d..1fa7c9d1ab7d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -32,3 +32,20 @@ max_ammo = 1 caliber = CALIBER_HARPOON ammo_type = /obj/item/ammo_casing/caseless/harpoon + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + name = "single round magazine" + max_ammo = 1 + caliber = CALIBER_REBAR + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + name = "two round magazine" + max_ammo = 2 + caliber = CALIBER_REBAR_FORCED + ammo_type = /obj/item/ammo_casing/rebar + +/obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + max_ammo = 3 + caliber = CALIBER_REBAR_SYNDIE + ammo_type = /obj/item/ammo_casing/rebar diff --git a/code/modules/projectiles/guns/ballistic/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 4f05d6a6eff2..7edfc7dab7b9 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -162,6 +162,88 @@ if(.) name = "\improper Regal Obrez" // wear it loud and proud +/obj/item/gun/ballistic/rifle/rebarxbow + name = "Heated Rebar Crossbow" + desc = "Made from an inducer, iron rods, and some wire, this crossbow fires sharpened iron rods, made from the plentiful iron rods found stationwide. \ + Additionally, can fire specialty ammo made from the materials in the atmos crystalizer - zaukerite, metallic hydrogen, and healium crytals all work. \ + Very slow to reload - you can craft the crossbow with a crowbar to try loosen the crossbar, but risks a misfire, or worse..." + icon = 'icons/obj/weapons/guns/ballistic.dmi' + icon_state = "rebarxbow" + inhand_icon_state = "rebarxbow" + worn_icon_state = "rebarxbow" + rack_sound = 'sound/weapons/gun/sniper/rack.ogg' + mag_display = FALSE + empty_indicator = TRUE + bolt_type = BOLT_TYPE_LOCKING + semi_auto = FALSE + internal_magazine = TRUE + can_modify_ammo = FALSE + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_SUITSTORE + bolt_wording = "bowstring" + magazine_wording = "rod" + cartridge_wording = "rod" + misfire_probability = 25 + initial_caliber = CALIBER_REBAR + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/normal + fire_sound = 'sound/items/xbow_lock.ogg' + can_be_sawn_off = FALSE + tac_reloads = FALSE + var/draw_time = 3 SECONDS + SET_BASE_PIXEL(0, 0) + +/obj/item/gun/ballistic/rifle/rebarxbow/rack(mob/user = null) + if (bolt_locked) + drop_bolt(user) + return + balloon_alert(user, "bowstring loosened") + playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) + handle_chamber(empty_chamber = FALSE, from_firing = FALSE, chamber_next_round = FALSE) + bolt_locked = TRUE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/drop_bolt(mob/user = null) + if(!do_after(user, draw_time, target = src)) + return + playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) + balloon_alert(user, "bowstring drawn") + chamber_round() + bolt_locked = FALSE + update_appearance() + +/obj/item/gun/ballistic/rifle/rebarxbow/can_shoot() + if (bolt_locked) + return FALSE + return ..() + +/obj/item/gun/ballistic/rifle/rebarxbow/examine(mob/user) + . = ..() + . += "The crossbow is [bolt_locked ? "not ready" : "ready"] to fire." + +/obj/item/gun/ballistic/rifle/rebarxbow/forced + name = "Stressed Rebar Crossbow" + desc = "Some idiot decided that they would risk shooting themselves in the face if it meant they could have a draw this crossbow a bit faster. Hopefully, it was worth it." + // Feel free to add a recipe to allow you to change it back if you would like, I just wasn't sure if you could have two recipes for the same thing. + can_misfire = TRUE + draw_time = 1.5 + misfire_probability = 25 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/force + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie + name = "Syndicate Rebar Crossbow" + desc = "The syndicate liked the bootleg rebar crossbow NT engineers made, so they showed what it could be if properly developed. \ + Holds three shots without a chance of exploding, and features a built in scope. Compatable with all known crossbow ammunition." + icon_state = "rebarxbowsyndie" + inhand_icon_state = "rebarxbowsyndie" + worn_icon_state = "rebarxbowsyndie" + w_class = WEIGHT_CLASS_NORMAL + initial_caliber = CALIBER_REBAR + draw_time = 1 + accepted_magazine_type = /obj/item/ammo_box/magazine/internal/boltaction/rebarxbow/syndie + +/obj/item/gun/ballistic/rifle/rebarxbow/syndie/Initialize(mapload) + . = ..() + AddComponent(/datum/component/scope, range_modifier = 2) //enough range to at least be useful for stealth + /obj/item/gun/ballistic/rifle/boltaction/pipegun name = "pipegun" desc = "An excellent weapon for flushing out tunnel rats and enemy assistants, but its rifling leaves much to be desired." diff --git a/code/modules/projectiles/guns/energy/crank_guns.dm b/code/modules/projectiles/guns/energy/crank_guns.dm index 70a726d81d2b..57519a98ab9c 100644 --- a/code/modules/projectiles/guns/energy/crank_guns.dm +++ b/code/modules/projectiles/guns/energy/crank_guns.dm @@ -15,7 +15,6 @@ /obj/item/gun/energy/laser/musket/Initialize(mapload) . = ..() - AddComponent(/datum/component/two_handed, require_twohands = TRUE, force_wielded = 10) AddComponent( \ /datum/component/gun_crank, \ charging_cell = get_cell(), \ @@ -23,6 +22,7 @@ cooldown_time = 3 SECONDS, \ charge_sound = 'sound/weapons/laser_crank.ogg', \ charge_sound_cooldown_time = 1.8 SECONDS, \ + charge_move = IGNORE_USER_LOC_CHANGE, \ ) /obj/item/gun/energy/laser/musket/prime @@ -62,6 +62,7 @@ cooldown_time = 2 SECONDS, \ charge_sound = 'sound/weapons/laser_crank.ogg', \ charge_sound_cooldown_time = 1.8 SECONDS, \ + charge_move = IGNORE_USER_LOC_CHANGE, \ ) /obj/item/gun/energy/disabler/smoothbore/add_seclight_point() diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index a8349b751a74..707dc86974d6 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -41,6 +41,7 @@ name = "tactical energy gun" desc = "Military issue energy gun, is able to fire stun rounds." icon_state = "energytac" + cell_type = /obj/item/stock_parts/cell/upgraded //monkestation ADDITION ammo_x_offset = 2 ammo_type = list(/obj/item/ammo_casing/energy/electrode/spec, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index ad5a5ce92795..4ecb1b1d2cd1 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -23,6 +23,16 @@ desc = "An older model of the basic lasergun, no longer used by Nanotrasen's private security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." ammo_x_offset = 3 +/obj/item/gun/energy/laser/carbine + name = "laser carbine" + desc = "A modified laser gun which can shoot far faster, but each shot is far less damaging." + icon_state = "laser_carbine" + ammo_type = list(/obj/item/ammo_casing/energy/lasergun/carbine) + +/obj/item/gun/energy/laser/carbine/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE) + /obj/item/gun/energy/laser/retro/old name ="laser gun" icon_state = "retro" diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 635570fbb15c..e099176ddd01 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -40,6 +40,26 @@ overlay_x = 15, \ overlay_y = 10) +/obj/item/gun/energy/disabler/smg + name = "disabler smg" + desc = "An automatic disabler variant, as opposed to the conventional model, boasts a higher ammunition capacity at the cost of slightly reduced beam effectiveness." + icon_state = "disabler_smg" + ammo_type = list(/obj/item/ammo_casing/energy/disabler/smg) + shaded_charge = 1 + +/obj/item/gun/energy/disabler/smg/Initialize(mapload) + . = ..() + AddComponent(/datum/component/automatic_fire, 0.15 SECONDS, allow_akimbo = FALSE) + +/obj/item/gun/energy/disabler/add_seclight_point() + AddComponent(\ + /datum/component/seclite_attachable, \ + light_overlay_icon = 'icons/obj/weapons/guns/flashlights.dmi', \ + light_overlay = "flight", \ + overlay_x = 15, \ + overlay_y = 13, \ + ) + /obj/item/gun/energy/disabler/cyborg name = "cyborg disabler" desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index cbf47d7cdba7..d47c2c05a5be 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -281,7 +281,7 @@ hitx = target.pixel_x + rand(-8, 8) hity = target.pixel_y + rand(-8, 8) - if((isturf(target) || (isobj(target) && target.density)) && hitsound_wall) + if(isturf(target_turf) && hitsound_wall) var/volume = clamp(vol_by_damage() + 20, 0, 100) if(suppressed) volume = 5 @@ -293,11 +293,7 @@ if(damage > 0 && (damage_type == BRUTE || damage_type == BURN) && iswallturf(target_turf) && prob(75)) var/turf/closed/wall/target_wall = target_turf target_wall.add_dent(WALL_DENT_SHOT, hitx, hity) - if(isturf(target) && hitsound_wall) - var/volume = clamp(vol_by_damage() + 20, 0, 100) - if(suppressed) - volume = 5 - playsound(loc, hitsound_wall, volume, TRUE, -1) + return BULLET_ACT_HIT var/mob/living/living_target = target diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3266a8a309ee..f4ad04bbcb49 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -28,6 +28,11 @@ wound_bonus = -30 bare_wound_bonus = 40 +/obj/projectile/beam/laser/carbine + icon_state = "carbine_laser" + impact_effect_type = /obj/effect/temp_visual/impact_effect/yellow_laser + damage = 10 + //overclocked laser, does a bit more damage but has much higher wound power (-0 vs -20) /obj/projectile/beam/laser/hellfire name = "hellfire laser" @@ -59,15 +64,15 @@ name = "low-power laser" icon_state = "laser_musket" impact_effect_type = /obj/effect/temp_visual/impact_effect/purple_laser - damage = 25 - stamina = 40 + damage = 28 + stamina = 35 light_color = COLOR_STRONG_VIOLET weak_against_armour = TRUE /obj/projectile/beam/laser/musket/prime name = "mid-power laser" - damage = 30 - stamina = 45 + damage = 25 + stamina = 20 weak_against_armour = FALSE /obj/projectile/beam/weak @@ -142,9 +147,9 @@ . = ..() if (!QDELETED(target) && (isturf(target) || isstructure(target))) if(isobj(target)) - SSexplosions.med_mov_atom += target + SSexplosions.low_mov_atom += target //monkestation edit else - SSexplosions.medturf += target + SSexplosions.lowturf += target //monkestation edit /obj/projectile/beam/pulse/shotgun damage = 30 @@ -152,6 +157,7 @@ /obj/projectile/beam/pulse/heavy name = "heavy pulse laser" icon_state = "pulse1_bl" + damage = 100 //monkestation addition projectile_piercing = ALL var/pierce_hits = 2 @@ -159,7 +165,7 @@ if(pierce_hits <= 0) projectile_piercing = NONE pierce_hits -= 1 - ..() + return ..() /obj/projectile/beam/emitter name = "emitter beam" diff --git a/code/modules/projectiles/projectile/bullets/rifle.dm b/code/modules/projectiles/projectile/bullets/rifle.dm index c0fa5e2766c7..775d3e8e8a72 100644 --- a/code/modules/projectiles/projectile/bullets/rifle.dm +++ b/code/modules/projectiles/projectile/bullets/rifle.dm @@ -47,6 +47,134 @@ embedding = list(embed_chance=100, fall_chance=3, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.4, pain_mult=5, jostle_pain_mult=6, rip_time=10) wound_falloff_tile = -5 +// Rebar (Rebar Crossbow) +/obj/projectile/bullet/rebar + name = "rebar" + icon_state = "rebar" + damage = 30 + speed = 0.4 + dismemberment = 1 //because a 1 in 100 chance to just blow someones arm off is enough to be cool but also not enough to be reliable + armour_penetration = 10 + wound_bonus = -20 + bare_wound_bonus = 20 + embedding = list("embed_chance" = 60, "fall_chance" = 2, "jostle_chance" = 2, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" = 10) + embed_falloff_tile = -5 + wound_falloff_tile = -2 + shrapnel_type = /obj/item/ammo_casing/rebar + +/obj/projectile/bullet/rebar/proc/handle_drop(datum/source, obj/item/ammo_casing/rebar/newcasing) + +/obj/projectile/bullet/rebar/syndie + name = "rebar" + icon_state = "rebar" + damage = 55 + speed = 0.4 + dismemberment = 2 //It's a budget sniper rifle. + armour_penetration = 20 //A bit better versus armor. Gets past anti laser armor or a vest, but doesnt wound proc on sec armor. + wound_bonus = 10 + bare_wound_bonus = 20 + embedding = list("embed_chance" = 80, "fall_chance" = 1, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.4, "pain_mult" = 3, "jostle_pain_mult" = 2, "rip_time" = 14) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/syndie + +/obj/projectile/bullet/rebar/zaukerite + name = "zaukerite shard" + icon_state = "rebar_zaukerite" + damage = 60 + speed = 0.6 + dismemberment = 10 + damage_type = TOX + eyeblur = 5 + armour_penetration = 20 // not nearly as good, as its not as sharp. + wound_bonus = 10 + bare_wound_bonus = 40 + embedding = list("embed_chance" =100, "fall_chance" = 0, "jostle_chance" = 5, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.8, "pain_mult" = 6, "jostle_pain_mult" = 2, "rip_time" = 30) + embed_falloff_tile = 0 // very spiky. + shrapnel_type = /obj/item/ammo_casing/rebar/zaukerite + +/obj/projectile/bullet/rebar/hydrogen + name = "metallic hydrogen bolt" + icon_state = "rebar_hydrogen" + damage = 40 + speed = 0.6 + dismemberment = 0 //goes through clean. + damage_type = BRUTE + armour_penetration = 30 //very pointy. + projectile_piercing = PASSMOB //felt this might have been a nice compromise for the lower damage for the difficulty of getting it + wound_bonus = -15 + bare_wound_bonus = 10 + embedding = list("embed_chance" = 50, "fall_chance" = 2, "jostle_chance" = 3, "ignore_throwspeed_threshold" = TRUE, "pain_stam_pct" = 0.6, "pain_mult" = 4, "jostle_pain_mult" = 2, "rip_time" =18) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/hydrogen + +/obj/projectile/bullet/rebar/healium + name = "healium bolt" + icon_state = "rebar_healium" + damage = 0 + speed = 0.4 + dismemberment = 0 + damage_type = BRUTE + armour_penetration = 100 + wound_bonus = -100 + bare_wound_bonus = -100 + embedding = list(embed_chance = 0) + embed_falloff_tile = -3 + shrapnel_type = /obj/item/ammo_casing/rebar/healium + +/obj/projectile/bullet/rebar/healium/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(!iscarbon(target)) + return BULLET_ACT_HIT + var/mob/living/breather = target + breather.SetSleeping(3 SECONDS) + breather.adjustFireLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC) + breather.adjustToxLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC) + breather.adjustBruteLoss(-30, updating_health = TRUE, required_bodytype = BODYTYPE_ORGANIC) + breather.adjustOxyLoss(-30, updating_health = TRUE, required_biotype = BODYTYPE_ORGANIC, required_respiration_type = ALL) + + return BULLET_ACT_HIT + + +/obj/projectile/bullet/rebar/supermatter + name = "supermatter bolt" + icon_state = "rebar_supermatter" + damage = 0 + speed = 0.4 + dismemberment = 0 + damage_type = TOX + armour_penetration = 100 + shrapnel_type = /obj/item/ammo_casing/rebar/supermatter + +/obj/projectile/bullet/rebar/supermatter/on_hit(atom/target, blocked = 0, pierce_hit) + . = ..() + if(isliving(target)) + var/mob/living/victim = target + victim.investigate_log("has been dusted by [src].", INVESTIGATE_DEATHS) + dust_feedback(target) + victim.dust() + + else if(!isturf(target)&& !isliving(target)) + dust_feedback(target) + qdel(target) + + return BULLET_ACT_HIT + + +/obj/projectile/bullet/rebar/supermatter/proc/dust_feedback(atom/target) + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 10, TRUE) + visible_message(span_danger("[target] is hit by [src], turning [target.p_them()] to dust in a brilliant flash of light!")) + +/obj/projectile/bullet/paperball + desc = "Doink!" + damage = 1 // It's a damn toy. + range = 10 + shrapnel_type = null + embedding = null + name = "paper ball" + desc = "doink!" + damage_type = BRUTE + icon_state = "paperball" + /obj/projectile/bullet/a223 name = ".223 bullet" damage = 35 diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 202b29287d9d..c4fa6c7a6185 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -355,7 +355,24 @@ GLOBAL_LIST_INIT(chem_master_containers, list( return TRUE if(action == "selectContainer") - selected_container = params["ref"] + var/target_ref = params["ref"] + var/obj/item/reagent_containers/target = locate(target_ref) + + //is this even a valid type path + if(!ispath(target)) + return FALSE + + //are we printing a valid container + var/container_found = FALSE + for(var/category in printable_containers) + if(target in printable_containers[category]) + container_found = TRUE + break + if(!container_found) + return FALSE + + //set the container + selected_container = target_ref return TRUE if(action == "create") diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 10fdb6fe2115..2aaabee0d68b 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -30,7 +30,7 @@ Nothing else in the console has ID requirements. /// The stored design disk, if present var/obj/item/disk/design_disk/d_disk /// Determines if the console is locked, and consequently if actions can be performed with it - var/locked = FALSE + var/locked = TRUE //Monkestation edit. /// Used for compressing data sent to the UI via static_data as payload size is of concern var/id_cache = list() /// Sequence var for the id cache diff --git a/code/modules/spells/spell_types/right_and_wrong.dm b/code/modules/spells/spell_types/right_and_wrong.dm index fa2838a27945..240d54601db1 100644 --- a/code/modules/spells/spell_types/right_and_wrong.dm +++ b/code/modules/spells/spell_types/right_and_wrong.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(summoned_magic, list( /obj/item/gun/magic/wand/fireball, /obj/item/gun/magic/staff/healing, /obj/item/gun/magic/staff/door, - /obj/item/gun/magic/staff/babel, + /* /obj/item/gun/magic/staff/babel, [monkestation removal: this is admin only now] */ /obj/item/scrying, /obj/item/warp_whistle, /obj/item/immortality_talisman, diff --git a/code/modules/spells/spell_types/tower_of_babel.dm b/code/modules/spells/spell_types/tower_of_babel.dm index 0f70700c0973..e04fde85e2dd 100644 --- a/code/modules/spells/spell_types/tower_of_babel.dm +++ b/code/modules/spells/spell_types/tower_of_babel.dm @@ -12,10 +12,12 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel) deadchat_broadcast("The [span_name("Tower of Babel")] has stricken the station, people will struggle to communicate.", message_type=DEADCHAT_ANNOUNCEMENT) for(var/mob/living/carbon/target in GLOB.player_list) + if(!target.mind) + return if(IS_WIZARD(target) && !badmin) // wizards are not only immune but can speak all languages to taunt their victims over the radio target.grant_all_languages(source=LANGUAGE_BABEL) - ADD_TRAIT(target, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) + ADD_TRAIT(target.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) to_chat(target, span_reallybig(span_hypnophrase("You feel a magical force improving your speech patterns!"))) continue @@ -44,8 +46,10 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel) // silicon mobs are immune if(!iscarbon(to_curse)) return + if(!to_curse.mind) + return - if(to_curse.can_block_magic(MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND) || HAS_TRAIT(to_curse, TRAIT_TOWER_OF_BABEL)) + if(to_curse.can_block_magic(MAGIC_RESISTANCE | MAGIC_RESISTANCE_MIND) || HAS_MIND_TRAIT(to_curse, TRAIT_TOWER_OF_BABEL)) to_chat(to_curse, span_notice("You have a strange feeling for a moment, but then it passes.")) return @@ -56,9 +60,11 @@ GLOBAL_DATUM(tower_of_babel, /datum/tower_of_babel) /proc/cure_curse_of_babel(mob/living/carbon/to_cure) if(!iscarbon(to_cure)) return + if(!to_cure.mind) + return // anyone who has this trait from another source is immune to being cursed by tower of babel - if(!HAS_TRAIT_FROM(to_cure, TRAIT_TOWER_OF_BABEL, TRAUMA_TRAIT)) + if(!HAS_TRAIT_FROM(to_cure.mind, TRAIT_TOWER_OF_BABEL, TRAUMA_TRAIT)) return to_cure.remove_status_effect(/datum/status_effect/tower_of_babel/magical) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 91cf1def26f4..ee7fcdda86e5 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -654,7 +654,7 @@ if(burn) set_burn_dam(round(max(burn_dam - burn, 0), DAMAGE_PRECISION)) - if(HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING)) + if(HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING) && !HAS_TRAIT(owner, TRAIT_DEFIB_BLACKLISTED)) //monkestation edit if(owner.health > 0) owner.revive(0) owner.cure_husk(0) // If it has REVIVESBYHEALING, it probably can't be cloned. No husk cure. @@ -667,7 +667,7 @@ //monkestation edit start if(owner.stat == DEAD && HAS_TRAIT(owner, TRAIT_REVIVES_BY_HEALING)) - if(owner.health > 50) + if(!HAS_TRAIT(owner, TRAIT_DEFIB_BLACKLISTED) && owner.health > 50) owner.revive(FALSE) //monkestation edit end diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index 2f1754428c92..af5b1dc6c2f2 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -99,3 +99,16 @@ cost = 13 surplus = 50 purchasable_from = ~UPLINK_CLOWN_OPS + +/datum/uplink_item/dangerous/cat + name = "Feral cat grenade" + desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" + cost = 5 + item = /obj/item/grenade/spawnergrenade/cat + surplus = 30 + +/datum/uplink_item/dangerous/rebarxbowsyndie + name = "Syndicate Rebar Crossbow" + desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." + item = /obj/item/storage/box/syndie_kit/rebarxbowsyndie + cost = 12 diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 86492961450a..640685892bbf 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -521,6 +521,14 @@ surplus = 35 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS +/datum/uplink_item/dangerous/syndicat + name = "Syndie cat grenade" + desc = "This grenade is filled with 3 trained angry cats in special syndicate modsuits. Upon activation, the Syndicate cats are awoken and unleashed unto unlucky bystanders." + item = /obj/item/grenade/spawnergrenade/cat/syndicate + cost = 20 + surplus = 50 + purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS + /datum/uplink_item/explosives/pinata name = "Weapons Grade Pinata Kit" desc = "A pinata filled with both candy and explosives as well as two belts to carry them on, crack it open and see what you get!" diff --git a/code/modules/uplink/uplink_items/stealthy.dm b/code/modules/uplink/uplink_items/stealthy.dm index 8a2d71d87665..9ea9661de90f 100644 --- a/code/modules/uplink/uplink_items/stealthy.dm +++ b/code/modules/uplink/uplink_items/stealthy.dm @@ -28,6 +28,12 @@ item = /obj/item/pen/edagger cost = 2 +/datum/uplink_item/stealthy_weapons/slipstick + name = "Syndie Lipstick" + desc = "Stylish way to kiss to death, isn't it syndiekisser?" + item = /obj/item/lipstick/syndie + cost = 12 + /datum/uplink_item/stealthy_weapons/traitor_chem_bottle name = "Poison Kit" desc = "An assortment of deadly chemicals packed into a compact box. Comes with a syringe for more precise application." diff --git a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm index 0e147ec37665..dc32e7b925d9 100644 --- a/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/mining_tools.dm @@ -81,13 +81,17 @@ return /turf/closed/wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit if(drill.do_after_mecha(src, user, 60 / drill.drill_level)) drill.log_message("Drilled through [src]", LOG_MECHA) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit dismantle_wall(TRUE, FALSE) /turf/closed/wall/r_wall/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) if(drill.drill_level >= DRILL_HARDENED) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit if(drill.do_after_mecha(src, user, 120 / drill.drill_level)) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit drill.log_message("Drilled through [src]", LOG_MECHA) dismantle_wall(TRUE, FALSE) else @@ -95,7 +99,9 @@ /turf/closed/mineral/drill_act(obj/item/mecha_parts/mecha_equipment/drill/drill, mob/user) for(var/turf/closed/mineral/M in range(drill.chassis,1)) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit if(get_dir(drill.chassis,M)&drill.chassis.dir) + playsound(src,'sound/weapons/drill.ogg',40,TRUE) //monkestation edit M.gets_drilled() drill.log_message("[user] drilled through [src]", LOG_MECHA) drill.move_ores() diff --git a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm index 8ccb7a73b4fe..ae87aff1457c 100644 --- a/code/modules/vehicles/mecha/equipment/tools/work_tools.dm +++ b/code/modules/vehicles/mecha/equipment/tools/work_tools.dm @@ -36,8 +36,68 @@ return if(!cargo_holder) return + if(isliving(target)) //monkestation edit: also threw this if statement up here used to be at the very bottom + var/mob/living/M = target + if(M.stat == DEAD) + return + + if(!(source.istate && ISTATE_HARM)) //monkestation edit + step_away(M,chassis) + if(killer_clamp) + target.visible_message(span_danger("[chassis] tosses [target] like a piece of paper!"), \ + span_userdanger("[chassis] tosses you like a piece of paper!")) + else + to_chat(source, "[icon2html(src, source)][span_notice("You push [target] out of the way.")]") + chassis.visible_message(span_notice("[chassis] pushes [target] out of the way."), \ + span_notice("[chassis] pushes you aside.")) + return ..() + if((source.istate && ISTATE_HARM) && ishuman(M))//meme clamp here: monkestation edit that comment was here before + if(!killer_clamp) + to_chat(source, span_notice("You longingly wish to tear [M]'s arms off.")) + return + var/mob/living/carbon/C = target + var/torn_off = FALSE + var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM) + if(affected != null) + affected.dismember(damtype) + torn_off = TRUE + affected = C.get_bodypart(BODY_ZONE_R_ARM) + if(affected != null) + affected.dismember(damtype) + torn_off = TRUE + if(!torn_off) + to_chat(source, span_notice("[M]'s arms are already torn off, you must find a challenger worthy of the kill clamp!")) + return + playsound(src, get_dismember_sound(), 80, TRUE) + target.visible_message(span_danger("[chassis] rips [target]'s arms off!"), \ + span_userdanger("[chassis] rips your arms off!")) + log_combat(source, M, "removed both arms with a real clamp,", "[name]", "(COMBAT MODE: [uppertext((source.istate & ISTATE_HARM))] (DAMTYPE: [uppertext(damtype)])") + return ..() + + playsound(src, clampsound, 40, TRUE) //monkestation addition + M.take_overall_damage(clamp_damage) + if(!M) //get gibbed stoopid + return + M.adjustOxyLoss(round(clamp_damage/2)) + M.updatehealth() + target.visible_message(span_danger("[chassis] squeezes [target]!"), \ + span_userdanger("[chassis] squeezes you!"),\ + span_hear("You hear something crack.")) + log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])") + return ..() + if(ismecha(target)) var/obj/vehicle/sealed/mecha/M = target + //MONKESTATION EDIT START + if(source.istate && ISTATE_HARM && killer_clamp) + playsound(src, clampsound, 40, TRUE) //monkestation addition + M.take_damage(300, BRUTE) + target.visible_message(span_danger("[chassis] squeezes [target]!"), \ + span_userdanger("[chassis] squeezes you!"),\ + span_hear("You hear something crack.")) + log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])") + return + //MONKESTATION EDIT STOP var/have_ammo for(var/obj/item/mecha_ammo/box in cargo_holder.cargo) if(istype(box, /obj/item/mecha_ammo) && box.rounds) @@ -81,53 +141,6 @@ to_chat(source, "[icon2html(src, source)][span_notice("[target] successfully loaded.")]") log_message("Loaded [clamptarget]. Cargo compartment capacity: [cargo_holder.cargo_capacity - LAZYLEN(cargo_holder.cargo)]", LOG_MECHA) - else if(isliving(target)) - var/mob/living/M = target - if(M.stat == DEAD) - return - - if(!(source.istate & ISTATE_HARM)) - step_away(M,chassis) - if(killer_clamp) - target.visible_message(span_danger("[chassis] tosses [target] like a piece of paper!"), \ - span_userdanger("[chassis] tosses you like a piece of paper!")) - else - to_chat(source, "[icon2html(src, source)][span_notice("You push [target] out of the way.")]") - chassis.visible_message(span_notice("[chassis] pushes [target] out of the way."), \ - span_notice("[chassis] pushes you aside.")) - return ..() - else if((source.istate & ISTATE_SECONDARY) && iscarbon(M))//meme clamp here - if(!killer_clamp) - to_chat(source, span_notice("You longingly wish to tear [M]'s arms off.")) - return - var/mob/living/carbon/C = target - var/torn_off = FALSE - var/obj/item/bodypart/affected = C.get_bodypart(BODY_ZONE_L_ARM) - if(affected != null) - affected.dismember(damtype) - torn_off = TRUE - affected = C.get_bodypart(BODY_ZONE_R_ARM) - if(affected != null) - affected.dismember(damtype) - torn_off = TRUE - if(!torn_off) - to_chat(source, span_notice("[M]'s arms are already torn off, you must find a challenger worthy of the kill clamp!")) - return - playsound(src, get_dismember_sound(), 80, TRUE) - target.visible_message(span_danger("[chassis] rips [target]'s arms off!"), \ - span_userdanger("[chassis] rips your arms off!")) - log_combat(source, M, "removed both arms with a real clamp,", "[name]", "(COMBAT MODE: [uppertext((source.istate & ISTATE_HARM))] (DAMTYPE: [uppertext(damtype)])") - return ..() - - M.take_overall_damage(clamp_damage) - if(!M) //get gibbed stoopid - return - M.adjustOxyLoss(round(clamp_damage/2)) - M.updatehealth() - target.visible_message(span_danger("[chassis] squeezes [target]!"), \ - span_userdanger("[chassis] squeezes you!"),\ - span_hear("You hear something crack.")) - log_combat(source, M, "attacked", "[name]", "(Combat mode: [(source.istate & ISTATE_HARM) ? "On" : "Off"]) (DAMTYPE: [uppertext(damtype)])") return ..() diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index cf9a8f7a98d2..5fd33b0fc7de 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -88,3 +88,186 @@ - rscdel: Removed the old bubble room up top for extra space to expand Centcom. - qol: Pretty up medical centcom while trimming the wasted space as well as add extra stuff. +2024-12-08: + Absolucy: + - bugfix: The recursive symptom varient should now work as intended rather than + cascading horribly. + - bugfix: The "Quantumly Entangled" (bluespace) symptom varient should work properly + now. + - bugfix: Symptoms being deleted properly cleanup their attached varients now. + - bugfix: Clown operative leaders now properly spawn with their gear. + - bugfix: Anime quirk appearance prefs now properly transfer when becoming a roundstart + nuke/clown operative. + - bugfix: Clean up the inventory/items of players becoming roundstart nuke/clown + operatives more thoroughly and quietly. + - refactor: Cleaned up code related to roundstart nuke/clown operatives. + - bugfix: Heretics healing on rust via Leeching Walk or rust ascension now properly + updates health. + - qol: Heretics healing on rust via Leeching Walk or rust ascension scales with + the world's delta time, making its rate independent of subsystem lag. + - admin: Added a warning+confirmation if an admin try to run a specifically laggy + proc. + Absolucy, SmArtKar, Kapu: + - code_imp: Implemented caching for icon sizes which should significantly improve + mob health performance due to HUDs constantly fetching icons. + Gw0sty: + - rscadd: Gave Chameleon gloves the property to transmit radio for sign language. + - rscadd: Research directors now get a mixture of scientist and roboticist bounties. + - rscadd: Added craft able cleanbot variation, Scrubs Junior, a cleanbot that medical + doctors can access. + - rscadd: New bounty types for roboticists, bots, requiring various station bots + that do not spawn roundstart. + - bugfix: Renamed Late Join to Late Arrival + - qol: Cleanbots will now burn cigarbutts, loose ammo casings, and food wrappers + SirNightKnight: + - bugfix: Fixed Nanotrasen Representative's alt title options excluding the original + title once picked. + Uristthedorf: + - balance: Durathread vests now cover your arms. + - image: Worn durathread vest sprites show your arms being covered. + Wisemonster: + - spellcheck: Clarified NT representative's description as being more an "Observe + and report" role, and that they cannot give orders to command (They can still + make suggestions). +2024-12-10: + Absolucy: + - bugfix: Fixed not being able to select container/pill/patch type in ChemMasters. + Gw0sty: + - rscadd: R&D consoles are now locked by default when built. + Loiosh42: + - bugfix: You can now print AP shells at the ammo workbench + Shoddd: + - bugfix: Wonderland grass no longer has chasms underneath + - rscadd: Satyr headbutt now checks for hands and mobility + SirNightKnight: + - balance: Rebalance debilitated to be more tame. +2024-12-12: + Absolucy: + - rscdel: Removed the Tower of Babel wizard event. + - rscdel: Staff of Babel is now admin-only. + - rscadd: 3+ living ascended heretics will automatically raise the alert level to + Lambda. + - bugfix: Nar'sie and Ratvar now properly raise the alert level to Lambda. + - qol: Ascended heretics are now in their own category in the ghost orbit menu. + - refactor: Cleaned up code relating to heretic ascension announcements and traits. + - bugfix: Syndicate implants are now properly hidden from HUDs/scanners. + - qol: Rearranged the curator's radio booth / private study on MetaStation, hopefully + making it less of a cramped eyesore. + Absolucy, JohnFulpWillard: + - bugfix: Shaft Miners and Explorers are now alerted of icemoon storms, Clowns are + naive, and Curators are immune to the Tower of Babel again. +2024-12-13: + Absolucy: + - refactor: Challenge and monkecoin reward code is now more resilient. +2024-12-14: + SentientVoid: + - rscadd: The Blueshift aquarium has been altered and moved to maintenance. It has + been replaced with the monke box. + Syndicat-Meow: + - rscadd: Added Disabler SMG available to be ordered from cargo + - image: added sprite for Disabler SMG + - rscadd: Added Laser Carbine available to be ordered from cargo + - image: added sprite for the Laser Carbine + - rscadd: Added Syndicate Lipstick! Finish off your opponents with a deadly kiss + of death! + - rscadd: Added a new trait that comes from using the lipstick + - image: added sprite for syndicate lipstick + - rscadd: Added two new crossbows one being craftable by crew using and engineering + inducer! + - rscadd: Added special ammo for the crossbows and a book for stronger normal ammo + and their crafting recipes + - image: Added sprites of crossbows and ammo + - code_imp: changed some code about autofire and minor changes to relavant code + - sound: Added a new sound for the crossbow + - admin: Added an admin only crossbow bolt =) + - rscadd: Added angry cats in a can for 5 TC + - rscadd: Added angry cat in a red suit + - rscadd: Tossed 3 red suit angry cats in a can for 20 TC + - image: Added sprites for the Syndicate Cat + ThePooba: + - rscadd: adds a Rayne co. medkit that you buy from the company import, you can + healthscan people with it and it hates your guts + - rscadd: adds bloody drips unusual effect + - balance: christmas earlier + - qol: smoothbore disabler now needs red queen instead of the reagent that deletes + itself + - qol: laser musket doesnt need glasses anymore and instead needs another drinking + glass + - balance: prime laser muskets no longer require twohanded and also shoot better + lasers + - balance: smoothbore disablers can crank on the run + - qol: more suits can hold muskets and pipeguns + - bugfix: Fixes a few bugs + Wisemonster: + - bugfix: Fixed some loadout clothing not updating after alt-clicking while worn +2024-12-15: + Absolucy: + - bugfix: Fixed railing stacking. + - bugfix: Fixed some double-encodes related to relaying admin/mentor messages to + discord. + - rscadd: Added christmas tree spawners to Blueshift - one north of science on the + upper floor, one west of botany on the lower floor. + SirNightKnight: + - rscadd: Nanotrasen has found the budget to improve on it's Emergency Response + Corps. + - balance: Nanotrasen has re-evaluated it's pulse weaponry and has lowered the explosive + impact of pulse beams after finding the resulting damage too costly to repair. + - balance: FEAR THE DEATH-RIPLEY!! + - bugfix: Shuttle decals properly rotate on shuttle move. + - bugfix: ' Made the tactical combat uniforms unadjustable so their sprite doesn''t + break.' + - sound: The newers ERTs now have a greet sound. + - code_imp: Changed the logic ordering of the mech hydraulic clamp. + Siro: + - rscadd: Added an ability for dead oozelings, "Membrane Murmur", allowing them + to vocalize a short-range cry for help from their core every so often. + TheColorCyan: + - bugfix: Random lipstick now has proper icon upon spawn. + - rscdel: Syndie lipstick can no longer spawn as a random lipstick color. +2024-12-16: + Shoddd: + - bugfix: bitrunning vending console now researchable +2024-12-17: + Absolucy: + - bugfix: Fixed suiciding as a centcom ghost player spawning an extra catatonic + body. +2024-12-18: + Absolucy: + - admin: Admins will get notified whenever a player responds to OPFOR chat (if there + is a handling admin, and they aren't afk, only they will be notified) + - admin: Added a yes/no confirmation to the "Request OPFOR" admin verb. + - qol: Players will be notified when an admin responds to their OPFOR chat. + - bugfix: Fixed some missing colored chat spans. + - bugfix: OPFOR roundend reports won't show blank sections if the opfor had objectives + or equipment if none of them were actually approved. + Gw0sty: + - rscadd: Engi Wire knowledge can now see Air alarms and vending machines wires + - rscadd: Robo Wire knowledge can now see Modsuit and Mulebot wires + - bugfix: Made red HOS mantle show up instead of the blue + - bugfix: Spraypaint the sm should now work! I don't know why you still would! + - bugfix: Bronze can now be ejected from autolathes. + - bugfix: Maintence door in artsci is now visible to our robotic overloads on metastation + - balance: Made the multi cell wall charger not charge at KW instead of W + ThePooba: + - rscdel: Eeble plush removed. +2024-12-19: + Absolucy: + - bugfix: Zombies and nightmares should now properly be immune to pain. + - balance: The Cybersun Juggernaut suit now provides the wearer with immunity to + pain and its effects. + - balance: Florida Man is now immune to pain and its effects. + - balance: Ascended rust heretics, while on rusted tiles, are immune to pain and + its effects. + - balance: Ascended blade heretic lifesteal now heals pain and reduce shock buildup. + - balance: Bloodsuckers are now fully immune to pain and its effects while Fortitude + is active. + - balance: Bloodsuckers now heal off pain while in torpor. + - balance: Bloodsuckers gain a 50% *increase* in pain from the debuff applied while + out during Sol. + - code_imp: Added some additional sanity checks to pain code, to prevent potential + runtime errors. + - balance: Clown spawner artifacts will no longer spawn another spawner if the previous + one still exists. + ThePooba: + - bugfix: nerfs christmas presents and allows the real chrimas presents to spawn + - bugfix: blob zombie event wont spawn you on asteroids and shit anymore diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 9021e8c7dd51..64c5582f515f 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/back/backpack.dmi b/icons/mob/clothing/back/backpack.dmi index e9345f018b0a..db64416b77df 100644 Binary files a/icons/mob/clothing/back/backpack.dmi and b/icons/mob/clothing/back/backpack.dmi differ diff --git a/icons/mob/clothing/belt_mirror.dmi b/icons/mob/clothing/belt_mirror.dmi index e4feec31ca20..4f3192c6e1ee 100644 Binary files a/icons/mob/clothing/belt_mirror.dmi and b/icons/mob/clothing/belt_mirror.dmi differ diff --git a/icons/mob/clothing/suits/armor.dmi b/icons/mob/clothing/suits/armor.dmi index 4c9c39bed485..dbe7305b75a5 100644 Binary files a/icons/mob/clothing/suits/armor.dmi and b/icons/mob/clothing/suits/armor.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index f44de438a8bc..7700c4d85028 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/inhands/equipment/mining_lefthand.dmi b/icons/mob/inhands/equipment/mining_lefthand.dmi index 1f0baf469717..ecd179993ddf 100644 Binary files a/icons/mob/inhands/equipment/mining_lefthand.dmi and b/icons/mob/inhands/equipment/mining_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/mining_righthand.dmi b/icons/mob/inhands/equipment/mining_righthand.dmi index d73d407da4da..097acff8b0c2 100644 Binary files a/icons/mob/inhands/equipment/mining_righthand.dmi and b/icons/mob/inhands/equipment/mining_righthand.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index e5b0ae7984ea..451b083540ef 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index ab01445414a2..12a27b6d5ef5 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/inhands/pets_held_lh.dmi b/icons/mob/inhands/pets_held_lh.dmi index 1a864db13410..4ed721c4a368 100644 Binary files a/icons/mob/inhands/pets_held_lh.dmi and b/icons/mob/inhands/pets_held_lh.dmi differ diff --git a/icons/mob/inhands/pets_held_rh.dmi b/icons/mob/inhands/pets_held_rh.dmi index 39332a7e18e4..3e4404b4faab 100644 Binary files a/icons/mob/inhands/pets_held_rh.dmi and b/icons/mob/inhands/pets_held_rh.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 590e3ff2ed06..4a204d07d351 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 5980b17fbe4a..bf0ae03a3cfe 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi index e156a233e732..44a25f5407ed 100644 Binary files a/icons/mob/landmarks.dmi and b/icons/mob/landmarks.dmi differ diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi index b35d033f84d1..73594f2f7243 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/icons/obj/cosmetic.dmi b/icons/obj/cosmetic.dmi index 8cb1e38ad88e..ee7a7ce1d04d 100644 Binary files a/icons/obj/cosmetic.dmi and b/icons/obj/cosmetic.dmi differ diff --git a/icons/obj/storage/backpack.dmi b/icons/obj/storage/backpack.dmi index a504e9c9e415..652f750907a4 100644 Binary files a/icons/obj/storage/backpack.dmi and b/icons/obj/storage/backpack.dmi differ diff --git a/icons/obj/storage/box.dmi b/icons/obj/storage/box.dmi index b7a793d72091..13ebe894bf1f 100644 Binary files a/icons/obj/storage/box.dmi and b/icons/obj/storage/box.dmi differ diff --git a/icons/obj/weapons/guns/ballistic.dmi b/icons/obj/weapons/guns/ballistic.dmi index bdc1c596aee2..b3f48a4b3782 100644 Binary files a/icons/obj/weapons/guns/ballistic.dmi and b/icons/obj/weapons/guns/ballistic.dmi differ diff --git a/icons/obj/weapons/guns/bows/quivers.dmi b/icons/obj/weapons/guns/bows/quivers.dmi index 74a7b4bc8bb5..615f96ee6af6 100644 Binary files a/icons/obj/weapons/guns/bows/quivers.dmi and b/icons/obj/weapons/guns/bows/quivers.dmi differ diff --git a/icons/obj/weapons/guns/energy.dmi b/icons/obj/weapons/guns/energy.dmi index b40c7cc1d48d..275d26493829 100644 Binary files a/icons/obj/weapons/guns/energy.dmi and b/icons/obj/weapons/guns/energy.dmi differ diff --git a/icons/obj/weapons/guns/projectiles.dmi b/icons/obj/weapons/guns/projectiles.dmi index 4e57ac40c940..bfb47f5d0acb 100644 Binary files a/icons/obj/weapons/guns/projectiles.dmi and b/icons/obj/weapons/guns/projectiles.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index 0ca3d84d02e2..a3c93789cf0e 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -237,5 +237,6 @@ h1.alert, h2.alert {color: #000000;} .orange {color: #b8761a;} .yellow {color: #c7b72c;} .cyan {color: #0ea1e6;} +.uncommonradio {color: #78a1b1;} // MONKESTATION ADDITION END "} diff --git a/monkestation/code/datums/components/crafting/robot.dm b/monkestation/code/datums/components/crafting/robot.dm new file mode 100644 index 000000000000..4aac9aa661ed --- /dev/null +++ b/monkestation/code/datums/components/crafting/robot.dm @@ -0,0 +1,14 @@ +/datum/crafting_recipe/cleanbot_jr + name = "Scrubs Junior" + desc = "A little cleaning robot, he graduated from medical school!" + result = /mob/living/basic/bot/cleanbot/medbay/jr + reqs = list( + /obj/item/reagent_containers/cup/bucket = 1, + /obj/item/assembly/prox_sensor = 1, + /obj/item/assembly/health = 1, + /obj/item/bodypart/arm/right/robot = 1, + + ) + parts = list(/obj/item/reagent_containers/cup/bucket = 1) + time = 5 SECONDS + category = CAT_ROBOT diff --git a/monkestation/code/datums/id_trim/ruins.dm b/monkestation/code/datums/id_trim/ruins.dm index 0635ac34baed..f10f534b3d40 100644 --- a/monkestation/code/datums/id_trim/ruins.dm +++ b/monkestation/code/datums/id_trim/ruins.dm @@ -1,2 +1,41 @@ +/obj/item/card/id/advanced/old + icon_state = "retro" + inhand_icon_state = "card-id" + worn_icon_state = "nothing" + lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + +/datum/id_trim/away/old/cmo + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_COMMAND, ACCESS_AWAY_MEDICAL, ACCESS_AWAY_MAINTENANCE) + assignment = "Charlie Station Chief Medical Officer" + sechud_icon_state = SECHUD_CHIEF_MEDICAL_OFFICER_AWAY + +/datum/id_trim/away/old/chef + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_MAINTENANCE) + assignment = "Charlie Station Chef" + sechud_icon_state = SECHUD_CHEF_AWAY + +/datum/id_trim/away/old/explorer + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SCIENCE, ACCESS_AWAY_MAINTENANCE, ACCESS_AWAY_SUPPLY, ACCESS_AWAY_GENERIC1, ACCESS_AWAY_GENERIC2, ACCESS_AWAY_GENERIC3, ACCESS_AWAY_GENERIC4) //purposefully has the most msc. access giving them a advantage for having less equipment than a normal explorer upon start. + assignment = "Charlie Station Explorer" + sechud_icon_state = SECHUD_EXPLORER_AWAY + +/datum/id_trim/away/old/sci + sechud_icon_state = SECHUD_SCIENTIST_AWAY + access = list(ACCESS_AWAY_GENERAL, ACCESS_AWAY_SCIENCE, ACCESS_RESEARCH) + +/datum/id_trim/away/old/sec + sechud_icon_state = SECHUD_SECURITY_OFFICER_AWAY + +/datum/id_trim/away/old/eng + sechud_icon_state = SECHUD_STATION_ENGINEER_AWAY + +/datum/id_trim/away/old/robo + sechud_icon_state = SECHUD_ROBOTICIST_AWAY + access = list(ACCESS_AWAY_GENERAL, ACCESS_ROBOTICS, ACCESS_ORDNANCE, ACCESS_RESEARCH, ACCESS_AWAY_SCIENCE) + +/datum/id_trim/away/old/apc + sechud_icon_state = SECHUD_APC_AWAY + /datum/id_trim/pirate/lustrous sechud_icon_state = SECHUD_RADIANT diff --git a/monkestation/code/datums/memory/key_memories.dm b/monkestation/code/datums/memory/key_memories.dm new file mode 100644 index 000000000000..d03b2f8980fb --- /dev/null +++ b/monkestation/code/datums/memory/key_memories.dm @@ -0,0 +1,8 @@ +/datum/memory/key/codewords + memory_flags = parent_type::memory_flags | MEMORY_NO_STORY + +/datum/memory/key/codewords/get_names() + return list("The code phrases used by the Syndicate: [jointext(GLOB.syndicate_code_phrase, ", ")].") + +/datum/memory/key/codewords/responses/get_names() + return list("The code responses used by the Syndicate: [jointext(GLOB.syndicate_code_response, ", ")].") diff --git a/monkestation/code/datums/wires/airalarm.dm b/monkestation/code/datums/wires/airalarm.dm new file mode 100644 index 000000000000..f0e76327fe47 --- /dev/null +++ b/monkestation/code/datums/wires/airalarm.dm @@ -0,0 +1,5 @@ +/datum/wires/airalarm/can_reveal_wires(mob/user) + if(HAS_TRAIT(user, TRAIT_KNOW_ENGI_WIRES)) + return TRUE + + return ..() diff --git a/monkestation/code/datums/wires/mod.dm b/monkestation/code/datums/wires/mod.dm new file mode 100644 index 000000000000..8834f7633342 --- /dev/null +++ b/monkestation/code/datums/wires/mod.dm @@ -0,0 +1,5 @@ +/datum/wires/mod/can_reveal_wires(mob/user) + if(HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES)) + return TRUE + + return ..() diff --git a/monkestation/code/datums/wires/mulebot.dm b/monkestation/code/datums/wires/mulebot.dm new file mode 100644 index 000000000000..0f94e9228c15 --- /dev/null +++ b/monkestation/code/datums/wires/mulebot.dm @@ -0,0 +1,5 @@ +/datum/wires/mulebot/can_reveal_wires(mob/user) + if(HAS_TRAIT(user, TRAIT_KNOW_ROBO_WIRES)) + return TRUE + + return ..() diff --git a/monkestation/code/datums/wires/vending.dm b/monkestation/code/datums/wires/vending.dm new file mode 100644 index 000000000000..3e5d92fcce26 --- /dev/null +++ b/monkestation/code/datums/wires/vending.dm @@ -0,0 +1,5 @@ +/datum/wires/vending/can_reveal_wires(mob/user) + if(HAS_TRAIT(user, TRAIT_KNOW_ENGI_WIRES)) + return TRUE + + return ..() diff --git a/monkestation/code/game/machinery/exp_cloner.dm b/monkestation/code/game/machinery/exp_cloner.dm index 1dd46217facd..c9efbc167d1c 100644 --- a/monkestation/code/game/machinery/exp_cloner.dm +++ b/monkestation/code/game/machinery/exp_cloner.dm @@ -130,7 +130,7 @@ mob_occupant.mind.add_antag_datum(antag_object) mob_occupant.grant_language(/datum/language/codespeak) // So you don't have to remember to grant each and every identical clone codespeak with the manual. mob_occupant.remove_blocked_language(/datum/language/codespeak, source=LANGUAGE_ALL) // All the effects the codespeak manual would have. - ADD_TRAIT(mob_occupant, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) + ADD_TRAIT(mob_occupant.mind, TRAIT_TOWER_OF_BABEL, MAGIC_TRAIT) var/obj/item/implant/radio/syndicate/imp = new(src) imp.implant(mob_occupant) mob_occupant.faction |= ROLE_SYNDICATE diff --git a/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm b/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm index df453599a12a..10997d861408 100644 --- a/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/monkestation/code/game/objects/items/devices/radio/encryptionkey.dm @@ -4,3 +4,7 @@ channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_MEDICAL = 1) greyscale_config = /datum/greyscale_config/encryptionkey_security greyscale_colors = "#820a16#280b1a" + +/obj/item/encryptionkey/headset_uncommon + name = "dusty encryption key" + channels = list(RADIO_CHANNEL_UNCOMMON = 1) diff --git a/monkestation/code/game/objects/items/devices/radio/headset.dm b/monkestation/code/game/objects/items/devices/radio/headset.dm index c266ed70b6b4..8be0cd0cbe8d 100644 --- a/monkestation/code/game/objects/items/devices/radio/headset.dm +++ b/monkestation/code/game/objects/items/devices/radio/headset.dm @@ -4,3 +4,22 @@ icon_state = "sec_headset" worn_icon_state = "sec_headset" keyslot = /obj/item/encryptionkey/headset_secmed + +/obj/item/radio/headset/headset_old + name = "old radio headset" + desc = "A headset years past its prime." + +/obj/item/radio/headset/headset_old/alt + name = "old security bowman headset" + desc = "A headset years past its prime. Protects ears from flashbangs." + keyslot = /obj/item/encryptionkey/headset_uncommon + icon_state = "med_headset_alt" + worn_icon_state = "med_headset_alt" + +/obj/item/radio/headset/headset_old/alt/Initialize(mapload) + . = ..() + AddComponent(/datum/component/wearertargeting/earprotection, list(ITEM_SLOT_EARS)) + +/obj/item/radio/headset/heads/headset_old + name = "\proper old commander headset" + desc = "A authoritative headset years past its prime. Dust cakes its old design." diff --git a/monkestation/code/game/objects/items/plushies.dm b/monkestation/code/game/objects/items/plushies.dm index 2ceb89b5135c..b1646442d8f5 100644 --- a/monkestation/code/game/objects/items/plushies.dm +++ b/monkestation/code/game/objects/items/plushies.dm @@ -61,7 +61,7 @@ icon = 'monkestation/icons/obj/plushes.dmi' icon_state = "durrcell" squeak_override = list('monkestation/sound/voice/durrcell-squeak.ogg'=1) - +/* /obj/item/toy/plush/Eeble name = "Eeble plushie" attack_verb_simple = list("Eeble","prybar") @@ -69,3 +69,4 @@ desc = "Eeble is Eeble" icon = 'monkestation/icons/obj/plushes.dmi' icon_state = "eeble" +*/ diff --git a/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm b/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm index b930b3c29ade..4266675ac77f 100644 --- a/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm +++ b/monkestation/code/game/objects/items/rayne_corp/rayne_lantern.dm @@ -1,7 +1,7 @@ /obj/item/flashlight/lantern/rayne name = "lantern" - icon_state = "lantern" - inhand_icon_state = "lantern" + icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi' + icon_state = "rayne_lantern" lefthand_file = 'icons/mob/inhands/equipment/mining_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi' desc = "A lantern that hangs off the shoulder providing some warmth and lighting with an incandescent heat lamp. \ @@ -9,12 +9,10 @@ It is stamped with a Rayne Corp logo on the bottom." light_outer_range = 5// luminosity when on light_system = OVERLAY_LIGHT - icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi' - icon_state = "rayne_lantern" - inhand_icon_state = "lantern" // todo + inhand_icon_state = "rayne_lantern" worn_icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi' worn_icon_state = "rayne_lantern_worn" - slot_flags = ITEM_SLOT_NECK + slot_flags = ITEM_SLOT_NECK | ITEM_SLOT_BELT /obj/item/flashlight/lantern/rayne/process(seconds_per_tick) diff --git a/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm b/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm index 4d941386305e..9401893bae44 100644 --- a/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm +++ b/monkestation/code/game/objects/items/rayne_corp/rayne_mender.dm @@ -1,4 +1,129 @@ +#define RAYNE_MENDER_SPEECH "monkey_companies/rayne_mender.json" +/// How long the gun should wait between speaking to lessen spam +#define RAYNE_MENDER_SPEECH_COOLDOWN 5 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_COLOR "#06507a" + + /obj/item/storage/medkit/rayne name = "Rayne Corp Health Analyzer Kit" - icon = 'icons/obj/device.dmi' + icon = 'monkestation/icons/obj/rayne_corp/rayne.dmi' + icon_state = "rayne_medkit" + inhand_icon_state = "coronerkit" + lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' item_flags = NOBLUDGEON + var/speech_json_file = RAYNE_MENDER_SPEECH + COOLDOWN_DECLARE(last_speech) + damagetype_healed = HEAL_ALL_DAMAGE + +/obj/item/storage/medkit/rayne/Initialize(mapload) + . = ..() + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + atom_storage.max_slots = 14 + atom_storage.max_total_storage = 28 + +/obj/item/storage/medkit/rayne/equipped(mob/user, slot, initial) + . = ..() + if(slot & ITEM_SLOT_HANDS) + speak_up("pickup") + +/obj/item/storage/medkit/rayne/dropped(mob/user, silent) + . = ..() + if(src in user.contents) + return // If they're still holding us or have us on them, dw about it + speak_up("putdown") + +/obj/item/storage/medkit/rayne/PopulateContents() + if(empty) + return + var/static/list/items_inside = list( + /obj/item/stack/medical/suture/medicated = 2, + /obj/item/stack/medical/mesh/advanced = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/coagulants = 2, + /obj/item/reagent_containers/hypospray/medipen/atropine = 2, + /obj/item/reagent_containers/syringe = 1, + /obj/item/reagent_containers/cup/bottle/formaldehyde = 1, + /obj/item/reagent_containers/hypospray/medipen/morphine = 1, + /obj/item/reagent_containers/hypospray/medipen/salbutamol = 1, + /obj/item/storage/pill_bottle/multiver = 1 + ) + generate_items_inside(items_inside,src) + +/obj/item/storage/medkit/rayne/attack(mob/living/M, mob/living/carbon/human/user) + if(!user.can_read(src) || user.is_blind()) + return + + flick("[icon_state]-scan", src) //makes it so that it plays the scan animation upon scanning, including clumsy scanning + + if(ispodperson(M)) + speak_up("podnerd") + return + + user.visible_message(span_notice("[user] analyzes [M]'s vitals.")) + playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50) + healthscan(user, M, 0, FALSE) + add_fingerprint(user) + judge_health(M) + + +//This proc controls what the medkit says when scanning a person, and recommends a best course of treatment (barely) +/obj/item/storage/medkit/rayne/proc/judge_health(mob/living/target) + + var/obj/item/organ/internal/brain/targetbrain + if(target.on_fire) + speak_up("onfire") + return + if(ishuman(target)) + if(!target.get_organ_slot(ORGAN_SLOT_BRAIN)) + speak_up("nobrain") + return + else + targetbrain = target.get_organ_slot(ORGAN_SLOT_BRAIN) + if(targetbrain.damage > 150) + speak_up("braindamage") + return + + if((target?.blood_volume <= BLOOD_VOLUME_SAFE) && !HAS_TRAIT(target, TRAIT_NOBLOOD)) + speak_up("lowblood") + return + + var/brute = target.getBruteLoss() + var/oxy = target.getOxyLoss() + var/tox = target.getToxLoss() + var/burn = target.getFireLoss() + var/big = max(brute,oxy,burn,tox) + if((brute + burn) >= 350) + speak_up("fuckedup") + return + if(big >= 5) + if(brute == big) + speak_up("brute") + return + if(burn == big) + speak_up("burn") + return + if(tox == big) + speak_up("tox") + return + if(oxy == big) + speak_up("oxy") + return + if(target.stat == DEAD) + speak_up("dead") + return + + speak_up("fine") + return + + + +/obj/item/storage/medkit/rayne/proc/speak_up(json_string, ignores_cooldown = FALSE) + 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(3.5)) + Shake(2, 2, 1 SECONDS) + COOLDOWN_START(src, last_speech, RAYNE_MENDER_SPEECH) diff --git a/monkestation/code/modules/ERT/ERT_outfits.dm b/monkestation/code/modules/ERT/ERT_outfits.dm new file mode 100644 index 000000000000..432a00258836 --- /dev/null +++ b/monkestation/code/modules/ERT/ERT_outfits.dm @@ -0,0 +1,717 @@ +// this is going to be so much work but let's see how far i can get +//----------------- +// Ordering: +// ROLES +// *Generic +// *Commander +// *Medic +// *Security Officer +// *Engineer +// *Janitor +// *Chaplain +// *Clown +// OTHER + +/datum/antagonist/ert/generic + name = "Emergency Response Officer" + role = "Officer" + outfit = /datum/outfit/centcom/ert/generic + ert_job_path = /datum/job/ert/generic + +/datum/antagonist/ert/generic/greet() + ..() + owner.current.playsound_local(get_turf(owner.current), 'monkestation/sound/ambience/antag/ert.ogg', 100, 0, use_reverb = FALSE) //monkestation addition + +/datum/outfit/centcom/ert/generic + name = "Emergency Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic + box = /obj/item/storage/box/survival/ert + uniform = /obj/item/clothing/under/rank/centcom/officer + ears = /obj/item/radio/headset/headset_cent/alt + gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/sechailer/swat/ert + shoes = /obj/item/clothing/shoes/combat + suit = /obj/item/clothing/suit/space/ert + suit_store = /obj/item/gun/energy/e_gun + head = /obj/item/clothing/head/helmet/space/ert + belt = /obj/item/tank/jetpack/oxygen/harness + back = /obj/item/storage/backpack/ert/generic + backpack_contents = list( + /obj/item/storage/medkit/regular = 1, + /obj/item/knife/combat = 1, + ) + glasses = /obj/item/clothing/glasses/sunglasses + l_pocket = /obj/item/melee/baton/telescopic + r_pocket = /obj/item/restraints/handcuffs + +/datum/outfit/centcom/ert/generic/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/cyberlink/nt_high/cyberlink = new() + cyberlink.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/chest/nutriment/plus/nutriment_pump = new() + nutriment_pump.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/commander + name = "Code Green Emergency Response Team Commander" + role = "Commander" + outfit = /datum/outfit/centcom/ert/generic/commander + plasmaman_outfit = /datum/outfit/plasmaman/centcom_commander + ert_job_path = /datum/job/ert/commander + +/datum/outfit/centcom/ert/generic/commander + name = "Code Green Emergency Response Team Commander" + + id = /obj/item/card/id/advanced/centcom/ert/generic/commander + suit = /obj/item/clothing/suit/space/ert/commander + head = /obj/item/clothing/head/helmet/space/ert/commander + back = /obj/item/storage/backpack/ert/commander + backpack_contents = list( + /obj/item/storage/medkit/regular = 1, + /obj/item/knife/combat = 1, + /obj/item/pinpointer/nuke = 1, + ) + glasses = /obj/item/clothing/glasses/sunglasses/big //bigger sunglasses means they are cooler and have more authority + additional_radio = /obj/item/encryptionkey/heads/captain + skillchips = list(/obj/item/skillchip/disk_verifier, /obj/item/skillchip/job/research_director) + +/datum/antagonist/ert/generic/commander/blue + name = "Code Blue Emergency Response Team Commander" + outfit = /datum/outfit/centcom/ert/generic/commander/blue + +/datum/outfit/centcom/ert/generic/commander/blue + name = "Code Blue Emergency Response Team Commander" + + shoes = /obj/item/clothing/shoes/magboots + backpack_contents = list( + /obj/item/storage/medkit/regular = 1, + /obj/item/knife/combat = 1, + /obj/item/door_remote/omni = 1, + /obj/item/pinpointer/nuke = 1, + /obj/item/gun/ballistic/automatic/pistol/m1911 = 1, + /obj/item/ammo_box/magazine/m45 = 1, + ) + l_hand = /obj/item/storage/lockbox/loyalty + +/datum/outfit/centcom/ert/generic/commander/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new() + sec_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/commander/red + name = "Code Red Emergency Response Team Commander" + outfit = /datum/outfit/centcom/ert/generic/commander/red + +/datum/outfit/centcom/ert/generic/commander/red + name = "Code Red Emergency Response Team Commander" + + id = /obj/item/card/id/advanced/centcom/ert + suit = null + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/storage/belt/security/full/bola + back = /obj/item/mod/control/pre_equipped/responsory/generic/commander + backpack_contents = list( + /obj/item/storage/medkit/advanced = 1, + /obj/item/knife/combat = 1, + /obj/item/door_remote/omni = 1, + /obj/item/pinpointer/nuke = 1, + /obj/item/storage/box/syndie_kit/imp_deathrattle/nanotrasen = 1, + /obj/item/gun/ballistic/automatic/pistol/m1911 = 1, + /obj/item/ammo_box/magazine/m45 = 2, + ) + glasses = /obj/item/clothing/glasses/night + r_pocket = /obj/item/holosign_creator/security + l_hand = /obj/item/storage/lockbox/loyalty + +/datum/outfit/centcom/ert/generic/commander/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new() + sec_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/medical + name = "Code Green Medical Response Officer" + role = "Medical Officer" + outfit = /datum/outfit/centcom/ert/generic/medical + ert_job_path = /datum/job/ert/medical + +/datum/outfit/centcom/ert/generic/medical + name = "Code Green Medical Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/medical + gloves = /obj/item/clothing/gloves/latex/nitrile + suit = /obj/item/clothing/suit/space/ert/medical + suit_store = /obj/item/gun/energy/e_gun/mini + head = /obj/item/clothing/head/helmet/space/ert/medical + back = /obj/item/storage/backpack/ert/medical + backpack_contents = list( + /obj/item/storage/medkit/surgery = 1, + /obj/item/storage/belt/medical/paramedic = 1, + /obj/item/defibrillator/compact/loaded = 1, + /obj/item/emergency_bed = 1, + ) + glasses = /obj/item/clothing/glasses/hud/health/sunglasses + additional_radio = /obj/item/encryptionkey/headset_med + skillchips = list(/obj/item/skillchip/entrails_reader) + +/datum/antagonist/ert/generic/medical/blue + name = "Code Blue Medical Response Officer" + outfit = /datum/outfit/centcom/ert/generic/medical + +/datum/outfit/centcom/ert/generic/medical/blue + name = "Code Blue Medical Response Officer" + + shoes = /obj/item/clothing/shoes/magboots + gloves = /obj/item/clothing/gloves/latex/surgical + suit_store = /obj/item/gun/energy/e_gun + backpack_contents = list( + /obj/item/storage/medkit/advanced = 1, + /obj/item/storage/box/medipens = 1, + /obj/item/storage/belt/medical/ert = 1, + /obj/item/defibrillator/compact/loaded = 1, + /obj/item/reagent_containers/hypospray/cmo = 1, //this shouldn't cause any problems? + /obj/item/emergency_bed = 1, + /obj/item/healthanalyzer/advanced = 1, + ) + +/datum/antagonist/ert/generic/medical/red + name = "Code Red Medical Response Officer" + outfit = /datum/outfit/centcom/ert/generic/medical/red + +/datum/outfit/centcom/ert/generic/medical/red + name = "Code Red Medical Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/medical + suit = null + gloves = /obj/item/clothing/gloves/latex/surgical + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/defibrillator/compact/combat/loaded/nanotrasen + back = /obj/item/mod/control/pre_equipped/responsory/generic/medic + backpack_contents = list( + /obj/item/storage/medkit/advanced = 1, + /obj/item/storage/box/medipens = 1, + /obj/item/storage/belt/medical/paramedic = 1, + /obj/item/reagent_containers/hypospray/combat = 1, + /obj/item/pinpointer/crew = 1, + /obj/item/emergency_bed = 1, + /obj/item/healthanalyzer/advanced = 1, + ) + glasses = /obj/item/clothing/glasses/night + r_pocket = /obj/item/holosign_creator/security + additional_radio = /obj/item/encryptionkey/heads/cmo + +/datum/outfit/centcom/ert/generic/medical/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/arm/item_set/surgery/surgery_toolset = new() + surgery_toolset.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/eyes/hud/medical/med_hud = new() + med_hud.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/brain/linked_surgery/serverlink = new() + serverlink.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/security + name = "Code Green Security Response Officer" + role = "Security Officer" + outfit = /datum/outfit/centcom/ert/generic/security + ert_job_path = /datum/job/ert/security + +/datum/outfit/centcom/ert/generic/security + name = "Code Green Security Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/security + suit = /obj/item/clothing/suit/space/ert/security + head = /obj/item/clothing/head/helmet/space/ert/security + back = /obj/item/storage/backpack/ert/security + backpack_contents = list( + /obj/item/knife/combat = 1, + /obj/item/grenade/flashbang = 2, + /obj/item/storage/belt/security/full/bola = 1, + ) + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/holosign_creator/security + additional_radio = /obj/item/encryptionkey/headset_sec + +/datum/antagonist/ert/generic/security/blue + name = "Code Blue Security Response Officer" + outfit = /datum/outfit/centcom/ert/generic/security/blue + +/datum/outfit/centcom/ert/generic/security/blue + name = "Code Blue Security Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/security + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + shoes = /obj/item/clothing/shoes/magboots + suit = /obj/item/clothing/suit/space/ert/security + suit_store = /obj/item/gun/energy/laser + back = /obj/item/storage/backpack/ert/security + backpack_contents = list( + /obj/item/knife/combat = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/grenade/flashbang = 2, + /obj/item/gun/energy/disabler = 1, + /obj/item/storage/belt/security/full/bola = 1, + ) + +/datum/antagonist/ert/generic/security/red + name = "Code Red Security Response Officer" + outfit = /datum/outfit/centcom/ert/generic/security/red + +/datum/outfit/centcom/ert/generic/security/red + name = "Code Red Security Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/security + suit = null + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/storage/belt/security/full/bola + back = /obj/item/mod/control/pre_equipped/responsory/generic/security + backpack_contents = list( + /obj/item/knife/combat = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/storage/box/flashbangs = 1, + /obj/item/storage/box/stingbangs = 1, + /obj/item/shield/riot/tele = 1, + ) + glasses = /obj/item/clothing/glasses/night + additional_radio = /obj/item/encryptionkey/heads/hos + +/datum/outfit/centcom/ert/generic/security/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new() + sec_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/engineer + name = "Code Green Engineering Response Officer" + role = "Engineering Officer" + outfit = /datum/outfit/centcom/ert/generic/engineer + ert_job_path = /datum/job/ert/engineer + +/datum/outfit/centcom/ert/generic/engineer + name = "Code Green Engineering Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/engineer + shoes = /obj/item/clothing/shoes/magboots + suit = /obj/item/clothing/suit/space/ert/engineer + suit_store = /obj/item/gun/energy/e_gun/mini + head = /obj/item/clothing/head/helmet/space/ert/engineer + back = /obj/item/storage/backpack/ert/engineer + backpack_contents = list( + /obj/item/storage/belt/utility/full/engi = 1, + /obj/item/construction/rcd/loaded = 1, + /obj/item/rcd_ammo/large = 1, + /obj/item/analyzer = 1, + /obj/item/extinguisher = 1, + /obj/item/pipe_dispenser = 1, + ) + glasses = /obj/item/clothing/glasses/meson/engine + additional_radio = /obj/item/encryptionkey/headset_eng + skillchips = list(/obj/item/skillchip/job/engineer, /obj/item/skillchip/job/roboticist) + +/datum/antagonist/ert/generic/engineer/blue + name = "Code Blue Engineering Response Officer" + outfit = /datum/outfit/centcom/ert/generic/engineer/blue + +/datum/outfit/centcom/ert/generic/engineer/blue + name = "Code Blue Engineering Response Officer" + + shoes = /obj/item/clothing/shoes/magboots/advance + suit_store = /obj/item/gun/energy/e_gun + back = /obj/item/storage/backpack/ert/engineer + backpack_contents = list( + /obj/item/storage/belt/utility/full/powertools = 1, + /obj/item/storage/box/rcd_upgrades = 1, + /obj/item/construction/rcd/loaded = 1, + /obj/item/rcd_ammo/large = 1, + /obj/item/analyzer/ranged = 1, + /obj/item/extinguisher/advanced = 1, + /obj/item/pipe_dispenser = 1, + ) + +/datum/outfit/centcom/ert/generic/engineer/blue/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic/diagnostic_hud = new() + diagnostic_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/engineer/red + name = "Code Red Engineering Response Officer" + outfit = /datum/outfit/centcom/ert/generic/engineer/red + +/datum/outfit/centcom/ert/generic/engineer/red + name = "Code Red Engineering Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/engineer + shoes = /obj/item/clothing/shoes/combat + suit = null + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/storage/bag/sheetsnatcher + back = /obj/item/mod/control/pre_equipped/responsory/generic/engineer + backpack_contents = list( + /obj/item/construction/rcd/loaded/upgraded = 1, + /obj/item/rcd_ammo/large = 1, + /obj/item/analyzer/ranged = 1, + /obj/item/pipe_dispenser = 1, + /obj/item/holosign_creator/atmos = 1, + /obj/item/t_scanner = 1, + /obj/item/stack/cable_coil = 1, + ) + glasses = /obj/item/clothing/glasses/meson/night + additional_radio = /obj/item/encryptionkey/heads/ce + r_pocket = /obj/item/holosign_creator/security + +/datum/outfit/centcom/ert/generic/engineer/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/diagnostic/diagnostic_hud = new() + diagnostic_hud.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/arm/item_set/toolset/toolset_implant = new() + toolset_implant.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/janitor + name = "Code Green Janitorial Response Officer" + role = "Janitorial Officer" + outfit = /datum/outfit/centcom/ert/generic/janitor + ert_job_path = /datum/job/ert/janitor + +/datum/outfit/centcom/ert/generic/janitor + name = "Code Green Janitorial Response Officer" + id = /obj/item/card/id/advanced/centcom/ert/generic/janitor + shoes = /obj/item/clothing/shoes/magboots + suit = /obj/item/clothing/suit/space/ert/janitor + suit_store = /obj/item/gun/energy/e_gun/mini + head = /obj/item/clothing/head/helmet/space/ert/janitor + back = /obj/item/storage/backpack/ert/janitor + backpack_contents = list( + /obj/item/storage/belt/janitor/full = 1, + /obj/item/storage/box/lights/mixed = 1, + /obj/item/mop/advanced = 1, + /obj/item/pushbroom = 1, + /obj/item/reagent_containers/spray/drying = 1, + /obj/item/grenade/chem_grenade/cleaner = 2, + ) + l_hand = /obj/item/storage/bag/trash + additional_radio = /obj/item/encryptionkey/headset_service + skillchips = list(/obj/item/skillchip/job/janitor) + +/datum/antagonist/ert/generic/janitor/blue + name = "Code Blue Janitorial Response Officer" + outfit = /datum/outfit/centcom/ert/generic/janitor/blue + +/datum/outfit/centcom/ert/generic/janitor/blue + name = "Code Blue Janitorial Response Officer" + shoes = /obj/item/clothing/shoes/magboots/advance + suit_store = /obj/item/gun/energy/e_gun + backpack_contents = list( + /obj/item/storage/belt/janitor/full/ert = 1, + /obj/item/mop/advanced = 1, + /obj/item/pushbroom = 1, + /obj/item/reagent_containers/spray/drying = 1, + /obj/item/grenade/chem_grenade/cleaner = 2, + /obj/item/scythe/compact = 1, + /obj/item/grenade/chem_grenade/antiweed = 1, + ) + l_hand = /obj/item/storage/bag/trash/bluespace + additional_radio = /obj/item/encryptionkey/headset_service + skillchips = list(/obj/item/skillchip/job/janitor) + +/datum/antagonist/ert/generic/janitor/red + name = "Code Red Janitorial Response Officer" + outfit = /datum/outfit/centcom/ert/generic/janitor/red + +/datum/outfit/centcom/ert/generic/janitor/red + name = "Code Red Janitorial Response Officer" + id = /obj/item/card/id/advanced/centcom/ert/janitor + shoes = /obj/item/clothing/shoes/combat + suit = null + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/storage/belt/janitor/full/ert + back = /obj/item/mod/control/pre_equipped/responsory/generic/janitor + backpack_contents = list( + /obj/item/mop/advanced = 1, + /obj/item/pushbroom = 1, + /obj/item/reagent_containers/spray/drying = 1, + /obj/item/grenade/clusterbuster/cleaner = 2, + /obj/item/scythe/compact = 1, + /obj/item/grenade/clusterbuster/antiweed = 1, + ) + l_hand = /obj/item/storage/bag/trash/bluespace + glasses = /obj/item/clothing/glasses/night + additional_radio = /obj/item/encryptionkey/heads/hop + +/datum/antagonist/ert/generic/chaplain + name = "Code Green Religious Response Officer" + role = "Religious Officer" + outfit = /datum/outfit/centcom/ert/generic/chaplain + ert_job_path = /datum/job/ert/chaplain + +/datum/antagonist/ert/generic/chaplain/on_gain() + . = ..() + owner.holy_role = HOLY_ROLE_PRIEST + +/datum/outfit/centcom/ert/generic/chaplain + name = "Code Green Religious Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/chaplain + suit = /obj/item/clothing/suit/space/ert/chaplain + suit_store = /obj/item/gun/energy/disabler + head = /obj/item/clothing/head/helmet/space/ert/chaplain + back = /obj/item/storage/backpack/ert + backpack_contents = list( + /obj/item/storage/belt/security/full/bola = 1, + /obj/item/nullrod = 1, + /obj/item/book/bible = 1, + /obj/item/reagent_containers/cup/glass/bottle/holywater = 1, + ) + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/holosign_creator/security + additional_radio = /obj/item/encryptionkey/headset_sec + skillchips = list(/obj/item/skillchip/entrails_reader) + +/datum/antagonist/ert/generic/chaplain/blue + name = "Code Blue Religious Response Officer" + outfit = /datum/outfit/centcom/ert/generic/chaplain/blue + +/datum/outfit/centcom/ert/generic/chaplain/blue + name = "Code Blue Religious Response Officer" + + suit_store = /obj/item/gun/energy/e_gun + shoes = /obj/item/clothing/shoes/magboots + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + backpack_contents = list( + /obj/item/nullrod = 1, + /obj/item/book/bible = 1, + /obj/item/reagent_containers/cup/glass/bottle/holywater = 1, + /obj/item/grenade/flashbang = 2, + /obj/item/gun/energy/disabler = 1, + /obj/item/storage/belt/security/full/bola = 1, + ) + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + additional_radio = /obj/item/encryptionkey/headset_sec + skillchips = list(/obj/item/skillchip/entrails_reader) + +/datum/antagonist/ert/generic/chaplain/red + name = "Code Red Religious Response Officer" + outfit = /datum/outfit/centcom/ert/generic/chaplain/red + +/datum/outfit/centcom/ert/generic/chaplain/red + name = "Code Red Religious Response Officer" + id = /obj/item/card/id/advanced/centcom/ert/chaplain + suit = null + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + suit_store = /obj/item/gun/energy/e_gun/stun + head = null + belt = /obj/item/nullrod/scythe/talking/chainsword + back = /obj/item/mod/control/pre_equipped/responsory/generic/chaplain + backpack_contents = list( + /obj/item/book/bible = 1, + /obj/item/reagent_containers/cup/glass/bottle/holywater = 2, + /obj/item/reagent_containers/hypospray/combat/heresypurge = 1, + /obj/item/storage/box/flashbangs = 1, + /obj/item/storage/belt/security/full/bola = 1, + ) + glasses = /obj/item/clothing/glasses/night + additional_radio = /obj/item/encryptionkey/heads/hos + +/datum/outfit/centcom/ert/generic/chaplain/red/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new() + sec_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/clown + name = "Code Honk Entertainment Response Officer" + role = "Entertainment Officer" + outfit = /datum/outfit/centcom/ert/generic/clown + plasmaman_outfit = /datum/outfit/plasmaman/party_comedian + ert_job_path = /datum/job/ert/clown + +/datum/antagonist/ert/generic/clown/New() + . = ..() + name_source = GLOB.clown_names //they are a clown after all + +/datum/outfit/centcom/ert/generic/clown + name = "Code Honk Entertainment Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/generic/clown + box = /obj/item/storage/box/survival/ert + uniform = /obj/item/clothing/under/rank/civilian/clown + gloves = /obj/item/clothing/gloves/combat + mask = /obj/item/clothing/mask/gas/clown_hat + shoes = /obj/item/clothing/shoes/clown_shoes + suit = /obj/item/clothing/suit/space/ert/clown + suit_store = null + head = /obj/item/clothing/head/helmet/space/ert/clown + belt = /obj/item/tank/jetpack/oxygen/harness + back = /obj/item/storage/backpack/ert/clown + backpack_contents = list( + /obj/item/stamp/clown = 1, + /obj/item/reagent_containers/spray/waterflower/lube = 1, + /obj/item/food/grown/banana = 1, + /obj/item/instrument/bikehorn = 1, + /obj/item/food/pie/cream = 3, + ) + glasses = /obj/item/clothing/glasses/sunglasses + l_pocket = /obj/item/bikehorn + r_pocket = /obj/item/restraints/handcuffs/cable/zipties/fake + implants = list(/obj/item/implant/sad_trombone) + +/datum/outfit/centcom/ert/generic/clown/pre_equip(mob/living/carbon/human/H, visualsOnly) + . = ..() + suit_store = pick( + /obj/item/tank/internals/emergency_oxygen/engi/clown/n2o, + /obj/item/tank/internals/emergency_oxygen/engi/clown/bz, + /obj/item/tank/internals/emergency_oxygen/engi/clown/helium, + ) + +/datum/outfit/centcom/ert/generic/clown/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + if(visualsOnly) + return + + H.dna.add_mutation(/datum/mutation/human/clumsy) + for(var/datum/mutation/human/clumsy/M in H.dna.mutations) + M.mutadone_proof = TRUE + var/datum/atom_hud/fan = GLOB.huds[DATA_HUD_FAN] + ADD_TRAIT(H, TRAIT_NAIVE, INNATE_TRAIT) + fan.show_to(H) + H.faction |= FACTION_CLOWN + if(!ishuman(H)) + return + var/obj/item/organ/internal/butt/butt = H.get_organ_slot(ORGAN_SLOT_BUTT) + if(butt) + butt.Remove(H, 1) + QDEL_NULL(butt) + butt = new/obj/item/organ/internal/butt/clown + butt.Insert(H) + + var/obj/item/organ/internal/bladder/bladder = H.get_organ_slot(ORGAN_SLOT_BLADDER) + if(bladder) + bladder.Remove(H, 1) + QDEL_NULL(bladder) + bladder = new/obj/item/organ/internal/bladder/clown + bladder.Insert(H) + +/datum/antagonist/ert/generic/clown/funny + name = "Code Honk! Entertainment Response Officer" + outfit = /datum/outfit/centcom/ert/generic/clown/funny + +/datum/outfit/centcom/ert/generic/clown/funny + name = "Code Honk! Entertainment Response Officer" + + backpack_contents = list( + /obj/item/stamp/clown = 1, + /obj/item/reagent_containers/spray/waterflower/lube = 1, + /obj/item/food/grown/banana = 1, + /obj/item/instrument/bikehorn = 1, + /obj/item/food/pie/cream = 3, + /obj/item/stack/sheet/mineral/bananium/five = 1, + ) + l_pocket = /obj/item/bikehorn/golden + +/datum/outfit/centcom/ert/generic/clown/funny/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/chest/knockout/punch_implant = new() + punch_implant.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/clown/funnier + name = "Code HONK!! Entertainment Response Officer" + outfit = /datum/outfit/centcom/ert/generic/clown/funnier + +/datum/outfit/centcom/ert/generic/clown/funnier + name = "Code HONK!! Entertainment Response Officer" + + id = /obj/item/card/id/advanced/centcom/ert/clown + shoes = /obj/item/clothing/shoes/clown_shoes/combat + suit = null + suit_store = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot + head = null + belt = /obj/item/storage/belt/military/snack/pie + back = /obj/item/mod/control/pre_equipped/responsory/generic/clown + backpack_contents = list( + /obj/item/stamp/clown = 1, + /obj/item/reagent_containers/spray/waterflower/superlube = 1, + /obj/item/food/grown/banana = 1, + /obj/item/instrument/bikehorn = 1, + /obj/item/megaphone/clown = 1, + /obj/item/stack/sheet/mineral/bananium/five = 1, + /obj/item/suppressor = 1, + /obj/item/ammo_box/magazine/toy/smgm45/riot = 3, + + ) + glasses = /obj/item/clothing/glasses/night + additional_radio = /obj/item/encryptionkey/heads/hop + l_pocket = /obj/item/bikehorn/golden + +/datum/outfit/centcom/ert/generic/clown/funnier/pre_equip(mob/living/carbon/human/H, visualsOnly) + return + +/datum/outfit/centcom/ert/generic/clown/funnier/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/chest/knockout/punch_implant = new() + punch_implant.Insert(H, drop_if_replaced = FALSE) + +//------ +// Other +//------ + +/datum/antagonist/ert/generic/deathsquad + name = "Elite Deathsquad Commando" + role = "Commando" + outfit = /datum/outfit/centcom/ert/generic/deathsquad + ert_job_path = /datum/job/ert/deathsquad + +/datum/antagonist/ert/generic/deathsquad/New() + . = ..() + name_source = GLOB.commando_names + +/datum/outfit/centcom/ert/generic/deathsquad + name = "Elite Deathsquad Commando" + + id = /obj/item/card/id/advanced/black/deathsquad + box = /obj/item/storage/box/survival/ert + uniform = /obj/item/clothing/under/rank/centcom/military + gloves = /obj/item/clothing/gloves/tackler/combat/insulated + mask = /obj/item/clothing/mask/gas/sechailer/swat + shoes = /obj/item/clothing/shoes/combat/swat + suit = null + suit_store = /obj/item/gun/energy/pulse/loyalpin + head = null + belt = /obj/item/storage/belt/military/assault + back = /obj/item/mod/control/pre_equipped/apocryphal/elite + backpack_contents = list( + /obj/item/storage/box/medipens/advanced = 1, + /obj/item/storage/box/c4 = 1, + /obj/item/storage/box/x4 = 1, + /obj/item/storage/box/flashbangs = 1, + /obj/item/storage/box/teargas = 1, + /obj/item/pinpointer/nuke = 1, + /obj/item/gun/ballistic/revolver/mateba = 1, + /obj/item/ammo_box/a357 = 3, + ) + glasses = /obj/item/clothing/glasses/thermal + l_pocket = /obj/item/melee/energy/sword/saber/purple //I am going to end to this, once and for all! + r_pocket = /obj/item/shield/energy + additional_radio = /obj/item/encryptionkey/heads/captain + implants = list(/obj/item/implant/krav_maga) + +/datum/outfit/centcom/ert/generic/deathsquad/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/organ/internal/cyberimp/brain/anti_drop/nodrop = new() + nodrop.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/brain/anti_stun/rebooter = new() + rebooter.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/chest/reviver/reviver_implant = new() + reviver_implant.Insert(H, drop_if_replaced = FALSE) + var/obj/item/organ/internal/cyberimp/eyes/hud/security/sec_hud = new() + sec_hud.Insert(H, drop_if_replaced = FALSE) + +/datum/antagonist/ert/generic/deathsquad/dust + name = "Elite Deathsquad Commando" + outfit = /datum/outfit/centcom/ert/generic/deathsquad/dust + +/datum/outfit/centcom/ert/generic/deathsquad/dust + name = "Elite Deathsquad Commando (Do or Die!)" + implants = list(/obj/item/implant/dust, /obj/item/implant/krav_maga) + + diff --git a/monkestation/code/modules/ERT/ERT_shuttle.dm b/monkestation/code/modules/ERT/ERT_shuttle.dm new file mode 100644 index 000000000000..4e74f31a05ea --- /dev/null +++ b/monkestation/code/modules/ERT/ERT_shuttle.dm @@ -0,0 +1,87 @@ +////////////// Areas ////////////// +/area/shuttle/ert + name = "ERT Shuttle" + requires_power = TRUE + static_lighting = TRUE + ambience_index = AMBIENCE_ENGI + area_limited_icon_smoothing = /area/shuttle/ert + +/area/shuttle/ert/bridge + name = "ERT Shuttle Bridge" + +/area/shuttle/ert/engineering + name = "ERT Shuttle Engineering" + +/area/shuttle/ert/armory + name = "ERT Shuttle Armory" + +/area/shuttle/ert/cargo + name = "ERT Shuttle Cargo Hold" + +/area/shuttle/ert/medical + name = "ERT Shuttle Medbay" + +/area/shuttle/ert/clonerybay + name = "ERT Shuttle Cloner Bay" + +/area/shuttle/ert/airlock + name = "ERT Shuttle Airlock" + +/area/shuttle/ert/airlock/secondary + +/area/shuttle/ert/powered + requires_power = FALSE + + +/area/shuttle/ert/powered/deathsquad + name = "Deathsquad Shuttle" + requires_power = FALSE + +////////////// Consoles ////////////// +/obj/machinery/computer/shuttle/ert + name = "ERT shuttle console" + shuttleId = "ertshuttle" + possible_destinations = "ertshuttle_custom;syndicate_nw" + req_access = list(ACCESS_CENT_GENERAL) + +/obj/machinery/computer/shuttle/ert/deathsquad + name = "shuttle console" + req_access = list(ACCESS_CENT_SPECOPS) + +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert + name = "ERT shuttle navigation computer" + desc = "Used to designate a precise transit location to travel to." + shuttleId = "ertshuttle" + lock_override = CAMERA_LOCK_STATION + shuttlePortId = "ertshuttle_custom" + see_hidden = FALSE + view_range = 4.5 + +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/ert/deathsquad + name = "shuttle navigation computer" + +/obj/docking_port/mobile/ert + name = "ERT shuttle" + shuttle_id = "ertshuttle" + rechargeTime = 3 MINUTES + +////////////// Shuttle Templates ////////////// +/datum/map_template/shuttle/ert/generic + suffix = "generic" + name = "ERT Shuttle" + +/datum/map_template/shuttle/ert/dropship + suffix = "dropship" + name = "ERT Dropship" + +/datum/map_template/shuttle/ert/dropship/clown + suffix = "dropship-clown" + name = "ERT Dropship" + +/datum/map_template/shuttle/ert/dropship/janitor + suffix = "dropship-janitor" + name = "ERT Dropship" + +/datum/map_template/shuttle/ert/deathsquad + suffix = "deathsquad" + name = "Deathsquad Shuttle" diff --git a/monkestation/code/modules/ERT/equipment/ERT_id.dm b/monkestation/code/modules/ERT/equipment/ERT_id.dm new file mode 100644 index 000000000000..d59ff7b03b3a --- /dev/null +++ b/monkestation/code/modules/ERT/equipment/ERT_id.dm @@ -0,0 +1,190 @@ +// gonna just make the green and blue alert IDs. it's fine if they have all access on red and above i am guessing +// Ordering: +// ROLES +// *Generic +// *Commander +// *Medic +// *Security Officer +// *Engineer +// *Janitor +// *Chaplain +// *Clown +// OTHER + +/datum/id_trim/centcom/ert/generic + assignment = "Emergency Response Officer" + +/datum/id_trim/centcom/ert/generic/New() + . = ..() + access = list( + ACCESS_MAINT_TUNNELS, + ACCESS_MEDICAL, + ACCESS_BRIG_ENTRANCE, + ACCESS_SECURITY, + ACCESS_CENT_GENERAL, + ACCESS_WEAPONS, + ACCESS_CARGO, + ACCESS_CONSTRUCTION, + ACCESS_HYDROPONICS, + ACCESS_MORGUE, + ACCESS_SCIENCE, + ACCESS_SERVICE, + ACCESS_EXTERNAL_AIRLOCKS, + ACCESS_RC_ANNOUNCE, + ACCESS_AUX_BASE, + ACCESS_BIT_DEN, + ACCESS_MECH_MINING, + ACCESS_MINING_STATION, + ACCESS_MINERAL_STOREROOM, + ACCESS_MINING, + ACCESS_SHIPPING, + ) + +/obj/item/card/id/advanced/centcom/ert/generic + name = "\improper CentCom ID" + desc = "An ERT ID card." + registered_age = null + registered_name = "Emergency Response Officer" + trim = /datum/id_trim/centcom/ert/generic + +/datum/id_trim/centcom/ert/generic/commander + assignment = JOB_ERT_COMMANDER + trim_state = "trim_ert_commander" + sechud_icon_state = SECHUD_EMERGENCY_RESPONSE_TEAM_COMMANDER + +/datum/id_trim/centcom/ert/generic/commander/New() + ..() + access |= list( + ACCESS_AI_UPLOAD, + ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_AUX_BASE, + ACCESS_COMMAND, + ACCESS_COURT, + ACCESS_EVA, + ACCESS_GATEWAY, + ACCESS_KEYCARD_AUTH, + ACCESS_TELEPORTER, + ACCESS_BRIG, + ACCESS_MECH_SECURITY, + ACCESS_PERMABRIG, + ACCESS_DETECTIVE, + ACCESS_ARMORY, + ACCESS_ENGINE_EQUIP, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/commander + registered_name = JOB_ERT_COMMANDER + trim = /datum/id_trim/centcom/ert/generic/commander + +/datum/id_trim/centcom/ert/generic/medical + assignment = JOB_ERT_MEDICAL_DOCTOR + trim_state = "trim_medicaldoctor" + subdepartment_color = COLOR_MEDICAL_BLUE + sechud_icon_state = SECHUD_MEDICAL_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/medical/New() + ..() + access |= list( + ACCESS_PLUMBING, + ACCESS_MECH_MEDICAL, + ACCESS_PHARMACY, + ACCESS_PSYCHOLOGY, + ACCESS_SURGERY, + ACCESS_VIROLOGY, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/medical + registered_name = JOB_ERT_MEDICAL_DOCTOR + trim = /datum/id_trim/centcom/ert/generic/medical + +/datum/id_trim/centcom/ert/generic/security + assignment = JOB_ERT_OFFICER + trim_state = "trim_securityofficer" + subdepartment_color = COLOR_SECURITY_RED + sechud_icon_state = SECHUD_SECURITY_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/security/New() + ..() + access |= list( + ACCESS_BRIG, + ACCESS_MECH_SECURITY, + ACCESS_PERMABRIG, + ACCESS_DETECTIVE, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/security + registered_name = JOB_ERT_OFFICER + trim = /datum/id_trim/centcom/ert/generic/security + +/datum/id_trim/centcom/ert/generic/engineer + assignment = JOB_ERT_ENGINEER + trim_state = "trim_stationengineer" + subdepartment_color = COLOR_ENGINEERING_ORANGE + sechud_icon_state = SECHUD_ENGINEERING_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/engineer/New() + ..() + access |= list( + ACCESS_ATMOSPHERICS, + ACCESS_ENGINEERING, + ACCESS_ENGINE_EQUIP, + ACCESS_MECH_ENGINE, + ACCESS_MINISAT, + ACCESS_TCOMMS, + ACCESS_TCOMMS_ADMIN, + ACCESS_TECH_STORAGE, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/engineer + registered_name = JOB_ERT_ENGINEER + trim = /datum/id_trim/centcom/ert/generic/engineer + +/datum/id_trim/centcom/ert/generic/janitor + assignment = JOB_ERT_JANITOR + trim_state = "trim_janitor" + subdepartment_color = COLOR_SERVICE_LIME + sechud_icon_state = SECHUD_JANITORIAL_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/janitor/New() + ..() + access |= list( + ACCESS_JANITOR, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/janitor + registered_name = JOB_ERT_JANITOR + trim = /datum/id_trim/centcom/ert/generic/janitor + +/datum/id_trim/centcom/ert/generic/chaplain + assignment = JOB_ERT_CHAPLAIN + trim_state = "trim_chaplain" + subdepartment_color = "#58C800" + sechud_icon_state = SECHUD_RELIGIOUS_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/chaplain/New() + ..() + access |= list( + ACCESS_CHAPEL_OFFICE, + ACCESS_CREMATORIUM, + ACCESS_THEATRE, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/chaplain + registered_name = JOB_ERT_CHAPLAIN + trim = /datum/id_trim/centcom/ert/generic/chaplain + +/datum/id_trim/centcom/ert/generic/clown + assignment = JOB_ERT_CLOWN + trim_state = "trim_clown" + subdepartment_color = COLOR_MAGENTA + sechud_icon_state = SECHUD_ENTERTAINMENT_RESPONSE_OFFICER + +/datum/id_trim/centcom/ert/generic/clown/New() + ..() + access |= list( + ACCESS_THEATRE, + ) + +/obj/item/card/id/advanced/centcom/ert/generic/clown + registered_name = JOB_ERT_CLOWN + trim = /datum/id_trim/centcom/ert/generic/clown diff --git a/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm b/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm new file mode 100644 index 000000000000..e589af80af24 --- /dev/null +++ b/monkestation/code/modules/ERT/equipment/ERT_misc_equipment.dm @@ -0,0 +1,341 @@ +/obj/item/implant/dust + name = "self immolation implant" + desc = "Dust to dust." + icon = 'icons/obj/nuke_tools.dmi' + icon_state = "supermatter_sliver_pulse" + actions_types = list(/datum/action/item_action/dust_implant) + var/popup = FALSE // is the window open? + var/active = FALSE + +/obj/item/implant/dust/proc/on_death(datum/source) + SIGNAL_HANDLER + + // There may be other signals that want to handle mob's death + // and the process of activating destroys the body, so let the other + // signal handlers at least finish. + INVOKE_ASYNC(src, PROC_REF(activate), "death") + +/obj/item/implant/dust/get_data() + var/dat = {"Implant Specifications:
+ Name: Robust Corp RX-81 Employee Management Implant
+ Life: Activates upon death.
+ Important Notes: Highly unstable.
+
+ Implant Details:
+ Function: Contains a compact supermatter fragment surrounded in a protective bluespace capsule that releases upon receiving a specially encoded signal or upon host death.
+ Special Features: Self Immolation
+ "} + return dat + +/obj/item/implant/dust/activate(cause) + . = ..() + if(!cause || !imp_in || active) + return FALSE + if(cause == "action_button") + if(popup) + return FALSE + popup = TRUE + var/response = tgui_alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to disintergrate!", "[name] Confirmation", list("Yes", "No")) + popup = FALSE + if(response != "Yes") + return FALSE + if(cause == "death" && HAS_TRAIT(imp_in, TRAIT_PREVENT_IMPLANT_AUTO_EXPLOSION)) + return FALSE + to_chat(imp_in, span_notice("You activate your [name].")) + active = TRUE + to_chat(imp_in, "Your dusting implant activates!") + var/turf/immolationturf = get_turf(imp_in) + message_admins("[ADMIN_LOOKUPFLW(imp_in)] has activated their [name] at [ADMIN_VERBOSEJMP(immolationturf)], with cause of [cause].") + + if(imp_in) + imp_in.visible_message(span_warning("[imp_in]'s body flashes and burns up from inside in blazing light!")) + imp_in.investigate_log("has been dusted by a self immolation implant.", INVESTIGATE_DEATHS) + imp_in.dust() + playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) + qdel(src) + return + +/obj/item/implant/dust/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + . = ..() + if(.) + RegisterSignal(target, COMSIG_LIVING_DEATH, PROC_REF(on_death)) + +/obj/item/implant/dust/removed(mob/target, silent = FALSE, special = FALSE) + . = ..() + if(.) + UnregisterSignal(target, COMSIG_LIVING_DEATH) + +/obj/item/implanter/dust + name = "implanter (self immolation)" + imp_type = /obj/item/implant/dust + +/obj/item/implantcase/dust + name = "implant case - 'Self Immolation'" + desc = "A glass case containing a self immolation implant." + imp_type = /obj/item/implant/dust + +/datum/action/item_action/dust_implant + check_flags = NONE + name = "Activate Self Immolation Implant" + +/obj/item/mod/module/energy_shield/nanotrasen + name = "MOD energy shield module" + desc = "A personal, protective forcefield typically seen in military applications. \ + This advanced deflector shield is essentially a scaled down version of those seen on starships, \ + and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ + though with its' low amount of separate charges, the user remains mortal." + shield_icon = "shield-old" //red syndicate blue nanotrasen :P + +/obj/item/storage/belt/security/full/bola/PopulateContents() + new /obj/item/reagent_containers/spray/pepper(src) + new /obj/item/restraints/legcuffs/bola/energy(src) + new /obj/item/grenade/flashbang(src) + new /obj/item/assembly/flash/handheld(src) + new /obj/item/melee/baton/security/loaded(src) + update_appearance() + +/obj/item/clothing/mask/gas/sechailer/swat/ert + name = "\improper emergency response team mask" + desc = "A close-fitting tactical mask with a toned down Compli-o-nator 3000. This one is designed for Nanotrasen emergency response teams and has an inbuilt air-freshener. Fancy!" + icon = 'monkestation/icons/obj/clothing/masks.dmi' + worn_icon = 'monkestation/icons/mob/clothing/mask.dmi' + worn_icon_snouted = 'monkestation/icons/mob/clothing/species/mask_muzzled.dmi' + icon_state = "ert" + aggressiveness = 1 + +/obj/item/storage/box/survival/ert + name = "emergency response survival box" + desc = "A box with the bare essentials of ensuring the survival of your team. This one is labelled to contain a double tank." + icon_state = "ntbox" + illustration = "ntlogo" + internal_type = /obj/item/tank/internals/emergency_oxygen/double + +/obj/item/storage/box/survival/ert/PopulateContents() + . = ..() + new /obj/item/reagent_containers/pill/patch/advanced(src) + new /obj/item/crowbar/red(src) + new /obj/item/spess_knife(src) // i love this thing and i want it to be out there more + new /obj/item/flashlight/flare(src) + +/obj/item/reagent_containers/pill/patch/advanced + name = "advanced health patch" + desc = "Helps with brute and burn injuries while stabilizing the patient. Contains anti-toxin along with formaldehyde." + list_reagents = list(/datum/reagent/medicine/oxandrolone = 5, /datum/reagent/medicine/sal_acid = 5, /datum/reagent/medicine/granibitaluri = 10, /datum/reagent/medicine/c2/seiver = 5, /datum/reagent/toxin/formaldehyde = 3, /datum/reagent/medicine/coagulant = 2, /datum/reagent/medicine/epinephrine = 10) + icon_state = "bandaid_msic" //they misspelt it + +/obj/item/storage/box/rcd_upgrades + name = "RCD upgrade diskette box" + desc = "A box of essential RCD upgrade disks." + illustration = "disk_kit" + +/obj/item/storage/box/rcd_upgrades/PopulateContents() + . = ..() + new /obj/item/rcd_upgrade/simple_circuits(src) + new /obj/item/rcd_upgrade/anti_interrupt(src) + new /obj/item/rcd_upgrade/cooling(src) + new /obj/item/rcd_upgrade/silo_link(src) + new /obj/item/rcd_upgrade/frames(src) + new /obj/item/rcd_upgrade/furnishing(src) + +/obj/item/reagent_containers/spray/drying + name = "drying agent spray" + list_reagents = list(/datum/reagent/drying_agent = 250) + +/obj/vehicle/sealed/mecha/honker/dark/loaded/not_evil + operation_req_access = list() + internals_req_access = list() + +/obj/vehicle/sealed/mecha/honker/dark/loaded/not_evil + equip_by_category = list( + MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/honker, + MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/thrusters/ion), + MECHA_POWER = list(), + MECHA_ARMOR = list(), + ) + +/obj/item/storage/belt/janitor/full/ert/PopulateContents() + new /obj/item/lightreplacer/blue(src) + new /obj/item/reagent_containers/spray/cleaner(src) + new /obj/item/soap/omega(src) + new /obj/item/holosign_creator(src) + new /obj/item/melee/flyswatter(src) + new /obj/item/wirebrush(src) + +/obj/item/scythe/compact + name = "compact scythe" + desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow. This one has been compacted with bluespace fields, don't question it." + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/mod/control/pre_equipped/responsory/generic + applied_cell = /obj/item/stock_parts/cell/bluespace + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/magboot/advanced, + /obj/item/mod/module/rad_protection, + ) + default_pins = list( + /obj/item/mod/module/jetpack, + /obj/item/mod/module/magboot/advanced, + ) + +/obj/item/mod/control/pre_equipped/responsory/generic/commander + insignia_type = /obj/item/mod/module/insignia/commander + additional_module = /obj/item/mod/module/power_kick + +/obj/item/mod/control/pre_equipped/responsory/generic/security + insignia_type = /obj/item/mod/module/insignia/security + additional_module = /obj/item/mod/module/criminalcapture + +/obj/item/mod/control/pre_equipped/responsory/generic/engineer + insignia_type = /obj/item/mod/module/insignia/engineer + additional_module = /obj/item/mod/module/mister/atmos + +/obj/item/mod/control/pre_equipped/responsory/generic/medic + insignia_type = /obj/item/mod/module/insignia/medic + additional_module = /obj/item/mod/module/quick_carry/advanced + +/obj/item/mod/control/pre_equipped/responsory/generic/janitor + insignia_type = /obj/item/mod/module/insignia/janitor + additional_module = /obj/item/mod/module/mister/cleaner + +/obj/item/mod/control/pre_equipped/responsory/generic/clown + insignia_type = /obj/item/mod/module/insignia/clown + additional_module = list(/obj/item/mod/module/bikehorn, /obj/item/mod/module/waddle) + +/obj/item/mod/control/pre_equipped/responsory/generic/chaplain + applied_skin = "inquisitory" + insignia_type = /obj/item/mod/module/insignia/chaplain + additional_module = list(/obj/item/mod/module/injector, /obj/item/mod/module/anti_magic) + +/obj/item/mod/control/pre_equipped/apocryphal/elite + applied_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/welding, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/noslip, + /obj/item/mod/module/power_kick, + /obj/item/mod/module/rad_protection, + /obj/item/mod/module/magboot/advanced, + /obj/item/mod/module/thermal_regulator, + /obj/item/mod/module/dna_lock, + /obj/item/mod/module/holster, + /obj/item/mod/module/visor/night, + /obj/item/mod/module/status_readout, + /obj/item/mod/module/joint_torsion = 1, + ) + default_pins = list( + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/power_kick, + /obj/item/mod/module/magboot/advanced, + /obj/item/mod/module/thermal_regulator, + /obj/item/mod/module/dna_lock, + /obj/item/mod/module/holster, + /obj/item/mod/module/visor/night, + ) + +/obj/item/storage/box/syndie_kit/imp_deathrattle/nanotrasen + icon_state = "ntbox" + illustration = "implant" + +/obj/item/storage/belt/military/snack/pie + name = "tactical pie rig" + desc = "A set of snack-tical webbing worn by athletes of the Honk Co. VR sports division." + +/obj/item/storage/belt/military/snack/pie/Initialize(mapload) + . = ..() + atom_storage.max_slots = 7 + atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL + atom_storage.max_total_storage = 21 // 7 * 3 = 21? + atom_storage.set_holdable(list( + /obj/item/food/pie/cream, + )) + +/obj/item/storage/belt/military/snack/pie/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/food/pie/cream(src) + +/obj/item/storage/box/medipens/advanced + name = "box of advanced medipens" + desc = "A box full of advanced MediPens." + icon_state = "ntbox" + illustration = "epipen" + +/obj/item/storage/box/medipens/advanced/PopulateContents() + new /obj/item/reagent_containers/hypospray/medipen/stimpack(src) + new /obj/item/reagent_containers/hypospray/medipen/atropine(src) + new /obj/item/reagent_containers/hypospray/medipen/blood_loss(src) + new /obj/item/reagent_containers/hypospray/medipen/oxandrolone(src) + new /obj/item/reagent_containers/hypospray/medipen/salacid(src) + new /obj/item/reagent_containers/hypospray/medipen/penacid(src) + new /obj/item/reagent_containers/hypospray/medipen/salbutamol(src) + +/obj/item/storage/box/x4 + name = "box of x-4 charges (WARNING)" + desc = "A box full of x-4 charges." + icon_state = "secbox" + illustration = "firecracker" + +/obj/item/storage/box/x4/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/grenade/c4/x4(src) + +/obj/item/storage/box/c4 + name = "box of c-4 charges (WARNING)" + desc = "A box full of c-4 charges." + icon_state = "secbox" + illustration = "firecracker" + +/obj/item/storage/box/c4/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/grenade/c4(src) + +/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/elite + desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE. FOR REAL" + operation_req_access = list(ACCESS_CENT_SPECOPS) + internals_req_access = list(ACCESS_CENT_SPECOPS) + fast_pressure_step_in = 1 //step_in while in low pressure conditions + slow_pressure_step_in = 1.5 //step_in while in normal pressure conditions + movedelay = 1.5 + max_integrity = 500 + encumbrance_gap = 5 + max_equip_by_category = list( + MECHA_UTILITY = 3, + MECHA_POWER = 2, + MECHA_ARMOR = 3, + ) + equip_by_category = list( + MECHA_L_ARM = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/elite, + MECHA_R_ARM = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/admantium, + MECHA_UTILITY = list(/obj/item/mecha_parts/mecha_equipment/ejector, /obj/item/mecha_parts/mecha_equipment/thrusters/ion), + MECHA_POWER = list(), + MECHA_ARMOR = list(/obj/item/mecha_parts/mecha_equipment/armor/antiproj_armor_booster, /obj/item/mecha_parts/mecha_equipment/armor/anticcw_armor_booster), + ) + +/obj/vehicle/sealed/mecha/working/ripley/deathripley/real/elite/generate_actions() + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_eject) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_internals) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_lights) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_toggle_safeties) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/mech_view_stats) + initialize_passenger_action_type(/datum/action/vehicle/sealed/mecha/strafe) + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/elite + name = "\improper KILL CLAMP" + desc = "They won't know what clamped them! This time for real!" + clamp_damage = 150 + killer_clamp = TRUE + movedelay = 0 + +/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/admantium + name = "adamantine-tipped exosuit drill" + desc = "Equipment for combat exosuits. This is an upgraded version of the drill that'll pierce the universe itself!" + icon_state = "mecha_diamond_drill" + drill_delay = 2 + force = 60 diff --git a/monkestation/code/modules/ERT/equipment/ERT_spacesuits.dm b/monkestation/code/modules/ERT/equipment/ERT_spacesuits.dm new file mode 100644 index 000000000000..4f0b8ca57b8f --- /dev/null +++ b/monkestation/code/modules/ERT/equipment/ERT_spacesuits.dm @@ -0,0 +1,193 @@ +/datum/armor/ert //might make it weaker later + melee = 35 + bullet = 30 + laser = 30 + energy = 40 + bomb = 25 + bio = 30 + fire = 80 + acid = 85 + wound = 10 + +/obj/item/clothing/suit/space/ert + name = "emergency response team space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." // simple description could use more tho + icon = 'monkestation/icons/obj/clothing/ERT/ERT_spacesuit_obj.dmi' + worn_icon = 'monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn.dmi' + worn_icon_digitigrade = 'monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn-digi.dmi' + icon_state = "ert-generic" + //lefthand_file = 'icons/mob/inhands/clothing/suits_lefthand.dmi' do i dare make inhand sprites + //righthand_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' + slowdown = 0 //agile + max_integrity = 300 + armor_type = /datum/armor/ert + resistance_flags = ACID_PROOF | FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT //this feels right? + cell = /obj/item/stock_parts/cell/bluespace + allowed = list( + /obj/item/tank/jetpack/oxygen/security, + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/tank/jetpack/oxygen/captain, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/gun/ballistic, + /obj/item/gun/energy, + /obj/item/gun/microfusion, + /obj/item/knife/combat, + /obj/item/melee/baton, + /obj/item/reagent_containers/spray/pepper, + /obj/item/restraints/handcuffs, + /obj/item/storage/belt/holster/detective, + /obj/item/storage/belt/holster/nukie, + /obj/item/storage/belt/holster/energy, + ) + +/obj/item/clothing/suit/space/ert/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + user.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + +/obj/item/clothing/suit/space/ert/dropped(mob/user) + . = ..() + if(!ishuman(user)) + return + user.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + + +/obj/item/clothing/suit/space/ert/Initialize(mapload) + . = ..() + AddElement(/datum/element/radiation_protected_clothing) + +/obj/item/clothing/head/helmet/space/ert + name = "emergency response team space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon = 'monkestation/icons/obj/clothing/ERT/ERT_helmet_obj.dmi' + worn_icon = 'monkestation/icons/mob/clothing/ERT/ERT_helmet_worn.dmi' + icon_state = "ert-generic0" + //styling + var/style = "generic" + worn_icon_snouted = 'monkestation/icons/mob/clothing/ERT/ERT_helmet_worn-digi.dmi' + max_integrity = 300 + armor_type = /datum/armor/ert + resistance_flags = ACID_PROOF | FIRE_PROOF + //helmet light + actions_types = list(/datum/action/item_action/toggle_helmet_light) + light_system = OVERLAY_LIGHT_DIRECTIONAL + light_outer_range = 5 + light_power = 1 + light_on = FALSE + var/on = FALSE + +/obj/item/clothing/head/helmet/space/ert/attack_self(mob/user) + on = !on + icon_state = "ert-[style][on]" + user.update_worn_head() + + set_light_on(on) + +/obj/item/clothing/head/helmet/space/ert/Initialize(mapload) + . = ..() + AddElement(/datum/element/radiation_protected_clothing) + +// NOW FOR ALL THE VARIATIONS! +//----------- +// Commander +//----------- +/obj/item/clothing/suit/space/ert/commander + name = "emergency response team commander space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-commander" + +/obj/item/clothing/head/helmet/space/ert/commander + name = "emergency response team commander space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-commander0" + style = "commander" + +//--------- +// Medical +// -------- +/obj/item/clothing/suit/space/ert/medical + name = "emergency response team medical space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-medical" + +/obj/item/clothing/head/helmet/space/ert/medical + name = "emergency response team medical space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-medical0" + style = "medical" + +//---------- +// Security +//---------- +/obj/item/clothing/suit/space/ert/security + name = "emergency response team security space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-security" + +/obj/item/clothing/head/helmet/space/ert/security + name = "emergency response team security space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-security0" + style = "security" + +//---------- +// Engineer +//---------- +/obj/item/clothing/suit/space/ert/engineer + name = "emergency response team engineer space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-engineer" + +/obj/item/clothing/head/helmet/space/ert/engineer + name = "emergency response team engineer space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-engineer0" + style = "engineer" + +//---------- +// Janitor +//---------- +/obj/item/clothing/suit/space/ert/janitor + name = "emergency response team janitor space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-janitor" + +/obj/item/clothing/head/helmet/space/ert/janitor + name = "emergency response team janitor space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-janitor0" + style = "janitor" + +//---------- +// Chaplain +//---------- +/obj/item/clothing/suit/space/ert/chaplain + name = "emergency response team chaplain space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-chaplain" + +/obj/item/clothing/head/helmet/space/ert/chaplain + name = "emergency response team chaplain space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-chaplain0" + style = "chaplain" + +//------- +// Clown +//------- +/obj/item/clothing/suit/space/ert/clown + name = "emergency response team clown space suit" + desc = "A special space suit designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-clown" + +/obj/item/clothing/head/helmet/space/ert/clown + name = "emergency response team clown space helmet" + desc = "A special space helmet designed by Nanotrasen for use by it's emergency response teams. It has markings to distinguish the role of the wearer at a glance." + icon_state = "ert-clown0" + style = "clown" + + diff --git a/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm b/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm index a81f37a97751..8e49c563e48a 100644 --- a/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm +++ b/monkestation/code/modules/NTSL/code/coding_language/implementations/telecomms_translator.dm @@ -106,6 +106,7 @@ GLOBAL_LIST_INIT(allowed_translations, list( "centcom" = FREQ_CENTCOM, "aiprivate" = FREQ_AI_PRIVATE, "radio" = FREQ_RADIO, + "uncommon" = FREQ_UNCOMMON, )) ) diff --git a/monkestation/code/modules/NTrep/NTrep.dm b/monkestation/code/modules/NTrep/NTrep.dm index bbf3f5c8e4c4..346b2b6963d2 100644 --- a/monkestation/code/modules/NTrep/NTrep.dm +++ b/monkestation/code/modules/NTrep/NTrep.dm @@ -1,6 +1,6 @@ /datum/job/nanotrasen_representative title = JOB_NANOTRASEN_REPRESENTATIVE - description = "Ensure company interests and Standard Operating Procedure is upheld onboard the station, and get out as soon as you can when it inevitably falls apart." + description = "Ensure company interests and report whether Standard Operating Procedure is upheld onboard the station, and get out as soon as you can when it inevitably falls apart. You do not have the authority to give orders, except to the blueshield." auto_deadmin_role_flags = DEADMIN_POSITION_HEAD department_head = list("CentCom") faction = FACTION_STATION @@ -50,6 +50,7 @@ voice_of_god_power = 1.4 //Command staff has authority alt_titles = list( + "Nanotrasen Representative", "Corporate Liaison", "Nanotrasen Fax Operater", "Nanotrasen Official", diff --git a/monkestation/code/modules/antagonists/clock_cult/ratvar.dm b/monkestation/code/modules/antagonists/clock_cult/ratvar.dm index 2b424a080048..ec05bffe311f 100644 --- a/monkestation/code/modules/antagonists/clock_cult/ratvar.dm +++ b/monkestation/code/modules/antagonists/clock_cult/ratvar.dm @@ -133,7 +133,7 @@ GLOBAL_DATUM(cult_ratvar, /obj/ratvar) var/next_attack_tick = 0 /proc/clockcult_ending_start() - SSsecurity_level.set_level(3) + SSsecurity_level.set_level(SEC_LEVEL_LAMBDA) priority_announce("Huge gravitational-energy spike detected emminating from a neutron star near your sector. Event has been determined to be survivable by 0% of life. \ ESTIMATED TIME UNTIL ENERGY PULSE REACHES [GLOB.station_name]: 56 SECONDS. Godspeed crew, glory to Nanotrasen. -Admiral Telvig.", \ "Central Command Anomolous Materials Division", 'sound/misc/airraid.ogg') diff --git a/monkestation/code/modules/antagonists/clock_cult/structures/the_ark.dm b/monkestation/code/modules/antagonists/clock_cult/structures/the_ark.dm index 39b9377c3f22..73b394c524eb 100644 --- a/monkestation/code/modules/antagonists/clock_cult/structures/the_ark.dm +++ b/monkestation/code/modules/antagonists/clock_cult/structures/the_ark.dm @@ -90,7 +90,7 @@ GLOBAL_VAR_INIT(ratvar_risen, FALSE) for(var/obj/effect/portal/clockcult/portal in GLOB.portals) qdel(portal) SSshuttle.clearHostileEnvironment(src) - SSsecurity_level.set_level(2) + SSsecurity_level.set_level(SEC_LEVEL_RED) qdel(src) /obj/structure/destructible/clockwork/the_ark/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir, armour_penetration) @@ -161,7 +161,7 @@ GLOBAL_VAR_INIT(ratvar_risen, FALSE) servant_antag?.add_forbearance(servant_mob) sound_to_playing_players('sound/magic/clockwork/invoke_general.ogg', 50) - SSsecurity_level.set_level(3) + SSsecurity_level.set_level(SEC_LEVEL_DELTA) addtimer(CALLBACK(src, PROC_REF(begin_assault)), ARK_GRACE_PERIOD) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(send_station_support_package), /obj/item/turf_demolisher/reebe), 10 SECONDS) diff --git a/monkestation/code/modules/antagonists/florida_man/_florida_man.dm b/monkestation/code/modules/antagonists/florida_man/_florida_man.dm index 996a1bdf6c4e..d59cf955be64 100644 --- a/monkestation/code/modules/antagonists/florida_man/_florida_man.dm +++ b/monkestation/code/modules/antagonists/florida_man/_florida_man.dm @@ -6,34 +6,68 @@ objectives = list() show_to_ghosts = TRUE preview_outfit = /datum/outfit/florida_man_one + var/datum/action/cooldown/spell/florida_doorbuster/doorbuster + var/datum/action/cooldown/spell/florida_cuff_break/cuff_break + var/datum/action/cooldown/spell/florida_regeneration/regen + var/datum/martial_art/wrestling/wrassling + var/static/list/florida_traits = list( + TRAIT_CLUMSY, + TRAIT_DUMB, + TRAIT_STABLELIVER, + TRAIT_STABLEHEART, + TRAIT_TOXIMMUNE, + TRAIT_JAILBIRD, + TRAIT_IGNORESLOWDOWN, + TRAIT_VENTCRAWLER_NUDE, + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + ) /datum/antagonist/florida_man/on_gain() forge_objectives() - if(ishuman(owner.current)) - var/mob/living/carbon/human/floridan = owner.current + return ..() - //Abilities & Traits added here - ADD_TRAIT(floridan, TRAIT_CLUMSY, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_DUMB, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_STABLELIVER, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_STABLEHEART, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_TOXIMMUNE, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_JAILBIRD, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_IGNORESLOWDOWN, SPECIES_TRAIT) - ADD_TRAIT(floridan, TRAIT_VENTCRAWLER_NUDE, SPECIES_TRAIT) +/datum/antagonist/florida_man/on_removal() + wrassling?.remove(owner.current) + QDEL_NULL(wrassling) + QDEL_NULL(doorbuster) + QDEL_NULL(cuff_break) + QDEL_NULL(regen) + return ..() - floridan.physiology.stun_mod = 0.25 - var/datum/action/cooldown/spell/florida_doorbuster/DB = new - var/datum/action/cooldown/spell/florida_cuff_break/CB = new - var/datum/action/cooldown/spell/florida_regeneration/RG = new - DB.Grant(floridan) - CB.Grant(floridan) - RG.Grant(floridan) - - var/datum/martial_art/wrestling/wrestling = new - wrestling.teach(floridan) +/datum/antagonist/florida_man/apply_innate_effects(mob/living/mob_override) . = ..() + var/mob/living/carbon/human/floridan = mob_override || owner.current + if(!ishuman(floridan)) + return + floridan.add_traits(florida_traits, type) + floridan.physiology?.stun_mod *= 0.25 + if(QDELETED(doorbuster)) + doorbuster = new + if(QDELETED(cuff_break)) + cuff_break = new + if(QDELETED(regen)) + regen = new + doorbuster.Grant(floridan) + cuff_break.Grant(floridan) + regen.Grant(floridan) + + if(QDELETED(wrassling)) + wrassling = new + wrassling.teach(floridan) +/datum/antagonist/florida_man/remove_innate_effects(mob/living/mob_override) + . = ..() + QDEL_NULL(doorbuster) + QDEL_NULL(cuff_break) + QDEL_NULL(regen) + var/mob/living/carbon/human/floridan = mob_override || owner.current + wrassling?.remove(floridan) + if(ishuman(floridan)) + floridan.remove_traits(florida_traits, type) + floridan.physiology?.stun_mod /= 0.25 /datum/antagonist/florida_man/forge_objectives() var/datum/objective/meth = new /datum/objective @@ -51,7 +85,7 @@ randomize_human(floridan) owner.current.playsound_local(get_turf(owner.current), 'monkestation/sound/ambience/antag/floridaman.ogg',100,0, use_reverb = FALSE) - to_chat(owner, "You are THE Florida Man!\nYou're not quite sure how you got out here in space, but you don't generally bother thinking about things.\n\nYou love methamphetamine!\nYou love wrestling lizards!\nYou love getting drunk!\nYou love sticking it to THE MAN!\nYou don't act with any coherent plan or objective.\nYou don't outright want to destroy the station or murder people, as you have no home to return to.\n\nGo forth, son of Space Florida, and sow chaos!") + to_chat(owner, span_boldannounce("You are THE Florida Man!\nYou're not quite sure how you got out here in space, but you don't generally bother thinking about things.\n\nYou love methamphetamine!\nYou love wrestling lizards!\nYou love getting drunk!\nYou love sticking it to THE MAN!\nYou don't act with any coherent plan or objective.\nYou don't outright want to destroy the station or murder people, as you have no home to return to.\n\nGo forth, son of Space Florida, and sow chaos!")) owner.announce_objectives() random_unique_name(PLURAL, floridan) if(prob(1)) // 1% chance to be Tony Brony...because meme references to streams are good! diff --git a/monkestation/code/modules/antagonists/heretic/heretic_knowledge.dm b/monkestation/code/modules/antagonists/heretic/heretic_knowledge.dm new file mode 100644 index 000000000000..d69b6224370a --- /dev/null +++ b/monkestation/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -0,0 +1,18 @@ +/datum/heretic_knowledge/ultimate/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) + . = ..() + var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) + // there's literally a big unique announcement saying "HEY THIS PERSON'S AN ASCENDED HERETIC", no reason to not have them in the orbit menu + heretic_datum.show_to_ghosts = TRUE + heretic_datum.antagpanel_category = "Ascended Heretics" + var/static/have_set_lambda = FALSE + if(!have_set_lambda) + var/ascended_heretics = 1 + for(var/datum/antagonist/heretic/heretic in GLOB.antagonists) + var/mob/living/heretic_body = heretic.owner?.current + if(QDELETED(heretic_body) || heretic_body == user || !heretic.ascended || heretic_body.stat == DEAD) + continue + ascended_heretics++ + if(ascended_heretics >= 3) + have_set_lambda = TRUE + message_admins("Alert level automatically being raised to Lambda in 5 seconds due to the presence of three or more living ascended heretics") + addtimer(CALLBACK(SSsecurity_level, TYPE_PROC_REF(/datum/controller/subsystem/security_level, set_level), SEC_LEVEL_LAMBDA), 5 SECONDS, TIMER_UNIQUE) diff --git a/monkestation/code/modules/art_sci_overrides/faults/clowning.dm b/monkestation/code/modules/art_sci_overrides/faults/clowning.dm index 2e0cfb6c9323..88184a06bf27 100644 --- a/monkestation/code/modules/art_sci_overrides/faults/clowning.dm +++ b/monkestation/code/modules/art_sci_overrides/faults/clowning.dm @@ -12,11 +12,23 @@ weight = ARTIFACT_VERYRARE + /// Weakref to the last spawner created by this artifact. + /// Used to ensure another spawner isn't created while the last one exists. + var/datum/weakref/spawner_weakref + +/datum/artifact_fault/clown/Destroy(force) + spawner_weakref = null + return ..() + /datum/artifact_fault/clown/on_trigger() + var/obj/structure/spawner/clown/hehe = spawner_weakref?.resolve() + if(!QDELETED(hehe)) + return var/center_turf = get_turf(our_artifact.parent) if(!center_turf) CRASH("[src] had attempted to trigger, but failed to find the center turf!") - var/obj/structure/spawner/clown/hehe = new(center_turf) + hehe = new(center_turf) + spawner_weakref = WEAKREF(hehe) QDEL_IN(hehe, 3 MINUTES) diff --git a/monkestation/code/modules/assault_ops/code/areas.dm b/monkestation/code/modules/assault_ops/code/areas.dm index df2aacfdd998..f3bf44b5bd56 100644 --- a/monkestation/code/modules/assault_ops/code/areas.dm +++ b/monkestation/code/modules/assault_ops/code/areas.dm @@ -56,8 +56,7 @@ /obj/effect/landmark/start/assaultop name = "assaultop" - icon = 'icons/effects/landmarks_static.dmi' - icon_state = "snukeop_spawn" + icon_state = "Assault Operatives" delete_after_roundstart = FALSE /obj/effect/landmark/start/assaultop/Initialize(mapload) diff --git a/monkestation/code/modules/blood_datum/debilitated.dm b/monkestation/code/modules/blood_datum/debilitated.dm index 15cf739f383f..e21663badbb5 100644 --- a/monkestation/code/modules/blood_datum/debilitated.dm +++ b/monkestation/code/modules/blood_datum/debilitated.dm @@ -5,9 +5,9 @@ /datum/status_effect/stacking/debilitated id = "debilitated" stacks = 0 - max_stacks = 5 - tick_interval = 10 SECONDS - delay_before_decay = 1 MINUTES + max_stacks = 10 + tick_interval = 5 SECONDS + delay_before_decay = 30 SECONDS consumed_on_threshold = FALSE alert_type = /atom/movable/screen/alert/status_effect/debilitated status_type = STATUS_EFFECT_REFRESH @@ -15,7 +15,7 @@ ///our base stamina loss multiplier var/loss_multiplier = 1 ///our per stack increase to stamina loss - var/per_stack_multiplier_increase = 0.2 + var/per_stack_multiplier_increase = 0.1 /datum/status_effect/stacking/debilitated/on_apply() . = ..() diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_sol.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_sol.dm index 7c9534a64110..e953d8822cde 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_sol.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_sol.dm @@ -124,24 +124,31 @@ return HAS_TRAIT_FROM(owner.current, TRAIT_NODEATH, TORPOR_TRAIT) /datum/antagonist/bloodsucker/proc/torpor_begin() - to_chat(owner.current, span_notice("You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.")) + var/mob/living/current = owner.current + if(QDELETED(current)) + return + to_chat(current, span_notice("You enter the horrible slumber of deathless Torpor. You will heal until you are renewed.")) // Force them to go to sleep - REMOVE_TRAIT(owner.current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) + REMOVE_TRAIT(current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) // Without this, you'll just keep dying while you recover. - owner.current.add_traits(torpor_traits, TORPOR_TRAIT) - owner.current.set_timed_status_effect(0 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) + current.add_traits(torpor_traits, TORPOR_TRAIT) + current.set_timed_status_effect(0 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE) // Disable ALL Powers DisableAllPowers() /datum/antagonist/bloodsucker/proc/torpor_end() - owner.current.remove_status_effect(/datum/status_effect/bloodsucker_sol) - owner.current.grab_ghost() - to_chat(owner.current, span_warning("You have recovered from Torpor.")) - owner.current.remove_traits(torpor_traits, TORPOR_TRAIT) - if(!HAS_TRAIT(owner.current, TRAIT_MASQUERADE)) - ADD_TRAIT(owner.current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) + var/mob/living/current = owner.current + if(QDELETED(current)) + return + current.remove_status_effect(/datum/status_effect/bloodsucker_sol) + current.grab_ghost() + to_chat(current, span_warning("You have recovered from Torpor.")) + current.remove_traits(torpor_traits, TORPOR_TRAIT) + if(!HAS_TRAIT(current, TRAIT_MASQUERADE)) + ADD_TRAIT(current, TRAIT_SLEEPIMMUNE, BLOODSUCKER_TRAIT) heal_vampire_organs() - owner.current.update_stat() + current.pain_controller?.remove_all_pain() + current.update_stat() SEND_SIGNAL(src, BLOODSUCKER_EXIT_TORPOR) /datum/status_effect/bloodsucker_sol @@ -159,6 +166,7 @@ return FALSE RegisterSignal(SSsunlight, COMSIG_SOL_END, PROC_REF(on_sol_end)) RegisterSignal(owner, COMSIG_MOVABLE_MOVED, PROC_REF(on_owner_moved)) + owner.set_pain_mod(id, 1.5) owner.add_traits(sol_traits, id) owner.remove_filter(id) owner.add_filter(id, 2, drop_shadow_filter(x = 0, y = 0, size = 3, offset = 1.5, color = "#ee7440")) @@ -182,6 +190,7 @@ /datum/status_effect/bloodsucker_sol/on_remove() UnregisterSignal(SSsunlight, COMSIG_SOL_END) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) + owner.unset_pain_mod(id) owner.remove_traits(sol_traits, id) owner.remove_filter(id) owner.remove_movespeed_modifier(/datum/movespeed_modifier/bloodsucker_sol) diff --git a/monkestation/code/modules/bloodsuckers/powers/fortitude.dm b/monkestation/code/modules/bloodsuckers/powers/fortitude.dm index 97291d2adc5f..a6b1e15bef42 100644 --- a/monkestation/code/modules/bloodsuckers/powers/fortitude.dm +++ b/monkestation/code/modules/bloodsuckers/powers/fortitude.dm @@ -17,15 +17,28 @@ sol_multiplier = 3 var/was_running var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS. + /// Base traits granted by fortitude. + var/static/list/base_traits = list( + TRAIT_PIERCEIMMUNE, + TRAIT_NODISMEMBER, + TRAIT_PUSHIMMUNE, + TRAIT_NO_SPRINT, + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + ) + /// Upgraded traits granted by fortitude. + var/static/list/upgraded_traits = list(TRAIT_STUNIMMUNE, TRAIT_CANT_STAMCRIT) /datum/action/cooldown/bloodsucker/fortitude/ActivatePower(trigger_flags) . = ..() owner.balloon_alert(owner, "fortitude turned on.") to_chat(owner, span_notice("Your flesh, skin, and muscles become as steel.")) // Traits & Effects - owner.add_traits(list(TRAIT_PIERCEIMMUNE, TRAIT_ANALGESIA, TRAIT_NODISMEMBER, TRAIT_PUSHIMMUNE, TRAIT_NO_SPRINT), FORTITUDE_TRAIT) + owner.add_traits(base_traits, FORTITUDE_TRAIT) if(level_current >= 4) - owner.add_traits(list(TRAIT_STUNIMMUNE, TRAIT_CANT_STAMCRIT), FORTITUDE_TRAIT) // They'll get stun resistance + this, who cares. + owner.add_traits(upgraded_traits, FORTITUDE_TRAIT) // They'll get stun resistance + this, who cares. var/mob/living/carbon/human/bloodsucker_user = owner if(IS_BLOODSUCKER(owner) || IS_VASSAL(owner)) fortitude_resist = max(0.3, 0.7 - level_current * 0.1) @@ -50,7 +63,7 @@ user.balloon_alert(user, "you attempt to run, crushing yourself.") user.take_overall_damage(brute = rand(5, 15)) /// We don't want people using fortitude being able to use vehicles - if(user.buckled && istype(user.buckled, /obj/vehicle)) + if(istype(user.buckled, /obj/vehicle)) user.buckled.unbuckle_mob(src, force=TRUE) /datum/action/cooldown/bloodsucker/fortitude/DeactivatePower() @@ -62,7 +75,7 @@ if(!HAS_TRAIT_FROM(bloodsucker_user, TRAIT_STUNIMMUNE, FORTITUDE_TRAIT)) bloodsucker_user.physiology.stamina_mod /= fortitude_resist // Remove Traits & Effects - owner.remove_traits(list(TRAIT_PIERCEIMMUNE, TRAIT_ANALGESIA, TRAIT_NODISMEMBER, TRAIT_PUSHIMMUNE, TRAIT_NO_SPRINT, TRAIT_STUNIMMUNE, TRAIT_CANT_STAMCRIT), FORTITUDE_TRAIT) + owner.remove_traits(base_traits + upgraded_traits, FORTITUDE_TRAIT) if(was_running && bloodsucker_user.m_intent == MOVE_INTENT_WALK) bloodsucker_user.set_move_intent(MOVE_INTENT_RUN) diff --git a/monkestation/code/modules/blueshield/landmarks.dm b/monkestation/code/modules/blueshield/landmarks.dm index e812eaee96b8..1153629768f6 100644 --- a/monkestation/code/modules/blueshield/landmarks.dm +++ b/monkestation/code/modules/blueshield/landmarks.dm @@ -1,2 +1,3 @@ /obj/effect/landmark/start/blueshield name = "Blueshield" + icon_state = "Blueshield" diff --git a/monkestation/code/modules/blueshift/appliances/colony.dm b/monkestation/code/modules/blueshift/appliances/colony.dm index 1b3e683f427c..357329310fd1 100644 --- a/monkestation/code/modules/blueshift/appliances/colony.dm +++ b/monkestation/code/modules/blueshift/appliances/colony.dm @@ -477,7 +477,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/space_heater/wall_mounted, 29) base_icon_state = "wall_charger" circuit = null max_batteries = 3 - charge_rate = 900 KW /// The item we turn into when repacked var/repacked_type = /obj/item/wallframe/cell_charger_multi diff --git a/monkestation/code/modules/blueshift/armaments/kemetek.dm b/monkestation/code/modules/blueshift/armaments/kemetek.dm index eb29e50cd8ae..7ad7e73d5c5c 100644 --- a/monkestation/code/modules/blueshift/armaments/kemetek.dm +++ b/monkestation/code/modules/blueshift/armaments/kemetek.dm @@ -5,3 +5,4 @@ /datum/armament_entry/company_import/kemetek/checkback subcategory = "Check back soon! ™" + diff --git a/monkestation/code/modules/blueshift/armaments/rayne.dm b/monkestation/code/modules/blueshift/armaments/rayne.dm index 631226fa9d21..ed3d8e39902c 100644 --- a/monkestation/code/modules/blueshift/armaments/rayne.dm +++ b/monkestation/code/modules/blueshift/armaments/rayne.dm @@ -8,14 +8,19 @@ /datum/armament_entry/company_import/rayne/clothing/lamp // name = "Wearable Rayne Corporation Chest Lamp" item_type = /obj/item/flashlight/lantern/rayne - cost = PAYCHECK_COMMAND * 3 + cost = PAYCHECK_COMMAND * 2 + +/datum/armament_entry/company_import/rayne/first_aid_kit + subcategory = "First-Aid Kits" + +/datum/armament_entry/company_import/rayne/first_aid_kit/rayne_mender + item_type = /obj/item/storage/medkit/rayne + cost = PAYCHECK_COMMAND * 5 //Rayne Corp Medkit: A portable medkit that contains a cynical artificial intelligence that can diagnose and treat your injuries, but also insults you and makes sarcastic comments about your condition. -//automender but it sucks and hates you //Rayne Corp Sticky Tiles: A synthetic tile that has a special adhesive property that can cushion any fall and prevent serious damage, //but also traps you in place until you can free yourself or get help. The Sticky Tile is ideal for people who are clumsy and prone to accidents. - //Rayne Corp Teleporter: A device that can teleport you to any location, but also swaps your body parts with random objects or animals. The Teleporter is convenient and fast. It can let you travel anywhere, //in an instant. The Teleporter can also create amusing and weird situations, as you may end up with a different appearance, function, //or ability, after teleporting. However, the Teleporter can be very painful, and can damage your health, identity, or sanity, if used too often. diff --git a/monkestation/code/modules/blueshift/biogenerator/resources.dm b/monkestation/code/modules/blueshift/biogenerator/resources.dm index 9d8f23c84620..9fb685140db7 100644 --- a/monkestation/code/modules/blueshift/biogenerator/resources.dm +++ b/monkestation/code/modules/blueshift/biogenerator/resources.dm @@ -19,4 +19,3 @@ RND_CATEGORY_INITIAL, RND_CATEGORY_AKHTER_RESOURCES, ) -a diff --git a/monkestation/code/modules/blueshift/clothing/nova_neck.dm b/monkestation/code/modules/blueshift/clothing/nova_neck.dm index cf85b439c148..fffb5bf08953 100644 --- a/monkestation/code/modules/blueshift/clothing/nova_neck.dm +++ b/monkestation/code/modules/blueshift/clothing/nova_neck.dm @@ -56,8 +56,11 @@ desc = "A plated mantle that one might wrap around the upper torso. The 'scales' of the garment signify the members of security and how you're carrying them on your shoulders." icon = 'monkestation/code/modules/blueshift/icons/mob/clothing/neck.dmi' worn_icon = 'monkestation/code/modules/blueshift/icons/mob/clothing/neck.dmi' - icon_state = "hosmantle_blue" //There's a red version if you remove the _blue, but its not coded in currently. + icon_state = "hosmantle" +/obj/item/clothing/neck/mantle/hosmantle/blue + icon_state = "hosmantle_blue" + /obj/item/clothing/neck/mantle/capmantle name = "\proper the captain's mantle" desc = "A formal mantle to drape around the shoulders. Others stand on the shoulders of giants. You're the giant they stand on." diff --git a/monkestation/code/modules/blueshift/components/toggle_clothing.dm b/monkestation/code/modules/blueshift/components/toggle_clothing.dm index b445b9a86da0..af1fe6444533 100644 --- a/monkestation/code/modules/blueshift/components/toggle_clothing.dm +++ b/monkestation/code/modules/blueshift/components/toggle_clothing.dm @@ -24,4 +24,5 @@ toggled = !toggled source.icon_state = (toggled ? toggled_icon_state : initial(source.icon_state)) to_chat(clicker, "You toggle \the [source]!") + source.update_slot_icon() clicker.update_appearance() diff --git a/monkestation/code/modules/blueshift/items/ammo.dm b/monkestation/code/modules/blueshift/items/ammo.dm index 8f1701fa30ed..0d1441a8fb7c 100644 --- a/monkestation/code/modules/blueshift/items/ammo.dm +++ b/monkestation/code/modules/blueshift/items/ammo.dm @@ -1094,6 +1094,12 @@ desc = "A 12 gauge iron slug." custom_materials = AMMO_MATS_SHOTGUN +/obj/item/ammo_casing/shotgun/apds //This SHOULD let you print the shells in the ammo lathe + can_be_printed = TRUE + advanced_print_req = TRUE + custom_materials = AMMO_MATS_SHOTGUN_PLASMA //plastanium -> tungsten approximation + + // THE BELOW TWO SLUGS ARE NOTED AS ADMINONLY AND HAVE ***EIGHTY*** WOUND BONUS. NOT BARE WOUND BONUS. FLAT WOUND BONUS. /obj/item/ammo_casing/shotgun/executioner name = "expanding shotgun slug" diff --git a/monkestation/code/modules/blueshift/items/syndicate.dm b/monkestation/code/modules/blueshift/items/syndicate.dm index 0be0098a0f41..6aad026b20c4 100644 --- a/monkestation/code/modules/blueshift/items/syndicate.dm +++ b/monkestation/code/modules/blueshift/items/syndicate.dm @@ -148,6 +148,8 @@ user.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red", src) to_chat(user, "Code Phrases: [jointext(GLOB.syndicate_code_phrase, ", ")]") to_chat(user, "Code Responses: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") + user.add_mob_memory(/datum/memory/key/codewords) + user.add_mob_memory(/datum/memory/key/codewords/responses) use_charge(user) @@ -171,6 +173,8 @@ to_chat(attacked_mob, span_boldnotice("You feel suddenly imparted with the knowledge of the following code words:")) to_chat(attacked_mob, "Code Phrases: [span_blue("[jointext(GLOB.syndicate_code_phrase, ", ")]")]") to_chat(attacked_mob, "Code Responses: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") + attacked_mob.add_mob_memory(/datum/memory/key/codewords) + attacked_mob.add_mob_memory(/datum/memory/key/codewords/responses) use_charge(user) diff --git a/monkestation/code/modules/blueshift/opfor/core/_base.dm b/monkestation/code/modules/blueshift/opfor/core/_base.dm index 3751a290e882..26ff0cc2d9c5 100644 --- a/monkestation/code/modules/blueshift/opfor/core/_base.dm +++ b/monkestation/code/modules/blueshift/opfor/core/_base.dm @@ -219,18 +219,20 @@ return data /datum/opposing_force/ui_static_data(mob/user) - var/list/data = list() - - data["opt_in_colors"] = GLOB.antag_opt_in_colors - data["opt_in_enabled"] = (!CONFIG_GET(flag/disable_antag_opt_in_preferences)) - - return data + return list( + "opt_in_colors" = GLOB.antag_opt_in_colors, + "opt_in_enabled" = !CONFIG_GET(flag/disable_antag_opt_in_preferences), + ) /datum/opposing_force/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() if(.) return + var/mob/living/user = ui.user + if(QDELETED(user) || QDELETED(user.client)) + return + var/datum/opposing_force_objective/edited_objective if(params["objective_ref"]) edited_objective = locate(params["objective_ref"]) in objectives @@ -240,32 +242,32 @@ switch(action) // General control if("set_backstory") - set_backstory(usr, params["backstory"]) + set_backstory(user, params["backstory"]) if("request_update") - request_update(usr) + request_update(user) if("modify_request") - modify_request(usr) + modify_request(user) if("close_application") - close_application(usr) + close_application(user) if("submit") - submit_to_subsystem(usr) + submit_to_subsystem(user) if("send_message") - send_message(usr, params["message"]) - if(!handling_admin && check_rights_for(usr.client, R_ADMIN) && usr != mind_reference) - handle(usr) // if an admin sends a message and it's not being handled, assign them as handling it + send_message(user, params["message"]) + if(!handling_admin && check_rights_for(user.client, R_ADMIN) && user.mind != mind_reference) + handle(user) // if an admin sends a message and it's not being handled, assign them as handling it // Objective control if("add_objective") - add_objective(usr) + add_objective(user) if("remove_objective") - remove_objective(usr, edited_objective) + remove_objective(user, edited_objective) if("set_objective_title") - set_objective_title(usr, edited_objective, params["title"]) + set_objective_title(user, edited_objective, params["title"]) if("set_objective_description") - set_objective_description(usr, edited_objective, params["new_desciprtion"]) + set_objective_description(user, edited_objective, params["new_desciprtion"]) if("set_objective_justification") - set_objective_justification(usr, edited_objective, params["new_justification"]) + set_objective_justification(user, edited_objective, params["new_justification"]) if("set_objective_intensity") - set_objective_intensity(usr, edited_objective, params["new_intensity_level"]) + set_objective_intensity(user, edited_objective, params["new_intensity_level"]) // Equipment control if("select_equipment") var/datum/opposing_force_equipment/equipment @@ -275,30 +277,30 @@ break if(!equipment) return - select_equipment(usr, equipment) + select_equipment(user, equipment) if("remove_equipment") var/datum/opposing_force_selected_equipment/equipment = locate(params["selected_equipment_ref"]) in selected_equipment if(!equipment) return - remove_equipment(usr, equipment) + remove_equipment(user, equipment) if("set_equipment_reason") var/datum/opposing_force_selected_equipment/equipment = locate(params["selected_equipment_ref"]) in selected_equipment if(!equipment) return - set_equipment_reason(usr, equipment, params["new_equipment_reason"]) + set_equipment_reason(user, equipment, params["new_equipment_reason"]) if("set_equipment_count") var/datum/opposing_force_selected_equipment/equipment = locate(params["selected_equipment_ref"]) in selected_equipment if(!equipment) return - set_equipment_count(usr, equipment, params["new_equipment_count"]) + set_equipment_count(user, equipment, params["new_equipment_count"]) // JSON I/O control if("import_json") if(!length(SSopposing_force.equipment_list)) // sanity check return - json_import(usr) + json_import(user) if("export_json") - json_export(usr) + json_export(user) //Admin protected procs if("approve") @@ -306,71 +308,71 @@ return for(var/datum/opposing_force_objective/objective as anything in objectives) if(objective.status == OPFOR_OBJECTIVE_STATUS_NOT_REVIEWED) - to_chat(usr, examine_block(span_command_headset(span_pink("OPFOR: ERROR, some objectives have not been reviewed. Please approve/deny all objectives.")))) + to_chat(user, examine_block(span_command_headset(span_pink("OPFOR: ERROR, some objectives have not been reviewed. Please approve/deny all objectives.")))) return for(var/datum/opposing_force_selected_equipment/equipment as anything in selected_equipment) if(equipment.status == OPFOR_EQUIPMENT_STATUS_NOT_REVIEWED) - to_chat(usr, examine_block(span_command_headset(span_pink("OPFOR: ERROR, some equipment requests have not been reviewed. Please approve/deny all equipment requests.")))) + to_chat(user, examine_block(span_command_headset(span_pink("OPFOR: ERROR, some equipment requests have not been reviewed. Please approve/deny all equipment requests.")))) return - SSopposing_force.approve(src, usr) + SSopposing_force.approve(src, user) if("approve_all") if(!check_rights(R_ADMIN)) return - approve_all(usr) + approve_all(user) if("handle") - handle(usr) + handle(user) if("issue_gear") if(!check_rights(R_ADMIN)) return - issue_gear(usr) + issue_gear(user) if("deny") if(!check_rights(R_ADMIN)) return - var/denied_reason = tgui_input_text(usr, "Denial Reason", "Enter a reason for denying this application:") + var/denied_reason = tgui_input_text(user, "Denial Reason", "Enter a reason for denying this application:") // Checking to see if the user is spamming the button, async and all. if((status == OPFOR_STATUS_DENIED) || !denied_reason) return - SSopposing_force.deny(src, denied_reason, usr) + SSopposing_force.deny(src, denied_reason, user) if("mute_request_updates") if(!check_rights(R_ADMIN)) return - mute_request_updates(usr) + mute_request_updates(user) if("toggle_block") if(!check_rights(R_ADMIN)) return - toggle_block(usr) + toggle_block(user) if("approve_objective") if(!check_rights(R_ADMIN)) return - approve_objective(usr, edited_objective) + approve_objective(user, edited_objective) if("deny_objective") if(!check_rights(R_ADMIN)) return - var/denied_reason = tgui_input_text(usr, "Denial Reason", "Enter a reason for denying this objective:") + var/denied_reason = tgui_input_text(user, "Denial Reason", "Enter a reason for denying this objective:") if(!denied_reason) return - deny_objective(usr, edited_objective, denied_reason) + deny_objective(user, edited_objective, denied_reason) if("approve_equipment") var/datum/opposing_force_selected_equipment/equipment = locate(params["selected_equipment_ref"]) in selected_equipment if(!equipment) return if(!check_rights(R_ADMIN)) return - approve_equipment(usr, equipment) + approve_equipment(user, equipment) if("deny_equipment") var/datum/opposing_force_selected_equipment/equipment = locate(params["selected_equipment_ref"]) in selected_equipment if(!equipment) return if(!check_rights(R_ADMIN)) return - var/denied_reason = tgui_input_text(usr, "Denial Reason", "Enter a reason for denying this objective:") + var/denied_reason = tgui_input_text(user, "Denial Reason", "Enter a reason for denying this objective:") if(!denied_reason) return - deny_equipment(usr, equipment, denied_reason) + deny_equipment(user, equipment, denied_reason) if("flw_user") if(!check_rights(R_ADMIN)) return - flw_user(usr) + flw_user(user) /datum/opposing_force/proc/flw_user(mob/user) user.client?.admin_follow(mind_reference.current) @@ -501,7 +503,7 @@ // Subsystem checks, no point in bloating the system if it's not accepting more. var/availability = SSopposing_force.check_availability() if(availability != OPFOR_SUBSYSTEM_READY) - to_chat(usr, span_warning("Error, the OPFOR subsystem rejected your request. Reason: [availability]")) + to_chat(user, span_warning("Error, the OPFOR subsystem rejected your request. Reason: [availability]")) return FALSE var/queue_position = SSopposing_force.add_to_queue(src) @@ -517,7 +519,7 @@ add_log(user.ckey, "Submitted to the OPFOR subsystem") send_system_message("[user ? get_admin_ckey(user) : "The OPFOR subsystem"] has submitted the application for review") send_admins_opfor_message(span_command_headset("SUBMISSION: [ADMIN_LOOKUPFLW(user)] has submitted their OPFOR application. They are number [queue_position] in the queue.")) - to_chat(usr, examine_block(span_nicegreen(("You have been added to the queue for the OPFOR subsystem. You are number [queue_position] in line.")))) + to_chat(user, examine_block(span_nicegreen("You have been added to the queue for the OPFOR subsystem. You are number [queue_position] in line."))) /datum/opposing_force/proc/modify_request(mob/user) if(status == OPFOR_STATUS_CHANGES_REQUESTED) @@ -710,8 +712,8 @@ modification_log += msg log_admin(msg) -/datum/opposing_force/proc/send_admins_opfor_message(message) - message = "[span_pink("OPFOR:")] [span_admin("[message] (Show Panel)")]" +/datum/opposing_force/proc/send_admins_opfor_message(message, prefix = "OPFOR:") + message = "[span_pink(prefix)] [span_admin("[message] (Show Panel)")]" to_chat(GLOB.admins, type = MESSAGE_TYPE_ADMINLOG, html = message, @@ -751,10 +753,27 @@ message = STRIP_HTML_SIMPLE(message, OPFOR_TEXT_LIMIT_MESSAGE) var/message_string var/real_round_time = world.timeofday - SSticker.round_start_time - if(check_rights_for(user.client, R_ADMIN) && user != mind_reference) - message_string = "[time2text(real_round_time, "hh:mm:ss", 0)] (ADMIN) [get_admin_ckey(user)]: " + message + if(check_rights_for(user.client, R_ADMIN) && user.mind != mind_reference) + var/admin_ckey = get_admin_ckey(user) + message_string = "[time2text(real_round_time, "hh:mm:ss", 0)] (ADMIN) [admin_ckey]: " + message + to_chat(mind_reference.current, examine_block(span_pink("[span_prefix("OPFOR CHAT ([admin_ckey]):")] [message]"))) + SEND_SOUND(mind_reference.current, sound('sound/machines/terminal_prompt.ogg')) else message_string = "[time2text(real_round_time, "hh:mm:ss", 0)] (USER) [user.ckey]: " + message + var/admin_message = span_pink("[span_prefix("OPFOR CHAT ([user.ckey]):")] [message] (Show Panel)") + var/msg_target + if(handling_admin && GLOB.directory[handling_admin]) + var/client/admin = GLOB.directory[handling_admin] + SEND_SOUND(admin, sound('sound/machines/terminal_prompt.ogg')) + if(!admin.is_afk()) + msg_target = admin + to_chat( + target = msg_target || GLOB.admins, + html = admin_message, + type = MESSAGE_TYPE_ADMINLOG, + confidential = TRUE, + ) + admin_chat += message_string // We support basic commands, see run_command for compatible commands, the operator is / @@ -764,12 +783,14 @@ run_command(user, command) add_log(user.ckey, "Sent message: [message]") + SStgui.update_uis(src) /datum/opposing_force/proc/send_system_message(message) var/real_round_time = world.timeofday - SSticker.round_start_time var/message_string = "[time2text(real_round_time, "hh:mm:ss", 0)] SYSTEM: " + message admin_chat += message_string + SStgui.update_uis(src) /datum/opposing_force/proc/run_command(mob/user, message) var/list/params = splittext(message, " ") @@ -857,7 +878,7 @@ send_system_message("ERROR: You do not have permission to do that.") return send_system_message("User pinged.") - to_chat(mind_reference.current, span_pink("OPFOR: [get_admin_ckey(user)] has pinged your OPFOR chat, check it!")) + to_chat(mind_reference.current, examine_block(span_pink("[span_prefix("OPFOR:")] [get_admin_ckey(user)] has pinged your OPFOR chat, check it!"))) SEND_SOUND(mind_reference.current, sound('sound/misc/bloop.ogg')) /datum/opposing_force/proc/roundend_report() @@ -868,20 +889,24 @@ report += "Had an approved OPFOR application with the following backstory:
" report += "[set_backstory]
" - if(objectives.len) + var/list/datum/opposing_force_objective/approved_objectives = list() + for(var/datum/opposing_force_objective/opfor_objective in objectives) + if(opfor_objective.status == OPFOR_OBJECTIVE_STATUS_APPROVED) + approved_objectives += opfor_objective + if(length(approved_objectives)) report += "And with the following objectives:
" - for(var/datum/opposing_force_objective/opfor_objective in objectives) - if(opfor_objective.status != OPFOR_OBJECTIVE_STATUS_APPROVED) - continue + for(var/datum/opposing_force_objective/opfor_objective as anything in approved_objectives) report += "Title: [opfor_objective.title]
" report += "Description: [opfor_objective.description]
" report += "
" - if(selected_equipment.len) + var/list/datum/opposing_force_selected_equipment/approved_equipment = list() + for(var/datum/opposing_force_selected_equipment/opfor_equipment in selected_equipment) + if(opfor_equipment.status == OPFOR_EQUIPMENT_STATUS_APPROVED) + approved_equipment += opfor_equipment + if(length(approved_equipment)) report += "And had the following approved equipment:
" - for(var/datum/opposing_force_selected_equipment/opfor_equipment in selected_equipment) - if(opfor_equipment.status != OPFOR_EQUIPMENT_STATUS_APPROVED) - continue + for(var/datum/opposing_force_selected_equipment/opfor_equipment as anything in approved_equipment) report += "[opfor_equipment.opposing_force_equipment.name]
" report += "
" @@ -1089,4 +1114,4 @@ var/datum/opposing_force/opposing_force = new(mind) mind.opposing_force = opposing_force SSopposing_force.new_opfor(opposing_force) - mind.opposing_force.ui_interact(usr) + mind.opposing_force.ui_interact(src) diff --git a/monkestation/code/modules/blueshift/opfor/core/admin.dm b/monkestation/code/modules/blueshift/opfor/core/admin.dm index 884726ed77da..de8e220c4fa7 100644 --- a/monkestation/code/modules/blueshift/opfor/core/admin.dm +++ b/monkestation/code/modules/blueshift/opfor/core/admin.dm @@ -4,6 +4,8 @@ set desc = "Request players sign up for opfor if they have antag on." var/asked = 0 + if(tgui_alert(src, "Do you wish to notify all players that OPFORs are desired?", "Confirm Action", list("Yes", "No")) != "Yes") + return for(var/mob/living/carbon/human/human in GLOB.alive_player_list) to_chat(human, examine_block(span_greentext("The admins are looking for OPFOR players, if you're interested, sign up in the OOC tab!"))) asked++ diff --git a/monkestation/code/modules/can_spessmen_feel_pain/pain/_base.dm b/monkestation/code/modules/can_spessmen_feel_pain/pain/_base.dm index 3f6d2d8cb8bd..2c25ffde28e0 100644 --- a/monkestation/code/modules/can_spessmen_feel_pain/pain/_base.dm +++ b/monkestation/code/modules/can_spessmen_feel_pain/pain/_base.dm @@ -85,7 +85,7 @@ RegisterSignal(parent, COMSIG_CARBON_LOSE_WOUND, PROC_REF(remove_wound_pain)) RegisterSignal(parent, COMSIG_CARBON_REMOVE_LIMB, PROC_REF(remove_bodypart)) RegisterSignal(parent, COMSIG_LIVING_HEALTHSCAN, PROC_REF(on_analyzed)) - RegisterSignal(parent, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(remove_all_pain)) + RegisterSignal(parent, COMSIG_LIVING_POST_FULLY_HEAL, PROC_REF(on_fully_healed)) RegisterSignal(parent, COMSIG_MOB_APPLY_DAMAGE, PROC_REF(add_damage_pain)) RegisterSignal(parent, COMSIG_MOB_STATCHANGE, PROC_REF(on_parent_statchance)) RegisterSignals(parent, list(SIGNAL_ADDTRAIT(TRAIT_NO_PAIN_EFFECTS), SIGNAL_REMOVETRAIT(TRAIT_NO_PAIN_EFFECTS)), PROC_REF(refresh_pain_attributes)) @@ -123,11 +123,11 @@ /datum/pain/proc/add_bodypart(mob/living/carbon/source, obj/item/bodypart/new_limb, special) SIGNAL_HANDLER - if(!istype(new_limb)) // pseudo-bodyparts are not tracked for simplicity (chainsaw arms) + if(!istype(new_limb) || QDELING(new_limb)) // pseudo-bodyparts are not tracked for simplicity (chainsaw arms) return var/obj/item/bodypart/existing = body_zones[new_limb.body_zone] - if(!isnull(existing)) // if we already have a val assigned to this key, remove it + if(!QDELETED(existing)) // if we already have a val assigned to this key, remove it remove_bodypart(source, existing, FALSE, special) body_zones[new_limb.body_zone] = new_limb @@ -252,7 +252,7 @@ for(var/zone in shuffle(def_zones)) var/adjusted_amount = round(amount, 0.01) var/obj/item/bodypart/adjusted_bodypart = body_zones[check_zone(zone)] - if(isnull(adjusted_bodypart)) // it's valid - for if we're passed a zone we don't have + if(QDELETED(adjusted_bodypart)) // it's valid - for if we're passed a zone we don't have continue var/current_amount = adjusted_bodypart.pain @@ -315,9 +315,8 @@ for(var/zone in def_zones) var/obj/item/bodypart/adjusted_bodypart = body_zones[zone] - if(isnull(adjusted_bodypart)) // it's valid - for if we're passed a zone we don't have + if(QDELETED(adjusted_bodypart)) // it's valid - for if we're passed a zone we don't have continue - adjusted_bodypart.min_pain = max(adjusted_bodypart.min_pain + amount, 0) // Negative min pain is a neat idea ("banking pain") but not today adjusted_bodypart.pain = max(adjusted_bodypart.pain, adjusted_bodypart.min_pain) @@ -532,6 +531,8 @@ var/no_recent_pain = COOLDOWN_FINISHED(src, time_since_last_pain_loss) for(var/part in shuffle(body_zones)) var/obj/item/bodypart/checked_bodypart = body_zones[part] + if(QDELETED(checked_bodypart)) + continue if(checked_bodypart.pain <= 0) continue has_pain = TRUE @@ -860,6 +861,8 @@ var/total_pain = 0 for(var/zone in body_zones) var/obj/item/bodypart/adjusted_bodypart = body_zones[zone] + if(QDELETED(adjusted_bodypart)) + continue total_pain += adjusted_bodypart.pain max_total_pain += adjusted_bodypart.soft_max_pain @@ -870,6 +873,8 @@ var/total_pain = 0 for(var/zone in body_zones) var/obj/item/bodypart/adjusted_bodypart = body_zones[zone] + if(QDELETED(adjusted_bodypart)) + continue total_pain += adjusted_bodypart.pain return total_pain @@ -908,18 +913,22 @@ message_args[TREAT_MESSAGE_MESSAGE] = sanitize(final_phrase) +/datum/pain/proc/on_fully_healed(datum/source, heal_flags) + SIGNAL_HANDLER + // Ideally pain would have its own heal flag but we live in a society + if(heal_flags & (HEAL_ADMIN|HEAL_WOUNDS|HEAL_STATUS)) + remove_all_pain() + /** * Remove all pain, pain paralysis, side effects, etc. from our mob after we're fully healed by something (like an adminheal) */ -/datum/pain/proc/remove_all_pain(datum/source, heal_flags) +/datum/pain/proc/remove_all_pain() SIGNAL_HANDLER - // Ideally pain would have its own heal flag but we live in a society - if(!(heal_flags & (HEAL_ADMIN|HEAL_WOUNDS|HEAL_STATUS))) - return - for(var/zone in body_zones) var/obj/item/bodypart/healed_bodypart = body_zones[zone] + if(QDELETED(healed_bodypart)) + continue adjust_bodypart_min_pain(zone, -INFINITY) adjust_bodypart_pain(zone, -INFINITY) // Shouldn't be necessary but you never know! @@ -1060,7 +1069,8 @@ final_print += "[parent] bodypart printout: (min / current / soft max)" for(var/part in body_zones) var/obj/item/bodypart/checked_bodypart = body_zones[part] - final_print += "[checked_bodypart.name]: [checked_bodypart.min_pain] / [checked_bodypart.pain] / [checked_bodypart.soft_max_pain]" + if(!QDELETED(checked_bodypart)) + final_print += "[checked_bodypart.name]: [checked_bodypart.min_pain] / [checked_bodypart.pain] / [checked_bodypart.soft_max_pain]" final_print += " - - - - " final_print += "[parent] pain modifier printout:" diff --git a/monkestation/code/modules/cargo/bounties/bot.dm b/monkestation/code/modules/cargo/bounties/bot.dm new file mode 100644 index 000000000000..3fa7ce5ff14b --- /dev/null +++ b/monkestation/code/modules/cargo/bounties/bot.dm @@ -0,0 +1,23 @@ +/datum/bounty/item/bot/cleanbot_jr //JR. models to prevent them from mass selling station cleanbots + name = "Scrubs Junior., PA" + description = "Medical is looking worse than the kitchen cold room and janitors are nowhere to be found. We need a cleanbot for medical before the Chief Medical Officer has a breakdown." + reward = CARGO_CRATE_VALUE * 2.5 + wanted_types = list(/mob/living/basic/bot/cleanbot/medbay/jr = TRUE) + +/datum/bounty/item/bot/floorbot + name = "Floorbot" + description = "Out last floorbot went haywire and removed all our floors. So we need another floorbot to replace the priors issues." + reward = CARGO_CRATE_VALUE * 3 + wanted_types = list(/mob/living/simple_animal/bot/floorbot = TRUE) + +/datum/bounty/item/bot/honkbot + name = "Honkbot" + description = "Mr. Gigglesworth birthday is around the corner and we didn't get a present. Ship us off a honkbot to giftwrap please." + reward = CARGO_CRATE_VALUE * 5 + wanted_types = list(/mob/living/simple_animal/bot/secbot/honkbot = TRUE) + +/datum/bounty/item/bot/firebot + name = "Firebot" + description = "An assistant waving around some license broke into atmospherics and its now all on fire. Send us a Firebot before the gas fire leaks further." + reward = CARGO_CRATE_VALUE * 4 + wanted_types = list(/mob/living/simple_animal/bot/firebot = TRUE) diff --git a/monkestation/code/modules/client/player_details.dm b/monkestation/code/modules/client/player_details.dm index 5e24cc9bde28..1332975bfcaa 100644 --- a/monkestation/code/modules/client/player_details.dm +++ b/monkestation/code/modules/client/player_details.dm @@ -3,18 +3,39 @@ var/datum/patreon_data/patreon /// Twitch subscription data for this player. var/datum/twitch_data/twitch + /// Currently active challenges. + var/list/datum/challenge/active_challenges + /// Currently applied challenges. + var/list/datum/challenge/applied_challenges + /// The challenge menu for this mob. + var/datum/challenge_selector/challenge_menu + /// Bonus monkecoins to reward this player at roundend. + var/roundend_monkecoin_bonus = 0 /datum/player_details/New(player_key) . = ..() patreon = new(src) twitch = new(src) +/// Finds the current mob this player is in control of. +/datum/player_details/proc/find_current_mob() as /mob + RETURN_TYPE(/mob) + var/client/client = GLOB.directory[ckey] + . = client?.mob + if(.) + return + for(var/mob/mob as anything in GLOB.mob_list) + if(!QDELETED(mob) && mob.ckey == ckey) + return mob + /** * Gets a player details instance from a variable, whether it be a mob, a client, or a ckey. */ /proc/get_player_details(target) as /datum/player_details RETURN_TYPE(/datum/player_details) - if(istext(target)) + if(istype(target, /datum/player_details)) + return target // well, that was easy + else if(istext(target)) return GLOB.player_details[ckey(target)] else if(ismob(target)) var/mob/mob_target = target @@ -27,6 +48,4 @@ else if(IS_CLIENT_OR_MOCK(target)) var/datum/client_interface/client_target = target return client_target.player_details - else if(istype(target, /datum/player_details)) - return target // well, that was easy diff --git a/monkestation/code/modules/clothing/spacesuits/hardsuits/heavy.dm b/monkestation/code/modules/clothing/spacesuits/hardsuits/heavy.dm index 2cdb16dcf378..b04aaa092067 100644 --- a/monkestation/code/modules/clothing/spacesuits/hardsuits/heavy.dm +++ b/monkestation/code/modules/clothing/spacesuits/hardsuits/heavy.dm @@ -7,31 +7,38 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT armor_type = /datum/armor/hardsuit/juggernaut clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | HEADINTERNALS + clothing_traits = list( + TRAIT_SNOWSTORM_IMMUNE, + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + ) actions_types = null + var/static/list/huds_shown = list( + DATA_HUD_DIAGNOSTIC_BASIC, + DATA_HUD_SECURITY_BASIC, + DATA_HUD_MEDICAL_ADVANCED, + ) /obj/item/clothing/head/helmet/space/hardsuit/juggernaut/Initialize(mapload) . = ..() AddElement(/datum/element/radiation_protected_clothing) /obj/item/clothing/head/helmet/space/hardsuit/juggernaut/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == ITEM_SLOT_HEAD) - var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] - var/datum/atom_hud/SHUD = GLOB.huds[DATA_HUD_SECURITY_BASIC] - var/datum/atom_hud/MHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - DHUD.show_to(user) - SHUD.show_to(user) - MHUD.show_to(user) + . = ..() + if(slot == ITEM_SLOT_HEAD) + for(var/hud_type in huds_shown) + var/datum/atom_hud/hud = GLOB.huds[hud_type] + hud.show_to(user) + user.update_sight() /obj/item/clothing/head/helmet/space/hardsuit/juggernaut/dropped(mob/living/carbon/human/user) - ..() - if (user.head == src) - var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] - var/datum/atom_hud/SHUD = GLOB.huds[DATA_HUD_SECURITY_BASIC] - var/datum/atom_hud/MHUD = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - DHUD.hide_from(user) - SHUD.hide_from(user) - MHUD.hide_from(user) + . = ..() + if(user.head == src) + for(var/hud_type in huds_shown) + var/datum/atom_hud/hud = GLOB.huds[hud_type] + hud.hide_from(user) user.update_sight() /datum/action/item_action/toggle_suit_flashlight //monkestation addition @@ -44,6 +51,13 @@ icon_state = "hardsuit-juggernaut" resistance_flags = ACID_PROOF | FIRE_PROOF clothing_flags = BLOCKS_SHOVE_KNOCKDOWN | STOPSPRESSUREDAMAGE | THICKMATERIAL //you are a walking wall you can't shove a wall down! + clothing_traits = list( + TRAIT_SNOWSTORM_IMMUNE, + TRAIT_ABATES_SHOCK, + TRAIT_ANALGESIA, + TRAIT_NO_PAIN_EFFECTS, + TRAIT_NO_SHOCK_BUILDUP, + ) max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. allowed = list( /obj/item/ammo_box, diff --git a/monkestation/code/modules/coin-events/challenges/challenge/_challenge_base.dm b/monkestation/code/modules/coin-events/challenges/challenge/_challenge_base.dm index 85b2c0740fa5..d917d5b9ff09 100644 --- a/monkestation/code/modules/coin-events/challenges/challenge/_challenge_base.dm +++ b/monkestation/code/modules/coin-events/challenges/challenge/_challenge_base.dm @@ -1,39 +1,43 @@ -/client - var/list/active_challenges = list() - var/list/applied_challenges = list() - /datum/challenge ///the challenge name var/challenge_name = "God's Weakest Challenge" ///the challenge payout var/challenge_payout = 100 ///our host - var/client/host + var/datum/player_details/host ///have we failed if we are a fail action var/failed = FALSE ///the difficulty of the channgle var/difficulty = "Easy" ///do we need to process? var/processes = FALSE - ///the current mob we are in - var/mob/current_mob ///the trait we apply if any var/applied_trait -/datum/challenge/New(client/creator) +/datum/challenge/New(datum/player_details/host) . = ..() - if(!creator) - return - host = creator - current_mob = host.mob if(!host) return - RegisterSignal(host.mob, COMSIG_MIND_TRANSFERRED, PROC_REF(on_transfer)) + src.host = host + var/mob/current_mob = host.find_current_mob() + if(!current_mob) + CRASH("Couldn't find mob for [host]") + RegisterSignal(current_mob, COMSIG_MIND_TRANSFERRED, PROC_REF(on_transfer)) + +/datum/challenge/Destroy(force) + host = null + return ..() ///we just use the client to try and apply this as its easier to track mobs -/datum/challenge/proc/on_apply(client/owner) - if(applied_trait) - ADD_TRAIT(host.mob, applied_trait, CHALLENGE_TRAIT) +/datum/challenge/proc/on_apply() + SHOULD_CALL_PARENT(TRUE) + LAZYADD(host.applied_challenges, src) + if(!applied_trait) + return + var/mob/current_mob = host.find_current_mob() + if(!current_mob) + CRASH("Couldn't find mob for [host]") + ADD_TRAIT(current_mob, applied_trait, CHALLENGE_TRAIT) ///this fires every 10 seconds /datum/challenge/proc/on_process() @@ -47,9 +51,8 @@ /datum/challenge/proc/on_revive() return -/datum/challenge/proc/on_transfer(datum/source, mob/previous_body) +/datum/challenge/proc/on_transfer(datum/mind/source, mob/previous_body) SIGNAL_HANDLER if(applied_trait) REMOVE_TRAIT(previous_body, applied_trait, CHALLENGE_TRAIT) - var/datum/mind/mind = source - ADD_TRAIT(mind.current, applied_trait, CHALLENGE_TRAIT) + ADD_TRAIT(source.current, applied_trait, CHALLENGE_TRAIT) diff --git a/monkestation/code/modules/coin-events/challenges/challenge/paranoia.dm b/monkestation/code/modules/coin-events/challenges/challenge/paranoia.dm index 2f69aa50f53d..0498e57cbde4 100644 --- a/monkestation/code/modules/coin-events/challenges/challenge/paranoia.dm +++ b/monkestation/code/modules/coin-events/challenges/challenge/paranoia.dm @@ -6,13 +6,14 @@ icon = FA_ICON_OPTIN_MONSTER /datum/quirk/extra_sensory_paranoia/add() - var/datum/brain_trauma/magic/stalker/T = new() - var/mob/living/carbon/human/H = quirk_holder - H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) + var/mob/living/carbon/human/human_holder = quirk_holder + if(ishuman(human_holder)) + human_holder.gain_trauma(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) /datum/quirk/extra_sensory_paranoia/remove() - var/mob/living/carbon/human/H = quirk_holder - H.cure_trauma_type(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) + var/mob/living/carbon/human/human_holder = quirk_holder + if(ishuman(human_holder)) + human_holder.cure_trauma_type(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) /datum/challenge/paranoia challenge_name = "Paranoia" @@ -21,36 +22,29 @@ applied_trait = TRAIT_PARANOIA var/added = FALSE - -/datum/challenge/paranoia/on_apply(client/owner) +/datum/challenge/paranoia/on_apply() . = ..() - var/mob/living/carbon/human/H = host.mob - if(!ishuman(H)) + var/mob/living/carbon/human/current_human = host.find_current_mob() + if(!ishuman(current_human)) return - var/datum/brain_trauma/magic/stalker/T = new() - H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) + current_human.gain_trauma(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) added = TRUE /datum/challenge/paranoia/on_process() if(added) return - - var/mob/living/carbon/human/H = host.mob - if(!ishuman(H)) + var/mob/living/carbon/human/current_human = host.find_current_mob() + if(!ishuman(current_human)) return - var/datum/brain_trauma/magic/stalker/T = new() - H.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) + current_human.gain_trauma(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) added = TRUE -/datum/challenge/paranoia/on_transfer(datum/source, mob/previous_body) +/datum/challenge/paranoia/on_transfer(datum/mind/source, mob/previous_body) . = ..() - var/mob/living/carbon/human/H = previous_body - H.cure_trauma_type(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) + var/mob/living/carbon/human/previous_human = previous_body + if(ishuman(previous_human)) + previous_human.cure_trauma_type(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) - var/datum/mind/mind = source - var/datum/brain_trauma/magic/stalker/T = new() - if(isliving(mind.current)) - var/mob/living/carbon/human/current_human = mind.current - if(!ishuman(current_human)) - return - current_human.gain_trauma(T, TRAUMA_RESILIENCE_ABSOLUTE) + var/mob/living/carbon/human/current_human = source.current + if(ishuman(current_human)) + current_human.gain_trauma(/datum/brain_trauma/magic/stalker, TRAUMA_RESILIENCE_ABSOLUTE) diff --git a/monkestation/code/modules/coin-events/challenges/challenge_controller.dm b/monkestation/code/modules/coin-events/challenges/challenge_controller.dm index 54f489bb1b78..bb9337208cfb 100644 --- a/monkestation/code/modules/coin-events/challenges/challenge_controller.dm +++ b/monkestation/code/modules/coin-events/challenges/challenge_controller.dm @@ -17,12 +17,15 @@ SUBSYSTEM_DEF(challenges) for(var/datum/challenge/listed as anything in processing_challenges) listed.on_process() -/datum/controller/subsystem/challenges/proc/apply_challenges(client/owner) +/datum/controller/subsystem/challenges/proc/apply_challenges(datum/player_details/owner) + owner = get_player_details(owner) + if(!owner) + CRASH("Attempted to apply challenges to invalid owner") for(var/datum/challenge/listed as anything in owner.active_challenges) var/datum/challenge/new_challenge = new listed(owner) if(new_challenge.processes) processing_challenges += processing_challenges new_challenge.on_apply(owner) - owner.applied_challenges += new_challenge + LAZYADD(owner.applied_challenges, new_challenge) diff --git a/monkestation/code/modules/coin-events/challenges/challenge_selector.dm b/monkestation/code/modules/coin-events/challenges/challenge_selector.dm index 7564bc2b4571..59d4f40c2449 100644 --- a/monkestation/code/modules/coin-events/challenges/challenge_selector.dm +++ b/monkestation/code/modules/coin-events/challenges/challenge_selector.dm @@ -1,76 +1,73 @@ -/client - var/datum/challenge_selector/challenge_menu - /datum/challenge_selector /// The client of the person using the UI - var/client/owner + var/datum/player_details/owner /datum/challenge_selector/New(user) - owner = CLIENT_FROM_VAR(user) + owner = get_player_details(user) owner.challenge_menu = src /datum/challenge_selector/Destroy(force) + if(owner?.challenge_menu == src) + owner.challenge_menu = null owner = null return ..() /datum/challenge_selector/ui_state(mob/user) return GLOB.always_state +/datum/challenge_selector/ui_status(mob/user, datum/ui_state/state) + if(isliving(user) || isobserver(user)) + return UI_CLOSE + return ..() + /datum/challenge_selector/ui_interact(mob/user, datum/tgui/ui) . = ..() ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "ChallengeSelector", "Select Challenges") + ui.set_autoupdate(FALSE) ui.open() -/datum/challenge_selector/ui_data(mob/user) - var/list/data = list() +/datum/challenge_selector/ui_static_data(mob/user) var/list/buyables = list() - for(var/datum/challenge/listed as anything in subtypesof(/datum/challenge)) - var/datum/challenge/created = new listed + for(var/datum/challenge/challenge as anything in subtypesof(/datum/challenge)) buyables += list( list( - "name" = created.challenge_name, - "payout" = created.challenge_payout, - "difficulty" = created.difficulty, - "path" = created.type + "name" = challenge::challenge_name, + "payout" = challenge::challenge_payout, + "difficulty" = challenge::difficulty, + "path" = challenge::type ) ) - var/list/paths = list() - for(var/listed as anything in owner.active_challenges) - if(isnull(listed)) - owner.active_challenges -= listed - continue - paths += listed + return list("challenges" = buyables) - data["challenges"] = buyables - data["selected_challenges"] = paths - return data +/datum/challenge_selector/ui_data(mob/user) + var/list/selected = list() + for(var/datum/challenge/challenge_path as anything in owner.active_challenges) + selected += "[challenge_path]" + return list("selected_challenges" = selected) /datum/challenge_selector/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) - . = ..() . = ..() if(.) return + var/mob/user = ui.user switch(action) if("select_challenge") - add_selection(params) + add_selection(user, params) return TRUE -/datum/challenge_selector/proc/add_selection(list/params) - if(isliving(usr) || isobserver(usr)) +/datum/challenge_selector/proc/add_selection(mob/user, list/params) + if(user.ckey != owner.ckey) + CRASH("User [user.ckey] tried to use challenge selector of [owner.ckey]") + if(isliving(user) || isobserver(user)) return - var/id = params["path"] - var/path = text2path(id) - if(!ispath(path, /datum/challenge)) + var/challenge_path = text2path(params["path"]) + if(!ispath(challenge_path, /datum/challenge)) return - if(length(usr.client.active_challenges)) - for(var/listed as anything in usr.client.active_challenges) - if(listed == path) - usr.client.active_challenges -= listed - return - - var/datum/challenge/challenge = text2path(id) - usr.client.active_challenges += challenge + if(challenge_path in owner.active_challenges) + LAZYREMOVE(owner.active_challenges, challenge_path) + else + LAZYADD(owner.active_challenges, challenge_path) diff --git a/monkestation/code/modules/cybernetics/augments/_base_changes.dm b/monkestation/code/modules/cybernetics/augments/_base_changes.dm index 823287cffc33..fad39c5de964 100644 --- a/monkestation/code/modules/cybernetics/augments/_base_changes.dm +++ b/monkestation/code/modules/cybernetics/augments/_base_changes.dm @@ -3,7 +3,6 @@ /obj/item/organ/internal/cyberimp var/hacked = FALSE - var/syndicate_implant = FALSE //Makes the implant invisible to health analyzers and medical HUDs. var/list/encode_info = AUGMENT_NO_REQ @@ -182,6 +181,7 @@ /obj/item/organ/internal/cyberimp/cyberlink/syndicate name = "Cybersun Cybernetics Access System" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL_LINK /obj/item/organ/internal/cyberimp/cyberlink/admin diff --git a/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/weapons.dm b/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/weapons.dm index 18431719938e..e565591cbd44 100644 --- a/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/weapons.dm +++ b/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/weapons.dm @@ -43,6 +43,7 @@ name = "arm-mounted energy blade" desc = "An illegal and highly dangerous cybernetic implant that can project a deadly blade of concentrated energy." items_to_create = list(/obj/item/melee/energy/blade/hardlight) + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL /obj/item/organ/internal/cyberimp/arm/item_set/medibeam @@ -95,6 +96,7 @@ name = "A.R.A.S.A.K.A. mantis blade implants" desc = "Modernized mantis blade designed coined by Tiger operatives, much sharper blade with energy actuators makes it a much deadlier weapon." items_to_create = list(/obj/item/mantis_blade/syndicate) + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL /obj/item/organ/internal/cyberimp/arm/item_set/syndie_mantis/l @@ -104,10 +106,11 @@ 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) - encode_info = AUGMENT_SYNDICATE_LEVEL icon = 'monkestation/code/modules/cybernetics/icons/implants.dmi' icon_state = "razorwire" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN + encode_info = AUGMENT_SYNDICATE_LEVEL + items_to_create = list(/obj/item/melee/razorwire) visual_implant = TRUE bodypart_overlay = /datum/bodypart_overlay/simple/razorwire diff --git a/monkestation/code/modules/cybernetics/augments/arm_augments/unsorted.dm b/monkestation/code/modules/cybernetics/augments/arm_augments/unsorted.dm index 633a8623ee4b..1cf2fba3a5cb 100644 --- a/monkestation/code/modules/cybernetics/augments/arm_augments/unsorted.dm +++ b/monkestation/code/modules/cybernetics/augments/arm_augments/unsorted.dm @@ -204,6 +204,7 @@ update_hud_elements() /obj/item/organ/internal/cyberimp/arm/ammo_counter/syndicate + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL /obj/item/organ/internal/cyberimp/arm/cooler diff --git a/monkestation/code/modules/cybernetics/augments/chest_augments.dm b/monkestation/code/modules/cybernetics/augments/chest_augments.dm index 105f50750292..9a43ea02b05f 100644 --- a/monkestation/code/modules/cybernetics/augments/chest_augments.dm +++ b/monkestation/code/modules/cybernetics/augments/chest_augments.dm @@ -16,10 +16,11 @@ /obj/item/organ/internal/cyberimp/chest/sandevistan name = "Militech Apogee Sandevistan" desc = "This model of Sandevistan doesn't exist, at least officially. Off the record, there's gossip of secret Militech Lunar labs producing covert cyberware. It was never meant to be mass produced, but an army would only really need a few pieces like this one to dominate their enemy." - encode_info = AUGMENT_SYNDICATE_LEVEL + icon = 'monkestation/code/modules/cybernetics/icons/implants.dmi' icon_state = "sandy" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN + encode_info = AUGMENT_SYNDICATE_LEVEL actions_types = list(/datum/action/item_action/organ_action/sandy) - icon = 'monkestation/code/modules/cybernetics/icons/implants.dmi' COOLDOWN_DECLARE(in_the_zone) /// The bodypart overlay datum we should apply to whatever mob we are put into @@ -60,7 +61,7 @@ /obj/item/organ/internal/cyberimp/chest/sandevistan/refurbished name = "refurbished sandevistan" desc = "The branding has been scratched off of these and it looks hastily put together." - + organ_flags = parent_type::organ_flags & ~ORGAN_HIDDEN cooldown_time = 65 SECONDS /obj/item/organ/internal/cyberimp/chest/sandevistan/refurbished/ui_action_click(mob/user, actiontype) @@ -94,9 +95,10 @@ /obj/item/organ/internal/cyberimp/chest/chemvat name = "R.A.G.E. chemical system" desc = "Extremely dangerous system that fills the user with a mix of potent drugs." - encode_info = AUGMENT_SYNDICATE_LEVEL - icon_state = "chemvat_back_held" icon = 'monkestation/code/modules/cybernetics/icons/implants_onmob.dmi' + icon_state = "chemvat_back_held" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN + encode_info = AUGMENT_SYNDICATE_LEVEL var/obj/item/clothing/mask/chemvat/forced var/obj/item/chemvat_tank/forced_tank @@ -566,6 +568,7 @@ desc = "Short for Complementary Combat Maneuvering System, it processes spinal nerve signals and enacts forced complementary maneuvers on the opposite side of the user's body when they attack. In layman's terms, it lets you dual wield." icon = 'monkestation/code/modules/cybernetics/icons/implants.dmi' icon_state = "ccms" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL visual_implant = TRUE diff --git a/monkestation/code/modules/cybernetics/augments/leg_augments/chemplants.dm b/monkestation/code/modules/cybernetics/augments/leg_augments/chemplants.dm index fbe3d4139d4b..753702165f0e 100644 --- a/monkestation/code/modules/cybernetics/augments/leg_augments/chemplants.dm +++ b/monkestation/code/modules/cybernetics/augments/leg_augments/chemplants.dm @@ -76,6 +76,7 @@ name = "deep-vein emergency morale rejuvenator" desc = "Dangerous implant used by the syndicate to reinforce their assault forces that go on suicide missions." implant_color = "#74942a" + organ_flags = parent_type::organ_flags | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL reagent_list = list( /datum/reagent/determination = 5, diff --git a/monkestation/code/modules/cybernetics/implant_items/autosurgeons.dm b/monkestation/code/modules/cybernetics/implant_items/autosurgeons.dm index 25ea9301033e..00ac08ff8cb5 100644 --- a/monkestation/code/modules/cybernetics/implant_items/autosurgeons.dm +++ b/monkestation/code/modules/cybernetics/implant_items/autosurgeons.dm @@ -1,3 +1,9 @@ +/obj/item/autosurgeon/organ/syndicate/Initialize(mapload) + . = ..() + if(istype(stored_organ, /obj/item/organ/internal/cyberimp)) + var/obj/item/organ/internal/cyberimp/starting_implant = stored_organ + starting_implant.organ_flags |= ORGAN_HIDDEN + /obj/item/autosurgeon/organ/syndicate/ammo_counter starting_organ = /obj/item/organ/internal/cyberimp/arm/ammo_counter/syndicate diff --git a/monkestation/code/modules/datums/components/nanites.dm b/monkestation/code/modules/datums/components/nanites.dm index 394b9f563612..7e099b131f9d 100644 --- a/monkestation/code/modules/datums/components/nanites.dm +++ b/monkestation/code/modules/datums/components/nanites.dm @@ -249,8 +249,7 @@ ///Updates the nanite volume bar visible in diagnostic HUDs /datum/component/nanites/proc/set_nanite_bar(remove = FALSE) var/image/holder = host_mob.hud_list[DIAG_NANITE_FULL_HUD] - var/icon/I = icon(host_mob.icon, host_mob.icon_state, host_mob.dir) - holder.pixel_y = I.Height() - world.icon_size + holder.pixel_y = host_mob.get_cached_height() - world.icon_size holder.icon_state = null if(remove || stealth) return //bye icon diff --git a/monkestation/code/modules/events/brand_intelligence.dm b/monkestation/code/modules/events/brand_intelligence.dm index 232f1e70c54d..087d2394675f 100644 --- a/monkestation/code/modules/events/brand_intelligence.dm +++ b/monkestation/code/modules/events/brand_intelligence.dm @@ -241,4 +241,3 @@ #undef MAX_INFECTION_DISTANCE #undef MIN_INFECTION_DISTANCE -z diff --git a/monkestation/code/modules/ghost_players/ghost_player.dm b/monkestation/code/modules/ghost_players/ghost_player.dm index 5862f5e2ca28..59db5a5284ae 100644 --- a/monkestation/code/modules/ghost_players/ghost_player.dm +++ b/monkestation/code/modules/ghost_players/ghost_player.dm @@ -51,7 +51,10 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) if(. && stat > SOFT_CRIT) life_or_death() -/mob/living/carbon/human/ghost/proc/disolve_ghost() +/mob/living/carbon/human/ghost/final_checkout(obj/item/suicide_tool, apply_damage) + dissolve_and_ghost() + +/mob/living/carbon/human/ghost/proc/dissolve_and_ghost() var/mob/dead/observer/new_ghost = ghostize(can_reenter_corpse = FALSE) if(!QDELETED(new_ghost)) new_ghost.key = old_key @@ -64,7 +67,7 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) if(dueling) linked_button?.end_duel(src) if(QDELING(src) || QDELETED(client) || client.is_afk()) - disolve_ghost() + dissolve_and_ghost() else move_to_ghostspawn() revive(full_heal_flags = ADMIN_HEAL_ALL) @@ -88,7 +91,7 @@ GLOBAL_VAR_INIT(disable_ghost_spawning, FALSE) return if(living_owner.revive_prepped) return TRUE - living_owner.disolve_ghost() + living_owner.dissolve_and_ghost() return TRUE diff --git a/monkestation/code/modules/loadouts/items/plushies.dm b/monkestation/code/modules/loadouts/items/plushies.dm index c6a0420b393e..ae6b236f51f4 100644 --- a/monkestation/code/modules/loadouts/items/plushies.dm +++ b/monkestation/code/modules/loadouts/items/plushies.dm @@ -108,11 +108,11 @@ GLOBAL_LIST_INIT(loadout_plushies, generate_loadout_items(/datum/loadout_item/pl /datum/loadout_item/plushies/durrcell name = "Durrcell Plush" item_path = /obj/item/toy/plush/durrcell - +/* /datum/loadout_item/plushies/Eeble name = "Eeble Plushie" item_path = /obj/item/toy/plush/Eeble - +*/ /datum/loadout_item/plushies/big_bad_wolf name = "Big And Will Be Bad Wolf Plushie" item_path = /obj/item/toy/plush/lobotomy/big_bad_wolf diff --git a/monkestation/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm b/monkestation/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm new file mode 100644 index 000000000000..1083c4474101 --- /dev/null +++ b/monkestation/code/modules/mapfluff/ruins/spaceruin_code/oldstation.dm @@ -0,0 +1,4 @@ +/obj/item/paper/fluff/ruins/oldstation/distro_guide + name = "Reminder - air distrubtion." + default_raw_text = "Reminder!

Blue on layer 4 is for air.
Red on layer 2 is for the scrubbers.

\ + The dispenser prints our pipes with this in mind so they dont get accidentally connected. Doesn't matter if 'purple is a pretty colour', it won't connect." diff --git a/monkestation/code/modules/mentor/mentor_pm.dm b/monkestation/code/modules/mentor/mentor_pm.dm index f886844b972f..a7cbed53de1f 100644 --- a/monkestation/code/modules/mentor/mentor_pm.dm +++ b/monkestation/code/modules/mentor/mentor_pm.dm @@ -146,7 +146,7 @@ html = "Mentor PM to-[key_name_mentor(chosen_client, chosen_client, TRUE, FALSE)]: [msg]", confidential = TRUE) var/datum/request/request = GLOB.mentor_requests.requests[chosen_client.ckey][length(GLOB.mentor_requests.requests[chosen_client.ckey])] - SSplexora.mticket_pm(request, src.mob, chosen_client.mob, msg) + SSplexora.mticket_pm(request, src.mob, chosen_client.mob, html_decode(msg)) diff --git a/monkestation/code/modules/mob/inventory.dm b/monkestation/code/modules/mob/inventory.dm new file mode 100644 index 000000000000..fb62f87cd4bf --- /dev/null +++ b/monkestation/code/modules/mob/inventory.dm @@ -0,0 +1,14 @@ +/** + * Drops and deletes all items in the mob's inventory. + * + * Argument(s): + * * Optional - include_pockets (TRUE/FALSE), whether or not to also clear items in their pockets and suit storage. + * * Optional - include_held_items (TRUE/FALSE), whether or not to also clear any held items. + */ +/mob/living/proc/clear_inventory(include_pockets = TRUE, include_held_items = TRUE) + var/list/items = get_equipped_items(include_pockets) + if(include_held_items) + items |= held_items + for(var/item in items) + dropItemToGround(item, force = TRUE, silent = TRUE, invdrop = FALSE) + qdel(item) diff --git a/monkestation/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm b/monkestation/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm new file mode 100644 index 000000000000..efd15941148d --- /dev/null +++ b/monkestation/code/modules/mob/living/basic/bots/cleanbot/cleanbot.dm @@ -0,0 +1,2 @@ +/mob/living/basic/bot/cleanbot/medbay/jr + name = "Scrubs Junior, PA" diff --git a/monkestation/code/modules/mob/living/basic/pets/cat.dm b/monkestation/code/modules/mob/living/basic/pets/cat.dm index 2777d3c5b02f..44fb0356e29b 100644 --- a/monkestation/code/modules/mob/living/basic/pets/cat.dm +++ b/monkestation/code/modules/mob/living/basic/pets/cat.dm @@ -2,3 +2,8 @@ //. = ..() worn_slot_flags = ITEM_SLOT_HEAD head_icon = 'monkestation/icons/mob/pets_held.dmi' + +/mob/living/simple_animal/hostile/syndicat + //. = ..() + worn_slot_flags = ITEM_SLOT_HEAD + head_icon = 'monkestation/icons/mob/pets_held.dmi' diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldchef.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldchef.dm new file mode 100644 index 000000000000..82a78c9d9456 --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldchef.dm @@ -0,0 +1,47 @@ + +//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. +/obj/effect/mob_spawn/ghost_role/human/oldchef + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a chef uniform underneath the built up ice. The machine is attempting to wake up its occupant." + prompt_name = "a chef" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + mob_species = /datum/species/human + you_are_text = "You are a chef working for Nanotrasen, stationed onboard a state of the art research station." + flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. \ + The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + important_text = "Work as a team with your fellow survivors and do not abandon them." + outfit = /datum/outfit/oldchef + spawner_job_path = /datum/job/ancient_crew + +/obj/effect/mob_spawn/ghost_role/human/oldchef/Destroy() + new/obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/datum/outfit/oldchef + name = "Ancient Chef" + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/chef + uniform = /obj/item/clothing/under/rank/civilian/chef + suit = /obj/item/clothing/suit/toggle/chef + ears = /obj/item/radio/headset/headset_old + head = /obj/item/clothing/head/utility/chefhat + mask = /obj/item/clothing/mask/fakemoustache/italian + l_pocket = /obj/item/sharpener + belt = /obj/item/knife/kitchen + +/datum/outfit/oldchef/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldcmo.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldcmo.dm new file mode 100644 index 000000000000..8c115f5aefc4 --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldcmo.dm @@ -0,0 +1,47 @@ + +//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. +/obj/effect/mob_spawn/ghost_role/human/oldcmo + name = "old command cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a Chief Medical Officer's uniform underneath the built up ice. The machine is attempting to wake up its occupant." + prompt_name = "the Chief Medical Officer" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + mob_species = /datum/species/human + you_are_text = "You are a Chief Medical Officer working for Nanotrasen, stationed onboard a state of the art research station." + flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. \ + The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + important_text = "Work as a team with your fellow survivors and do not abandon them. You are expected to be familiar with Old station for this role." + outfit = /datum/outfit/oldcmo + spawner_job_path = /datum/job/ancient_crew + +/obj/effect/mob_spawn/ghost_role/human/oldcmo/Destroy() + new/obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/datum/outfit/oldcmo + name = "Ancient Chief Medical Officer" + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/cmo + uniform = /obj/item/clothing/under/rank/medical/chief_medical_officer/turtleneck + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/flashlight/pen/paramedic + r_pocket = /obj/item/pinpointer/crew + implants = list(/obj/item/implant/mindshield) + skillchips = list(/obj/item/skillchip/entrails_reader) + ears = /obj/item/radio/headset/heads/headset_old + +/datum/outfit/oldcmo/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldeng.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldeng.dm new file mode 100644 index 000000000000..bb92cd6a27f4 --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldeng.dm @@ -0,0 +1,21 @@ +/datum/outfit/oldeng + ears = /obj/item/radio/headset/headset_old + skillchips = /obj/item/skillchip/job/engineer + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/eng + belt = /obj/item/storage/belt/utility/full/engi + +/datum/outfit/oldeng/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldexplorer.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldexplorer.dm new file mode 100644 index 000000000000..1837f80f2827 --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldexplorer.dm @@ -0,0 +1,47 @@ + +//Ancient cryogenic sleepers. Players become NT crewmen from a hundred year old space station, now on the verge of collapse. +/obj/effect/mob_spawn/ghost_role/human/oldexplorer + name = "old cryogenics pod" + desc = "A humming cryo pod. You can barely recognise a explorer uniform underneath the built up ice. The machine is attempting to wake up its occupant." + prompt_name = "a explorer" + icon = 'icons/obj/machines/sleeper.dmi' + icon_state = "sleeper" + mob_species = /datum/species/human + you_are_text = "You are a explorer working for Nanotrasen, stationed onboard a state of the art research station." + flavour_text = "You vaguely recall rushing into a cryogenics pod due to an oncoming radiation storm. \ + The last thing you remember is the station's Artificial Program telling you that you would only be asleep for eight hours. As you open \ + your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + important_text = "Work as a team with your fellow survivors and do not abandon them." + outfit = /datum/outfit/oldexplorer + spawner_job_path = /datum/job/ancient_crew + +/obj/effect/mob_spawn/ghost_role/human/oldexplorer/Destroy() + new/obj/structure/showcase/machinery/oldpod/used(drop_location()) + return ..() + +/datum/outfit/oldexplorer + name = "Ancient Explorer" + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/explorer + uniform = /obj/item/clothing/under/rank/cargo/miner + shoes = /obj/item/clothing/shoes/workboots/mining + gloves = /obj/item/clothing/gloves/color/black + ears = /obj/item/radio/headset/headset_old + mask = /obj/item/clothing/mask/gas/explorer + belt = /obj/item/pickaxe/drill + l_pocket = /obj/item/gps + +/datum/outfit/oldexplorer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsci.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsci.dm new file mode 100644 index 000000000000..31ab7708aed9 --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsci.dm @@ -0,0 +1,19 @@ +/datum/outfit/oldsci + ears = /obj/item/radio/headset/headset_old + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/sci + +/datum/outfit/oldsci/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsec.dm b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsec.dm new file mode 100644 index 000000000000..adc89b56fb2f --- /dev/null +++ b/monkestation/code/modules/mob_spawn/ghost_roles/space_roles/oldsec.dm @@ -0,0 +1,21 @@ +/datum/outfit/oldsec + ears = /obj/item/radio/headset/headset_old/alt + implants = list(/obj/item/implant/mindshield) + id = /obj/item/card/id/advanced/old + id_trim = /datum/id_trim/away/old/sec + belt = /obj/item/gun/energy/laser/retro/old + +/datum/outfit/oldsec/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + if(visualsOnly) + return + + var/obj/item/radio/headset/R = H.ears + R.set_frequency(FREQ_UNCOMMON) + R.freqlock = RADIO_FREQENCY_LOCKED + R.independent = TRUE + var/obj/item/card/id/W = H.wear_id + if(W) + W.registered_name = H.real_name + W.update_label() + W.update_icon() + ..() diff --git a/monkestation/code/modules/mod/mod_theme.dm b/monkestation/code/modules/mod/mod_theme.dm new file mode 100644 index 000000000000..b0f15766bf75 --- /dev/null +++ b/monkestation/code/modules/mod/mod_theme.dm @@ -0,0 +1,2 @@ +/datum/mod_theme/enchanted/no_antimagic + inbuilt_modules = list() diff --git a/monkestation/code/modules/mod/mod_types.dm b/monkestation/code/modules/mod/mod_types.dm index fbe768321cab..c590aab39712 100644 --- a/monkestation/code/modules/mod/mod_types.dm +++ b/monkestation/code/modules/mod/mod_types.dm @@ -15,3 +15,12 @@ /obj/item/mod/module/stealth/ninja, /obj/item/mod/module/jetpack/advanced, ) + +/obj/item/mod/control/pre_equipped/enchanted/no_antimagic + theme = /datum/mod_theme/enchanted/no_antimagic + applied_core = /obj/item/mod/core/infinite + applied_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/energy_shield/wizard, + /obj/item/mod/module/emp_shield/advanced, + ) diff --git a/monkestation/code/modules/ranching/satyr/abilities.dm b/monkestation/code/modules/ranching/satyr/abilities.dm index 9f3de529d58d..b3aeeb6c752e 100644 --- a/monkestation/code/modules/ranching/satyr/abilities.dm +++ b/monkestation/code/modules/ranching/satyr/abilities.dm @@ -1,6 +1,7 @@ /datum/action/cooldown/mob_cooldown/dash/headbutt name = "Headbutt" desc = "Dashes 3 tiles in a direction headbutting anyone in the last tile. (You can overshoot your dash!)" + check_flags = AB_CHECK_INCAPACITATED | AB_CHECK_HANDS_BLOCKED | AB_CHECK_CONSCIOUS | AB_CHECK_IMMOBILE cooldown_time = 1 MINUTES dash_range = 3 diff --git a/monkestation/code/modules/research/designs/autolathe/materials.dm b/monkestation/code/modules/research/designs/autolathe/materials.dm new file mode 100644 index 000000000000..211d394934f9 --- /dev/null +++ b/monkestation/code/modules/research/designs/autolathe/materials.dm @@ -0,0 +1,11 @@ +/datum/design/bronze + name = "Bronze" + id = "bronze" + build_type = AUTOLATHE + materials = list(/datum/material/bronze = SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/stack/sheet/bronze + category = list( + RND_CATEGORY_INITIAL, + RND_CATEGORY_CONSTRUCTION + RND_SUBCATEGORY_CONSTRUCTION_MATERIALS, + ) + maxstack = 50 diff --git a/monkestation/code/modules/research/rdconsole.dm b/monkestation/code/modules/research/rdconsole.dm new file mode 100644 index 000000000000..19c481b6c1af --- /dev/null +++ b/monkestation/code/modules/research/rdconsole.dm @@ -0,0 +1,6 @@ +/obj/machinery/computer/rdconsole/unlocked + locked = FALSE + circuit = /obj/item/circuitboard/computer/rdconsole/unlocked + +/obj/item/circuitboard/computer/rdconsole/unlocked + build_path = /obj/machinery/computer/rdconsole/unlocked diff --git a/monkestation/code/modules/smithing/ipcs/body/internal_organs.dm b/monkestation/code/modules/smithing/ipcs/body/internal_organs.dm index 668a3ce8a262..3a8849a9b783 100644 --- a/monkestation/code/modules/smithing/ipcs/body/internal_organs.dm +++ b/monkestation/code/modules/smithing/ipcs/body/internal_organs.dm @@ -18,7 +18,8 @@ var/mob/living/carbon/human/user_human = brain_owner if(HAS_TRAIT(user_human, TRAIT_REVIVES_BY_HEALING) && user_human.health > SYNTH_BRAIN_WAKE_THRESHOLD) - user_human.revive(FALSE) + if(!HAS_TRAIT(user_human, TRAIT_DEFIB_BLACKLISTED)) + user_human.revive(FALSE) /obj/item/organ/internal/brain/synth/emp_act(severity) // EMP act against the posi, keep the cap far below the organ health . = ..() diff --git a/monkestation/code/modules/smithing/ipcs/surgeries/robot_chest_repair.dm b/monkestation/code/modules/smithing/ipcs/surgeries/robot_chest_repair.dm index 5c4a1b222960..697eb1dd0368 100644 --- a/monkestation/code/modules/smithing/ipcs/surgeries/robot_chest_repair.dm +++ b/monkestation/code/modules/smithing/ipcs/surgeries/robot_chest_repair.dm @@ -90,6 +90,11 @@ target.notify_revival("Someone is trying to reboot your posibrain.", source = target) /datum/surgery_step/finalize_positronic_restoration/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) + if(HAS_TRAIT(target, TRAIT_DEFIB_BLACKLISTED)) + target.emote("buzz") + target.visible_message(span_warning("...[target.p_they()] convulses, then goes offline.")) + return TRUE + if (target.stat < DEAD) target.visible_message(span_notice("...[target] is completely unaffected! Seems like they're already active!")) return FALSE diff --git a/monkestation/code/modules/smithing/oozelings/actions.dm b/monkestation/code/modules/smithing/oozelings/actions.dm index f9442a366d20..4ed04d749891 100644 --- a/monkestation/code/modules/smithing/oozelings/actions.dm +++ b/monkestation/code/modules/smithing/oozelings/actions.dm @@ -171,3 +171,42 @@ else to_chat(owner, span_notice("You fine-tune the electromagnetic signals from your core to be picked up by GPS receivers upon it's rejection.")) core.gps_active = TRUE +/////// +/// MEMBRANE MURMUR SPELL +/// Use your core to attempt to call out for help or attention. +/datum/action/cooldown/membrane_murmur + name = "Membrane Murmur" + desc = "Force your core to pass gasses to make noticable sounds." + button_icon = 'icons/mob/actions/actions_slime.dmi' + button_icon_state = "gel_cocoon" + background_icon_state = "bg_alien" + overlay_icon_state = "bg_alien_border" + + cooldown_time = 25 SECONDS + check_flags = NONE + + var/static/list/possible_cries = list( + "Blorp... glub... help...", + "Glooop... save me...", + "Alone... burbble too quiet...", + "What’s left... of me...?", + "Can’t feel... can’t... think...", + "Plasma... need... plasma...", + "It’s so... quiet...", + ) + +/datum/action/cooldown/membrane_murmur/IsAvailable(feedback = FALSE) + . = ..() + if(.) + var/mob/living/brain/brainmob = owner + if(!istype(brainmob) || !istype(brainmob.loc, /obj/item/organ/internal/brain/slime)) + return FALSE + +/datum/action/cooldown/membrane_murmur/Activate() + . = ..() + var/mob/living/brain/brainmob = owner + if(!istype(brainmob)) + CRASH("[src] cast by non-brainmob [owner?.type || "(null)"]") + var/obj/item/organ/internal/brain/slime/brainitem = brainmob.loc + var/final_cry = brainmob.Ellipsis(pick(possible_cries), chance = 30) + brainitem.say(final_cry, "slime", forced = "[src]", message_range = 2) diff --git a/monkestation/code/modules/smithing/oozelings/body/organs.dm b/monkestation/code/modules/smithing/oozelings/body/organs.dm index 6d91bd2b2c3c..6e33ac028af9 100644 --- a/monkestation/code/modules/smithing/oozelings/body/organs.dm +++ b/monkestation/code/modules/smithing/oozelings/body/organs.dm @@ -69,11 +69,18 @@ var/rebuilt = TRUE var/coredeath = TRUE + var/datum/action/cooldown/membrane_murmur/membrane_mur + /obj/item/organ/internal/brain/slime/Initialize(mapload, mob/living/carbon/organ_owner, list/examine_list) . = ..() + membrane_mur = new /datum/action/cooldown/membrane_murmur() colorize() transform.Scale(2, 2) +/obj/item/organ/internal/brain/slime/Destroy(force) + QDEL_NULL(membrane_mur) + return ..() + /obj/item/organ/internal/brain/slime/examine() . = ..() if(gps_active) @@ -165,6 +172,7 @@ AddComponent(/datum/component/gps, "[victim]'s Core") if(brainmob) + membrane_mur.Grant(brainmob) var/datum/antagonist/changeling/target_ling = brainmob.mind?.has_antag_datum(/datum/antagonist/changeling) if(target_ling) @@ -283,6 +291,7 @@ new_body.visible_message(span_warning("[new_body]'s body fully forms from [new_body.p_their()] core!")) to_chat(owner, span_purple("Your body fully forms from your core!")) + membrane_mur.Remove(brainmob) brainmob?.mind?.transfer_to(new_body) new_body.grab_ghost() transfer_observers_to(new_body) diff --git a/monkestation/code/modules/spells/spell_types/pointed/smite.dm b/monkestation/code/modules/spells/spell_types/pointed/smite.dm index 6ff0c3688d02..fd91f28e19ec 100644 --- a/monkestation/code/modules/spells/spell_types/pointed/smite.dm +++ b/monkestation/code/modules/spells/spell_types/pointed/smite.dm @@ -25,7 +25,7 @@ var/list/heavy_smites = list(/datum/smite/berforate, /datum/smite/bloodless, /datum/smite/boneless, /datum/smite/brain_damage, /datum/smite/bread, /datum/smite/bsa, \ /datum/smite/fireball, /datum/smite/gib, /datum/smite/lightning, /datum/smite/nugget, /datum/smite/puzzgrid, /datum/smite/puzzle) //list of smites that have a low effect on the target - var/list/light_smites = list(/datum/smite/bad_luck, /datum/smite/curse_of_babel, /datum/smite/fake_bwoink, /datum/smite/fat, /datum/smite/ghost_control, /datum/smite/immerse, \ + var/list/light_smites = list(/datum/smite/bad_luck, /datum/smite/fake_bwoink, /datum/smite/fat, /datum/smite/ghost_control, /datum/smite/immerse, \ /datum/smite/knot_shoes, /datum/smite/ocky_icky, /datum/smite/scarify) /datum/action/cooldown/spell/pointed/smite/is_valid_target(atom/cast_on) @@ -61,10 +61,6 @@ var/datum/smite/berforate/shoot_smite = new picked_smite shoot_smite.hatred = "A lot" do_smite(shoot_smite, cast_on) - if(/datum/smite/curse_of_babel) - var/datum/smite/curse_of_babel/babel_smite = new picked_smite - babel_smite.duration = 5 MINUTES - do_smite(babel_smite, cast_on) if(/datum/smite/puzzgrid) var/datum/smite/puzzgrid/puzz_smite = new picked_smite puzz_smite.gib_on_loss = TRUE diff --git a/monkestation/code/modules/store/store_items/plushies.dm b/monkestation/code/modules/store/store_items/plushies.dm index 367ce381d32a..0dff11a0dbab 100644 --- a/monkestation/code/modules/store/store_items/plushies.dm +++ b/monkestation/code/modules/store/store_items/plushies.dm @@ -123,13 +123,13 @@ GLOBAL_LIST_INIT(store_plushies, generate_store_items(/datum/store_item/plushies store_desc = "''Behold, Man''" item_path = /obj/item/toy/plush/durrcell item_cost = 6969 - +/* /datum/store_item/plushies/Eeble name = "Eeble Plush" store_desc = "Eeble is Eeble" item_path = /obj/item/toy/plush/Eeble item_cost = 5000 - +*/ /datum/store_item/plushies/big_bad_wolf name = "Big And Will Be Bad Wolf Plush" store_desc = "" diff --git a/monkestation/code/modules/storytellers/converted_events/_base_event.dm b/monkestation/code/modules/storytellers/converted_events/_base_event.dm index eb21233477a2..70d3d5d5161d 100644 --- a/monkestation/code/modules/storytellers/converted_events/_base_event.dm +++ b/monkestation/code/modules/storytellers/converted_events/_base_event.dm @@ -337,6 +337,8 @@ old_mob.client.prefs.safe_transfer_prefs_to(new_character) new_character.dna.update_dna_identity() old_mob.mind.transfer_to(new_character) + if(old_mob.has_quirk(/datum/quirk/anime)) // stupid special case bc this quirk is basically janky wrapper shitcode around some optional appearance prefs + new_character.add_quirk(/datum/quirk/anime) if(qdel_old_mob) qdel(old_mob) return new_character diff --git a/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm index 8575c81fbd8e..34b66a876ec7 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/clown_operative.dm @@ -1,127 +1,15 @@ -/datum/round_event_control/antagonist/solo/clown_operative +/datum/round_event_control/antagonist/solo/nuclear_operative/clown name = "Roundstart Clown Operative" tags = list(TAG_DESTRUCTIVE, TAG_COMBAT, TAG_TEAM_ANTAG, TAG_EXTERNAL) antag_flag = ROLE_CLOWN_OPERATIVE antag_datum = /datum/antagonist/nukeop/clownop - typepath = /datum/round_event/antagonist/solo/clown_operative - shared_occurence_type = SHARED_HIGH_THREAT - restricted_roles = list( - JOB_AI, - JOB_CAPTAIN, - JOB_NANOTRASEN_REPRESENTATIVE, - JOB_BLUESHIELD, - JOB_CHIEF_ENGINEER, - JOB_CHIEF_MEDICAL_OFFICER, - JOB_CYBORG, - JOB_DETECTIVE, - JOB_HEAD_OF_PERSONNEL, - JOB_HEAD_OF_SECURITY, - JOB_PRISONER, - JOB_RESEARCH_DIRECTOR, - JOB_SECURITY_OFFICER, - JOB_WARDEN, - JOB_BRIG_PHYSICIAN, - ) - base_antags = 3 - maximum_antags = 5 - enemy_roles = list( - JOB_AI, - JOB_CYBORG, - JOB_CAPTAIN, - JOB_BLUESHIELD, - JOB_DETECTIVE, - JOB_HEAD_OF_SECURITY, - JOB_SECURITY_OFFICER, - JOB_SECURITY_ASSISTANT, - JOB_WARDEN, - ) - required_enemies = 5 - // I give up, just there should be enough heads with 35 players... - min_players = 35 - roundstart = TRUE - earliest_start = 0 SECONDS + typepath = /datum/round_event/antagonist/solo/nuclear_operative/clown weight = 1 //these are meant to be very rare max_occurrences = 1 event_icon_state = "flukeops" -/datum/round_event/antagonist/solo/clown_operative - excute_round_end_reports = TRUE - end_when = 60000 /// we will end on our own when revs win - var/static/datum/team/nuclear/nuke_team - var/set_leader = FALSE - var/required_role = ROLE_CLOWN_OPERATIVE - -/datum/round_event/antagonist/solo/clown_operative/setup() - . = ..() - var/obj/machinery/nuclearbomb/syndicate/syndicate_nuke = locate() in GLOB.nuke_list - if(syndicate_nuke) - var/turf/nuke_turf = get_turf(syndicate_nuke) - if(nuke_turf) - new /obj/machinery/nuclearbomb/syndicate/bananium(nuke_turf) - qdel(syndicate_nuke) - -/datum/round_event/antagonist/solo/clown_operative/add_datum_to_mind(datum/mind/antag_mind) - var/mob/living/current_mob = antag_mind.current - SSjob.FreeRole(antag_mind.assigned_role.title) - var/list/items = current_mob.get_equipped_items(TRUE) - current_mob.unequip_everything() - for(var/obj/item/item as anything in items) - qdel(item) - - create_human_mob_copy(get_turf(current_mob), current_mob) - antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/clown_operative)) - antag_mind.special_role = ROLE_CLOWN_OPERATIVE - - var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role) - if(!most_experienced) - most_experienced = antag_mind - - if(!set_leader) - set_leader = TRUE - var/datum/antagonist/nukeop/leader/leader_antag_datum = new() - var/mob/living/carbon/human/leader_mob = most_experienced.current - leader_mob = create_human_mob_copy(get_turf(leader_mob), leader_mob) - nuke_team = leader_antag_datum.nuke_team - most_experienced.add_antag_datum(leader_antag_datum) - leader_mob.equip_species_outfit(/datum/outfit/syndicate/clownop/leader) - - if(antag_mind == most_experienced) - return - - var/datum/antagonist/nukeop/new_op = new antag_datum() - antag_mind.add_antag_datum(new_op) - - -/datum/round_event/antagonist/solo/clown_operative/round_end_report() - var/result = nuke_team.get_result() - switch(result) - if(NUKE_RESULT_FLUKE) - SSticker.mode_result = "loss - syndicate nuked - disk secured" - SSticker.news_report = NUKE_SYNDICATE_BASE - if(NUKE_RESULT_NUKE_WIN) - SSticker.mode_result = "win - syndicate nuke" - SSticker.news_report = STATION_DESTROYED_NUKE - if(NUKE_RESULT_NOSURVIVORS) - SSticker.mode_result = "halfwin - syndicate nuke - did not evacuate in time" - SSticker.news_report = STATION_DESTROYED_NUKE - if(NUKE_RESULT_WRONG_STATION) - SSticker.mode_result = "halfwin - blew wrong station" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_WRONG_STATION_DEAD) - SSticker.mode_result = "halfwin - blew wrong station - did not evacuate in time" - SSticker.news_report = NUKE_MISS - if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD) - SSticker.mode_result = "loss - evacuation - disk secured - syndi team dead" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_CREW_WIN) - SSticker.mode_result = "loss - evacuation - disk secured" - SSticker.news_report = OPERATIVES_KILLED - if(NUKE_RESULT_DISK_LOST) - SSticker.mode_result = "halfwin - evacuation - disk not secured" - SSticker.news_report = OPERATIVE_SKIRMISH - if(NUKE_RESULT_DISK_STOLEN) - SSticker.mode_result = "halfwin - detonation averted" - SSticker.news_report = OPERATIVE_SKIRMISH - else - SSticker.mode_result = "halfwin - interrupted" - SSticker.news_report = OPERATIVE_SKIRMISH +/datum/round_event/antagonist/solo/nuclear_operative/clown + required_role = ROLE_CLOWN_OPERATIVE + job_type = /datum/job/clown_operative + antag_type = /datum/antagonist/nukeop/clownop + leader_antag_type = /datum/antagonist/nukeop/leader/clownop diff --git a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm index f9885a0fdbbe..1da80e43f98f 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/nuclear_operative.dm @@ -46,49 +46,34 @@ /datum/round_event/antagonist/solo/nuclear_operative excute_round_end_reports = TRUE - var/static/datum/team/nuclear/nuke_team - var/set_leader = FALSE var/required_role = ROLE_NUCLEAR_OPERATIVE - var/datum/mind/most_experienced + var/job_type = /datum/job/nuclear_operative + var/antag_type = /datum/antagonist/nukeop + var/leader_antag_type = /datum/antagonist/nukeop/leader + var/datum/team/nuclear/nuke_team -/datum/round_event/antagonist/solo/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind) - if(most_experienced == antag_mind) - return +/datum/round_event/antagonist/solo/nuclear_operative/start() + var/datum/mind/most_experienced = get_most_experienced(setup_minds, required_role) || setup_minds[1] + prepare(most_experienced) + var/datum/antagonist/nukeop/leader/leader = most_experienced.add_antag_datum(leader_antag_type) + nuke_team = leader.nuke_team + for(var/datum/mind/antag_mind as anything in setup_minds - most_experienced) + prepare(antag_mind) + var/datum/antagonist/nukeop/op = new antag_type + op.nuke_team = nuke_team + antag_mind.add_antag_datum(op) + +/// Frees the target mind's job slot, clears and deletes all their items, creates a fresh body for them, and sets +/datum/round_event/antagonist/solo/nuclear_operative/proc/prepare(datum/mind/antag_mind) var/mob/living/current_mob = antag_mind.current SSjob.FreeRole(antag_mind.assigned_role.title) - var/list/items = current_mob.get_equipped_items(TRUE) - current_mob.unequip_everything() - for(var/obj/item/item as anything in items) - qdel(item) - + current_mob.clear_inventory() create_human_mob_copy(get_turf(current_mob), current_mob) - if(!most_experienced) - most_experienced = get_most_experienced(setup_minds, required_role) || antag_mind - - if(!set_leader) - set_leader = TRUE - if(antag_mind != most_experienced) - var/mob/living/leader_mob = most_experienced.current - SSjob.FreeRole(most_experienced.assigned_role.title) - var/list/leader_items = leader_mob.get_equipped_items(TRUE) - leader_mob.unequip_everything() - for(var/obj/item/item as anything in leader_items) - qdel(item) - leader_mob = create_human_mob_copy(get_turf(leader_mob), leader_mob) - most_experienced.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) - most_experienced.special_role = ROLE_NUCLEAR_OPERATIVE - var/datum/antagonist/nukeop/leader/leader_antag_datum = most_experienced.add_antag_datum(/datum/antagonist/nukeop/leader) - nuke_team = leader_antag_datum.nuke_team - - if(antag_mind == most_experienced) - return - - antag_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nuclear_operative)) - antag_mind.special_role = ROLE_NUCLEAR_OPERATIVE - - var/datum/antagonist/nukeop/new_op = new antag_datum() - antag_mind.add_antag_datum(new_op) + antag_mind.set_assigned_role(SSjob.GetJobType(job_type)) + antag_mind.special_role = required_role +/datum/round_event/antagonist/solo/nuclear_operative/add_datum_to_mind(datum/mind/antag_mind) + CRASH("this should not be called") /datum/round_event/antagonist/solo/nuclear_operative/round_end_report() var/result = nuke_team.get_result() diff --git a/monkestation/code/modules/syndicate_ghostroles/_base.dm b/monkestation/code/modules/syndicate_ghostroles/_base.dm new file mode 100644 index 000000000000..b3976b006b6c --- /dev/null +++ b/monkestation/code/modules/syndicate_ghostroles/_base.dm @@ -0,0 +1,8 @@ +/obj/effect/mob_spawn/ghost_role/human/lavaland_syndicate/special(mob/living/new_spawn) + . = ..() + to_chat(new_spawn, "Code Phrases: [span_blue(jointext(GLOB.syndicate_code_phrase, ", "))]") + to_chat(new_spawn, "Code Responses: [span_red("[jointext(GLOB.syndicate_code_response, ", ")]")]") + new_spawn.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_phrase_regex, "blue") + new_spawn.AddComponent(/datum/component/codeword_hearing, GLOB.syndicate_code_response_regex, "red") + new_spawn.add_mob_memory(/datum/memory/key/codewords) + new_spawn.add_mob_memory(/datum/memory/key/codewords/responses) diff --git a/monkestation/code/modules/trading/unusual_effects/animation_housing/bloody.dm b/monkestation/code/modules/trading/unusual_effects/animation_housing/bloody.dm new file mode 100644 index 000000000000..4da3e79a0aba --- /dev/null +++ b/monkestation/code/modules/trading/unusual_effects/animation_housing/bloody.dm @@ -0,0 +1,29 @@ +/datum/component/particle_spewer/bloodydrip + unusual_description = "exsanguinating" + icon_file = 'icons/mob/effects/bleed_overlays.dmi' + particle_state = "head_2" + burst_amount = 1 + duration = 6 SECONDS + random_bursts = TRUE + spawn_interval = 4 SECONDS + +/datum/component/particle_spewer/bloodydrip/animate_particle(obj/effect/abstract/particle/spawned) + var/chance = rand(1, 12) + switch(chance) + if(1 to 2) + spawned.icon_state = "head_2" + if(3 to 4) + spawned.icon_state = "l_leg_2" + if(5 to 6) + spawned.icon_state = "r_leg_2" + if(7 to 8) + spawned.icon_state = "r_arm_2" + if(9 to 10) + spawned.icon_state = "l_arm_2" + else + spawned.icon_state = "chest_2" + + spawned.layer = ABOVE_MOB_LAYER + spawned.pixel_y -= 12 + . = ..() + diff --git a/monkestation/code/modules/virology/disease/symptom_varients/base.dm b/monkestation/code/modules/virology/disease/symptom_varients/base.dm index 98908388dcfb..e42fec75ce8f 100644 --- a/monkestation/code/modules/virology/disease/symptom_varients/base.dm +++ b/monkestation/code/modules/virology/disease/symptom_varients/base.dm @@ -51,6 +51,7 @@ return FALSE host_symptom.run_effect(host_disease.affected_mob, host_disease) COOLDOWN_START(src, host_cooldown, cooldown_time) + return TRUE /datum/symptom_varient/proc/Copy(datum/symptom/new_symp) return new type(new_symp) diff --git a/monkestation/code/modules/virology/disease/symptom_varients/bluespace.dm b/monkestation/code/modules/virology/disease/symptom_varients/bluespace.dm index 1535df0d293e..e4f302d75da0 100644 --- a/monkestation/code/modules/virology/disease/symptom_varients/bluespace.dm +++ b/monkestation/code/modules/virology/disease/symptom_varients/bluespace.dm @@ -1,4 +1,4 @@ -GLOBAL_LIST_INIT(bluespace_varient_list, list()) +GLOBAL_LIST_EMPTY_TYPED(bluespace_varient_list, /datum/symptom_varient/bluespace) /datum/symptom_varient/bluespace name = "Quantumly Entangled" @@ -10,11 +10,12 @@ GLOBAL_LIST_INIT(bluespace_varient_list, list()) var/bluespace_id = 0 var/static/last_bluespace_id = 0 -/datum/symptom_varient/bluespace/New(datum/symptom/host) +/datum/symptom_varient/bluespace/New(datum/symptom/host, bluespace_id) . = ..() GLOB.bluespace_varient_list += src - last_bluespace_id++ - bluespace_id = last_bluespace_id + if(isnull(bluespace_id)) + bluespace_id = last_bluespace_id++ + src.bluespace_id = bluespace_id /datum/symptom_varient/bluespace/Destroy(force) GLOB.bluespace_varient_list -= src @@ -24,15 +25,11 @@ GLOBAL_LIST_INIT(bluespace_varient_list, list()) . = ..() RegisterSignal(host_symptom, COMSIG_SYMPTOM_TRIGGER, PROC_REF(propagate)) -/datum/symptom_varient/bluespace/proc/propagate() - for(var/datum/symptom_varient/bluespace/bluespace as anything in GLOB.bluespace_varient_list) - if(bluespace_id != bluespace.bluespace_id) - continue - COOLDOWN_START(bluespace, host_cooldown, cooldown_time) +/datum/symptom_varient/bluespace/Copy(datum/symptom/new_symp) + return new /datum/symptom_varient/bluespace(new_symp, bluespace_id) +/datum/symptom_varient/bluespace/proc/propagate() for(var/datum/symptom_varient/bluespace/bluespace as anything in GLOB.bluespace_varient_list) - if(bluespace_id != bluespace.bluespace_id) - continue - if(!bluespace.host_disease) + if(QDELETED(bluespace) || bluespace_id != bluespace.bluespace_id) continue - bluespace.host_symptom.run_effect(bluespace.host_disease.return_parent(), bluespace.host_disease) + bluespace.trigger_symptom() diff --git a/monkestation/code/modules/virology/disease/symptom_varients/recursive.dm b/monkestation/code/modules/virology/disease/symptom_varients/recursive.dm index 530f46aef0ab..8964be62b117 100644 --- a/monkestation/code/modules/virology/disease/symptom_varients/recursive.dm +++ b/monkestation/code/modules/virology/disease/symptom_varients/recursive.dm @@ -17,10 +17,9 @@ UnregisterSignal(host_symptom, COMSIG_SYMPTOM_TRIGGER) /datum/symptom_varient/recursive/proc/start_chain() - trigger_symptom() - - addtimer(CALLBACK(src, PROC_REF(trigger)), 2 SECONDS) - addtimer(CALLBACK(src, PROC_REF(trigger)), 4 SECONDS) + if(trigger_symptom()) + addtimer(CALLBACK(src, PROC_REF(trigger)), 2 SECONDS, TIMER_DELETE_ME) + addtimer(CALLBACK(src, PROC_REF(trigger)), 4 SECONDS, TIMER_DELETE_ME) /datum/symptom_varient/recursive/proc/trigger() host_symptom.run_effect(host_disease.affected_mob, host_disease) diff --git a/monkestation/code/modules/virology/disease/symtoms/_symptom.dm b/monkestation/code/modules/virology/disease/symtoms/_symptom.dm index 23764bd1bc00..6cde395c57e4 100644 --- a/monkestation/code/modules/virology/disease/symtoms/_symptom.dm +++ b/monkestation/code/modules/virology/disease/symtoms/_symptom.dm @@ -32,6 +32,9 @@ var/datum/symptom_varient/attached_varient // This is our attached varient used for updating desc and Symptom copy code. +/datum/symptom/Destroy(force) + QDEL_NULL(attached_varient) + return ..() /datum/symptom/proc/minormutate() if (prob(20)) diff --git a/monkestation/code/modules/virology/disease/symtoms/helpful/plasma_heal.dm b/monkestation/code/modules/virology/disease/symtoms/helpful/plasma_heal.dm index e03d47862812..66ac164d47b3 100644 --- a/monkestation/code/modules/virology/disease/symtoms/helpful/plasma_heal.dm +++ b/monkestation/code/modules/virology/disease/symtoms/helpful/plasma_heal.dm @@ -24,8 +24,9 @@ /datum/symptom/plasma_heal/first_activate(mob/living/carbon/mob, datum/disease/advanced/disease) . = ..() + if(!HAS_TRAIT(mob, TRAIT_PLASMA_LOVER_METABOLISM)) + to_chat(mob, span_notice("You suddenly love plasma.")) ADD_TRAIT(mob, TRAIT_PLASMA_LOVER_METABOLISM, type) - to_chat(mob, span_notice("You suddenly love plasma.")) /datum/symptom/plasma_heal/side_effect(mob/living/mob) . = ..() diff --git a/monkestation/code/modules/virology/machines/incubator.dm b/monkestation/code/modules/virology/machines/incubator.dm index b62e38106f2b..56521b843c8c 100644 --- a/monkestation/code/modules/virology/machines/incubator.dm +++ b/monkestation/code/modules/virology/machines/incubator.dm @@ -20,7 +20,7 @@ idle_power_usage = 100 active_power_usage = 200 - // Contains instances of /dish_incubator_dish. + // Contains instances of /datum/dish_incubator_dish. var/list/dish_data = list(null, null, null) var/on = FALSE @@ -90,7 +90,7 @@ if (!user.transferItemToLoc(VD, src)) return - var/dish_incubator_dish/dish_datum = new + var/datum/dish_incubator_dish/dish_datum = new dish_datum.dish = VD dish_data[slot] = dish_datum @@ -108,7 +108,7 @@ if ("power") on = !on if (on) - for (var/dish_incubator_dish/dish_datum in dish_data) + for (var/datum/dish_incubator_dish/dish_datum in dish_data) if (dish_datum.dish.contained_virus) dish_datum.dish.contained_virus.log += "
[ROUND_TIME()] Incubation started by [key_name(usr)]" @@ -120,7 +120,7 @@ if (slot == null || slot < 1 || slot > dish_data.len) return TRUE - var/dish_incubator_dish/dish_datum = dish_data[slot] + var/datum/dish_incubator_dish/dish_datum = dish_data[slot] if (dish_datum == null) return TRUE @@ -154,7 +154,7 @@ if (slot == null || slot < 1 || slot > dish_data.len) return TRUE - var/dish_incubator_dish/dish_datum = dish_data[slot] + var/datum/dish_incubator_dish/dish_datum = dish_data[slot] if (dish_datum == null) return TRUE @@ -166,7 +166,7 @@ if (slot == null || slot < 1 || slot > dish_data.len) return TRUE - var/dish_incubator_dish/dish_datum = dish_data[slot] + var/datum/dish_incubator_dish/dish_datum = dish_data[slot] if (dish_datum == null) return TRUE @@ -176,7 +176,7 @@ var/slot = text2num(params["slot"]) if(slot == null || slot < 1 || slot > dish_data.len) return TRUE - var/dish_incubator_dish/dish_datum = dish_data[slot] + var/datum/dish_incubator_dish/dish_datum = dish_data[slot] if (dish_datum == null) return TRUE var/stage_to_focus = input(usr, "Choose a stage to focus on. This will block symptoms from other stages from being mutated. Input 0 to disable effect focusing.", "Choose a stage.") as num @@ -195,7 +195,7 @@ if (machine_stat & (NOPOWER)) to_chat(user, span_notice("Deprived of power, \the [src] is unresponsive.")) for (var/i in 1 to dish_data.len) - var/dish_incubator_dish/dish_datum = dish_data[i] + var/datum/dish_incubator_dish/dish_datum = dish_data[i] if (dish_datum == null) continue @@ -231,7 +231,7 @@ data["dishes"] = dish_ui_data for (var/i = 1 to dish_data.len) - var/dish_incubator_dish/dish_datum = dish_data[i] + var/datum/dish_incubator_dish/dish_datum = dish_data[i] var/list/dish_ui_datum = list() // tfw no linq dish_ui_data[++dish_ui_data.len] = dish_ui_datum @@ -268,7 +268,7 @@ if (on) use_power = ACTIVE_POWER_USE - for (var/dish_incubator_dish/dish_datum in dish_data) + for (var/datum/dish_incubator_dish/dish_datum in dish_data) dish_datum.dish.incubate(mutatechance, growthrate, effect_focus) else use_power = IDLE_POWER_USE @@ -277,7 +277,7 @@ /obj/machinery/disease2/incubator/proc/find_dish_datum(obj/item/weapon/virusdish/dish) - for (var/dish_incubator_dish/dish_datum in dish_data) + for (var/datum/dish_incubator_dish/dish_datum in dish_data) if (dish_datum.dish == dish) return dish_datum @@ -285,7 +285,7 @@ /obj/machinery/disease2/incubator/proc/update_major(obj/item/weapon/virusdish/dish) - var/dish_incubator_dish/dish_datum = find_dish_datum(dish) + var/datum/dish_incubator_dish/dish_datum = find_dish_datum(dish) if (dish_datum == null) return @@ -295,7 +295,7 @@ /obj/machinery/disease2/incubator/proc/update_minor(obj/item/weapon/virusdish/dish, str=0, rob=0, eff=0) - var/dish_incubator_dish/dish_datum = find_dish_datum(dish) + var/datum/dish_incubator_dish/dish_datum = find_dish_datum(dish) if (dish_datum == null) return @@ -342,7 +342,7 @@ if (dish_data[i] != null) . += add_dish_sprite(dish_data[i], i) -/obj/machinery/disease2/incubator/proc/add_dish_sprite(dish_incubator_dish/dish_datum, slot) +/obj/machinery/disease2/incubator/proc/add_dish_sprite(datum/dish_incubator_dish/dish_datum, slot) var/obj/item/weapon/virusdish/dish = dish_datum.dish var/list/overlays = list() @@ -459,7 +459,7 @@ /obj/machinery/disease2/incubator/Destroy() . = ..() for (var/i in 1 to dish_data.len) - var/dish_incubator_dish/dish_datum = dish_data[i] + var/datum/dish_incubator_dish/dish_datum = dish_data[i] if (dish_datum == null) continue @@ -468,7 +468,7 @@ ..() -/dish_incubator_dish +/datum/dish_incubator_dish // The inserted virus dish. var/obj/item/weapon/virusdish/dish diff --git a/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn-digi.dmi b/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn-digi.dmi new file mode 100644 index 000000000000..a852d50e18d4 Binary files /dev/null and b/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn-digi.dmi differ diff --git a/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn.dmi b/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn.dmi new file mode 100644 index 000000000000..c317b229a179 Binary files /dev/null and b/monkestation/icons/mob/clothing/ERT/ERT_helmet_worn.dmi differ diff --git a/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn-digi.dmi b/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn-digi.dmi new file mode 100644 index 000000000000..235ea5647134 Binary files /dev/null and b/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn-digi.dmi differ diff --git a/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn.dmi b/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn.dmi new file mode 100644 index 000000000000..1d6c2a4d4115 Binary files /dev/null and b/monkestation/icons/mob/clothing/ERT/ERT_spacesuit_worn.dmi differ diff --git a/monkestation/icons/mob/clothing/mask.dmi b/monkestation/icons/mob/clothing/mask.dmi index 639493e982e5..75e60e4c7121 100644 Binary files a/monkestation/icons/mob/clothing/mask.dmi and b/monkestation/icons/mob/clothing/mask.dmi differ diff --git a/monkestation/icons/mob/clothing/species/mask_muzzled.dmi b/monkestation/icons/mob/clothing/species/mask_muzzled.dmi index 82b13494c5d7..205f8880f7b3 100644 Binary files a/monkestation/icons/mob/clothing/species/mask_muzzled.dmi and b/monkestation/icons/mob/clothing/species/mask_muzzled.dmi differ diff --git a/monkestation/icons/mob/pets_held.dmi b/monkestation/icons/mob/pets_held.dmi index 1cf59f1d9bd7..c488f970f72c 100644 Binary files a/monkestation/icons/mob/pets_held.dmi and b/monkestation/icons/mob/pets_held.dmi differ diff --git a/monkestation/icons/obj/clothing/ERT/ERT_helmet_obj.dmi b/monkestation/icons/obj/clothing/ERT/ERT_helmet_obj.dmi new file mode 100644 index 000000000000..ef2587c13530 Binary files /dev/null and b/monkestation/icons/obj/clothing/ERT/ERT_helmet_obj.dmi differ diff --git a/monkestation/icons/obj/clothing/ERT/ERT_spacesuit_obj.dmi b/monkestation/icons/obj/clothing/ERT/ERT_spacesuit_obj.dmi new file mode 100644 index 000000000000..200dd3cd1646 Binary files /dev/null and b/monkestation/icons/obj/clothing/ERT/ERT_spacesuit_obj.dmi differ diff --git a/monkestation/icons/obj/clothing/masks.dmi b/monkestation/icons/obj/clothing/masks.dmi index fd0bd387119f..a58e1800078e 100644 Binary files a/monkestation/icons/obj/clothing/masks.dmi and b/monkestation/icons/obj/clothing/masks.dmi differ diff --git a/monkestation/icons/obj/rayne_corp/rayne.dmi b/monkestation/icons/obj/rayne_corp/rayne.dmi index 9fb47e8c4e86..c44226eb0a73 100644 Binary files a/monkestation/icons/obj/rayne_corp/rayne.dmi and b/monkestation/icons/obj/rayne_corp/rayne.dmi differ diff --git a/monkestation/sound/ambience/antag/ert.ogg b/monkestation/sound/ambience/antag/ert.ogg new file mode 100644 index 000000000000..ee97b137b04e Binary files /dev/null and b/monkestation/sound/ambience/antag/ert.ogg differ diff --git a/sound/items/xbow_lock.ogg b/sound/items/xbow_lock.ogg new file mode 100644 index 000000000000..b9e53d8515cf Binary files /dev/null and b/sound/items/xbow_lock.ogg differ diff --git a/sound/weapons/taser3.ogg b/sound/weapons/taser3.ogg new file mode 100644 index 000000000000..4bc67cd11af8 Binary files /dev/null and b/sound/weapons/taser3.ogg differ diff --git a/strings/monkey_companies/rayne_mender.json b/strings/monkey_companies/rayne_mender.json new file mode 100644 index 000000000000..f746ad3d97cd --- /dev/null +++ b/strings/monkey_companies/rayne_mender.json @@ -0,0 +1,99 @@ +{ + "pickup":[ + "Thank you for choosing Rayne Corp for all your personal health needs.", + "I'm a medkit, not a doctor, what the hell do you want me to do about this?", + "You're lucky I'm here to patch up this tragedy.", + "Try not to get hurt next time, genius. Or do. I don't really care.", + "You're lucky im here or you would be a goner, probably.", + "I can fix anything! Except for whatever the hell THAT is." + ], + + "putdown":[ + "Talk soon.", + "You'll be back", + "Not so rough asshole!", + "Nap time" + ], + + "podnerd":[ + "This is a plant. Water it.", + "I think plants need fertilizer or something I dont know", + "Why are you scanning a plant.", + "A shrubbery!" + ], + + "lowblood":[ + "Blood volume is low. Recommend transfusion.", + "Not enough hemoglobin to sustain respiration.", + "Looking a bit like a juiced lemon, recommend Iron intake.", + "You are bleeding more than a vampire at a blood bank." + ], + + "onfire": [ + "WHY ARE YOU SCANNING THEM!!!", + "THEY ARE ON FIRE!!!", + "GET A FIRE EXTINGUISHER MORON" + ], + + "oxy":[ + "The subject cannot breath. I recommend salbutamol, or air.", + "Did you huff helium or something?" + ], + + "brute":[ + "The subject looks like they got mugged with a tyre iron.", + "Just a flesh wound, apply sutures.", + "Nanotrasen doesnt pay you to be a punching bag.", + "You look like a sack of potatoes that's been beaten with a baseball bat." + ], + + "burn":[ + "The subject is a bit charred, debridle and apply ointment to burns.", + "Well then, looks like someone got a little toasty.", + "You shouldn't stick your fingers in light sockets." + ], + + "tox":[ + "The subject was eating rat poison or something.", + "It looks like you have been sunbathing in the SM chamber, again.", + "You look like you've eaten a bad burrito. And by bad, I mean really bad." + ], + + "braindamage":[ + "The subject's brain looks a bit smooth, recommend roughing it up a bit.", + "The subject's brain has sustained serious damage, provide Mannitol." + ], + + "fuckedup":[ + "The subject is absolutely fucked up...", + "This fleshy mass was a person?", + "Just breathe and you'll be fine. Or not. Who knows?" + ], + + "fine":[ + "Subject is operating nominally.", + "Seem fine to me, might be in their head.", + "No functional issues detected, that i care about", + "Mostly alive" + ], + + "organ":[ + "Well, this is a gut wrenching sight. Pun intended.", + "Your insides look like a blender exploded, and you're the smoothie." + ], + + "nobrain":[ + "The subject has no brain.", + "Zero IQ detected." + ], + + "dead":[ + "Subject is dead but whole.", + "Reviving recommended if possible.", + "Subject is dead but ready to function", + "Subject has yee'd their last haw" + ] + + + +} diff --git a/tgstation.dme b/tgstation.dme index a9720a829ef2..7e012e82b910 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -2266,6 +2266,7 @@ #include "code\game\objects\items\AI_modules\repair.dm" #include "code\game\objects\items\AI_modules\supplied.dm" #include "code\game\objects\items\AI_modules\zeroth.dm" +#include "code\game\objects\items\cards\card_ids.dm" #include "code\game\objects\items\circuitboards\circuitboard.dm" #include "code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "code\game\objects\items\circuitboards\machines\engine_circuitboards.dm" @@ -2352,6 +2353,7 @@ #include "code\game\objects\items\granters\crafting\death_sandwich.dm" #include "code\game\objects\items\granters\crafting\desserts.dm" #include "code\game\objects\items\granters\crafting\pipegun.dm" +#include "code\game\objects\items\granters\crafting\rebarxbowsyndie.dm" #include "code\game\objects\items\granters\crafting\regal_condor.dm" #include "code\game\objects\items\granters\magic\_spell_granter.dm" #include "code\game\objects\items\granters\magic\barnyard.dm" @@ -4826,11 +4828,13 @@ #include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\hostile\dark_wizard.dm" +#include "code\modules\mob\living\simple_animal\hostile\feral.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\ooze.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" +#include "code\modules\mob\living\simple_animal\hostile\syndicat.dm" #include "code\modules\mob\living\simple_animal\hostile\vatbeast.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" @@ -5968,6 +5972,7 @@ #include "monkestation\code\datums\components\turf_healing.dm" #include "monkestation\code\datums\components\uplink.dm" #include "monkestation\code\datums\components\wound_converter.dm" +#include "monkestation\code\datums\components\crafting\robot.dm" #include "monkestation\code\datums\components\riding\riding_mob.dm" #include "monkestation\code\datums\components\riding\riding_vehicle.dm" #include "monkestation\code\datums\diseases\advance\symptoms\clockwork.dm" @@ -5986,6 +5991,7 @@ #include "monkestation\code\datums\keybinding\communication.dm" #include "monkestation\code\datums\keybinding\living.dm" #include "monkestation\code\datums\looping_sounds\weather.dm" +#include "monkestation\code\datums\memory\key_memories.dm" #include "monkestation\code\datums\mind\_mind.dm" #include "monkestation\code\datums\mocking\client.dm" #include "monkestation\code\datums\mutations\chameleon.dm" @@ -6005,7 +6011,11 @@ #include "monkestation\code\datums\votes\_vote_datum.dm" #include "monkestation\code\datums\votes\transfer_vote.dm" #include "monkestation\code\datums\weather\weather_types\radiation_storm.dm" +#include "monkestation\code\datums\wires\airalarm.dm" +#include "monkestation\code\datums\wires\mod.dm" +#include "monkestation\code\datums\wires\mulebot.dm" #include "monkestation\code\datums\wires\particle_accelerator.dm" +#include "monkestation\code\datums\wires\vending.dm" #include "monkestation\code\game\atom.dm" #include "monkestation\code\game\say.dm" #include "monkestation\code\game\sound.dm" @@ -6112,6 +6122,7 @@ #include "monkestation\code\game\objects\items\implants\hardlight.dm" #include "monkestation\code\game\objects\items\objects\items\robot\robot_upgrades.dm" #include "monkestation\code\game\objects\items\rayne_corp\rayne_lantern.dm" +#include "monkestation\code\game\objects\items\rayne_corp\rayne_mender.dm" #include "monkestation\code\game\objects\items\robot\items\hypo.dm" #include "monkestation\code\game\objects\items\stacks\tile_types.dm" #include "monkestation\code\game\objects\items\storage\book.dm" @@ -6378,6 +6389,7 @@ #include "monkestation\code\modules\antagonists\florida_man\supplypods.dm" #include "monkestation\code\modules\antagonists\fugitive\hunters\hunter_outfits.dm" #include "monkestation\code\modules\antagonists\heretic\heretic_antag.dm" +#include "monkestation\code\modules\antagonists\heretic\heretic_knowledge.dm" #include "monkestation\code\modules\antagonists\heretic\heretic_living_heart.dm" #include "monkestation\code\modules\antagonists\heretic\heretic_monsters.dm" #include "monkestation\code\modules\antagonists\heretic\items\forbidden_book.dm" @@ -7002,6 +7014,7 @@ #include "monkestation\code\modules\can_spessmen_feel_pain\pain\status_effects\pain_limp.dm" #include "monkestation\code\modules\can_spessmen_feel_pain\pain\status_effects\sharp_pain.dm" #include "monkestation\code\modules\can_spessmen_feel_pain\pain\status_effects\temp_pack.dm" +#include "monkestation\code\modules\cargo\bounties\bot.dm" #include "monkestation\code\modules\cargo\bounties\pathology.dm" #include "monkestation\code\modules\cargo\crates\costumes_toys.dm" #include "monkestation\code\modules\cargo\crates\emergency.dm" @@ -7205,6 +7218,11 @@ #include "monkestation\code\modules\donator\code\item\plush.dm" #include "monkestation\code\modules\donator\code\mob\pets.dm" #include "monkestation\code\modules\emotes\code\emote.dm" +#include "monkestation\code\modules\ERT\ERT_outfits.dm" +#include "monkestation\code\modules\ERT\ERT_shuttle.dm" +#include "monkestation\code\modules\ERT\equipment\ERT_id.dm" +#include "monkestation\code\modules\ERT\equipment\ERT_misc_equipment.dm" +#include "monkestation\code\modules\ERT\equipment\ERT_spacesuits.dm" #include "monkestation\code\modules\events\_event_admin_setup.dm" #include "monkestation\code\modules\events\artifact_spawn.dm" #include "monkestation\code\modules\events\brand_intelligence.dm" @@ -7417,6 +7435,7 @@ #include "monkestation\code\modules\map_gen_expansions\mushroom\extraction\structures\extractor\main.dm" #include "monkestation\code\modules\map_gen_expansions\mushroom\mobs\stillcaps.dm" #include "monkestation\code\modules\map_gen_expansions\structures\test_spawner.dm" +#include "monkestation\code\modules\mapfluff\ruins\spaceruin_code\oldstation.dm" #include "monkestation\code\modules\mapping\access_helpers.dm" #include "monkestation\code\modules\mapping\mapping_helpers.dm" #include "monkestation\code\modules\maptext\maptext_image_helper.dm" @@ -7507,6 +7526,7 @@ #include "monkestation\code\modules\mining\accelerators\shotgun.dm" #include "monkestation\code\modules\mining\lavaland\megafauna_loot.dm" #include "monkestation\code\modules\mining\lavaland\tendril_loot.dm" +#include "monkestation\code\modules\mob\inventory.dm" #include "monkestation\code\modules\mob\login.dm" #include "monkestation\code\modules\mob\mob.dm" #include "monkestation\code\modules\mob\mob_defines.dm" @@ -7538,6 +7558,7 @@ #include "monkestation\code\modules\mob\living\living_update_icons.dm" #include "monkestation\code\modules\mob\living\status_procs.dm" #include "monkestation\code\modules\mob\living\basic\animatronic.dm" +#include "monkestation\code\modules\mob\living\basic\bots\cleanbot\cleanbot.dm" #include "monkestation\code\modules\mob\living\basic\bots\medbot\medbot.dm" #include "monkestation\code\modules\mob\living\basic\drone\_drone.dm" #include "monkestation\code\modules\mob\living\basic\drone\bardrone.dm" @@ -7594,7 +7615,14 @@ #include "monkestation\code\modules\mob\living\silicon\death.dm" #include "monkestation\code\modules\mob\living\simple_animal\megafauna\wendigo.dm" #include "monkestation\code\modules\mob\living\simple_animal\pets\bees.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldchef.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldcmo.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldeng.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldexplorer.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldsci.dm" +#include "monkestation\code\modules\mob_spawn\ghost_roles\space_roles\oldsec.dm" #include "monkestation\code\modules\mod\mod_control.dm" +#include "monkestation\code\modules\mod\mod_theme.dm" #include "monkestation\code\modules\mod\mod_types.dm" #include "monkestation\code\modules\mod\modules\modules_antag.dm" #include "monkestation\code\modules\modular_bartending\modglass.dm" @@ -7901,6 +7929,7 @@ #include "monkestation\code\modules\religion\maint_god.dm" #include "monkestation\code\modules\replays\hooks\generic_hooks.dm" #include "monkestation\code\modules\replays\subsystem\replay.dm" +#include "monkestation\code\modules\research\rdconsole.dm" #include "monkestation\code\modules\research\designs\biogenerator_designs.dm" #include "monkestation\code\modules\research\designs\bluespace_designs.dm" #include "monkestation\code\modules\research\designs\computer_designs.dm" @@ -7912,6 +7941,7 @@ #include "monkestation\code\modules\research\designs\multi-department_designs.dm" #include "monkestation\code\modules\research\designs\nanite_designs.dm" #include "monkestation\code\modules\research\designs\security_designs.dm" +#include "monkestation\code\modules\research\designs\autolathe\materials.dm" #include "monkestation\code\modules\research\designs\autolathe\service_designs.dm" #include "monkestation\code\modules\research\nanites\nanite_chamber.dm" #include "monkestation\code\modules\research\nanites\nanite_chamber_computer.dm" @@ -8212,6 +8242,7 @@ #include "monkestation\code\modules\surgery\organs\internal\lungs.dm" #include "monkestation\code\modules\surgery\organs\internal\stomach.dm" #include "monkestation\code\modules\surgery\organs\internal\tongue.dm" +#include "monkestation\code\modules\syndicate_ghostroles\_base.dm" #include "monkestation\code\modules\syndicate_ghostroles\listeningpost.dm" #include "monkestation\code\modules\temperature_overhaul\exposure.dm" #include "monkestation\code\modules\temperature_overhaul\homeostasis_level.dm" @@ -8240,6 +8271,7 @@ #include "monkestation\code\modules\trading\unusual_effects\_unusual_component.dm" #include "monkestation\code\modules\trading\unusual_effects\animation_housing\__spawning_component.dm" #include "monkestation\code\modules\trading\unusual_effects\animation_housing\_footprint.dm" +#include "monkestation\code\modules\trading\unusual_effects\animation_housing\bloody.dm" #include "monkestation\code\modules\trading\unusual_effects\animation_housing\confetti.dm" #include "monkestation\code\modules\trading\unusual_effects\animation_housing\fire.dm" #include "monkestation\code\modules\trading\unusual_effects\animation_housing\galaxies.dm" diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 353e81702e80..a078752f3606 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -62,7 +62,7 @@ export const MESSAGE_TYPES = [ description: 'All departments of radio messages', selector: // '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling', MONKESTATION EDIT CHANGE OLD - '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling, .radioradio', // MONKESTATION EDIT CHANGE NEW + '.alert, .minorannounce, .syndradio, .centcomradio, .aiprivradio, .comradio, .secradio, .gangradio, .engradio, .medradio, .sciradio, .suppradio, .servradio, .radio, .deptradio, .binarysay, .newscaster, .resonate, .abductor, .alien, .changeling, .radioradio .uncommonradio', // MONKESTATION EDIT CHANGE NEW }, { type: MESSAGE_TYPE_INFO, diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index eaadc6a6103e..9efd3c9c6bc9 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -1201,6 +1201,10 @@ $border-width-px: $border-width * 1px; } // MONKESTATION ADDITION END PR#45 - Clock cult +.uncommonradio { + color: #78a1b1; +} + // MONKESTATION .honk { color: #ff70c1; @@ -1222,3 +1226,29 @@ $border-width-px: $border-width * 1px; padding: 10px; margin: 10px 20px; } + +// blueshift ports +.pink { + color: #ff00ff; + font-weight: bold; +} + +.brown { + color: #3d2009; + font-weight: bold; +} + +.orange { + color: #b8761a; + font-weight: bold; +} + +.yellow { + color: #c7b72c; + font-weight: bold; +} + +.cyan { + color: #0ea1e6; + font-weight: bold; +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 7e2276659d38..8e449a9f2a21 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -1229,6 +1229,10 @@ $border-width-px: $border-width * 1px; } // MONKESTATION ADDITION END PR#45 - Clock cult +.uncommonradio { + color: #1d4555; +} + // MONKESTATION .honk { diff --git a/tgui/packages/tgui-say/constants.ts b/tgui/packages/tgui-say/constants.ts index 0c3d7943c267..113afcde1979 100644 --- a/tgui/packages/tgui-say/constants.ts +++ b/tgui/packages/tgui-say/constants.ts @@ -30,4 +30,5 @@ export const RADIO_PREFIXES = { ':u ': 'Supp', ':v ': 'Svc', ':y ': 'CCom', + ':f ': 'Uncom', } as const; diff --git a/tgui/packages/tgui-say/styles/colors.scss b/tgui/packages/tgui-say/styles/colors.scss index 3e773aa3627f..38e89dec26a3 100644 --- a/tgui/packages/tgui-say/styles/colors.scss +++ b/tgui/packages/tgui-say/styles/colors.scss @@ -28,6 +28,7 @@ $_channel_map: ( 'Supp': #b88646, 'Svc': #6ca729, 'Synd': #8f4a4b, + 'Uncom': #78a1b1, ); $channel_keys: map.keys($_channel_map) !default; diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts index 5e7fe92991cc..1e2a41371c67 100644 --- a/tgui/packages/tgui/constants.ts +++ b/tgui/packages/tgui/constants.ts @@ -150,6 +150,11 @@ export const RADIO_CHANNELS = [ freq: 1361, color: '#FFC0CB', }, + { + name: 'Uncommon', + freq: 1363, + color: '#78a1b1', + }, ] as const; const GASES = [ diff --git a/tgui/packages/tgui/interfaces/Secrets.jsx b/tgui/packages/tgui/interfaces/Secrets.jsx index 146a40b427f6..5ba7b5181ada 100644 --- a/tgui/packages/tgui/interfaces/Secrets.jsx +++ b/tgui/packages/tgui/interfaces/Secrets.jsx @@ -598,32 +598,6 @@ const FunForYouTab = (props) => { - - - - -