diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 16d25aa722db..79169c0351f8 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -393,6 +393,42 @@ /mob/living/basic/pet/dog/pug/mcgriff, /turf/open/floor/iron/showroomfloor, /area/station/security/warden) +"ahN" = ( +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_access = list("brig") + }, +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_access = list("brig") + }, +/obj/machinery/button/door/directional/west{ + id = "visitation"; + name = "Visitation Shutters"; + req_one_access = list("brig", "permabrig") + }, +/obj/machinery/button/flasher{ + id = "visitation_prisoner_flash"; + name = "Visitation Prisoner Flash"; + pixel_x = -24; + pixel_y = 9 + }, +/obj/machinery/button/flasher{ + id = "visitation_visitor_flash"; + name = "Visitation Visitor Flash"; + pixel_x = -24; + pixel_y = -9 + }, +/obj/structure/cable, +/obj/structure/table, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/item/assembly/flash/handheld, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "ahW" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -1504,6 +1540,15 @@ dir = 8 }, /area/station/command/heads_quarters/cmo) +"aBO" = ( +/obj/machinery/camera/autoname/directional/south, +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/seeds/tree, +/obj/item/seeds/tree, +/obj/item/seeds/tree, +/turf/open/floor/wood, +/area/station/service/chapel/funeral) "aBX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -4760,6 +4805,13 @@ dir = 4 }, /area/station/engineering/break_room) +"bFP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark, +/area/station/security/brig/entrance) "bFX" = ( /obj/effect/turf_decal/box, /obj/machinery/holopad, @@ -5908,23 +5960,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/department/electrical) -"bYZ" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell"; - id_tag = "iso_cell_hall_bolt" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison/safe) "bZl" = ( /obj/machinery/light/small/directional/west, /obj/structure/frame/computer{ @@ -6380,6 +6415,37 @@ /obj/effect/spawner/random/structure/closet_maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"cfY" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen/red{ + pixel_x = -4 + }, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/infections{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/hand_labeler, +/obj/item/radio/headset/headset_med, +/obj/machinery/requests_console/auto_name/directional/west{ + department = "Virology"; + name = "Pathology Requests Console"; + receive_ore_updates = 1 + }, +/obj/item/clothing/glasses/science, +/obj/item/restraints/handcuffs, +/turf/open/floor/iron/white, +/area/station/medical/virology) "cgb" = ( /obj/structure/cable, /turf/open/floor/iron/dark, @@ -6774,6 +6840,17 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/dark, /area/station/security/courtroom) +"clE" = ( +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/obj/machinery/duct, +/obj/effect/landmark/event_spawn, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark/smooth_large, +/area/station/security/brig) "cmn" = ( /obj/machinery/atmospherics/components/unary/passive_vent, /turf/open/floor/plating/airless, @@ -7611,31 +7688,6 @@ }, /turf/open/floor/engine, /area/station/medical/cryo) -"cDC" = ( -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen/red{ - pixel_x = -4 - }, -/obj/item/book/manual/wiki/medicine, -/obj/item/book/manual/wiki/infections{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/hand_labeler, -/obj/item/radio/headset/headset_med, -/obj/machinery/newscaster/directional/south, -/obj/item/clothing/glasses/science, -/obj/item/restraints/handcuffs, -/turf/open/floor/iron/white, -/area/station/medical/virology) "cDF" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 4 @@ -8549,10 +8601,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/engineering/break_room) -"cSx" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/service/chapel/funeral) "cSz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -8789,6 +8837,20 @@ /obj/effect/spawner/random/techstorage/engineering_all, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"cVs" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Visitation" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/visit) "cVu" = ( /obj/effect/turf_decal/bot_red, /obj/structure/cable, @@ -12523,6 +12585,31 @@ /obj/item/assembly/timer, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"elh" = ( +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/pen/red{ + pixel_x = -4 + }, +/obj/item/book/manual/wiki/medicine, +/obj/item/book/manual/wiki/infections{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/hand_labeler, +/obj/item/radio/headset/headset_med, +/obj/machinery/newscaster/directional/south, +/obj/item/clothing/glasses/science, +/obj/item/restraints/handcuffs, +/turf/open/floor/iron/white, +/area/station/medical/virology) "ell" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -15323,12 +15410,6 @@ }, /turf/open/floor/iron/white/textured, /area/station/medical/chemistry) -"fkD" = ( -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron/dark, -/area/station/security/brig/entrance) "fkT" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -21469,6 +21550,25 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"hnT" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/closet/crate/hydroponics, +/obj/machinery/light/small/directional/south, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/seeds/onion, +/obj/item/seeds/garlic, +/obj/item/seeds/potato, +/obj/item/seeds/tomato, +/obj/item/seeds/carrot, +/obj/item/seeds/grass, +/obj/item/seeds/ambrosia, +/obj/item/seeds/wheat, +/obj/item/seeds/pumpkin, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/tree, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "hoa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -23579,10 +23679,6 @@ }, /turf/open/floor/iron/dark/side, /area/station/commons/locker) -"hZv" = ( -/mob/living/basic/pet/potty, -/turf/open/floor/iron, -/area/station/service/hydroponics) "hZS" = ( /obj/effect/turf_decal/delivery/red, /obj/structure/cable, @@ -23722,6 +23818,14 @@ }, /turf/open/floor/iron, /area/station/cargo/warehouse) +"idi" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) "idF" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -24315,6 +24419,10 @@ }, /turf/open/floor/iron/dark, /area/station/security/checkpoint/escape) +"inD" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/hallway/primary/central) "inF" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/structure/disposalpipe/trunk{ @@ -24539,6 +24647,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) +"iqN" = ( +/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/landmark/start/security_assistant, +/turf/open/floor/iron/dark, +/area/station/security/brig) "iqP" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -25837,6 +25953,25 @@ /obj/structure/sign/poster/official/no_erp/directional/south, /turf/open/floor/iron/dark/side, /area/station/commons/dorms) +"iLi" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/machinery/newscaster/directional/north, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/apple, +/obj/item/seeds/banana, +/obj/item/seeds/cocoapod, +/obj/item/seeds/grape, +/obj/item/seeds/orange, +/obj/item/seeds/sugarcane, +/obj/item/seeds/wheat, +/obj/item/seeds/watermelon, +/obj/item/seeds/tree, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/service/hydroponics/garden) "iLj" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 5 @@ -29848,10 +29983,6 @@ "kfT" = ( /turf/closed/wall/r_wall, /area/station/security/evidence) -"kgn" = ( -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kgv" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -29936,6 +30067,25 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/virology) +"khV" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell"; + id_tag = "iso_cell_hall_bolt" + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison) "khZ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31847,6 +31997,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"kPz" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/security/prison/garden) "kPJ" = ( /obj/machinery/corral_corner{ mapping_id = "1" @@ -35712,15 +35866,6 @@ }, /turf/open/floor/engine/vacuum, /area/station/engineering/atmos) -"mfd" = ( -/obj/machinery/camera/autoname/directional/south, -/obj/structure/closet/crate/hydroponics, -/obj/item/shovel/spade, -/obj/item/seeds/tree, -/obj/item/seeds/tree, -/obj/item/seeds/tree, -/turf/open/floor/wood, -/area/station/service/chapel/funeral) "mfe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -36571,6 +36716,10 @@ "mug" = ( /turf/open/floor/iron/dark, /area/station/security/checkpoint/supply) +"mun" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/service/chapel/funeral) "mup" = ( /obj/machinery/chem_dispenser, /turf/open/floor/iron/white/textured, @@ -37149,25 +37298,6 @@ "mGb" = ( /turf/open/floor/iron/white, /area/station/medical/virology) -"mGg" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/structure/closet/crate/hydroponics, -/obj/machinery/light/small/directional/south, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/seeds/onion, -/obj/item/seeds/garlic, -/obj/item/seeds/potato, -/obj/item/seeds/tomato, -/obj/item/seeds/carrot, -/obj/item/seeds/grass, -/obj/item/seeds/ambrosia, -/obj/item/seeds/wheat, -/obj/item/seeds/pumpkin, -/obj/effect/spawner/random/contraband/prison, -/obj/item/seeds/tree, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "mGu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38997,10 +39127,6 @@ }, /turf/open/floor/iron/dark/textured, /area/station/command/teleporter) -"nmw" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/hallway/primary/central) "nmY" = ( /obj/machinery/airalarm/directional/south, /obj/structure/destructible/cult/item_dispenser/archives/library, @@ -41304,6 +41430,10 @@ /obj/structure/sign/warning/electric_shock/directional/south, /turf/open/space/basic, /area/station/solars/starboard/aft) +"nZC" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "nZD" = ( /obj/machinery/airalarm/directional/south, /obj/structure/chair/stool/directional/west, @@ -42533,16 +42663,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/commons/vacant_room/commissary) -"ouL" = ( -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/holopad, -/obj/machinery/duct, -/obj/effect/landmark/event_spawn, -/turf/open/floor/iron/dark/smooth_large, -/area/station/security/brig) "ouP" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 @@ -47821,6 +47941,14 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/wood, /area/station/service/bar/backroom) +"qot" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/duct, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark, +/area/station/security/brig) "qou" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -49240,6 +49368,10 @@ "qOl" = ( /turf/open/floor/iron/dark, /area/station/hallway/primary/fore) +"qOn" = ( +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "qOu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/carpet, @@ -52257,42 +52389,6 @@ }, /turf/open/floor/plastic, /area/station/security/prison/safe) -"rOF" = ( -/obj/machinery/button/door/directional/west{ - id = "visitation"; - name = "Visitation Shutters"; - req_access = list("brig") - }, -/obj/machinery/button/door/directional/west{ - id = "visitation"; - name = "Visitation Shutters"; - req_access = list("brig") - }, -/obj/machinery/button/door/directional/west{ - id = "visitation"; - name = "Visitation Shutters"; - req_access = list("brig") - }, -/obj/machinery/button/flasher{ - id = "visitation_prisoner_flash"; - name = "Visitation Prisoner Flash"; - pixel_x = -24; - pixel_y = 9 - }, -/obj/machinery/button/flasher{ - id = "visitation_visitor_flash"; - name = "Visitation Visitor Flash"; - pixel_x = -24; - pixel_y = -9 - }, -/obj/structure/cable, -/obj/structure/table, -/obj/item/restraints/handcuffs{ - pixel_y = 3 - }, -/obj/item/assembly/flash/handheld, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "rOQ" = ( /obj/machinery/duct, /obj/structure/table/reinforced, @@ -54360,6 +54456,13 @@ }, /turf/open/floor/iron, /area/station/science/ordnance) +"sCq" = ( +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 1 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark/side, +/area/station/service/hydroponics) "sDi" = ( /obj/item/radio/intercom/directional/east{ freerange = 1; @@ -55128,6 +55231,23 @@ /obj/machinery/disposal/bin, /turf/open/floor/iron/white, /area/station/science/genetics) +"sRE" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell"; + id_tag = "iso_cell_hall_bolt" + }, +/obj/machinery/duct, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark/textured, +/area/station/security/prison/safe) "sRJ" = ( /obj/machinery/cryopod{ dir = 4 @@ -56802,6 +56922,13 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) +"tsS" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark, +/area/station/security/brig) "ttl" = ( /obj/effect/turf_decal/tile/dark_blue/fourcorners, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, @@ -57626,10 +57753,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) -"tIO" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "tIU" = ( /turf/open/floor/iron/dark/smooth_large, /area/station/maintenance/department/security) @@ -57984,20 +58107,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/rd) -"tPZ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Visitation" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison/visit) "tQa" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/hidden, @@ -58861,25 +58970,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/hallway/secondary/entry) -"ugn" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell"; - id_tag = "iso_cell_hall_bolt" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/duct, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured, -/area/station/security/prison) "ugy" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /obj/machinery/camera/autoname/directional/south, @@ -59037,37 +59127,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"uit" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/pen/red{ - pixel_x = -4 - }, -/obj/item/book/manual/wiki/medicine, -/obj/item/book/manual/wiki/infections{ - pixel_x = 10; - pixel_y = 2 - }, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/hand_labeler, -/obj/item/radio/headset/headset_med, -/obj/machinery/requests_console/auto_name/directional/west{ - department = "Virology"; - name = "Pathology Requests Console"; - receive_ore_updates = 1 - }, -/obj/item/clothing/glasses/science, -/obj/item/restraints/handcuffs, -/turf/open/floor/iron/white, -/area/station/medical/virology) "uiu" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -63878,6 +63937,25 @@ /obj/machinery/computer/robotics, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) +"vOC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/machinery/door/poddoor/preopen{ + id = "perma_lockdown"; + name = "Lockdown Blast Door" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) "vOP" = ( /obj/effect/turf_decal/tile/purple/full, /obj/effect/turf_decal/box/white, @@ -64157,10 +64235,6 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/wood, /area/station/commons/dorms) -"vSd" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/security/prison/garden) "vSj" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -66327,14 +66401,6 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) -"wGE" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/light/directional/south, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark/side, -/area/station/service/hydroponics) "wGN" = ( /obj/effect/turf_decal/tile/blue/half/contrasted, /obj/effect/decal/cleanable/dirt, @@ -66876,25 +66942,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"wPR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Prison Wing" - }, -/obj/machinery/door/poddoor/preopen{ - id = "perma_lockdown"; - name = "Lockdown Blast Door" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "perma-entrance" - }, -/turf/open/floor/iron/dark/textured, -/area/station/security/execution/transfer) "wPT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67936,25 +67983,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"xja" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/machinery/newscaster/directional/north, -/obj/structure/closet/crate/hydroponics, -/obj/item/seeds/apple, -/obj/item/seeds/banana, -/obj/item/seeds/cocoapod, -/obj/item/seeds/grape, -/obj/item/seeds/orange, -/obj/item/seeds/sugarcane, -/obj/item/seeds/wheat, -/obj/item/seeds/watermelon, -/obj/item/seeds/tree, -/turf/open/floor/iron/dark/side{ - dir = 1 - }, -/area/station/service/hydroponics/garden) "xjb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68248,13 +68276,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron/dark, /area/station/security/brig/entrance) -"xqS" = ( -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 1 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark/side, -/area/station/service/hydroponics) "xqW" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot_red, @@ -69241,6 +69262,10 @@ /obj/effect/mapping_helpers/airlock/access/any/science/maintenance, /turf/open/floor/catwalk_floor/iron_white, /area/station/maintenance/department/science) +"xHj" = ( +/mob/living/basic/pet/potty, +/turf/open/floor/iron, +/area/station/service/hydroponics) "xHp" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible, /turf/open/floor/iron/dark, @@ -83555,8 +83580,8 @@ vxd fPN kNO aKB -tIO -tIO +nZC +nZC bMv rud jmh @@ -84069,8 +84094,8 @@ vXb fPN etC aKB -tIO -tIO +nZC +nZC bMv iNK jmh @@ -84581,10 +84606,10 @@ fPN wMu fPN fPN -xja +iLi aKB -tIO -tIO +nZC +nZC bMv nDK wZk @@ -84600,7 +84625,7 @@ emg dSO juc juc -hZv +xHj qxQ pig pff @@ -85113,8 +85138,8 @@ pEY xCd jRP juc -kgn -kgn +qOn +qOn nJa tJE pEY @@ -85370,10 +85395,10 @@ pEY pEY utE juc -kgn -kgn +qOn +qOn nJa -wGE +idi pEY kWu pfJ @@ -85627,10 +85652,10 @@ dyk mWH emg juc -kgn -kgn +qOn +qOn nJa -xqS +sCq rCa uGS wNw @@ -85887,7 +85912,7 @@ juc fzI juc nJa -xqS +sCq rCa jSO qPn @@ -86144,7 +86169,7 @@ juc juc juc nJa -xqS +sCq rCa knA wKr @@ -86398,10 +86423,10 @@ dyk ufA emg juc -kgn -kgn +qOn +qOn nJa -xqS +sCq rCa uGS wNw @@ -86655,10 +86680,10 @@ pEY pEY lsR juc -kgn -kgn +qOn +qOn nJa -wGE +idi pEY aSR guH @@ -86912,8 +86937,8 @@ pEY vaR uFv juc -kgn -kgn +qOn +qOn nJa vom pEY @@ -90683,11 +90708,11 @@ wZx cYs eLo dot -bYZ +sRE jou rdn jou -ugn +khV jou aco jou @@ -96106,13 +96131,13 @@ xUO rDO lMT qgq -wPR +vOC aKU aKU aya aKU aKU -wPR +vOC niu sey tMr @@ -96620,13 +96645,13 @@ xUO qgq lMT nqD -wPR +vOC aKU aKU hvc aKU aKU -wPR +vOC niu qQg tMr @@ -96676,7 +96701,7 @@ gbD hjB xLi wAZ -nmw +inD qkl ftk qkl @@ -96894,7 +96919,7 @@ sIr pCA xBB lPr -bYk +iqN oiV hDp hDp @@ -96933,7 +96958,7 @@ gbD wXC cjW wAZ -nmw +inD fuf dzH bXB @@ -97629,8 +97654,8 @@ xta xta xta tFK -vSd -vSd +kPz +kPz vQY dZe kxu @@ -97654,7 +97679,7 @@ iFw cbe iFw vFW -tPZ +cVs sUf qQg qow @@ -98143,8 +98168,8 @@ fEP fEP uoo rHA -vSd -vSd +kPz +kPz xWj iwL uNU @@ -98422,7 +98447,7 @@ ksa vpG ubp lLm -rOF +ahN qbg aUn vpG @@ -98657,8 +98682,8 @@ ksa fEP uoo rHA -vSd -vSd +kPz +kPz xWj ipb qNz @@ -98918,7 +98943,7 @@ yaX yaX gJK vTX -mGg +hnT oER oER mkI @@ -98946,11 +98971,11 @@ cWL nke fsm fsm +qot djF djF djF -djF -ouL +clE fFR lVI hDp @@ -99171,8 +99196,8 @@ ksa fEP uoo rHA -vSd -vSd +kPz +kPz xWj bMw sJm @@ -99685,8 +99710,8 @@ ksa fEP ksa tFK -vSd -vSd +kPz +kPz xWj bMw jJt @@ -100492,7 +100517,7 @@ cQe ghs cvK rWE -tWx +tsS xnG pNK vhd @@ -101523,9 +101548,9 @@ krU jDc etx htc -fkD +bFP nlr -fkD +bFP htc lig xpb @@ -102034,7 +102059,7 @@ mAr tTx rzM pwT -tWx +tsS vGY gPd lHi @@ -103576,7 +103601,7 @@ qlQ ciG pEr khr -tWx +tsS tWx wYE tWx @@ -109060,7 +109085,7 @@ gCT gSm nqG lFY -cDC +elh oqK lrg tgG @@ -110094,7 +110119,7 @@ rmM gDn iMj sxJ -uit +cfY rbW oqK iKJ @@ -117486,9 +117511,9 @@ aUh fMC eNN sfC -cSx +mun cSY -cSx +mun sms wSC qWj @@ -117743,9 +117768,9 @@ jxy sfC sfC sfC -cSx +mun oHe -cSx +mun sms sms pmV @@ -118260,7 +118285,7 @@ eUW eUW eUW eUW -mfd +aBO sms sOo bPd diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ec40b9bc0b67..e4c0d109551e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -372,17 +372,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/engine, /area/station/science/research) -"aeu" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "aev" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -1645,6 +1634,16 @@ /obj/effect/landmark/start/botanist, /turf/open/floor/iron, /area/station/service/hydroponics) +"arS" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/contraband/ambrosia_vulgaris{ + pixel_x = -30 + }, +/obj/machinery/light/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "arU" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/structure/cable, @@ -1890,6 +1889,12 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) +"auf" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden/abandoned) "auh" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -2272,6 +2277,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/execution/transfer) +"ayQ" = ( +/obj/effect/turf_decal/trimline/green/end, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "aze" = ( /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; @@ -2954,15 +2972,6 @@ /obj/item/melee/chainofcommand, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/captain) -"aHd" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "aHq" = ( /obj/structure/table/wood, /obj/item/storage/box/matches{ @@ -3785,6 +3794,14 @@ dir = 1 }, /area/station/service/bar) +"aRn" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "aRr" = ( /turf/open/floor/circuit/red, /area/station/ai_monitored/turret_protected/ai_upload) @@ -4804,39 +4821,6 @@ /obj/machinery/computer/security/telescreen/entertainment/directional/north, /turf/open/floor/wood/large, /area/station/service/library) -"bgl" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) -"bgo" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "bgz" = ( /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -5056,6 +5040,16 @@ }, /turf/open/floor/iron/white, /area/station/medical/cryo) +"biH" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/light/directional/south, +/obj/machinery/growing/tray, +/obj/machinery/status_display/ai/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "biO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -6047,14 +6041,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"buj" = ( -/obj/effect/landmark/blobstart, -/obj/effect/landmark/generic_maintenance_landmark, -/obj/effect/landmark/event_spawn, -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "buK" = ( /obj/structure/table/wood/fancy, /turf/open/floor/iron/grimy, @@ -6629,6 +6615,20 @@ /obj/item/toy/figure/scientist, /turf/open/floor/iron, /area/station/science/lab) +"bCb" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "bCc" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/stripes/line{ @@ -7235,16 +7235,6 @@ /obj/machinery/power/port_gen/pacman, /turf/open/floor/iron, /area/station/engineering/storage) -"bIG" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/light/directional/south, -/obj/machinery/growing/tray, -/obj/machinery/status_display/ai/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "bIM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -8331,6 +8321,27 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/engine_equipment, /turf/open/floor/iron, /area/station/engineering/storage) +"bUc" = ( +/obj/machinery/button/flasher{ + id = "Cell 5"; + name = "Prisoner Flash"; + pixel_x = 25; + pixel_y = 7 + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/east{ + id = "permashut5"; + name = "Cell Lockdown Button"; + pixel_y = -6; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "bUd" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -9589,6 +9600,14 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"ckH" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/warning/electric_shock/directional/west, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "ckP" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/aft) @@ -10717,17 +10736,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/command/corporate_showroom) -"czg" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/item/plant_analyzer, -/obj/machinery/camera/directional/east{ - c_tag = "Permabrig - Garden"; - network = list("ss13","prison") - }, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "czi" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/siding/purple{ @@ -10881,6 +10889,14 @@ }, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/freezerchamber) +"cBn" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cBr" = ( /obj/machinery/suit_storage_unit/atmos, /obj/effect/turf_decal/box/red/corners{ @@ -11993,6 +12009,17 @@ /obj/structure/sign/warning/secure_area/directional/north, /turf/open/floor/iron, /area/station/science/robotics/mechbay) +"cOY" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cPb" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -13831,36 +13858,11 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/service/kitchen/abandoned) -"doM" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Cell 1" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/iron, -/area/station/security/prison/safe) "doR" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/atmos/project) -"dps" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "dpI" = ( /obj/structure/table, /obj/item/clothing/gloves/latex, @@ -14539,25 +14541,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"dwX" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Cell 5" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/prison/safe) "dwY" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/duct, @@ -14683,30 +14666,6 @@ "dyx" = ( /turf/open/floor/iron/white, /area/station/science/research) -"dyH" = ( -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) -"dzk" = ( -/obj/effect/turf_decal/trimline/green/end, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "dzl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -15246,6 +15205,24 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) +"dGr" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "dGs" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/dresser, @@ -16027,6 +16004,18 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/breakroom) +"dQQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark/textured_edge{ + dir = 4 + }, +/area/station/security/brig) "dQS" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -17487,6 +17476,13 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/maintenance/port) +"ekR" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/item/shovel/spade, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "ekZ" = ( /obj/effect/turf_decal/box/white{ color = "#52B4E9" @@ -18759,6 +18755,12 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/iron/dark, /area/station/service/library/printer) +"eAI" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "eAO" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/purple/filled/warning{ @@ -19285,6 +19287,24 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/cafeteria, /area/station/service/cafeteria) +"eHJ" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "eHL" = ( /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -20058,13 +20078,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron, /area/station/engineering/atmos) -"eQx" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/item/shovel/spade, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "eQB" = ( /obj/machinery/door/airlock/public/glass{ name = "Holodeck Access" @@ -22829,6 +22842,27 @@ /obj/effect/spawner/random/trash/cigbutt, /turf/open/floor/plating, /area/station/hallway/secondary/construction) +"fyB" = ( +/obj/structure/cable, +/obj/machinery/button/flasher{ + id = "Cell 4"; + name = "Prisoner Flash"; + pixel_x = 25; + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/east{ + id = "permashut4"; + name = "Cell Lockdown Button"; + pixel_y = -6; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "fyH" = ( /obj/machinery/keycard_auth/directional/south{ pixel_x = 6 @@ -23557,6 +23591,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/department/chapel) +"fIO" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "fIQ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -23613,17 +23658,6 @@ "fJq" = ( /turf/closed/wall, /area/station/security/brig) -"fJx" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "fJF" = ( /obj/machinery/firealarm/directional/east, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -24255,6 +24289,14 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/interrogation) +"fSd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/prison/garden) "fSg" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -24522,6 +24564,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/secondary/exit) +"fVW" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/item/plant_analyzer, +/obj/machinery/camera/directional/east{ + c_tag = "Permabrig - Garden"; + network = list("ss13","prison") + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "fWc" = ( /obj/structure/chair/pew/left, /turf/open/floor/iron/chapel{ @@ -24676,30 +24729,6 @@ "fXz" = ( /turf/open/space, /area/space/nearstation) -"fXC" = ( -/obj/structure/cable, -/obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Blast Door" - }, -/obj/machinery/button/flasher{ - id = "Cell 1"; - name = "Prisoner Flash"; - pixel_x = 25; - pixel_y = 7 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "permashut1"; - name = "Cell Lockdown Button"; - pixel_y = -6; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "fXF" = ( /turf/closed/wall/r_wall, /area/station/engineering/atmos) @@ -25597,27 +25626,6 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/iron, /area/station/maintenance/port/fore) -"gjc" = ( -/obj/structure/cable, -/obj/machinery/button/flasher{ - id = "Cell 4"; - name = "Prisoner Flash"; - pixel_x = 25; - pixel_y = 7 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "permashut4"; - name = "Cell Lockdown Button"; - pixel_y = -6; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "gjg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -25670,6 +25678,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/paramedic) +"gjX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) "gkp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -26846,12 +26863,6 @@ /obj/structure/sign/directions/ptl/directional/west, /turf/open/floor/plating, /area/station/maintenance/port) -"gwL" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/food_or_drink/seed, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "gwM" = ( /obj/effect/turf_decal/arrows/white, /turf/open/floor/iron/dark, @@ -27042,24 +27053,6 @@ /obj/structure/window/reinforced/spawner, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"gzQ" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Cell 3" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/prison/safe) "gzV" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, @@ -27980,14 +27973,6 @@ /obj/structure/sink/directional/west, /turf/open/floor/iron/white, /area/station/medical/pathology) -"gLT" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/electric_shock/directional/west, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "gMh" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/stripes/line, @@ -28242,13 +28227,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, /turf/open/floor/iron, /area/station/maintenance/fore) -"gPj" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/random/food_or_drink/seed, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plating, -/area/station/service/hydroponics/garden/abandoned) "gPm" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -29066,6 +29044,24 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"hay" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/poddoor/preopen{ + id = "brigprison"; + name = "Prison Blast Door" + }, +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Visitation" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/effect/landmark/navigate_destination, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/visit) "haF" = ( /obj/structure/sign/warning/secure_area/directional/west, /turf/open/space/basic, @@ -30475,6 +30471,18 @@ /obj/item/storage/fancy/candle_box, /turf/open/floor/carpet/royalblack, /area/station/service/chapel/office) +"hsK" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/growing/tray, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hsQ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -34154,14 +34162,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"inx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/siding/green{ - dir = 1 - }, -/mob/living/basic/pet/potty, -/turf/open/floor/iron/dark/smooth_large, -/area/station/service/hydroponics) "inR" = ( /obj/machinery/door/airlock/research{ name = "Research and Development Lab" @@ -37302,16 +37302,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/service) -"jdl" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/ambrosia_vulgaris{ - pixel_x = -30 - }, -/obj/machinery/light/directional/west, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "jds" = ( /obj/structure/table/reinforced, /obj/item/folder/red, @@ -37576,14 +37566,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/port) -"jgb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) "jgd" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/tile/red/anticorner/contrasted, @@ -38971,6 +38953,17 @@ /obj/effect/spawner/random/structure/tank_holder, /turf/open/floor/plating, /area/station/maintenance/department/science) +"jxU" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "jye" = ( /obj/structure/lattice, /obj/structure/window/reinforced/spawner/directional/north, @@ -39241,14 +39234,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/open/floor/iron, /area/station/engineering/atmos/storage) -"jAp" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/east, -/obj/item/radio/intercom/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "jAI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -39441,14 +39426,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/iron, /area/station/cargo/miningoffice) -"jCv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison/garden) "jCw" = ( /obj/machinery/power/terminal{ dir = 4 @@ -40134,6 +40111,25 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron, /area/station/cargo/storage) +"jLj" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Cell 1" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "jLm" = ( /obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage" @@ -42049,6 +42045,22 @@ "khb" = ( /turf/closed/wall/r_wall, /area/station/science/robotics/lab) +"khc" = ( +/obj/structure/cable, +/obj/machinery/seed_extractor, +/obj/item/seeds/tree, +/obj/item/seeds/watermelon, +/obj/item/seeds/wheat, +/obj/item/seeds/sugarcane, +/obj/item/seeds/orange, +/obj/item/seeds/grape, +/obj/item/seeds/cocoapod, +/obj/item/seeds/banana, +/obj/item/seeds/apple, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "khl" = ( /obj/structure/mirror/directional/north, /obj/structure/sink/directional/south, @@ -42487,6 +42499,21 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/space/basic, /area/space/nearstation) +"kmv" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/service/hydroponics) "kmy" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/railing{ @@ -42751,6 +42778,24 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"krt" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Cell 2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "krx" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -43350,6 +43395,24 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/ai_monitored/command/storage/eva) +"kzi" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Cell 3" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "kzm" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -43812,17 +43875,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"kFi" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kFv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -45273,6 +45325,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/green/visible/layer4, /turf/open/floor/engine, /area/station/engineering/supermatter) +"kXS" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/food_or_drink/seed, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden/abandoned) "kXV" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/components/unary/passive_vent{ @@ -48313,6 +48372,17 @@ }, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"lJH" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/north, +/turf/open/floor/iron, +/area/station/service/hydroponics) "lJJ" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51090,6 +51160,24 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/commons/storage/primary) +"mur" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/growing/tray, +/obj/item/radio/intercom/directional/north, +/obj/machinery/light/directional/east, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Hydroponics Front Fore"; + dir = 6; + name = "service camera" + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "mus" = ( /obj/item/kirbyplants/random, /obj/machinery/airalarm/directional/north, @@ -51176,24 +51264,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible, /turf/open/floor/iron, /area/station/engineering/supermatter/room) -"mvs" = ( -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 6; - req_access = list("brig") - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison/visit) "mvv" = ( /obj/machinery/conveyor{ dir = 4; @@ -51574,6 +51644,16 @@ /obj/structure/sink/kitchen/directional/west, /turf/open/floor/iron/cafeteria, /area/station/security/prison/mess) +"mAC" = ( +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "mAD" = ( /obj/machinery/door/poddoor/preopen{ id = "brigfront"; @@ -53532,24 +53612,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/storage/gas) -"mYl" = ( -/obj/effect/turf_decal/tile/green, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/growing/tray, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/east, -/obj/machinery/camera/directional/east{ - c_tag = "Service - Hydroponics Front Fore"; - dir = 6; - name = "service camera" - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "mYo" = ( /obj/effect/turf_decal/trimline/yellow/line, /turf/open/floor/iron, @@ -55951,14 +56013,6 @@ /obj/structure/sign/departments/xenobio/directional/east, /turf/open/floor/iron, /area/station/maintenance/department/science) -"nFc" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "nFj" = ( /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/opposingcorners, @@ -56352,12 +56406,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"nJV" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/growing/soil, -/obj/item/shovel/spade, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden/abandoned) "nJW" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -56372,14 +56420,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/robotics/lab) -"nJY" = ( -/obj/machinery/door/airlock/security{ - name = "Isolation Cell" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/plating, -/area/station/security/execution/transfer) "nKe" = ( /obj/structure/bed, /obj/item/bedsheet/dorms, @@ -57334,21 +57374,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"nXn" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/end{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "nXo" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -57705,27 +57730,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/engineering/atmos) -"obL" = ( -/obj/machinery/button/flasher{ - id = "Cell 5"; - name = "Prisoner Flash"; - pixel_x = 25; - pixel_y = 7 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "permashut5"; - name = "Cell Lockdown Button"; - pixel_y = -6; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "obO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -62642,6 +62646,23 @@ /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/iron/textured_large, /area/station/engineering/atmos/project) +"pqI" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/growing/tray, +/obj/item/radio/intercom/directional/south, +/obj/machinery/camera/directional/east{ + c_tag = "Service - Hydroponics Front Aft"; + name = "service camera" + }, +/obj/machinery/light/directional/east, +/turf/open/floor/iron, +/area/station/service/hydroponics) "pqN" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63604,24 +63625,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pCV" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "pCY" = ( /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -64277,24 +64280,6 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/breakroom) -"pKb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/structure/closet/crate/hydroponics, -/obj/item/seeds/tree, -/obj/effect/spawner/random/contraband/prison, -/obj/item/seeds/pumpkin, -/obj/item/seeds/wheat, -/obj/item/seeds/ambrosia, -/obj/item/seeds/grass, -/obj/item/seeds/carrot, -/obj/item/seeds/tomato, -/obj/item/seeds/potato, -/obj/item/seeds/garlic, -/obj/item/seeds/onion, -/obj/item/paper/guides/jobs/hydroponics, -/turf/open/floor/iron, -/area/station/security/prison/garden) "pKc" = ( /obj/structure/cable, /obj/effect/decal/cleanable/glass, @@ -64677,22 +64662,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"pOD" = ( -/obj/structure/cable, -/obj/machinery/seed_extractor, -/obj/item/seeds/tree, -/obj/item/seeds/watermelon, -/obj/item/seeds/wheat, -/obj/item/seeds/sugarcane, -/obj/item/seeds/orange, -/obj/item/seeds/grape, -/obj/item/seeds/cocoapod, -/obj/item/seeds/banana, -/obj/item/seeds/apple, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "pOP" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ @@ -66580,6 +66549,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/hallway/secondary/entry) +"qle" = ( +/obj/machinery/light/small/directional/north, +/obj/machinery/growing/soil, +/obj/item/shovel/spade, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden/abandoned) "qlp" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -68077,6 +68052,18 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"qFA" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "qFF" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -69911,18 +69898,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/science/xenobiology) -"rdr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/growing/tray, -/obj/machinery/light/directional/west, -/turf/open/floor/iron, -/area/station/service/hydroponics) "rdu" = ( /obj/machinery/computer/security/mining, /obj/effect/turf_decal/tile/purple/half/contrasted{ @@ -70568,6 +70543,16 @@ }, /turf/open/floor/iron/grimy, /area/station/service/library) +"rkM" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "rkN" = ( /obj/item/kirbyplants/random, /obj/machinery/status_display/evac/directional/south, @@ -73137,6 +73122,14 @@ /obj/effect/turf_decal/siding/white/corner, /turf/open/floor/iron/freezer, /area/station/service/kitchen/coldroom) +"rQV" = ( +/obj/effect/landmark/blobstart, +/obj/effect/landmark/generic_maintenance_landmark, +/obj/effect/landmark/event_spawn, +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/station/service/hydroponics/garden/abandoned) "rRa" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -73807,16 +73800,6 @@ }, /turf/open/floor/iron, /area/station/cargo/office) -"sao" = ( -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "sau" = ( /obj/machinery/blackbox_recorder, /obj/machinery/atmospherics/pipe/heat_exchanging/simple, @@ -74324,6 +74307,30 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"shF" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "brigprison"; + name = "Prison Blast Door" + }, +/obj/machinery/button/flasher{ + id = "Cell 1"; + name = "Prisoner Flash"; + pixel_x = 25; + pixel_y = 7 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/east{ + id = "permashut1"; + name = "Cell Lockdown Button"; + pixel_y = -6; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "shJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 4 @@ -74357,6 +74364,14 @@ dir = 10 }, /area/station/service/barber) +"sic" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/green{ + dir = 1 + }, +/mob/living/basic/pet/potty, +/turf/open/floor/iron/dark/smooth_large, +/area/station/service/hydroponics) "sie" = ( /obj/machinery/status_display/evac/directional/south, /obj/effect/turf_decal/tile/neutral{ @@ -76065,23 +76080,6 @@ "sEs" = ( /turf/closed/wall, /area/station/command/heads_quarters/captain/private) -"sEt" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/growing/tray, -/obj/item/radio/intercom/directional/south, -/obj/machinery/camera/directional/east{ - c_tag = "Service - Hydroponics Front Aft"; - name = "service camera" - }, -/obj/machinery/light/directional/east, -/turf/open/floor/iron, -/area/station/service/hydroponics) "sEv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ @@ -76293,20 +76291,6 @@ /obj/effect/turf_decal/trimline/green/filled/warning, /turf/open/floor/iron/white, /area/station/medical/medbay) -"sHL" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/iron, -/area/station/service/hydroponics) "sHQ" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, @@ -76919,6 +76903,18 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/maintenance/department/chapel) +"sOa" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/sign/poster/random/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "sOi" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/bot, @@ -77100,24 +77096,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit) -"sQD" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Cell 4" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/prison/safe) "sQH" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -77322,27 +77300,6 @@ }, /turf/open/floor/plating, /area/station/engineering/supermatter/room) -"sTq" = ( -/obj/structure/cable, -/obj/machinery/button/flasher{ - id = "Cell 2"; - name = "Prisoner Flash"; - pixel_x = 25; - pixel_y = 7 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "permashut2"; - name = "Cell Lockdown Button"; - pixel_y = -6; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "sTv" = ( /obj/machinery/status_display/evac/directional/north, /obj/structure/cable, @@ -83110,17 +83067,6 @@ dir = 1 }, /area/station/hallway/primary/central/aft) -"unh" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/turf/open/floor/iron, -/area/station/service/hydroponics) "unj" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, @@ -83661,6 +83607,14 @@ /obj/effect/turf_decal/siding/green, /turf/open/floor/iron/dark/smooth_large, /area/station/service/hydroponics) +"uvo" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/east, +/obj/item/radio/intercom/directional/east, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating, +/area/station/security/prison/garden) "uvr" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/structure/window/reinforced/spawner/directional/north, @@ -84575,6 +84529,15 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/project) +"uGL" = ( +/obj/machinery/door/poddoor/preopen{ + id = "brigfront"; + name = "Brig Blast Door" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/brig) "uGP" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/effect/turf_decal/stripes/line, @@ -85458,24 +85421,6 @@ dir = 4 }, /area/station/hallway/secondary/entry) -"uSh" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Cell 2" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron, -/area/station/security/prison/safe) "uSp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -86448,13 +86393,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos/project) -"vex" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/prison/garden) "veD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -86494,15 +86432,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/fore) -"vfN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/prison/garden) "vfS" = ( /obj/effect/turf_decal/tile/yellow/half/contrasted{ dir = 8 @@ -86682,6 +86611,24 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"vhZ" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Cell 4" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "vii" = ( /turf/open/floor/iron/white/side{ dir = 4 @@ -87179,24 +87126,6 @@ /obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron, /area/station/command/gateway) -"vos" = ( -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/poddoor/preopen{ - id = "brigprison"; - name = "Prison Blast Door" - }, -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Visitation" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/obj/effect/landmark/navigate_destination, -/turf/open/floor/iron, -/area/station/security/prison/visit) "voE" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -88555,6 +88484,13 @@ /obj/machinery/duct, /turf/open/floor/iron/grimy, /area/station/service/bar/backroom) +"vDX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/prison/garden) "vEg" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/decal/cleanable/dirt, @@ -89078,17 +89014,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/port/aft) -"vLM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_edge{ - dir = 4 - }, -/area/station/security/brig) "vLP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -89134,19 +89059,6 @@ }, /turf/open/floor/iron, /area/station/security/courtroom) -"vME" = ( -/obj/effect/turf_decal/trimline/green/end, -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "vMU" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/stripes/line{ @@ -90484,6 +90396,27 @@ }, /turf/open/floor/iron/white, /area/station/science/research) +"weH" = ( +/obj/structure/cable, +/obj/machinery/button/flasher{ + id = "Cell 2"; + name = "Prisoner Flash"; + pixel_x = 25; + pixel_y = 7 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/east{ + id = "permashut2"; + name = "Cell Lockdown Button"; + pixel_y = -6; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "weM" = ( /obj/effect/turf_decal/tile/neutral/half{ dir = 1 @@ -91993,6 +91926,14 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"wtJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/prison/garden) "wtS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -92611,14 +92552,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/paramedic) -"wAt" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/security/prison/garden) "wAu" = ( /obj/effect/turf_decal/tile/neutral/half/contrasted{ dir = 4 @@ -92788,6 +92721,24 @@ /obj/structure/closet/firecloset, /turf/open/floor/iron, /area/station/engineering/main) +"wCs" = ( +/obj/machinery/button/flasher{ + id = "visitorflash"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/button/door/directional/north{ + id = "visitation"; + name = "Visitation Shutters"; + pixel_x = 6; + req_one_access = list("brig", "permabrig") + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/security/prison/visit) "wCv" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -94025,6 +93976,13 @@ dir = 1 }, /area/station/medical/morgue) +"wUY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "wUZ" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/siding/yellow{ @@ -94316,6 +94274,22 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) +"wZo" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/end{ + dir = 1 + }, +/obj/item/reagent_containers/cup/watering_can, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "wZu" = ( /obj/machinery/power/port_gen/pacman/pre_loaded, /obj/effect/turf_decal/delivery/red, @@ -95224,6 +95198,19 @@ /obj/item/flashlight, /turf/open/floor/iron, /area/station/commons/storage/primary) +"xlF" = ( +/obj/effect/turf_decal/trimline/green/end, +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "xlG" = ( /obj/effect/spawner/structure/window/reinforced/plasma, /turf/open/floor/plating, @@ -95390,22 +95377,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"xns" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/end{ - dir = 1 - }, -/obj/item/reagent_containers/cup/watering_can, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/green/mid_joiner{ - dir = 4 - }, -/turf/open/floor/iron/half{ - dir = 8 - }, -/area/station/service/hydroponics/garden) "xnu" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -95917,6 +95888,24 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"xvn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/tree, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/pumpkin, +/obj/item/seeds/wheat, +/obj/item/seeds/ambrosia, +/obj/item/seeds/grass, +/obj/item/seeds/carrot, +/obj/item/seeds/tomato, +/obj/item/seeds/potato, +/obj/item/seeds/garlic, +/obj/item/seeds/onion, +/obj/item/paper/guides/jobs/hydroponics, +/turf/open/floor/iron, +/area/station/security/prison/garden) "xvo" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red/half/contrasted{ @@ -96036,6 +96025,21 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/abandoned_gambling_den/gaming) +"xwV" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/green/mid_joiner{ + dir = 8 + }, +/turf/open/floor/iron/half{ + dir = 8 + }, +/area/station/service/hydroponics/garden) "xxa" = ( /obj/structure/rack, /obj/effect/spawner/random/engineering/flashlight, @@ -96949,6 +96953,25 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/station/science/research) +"xGr" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Cell 5" + }, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "xGu" = ( /obj/structure/frame/machine{ anchored = 1 @@ -97266,6 +97289,15 @@ /obj/machinery/duct, /turf/open/floor/iron, /area/station/science/research) +"xKs" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/iron, +/area/station/service/hydroponics) "xKv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/brown/visible, /obj/effect/spawner/structure/window/reinforced/plasma, @@ -97854,16 +97886,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/lockers) -"xTm" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "xTr" = ( /turf/closed/wall, /area/station/science/robotics/lab) @@ -98171,18 +98193,6 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/commons/storage/primary) -"xXd" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/sign/poster/random/directional/south, -/turf/open/floor/iron, -/area/station/service/hydroponics) "xXj" = ( /obj/structure/table/wood, /obj/item/clipboard, @@ -99153,6 +99163,14 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/nuke_storage) +"ykr" = ( +/obj/machinery/door/airlock/security{ + name = "Isolation Cell" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/plating, +/area/station/security/execution/transfer) "yks" = ( /obj/effect/turf_decal/bot_white, /obj/effect/turf_decal/tile/neutral/half, @@ -127937,11 +127955,11 @@ gKu csw qsn oYs -nJV +qle wNn -gwL +eAI kJr -dps +auf oYs tFp hLq @@ -128194,11 +128212,11 @@ vZQ auZ uTq oYs -gPj +kXS rTM -buj +rQV kJr -gwL +eAI oYs dqC fUQ @@ -129717,7 +129735,7 @@ oYs rcP oYs oYs -bgl +kmv mpH mrw mrw @@ -129725,7 +129743,7 @@ ogZ hwo dwN rID -rdr +hsK csw csw oUm @@ -129973,7 +129991,7 @@ oYs oYs nsf oYs -sHL +bCb glv hKE crg @@ -129983,7 +130001,7 @@ kQR whX tZN rID -xXd +sOa oYs vCn oYs @@ -130230,7 +130248,7 @@ oYs lMU llW oYs -xTm +rkM ueJ kyR jQd @@ -130487,15 +130505,15 @@ ltr qRN llW oYs -fJx +jxU ueJ -nFc +cBn vZo kDY ezw fdY bbQ -sao +mAC ueJ wsA kGt @@ -130746,15 +130764,15 @@ llW oYs hih ueJ -nFc +cBn bqC -inx +sic bqf uvl sXL -sao +mAC ueJ -bIG +biH csw frR cIa @@ -131001,17 +131019,17 @@ oYs qAB rVX oYs -xTm +rkM ueJ -nFc +cBn lPs iEr uGf hiT ygW -sao +mAC ueJ -aHd +xKs csw umN umN @@ -131258,7 +131276,7 @@ fhd thj pAy oYs -aeu +lJH ueJ rID xSz @@ -131515,7 +131533,7 @@ oYs oYs kAZ oYs -kFi +fIO csh rOc obH @@ -131525,7 +131543,7 @@ vGP xmg vYk crg -unh +cOY csw wpx ykM @@ -131773,7 +131791,7 @@ oYs cPL oYs oYs -mYl +mur csh dwN dwN @@ -131781,7 +131799,7 @@ eYR dwN dwN crg -sEt +pqI csw csw xhi @@ -137942,7 +137960,7 @@ prJ jYM qRw tPD -pOD +khc tWU sSH kVP @@ -138457,9 +138475,9 @@ rkS qnI gvq wkP -xns -bgo -dzk +wZo +dGr +xlF qAV daR dla @@ -138971,9 +138989,9 @@ rza qRw wTJ vxu -nXn -pCV -vME +xwV +eHJ +ayQ qAV jKA sHC @@ -149556,7 +149574,7 @@ pjj uzD fJq nlY -vLM +dQQ oSx qJZ aPx @@ -149813,7 +149831,7 @@ koq dmO fJq qdt -mAD +uGL mAD qJZ lFP @@ -150033,7 +150051,7 @@ vXr qIH qIH qIH -nJY +ykr qIH qIH vXr @@ -150541,19 +150559,19 @@ aaa vXr jbn xIl -obL +bUc amU xIl -gjc +fyB pJo xIl aSW pJo xIl -sTq +weH pJo ayM -fXC +shF iKL krO jrA @@ -150576,15 +150594,15 @@ dbw cOE plh tOP -jDB +wUY jPR -jDB +wUY gTb +wUY jDB -jDB -jDB +wUY kKa -dyH +qFA kKa lzJ pzP @@ -150797,19 +150815,19 @@ uHd qYo mSe mSe -dwX +xGr mSe mSe -sQD +vhZ mSe mSe -gzQ +kzi mSe mSe -uSh +krt mSe mSe -doM +jLj mSe hpN krO @@ -152591,9 +152609,9 @@ aaa uHd aaa arw -gLT -jdl -eQx +ckH +arS +ekR pgn gOo bfs @@ -152848,7 +152866,7 @@ qYo uHd aaa arw -pKb +xvn rRL ioT cVV @@ -153105,9 +153123,9 @@ aaa uHd aaa arw -jgb +fSd mze -vfN +gjX fJG vxr upM @@ -153362,9 +153380,9 @@ aaa qYo aaa arw -jCv +wtJ mze -vex +vDX pAx diC vTP @@ -153876,9 +153894,9 @@ qYo uHd aaa arw -wAt -jAp -czg +aRn +uvo +fVW rRm iiy tUB @@ -154662,10 +154680,10 @@ bgE gzj kia lAj -mvs +wCs iNf uin -vos +hay lCQ krO jrA diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 54b315ed98bd..69d3a498293c 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -209,6 +209,11 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/plating, /area/station/maintenance/port/greater) +"afF" = ( +/obj/machinery/growing/soil, +/obj/item/shovel/spade, +/turf/open/floor/grass, +/area/station/security/prison/garden) "afK" = ( /obj/structure/cable, /turf/open/floor/iron/stairs/left{ @@ -328,16 +333,6 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/iron/smooth, /area/station/security/holding_cell) -"ahI" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ahK" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -1821,6 +1816,15 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"aGj" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Visitation" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/visit) "aGr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/camera/directional/east{ @@ -2672,6 +2676,14 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"aUy" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/full, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/brig/entrance) "aUA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 @@ -2929,6 +2941,37 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"aZn" = ( +/obj/structure/table, +/obj/machinery/button/door{ + id = "Prison Gate"; + name = "Prison Wing Lockdown"; + pixel_x = 5; + pixel_y = 8; + req_access = list("brig", "permabrig") + }, +/obj/machinery/button/door{ + id = "Trial Transfer"; + name = "Trial Transfer Lockdown"; + pixel_x = -7; + pixel_y = 8; + req_access = list("brig", "permabrig") + }, +/obj/machinery/button/door{ + id = "Secure Gate"; + name = "Cell Shutters"; + pixel_x = -7; + pixel_y = -3; + req_access = list("brig", "permabrig") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 1 + }, +/turf/open/floor/iron/textured, +/area/station/security/brig) "aZo" = ( /obj/structure/extinguisher_cabinet/directional/west, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -3433,6 +3476,29 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/mine/eva) +"bgu" = ( +/obj/machinery/button/door/directional/north{ + id = "permainner"; + name = "Inner Bolt Control"; + normaldoorcontrol = 1; + pixel_x = -6; + specialfunctions = 4; + req_one_access = list("brig", "permabrig") + }, +/obj/machinery/button/door/directional/north{ + id = "permaouter"; + name = "Outer Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 6; + specialfunctions = 4; + req_one_access = list("brig", "permabrig") + }, +/obj/item/paper/crumpled{ + default_raw_text = "Remember! Corporate spent a lot of money to create this state of the art fashion show. If we EVER even so much as HEAR a rumor that a news crew or corporate rep is coming by, this place needs to be in TIP TOP condition. It's all of our asses (and our pensions) if it's not."; + name = "Crumpled Memo" + }, +/turf/open/floor/iron/smooth, +/area/station/security/execution/transfer) "bgx" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/aft) @@ -3984,16 +4050,6 @@ /obj/machinery/atmospherics/pipe/layer_manifold/supply/visible, /turf/closed/wall/r_wall, /area/station/maintenance/department/medical/central) -"boV" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "bpd" = ( /obj/machinery/power/smes/engineering, /obj/effect/turf_decal/delivery, @@ -4265,6 +4321,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"buC" = ( +/obj/machinery/growing/tray, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "buW" = ( /obj/structure/lattice, /obj/structure/sign/warning/directional/south, @@ -5831,12 +5896,6 @@ /obj/effect/landmark/navigate_destination/dockescpod1, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"bRz" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/turf/open/floor/grass, -/area/station/maintenance/starboard/aft) "bRA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -6174,6 +6233,10 @@ /obj/effect/spawner/random/techstorage/ai_all, /turf/open/floor/iron, /area/station/engineering/storage/tech) +"bXI" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/security/prison/garden) "bXL" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/airalarm/directional/west, @@ -6510,12 +6573,6 @@ /obj/item/pillow/random, /turf/open/floor/wood, /area/station/commons/dorms) -"ccr" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron/smooth_half, -/area/station/security/brig/upper) "ccs" = ( /obj/structure/disposalpipe/segment, /obj/effect/landmark/start/hangover, @@ -6734,16 +6791,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"cfR" = ( -/obj/machinery/growing/tray, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/redbeet, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "cfS" = ( /obj/item/clothing/suit/costume/snowman{ name = "Man of Snow" @@ -6899,6 +6946,16 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"cis" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Permabrig 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/access/any/security/permabrig, +/turf/open/floor/plating, +/area/station/security/prison/safe) "ciG" = ( /obj/machinery/door/airlock/external{ name = "Security Yard"; @@ -8254,16 +8311,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) -"cCF" = ( -/obj/machinery/growing/tray, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/carrot, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "cCV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/portables_connector/visible, @@ -9396,6 +9443,14 @@ /obj/machinery/holopad, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"cUf" = ( +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/red/half, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/smooth_half, +/area/station/security/brig/upper) "cUt" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -10151,18 +10206,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/atmos/mix) -"dha" = ( -/obj/machinery/door/airlock/security/glass{ - id_tag = "permaouter"; - name = "Permabrig Transfer" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "perma-entrance" - }, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/dark/textured, -/area/station/security/execution/transfer) "dhj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/window/reinforced/spawner, @@ -10322,6 +10365,14 @@ }, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) +"diT" = ( +/obj/machinery/growing/tray, +/obj/item/seeds/soya, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "diV" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 6 @@ -11336,13 +11387,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/engineering/lobby) -"dAx" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/item/cultivator/rake, -/turf/open/floor/grass, -/area/station/maintenance/starboard/aft) "dAB" = ( /obj/machinery/door/window/brigdoor{ name = "Research Director Observation"; @@ -12547,11 +12591,6 @@ dir = 8 }, /area/station/science/research) -"dWK" = ( -/obj/machinery/growing/soil, -/obj/item/shovel/spade, -/turf/open/floor/grass, -/area/station/security/prison/garden) "dWX" = ( /obj/machinery/modular_computer/preset/engineering, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -13460,6 +13499,16 @@ "elw" = ( /turf/closed/wall/r_wall, /area/station/maintenance/starboard/upper) +"elQ" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "elU" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/effect/turf_decal/tile/blue/opposingcorners{ @@ -15473,19 +15522,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"eUi" = ( -/obj/item/seeds/apple, -/obj/item/seeds/banana, -/obj/item/seeds/cocoapod, -/obj/item/seeds/grape, -/obj/item/seeds/orange, -/obj/item/seeds/sugarcane, -/obj/item/seeds/wheat, -/obj/item/seeds/watermelon, -/obj/structure/table/glass, -/obj/item/seeds/tree, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "eUw" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral/diagonal_edge, @@ -15726,6 +15762,17 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"eXC" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Prison Wing" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/smooth, +/area/station/security/execution/transfer) "eXH" = ( /turf/closed/wall/r_wall, /area/station/medical/chemistry) @@ -16147,6 +16194,11 @@ /obj/machinery/smartfridge/chemistry/virology/preloaded, /turf/open/floor/iron/white, /area/station/medical/pathology) +"ffY" = ( +/obj/machinery/growing/soil, +/obj/item/plant_analyzer, +/turf/open/floor/grass, +/area/station/security/prison/garden) "ffZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -16402,6 +16454,14 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/white, /area/mine/living_quarters) +"fkf" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red/full, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/dark/textured_large, +/area/station/security/brig/entrance) "fkj" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -16448,16 +16508,6 @@ dir = 1 }, /area/station/engineering/atmos/storage/gas) -"fkV" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Permabrig Maintenance" - }, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/plating, -/area/station/security/prison/safe) "fkX" = ( /obj/structure/lattice/catwalk, /turf/open/openspace, @@ -16700,13 +16750,6 @@ dir = 9 }, /area/station/security/prison/safe) -"fpA" = ( -/obj/machinery/growing/soil, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "fpD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -17433,37 +17476,6 @@ /obj/structure/marker_beacon/burgundy, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) -"fCd" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "Prison Gate"; - name = "Prison Wing Lockdown"; - pixel_x = 5; - pixel_y = 8; - req_access = list("brig") - }, -/obj/machinery/button/door{ - id = "Trial Transfer"; - name = "Trial Transfer Lockdown"; - pixel_x = -7; - pixel_y = 8; - req_access = list("brig") - }, -/obj/machinery/button/door{ - id = "Secure Gate"; - name = "Cell Shutters"; - pixel_x = -7; - pixel_y = -3; - req_access = list("brig") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 - }, -/turf/open/floor/iron/textured, -/area/station/security/brig) "fCw" = ( /obj/machinery/door/morgue{ name = "Relic Closet"; @@ -18496,11 +18508,6 @@ }, /turf/open/floor/wood, /area/station/security/prison/rec) -"fWe" = ( -/obj/machinery/growing/soil, -/obj/item/plant_analyzer, -/turf/open/floor/grass, -/area/station/security/prison/garden) "fWl" = ( /obj/structure/table, /obj/item/stock_parts/micro_laser, @@ -19178,6 +19185,16 @@ }, /turf/open/floor/iron/cafeteria, /area/mine/laborcamp) +"ggm" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ggn" = ( /obj/machinery/door/airlock/atmos{ name = "Atmospherics Maintenance" @@ -19259,14 +19276,6 @@ "ghY" = ( /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/atmos) -"giD" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/item/seeds/watermelon, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "giH" = ( /obj/structure/lattice/catwalk, /obj/machinery/airalarm/directional/south, @@ -20028,14 +20037,6 @@ /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/iron, /area/station/science/xenobiology) -"gvV" = ( -/obj/machinery/growing/tray, -/obj/item/seeds/soya, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "gwm" = ( /obj/machinery/door/firedoor/heavy, /turf/open/floor/iron/white/side{ @@ -21099,6 +21100,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"gNX" = ( +/obj/machinery/button/door/directional/north{ + id = "visitation"; + name = "Visitation Shutters"; + pixel_x = 6; + pixel_y = -24; + req_one_access = list("brig", "permabrig") + }, +/obj/machinery/button/flasher{ + id = "visitorflash"; + pixel_x = -6; + pixel_y = -24 + }, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron, +/area/station/security/prison/visit) "gOb" = ( /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ @@ -22374,16 +22391,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"hlP" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "hlS" = ( /obj/structure/table, /obj/item/clothing/under/misc/burial, @@ -24029,35 +24036,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) -"hQP" = ( -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/red/half, -/turf/open/floor/iron/smooth_half, -/area/station/security/brig/upper) "hQQ" = ( /obj/docking_port/stationary/escape_pod{ dir = 4 }, /turf/open/floor/plating/snowed/icemoon, /area/icemoon/surface/outdoors/nospawn) -"hRp" = ( -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 6; - pixel_y = -24; - req_access = list("brig") - }, -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron, -/area/station/security/prison/visit) "hRw" = ( /obj/structure/chair/wood{ dir = 8 @@ -26157,16 +26141,6 @@ /obj/structure/sign/poster/contraband/random/directional/east, /turf/open/floor/plating, /area/station/maintenance/port/aft) -"iAA" = ( -/obj/machinery/growing/tray, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/item/cultivator, -/obj/item/seeds/potato, -/obj/effect/turf_decal/tile/green/half/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "iAJ" = ( /obj/effect/turf_decal/siding/white{ dir = 8 @@ -26317,6 +26291,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"iCM" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/growing/soil, +/obj/machinery/light/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics) "iCO" = ( /obj/machinery/vending/cola/red, /turf/open/floor/iron/dark/textured, @@ -26949,6 +26929,12 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"iOi" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/turf/open/floor/grass, +/area/station/maintenance/starboard/aft) "iOs" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/airalarm/directional/south, @@ -27702,13 +27688,6 @@ /obj/item/kitchen/spoon/plastic, /turf/open/floor/iron, /area/station/security/prison/mess) -"iZy" = ( -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "iZz" = ( /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/labor_camp) @@ -28781,6 +28760,16 @@ dir = 1 }, /area/station/hallway/secondary/service) +"jtv" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "jtx" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/red, @@ -30761,6 +30750,14 @@ }, /turf/open/floor/iron, /area/mine/laborcamp) +"kby" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "kbJ" = ( /obj/machinery/field/generator, /turf/open/floor/plating, @@ -30989,6 +30986,17 @@ dir = 4 }, /area/station/command/gateway) +"keH" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics) "keL" = ( /obj/machinery/light_switch/directional/south, /obj/effect/turf_decal/tile/neutral/half/contrasted, @@ -31222,6 +31230,14 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"khE" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig/upper) "khF" = ( /obj/machinery/light/small/directional/north, /obj/structure/sign/warning/gas_mask/directional/north{ @@ -32137,14 +32153,6 @@ }, /turf/open/floor/iron/kitchen/diagonal, /area/station/service/kitchen) -"kvu" = ( -/obj/machinery/door/airlock/security{ - id_tag = "IsolationCell"; - name = "Isolation Cell" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/smooth, -/area/station/security/prison/safe) "kvE" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron/smooth, @@ -32155,6 +32163,16 @@ }, /turf/open/floor/iron/dark/textured, /area/station/security/office) +"kvN" = ( +/obj/machinery/growing/tray, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/carrot, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "kvR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -33324,6 +33342,14 @@ /obj/effect/turf_decal/tile/dark_green, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai_upload) +"kPe" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/watermelon, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "kPg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -33629,14 +33655,6 @@ /obj/effect/turf_decal/tile/brown/half/contrasted, /turf/open/floor/iron/dark/side, /area/mine/eva) -"kTO" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "kTQ" = ( /obj/effect/turf_decal/siding/yellow{ dir = 6 @@ -33707,6 +33725,13 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/engineering/lobby) +"kVV" = ( +/obj/machinery/growing/soil, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "kWa" = ( /obj/structure/fireplace, /turf/open/floor/plating, @@ -34384,13 +34409,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port/greater) -"lgz" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/textured_large, -/area/station/security/brig/entrance) "lgA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -35512,6 +35530,16 @@ /obj/structure/sign/poster/contraband/random/directional/north, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) +"lzp" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Permabrig Maintenance" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/plating, +/area/station/security/prison/safe) "lzq" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -35649,6 +35677,13 @@ /obj/structure/flora/grass/green/style_random, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/surface/outdoors/nospawn) +"lBK" = ( +/obj/machinery/growing/tray, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/onion, +/obj/effect/turf_decal/tile/green/anticorner/contrasted, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "lBR" = ( /turf/closed/wall, /area/station/security/prison/toilet) @@ -36901,10 +36936,23 @@ /obj/structure/closet/chefcloset, /turf/open/floor/plating, /area/station/service/kitchen/coldroom) +"lZc" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/turf/open/floor/grass, +/area/station/security/prison/garden) "lZi" = ( /obj/structure/railing, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"lZr" = ( +/obj/machinery/growing/soil, +/obj/machinery/light/directional/west, +/obj/structure/sign/poster/contraband/kudzu{ + pixel_x = -32 + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "lZv" = ( /obj/structure/table/glass, /obj/item/seeds/bamboo, @@ -37483,6 +37531,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/disposal/incinerator) +"mkj" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "mku" = ( /obj/effect/spawner/random/structure/grille, /obj/effect/decal/cleanable/glass, @@ -38356,13 +38411,6 @@ }, /turf/open/floor/iron, /area/station/maintenance/starboard/fore) -"mzP" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red/full, -/turf/open/floor/iron/dark/textured_large, -/area/station/security/brig/entrance) "mAc" = ( /obj/machinery/door/airlock/maintenance{ name = "Mining Maintenance" @@ -38487,10 +38535,6 @@ /obj/structure/cable/layer3, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/ai) -"mCT" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "mCX" = ( /obj/machinery/duct, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -38923,6 +38967,14 @@ /obj/machinery/duct, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mKi" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/obj/item/seeds/berry, +/turf/open/floor/grass, +/area/station/maintenance/starboard/fore) "mKq" = ( /obj/structure/closet/secure_closet/evidence, /obj/machinery/light/small/directional/north, @@ -39850,6 +39902,16 @@ dir = 8 }, /area/mine/eva) +"nas" = ( +/obj/machinery/growing/tray, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/item/cultivator, +/obj/item/seeds/potato, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "naO" = ( /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ dir = 8 @@ -40177,10 +40239,6 @@ }, /turf/open/floor/wood, /area/station/security/courtroom) -"neM" = ( -/obj/machinery/growing/soil, -/turf/open/misc/asteroid/snow/icemoon, -/area/icemoon/underground/explored) "neR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/visible, /obj/machinery/meter, @@ -40698,12 +40756,6 @@ }, /turf/open/floor/iron, /area/station/commons/dorms) -"nmr" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/effect/spawner/random/contraband/cannabis, -/turf/open/floor/grass, -/area/station/security/prison/garden) "nmz" = ( /obj/structure/lattice/catwalk, /obj/structure/railing{ @@ -42322,15 +42374,6 @@ }, /turf/open/misc/asteroid/snow/icemoon, /area/icemoon/underground/explored) -"nKn" = ( -/obj/machinery/growing/tray, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "nKr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -42684,6 +42727,16 @@ /obj/item/pillow/random, /turf/open/floor/carpet, /area/station/commons/dorms) +"nOv" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig/upper) "nOw" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -43205,6 +43258,13 @@ /obj/item/stamp/qm, /turf/open/floor/carpet, /area/station/cargo/quartermaster) +"nWr" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/item/cultivator/rake, +/turf/open/floor/grass, +/area/station/maintenance/starboard/aft) "nWy" = ( /obj/structure/sign/poster/official/work_for_a_future, /turf/closed/wall, @@ -44257,6 +44317,11 @@ /obj/structure/chair, /turf/open/floor/iron, /area/station/cargo/storage) +"ooB" = ( +/obj/machinery/growing/soil, +/obj/machinery/light/directional/east, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "ooL" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 4 @@ -45005,10 +45070,6 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron/white, /area/station/maintenance/port/fore) -"ozX" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/security/prison/garden) "ozZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -46262,6 +46323,10 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/freezer, /area/station/commons/toilet) +"oVw" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "oVy" = ( /obj/machinery/door/airlock/security{ name = "Permabrig Lab" @@ -50411,16 +50476,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/department/medical/morgue) -"qoU" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 8 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "qoY" = ( /obj/effect/spawner/random/structure/crate_abandoned, /turf/open/floor/plating, @@ -51438,17 +51493,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat_interior) -"qFC" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics) "qFU" = ( /obj/structure/cable/multilayer/multiz, /obj/structure/window/reinforced/spawner, @@ -51693,16 +51737,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) -"qJY" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Permabrig 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/access/all/security/brig, -/turf/open/floor/plating, -/area/station/security/prison/safe) "qKk" = ( /obj/machinery/door/airlock/mining/glass{ id_tag = "innercargo"; @@ -52247,14 +52281,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) -"qSa" = ( -/obj/machinery/growing/soil, -/obj/machinery/light/directional/west, -/obj/structure/sign/poster/contraband/kudzu{ - pixel_x = -32 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "qSb" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -52963,16 +52989,6 @@ /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/iron/dark, /area/station/science/robotics/lab) -"rdd" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 1 - }, -/mob/living/basic/pet/potty, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "rdl" = ( /obj/machinery/button/door/directional/east{ id = "misclab"; @@ -53950,12 +53966,6 @@ dir = 1 }, /area/station/security/prison) -"rwv" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/growing/soil, -/obj/machinery/light/directional/east, -/turf/open/floor/grass, -/area/station/service/hydroponics) "rwB" = ( /obj/machinery/atmospherics/pipe/bridge_pipe/orange/visible, /obj/machinery/atmospherics/pipe/bridge_pipe/green/visible{ @@ -54280,15 +54290,6 @@ }, /turf/open/floor/plating, /area/station/ai_monitored/turret_protected/aisat/maint) -"rAN" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/brig/upper) "rAO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -55499,6 +55500,13 @@ }, /turf/open/floor/engine/plasma, /area/station/engineering/atmos) +"rWJ" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/item/shovel/spade, +/turf/open/floor/grass, +/area/station/maintenance/starboard/aft) "rWO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -55511,17 +55519,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) -"rWU" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Prison Wing" - }, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/smooth, -/area/station/security/execution/transfer) "rWW" = ( /obj/machinery/vending/wardrobe/medi_wardrobe, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -55820,13 +55817,6 @@ }, /turf/open/floor/iron/smooth_half, /area/station/security/brig/upper) -"sbO" = ( -/obj/machinery/growing/tray, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/onion, -/obj/effect/turf_decal/tile/green/anticorner/contrasted, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "sbU" = ( /obj/machinery/vending/cigarette, /turf/open/floor/iron/dark, @@ -57366,6 +57356,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"sAY" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/blue/filled/warning, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "sBi" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -57835,10 +57831,6 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/service/hydroponics) -"sIm" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics) "sIt" = ( /turf/closed/wall, /area/station/maintenance/central/lesser) @@ -58016,6 +58008,10 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) +"sLB" = ( +/obj/machinery/growing/soil, +/turf/open/misc/asteroid/snow/icemoon, +/area/icemoon/underground/explored) "sLD" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/iron/fifty, @@ -58287,17 +58283,6 @@ /obj/item/radio/intercom/directional/west, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"sRc" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/machinery/light/directional/south, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "sRp" = ( /obj/structure/fence, /obj/effect/turf_decal/weather/snow/corner{ @@ -58446,15 +58431,6 @@ /obj/effect/mapping_helpers/airlock/access/all/command/teleporter, /turf/open/floor/plating, /area/station/maintenance/central/lesser) -"sUb" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Visitation" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/turf/open/floor/iron, -/area/station/security/prison/visit) "sUi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -58482,6 +58458,18 @@ }, /turf/open/floor/iron/smooth, /area/mine/eva) +"sUL" = ( +/obj/machinery/door/airlock/security/glass{ + id_tag = "permaouter"; + name = "Permabrig Transfer" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark/textured, +/area/station/security/execution/transfer) "sUN" = ( /obj/machinery/power/solar{ id = "starboardsolar"; @@ -60067,6 +60055,12 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/plating, /area/station/medical/treatment_center) +"txr" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/effect/spawner/random/contraband/cannabis, +/turf/open/floor/grass, +/area/station/security/prison/garden) "txE" = ( /obj/item/cigbutt, /obj/effect/decal/cleanable/dirt, @@ -61387,6 +61381,16 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/maintenance/space_hut/cabin) +"tUm" = ( +/obj/machinery/growing/tray, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/item/plant_analyzer, +/obj/effect/turf_decal/tile/green/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "tUn" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -61733,13 +61737,6 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating/icemoon, /area/icemoon/surface/outdoors/nospawn) -"tZd" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/item/shovel/spade, -/turf/open/floor/grass, -/area/station/maintenance/starboard/aft) "tZe" = ( /obj/machinery/vending/wardrobe/gene_wardrobe, /obj/structure/sign/poster/official/random/directional/north, @@ -62329,6 +62326,13 @@ /obj/effect/spawner/random/maintenance/three, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"uiJ" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/red/half, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron/smooth_half, +/area/station/security/brig/upper) "uiK" = ( /obj/machinery/light/directional/south, /obj/machinery/camera/directional/south, @@ -62840,15 +62844,20 @@ /obj/effect/spawner/random/structure/closet_private, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"urt" = ( -/obj/machinery/growing/soil, -/obj/machinery/light/directional/east, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "urx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"urC" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "urG" = ( /obj/effect/turf_decal/weather/snow/corner, /turf/open/floor/plating/snowed/icemoon, @@ -65112,6 +65121,16 @@ }, /turf/open/floor/plating, /area/station/commons/storage/mining) +"vgw" = ( +/obj/machinery/growing/tray, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/redbeet, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/tile/green/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/mine/laborcamp) "vgx" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -65309,12 +65328,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"vkg" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/blue/filled/warning, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "vky" = ( /obj/machinery/computer/pod/old/mass_driver_controller/trash{ pixel_x = -24; @@ -66491,6 +66504,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible, /turf/open/floor/iron/white, /area/station/medical/cryo) +"vCA" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "vCD" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -68238,11 +68262,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/medical/morgue) -"whr" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/turf/open/floor/grass, -/area/station/security/prison/garden) "whu" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -69195,14 +69214,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) -"wwG" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/siding/wideplating/dark{ - dir = 1 - }, -/obj/item/seeds/berry, -/turf/open/floor/grass, -/area/station/maintenance/starboard/fore) "wwI" = ( /obj/structure/chair, /obj/effect/turf_decal/stripes/line{ @@ -69681,16 +69692,6 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) -"wDs" = ( -/obj/machinery/growing/tray, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/item/plant_analyzer, -/obj/effect/turf_decal/tile/green/anticorner/contrasted{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/mine/laborcamp) "wDu" = ( /obj/effect/landmark/generic_maintenance_landmark, /obj/structure/cable, @@ -69912,6 +69913,16 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"wHk" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 10 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wHH" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/red{ @@ -69961,6 +69972,16 @@ /obj/structure/table, /turf/open/floor/plating, /area/station/maintenance/aft/greater) +"wIY" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/blue/filled/warning{ + dir = 1 + }, +/mob/living/basic/pet/potty, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "wJa" = ( /obj/machinery/light/warm/directional/north, /obj/effect/turf_decal/siding/wideplating/dark{ @@ -71422,29 +71443,6 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/glass/reinforced, /area/station/ai_monitored/security/armory/upper) -"xge" = ( -/obj/machinery/button/door/directional/north{ - id = "permainner"; - name = "Inner Bolt Control"; - normaldoorcontrol = 1; - pixel_x = -6; - req_access = list("brig"); - specialfunctions = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "permaouter"; - name = "Outer Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 6; - req_access = list("brig"); - specialfunctions = 4 - }, -/obj/item/paper/crumpled{ - default_raw_text = "Remember! Corporate spent a lot of money to create this state of the art fashion show. If we EVER even so much as HEAR a rumor that a news crew or corporate rep is coming by, this place needs to be in TIP TOP condition. It's all of our asses (and our pensions) if it's not."; - name = "Crumpled Memo" - }, -/turf/open/floor/iron/smooth, -/area/station/security/execution/transfer) "xgf" = ( /obj/structure/sign/directions/dorms/directional/north{ pixel_y = 1 @@ -72713,6 +72711,19 @@ }, /turf/open/floor/iron, /area/station/security/brig/upper) +"xAS" = ( +/obj/item/seeds/apple, +/obj/item/seeds/banana, +/obj/item/seeds/cocoapod, +/obj/item/seeds/grape, +/obj/item/seeds/orange, +/obj/item/seeds/sugarcane, +/obj/item/seeds/wheat, +/obj/item/seeds/watermelon, +/obj/structure/table/glass, +/obj/item/seeds/tree, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "xAW" = ( /obj/machinery/door/airlock/security{ name = "Cafeteria" @@ -73200,6 +73211,10 @@ /obj/structure/stairs/east, /turf/open/floor/plating, /area/station/security/brig) +"xHU" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/service/hydroponics) "xHY" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -73806,6 +73821,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/upper) +"xTC" = ( +/obj/machinery/door/airlock/security{ + id_tag = "IsolationCell"; + name = "Isolation Cell" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/smooth, +/area/station/security/prison/safe) "xTP" = ( /obj/machinery/computer/shuttle/mining{ dir = 8 @@ -73905,16 +73928,6 @@ }, /turf/open/floor/iron, /area/mine/laborcamp/security) -"xVD" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/effect/turf_decal/trimline/blue/filled/warning{ - dir = 10 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "xVG" = ( /turf/open/floor/plating, /area/station/hallway/secondary/exit/departure_lounge) @@ -109370,9 +109383,9 @@ bEi rVX dqx pSn -cCF -iAA -wDs +kvN +nas +tUm vjh vjh vjh @@ -109884,9 +109897,9 @@ lmK rVX fez lxn -gvV -cfR -sbO +diT +vgw +lBK vjh drP czD @@ -161314,8 +161327,8 @@ jlF jNf dpC cGQ -whr -nmr +lZc +txr hVY gjq gjq @@ -161828,8 +161841,8 @@ exN jNf qIo tau -dWK -ozX +afF +bXI hVY gjq gjq @@ -162599,8 +162612,8 @@ tCL jNf wcz hKI -fWe -ozX +ffY +bXI hVY gjq gjq @@ -163113,8 +163126,8 @@ eCD jNf pbB tzf -ozX -ozX +bXI +bXI hVY gjq pfw @@ -164662,7 +164675,7 @@ hpF pXZ bZk gAu -sUb +aGj eCE eCE eCE @@ -165689,7 +165702,7 @@ xMy eDq iXh lWb -hRp +gNX dAZ wqI xSn @@ -166202,7 +166215,7 @@ uBs uBs uBs xaH -fCd +aZn nDp ubo lgD @@ -166720,7 +166733,7 @@ pRB cGl hgM pJu -rWU +eXC hgM frS wPD @@ -168246,7 +168259,7 @@ gjq gjq xhK vVH -fkV +lzp vVH kqn oVY @@ -168261,10 +168274,10 @@ uME doq trA uME -xge +bgu hBg ihD -kvu +xTC aaK oCT xby @@ -168517,7 +168530,7 @@ bBn uZd kZt ryu -dha +sUL svF hBg ufF @@ -169031,7 +169044,7 @@ fTz pdz eic kBh -dha +sUL rRA vpi uME @@ -169286,7 +169299,7 @@ gTw gTw mMM xhK -qJY +cis xhK pNm tpH @@ -172409,10 +172422,10 @@ scw scw hmb hmb -hlP -ahI -qoU -boV +elQ +urC +ggm +wHk hmb hmb gjq @@ -172670,7 +172683,7 @@ eYX sCZ sCZ lmm -sRc +vCA hmb gjq gjq @@ -172927,7 +172940,7 @@ syE jwm pqx hml -vkg +sAY hmb hmb gjq @@ -173183,16 +173196,16 @@ fKy bdr jHK rhh -rdd +wIY lmm -boV +wHk hmb hmb iDt qau iDt jZN -neM +sLB qau xMq xMq @@ -173443,13 +173456,13 @@ lEH lgA gAy bqH -xVD +jtv exw hmb exw tJb gUF -neM +sLB qau xMq xMq @@ -174216,11 +174229,11 @@ jqJ oBl hbT hmb -neM +sLB iDt scw iDt -neM +sLB qau iZm fdP @@ -174473,11 +174486,11 @@ bSU nVz iNt hmb -neM +sLB iDt iDt scw -neM +sLB qau iDt kRF @@ -220970,9 +220983,9 @@ lJO lJO lJO lJO -mCT -qSa -mCT +oVw +lZr +oVw gbS mZu oCO @@ -221742,7 +221755,7 @@ lJO anl lJO dZJ -eUi +xAS eBB nxV nor @@ -222512,9 +222525,9 @@ lJO lJO anl lJO -mCT -urt -mCT +oVw +ooB +oVw fzF mAV jzr @@ -234569,10 +234582,10 @@ cAC cEL hwZ vdf -xFm +khE riv xHq -ccr +uiJ txU jzC qml @@ -234838,9 +234851,9 @@ oAh oAh oAh vDb -lgz +aUy hBr -mzP +fkf vDb vvh vPC @@ -235086,7 +235099,7 @@ wAq jaw xwf aPd -hQP +cUf lWg ncB bgN @@ -236882,7 +236895,7 @@ fXi vhL law eqI -rAN +nOv wAT lbk bln @@ -240515,12 +240528,12 @@ qYD oUK gEL mpU -qFC -nKn -kTO -kTO -rwv -sIm +keH +buC +kby +kby +iCM +xHU hmb lso dEV @@ -246174,7 +246187,7 @@ kKL kKl beT nwI -giD +kPe kKL veJ vwO @@ -246431,7 +246444,7 @@ kKL eie lli lli -wwG +mKi kKL rjP qEM @@ -246688,7 +246701,7 @@ cDw lli lli lli -iZy +mkj kKL cwO vwO @@ -246945,7 +246958,7 @@ kKL vMR lZv hrt -fpA +kVV kKL iko qEM @@ -252661,7 +252674,7 @@ loQ fwD too mHw -bRz +iOi vzD bln bln @@ -252918,7 +252931,7 @@ iTP uCo lEz kPw -dAx +nWr gQw bln bln @@ -253175,7 +253188,7 @@ ftS too lbf esF -bRz +iOi gQw bln bln @@ -253429,9 +253442,9 @@ jOj vzD vzD kqm -tZd -bRz -bRz +rWJ +iOi +iOi bVL vzD bln diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 25f1ced0bbd8..e75f5a0b93b3 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1847,12 +1847,6 @@ }, /turf/open/floor/iron, /area/station/construction/storage_wing) -"aII" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/station/security/prison/garden) "aIX" = ( /obj/machinery/portable_atmospherics/pump, /obj/machinery/light/small/directional/north, @@ -3936,6 +3930,20 @@ /obj/effect/turf_decal/tile/purple, /turf/open/floor/iron, /area/station/hallway/primary/central) +"bpH" = ( +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/east{ + id = "Prison Gate"; + name = "Prison Wing Lockdown"; + req_one_access = list("brig", "permabrig") + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 1 + }, +/turf/open/floor/iron, +/area/station/security/brig) "bpK" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, @@ -4405,11 +4413,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) -"byW" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/service/hydroponics) "bzv" = ( /obj/effect/spawner/random/entertainment/arcade, /obj/structure/cable, @@ -7639,6 +7642,16 @@ /obj/machinery/light_switch/directional/south, /turf/open/floor/wood, /area/station/service/theater) +"cRM" = ( +/obj/machinery/growing/soil, +/obj/machinery/camera/directional/west{ + c_tag = "Prison Forestry"; + network = list("ss13","prison") + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/directional/west, +/turf/open/floor/grass, +/area/station/security/prison/garden) "cRW" = ( /obj/machinery/light/directional/south, /obj/machinery/button/door/directional/south{ @@ -9623,12 +9636,6 @@ /obj/effect/turf_decal/trimline/green/filled/corner, /turf/open/floor/iron, /area/station/hallway/primary/central) -"dGW" = ( -/obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/red/filled/line, -/turf/open/floor/iron, -/area/station/security/brig) "dHa" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=1"; @@ -9737,13 +9744,6 @@ /obj/machinery/door/window/right/directional/west, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) -"dJo" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm/directional/east, -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "dJK" = ( /turf/open/floor/iron/stairs/right{ dir = 1 @@ -10525,11 +10525,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"dXP" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "dXQ" = ( /obj/structure/extinguisher_cabinet/directional/east, /obj/effect/turf_decal/tile/neutral, @@ -10870,6 +10865,12 @@ "ecO" = ( /turf/open/floor/carpet, /area/station/service/library) +"ecQ" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "edl" = ( /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, @@ -11036,6 +11037,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/central) +"egc" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm/directional/east, +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ege" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 4 @@ -12436,6 +12444,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"eGE" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/grass, +/area/station/security/prison/garden) "eGJ" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -13563,6 +13577,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"ffr" = ( +/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "ffH" = ( /turf/closed/wall, /area/station/hallway/primary/fore) @@ -14857,17 +14878,6 @@ /obj/machinery/light/small/directional/east, /turf/open/floor/iron/dark/textured, /area/station/engineering/atmos) -"fGb" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prison Sanitarium" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron/white, -/area/station/security/execution/transfer) "fGp" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -15537,6 +15547,16 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"fTm" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Visitation" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/brig) "fTn" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -16749,6 +16769,13 @@ }, /turf/open/floor/iron, /area/station/engineering/main) +"goq" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/item/plant_analyzer, +/turf/open/floor/grass, +/area/station/security/prison/garden) "goG" = ( /obj/item/radio/intercom/directional/north, /obj/machinery/camera/directional/north{ @@ -17118,21 +17145,6 @@ }, /turf/open/floor/iron, /area/station/security/brig) -"guU" = ( -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 6; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/brig) "guX" = ( /turf/closed/wall, /area/station/commons/storage/primary) @@ -17759,6 +17771,16 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/hallway/primary/central) +"gIG" = ( +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/mob/living/basic/pet/potty, +/turf/open/floor/iron, +/area/station/service/hydroponics) "gIK" = ( /obj/structure/closet/bombcloset, /turf/open/floor/plating, @@ -17787,24 +17809,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"gJi" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 4; - id = "PermaLockdown"; - name = "Lockdown Shutters" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/obj/machinery/door/airlock/security/glass{ - id_tag = "permaouter"; - name = "Permabrig Transfer" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron, -/area/station/security/prison) "gJm" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 9 @@ -19964,6 +19968,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"hvA" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/hydroponics) "hvB" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/effect/turf_decal/trimline/brown/filled/warning, @@ -21014,6 +21023,21 @@ dir = 1 }, /area/station/service/chapel) +"hQH" = ( +/obj/machinery/button/flasher{ + id = "visitorflash"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/button/door/directional/north{ + id = "visitation"; + name = "Visitation Shutters"; + pixel_x = 6; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/brig) "hQT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -21104,18 +21128,6 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) -"hSd" = ( -/obj/structure/cable, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/south{ - id = "PermaLockdown"; - name = "Panic Button"; - req_access = list("brig") - }, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "hSe" = ( /obj/machinery/light/small/directional/east, /obj/item/radio/intercom/directional/north, @@ -22118,13 +22130,6 @@ "ikb" = ( /turf/open/floor/iron, /area/station/commons/dorms) -"ikw" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/obj/structure/disposalpipe/segment, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "ikC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance_hatch{ @@ -22206,12 +22211,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"ilg" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/grass, -/area/station/security/prison/garden) "ilh" = ( /turf/closed/wall, /area/station/maintenance/fore) @@ -22621,16 +22620,6 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"irh" = ( -/obj/machinery/growing/soil, -/obj/machinery/camera/directional/west{ - c_tag = "Prison Forestry"; - network = list("ss13","prison") - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/directional/west, -/turf/open/floor/grass, -/area/station/security/prison/garden) "irL" = ( /obj/effect/turf_decal/trimline/blue/filled/line, /turf/open/floor/iron/white, @@ -22841,6 +22830,16 @@ /obj/structure/sign/delamination_counter/directional/north, /turf/open/floor/iron/dark, /area/station/engineering/break_room) +"iuc" = ( +/obj/machinery/door/airlock/security{ + id_tag = "IsolationCell"; + name = "Isolation Cell" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison/safe) "iug" = ( /obj/machinery/mechpad, /turf/open/floor/circuit/green, @@ -25540,6 +25539,11 @@ }, /turf/open/floor/iron, /area/station/security/office) +"jkv" = ( +/obj/structure/cable, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "jkT" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -26554,11 +26558,6 @@ /obj/structure/cable, /turf/open/floor/grass, /area/station/medical/pathology) -"jBY" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "jCj" = ( /obj/item/toy/basketball, /turf/open/floor/plating, @@ -28132,11 +28131,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/pharmacy) -"keL" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/junction, -/turf/open/floor/iron, -/area/station/security/brig) "keR" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -28573,6 +28567,16 @@ }, /turf/open/floor/iron, /area/station/service/hydroponics) +"klO" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "klS" = ( /obj/machinery/griddle, /turf/open/floor/iron/cafeteria, @@ -29433,16 +29437,6 @@ "kCZ" = ( /turf/closed/wall, /area/station/service/hydroponics) -"kDk" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Visitation" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron, -/area/station/security/brig) "kDG" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -29459,6 +29453,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, /area/station/maintenance/port) +"kDV" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "kDY" = ( /obj/machinery/door/airlock/highsecurity{ name = "Secure Tech Storage" @@ -31227,6 +31228,11 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/engine, /area/station/science/xenobiology) +"ljG" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ljL" = ( /obj/structure/chair/comfy/black, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -31816,6 +31822,16 @@ }, /turf/open/floor/wood, /area/station/smithing) +"lsI" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "lsJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33397,12 +33413,6 @@ /obj/structure/sign/warning/vacuum/directional/east, /turf/open/floor/plating, /area/station/maintenance/aft/lesser) -"lXl" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden) "lXm" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -33864,6 +33874,16 @@ }, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"mgA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "mgE" = ( /obj/structure/mirror/directional/west, /obj/machinery/shower/directional/east, @@ -35669,6 +35689,16 @@ /obj/machinery/duct, /turf/open/floor/stone, /area/station/science/xenobiology) +"mMi" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random/food_or_drink/seed, +/turf/open/floor/plating, +/area/station/maintenance/starboard/aft) "mMl" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -36356,6 +36386,14 @@ /obj/structure/cable, /turf/open/space/basic, /area/station/solars/starboard/fore) +"mYH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "mYJ" = ( /obj/structure/table/wood, /obj/item/poster/random_official, @@ -40176,13 +40214,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/plating/airless, /area/space/nearstation) -"opF" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/grass, -/area/station/security/prison/garden) "opG" = ( /obj/structure/cable, /obj/machinery/firealarm/directional/north, @@ -40720,6 +40751,11 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"ozn" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden) "ozs" = ( /obj/machinery/door/airlock/engineering{ name = "Starboard Bow Solar Access" @@ -40791,6 +40827,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/brig) +"oAP" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/security/prison/garden) "oAQ" = ( /obj/structure/lattice/catwalk, /obj/structure/transit_tube/horizontal, @@ -44320,6 +44363,17 @@ /obj/machinery/light_switch/directional/east, /turf/open/floor/iron/dark, /area/station/command/bridge) +"pOW" = ( +/obj/machinery/growing/soil{ + pixel_y = 8 + }, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/item/food/grown/harebell, +/obj/machinery/light/small/directional/north, +/turf/open/floor/cult, +/area/station/service/chapel/funeral) "pPh" = ( /obj/structure/closet/secure_closet/miner, /obj/item/clothing/suit/hooded/wintercoat/miner, @@ -44360,16 +44414,6 @@ /obj/structure/flora/bush/flowers_yw/style_random, /turf/open/floor/grass, /area/station/maintenance/starboard/aft) -"pPR" = ( -/obj/machinery/door/airlock/security{ - id_tag = "IsolationCell"; - name = "Isolation Cell" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron, -/area/station/security/prison/safe) "pPV" = ( /turf/closed/wall, /area/station/bitrunning/den) @@ -45379,6 +45423,12 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"qiY" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "qjf" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -47418,15 +47468,6 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) -"qTH" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/brig) "qTJ" = ( /obj/machinery/camera/directional/west{ c_tag = "Departure Lounge - Port Aft" @@ -50881,13 +50922,6 @@ dir = 8 }, /area/station/medical/medbay/lobby) -"sbX" = ( -/obj/machinery/growing/soil, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/item/plant_analyzer, -/turf/open/floor/grass, -/area/station/security/prison/garden) "scb" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/random/trash/box, @@ -53249,6 +53283,18 @@ /obj/effect/turf_decal/siding/purple, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"sTP" = ( +/obj/structure/cable, +/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/button/door/directional/south{ + id = "PermaLockdown"; + name = "Panic Button"; + req_one_access = list("brig", "permabrig") + }, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "sTQ" = ( /obj/structure/bed/roller, /obj/effect/turf_decal/trimline/blue/filled/warning{ @@ -53300,20 +53346,6 @@ }, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"sUC" = ( -/obj/machinery/light/small/directional/east, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/button/door/directional/east{ - id = "Prison Gate"; - name = "Prison Wing Lockdown"; - req_access = list("brig") - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) "sUJ" = ( /obj/effect/spawner/random/structure/closet_maintenance, /obj/effect/spawner/random/maintenance/two, @@ -54083,6 +54115,24 @@ dir = 1 }, /area/station/engineering/atmos/pumproom) +"thj" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "PermaLockdown"; + name = "Lockdown Shutters" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/door/airlock/security/glass{ + id_tag = "permaouter"; + name = "Permabrig Transfer" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/prison) "thQ" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -54131,16 +54181,6 @@ }, /turf/open/floor/wood, /area/station/commons/dorms) -"tjf" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/spawner/random/food_or_drink/seed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "tjh" = ( /turf/closed/wall, /area/station/security/brig) @@ -54168,13 +54208,6 @@ }, /turf/open/floor/iron, /area/station/service/bar) -"tjv" = ( -/obj/structure/cable, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/iron, -/area/station/security/brig) "tjG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/simple/orange/visible, @@ -54671,16 +54704,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/command) -"tsv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/effect/spawner/random/food_or_drink/seed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "tsy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54821,16 +54844,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"tuG" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/spawner/random/food_or_drink/seed, -/turf/open/floor/plating, -/area/station/maintenance/starboard/aft) "tvE" = ( /turf/closed/wall/r_wall, /area/station/command/gateway) @@ -58897,6 +58910,12 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"uST" = ( +/obj/machinery/growing/soil, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/grass, +/area/station/security/prison/garden) "uTj" = ( /obj/effect/landmark/start/medical_doctor, /turf/open/floor/iron/dark, @@ -59602,6 +59621,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/service/chapel/office) +"vhV" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "vhZ" = ( /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/holofloor/dark, @@ -61273,6 +61300,17 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/locker) +"vLD" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Prison Sanitarium" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/white, +/area/station/security/execution/transfer) "vLM" = ( /obj/structure/table/wood/poker, /obj/item/storage/dice, @@ -62657,13 +62695,6 @@ }, /turf/open/floor/wood, /area/station/command/corporate_showroom) -"wkh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/turf/open/floor/iron, -/area/station/security/brig) "wki" = ( /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/wood, @@ -62733,17 +62764,6 @@ /obj/item/kirbyplants/random, /turf/open/floor/iron, /area/station/service/hydroponics) -"wlj" = ( -/obj/machinery/growing/soil{ - pixel_y = 8 - }, -/obj/item/food/grown/harebell, -/obj/item/food/grown/harebell, -/obj/item/food/grown/harebell, -/obj/item/food/grown/harebell, -/obj/machinery/light/small/directional/north, -/turf/open/floor/cult, -/area/station/service/chapel/funeral) "wlt" = ( /obj/structure/cable, /obj/effect/turf_decal/trimline/blue/filled/warning, @@ -63348,12 +63368,6 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/aft/greater) -"wyn" = ( -/obj/machinery/growing/soil, -/obj/item/shovel/spade, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/grass, -/area/station/security/prison/garden) "wyo" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -64661,16 +64675,6 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/maintenance/starboard/lesser) -"wVQ" = ( -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/mob/living/basic/pet/potty, -/turf/open/floor/iron, -/area/station/service/hydroponics) "wVW" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -64924,12 +64928,6 @@ /obj/machinery/firealarm/directional/south, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"xaG" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "xaL" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/item/kirbyplants/random, @@ -67316,6 +67314,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"xTn" = ( +/obj/machinery/growing/soil, +/obj/item/shovel/spade, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/grass, +/area/station/security/prison/garden) "xTs" = ( /obj/machinery/light/small/directional/south, /obj/effect/landmark/blobstart, @@ -67703,6 +67707,12 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/fore) +"xZz" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/junction, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "xZB" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/yellow/half/contrasted{ @@ -86962,10 +86972,10 @@ aaa aaa cmB cmB -opF -sbX -irh -wyn +oAP +goq +cRM +xTn iOr aaa raz @@ -87737,7 +87747,7 @@ rVb viQ dTQ rOP -aII +eGE iOr aUn aUn @@ -87994,7 +88004,7 @@ aXa aXa dHQ jjM -ilg +uST cmB aaa mji @@ -88251,7 +88261,7 @@ dhW aXa fbX cnk -wyn +xTn cmB aaa aUn @@ -88377,7 +88387,7 @@ pjb gGh rxz gYU -wlj +pOW rIG aaa aaa @@ -92111,7 +92121,7 @@ iUv iUv igS dXl -gJi +thj lAM txg rGd @@ -92622,7 +92632,7 @@ gEg ikO pNY qjr -fGb +vLD yey cWI gYi @@ -92630,7 +92640,7 @@ tjh oCR rGd tjh -guU +hQH eXj vSo sch @@ -92872,7 +92882,7 @@ sjP dcN vae slI -pPR +iuc xnS gYi jTZ @@ -92882,14 +92892,14 @@ ouj aBL yey cWI -hSd +sTP tjh tjh mAm tjh wsX wsX -kDk +fTm sch wLH lvu @@ -93402,16 +93412,16 @@ xyt vQO wsX rKZ -rKZ +jkv lsP rKZ rKZ prv -rKZ +jkv hSH uGD rlg -keL +xZz eay tDz tjh @@ -93656,7 +93666,7 @@ yey yey swe fNh -sUC +bpH mtG uyd ltt @@ -96753,11 +96763,11 @@ pxN drw nZk sVi -tjv +vhV pHb syc -wkh -dGW +mYH +ffr hhp bJq gFi @@ -98038,7 +98048,7 @@ nkX ocl lvZ iMo -qTH +klO lsP neO quA @@ -98295,7 +98305,7 @@ nOv wxj aGm xrq -rKZ +jkv pHb qwh mrL @@ -102202,15 +102212,15 @@ xbT wYB epF gFL -byW -byW -byW +hvA +hvA +hvA pdl xlF -byW -byW -byW -byW +hvA +hvA +hvA +hvA enS bwb kCZ @@ -102469,7 +102479,7 @@ emv svk xdF sWG -wVQ +gIG yeI gIM tAg @@ -102716,15 +102726,15 @@ eLI ltW jyF gFL -byW -byW -byW +hvA +hvA +hvA pdl xlF -byW -byW -byW -byW +hvA +hvA +hvA +hvA xlF nfT kCZ @@ -103235,9 +103245,9 @@ beO fWk rhR gMO -dXP -dJo -xaG +ljG +egc +qiY kCZ kCZ kCZ @@ -104553,9 +104563,9 @@ bLd ojt aTP bLd -tjf -tjf -tjf +mMi +mMi +mMi bLd lMJ aaa @@ -104733,9 +104743,9 @@ wfN lqQ nMK mos -jBY +ozn aKk -lXl +ecQ nzS gpk qXB @@ -104990,9 +105000,9 @@ xUh lqQ aMb mos -jBY +ozn knZ -jBY +ozn weS qdr qXB @@ -105247,9 +105257,9 @@ lnc lqQ uKv mos -jBY +ozn dCm -ikw +kDV qVy hzJ uiB @@ -105579,11 +105589,11 @@ bLd bLd bLd bLd -tsv -tuG -tuG -tuG -tuG +mgA +lsI +lsI +lsI +lsI bLd lMJ aaa diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 854bab378a66..c2383408c9f6 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -820,11 +820,6 @@ /obj/structure/disposalpipe/trunk, /turf/open/space/basic, /area/space/nearstation) -"akl" = ( -/obj/machinery/status_display/evac/directional/north, -/obj/machinery/growing/tray, -/turf/open/floor/iron/white, -/area/station/science/research/abandoned) "akr" = ( /obj/machinery/button/door/directional/south{ id = "captain_privacy"; @@ -4239,6 +4234,11 @@ /obj/structure/cable, /turf/open/floor/circuit/green, /area/station/science/robotics/mechbay) +"bbG" = ( +/obj/item/seeds/coffee, +/obj/machinery/growing/soil, +/turf/open/misc/sandy_dirt, +/area/station/maintenance/floor3/starboard) "bbI" = ( /obj/structure/stairs/north, /obj/structure/sign/departments/science/alt/directional/west, @@ -5298,11 +5298,6 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) -"boB" = ( -/obj/machinery/growing/soil, -/obj/item/shovel/spade, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "boH" = ( /obj/structure/railing{ dir = 8 @@ -7921,6 +7916,11 @@ /obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/iron, /area/station/hallway/floor3/aft) +"bVa" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden/abandoned) "bVd" = ( /obj/effect/turf_decal/trimline/blue/mid_joiner{ dir = 4 @@ -8441,6 +8441,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hos) +"cdg" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/green/full, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "cdj" = ( /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance, /obj/machinery/door/airlock/hatch{ @@ -11631,16 +11637,6 @@ /obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/grass, /area/station/science/xenobiology) -"cVz" = ( -/obj/machinery/door/airlock/security{ - name = "Gulag" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "cVD" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -13409,6 +13405,11 @@ }, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/port/fore) +"dwz" = ( +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/growing/tray, +/turf/open/floor/iron/white, +/area/station/science/research/abandoned) "dwD" = ( /obj/machinery/light/cold/no_nightlight/directional/north, /obj/structure/sign/poster/official/random/directional/north, @@ -13683,15 +13684,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard/fore) -"dAr" = ( -/obj/machinery/growing/soil, -/obj/machinery/camera/directional/west{ - c_tag = "Prison Forestry"; - network = list("ss13","prison") - }, -/obj/machinery/light/directional/west, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "dAB" = ( /obj/structure/closet/firecloset, /turf/open/floor/iron/smooth_large, @@ -14065,6 +14057,13 @@ }, /turf/open/floor/iron/textured_large, /area/station/engineering/lobby) +"dFS" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/firealarm/directional/west, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/growing/tray, +/turf/open/floor/iron/white, +/area/station/science/research/abandoned) "dFT" = ( /obj/machinery/airalarm/directional/west, /obj/effect/decal/cleanable/dirt/dust, @@ -15903,6 +15902,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/station/service/bar/atrium) +"efo" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "efp" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/start/depsec/engineering, @@ -17451,11 +17457,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/textured_large, /area/station/hallway/secondary/entry) -"eAv" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "eAE" = ( /turf/open/floor/pod/dark, /area/station/maintenance/floor3/starboard/fore) @@ -17769,6 +17770,14 @@ /obj/machinery/light/small/directional/south, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard) +"eFL" = ( +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 4 + }, +/obj/machinery/newscaster/directional/east, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "eFU" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, @@ -18052,6 +18061,14 @@ }, /turf/open/floor/iron/dark/side, /area/station/command/teleporter) +"eJY" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/structure/flora/bush/lavendergrass/style_random, +/obj/machinery/growing/tray{ + anchored = 0 + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden/abandoned) "eKd" = ( /obj/machinery/door/airlock/science/glass{ name = "Applied Mechanics" @@ -18295,14 +18312,6 @@ icon_state = "snow4" }, /area/station/hallway/floor2/fore) -"eNN" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/growing/tray, -/turf/open/floor/iron/white, -/area/station/cargo/miningdock) "eNS" = ( /obj/effect/turf_decal/delivery, /obj/structure/sign/departments/restroom/directional/south, @@ -19298,6 +19307,22 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"feP" = ( +/obj/machinery/button/door/directional/north{ + id = "visitation"; + name = "Visitation Shutters"; + pixel_x = 6; + req_one_access = list("security","permabrig") + }, +/obj/machinery/button/flasher{ + id = "visitorflash"; + pixel_x = -6; + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "feR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark/side{ @@ -19929,12 +19954,6 @@ /obj/effect/spawner/random/maintenance, /turf/open/openspace, /area/station/maintenance/floor3/starboard) -"fnB" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/west, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "fnJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/griddle, @@ -21044,6 +21063,17 @@ }, /turf/open/floor/iron, /area/station/science/genetics) +"fDp" = ( +/obj/machinery/door/airlock/security{ + name = "Isolation" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/brig) "fDt" = ( /obj/structure/table/reinforced, /obj/item/book/manual/wiki/ordnance{ @@ -21743,11 +21773,6 @@ /obj/structure/sign/departments/medbay/alt/directional/south, /turf/open/floor/iron/dark, /area/station/hallway/floor2/fore) -"fNg" = ( -/obj/effect/turf_decal/tile/green/full, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "fNh" = ( /obj/effect/landmark/start/hangover, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -22863,12 +22888,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/science/robotics/lab) -"gbW" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/firealarm/directional/west, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "gbZ" = ( /obj/structure/bodycontainer/crematorium{ dir = 8; @@ -23118,12 +23137,6 @@ /obj/structure/window/reinforced/tinted/frosted, /turf/open/openspace, /area/station/maintenance/floor2/port) -"gfI" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light_switch/directional/east, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "gfP" = ( /obj/effect/turf_decal/siding/wood/end{ dir = 4 @@ -23241,13 +23254,6 @@ }, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/disposal) -"ghz" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/firealarm/directional/west, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/growing/tray, -/turf/open/floor/iron/white, -/area/station/science/research/abandoned) "ghF" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 4 @@ -24170,6 +24176,11 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/catwalk_floor/iron_white, /area/station/medical/abandoned) +"gvy" = ( +/obj/machinery/growing/tray, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron, +/area/station/maintenance/floor1/port/aft) "gvO" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -25456,12 +25467,6 @@ /obj/structure/sign/departments/psychology/directional/west, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"gOd" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/camera/autoname/directional/west, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "gOf" = ( /obj/effect/turf_decal/trimline/yellow/corner, /obj/structure/cable, @@ -25916,6 +25921,12 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/pod/light, /area/station/maintenance/floor3/port/fore) +"gVI" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/firealarm/directional/west, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "gVR" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -27121,6 +27132,11 @@ }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) +"hml" = ( +/obj/machinery/newscaster/directional/east, +/obj/machinery/growing/tray, +/turf/open/floor/iron/white, +/area/station/cargo/miningdock) "hmn" = ( /obj/effect/turf_decal/siding/thinplating_new{ dir = 4 @@ -28098,6 +28114,12 @@ /obj/structure/flora/bush/style_random, /turf/open/floor/grass, /area/station/security/courtroom) +"hAv" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/east, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "hAI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -29873,13 +29895,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/catwalk_floor/iron_dark, /area/station/bitrunning/den) -"iaM" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "iaS" = ( /obj/effect/turf_decal/siding/wood{ dir = 5 @@ -31959,6 +31974,11 @@ dir = 8 }, /area/station/security/office) +"iGF" = ( +/obj/effect/turf_decal/tile/green/full, +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/service/hydroponics) "iGG" = ( /obj/structure/chair/office/light{ dir = 8 @@ -32702,11 +32722,6 @@ }, /turf/open/floor/iron, /area/station/hallway/floor2/aft) -"iQF" = ( -/obj/machinery/growing/soil, -/obj/item/plant_analyzer, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "iQH" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/side, @@ -36697,10 +36712,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) -"jSa" = ( -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/maintenance/floor1/port/aft) "jSt" = ( /obj/machinery/computer/prisoner/gulag_teleporter_computer, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ @@ -38763,6 +38774,10 @@ "kvE" = ( /turf/open/floor/light/colour_cycle/dancefloor_b, /area/station/maintenance/floor2/port/fore) +"kvI" = ( +/obj/machinery/growing/tray, +/turf/open/floor/iron, +/area/station/maintenance/floor1/port/aft) "kvR" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -38937,19 +38952,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"kye" = ( -/obj/machinery/door/airlock/security{ - name = "Perma" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "perma-entrance" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "kyj" = ( /obj/effect/turf_decal/loading_area/white{ color = "#52B4E9"; @@ -39153,18 +39155,6 @@ /obj/item/kitchen/rollingpin, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) -"kAR" = ( -/obj/machinery/door/airlock/security{ - name = "Perma" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "perma-entrance" - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "kAW" = ( /obj/structure/window/reinforced/plasma/spawner/directional/north, /obj/structure/window/reinforced/plasma/spawner/directional/east, @@ -39652,12 +39642,6 @@ name = "lab floor" }, /area/station/science/robotics/lab) -"kHN" = ( -/obj/effect/turf_decal/tile/purple, -/obj/machinery/camera/autoname/directional/east, -/obj/machinery/growing/tray, -/turf/open/floor/iron/white, -/area/station/cargo/miningdock) "kHO" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -40249,6 +40233,16 @@ dir = 4 }, /area/station/commons/storage/primary) +"kQc" = ( +/obj/machinery/door/airlock/security{ + name = "Gulag" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/all/security/brig, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "kQk" = ( /turf/open/floor/iron/dark/side{ dir = 4 @@ -40556,6 +40550,11 @@ /obj/structure/sign/poster/random/directional/west, /turf/open/floor/iron, /area/station/hallway/floor3/aft) +"kTN" = ( +/obj/machinery/growing/soil, +/obj/item/plant_analyzer, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "kTZ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -44974,6 +44973,12 @@ }, /turf/open/floor/iron/dark/side, /area/station/command/teleporter) +"lYZ" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/camera/autoname/directional/west, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "lZa" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/vest/old, @@ -50302,11 +50307,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/breakroom) -"nof" = ( -/obj/item/seeds/coffee, -/obj/machinery/growing/soil, -/turf/open/misc/sandy_dirt, -/area/station/maintenance/floor3/starboard) "noh" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/structure/cable, @@ -53428,6 +53428,12 @@ }, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"obJ" = ( +/obj/effect/turf_decal/tile/purple, +/obj/machinery/camera/autoname/directional/east, +/obj/machinery/growing/tray, +/turf/open/floor/iron/white, +/area/station/cargo/miningdock) "obK" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, @@ -55123,12 +55129,6 @@ /obj/effect/turf_decal/tile/red/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"ozF" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/light/small/directional/east, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics/garden) "ozJ" = ( /obj/structure/disposalpipe/junction/yjunction{ dir = 8 @@ -56474,6 +56474,12 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor2/starboard) +"oSM" = ( +/obj/machinery/growing/soil, +/obj/item/cultivator, +/obj/structure/sign/poster/official/random/directional/north, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "oSQ" = ( /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /obj/effect/turf_decal/bot, @@ -56571,6 +56577,11 @@ /obj/structure/cable, /turf/open/floor/wood, /area/station/command/meeting_room) +"oTB" = ( +/obj/machinery/growing/soil, +/obj/item/radio/intercom/prison/directional/west, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "oTF" = ( /obj/item/storage/secure/safe/directional/east, /obj/structure/cable, @@ -58142,6 +58153,18 @@ dir = 1 }, /area/station/hallway/secondary/exit/departure_lounge) +"psV" = ( +/obj/machinery/door/airlock/security{ + name = "Perma" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "ptc" = ( /obj/effect/decal/cleanable/dirt, /obj/item/shard, @@ -58342,14 +58365,6 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/carpet/red, /area/station/maintenance/floor3/port/aft) -"pwE" = ( -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 4 - }, -/obj/machinery/newscaster/directional/east, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "pwL" = ( /obj/effect/turf_decal/siding/blue{ dir = 4 @@ -59077,11 +59092,6 @@ dir = 4 }, /area/station/command/teleporter) -"pHe" = ( -/obj/structure/flora/bush/sparsegrass/style_random, -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden/abandoned) "pHf" = ( /obj/machinery/holopad, /obj/effect/turf_decal/trimline/green, @@ -60542,16 +60552,6 @@ /obj/machinery/holopad, /turf/open/floor/iron, /area/station/service/hydroponics/garden) -"qcP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/weather/dirt{ - dir = 4 - }, -/obj/machinery/growing/tray{ - anchored = 0 - }, -/turf/open/floor/iron, -/area/station/service/hydroponics/garden/abandoned) "qcQ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 6 @@ -61054,11 +61054,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/funeral) -"qkx" = ( -/obj/machinery/newscaster/directional/east, -/obj/machinery/growing/tray, -/turf/open/floor/iron/white, -/area/station/cargo/miningdock) "qkz" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/airlock/command/glass{ @@ -61791,14 +61786,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"qtR" = ( -/obj/structure/flora/bush/sparsegrass/style_random, -/obj/machinery/light/broken/directional/south, -/obj/machinery/growing/tray{ - anchored = 0 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden/abandoned) "qtS" = ( /obj/effect/turf_decal/tile/red/half, /turf/open/floor/iron/dark, @@ -65803,6 +65790,15 @@ }, /turf/open/floor/plating, /area/station/cargo/office) +"rvf" = ( +/obj/machinery/growing/soil, +/obj/machinery/camera/directional/west{ + c_tag = "Prison Forestry"; + network = list("ss13","prison") + }, +/obj/machinery/light/directional/west, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "rvh" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/plating, @@ -66026,11 +66022,6 @@ /obj/machinery/flasher/directional/west, /turf/open/floor/iron/dark, /area/station/hallway/floor4/fore) -"ryQ" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/growing/tray, -/turf/open/floor/plating, -/area/station/maintenance/floor4/starboard) "rza" = ( /obj/effect/turf_decal/trimline/brown/warning{ dir = 9 @@ -67866,6 +67857,14 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) +"sct" = ( +/obj/structure/flora/bush/sparsegrass/style_random, +/obj/machinery/light/broken/directional/south, +/obj/machinery/growing/tray{ + anchored = 0 + }, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden/abandoned) "scv" = ( /turf/closed/wall/r_wall, /area/station/maintenance/disposal) @@ -68393,6 +68392,15 @@ /obj/structure/bookcase/random/fiction, /turf/open/floor/wood/tile, /area/station/service/library) +"slE" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/machinery/airalarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/item/seeds/apple, +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/service/library/garden) "slP" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -68664,6 +68672,12 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/smooth_large, /area/station/hallway/secondary/entry) +"sqD" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light_switch/directional/east, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "sqK" = ( /obj/structure/railing{ dir = 4 @@ -68674,6 +68688,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/cargo/storage) +"srk" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/obj/machinery/growing/tray, +/turf/open/floor/iron/white, +/area/station/cargo/miningdock) "srq" = ( /obj/effect/turf_decal/trimline/blue/corner{ dir = 8 @@ -70164,6 +70186,11 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/brig) +"sLH" = ( +/obj/machinery/growing/soil, +/obj/item/shovel/spade, +/turf/open/misc/dirt/jungle, +/area/station/security/prison/garden) "sLI" = ( /obj/item/radio/intercom/directional/north, /turf/open/floor/iron/dark/side{ @@ -72985,14 +73012,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) -"tzD" = ( -/obj/structure/flora/bush/sparsegrass/style_random, -/obj/structure/flora/bush/lavendergrass/style_random, -/obj/machinery/growing/tray{ - anchored = 0 - }, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden/abandoned) "tzQ" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 9 @@ -73819,6 +73838,12 @@ /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/iron/dark/smooth_large, /area/station/service/library/printer) +"tLV" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/directional/west, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "tMd" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -74545,22 +74570,6 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) -"tXR" = ( -/obj/machinery/button/door/directional/north{ - id = "visitation"; - name = "Visitation Shutters"; - pixel_x = 6; - req_access = list("brig") - }, -/obj/machinery/button/flasher{ - id = "visitorflash"; - pixel_x = -6; - pixel_y = 24 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "tXV" = ( /obj/structure/sign/poster/official/random/directional/south, /turf/open/floor/wood/tile, @@ -75283,12 +75292,6 @@ }, /turf/open/openspace, /area/station/maintenance/floor3/port) -"uiE" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/green/full, -/obj/machinery/growing/tray, -/turf/open/floor/iron, -/area/station/service/hydroponics) "uiH" = ( /obj/structure/window/reinforced/spawner/directional/south, /obj/structure/chair/sofa/bench/right{ @@ -77615,11 +77618,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white/small, /area/station/medical/chemistry) -"uRy" = ( -/obj/machinery/growing/soil, -/obj/item/radio/intercom/prison/directional/west, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "uRE" = ( /obj/machinery/door/airlock/engineering{ name = "Auxiliary Base Supplies" @@ -79498,6 +79496,11 @@ /obj/structure/marker_beacon/burgundy, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/aft) +"vqT" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/growing/tray, +/turf/open/floor/plating, +/area/station/maintenance/floor4/starboard) "vrh" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 4 @@ -80731,11 +80734,6 @@ }, /turf/open/floor/plating, /area/station/maintenance/disposal/incinerator) -"vHE" = ( -/obj/machinery/growing/tray, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron, -/area/station/maintenance/floor1/port/aft) "vHI" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -82205,6 +82203,17 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"wcP" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Permabrig Visitation" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "wcQ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -82975,17 +82984,6 @@ }, /turf/open/floor/pod/dark, /area/station/maintenance/floor1/port) -"wmI" = ( -/obj/machinery/door/airlock/security{ - name = "Isolation" - }, -/obj/effect/mapping_helpers/airlock/access/any/security/brig, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/tile/dark_red/fourcorners, -/turf/open/floor/iron, -/area/station/security/brig) "wmQ" = ( /obj/structure/window/reinforced/spawner/directional/east, /obj/effect/turf_decal/trimline/blue/filled/line{ @@ -86120,12 +86118,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/white, /area/station/hallway/floor2/fore) -"xaW" = ( -/obj/machinery/growing/soil, -/obj/item/cultivator, -/obj/structure/sign/poster/official/random/directional/north, -/turf/open/misc/dirt/jungle, -/area/station/security/prison/garden) "xaY" = ( /obj/structure/closet/crate/hydroponics, /obj/item/wirecutters, @@ -86756,17 +86748,6 @@ }, /turf/open/floor/iron/dark, /area/station/engineering/atmos/pumproom) -"xiS" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Permabrig Visitation" - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/structure/cable, -/turf/open/floor/iron/dark, -/area/station/security/prison/visit) "xjc" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/effect/turf_decal/tile/red/anticorner{ @@ -87167,15 +87148,6 @@ /obj/effect/mapping_helpers/airlock/access/all/science/ordnance, /turf/open/floor/engine/vacuum, /area/station/science/ordnance/burnchamber) -"xpO" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/machinery/airalarm/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/item/seeds/apple, -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/service/library/garden) "xpQ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -89140,6 +89112,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor1/port) +"xSm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/weather/dirt{ + dir = 4 + }, +/obj/machinery/growing/tray{ + anchored = 0 + }, +/turf/open/floor/iron, +/area/station/service/hydroponics/garden/abandoned) "xSn" = ( /obj/structure/table/reinforced, /obj/item/restraints/handcuffs/cable/zipties/used, @@ -89308,6 +89290,19 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/security/holding_cell) +"xVM" = ( +/obj/machinery/door/airlock/security{ + name = "Perma" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "perma-entrance" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark, +/area/station/security/prison/visit) "xVV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -90057,6 +90052,11 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/prison) +"yfE" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics/garden) "yfH" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Engineering" @@ -121185,7 +121185,7 @@ yiw lIU czK bBb -eNN +srk dpH vOK vOK @@ -121954,9 +121954,9 @@ pGW jfd yiw xwi -qkx +hml vcM -kHN +obJ dpH pCG cax @@ -130458,7 +130458,7 @@ mRq lwW lwW rsa -pHe +bVa xgH xgH xgH @@ -130975,7 +130975,7 @@ lwW lwW yey lwW -qtR +sct xgH hdA duP @@ -131224,7 +131224,7 @@ rjD xgH maL xgH -qcP +xSm fVf mRq lAH @@ -131484,7 +131484,7 @@ xgH xgH xgH xgH -tzD +eJY xkN nzK yey @@ -137649,7 +137649,7 @@ dEc ggX uov vcr -vHE +gvy khc arn vcr @@ -137906,7 +137906,7 @@ dEc dEc rJO vcr -jSa +kvI khc gNs vcr @@ -138163,7 +138163,7 @@ uyC emq sJp vcr -jSa +kvI lDI bjk vcr @@ -178508,9 +178508,9 @@ bkj ccP cvP dxG -gOd -fnB -gbW +lYZ +tLV +gVI pWf hLz uXA @@ -179279,9 +179279,9 @@ cIl dWl cEb dFy -eAv -gfI -ozF +yfE +sqD +hAv ksr hLz jRy @@ -186709,9 +186709,9 @@ rkM iOA crl vnK -akl +dwz nHd -ghz +dFS cnA ukm nqo @@ -198018,7 +198018,7 @@ deG oYb pKg xRp -xpO +slE amt vUc evJ @@ -248668,9 +248668,9 @@ nCL qBx oNs akD -fNg +iGF sWw -fNg +iGF nBC mOh qBx @@ -248925,9 +248925,9 @@ dFd nIv pjh ixH -fNg +iGF sWw -uiE +cdg uYg fDF jZP @@ -249439,15 +249439,15 @@ toO ouZ uOl gAe -fNg +iGF mZy -fNg +iGF rRX cSf qBx dFN -pwE -iaM +eFL +efo anb tGn tGn @@ -249696,9 +249696,9 @@ dFd nIv dPv grb -fNg +iGF mZy -fNg +iGF nBC vyH qBx @@ -250210,13 +250210,13 @@ dFd qBx qUs grb -fNg +iGF tff -fNg +iGF nBC -fNg +iGF grb -fNg +iGF tuH smi dLV @@ -250467,13 +250467,13 @@ tQF qBx qBx grb -fNg +iGF tff -fNg +iGF nBC -fNg +iGF grb -fNg +iGF mFB smi xpR @@ -250728,9 +250728,9 @@ brO ruS umG yhz -fNg +iGF xmM -fNg +iGF nGG rhu aPH @@ -258421,7 +258421,7 @@ isU qrd uFc pOZ -nof +bbG qrd rfU rfU @@ -314955,7 +314955,7 @@ gDy qFM bWn neJ -ryQ +vqT gDy uDE nPE @@ -321670,7 +321670,7 @@ qFI qFI qFI qFI -wmI +fDp xZL fbo kTI @@ -322444,7 +322444,7 @@ gDx xTw tBk edj -kAR +psV tBk ycM nCA @@ -322960,7 +322960,7 @@ tBk qTA lwY lwY -cVz +kQc fCA foF rbr @@ -323982,9 +323982,9 @@ fCz obT wNR tBk -tXR +feP aDD -xiS +wcP gqV iyR rKX @@ -324756,7 +324756,7 @@ tBk lmk eIq hMd -kye +xVM waJ rbr rbr @@ -327314,11 +327314,11 @@ kgW eYj wMF wMF -xaW -iQF -dAr -uRy -boB +oSM +kTN +rvf +oTB +sLH wQo xOF fZg diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 27b121a28db0..a6bedc55a358 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -697,13 +697,6 @@ /obj/structure/railing, /turf/open/lava/plasma/ice_moon, /area/centcom/syndicate_mothership/control) -"bS" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/ghost_spawn) "bT" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 @@ -1362,6 +1355,11 @@ }, /turf/open/floor/carpet, /area/centcom/syndicate_mothership/control) +"dG" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/obj/machinery/light/directional/south, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ghost_spawn) "dH" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -1442,7 +1440,7 @@ dir = 4 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "dP" = ( /obj/machinery/dna_scannernew, /turf/open/floor/circuit, @@ -2172,11 +2170,6 @@ /obj/machinery/computer/records/security/laptop, /turf/open/floor/iron/dark, /area/centcom/central_command_areas/admin) -"gg" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/ghost_spawn) "gh" = ( /obj/structure/sign/poster/contraband/revolver{ pixel_y = -32 @@ -2763,11 +2756,6 @@ /obj/item/clipboard, /turf/open/indestructible/hotelwood, /area/centcom/central_command_areas/admin) -"hL" = ( -/obj/structure/flora/tree/jungle/style_3, -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/grass, -/area/centcom/central_command_areas/ghost_spawn) "hM" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 4 @@ -4086,7 +4074,7 @@ dir = 4 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "lB" = ( /obj/effect/turf_decal/siding/wideplating{ dir = 1 @@ -4738,13 +4726,6 @@ /obj/structure/closet/crate/cardboard/mothic, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) -"np" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/ghost_spawn) "nq" = ( /obj/structure/stone_tile/slab, /turf/open/misc/snow/actually_safe, @@ -4875,7 +4856,7 @@ dir = 1 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "nO" = ( /obj/structure/cannon{ dir = 4; @@ -6717,6 +6698,10 @@ /obj/structure/closet/crate/cardboard, /turf/open/floor/plating, /area/centcom/syndicate_mothership/control) +"sO" = ( +/obj/effect/turf_decal/tile/dark/opposingcorners, +/turf/open/floor/iron/dark, +/area/centcom/central_command_areas/ghost_spawn) "sP" = ( /obj/structure/hedge, /obj/effect/turf_decal/siding/dark{ @@ -7390,7 +7375,7 @@ "uC" = ( /obj/structure/railing/wood, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "uD" = ( /obj/structure/table/wood, /obj/machinery/computer/records/medical/laptop, @@ -9370,7 +9355,7 @@ dir = 8 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "Ac" = ( /obj/effect/turf_decal/siding/dark{ dir = 4 @@ -10165,7 +10150,7 @@ dir = 1 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "Cj" = ( /obj/effect/turf_decal/siding/dark/corner{ dir = 8 @@ -10738,7 +10723,7 @@ dir = 1 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "DS" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ dir = 1 @@ -11291,7 +11276,7 @@ /obj/effect/turf_decal/siding/wood, /obj/structure/centcom_teleporter/spawn_area, /turf/open/floor/wood/large, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "Fz" = ( /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership) @@ -12928,13 +12913,6 @@ }, /turf/open/floor/iron/dark/textured_large, /area/centcom/syndicate_mothership/control) -"Kg" = ( -/obj/structure/hedge, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood/large, -/area/centcom/central_command_areas/ghost_spawn) "Kh" = ( /obj/effect/turf_decal/siding/dark{ dir = 10 @@ -14570,7 +14548,7 @@ dir = 8 }, /turf/open/floor/glass/reinforced, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "OC" = ( /obj/structure/table/reinforced, /obj/item/toy/plush/space_lizard_plushie{ @@ -15645,7 +15623,7 @@ /obj/machinery/light/floor/has_bulb, /obj/structure/flora/bush/large/style_3, /turf/open/floor/grass, -/area/centcom/central_command_areas/ghost_spawn) +/area/centcom/central_command_areas/hall) "RF" = ( /obj/structure/table/reinforced, /obj/item/crowbar/red, @@ -61205,13 +61183,13 @@ An xT bw dE -rj -rj +sO +sO nk iu Xc -rj -rj +sO +sO Of xu VF @@ -61462,13 +61440,13 @@ An An in mQ -rj +sO uA -Kg +TW RE -np +FK nF -io +dG wc hE lI @@ -61979,7 +61957,7 @@ BE nk wH DR -hL +YF uC wH Fx @@ -62490,13 +62468,13 @@ An An DO mQ -rj +sO zJ -bS +Tr RE -gg +kO nR -io +dG wc hE lI @@ -62747,13 +62725,13 @@ An xo nd dE -rj -rj +sO +sO nk iu Xc -rj -rj +sO +sO eP Ut fe diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index eac92289e047..6047fc0abd8c 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -2,16 +2,6 @@ "aaa" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/station/asteroid) -"aab" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "aac" = ( /turf/open/misc/asteroid/airless, /area/station/asteroid) @@ -21,18 +11,6 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/central/greater) -"aae" = ( -/obj/structure/cable, -/obj/machinery/door/airlock/external{ - name = "External Access" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/effect/turf_decal/sand/plating, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/plating, -/area/station/maintenance/central/greater) "aaf" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -1169,18 +1147,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron, /area/station/escapepodbay) -"adw" = ( -/obj/machinery/growing/soil, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 6 - }, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "adx" = ( /obj/machinery/power/apc/auto_name/directional/west, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -4100,10 +4066,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/disposal) -"azy" = ( -/obj/effect/turf_decal/siding/thinplating, -/turf/open/floor/glass/reinforced, -/area/station/security/brig) "azM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/neutral/filled/line, @@ -4405,6 +4367,10 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"aCo" = ( +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "aCv" = ( /obj/machinery/mineral/ore_redemption, /obj/machinery/door/firedoor, @@ -7774,6 +7740,17 @@ /obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/iron/dark, /area/station/science/ordnance/storage) +"bra" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "brm" = ( /turf/open/openspace, /area/station/hallway/primary/tram/right) @@ -9591,6 +9568,19 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/service/chapel) +"bUx" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Permanent Convict Item Storage" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/dark, +/area/station/security/execution/transfer) "bUT" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -12806,22 +12796,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/greater) -"cXt" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell C" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "cXy" = ( /obj/machinery/igniter/incinerator_ordmix, /turf/open/floor/engine/vacuum, @@ -13286,6 +13260,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/commons/dorms) +"dfk" = ( +/obj/machinery/growing/soil, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 6 + }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "dfs" = ( /obj/machinery/door/poddoor/preopen{ id = "atmos"; @@ -14332,6 +14318,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/engineering/atmos) +"dxq" = ( +/obj/effect/turf_decal/siding/thinplating, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/glass/reinforced, +/area/station/security/brig) "dxw" = ( /obj/machinery/newscaster/directional/north, /obj/structure/cable, @@ -15954,11 +15945,6 @@ /obj/effect/turf_decal/tile/blue/fourcorners, /turf/open/floor/iron/white, /area/station/medical/treatment_center) -"dXA" = ( -/obj/structure/cable, -/mob/living/basic/pet/potty, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "dXC" = ( /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/table/wood/fancy/blue, @@ -16543,18 +16529,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/catwalk_floor/iron_smooth, /area/station/maintenance/tram/left) -"egD" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "Prison Maintenance Access"; - security_level = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/smooth, -/area/station/maintenance/central/greater) "egJ" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 @@ -18712,14 +18686,6 @@ /obj/structure/cable, /turf/open/floor/catwalk_floor, /area/station/maintenance/port/aft) -"eRw" = ( -/obj/machinery/growing/soil, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 9 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "eRQ" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner, /obj/machinery/camera{ @@ -18812,6 +18778,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/engineering/gravity_generator) +"eTe" = ( +/obj/machinery/growing/soil, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "eTl" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -18961,6 +18935,15 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/smooth, /area/station/maintenance/port/central) +"eVH" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/iron, +/area/station/security/brig) "eVK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -19119,14 +19102,6 @@ /obj/effect/turf_decal/stripes/white/line, /turf/open/floor/plating, /area/station/maintenance/tram/mid) -"eYu" = ( -/obj/effect/turf_decal/trimline/red/filled/line, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "eYM" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 4 @@ -19402,14 +19377,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/security/courtroom) -"feC" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "feK" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -19780,6 +19747,10 @@ }, /turf/open/floor/iron, /area/station/maintenance/tram/left) +"fjI" = ( +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/service/hydroponics) "fjN" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 4 @@ -20148,6 +20119,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/service/janitor) +"foZ" = ( +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/growing/tray, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "fpf" = ( /obj/structure/flora/bush/leavy/style_random, /obj/structure/flora/tree/palm/style_random, @@ -24204,22 +24182,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/department/eva) -"gLa" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell B" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "gLd" = ( /obj/machinery/field/generator, /obj/effect/turf_decal/stripes/line, @@ -28870,6 +28832,13 @@ /obj/effect/spawner/random/trash/moisture, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/greater) +"ipS" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ipU" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 6 @@ -29503,6 +29472,22 @@ }, /turf/open/floor/iron, /area/station/cargo/miningdock) +"iyr" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell C" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "iyC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29779,22 +29764,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"iEO" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell D" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "iFz" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -29924,32 +29893,6 @@ /obj/machinery/light/floor/has_bulb, /turf/open/floor/grass, /area/station/service/hydroponics) -"iHG" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = -12 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/closet/crate/hydroponics, -/obj/item/seeds/onion, -/obj/item/paper/guides/jobs/hydroponics, -/obj/item/seeds/garlic, -/obj/item/seeds/potato, -/obj/item/seeds/tomato, -/obj/item/seeds/carrot, -/obj/item/seeds/grass, -/obj/item/seeds/ambrosia, -/obj/item/seeds/wheat, -/obj/item/seeds/pumpkin, -/obj/effect/spawner/random/contraband/prison, -/obj/item/seeds/tree, -/turf/open/floor/iron, -/area/station/security/prison/garden) "iHH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -33189,6 +33132,18 @@ }, /turf/open/floor/iron, /area/station/security/processing) +"jGY" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Prison Wing" + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "jHc" = ( /obj/structure/rack, /turf/open/floor/plating, @@ -35632,6 +35587,11 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/left) +"kyb" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/service/hydroponics) "kye" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/cafeteria, @@ -35710,6 +35670,18 @@ /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, /area/station/maintenance/department/cargo) +"kzv" = ( +/obj/machinery/door/airlock/highsecurity{ + name = "Prison Maintenance Access"; + security_level = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron/smooth, +/area/station/maintenance/central/greater) "kzw" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/stripes/line{ @@ -38790,6 +38762,14 @@ }, /turf/open/floor/carpet/royalblack, /area/station/command/meeting_room) +"ltR" = ( +/obj/machinery/growing/tray, +/obj/effect/turf_decal/trimline/green/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "ltZ" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 5 @@ -39805,16 +39785,6 @@ /obj/structure/fluff/tram_rail, /turf/open/openspace, /area/station/hallway/primary/tram/left) -"lNZ" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/brig) "lOd" = ( /obj/structure/table, /obj/item/storage/portable_chem_mixer, @@ -40015,16 +39985,6 @@ "lQw" = ( /turf/open/misc/asteroid/dug, /area/station/maintenance/starboard/lesser) -"lQx" = ( -/obj/machinery/growing/soil, -/obj/machinery/status_display/ai/directional/south, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/item/cultivator, -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "lQC" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 5 @@ -40066,6 +40026,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/right) +"lRw" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/machinery/growing/tray, +/turf/open/floor/grass, +/area/station/service/hydroponics) "lRC" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/effect/turf_decal/trimline/neutral/corner, @@ -41547,10 +41512,6 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) -"moV" = ( -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "moX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -41583,10 +41544,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/hallway/secondary/construction/engineering) -"mpw" = ( -/obj/machinery/growing/soil, -/turf/open/floor/grass, -/area/station/service/hydroponics/garden) "mpz" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -43748,6 +43705,11 @@ }, /turf/open/floor/iron/white, /area/station/science/ordnance/burnchamber) +"nbL" = ( +/obj/structure/cable, +/mob/living/basic/pet/potty, +/turf/open/floor/iron/dark, +/area/station/service/hydroponics) "nbP" = ( /obj/effect/turf_decal/trimline/yellow/arrow_ccw{ dir = 8 @@ -46122,6 +46084,22 @@ /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron, /area/station/cargo/miningdock/cafeteria) +"nOP" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell D" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "nPb" = ( /turf/closed/mineral/random/stationside/asteroid/porus, /area/ruin/powered/clownplanet) @@ -46132,6 +46110,16 @@ "nPe" = ( /turf/open/floor/carpet, /area/station/medical/psychology) +"nPx" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "nPA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -46958,6 +46946,14 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/primary/tram/center) +"odb" = ( +/obj/machinery/growing/soil, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 10 + }, +/obj/item/plant_analyzer, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "odf" = ( /obj/structure/bed{ dir = 4 @@ -47701,15 +47697,6 @@ /obj/machinery/atmospherics/pipe/smart/simple/dark/visible, /turf/open/floor/plating, /area/station/engineering/atmos) -"ork" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/glass/reinforced, -/area/station/security/brig) "orr" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -47727,6 +47714,18 @@ /obj/item/wallframe/apc, /turf/open/misc/asteroid, /area/station/maintenance/department/security) +"orC" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Permabrig Maintenance" + }, +/obj/machinery/duct, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/catwalk_floor, +/area/station/maintenance/central/greater) "orH" = ( /obj/item/weldingtool/empty, /obj/effect/decal/cleanable/dirt, @@ -47816,16 +47815,6 @@ }, /turf/open/floor/glass/reinforced, /area/station/security/brig) -"otn" = ( -/obj/machinery/growing/soil, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/effect/turf_decal/trimline/neutral/filled/line, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "ots" = ( /obj/effect/turf_decal/trimline/yellow/filled/line, /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -50685,13 +50674,6 @@ "ptQ" = ( /turf/open/openspace, /area/station/science/genetics) -"ptR" = ( -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/obj/machinery/growing/tray, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ptT" = ( /obj/structure/railing{ dir = 1 @@ -50867,6 +50849,22 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"pvY" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell B" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "pwd" = ( /obj/structure/cable, /obj/structure/disposalpipe/sorting/mail{ @@ -50957,23 +50955,6 @@ dir = 4 }, /area/station/command/bridge) -"pxj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = -7 - }, -/obj/effect/turf_decal/bot, -/obj/item/stack/sheet/plasteel/fifty, -/obj/effect/decal/cleanable/dirt, -/obj/item/hfr_box/body/fuel_input, -/obj/item/hfr_box/body/interface, -/obj/item/hfr_box/body/moderator_input, -/obj/item/hfr_box/body/waste_output, -/obj/item/circuitboard/machine/crystallizer, -/turf/open/floor/iron, -/area/station/engineering/atmospherics_engine) "pxo" = ( /obj/structure/chair/pew, /turf/open/floor/iron/chapel{ @@ -52168,6 +52149,16 @@ /obj/effect/landmark/navigate_destination/chapel, /turf/open/floor/carpet, /area/station/service/chapel) +"pNA" = ( +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/landmark/start/security_assistant, +/turf/open/floor/glass/reinforced, +/area/station/security/brig) "pNB" = ( /obj/structure/chair/comfy/beige, /obj/effect/landmark/start/hangover, @@ -53485,14 +53476,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/pathology) -"qjG" = ( -/obj/machinery/growing/soil, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 10 - }, -/obj/item/plant_analyzer, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "qjJ" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, @@ -53648,6 +53631,10 @@ /obj/effect/turf_decal/trimline/yellow/filled/corner, /turf/open/floor/iron/dark/corner, /area/station/ai_monitored/command/storage/eva) +"qnb" = ( +/obj/machinery/growing/soil, +/turf/open/floor/grass, +/area/station/service/hydroponics/garden) "qnd" = ( /obj/structure/rack, /obj/item/reagent_containers/cup/bottle/iron{ @@ -53698,21 +53685,6 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) -"qnU" = ( -/obj/effect/turf_decal/trimline/red/filled/corner, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/machinery/button/flasher{ - id = "permafrontdoor"; - pixel_x = 9; - pixel_y = 24; - req_access = list("brig") - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "qnW" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -54877,6 +54849,19 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"qGw" = ( +/obj/machinery/growing/soil, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/item/cultivator, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "qGy" = ( /obj/structure/transit_tube/crossing, /turf/open/floor/plating/airless, @@ -56845,14 +56830,6 @@ }, /turf/open/floor/plating, /area/station/science/xenobiology) -"rkP" = ( -/obj/machinery/growing/soil, -/obj/effect/turf_decal/trimline/green/filled/line, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "rle" = ( /obj/effect/turf_decal/trimline/dark_green/filled/corner{ dir = 1 @@ -57855,19 +57832,6 @@ "rBz" = ( /turf/open/floor/iron, /area/station/security/prison) -"rBB" = ( -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Permanent Convict Item Storage" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/general, -/turf/open/floor/iron/dark, -/area/station/security/execution/transfer) "rBE" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 @@ -58032,6 +57996,22 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"rEz" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Cell A" + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "rEA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -59150,15 +59130,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/prison) -"rZI" = ( -/obj/machinery/growing/soil, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 1 - }, -/obj/item/shovel/spade, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "rZU" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 4 @@ -60753,6 +60724,21 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron, /area/station/engineering/atmos) +"szG" = ( +/obj/effect/turf_decal/trimline/red/filled/corner, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/machinery/button/flasher{ + id = "permafrontdoor"; + pixel_x = 9; + pixel_y = 24; + req_one_access = list("brig", "permabrig") + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "szM" = ( /obj/effect/turf_decal/trimline/red/filled/corner{ dir = 1 @@ -62518,9 +62504,29 @@ icon_state = "clown_carpet" }, /area/station/security/execution/education) +"tbu" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/external{ + name = "External Access" + }, +/obj/effect/turf_decal/sand/plating, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/plating, +/area/station/maintenance/central/greater) "tby" = ( /turf/open/floor/iron/white, /area/station/science/research) +"tbA" = ( +/obj/machinery/growing/soil, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 9 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "tbF" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -62873,6 +62879,16 @@ /obj/structure/sink/directional/east, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"tgZ" = ( +/obj/machinery/growing/soil, +/obj/machinery/status_display/ai/directional/south, +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/item/cultivator, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "thi" = ( /obj/structure/curtain, /obj/machinery/shower/directional/south, @@ -63671,19 +63687,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/engineering/atmos) -"tsw" = ( -/obj/machinery/growing/soil, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/trimline/green/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/neutral/filled/corner, -/obj/item/cultivator, -/obj/effect/turf_decal/trimline/neutral/filled/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark, -/area/station/security/prison/garden) "tsE" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/blobstart, @@ -63742,13 +63745,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/dark/visible, /turf/open/floor/engine, /area/station/science/xenobiology) -"tto" = ( -/obj/machinery/growing/tray, -/obj/effect/turf_decal/trimline/green/line{ - dir = 1 - }, -/turf/open/floor/iron/dark, -/area/station/service/hydroponics) "ttr" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 8 @@ -64573,22 +64569,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/command/bridge) -"tJJ" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 4 - }, -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Cell A" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "tJR" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/trimline/red/filled/line{ @@ -68367,6 +68347,16 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/maint) +"uTq" = ( +/obj/machinery/growing/soil, +/obj/machinery/status_display/evac/directional/north, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "uTz" = ( /obj/structure/railing{ dir = 8 @@ -70643,6 +70633,15 @@ }, /turf/open/floor/iron/dark, /area/station/cargo/miningdock/oresilo) +"vAp" = ( +/obj/machinery/growing/soil, +/obj/effect/turf_decal/trimline/green/filled/line{ + dir = 1 + }, +/obj/item/shovel/spade, +/obj/effect/turf_decal/trimline/neutral/filled/corner, +/turf/open/floor/iron/dark, +/area/station/security/prison/garden) "vAs" = ( /obj/structure/railing, /turf/open/openspace, @@ -70928,18 +70927,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/commons/vacant_room/commissary) -"vEc" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Permabrig Maintenance" - }, -/obj/machinery/duct, -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/catwalk_floor, -/area/station/maintenance/central/greater) "vEj" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -71354,6 +71341,32 @@ /obj/machinery/status_display/evac/directional/east, /turf/open/floor/iron/dark, /area/station/command/teleporter) +"vMH" = ( +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 8 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = -12 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/closet/crate/hydroponics, +/obj/item/seeds/onion, +/obj/item/paper/guides/jobs/hydroponics, +/obj/item/seeds/garlic, +/obj/item/seeds/potato, +/obj/item/seeds/tomato, +/obj/item/seeds/carrot, +/obj/item/seeds/grass, +/obj/item/seeds/ambrosia, +/obj/item/seeds/wheat, +/obj/item/seeds/pumpkin, +/obj/effect/spawner/random/contraband/prison, +/obj/item/seeds/tree, +/turf/open/floor/iron, +/area/station/security/prison/garden) "vMI" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -72449,11 +72462,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"wed" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/service/hydroponics) "wei" = ( /obj/effect/turf_decal/trimline/red/filled/corner, /obj/effect/turf_decal/trimline/red/filled/corner{ @@ -75391,18 +75399,6 @@ }, /turf/open/floor/iron, /area/station/security/prison/workout) -"xcj" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prison Wing" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "xck" = ( /turf/open/floor/iron/white, /area/station/medical/medbay/lobby) @@ -75475,10 +75471,6 @@ }, /turf/open/floor/engine, /area/station/science/ordnance/burnchamber) -"xet" = ( -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/service/hydroponics) "xez" = ( /obj/effect/turf_decal/trimline/dark_red/warning{ dir = 10 @@ -76024,21 +76016,6 @@ /obj/effect/turf_decal/tile/brown/fourcorners, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"xog" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Isolation Wing" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/trimline/red/filled/line, -/obj/effect/turf_decal/trimline/red/filled/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/security/brig, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/security/execution/transfer) "xom" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 6 @@ -77096,11 +77073,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood, /area/station/command/meeting_room) -"xIu" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/machinery/growing/tray, -/turf/open/floor/grass, -/area/station/service/hydroponics) "xIL" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -77685,6 +77657,23 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/medical/treatment_center) +"xTo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/effect/turf_decal/bot, +/obj/item/stack/sheet/plasteel/fifty, +/obj/effect/decal/cleanable/dirt, +/obj/item/hfr_box/body/fuel_input, +/obj/item/hfr_box/body/interface, +/obj/item/hfr_box/body/moderator_input, +/obj/item/hfr_box/body/waste_output, +/obj/item/circuitboard/machine/crystallizer, +/turf/open/floor/iron, +/area/station/engineering/atmospherics_engine) "xTr" = ( /obj/effect/turf_decal/trimline/dark_green/filled/corner{ dir = 8 @@ -78385,6 +78374,21 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) +"ydS" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Isolation Wing" + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig, +/turf/open/floor/iron, +/area/station/security/execution/transfer) "ydU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -92160,11 +92164,11 @@ aaa jWs ems pJb -cXt +iyr tnB eTl wei -iEO +nOP eOc ong jWs @@ -92931,11 +92935,11 @@ aaa jWs ems pJb -tJJ +rEz tnB eTl wei -gLa +pvY eOc ong jWs @@ -93448,7 +93452,7 @@ aaa jWs jWs cWF -xog +ydS cWF msg kaT @@ -93969,7 +93973,7 @@ eTl pbY fHl adz -rBB +bUx nZP iGG bSU @@ -94994,7 +94998,7 @@ mXD jiF fea jWs -qnU +szG amU ggX jWs @@ -95253,7 +95257,7 @@ oEN oEN uLW neR -xcj +jGY oEN oVM adN @@ -100376,7 +100380,7 @@ aaf dqp dqp anU -vEc +orC ddN dLN xXt @@ -100626,9 +100630,9 @@ aaa aaa abM sYd -aab +nPx aad -aae +tbu mST bMV nMu @@ -101144,7 +101148,7 @@ aaa aaa xwf sul -egD +kzv xwf xwf xwf @@ -101931,11 +101935,11 @@ hFr qDc mSK duB -eRw +tbA sTq -iHG +vMH eay -qjG +odb duB aaa aaa @@ -102188,11 +102192,11 @@ wxM hsH pIt duB -rZI +vAp gJR cOv xNm -rkP +eTe duB aaa aaa @@ -102445,11 +102449,11 @@ hFr sYb cAU duB -otn +uTq ecs cOv biS -lQx +tgZ duB aaa aaa @@ -102702,11 +102706,11 @@ hFr cNy hFr duB -tsw +qGw kwk acV adq -adw +dfk duB aaa aaa @@ -110413,10 +110417,10 @@ aqu lQo pHX mpL -moV -tto -tto -feC +aCo +ipS +ipS +ltR voF pVJ nUP @@ -110927,10 +110931,10 @@ xvN nUP wDw ale -moV -ptR -tto -feC +aCo +foZ +ipS +ltR sbv yka nUP @@ -111441,10 +111445,10 @@ mek dvi smF jsz -moV -tto -tto -feC +aCo +ipS +ipS +ltR voF tac nUP @@ -111687,17 +111691,17 @@ aac nUP rKb tka -wed +kyb nSi -xet +fjI nSi -xIu +lRw nUP gcE mDy nUP oIk -dXA +nbL uLD sqF adh @@ -115124,7 +115128,7 @@ fjQ fjQ fjQ bNz -pxj +xTo nDh oGy eqY @@ -156204,7 +156208,7 @@ yfz nEF jBy iHr -mpw +qnb tdx mQa aju @@ -156461,7 +156465,7 @@ ckM pVW aow mdY -mpw +qnb tdx mQa tdx @@ -156718,7 +156722,7 @@ ckM ftt igT mdY -mpw +qnb tdx mQa tdx @@ -156975,7 +156979,7 @@ ilh ufK igT mdY -mpw +qnb tdx mQa tdx @@ -157489,7 +157493,7 @@ vpS mNC gkR mdY -mpw +qnb tdx tdx tdx @@ -157746,7 +157750,7 @@ ckM ijf aUh mdY -mpw +qnb ckM rrM puN @@ -158003,7 +158007,7 @@ ckM qgx sMX mdY -mpw +qnb ckM aHD iOi @@ -158260,7 +158264,7 @@ ckM pMz pzw cGm -mpw +qnb ckM kwo iOi @@ -161049,8 +161053,8 @@ dWK qdY uCZ dSo -lNZ -eYu +bra +eVH dSo rMS psv @@ -162842,13 +162846,13 @@ mGN gNK rOh anD -ork +pNA oFY -ork +pNA lSo lSo lSo -azy +dxq vqE qyZ aPP @@ -164647,8 +164651,8 @@ xLO hMA wEx dSo -lNZ -eYu +bra +eVH dSo rMS bPV diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index e7e8451b4b17..f9105932154a 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -290,8 +290,8 @@ ACCESS_COURT, \ ACCESS_CREMATORIUM, \ ACCESS_DETECTIVE, \ - ACCESS_ENGINE_EQUIP, \ ACCESS_ENGINEERING, \ + ACCESS_ENGINE_EQUIP, \ ACCESS_EXTERNAL_AIRLOCKS, \ ACCESS_GENETICS, \ ACCESS_HYDROPONICS, \ @@ -300,11 +300,11 @@ ACCESS_LAWYER, \ ACCESS_LIBRARY, \ ACCESS_MAINT_TUNNELS, \ - ACCESS_MECH_MINING, \ + ACCESS_MECH_ENGINE, \ ACCESS_MECH_MEDICAL, \ - ACCESS_MECH_SECURITY, \ + ACCESS_MECH_MINING, \ ACCESS_MECH_SCIENCE, \ - ACCESS_MECH_ENGINE, \ + ACCESS_MECH_SECURITY, \ ACCESS_MEDICAL, \ ACCESS_MINERAL_STOREROOM, \ ACCESS_MINING, \ @@ -313,6 +313,7 @@ ACCESS_NETWORK, \ ACCESS_ORDNANCE, \ ACCESS_ORDNANCE_STORAGE, \ + ACCESS_PERMABRIG, \ ACCESS_PHARMACY, \ ACCESS_PLUMBING, \ ACCESS_PSYCHOLOGY, \ @@ -328,7 +329,7 @@ ACCESS_VIROLOGY, \ ACCESS_WEAPONS, \ ACCESS_XENOBIOLOGY, \ -) +) /* monkestation edit: add permabrig-only access */ /// 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( \ @@ -434,9 +435,11 @@ ACCESS_DETECTIVE, \ ACCESS_HOS, \ ACCESS_MECH_SECURITY, \ + ACCESS_PERMABRIG, \ ACCESS_SECURITY, \ ACCESS_WEAPONS, \ -) +) /* monkestation edit: add permabrig-only access */ + /// Name for the Medbay region. #define REGION_MEDBAY "Medbay" /// Used to seed the accesses_by_region list in SSid_access. A list of all medbay regional accesses that are overseen by the CMO. diff --git a/code/__DEFINES/bloodsuckers.dm b/code/__DEFINES/bloodsuckers.dm index 464fb6a900ac..6860403ba89f 100644 --- a/code/__DEFINES/bloodsuckers.dm +++ b/code/__DEFINES/bloodsuckers.dm @@ -2,7 +2,7 @@ //#define BLOODSUCKER_TESTING /// You have special interactions with Bloodsuckers -#define TRAIT_BLOODSUCKER_HUNTER "bloodsucker_hunter" +#define TRAIT_OCCULTIST "occultist" /** * Blood-level defines diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 40aca24b600d..d7b6e903930f 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -3,8 +3,6 @@ // All signals send the source datum of the signal as the first argument // /atom signals -///from base of atom/proc/Initialize(): sent any time a new atom is created in this atom -#define COMSIG_ATOM_INITIALIZED_ON "atom_initialized_on" //from SSatoms InitAtom - Only if the atom was not deleted or failed initialization #define COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZE "atom_init_success" //from SSatoms InitAtom - Only if the atom was not deleted or failed initialization and has a loc diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 658d363ded37..8ab7647d47e8 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -152,7 +152,8 @@ #define JOB_DISPLAY_ORDER_WARDEN 33 #define JOB_DISPLAY_ORDER_DETECTIVE 34 #define JOB_DISPLAY_ORDER_SECURITY_OFFICER 35 -#define JOB_DISPLAY_ORDER_PRISONER 36 +#define JOB_DISPLAY_ORDER_SECURITY_ASSISTANT 36 // monkestation edit: security assistants +#define JOB_DISPLAY_ORDER_PRISONER 37 #define DEPARTMENT_UNASSIGNED "No Department" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 2618161affc6..da6c87a202d8 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -371,6 +371,8 @@ #define GALOSHES_DONT_HELP (1<<3) /// Slip works even if you're already on the ground #define SLIP_WHEN_CRAWLING (1<<4) +/// the mob won't slip if the turf has the TRAIT_TURF_IGNORE_SLIPPERY trait. +#define SLIPPERY_TURF (1<<5) #define MAX_CHICKENS 50 @@ -742,6 +744,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( "[BELT_LAYER]" = LOWER_BODY, // Everything below looks fine with or without a filter, so we can skip it and just offset // (In practice they'd be fine if they got a filter but we can optimize a bit by not.) + /* monkestation edit: fix some weirdness with heights, most notably gloves "[GLASSES_LAYER]" = UPPER_BODY, "[ABOVE_BODY_FRONT_GLASSES_LAYER]" = UPPER_BODY, // currently unused "[ABOVE_BODY_FRONT_HEAD_LAYER]" = UPPER_BODY, // only used for head stuff @@ -751,6 +754,7 @@ GLOBAL_LIST_INIT(layers_to_offset, list( "[ID_CARD_LAYER]" = UPPER_BODY, // unused "[ID_LAYER]" = UPPER_BODY, "[FACEMASK_LAYER]" = UPPER_BODY, + monkestation end */ "[FACE_LAYER]" = UPPER_BODY, // These two are cached, and have their appearance shared(?), so it's safer to just not touch it "[MUTATIONS_LAYER]" = NO_MODIFY, diff --git a/code/__DEFINES/research/anomalies.dm b/code/__DEFINES/research/anomalies.dm index 3a6b02f91888..c5b626cf9249 100644 --- a/code/__DEFINES/research/anomalies.dm +++ b/code/__DEFINES/research/anomalies.dm @@ -24,12 +24,20 @@ GLOBAL_LIST_INIT(bioscrambler_parts_blacklist, typecacheof(list( /obj/item/bodypart/leg/left/monkey, /obj/item/bodypart/leg/right/monkey, /obj/item/bodypart/leg/left/tallboy, - /obj/item/bodypart/leg/right/tallboy, + /obj/item/bodypart/leg/right/tallboy ))) +/// Blacklist of limb IDs which should not appear when bioscrambled, mostly because they looks awful and buggy. +GLOBAL_LIST_INIT(bioscrambler_limb_id_blacklist, list( + BODYPART_ID_PSYKER, + SPECIES_SIMIAN, + SPECIES_MONKEY, + SPECIES_GOBLIN +)) + /// Blacklist of organs which should not appear when bioscrambled. /// Either will look terrible outside of intended host, give you magical powers, are irreversible, or kill you -GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( +GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list( /obj/item/organ/external/pod_hair, /obj/item/organ/external/spines, /obj/item/organ/external/wings, @@ -38,14 +46,35 @@ GLOBAL_LIST_INIT(bioscrambler_organs_blacklist, typecacheof(list ( /obj/item/organ/internal/brain, /obj/item/organ/internal/body_egg, /obj/item/organ/internal/cyberimp, + /obj/item/organ/internal/ears/dullahan, + /obj/item/organ/internal/eyes/dullahan, /obj/item/organ/internal/heart/cursed, /obj/item/organ/internal/heart/demon, /obj/item/organ/internal/lungs, /obj/item/organ/internal/monster_core, + /obj/item/organ/internal/tongue/dullahan, /obj/item/organ/internal/vocal_cords/colossus, /obj/item/organ/internal/zombie_infection, - /obj/item/organ/internal/empowered_borer_egg, // MONKESTATION ADDITION -- CORTICAL_BORERS -))) + // monkestation additions + /obj/item/organ/internal/heart/gland/egg, + /obj/item/organ/internal/heart/gland/electric, + /obj/item/organ/internal/heart/gland/mindshock, + /obj/item/organ/internal/heart/gland/plasma, + /obj/item/organ/internal/heart/gland/quantum, + /obj/item/organ/internal/heart/gland/slime, + /obj/item/organ/internal/heart/gland/trauma, + /obj/item/organ/internal/heart/gland/viral, + /obj/item/organ/external/anime_head, + /obj/item/organ/external/anime_middle, + /obj/item/organ/external/anime_bottom, + /obj/item/organ/internal/tongue/fly, + /obj/item/organ/internal/stomach/fly, + /obj/item/organ/internal/legion_tumour, + /obj/item/organ/internal/liver/gondola, + /obj/item/organ/internal/heart/gondola, + /obj/item/organ/internal/tongue/gondola, + /obj/item/organ/internal/empowered_borer_egg +)) - subtypesof(/obj/item/organ/external/wings/functional) - typesof(/obj/item/organ/external/wings/moth)) /// List of body parts we can apply to people GLOBAL_LIST_EMPTY(bioscrambler_valid_parts) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e15e1fb300c6..6a01d6ac721e 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -636,6 +636,15 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// This movable atom has the explosive block element #define TRAIT_BLOCKING_EXPLOSIVES "blocking_explosives" +///Lava will be safe to cross while it has this trait. +#define TRAIT_LAVA_STOPPED "lava_stopped" +///Chasms will be safe to cross while they've this trait. +#define TRAIT_CHASM_STOPPED "chasm_stopped" +///Turf slowdown will be ignored when this trait is added to a turf. +#define TRAIT_TURF_IGNORE_SLOWDOWN "turf_ignore_slowdown" +///Mobs won't slip on a wet turf while it has this trait +#define TRAIT_TURF_IGNORE_SLIPPERY "turf_ignore_slippery" + /// Mobs with this trait can't send the mining shuttle console when used outside the station itself #define TRAIT_FORBID_MINING_SHUTTLE_CONSOLE_OUTSIDE_STATION "forbid_mining_shuttle_console_outside_station" @@ -818,6 +827,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait applied to turfs when an atmos holosign is placed on them. It will stop firedoors from closing. #define TRAIT_FIREDOOR_STOP "firedoor_stop" +///Trait applied to turf blocked by a containment field +#define TRAIT_CONTAINMENT_FIELD "containment_field" + /// Trait applied when the MMI component is added to an [/obj/item/integrated_circuit] #define TRAIT_COMPONENT_MMI "component_mmi" diff --git a/code/__DEFINES/~monkestation/access.dm b/code/__DEFINES/~monkestation/access.dm index 432c65e208e8..49f1c04f9401 100644 --- a/code/__DEFINES/~monkestation/access.dm +++ b/code/__DEFINES/~monkestation/access.dm @@ -1 +1,6 @@ +/// Access to clockwork cult stuff. + //Special, for anything that's basically internal #define ACCESS_CLOCKCULT "clockcult" + +/// Access to permabrig. [ACCESS_BRIG] also grants permabrig access, this is just for ONLY permabrig accesss, for security assistants. +#define ACCESS_PERMABRIG "permabrig" diff --git a/code/__DEFINES/~monkestation/antagonists.dm b/code/__DEFINES/~monkestation/antagonists.dm index b42eb8c6d574..81040552ec45 100644 --- a/code/__DEFINES/~monkestation/antagonists.dm +++ b/code/__DEFINES/~monkestation/antagonists.dm @@ -1,3 +1,8 @@ +// Monster Hunter stuff +#define upgraded_val(x,y) ( CEILING((x * (1.07 ** y)), 1) ) +#define CALIBER_BLOODSILVER "bloodsilver" +#define WEAPON_UPGRADE "weapon_upgrade" + /// List of areas blacklisted from area based traitor objectives #define TRAITOR_OBJECTIVE_BLACKLISTED_AREAS list(/area/station/engineering/hallway, \ /area/station/engineering/lobby, \ diff --git a/code/__DEFINES/~monkestation/atom_hud.dm b/code/__DEFINES/~monkestation/atom_hud.dm new file mode 100644 index 000000000000..6b14bf0eee9e --- /dev/null +++ b/code/__DEFINES/~monkestation/atom_hud.dm @@ -0,0 +1 @@ +#define SECHUD_SECURITY_ASSISTANT "hudsecass" diff --git a/code/__DEFINES/~monkestation/jobs.dm b/code/__DEFINES/~monkestation/jobs.dm new file mode 100644 index 000000000000..2a2c5ae5e3a4 --- /dev/null +++ b/code/__DEFINES/~monkestation/jobs.dm @@ -0,0 +1 @@ +#define JOB_SECURITY_ASSISTANT "Security Assistant" diff --git a/code/__HELPERS/~monkestation-helpers/antags.dm b/code/__HELPERS/~monkestation-helpers/antags.dm new file mode 100644 index 000000000000..02dde8b9646c --- /dev/null +++ b/code/__HELPERS/~monkestation-helpers/antags.dm @@ -0,0 +1,25 @@ +/// List of antagonists that can be considered prey by monster hunters. +GLOBAL_LIST_INIT(monster_hunter_prey_antags, typecacheof(list( + /datum/antagonist/bloodsucker, + /datum/antagonist/changeling, + /datum/antagonist/heretic +))) + +/proc/is_monster_hunter_prey(datum/mind/victim) + . = FALSE + if(isliving(victim)) + var/mob/living/living_victim = victim + victim = living_victim.mind + if(!istype(victim) || QDELING(victim)) + return FALSE + for(var/datum/antagonist/antag as anything in victim.antag_datums) + if(is_type_in_typecache(antag, GLOB.monster_hunter_prey_antags)) + return TRUE + +/proc/get_all_monster_hunter_prey(include_dead = FALSE) + . = list() + for(var/datum/antagonist/monster as anything in GLOB.antagonists) + if(QDELETED(monster?.owner?.current) || (!include_dead && monster.owner.current.stat == DEAD)) + continue + if(is_type_in_typecache(monster, GLOB.monster_hunter_prey_antags)) + . += monster.owner diff --git a/code/controllers/subsystem/id_access.dm b/code/controllers/subsystem/id_access.dm index c7c630032c22..1b9ec128136c 100644 --- a/code/controllers/subsystem/id_access.dm +++ b/code/controllers/subsystem/id_access.dm @@ -323,6 +323,7 @@ SUBSYSTEM_DEF(id_access) desc_by_access["[ACCESS_CENT_CAPTAIN]"] = "Code Gold" desc_by_access["[ACCESS_CENT_BAR]"] = "Code Scotch" desc_by_access["[ACCESS_BIT_DEN]"] = "Bitrunner Den" + desc_by_access["[ACCESS_PERMABRIG]"] = "Permabrig" // monkestation edit: add permabrig-only access /** * Returns the access bitflags associated with any given access level. diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index 6cee0fb6ca95..12dff2b6aa9a 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -8,38 +8,38 @@ /// List of refs to falling objects -> how many levels deep we've fallen var/static/list/falling_atoms = list() var/static/list/forbidden_types = typecacheof(list( + /obj/singularity, + /obj/energy_ball, + /obj/narsie, /obj/docking_port, + /obj/structure/lattice, + /obj/structure/stone_tile, + /obj/projectile, + /obj/effect/projectile, + /obj/effect/portal, /obj/effect/abstract, - /obj/effect/abstract/liquid_turf, //monkestation edit - /obj/effect/collapse, - /obj/effect/constructing_effect, - /obj/effect/dummy/phased_mob, - /obj/effect/ebeam, - /obj/effect/fishing_lure, /obj/effect/hotspot, /obj/effect/landmark, + /obj/effect/temp_visual, /obj/effect/light_emitter/tendril, - /obj/effect/mapping_helpers, + /obj/effect/collapse, /obj/effect/particle_effect/ion_trails, - /obj/effect/portal, - /obj/effect/projectile, - /obj/effect/spectre_of_resurrection, - /obj/effect/temp_visual, + /obj/effect/dummy/phased_mob, + /obj/effect/mapping_helpers, /obj/effect/wisp, - /obj/energy_ball, - /obj/narsie, - /obj/projectile, - /obj/singularity, - /obj/structure/lattice, - /obj/structure/stone_tile, + /obj/effect/ebeam, + /obj/effect/fishing_lure, )) /datum/component/chasm/Initialize(turf/target, mapload) if(!isturf(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(Entered)) + RegisterSignal(parent, SIGNAL_ADDTRAIT(TRAIT_CHASM_STOPPED), PROC_REF(on_chasm_stopped)) + RegisterSignal(parent, SIGNAL_REMOVETRAIT(TRAIT_CHASM_STOPPED), PROC_REF(on_chasm_no_longer_stopped)) target_turf = target - START_PROCESSING(SSobj, src) // process on create, in case stuff is still there + RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_ENTERED, PROC_REF(entered)) + RegisterSignal(parent, COMSIG_ATOM_ABSTRACT_EXITED, PROC_REF(exited)) + RegisterSignal(parent, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(initialized_on)) //allow catwalks to give the turf the CHASM_STOPPED trait before dropping stuff when the turf is changed. //otherwise don't do anything because turfs and areas are initialized before movables. if(!mapload) @@ -47,50 +47,60 @@ parent.AddElement(/datum/element/lazy_fishing_spot, /datum/fish_source/chasm) /datum/component/chasm/UnregisterFromParent() - STOP_PROCESSING(SSobj, src) storage = null -/datum/component/chasm/proc/Entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) +/datum/component/chasm/proc/entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER + drop_stuff() - START_PROCESSING(SSobj, src) - drop_stuff(arrived) - -/datum/component/chasm/process() - if (!drop_stuff()) - STOP_PROCESSING(SSobj, src) - -/datum/component/chasm/proc/is_safe() - //if anything matching this typecache is found in the chasm, we don't drop things - var/static/list/chasm_safeties_typecache = typecacheof(list(/obj/structure/lattice, /obj/structure/lattice/catwalk, /obj/structure/stone_tile)) +/datum/component/chasm/proc/exited(datum/source, atom/movable/exited) + SIGNAL_HANDLER + UnregisterSignal(exited, list(COMSIG_MOVETYPE_FLAG_DISABLED, COMSIG_LIVING_SET_BUCKLED, COMSIG_MOVABLE_THROW_LANDED)) - var/atom/parent = src.parent - var/list/found_safeties = typecache_filter_list(parent.contents, chasm_safeties_typecache) - for(var/obj/structure/stone_tile/S in found_safeties) - if(S.fallen) - LAZYREMOVE(found_safeties, S) - return LAZYLEN(found_safeties) +/datum/component/chasm/proc/initialized_on(datum/source, atom/movable/movable, mapload) + SIGNAL_HANDLER + drop_stuff(movable) -/datum/component/chasm/proc/drop_stuff(dropped_thing) - if (is_safe()) - return FALSE +/datum/component/chasm/proc/on_chasm_stopped(datum/source) + SIGNAL_HANDLER + UnregisterSignal(source, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_EXITED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON)) + for(var/atom/movable/movable as anything in source) + UnregisterSignal(movable, list(COMSIG_MOVETYPE_FLAG_DISABLED, COMSIG_LIVING_SET_BUCKLED, COMSIG_MOVABLE_THROW_LANDED)) - var/atom/parent = src.parent - var/to_check = dropped_thing ? list(dropped_thing) : parent.contents - for (var/thing in to_check) - if (droppable(thing)) - . = TRUE - INVOKE_ASYNC(src, PROC_REF(drop), thing) +/datum/component/chasm/proc/on_chasm_no_longer_stopped(datum/source) + SIGNAL_HANDLER + RegisterSignal(parent, COMSIG_ATOM_ENTERED, PROC_REF(entered)) + RegisterSignal(parent, COMSIG_ATOM_EXITED, PROC_REF(exited)) + RegisterSignal(parent, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(initialized_on)) + drop_stuff() + +#define CHASM_NOT_DROPPING 0 +#define CHASM_DROPPING 1 +///Doesn't drop the movable, but registers a few signals to try again if the conditions change. +#define CHASM_REGISTER_SIGNALS 2 + +/datum/component/chasm/proc/drop_stuff(atom/movable/dropped_thing) + if(HAS_TRAIT(parent, TRAIT_CHASM_STOPPED)) + return + var/atom/atom_parent = parent + var/to_check = dropped_thing ? list(dropped_thing) : atom_parent.contents + for (var/atom/movable/thing as anything in to_check) + var/dropping = droppable(thing) + switch(dropping) + if(CHASM_DROPPING) + INVOKE_ASYNC(src, PROC_REF(drop), thing) + if(CHASM_REGISTER_SIGNALS) + RegisterSignals(thing, list(COMSIG_MOVETYPE_FLAG_DISABLED, COMSIG_LIVING_SET_BUCKLED, COMSIG_MOVABLE_THROW_LANDED), PROC_REF(drop_stuff), TRUE) /datum/component/chasm/proc/droppable(atom/movable/dropped_thing) var/datum/weakref/falling_ref = WEAKREF(dropped_thing) // avoid an infinite loop, but allow falling a large distance if(falling_atoms[falling_ref] && falling_atoms[falling_ref] > 30) - return FALSE - if(!isliving(dropped_thing) && !isobj(dropped_thing)) - return FALSE - if(is_type_in_typecache(dropped_thing, forbidden_types) || dropped_thing.throwing || (dropped_thing.movement_type & (FLOATING|FLYING))) - return FALSE + return CHASM_NOT_DROPPING + if(is_type_in_typecache(dropped_thing, forbidden_types) || (!isliving(dropped_thing) && !isobj(dropped_thing))) + return CHASM_NOT_DROPPING + if(dropped_thing.throwing || (dropped_thing.movement_type & (FLOATING|FLYING))) + return CHASM_REGISTER_SIGNALS //Flies right over the chasm if(ismob(dropped_thing)) @@ -98,7 +108,7 @@ if(M.buckled) //middle statement to prevent infinite loops just in case! var/mob/buckled_to = M.buckled if((!ismob(M.buckled) || (buckled_to.buckled != M)) && !droppable(M.buckled)) - return FALSE + return CHASM_REGISTER_SIGNALS if(ishuman(dropped_thing)) var/mob/living/carbon/human/victim = dropped_thing if(istype(victim.belt, /obj/item/wormhole_jaunter)) @@ -107,8 +117,12 @@ var/fall_into_chasm = jaunter.chasm_react(victim) if(!fall_into_chasm) chasm.visible_message(span_boldwarning("[victim] falls into the [chasm]!")) //To freak out any bystanders - return fall_into_chasm - return TRUE + return fall_into_chasm ? CHASM_DROPPING : CHASM_NOT_DROPPING + return CHASM_DROPPING + +#undef CHASM_NOT_DROPPING +#undef CHASM_DROPPING +#undef CHASM_REGISTER_SIGNALS /datum/component/chasm/proc/drop(atom/movable/dropped_thing) var/datum/weakref/falling_ref = WEAKREF(dropped_thing) @@ -124,6 +138,10 @@ return // We're already handling this if(below_turf) + if(HAS_TRAIT(dropped_thing, TRAIT_CHASM_DESTROYED)) + qdel(dropped_thing) + return + // send to the turf below dropped_thing.visible_message(span_boldwarning("[dropped_thing] falls into [parent]!"), span_userdanger("[fall_message]")) below_turf.visible_message(span_boldwarning("[dropped_thing] falls from above!")) @@ -159,6 +177,10 @@ if(!dropped_thing || QDELETED(dropped_thing)) return + if(HAS_TRAIT(dropped_thing, TRAIT_CHASM_DESTROYED)) + qdel(dropped_thing) + return + if(!storage) storage = (locate() in parent) || new(parent) diff --git a/code/datums/components/singularity.dm b/code/datums/components/singularity.dm index 233cfbdd1864..eb8a454ef29e 100644 --- a/code/datums/components/singularity.dm +++ b/code/datums/components/singularity.dm @@ -360,8 +360,9 @@ target = potentially_closer //if we lost that target get a new one if(!target || QDELETED(target)) - target = find_new_target() - foreboding_nosebleed(target) + var/mob/living/new_target = find_new_target() + new_target?.ominous_nosebleed() + target = new_target return ..() ///Searches the living list for the closest target, and begins chasing them down. @@ -380,23 +381,6 @@ closest_target = target return closest_target -/// gives a little fluff warning that someone is being hunted. -/datum/component/singularity/bloodthirsty/proc/foreboding_nosebleed(mob/living/target) - if(!iscarbon(target)) - to_chat(target, span_warning("You feel a bit nauseous for just a moment.")) - return - var/mob/living/carbon/carbon_target = target - var/obj/item/bodypart/head = carbon_target.get_bodypart(BODY_ZONE_HEAD) - var/has_no_blood = HAS_TRAIT(carbon_target, TRAIT_NOBLOOD) - if(head) - if(has_no_blood) - to_chat(carbon_target, span_notice("You get a headache.")) - return - head.adjustBleedStacks(5) - carbon_target.visible_message(span_notice("[carbon_target] gets a nosebleed."), span_warning("You get a nosebleed.")) - return - to_chat(target, span_warning("You feel a bit nauseous for just a moment.")) - #undef CHANCE_TO_MOVE_TO_TARGET #undef CHANCE_TO_MOVE_TO_TARGET_BLOODTHIRSTY #undef CHANCE_TO_CHANGE_TARGET_BLOODTHIRSTY diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index d552f1a2f816..7d809f321b48 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -95,6 +95,10 @@ SIGNAL_HANDLER if(!isliving(arrived)) return + if(lube_flags & SLIPPERY_TURF) + var/turf/turf = get_turf(source) + if(HAS_TRAIT(turf, TRAIT_TURF_IGNORE_SLIPPERY)) + return var/mob/living/victim = arrived if(!(victim.movement_type & (FLYING | FLOATING)) && victim.slip(knockdown_time, parent, lube_flags, paralyze_time, force_drop_items) && callback) callback.Invoke(victim) diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 9c795fb8a181..0b3b92fd2e3c 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -75,23 +75,23 @@ /datum/component/wet_floor/proc/update_flags() var/intensity - lube_flags = NONE + lube_flags = SLIPPERY_TURF switch(highest_strength) if(TURF_WET_WATER) intensity = 60 - lube_flags = NO_SLIP_WHEN_WALKING + lube_flags |= NO_SLIP_WHEN_WALKING if(TURF_WET_LUBE) intensity = 80 - lube_flags = SLIDE | GALOSHES_DONT_HELP + lube_flags |= SLIDE | GALOSHES_DONT_HELP if(TURF_WET_ICE) intensity = 120 - lube_flags = SLIDE | GALOSHES_DONT_HELP + lube_flags |= SLIDE | GALOSHES_DONT_HELP if(TURF_WET_PERMAFROST) intensity = 120 - lube_flags = SLIDE_ICE | GALOSHES_DONT_HELP + lube_flags |= SLIDE_ICE | GALOSHES_DONT_HELP if(TURF_WET_SUPERLUBE) intensity = 120 - lube_flags = SLIDE | GALOSHES_DONT_HELP | SLIP_WHEN_CRAWLING + lube_flags |= SLIDE | GALOSHES_DONT_HELP | SLIP_WHEN_CRAWLING else qdel(parent.GetComponent(/datum/component/slippery)) return diff --git a/code/datums/elements/give_turf_traits.dm b/code/datums/elements/give_turf_traits.dm new file mode 100644 index 000000000000..e374b16d63cf --- /dev/null +++ b/code/datums/elements/give_turf_traits.dm @@ -0,0 +1,81 @@ +///A bespoke element that adds a set of traits to the turf while occupied by at least one attached movabled. +/datum/element/give_turf_traits + element_flags = ELEMENT_DETACH_ON_HOST_DESTROY|ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///A list of traits that are added to the turf while occupied. + var/list/traits + ///The list of occupied turfs: Assoc value is a list of movables with this element that are occupying the turf. + var/list/occupied_turfs = list() + +/datum/element/give_turf_traits/Attach(atom/movable/target, list/traits) + . = ..() + if(!istype(target)) + return ELEMENT_INCOMPATIBLE + + src.traits = traits + + RegisterSignal(target, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + if(isturf(target.loc)) + add_to_occupied_turfs(target.loc, target) + +/datum/element/give_turf_traits/Detach(atom/movable/source) + UnregisterSignal(source, COMSIG_MOVABLE_MOVED) + if(isturf(source.loc)) + remove_from_occupied_turfs(source.loc, source) + return ..() + +///Removes the trait from the old turf and adds it to the new one. +/datum/element/give_turf_traits/proc/on_moved(atom/movable/source, atom/old_loc) + SIGNAL_HANDLER + if(isturf(old_loc)) + remove_from_occupied_turfs(old_loc, source) + + if(isturf(source.loc)) + add_to_occupied_turfs(source.loc, source) + +/** + * Registers the turf signals if it was previously unoccupied and adds it to the list of occupied turfs. + * Otherwise, it just adds the movable to the assoc value of lists occupying the turf. + */ +/datum/element/give_turf_traits/proc/add_to_occupied_turfs(turf/location, atom/movable/source) + if(occupied_turfs[location]) + occupied_turfs[location] += source + return + + occupied_turfs[location] = list(source) + RegisterSignal(location, COMSIG_TURF_CHANGE, PROC_REF(pre_change_turf)) + + var/update_movespeeds = (TRAIT_TURF_IGNORE_SLOWDOWN in traits) && !HAS_TRAIT(location, TRAIT_TURF_IGNORE_SLOWDOWN) + for(var/trait in traits) + ADD_TRAIT(location, trait, REF(src)) + if(update_movespeeds) + for(var/mob/living/living in location) + living.update_turf_movespeed() + +/** + * Unregisters the turf signals if it's no longer unoccupied and removes it from the list of occupied turfs. + * Otherwise, it just removes the movable from the assoc value of lists occupying the turf. + */ +/datum/element/give_turf_traits/proc/remove_from_occupied_turfs(turf/location, atom/movable/source) + LAZYREMOVE(occupied_turfs[location], source) + if(occupied_turfs[location]) + return + + occupied_turfs -= location + UnregisterSignal(location, COMSIG_TURF_CHANGE) + + for(var/trait in traits) + REMOVE_TRAIT(location, trait, REF(src)) + + if((TRAIT_TURF_IGNORE_SLOWDOWN in traits) && !HAS_TRAIT(location, TRAIT_TURF_IGNORE_SLOWDOWN)) + for(var/mob/living/living in location) + living.update_turf_movespeed() + +///Signals and components are carried over when the turf is changed, so they've to be readded post-change. +/datum/element/give_turf_traits/proc/pre_change_turf(turf/changed, path, list/new_baseturfs, flags, list/post_change_callbacks) + SIGNAL_HANDLER + post_change_callbacks += CALLBACK(src, PROC_REF(reoccupy_turf)) + +/datum/element/give_turf_traits/proc/reoccupy_turf(turf/changed) + for(var/trait in traits) + ADD_TRAIT(changed, trait, REF(src)) diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index abc2135370b5..2f86ec19841a 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -593,6 +593,7 @@ ACCESS_SERVICE, ACCESS_SHIPPING, ACCESS_WEAPONS, + ACCESS_PERMABRIG, // monkestation edit: add permabrig-only access ) minimal_wildcard_access = list( ACCESS_HOS, @@ -939,6 +940,7 @@ ACCESS_MINERAL_STOREROOM, ACCESS_SECURITY, ACCESS_WEAPONS, + ACCESS_PERMABRIG, // monkestation edit: add permabrig-only access ) extra_access = list( ACCESS_DETECTIVE, @@ -1151,6 +1153,7 @@ ACCESS_MINERAL_STOREROOM, ACCESS_SECURITY, ACCESS_WEAPONS, + ACCESS_PERMABRIG, // monkestation edit: add permabrig-only access ) // See /datum/job/warden/get_access() extra_access = list( ACCESS_DETECTIVE, diff --git a/code/datums/proximity_monitor/proximity_monitor.dm b/code/datums/proximity_monitor/proximity_monitor.dm index c7c8165a431a..fc28212202d9 100644 --- a/code/datums/proximity_monitor/proximity_monitor.dm +++ b/code/datums/proximity_monitor/proximity_monitor.dm @@ -11,7 +11,7 @@ var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), COMSIG_ATOM_EXITED = PROC_REF(on_uncrossed), - COMSIG_ATOM_INITIALIZED_ON = PROC_REF(on_entered), + COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON = PROC_REF(on_entered), ) /datum/proximity_monitor/New(atom/_host, range, _ignore_if_not_on_turf = TRUE) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 1475c8cdc908..601b547a45c3 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -250,9 +250,6 @@ stack_trace("Warning: [src]([type]) initialized multiple times!") flags_1 |= INITIALIZED_1 - if(loc) - SEND_SIGNAL(loc, COMSIG_ATOM_INITIALIZED_ON, src) /// Sends a signal that the new atom `src`, has been created at `loc` - SET_PLANE_IMPLICIT(src, plane) if(greyscale_config && greyscale_colors) //we'll check again at item/init for inhand/belt/worn configs. diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 55ef35401204..3b066c607479 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -55,10 +55,10 @@ /datum/atom_hud/data/diagnostic /datum/atom_hud/data/diagnostic/basic - hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_CAMERA_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD, NANITE_HUD) + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_CAMERA_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD) /datum/atom_hud/data/diagnostic/advanced - hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_CAMERA_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD, DIAG_PATH_HUD, NANITE_HUD) + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_CAMERA_HUD, DIAG_AIRLOCK_HUD, DIAG_LAUNCHPAD_HUD, DIAG_PATH_HUD, NANITE_HUD, DIAG_NANITE_FULL_HUD) /datum/atom_hud/data/bot_path // This hud exists so the bot can see itself, that's all diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm index 040a2397bfab..dd6752a035e8 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_latejoin.dm @@ -65,6 +65,7 @@ JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( @@ -104,6 +105,7 @@ JOB_QUARTERMASTER, JOB_RESEARCH_DIRECTOR, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) enemy_roles = list( @@ -201,6 +203,7 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index a5773802eb29..0138d8e5ba3c 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -225,6 +225,7 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( @@ -437,6 +438,7 @@ JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, + JOB_SECURITY_ASSISTANT, ) restricted_roles = list( JOB_AI, diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 77be4a196f7d..dccdd79fc2ef 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -113,6 +113,7 @@ JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, + JOB_SECURITY_ASSISTANT, ) restricted_roles = list( JOB_AI, @@ -170,6 +171,7 @@ JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, + JOB_SECURITY_ASSISTANT, ) restricted_roles = list( JOB_AI, @@ -226,6 +228,7 @@ JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, + JOB_SECURITY_ASSISTANT, ) restricted_roles = list( JOB_AI, diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index e4419226aea2..4abc323961de 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -105,6 +105,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_SECURITY_OFFICER_SCIENCE = 15, JOB_SECURITY_OFFICER_SUPPLY = 16, JOB_DETECTIVE = 17, + JOB_SECURITY_ASSISTANT = 18, // monkestation edit: add security assistants // 20-29: Medbay JOB_CHIEF_MEDICAL_OFFICER = 20, JOB_CHEMIST = 21, diff --git a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm index 2d4813a55f40..b53100c4acf7 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_mining.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_mining.dm @@ -17,6 +17,10 @@ item_path = /obj/item/fulton_core cost_per_order = 400 +/datum/orderable_item/mining/ashsuit //MONKE EDIT + item_path = /obj/item/clothing/suit/hooded/ashsuit + cost_per_order = 100 + /datum/orderable_item/mining/mining_modsuit item_path = /obj/item/mod/control/pre_equipped/mining desc = "A mining-themed MODsuit that works best when in a mining environment." diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index d39c4fcd7b17..ec266077c115 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -1,3 +1,6 @@ +#define ACTIVE_SETUPFIELDS 1 +#define ACTIVE_HASFIELDS 2 + /obj/structure/emergency_shield name = "emergency energy shield" desc = "An energy shield used to contain hull breaches." @@ -261,12 +264,23 @@ balloon_alert(user, "access controller shorted") return TRUE +/// Turn the machine on with side effects +/obj/machinery/power/shieldwallgen/proc/activate() + active = ACTIVE_SETUPFIELDS + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + +/// Turn the machine off with side effects +/obj/machinery/power/shieldwallgen/proc/deactivate() + active = FALSE + for(var/d in GLOB.cardinals) + cleanup_field(d) + update_appearance() + RemoveElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) + /obj/machinery/shieldgen/update_icon_state() icon_state = "shield[active ? "on" : "off"][(machine_stat & BROKEN) ? "br" : null]" return ..() -#define ACTIVE_SETUPFIELDS 1 -#define ACTIVE_HASFIELDS 2 /obj/machinery/power/shieldwallgen name = "shield wall generator" desc = "A shield generator." @@ -334,7 +348,7 @@ "If this message is ever seen, something is wrong.", span_hear("You hear heavy droning fade out.")) icon_state = "shield_wall_gen" - active = FALSE + deactivate() log_game("[src] deactivated due to lack of power at [AREACOORD(src)]") for(var/d in GLOB.cardinals) cleanup_field(d) @@ -444,13 +458,13 @@ user.visible_message(span_notice("[user] turned \the [src] off."), \ span_notice("You turn off \the [src]."), \ span_hear("You hear heavy droning fade out.")) - active = FALSE + deactivate() user.log_message("deactivated [src].", LOG_GAME) else user.visible_message(span_notice("[user] turned \the [src] on."), \ span_notice("You turn on \the [src]."), \ span_hear("You hear heavy droning.")) - active = ACTIVE_SETUPFIELDS + activate() user.log_message("activated [src].", LOG_GAME) add_fingerprint(user) @@ -489,6 +503,7 @@ L.investigate_log("has been gibbed by [src].", INVESTIGATE_DEATHS) L.gib() RegisterSignal(src, COMSIG_ATOM_SINGULARITY_TRY_MOVE, PROC_REF(block_singularity)) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/shieldwall/Destroy() gen_primary = null diff --git a/code/game/objects/effects/anomalies/_anomalies.dm b/code/game/objects/effects/anomalies/_anomalies.dm index f130595fc387..531c800cf726 100644 --- a/code/game/objects/effects/anomalies/_anomalies.dm +++ b/code/game/objects/effects/anomalies/_anomalies.dm @@ -23,6 +23,8 @@ var/immortal = FALSE ///Do we stay in one place? var/immobile = FALSE + ///Chance per second that we will move + var/move_chance = ANOMALY_MOVECHANCE /obj/effect/anomaly/Initialize(mapload, new_lifespan, drops_core = TRUE) . = ..() @@ -52,9 +54,8 @@ countdown = new(src) if(countdown_colour) countdown.color = countdown_colour - if(immortal) - return - countdown.start() + if(!immortal) + countdown.start() /obj/effect/anomaly/vv_edit_var(vname, vval) . = ..() @@ -79,8 +80,12 @@ return ..() /obj/effect/anomaly/proc/anomalyEffect(seconds_per_tick) - if(!immobile && SPT_PROB(ANOMALY_MOVECHANCE, seconds_per_tick)) - step(src,pick(GLOB.alldirs)) + if(!immobile && SPT_PROB(move_chance, seconds_per_tick)) + move_anomaly() + +/// Move in a direction +/obj/effect/anomaly/proc/move_anomaly() + step(src, pick(GLOB.alldirs)) /obj/effect/anomaly/proc/detonate() return @@ -93,7 +98,7 @@ new /obj/effect/particle_effect/fluid/smoke/bad(loc) if(drops_core) - aSignal.forceMove(drop_location()) + aSignal?.forceMove(drop_location()) aSignal = null // else, anomaly core gets deleted by qdel(src). diff --git a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm index b4ee3713a25d..e4939c0de360 100644 --- a/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm +++ b/code/game/objects/effects/anomalies/anomalies_bioscrambler.dm @@ -4,6 +4,10 @@ icon_state = "bioscrambler" aSignal = /obj/item/assembly/signaler/anomaly/bioscrambler immortal = TRUE + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSCLOSEDTURF | PASSMACHINE | PASSSTRUCTURE | PASSDOORS + layer = ABOVE_MOB_LAYER + /// Who are we moving towards? + var/datum/weakref/pursuit_target /// Cooldown for every anomaly pulse COOLDOWN_DECLARE(pulse_cooldown) /// How many seconds between each anomaly pulses @@ -11,11 +15,55 @@ /// Range of the anomaly pulse var/range = 5 +/obj/effect/anomaly/bioscrambler/Initialize(mapload, new_lifespan, drops_core) + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/effect/anomaly/bioscrambler/LateInitialize() + pursuit_target = WEAKREF(find_nearest_target()) + /obj/effect/anomaly/bioscrambler/anomalyEffect(seconds_per_tick) . = ..() if(!COOLDOWN_FINISHED(src, pulse_cooldown)) return COOLDOWN_START(src, pulse_cooldown, pulse_delay) - for(var/mob/living/carbon/nearby in range(range, src)) + for(var/mob/living/carbon/nearby in hearers(range, src)) nearby.bioscramble(name) + +/obj/effect/anomaly/bioscrambler/move_anomaly() + var/mob/living/current_target = pursuit_target?.resolve() + if (QDELETED(current_target)) + pursuit_target = null + if (isnull(pursuit_target) || prob(20)) + var/mob/living/new_target = find_nearest_target() + if (isnull(new_target)) + pursuit_target = null + else if (new_target != current_target) + current_target = new_target + pursuit_target = WEAKREF(new_target) + new_target.ominous_nosebleed() + if (isnull(pursuit_target)) + return + var/turf/step_turf = get_step(src, get_dir(src, current_target)) + if (!HAS_TRAIT(step_turf, TRAIT_CONTAINMENT_FIELD)) + Move(step_turf) + +/// Returns the closest conscious carbon on our z level or null if there somehow isn't one +/obj/effect/anomaly/bioscrambler/proc/find_nearest_target() + var/closest_distance = INFINITY + var/mob/living/carbon/closest_target = null + for(var/mob/living/carbon/target in GLOB.player_list) + if (target.z != z) + continue + if (target.status_effects & GODMODE) + continue + if (target.stat >= UNCONSCIOUS) + continue // Don't just haunt a corpse + var/distance_from_target = get_dist(src, target) + if(distance_from_target >= closest_distance) + continue + closest_distance = distance_from_target + closest_target = target + + return closest_target diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index daa09b54d914..6f59c86607b9 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -162,7 +162,7 @@ Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare.

Microwave:

- Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...). + Use it to cook or boil food ingredients (meats, doughs, egg, donkpocket, etc...). It can cook multiple items at once.

Processor:

@@ -183,7 +183,7 @@ Popcorn: Microwave corn.
Meat Steak: Microwave meat.
Meat Pie: 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets
- Boiled Spagetti: Microwave spaghetti.
+ Boiled Spaghetti:Raw Spaghetti + 50u water at 450+K
Donuts: 1u sugar + 1 pastry base
Fries: Process potato. @@ -191,7 +191,7 @@ You can put your meals on your kitchen counter or load them in the snack vending machines. - "} + "}// Monkestation Edit: Removed spaghetti from microwave recipes /obj/item/book/manual/nuclear name = "Fission Mailed: Nuclear Sabotage 101" @@ -293,14 +293,14 @@ icon_state ="bookEngineering" starting_author = "Engineering Encyclopedia" starting_title = "Station Repairs and Construction" - page_link = "Guide_to_construction" + page_link = "en/jobs/engineering/guide-to-construction" /obj/item/book/manual/wiki/engineering_guide name = "Engineering Textbook" icon_state ="bookEngineering2" starting_author = "Engineering Encyclopedia" starting_title = "Engineering Textbook" - page_link = "Guide_to_engineering" + page_link = "en/jobs/engineering/station-engineer" /obj/item/book/manual/wiki/security_space_law name = "Space Law" @@ -308,7 +308,7 @@ icon_state = "bookSpaceLaw" starting_author = "Nanotrasen" starting_title = "Space Law" - page_link = "space-laws" + page_link = "en/space-laws" /obj/item/book/manual/wiki/security_space_law/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] pretends to read \the [src] intently... then promptly dies of laughter!")) diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 1d4ec997aae0..42dadf19ff59 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -16,6 +16,13 @@ canSmoothWith = SMOOTH_GROUP_LATTICE + SMOOTH_GROUP_WALLS + SMOOTH_GROUP_OPEN_FLOOR var/number_of_mats = 1 var/build_material = /obj/item/stack/rods + var/list/give_turf_traits = list(TRAIT_CHASM_STOPPED) + +/obj/structure/lattice/Initialize(mapload) + . = ..() + if(length(give_turf_traits)) + give_turf_traits = string_list(give_turf_traits) + AddElement(/datum/element/give_turf_traits, give_turf_traits) /datum/armor/structure_lattice @@ -93,6 +100,7 @@ smoothing_groups = SMOOTH_GROUP_CATWALK + SMOOTH_GROUP_LATTICE + SMOOTH_GROUP_OPEN_FLOOR canSmoothWith = SMOOTH_GROUP_CATWALK obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP + give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN, TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED) /obj/structure/lattice/catwalk/Initialize(mapload) . = ..() @@ -147,6 +155,7 @@ canSmoothWith = SMOOTH_GROUP_LATTICE obj_flags = CAN_BE_HIT | BLOCK_Z_OUT_DOWN | BLOCK_Z_IN_UP resistance_flags = FIRE_PROOF | LAVA_PROOF + give_turf_traits = list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED) /obj/structure/lattice/lava/deconstruction_hints(mob/user) return span_notice("The rods look like they could be cut, but the heat treatment will shatter off. There's space for a tile.") diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 576535cf1447..86d9aecf7c84 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -23,6 +23,12 @@ pass_flags_self = PASSTABLE | LETPASSTHROW layer = TABLE_LAYER obj_flags = CAN_BE_HIT | IGNORE_DENSITY + custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) + max_integrity = 100 + integrity_failure = 0.33 + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = SMOOTH_GROUP_TABLES + canSmoothWith = SMOOTH_GROUP_TABLES ///TRUE if the table can be climbed on and have living mobs placed on it normally, FALSE otherwise var/climbable = TRUE var/frame = /obj/structure/table_frame @@ -32,13 +38,7 @@ var/busy = FALSE var/buildstackamount = 1 var/framestackamount = 2 - var/deconstruction_ready = 1 - custom_materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) - max_integrity = 100 - integrity_failure = 0.33 - smoothing_flags = SMOOTH_BITMASK - smoothing_groups = SMOOTH_GROUP_TABLES - canSmoothWith = SMOOTH_GROUP_TABLES + var/deconstruction_ready = TRUE /obj/structure/table/Initialize(mapload, _buildstack) . = ..() @@ -54,6 +54,8 @@ ) AddElement(/datum/element/connect_loc, loc_connections) + var/static/list/give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN, TRAIT_TURF_IGNORE_SLIPPERY) + AddElement(/datum/element/give_turf_traits, give_turf_traits) register_context() /obj/structure/table/add_context(atom/source, list/context, obj/item/held_item, mob/living/user) @@ -598,7 +600,7 @@ icon = 'icons/obj/smooth_structures/reinforced_table.dmi' icon_state = "reinforced_table-0" base_icon_state = "reinforced_table" - deconstruction_ready = 0 + deconstruction_ready = FALSE buildstack = /obj/item/stack/sheet/plasteel max_integrity = 200 integrity_failure = 0.25 diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index 18d859e78b5b..821b65895290 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -222,13 +222,9 @@ return TRUE /turf/open/lava/proc/is_safe() - //if anything matching this typecache is found in the lava, we don't burn things - var/static/list/lava_safeties_typecache = typecacheof(list(/obj/structure/lattice/catwalk, /obj/structure/stone_tile, /obj/structure/lattice/lava)) - var/list/found_safeties = typecache_filter_list(contents, lava_safeties_typecache) - for(var/obj/structure/stone_tile/S in found_safeties) - if(S.fallen) - LAZYREMOVE(found_safeties, S) - return LAZYLEN(found_safeties) + if(HAS_TRAIT(src, TRAIT_LAVA_STOPPED)) + return TRUE + return FALSE ///Generic return value of the can_burn_stuff() proc. Does nothing. #define LAVA_BE_IGNORING 0 diff --git a/code/game/turfs/open/openspace.dm b/code/game/turfs/open/openspace.dm index 2cfdc345ac8c..43add27407be 100644 --- a/code/game/turfs/open/openspace.dm +++ b/code/game/turfs/open/openspace.dm @@ -23,7 +23,7 @@ // I am so sorry /turf/open/openspace/Initialize(mapload) // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker . = ..() - RegisterSignal(src, COMSIG_ATOM_INITIALIZED_ON, PROC_REF(on_atom_created)) + RegisterSignal(src, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, PROC_REF(on_atom_created)) var/area/our_area = loc if(istype(our_area, /area/space)) force_no_gravity = TRUE @@ -34,7 +34,7 @@ AddElement(/datum/element/turf_z_transparency) /turf/open/openspace/ChangeTurf(path, list/new_baseturfs, flags) - UnregisterSignal(src, COMSIG_ATOM_INITIALIZED_ON) + UnregisterSignal(src, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON) return ..() /** @@ -54,15 +54,13 @@ if(movable.set_currently_z_moving(CURRENTLY_Z_FALLING)) zFall(movable, falling_from_move = TRUE) /** - * Drops movables spawned on this turf only after they are successfully initialized. - * so flying mobs, qdeleted movables and things that were moved somewhere else during - * Initialize() won't fall by accident. + * Drops movables spawned on this turf after they are successfully initialized. + * so that spawned movables that should fall to gravity, will fall. */ /turf/open/openspace/proc/on_atom_created(datum/source, atom/created_atom) SIGNAL_HANDLER if(ismovable(created_atom)) - //Drop it only when it's finished initializing, not before. - addtimer(CALLBACK(src, PROC_REF(zfall_if_on_turf), created_atom), 0 SECONDS) + zfall_if_on_turf(created_atom) /turf/open/openspace/proc/zfall_if_on_turf(atom/movable/movable) if(QDELETED(movable) || movable.loc != src) diff --git a/code/modules/antagonists/abductor/machinery/experiment.dm b/code/modules/antagonists/abductor/machinery/experiment.dm index 0989ef25004c..363d1e5cb8a8 100644 --- a/code/modules/antagonists/abductor/machinery/experiment.dm +++ b/code/modules/antagonists/abductor/machinery/experiment.dm @@ -120,7 +120,7 @@ LAZYINITLIST(history) var/mob/living/carbon/human/H = occupant - if(istype(H)) //We shouldn't be processing anything other than humans, and if we do we runtime. + if(!istype(H)) //We shouldn't be processing anything other than humans, and if we do we runtime. return var/datum/antagonist/abductor/user_abductor = user.mind.has_antag_datum(/datum/antagonist/abductor) diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index 7b0331b67007..03ae1d01b2a6 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -190,7 +190,7 @@ /obj/effect/visible_heretic_influence/examine(mob/user) . = ..() - if(IS_HERETIC(user) || !ishuman(user)) + if(IS_HERETIC(user) || !ishuman(user) || IS_MONSTERHUNTER(user)) return var/mob/living/carbon/human/human_user = user diff --git a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm index f36b46e0cc0e..9ee87e2097e7 100644 --- a/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm +++ b/code/modules/antagonists/traitor/objectives/destroy_heirloom.dm @@ -83,6 +83,8 @@ /datum/job/bartender, /datum/job/cook, /datum/job/curator, + // Monkestation edit: security assistants + /datum/job/security_assistant, ) /datum/traitor_objective/destroy_heirloom/rare diff --git a/code/modules/industrial_lift/industrial_lift.dm b/code/modules/industrial_lift/industrial_lift.dm index 7b8efe14f9e6..b495fc21228a 100644 --- a/code/modules/industrial_lift/industrial_lift.dm +++ b/code/modules/industrial_lift/industrial_lift.dm @@ -112,11 +112,11 @@ GLOBAL_LIST_INIT(all_radial_directions, list( /obj/structure/industrial_lift/proc/set_movement_registrations(list/turfs_to_set) for(var/turf/turf_loc as anything in turfs_to_set || locs) RegisterSignal(turf_loc, COMSIG_ATOM_EXITED, PROC_REF(UncrossedRemoveItemFromLift)) - RegisterSignals(turf_loc, list(COMSIG_ATOM_ENTERED,COMSIG_ATOM_INITIALIZED_ON), PROC_REF(AddItemOnLift)) + RegisterSignals(turf_loc, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON), PROC_REF(AddItemOnLift)) ///unset our movement registrations from turfs that no longer contain us (or every loc if turfs_to_unset is unspecified) /obj/structure/industrial_lift/proc/unset_movement_registrations(list/turfs_to_unset) - var/static/list/registrations = list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_EXITED, COMSIG_ATOM_INITIALIZED_ON) + var/static/list/registrations = list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_EXITED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON) for(var/turf/turf_loc as anything in turfs_to_unset || locs) UnregisterSignal(turf_loc, registrations) diff --git a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm index 5a75eb648051..e178a197e0e4 100644 --- a/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/mapfluff/ruins/objects_and_mobs/necropolis_gate.dm @@ -240,10 +240,6 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) /obj/structure/necropolis_arch/singularity_pull() return 0 -#define STABLE 0 //The tile is stable and won't collapse/sink when crossed. -#define COLLAPSE_ON_CROSS 1 //The tile is unstable and will temporary become unusable when crossed. -#define DESTROY_ON_CROSS 2 //The tile is nearly broken and will permanently become unusable when crossed. -#define UNIQUE_EFFECT 3 //The tile has some sort of unique effect when crossed. //stone tiles for boss arenas /obj/structure/stone_tile name = "stone tile" @@ -255,67 +251,17 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF var/tile_key = "pristine_tile" var/tile_random_sprite_max = 24 - var/fall_on_cross = STABLE //If the tile has some sort of effect when crossed - var/fallen = FALSE //If the tile is unusable - var/falling = FALSE //If the tile is falling /obj/structure/stone_tile/Initialize(mapload) . = ..() icon_state = "[tile_key][rand(1, tile_random_sprite_max)]" - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) -/obj/structure/stone_tile/singularity_pull() - return + var/static/list/give_turf_traits + if(!give_turf_traits) + give_turf_traits = string_list(list(TRAIT_LAVA_STOPPED, TRAIT_CHASM_STOPPED)) + AddElement(/datum/element/give_turf_traits, give_turf_traits) -/obj/structure/stone_tile/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(falling || fallen) - return - var/turf/T = get_turf(src) - if(!islava(T) && !ischasm(T)) //nothing to sink or fall into - return - var/obj/item/I - if(isitem(AM)) - I = AM - var/mob/living/L - if(isliving(AM)) - L = AM - switch(fall_on_cross) - if(COLLAPSE_ON_CROSS, DESTROY_ON_CROSS) - if((I && I.w_class >= WEIGHT_CLASS_BULKY) || (L && !(L.movement_type & FLYING) && L.mob_size >= MOB_SIZE_HUMAN)) //too heavy! too big! aaah! - INVOKE_ASYNC(src, PROC_REF(collapse)) - if(UNIQUE_EFFECT) - crossed_effect(AM) - -/obj/structure/stone_tile/proc/collapse() - falling = TRUE - var/break_that_sucker = fall_on_cross == DESTROY_ON_CROSS - playsound(src, 'sound/effects/pressureplate.ogg', 50, TRUE) - Shake(-1, -1, 25) - sleep(0.5 SECONDS) - if(break_that_sucker) - playsound(src, 'sound/effects/break_stone.ogg', 50, TRUE) - else - playsound(src, 'sound/mecha/mechmove04.ogg', 50, TRUE) - animate(src, alpha = 0, pixel_y = pixel_y - 3, time = 5) - fallen = TRUE - if(break_that_sucker) - QDEL_IN(src, 10) - else - addtimer(CALLBACK(src, PROC_REF(rebuild)), 55) - -/obj/structure/stone_tile/proc/rebuild() - pixel_x = initial(pixel_x) - pixel_y = initial(pixel_y) - 5 - animate(src, alpha = initial(alpha), pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 30) - sleep(3 SECONDS) - falling = FALSE - fallen = FALSE - -/obj/structure/stone_tile/proc/crossed_effect(atom/movable/AM) +/obj/structure/stone_tile/singularity_pull() return /obj/structure/stone_tile/block @@ -411,8 +357,3 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) name = "burnt stone surrounding tile" icon_state = "burnt_surrounding_tile1" tile_key = "burnt_surrounding_tile" - -#undef STABLE -#undef COLLAPSE_ON_CROSS -#undef DESTROY_ON_CROSS -#undef UNIQUE_EFFECT diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index fe15d628fd2b..0681824bd2f4 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -24,12 +24,12 @@ /obj/machinery/mineral/proc/register_input_turf() input_turf = get_step(src, input_dir) if(input_turf) // make sure there is actually a turf - RegisterSignals(input_turf, list(COMSIG_ATOM_INITIALIZED_ON, COMSIG_ATOM_ENTERED), PROC_REF(pickup_item)) + RegisterSignals(input_turf, list(COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_ENTERED), PROC_REF(pickup_item)) /// Unregisters signals that are registered the machine's input turf, if it has one. /obj/machinery/mineral/proc/unregister_input_turf() if(input_turf) - UnregisterSignal(input_turf, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_INITIALIZED_ON)) + UnregisterSignal(input_turf, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON)) /obj/machinery/mineral/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) . = ..() diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index 0b1546ccf93d..048f9a1b4870 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -44,7 +44,7 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) AddElement(/datum/element/ai_retaliate) AddComponent(/datum/component/tree_climber) - if(!mapload || isnull(GLOB.cargo_sloth) || !is_station_level(z)) + if(!mapload || !isnull(GLOB.cargo_sloth) || !is_station_level(z)) return // If someone adds non-cargo sloths to maps we'll have a problem but we're fine for now diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index ca309694b6ad..ad10167adec1 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1355,3 +1355,13 @@ our_splatter.blood_dna_info = get_blood_dna_list() var/turf/targ = get_ranged_target_turf(src, splatter_direction, splatter_strength) our_splatter.fly_towards(targ, splatter_strength) + +/mob/living/carbon/ominous_nosebleed() + var/obj/item/bodypart/head = get_bodypart(BODY_ZONE_HEAD) + if(isnull(head)) + return ..() + if(HAS_TRAIT(src, TRAIT_NOBLOOD)) + to_chat(src, span_notice("You get a headache.")) + return + head.adjustBleedStacks(5) + visible_message(span_notice("[src] gets a nosebleed."), span_warning("You get a nosebleed.")) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index d9b7d8caf4f5..af083b07dd76 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -837,14 +837,14 @@ /mob/living/carbon/proc/init_bioscrambler_lists() var/list/body_parts = typesof(/obj/item/bodypart/chest) + typesof(/obj/item/bodypart/head) + subtypesof(/obj/item/bodypart/arm) + subtypesof(/obj/item/bodypart/leg) for (var/obj/item/bodypart/part as anything in body_parts) - if (!is_type_in_typecache(part, GLOB.bioscrambler_parts_blacklist) && !(initial(part.bodytype) & BODYTYPE_ROBOTIC)) + if(!is_type_in_typecache(part, GLOB.bioscrambler_parts_blacklist) && !(part::bodytype & BODYTYPE_ROBOTIC) && !(part::limb_id in GLOB.bioscrambler_limb_id_blacklist)) continue body_parts -= part GLOB.bioscrambler_valid_parts = body_parts var/list/organs = subtypesof(/obj/item/organ/internal) + subtypesof(/obj/item/organ/external) for (var/obj/item/organ/organ_type as anything in organs) - if (!is_type_in_typecache(organ_type, GLOB.bioscrambler_organs_blacklist) && !(initial(organ_type.organ_flags) & ORGAN_SYNTHETIC)) + if(!is_type_in_typecache(organ_type, GLOB.bioscrambler_organs_blacklist) && !(organ_type::organ_flags & ORGAN_SYNTHETIC) && organ_type::zone != "abstract") continue organs -= organ_type GLOB.bioscrambler_valid_organs = organs diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 8ad2aab931fe..9a6eef2625e3 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2431,6 +2431,10 @@ GLOBAL_LIST_EMPTY(fire_appearances) apply_damage(rand(5,10), BRUTE, BODY_ZONE_CHEST) lattice.deconstruct(FALSE) +/// Prints an ominous message if something bad is going to happen to you +/mob/living/proc/ominous_nosebleed() + to_chat(src, span_warning("You feel a bit nauseous for just a moment.")) + /** * Proc used by different station pets such as Ian and Poly so that some of their data can persist between rounds. * This base definition only contains a trait and comsig to stop memory from being (over)written. diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index d2e87c0502a2..eeb9bceb5d5c 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -83,16 +83,15 @@ if(MOVE_INTENT_SPRINT) add_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/sprint) -/mob/living/proc/update_turf_movespeed(turf/open/T) - if(isopenturf(T) && !is_type_on_turf(T, /obj/structure/lattice/catwalk)) - if(T.slowdown != current_turf_slowdown) - add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown, multiplicative_slowdown = T.slowdown) - current_turf_slowdown = T.slowdown +/mob/living/proc/update_turf_movespeed(turf/open/turf) + if(isopenturf(turf) && !HAS_TRAIT(turf, TRAIT_TURF_IGNORE_SLOWDOWN)) + if(turf.slowdown != current_turf_slowdown) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown, multiplicative_slowdown = turf.slowdown) + current_turf_slowdown = turf.slowdown else if(current_turf_slowdown) remove_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown) current_turf_slowdown = 0 - /mob/living/proc/update_pull_movespeed() SEND_SIGNAL(src, COMSIG_LIVING_UPDATING_PULL_MOVESPEED) diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 2fed6a4ec9c4..b82f0efe7446 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -1,5 +1,7 @@ /datum/emote/silicon - mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot) + // MONKESTATION REMOVAL - Replaced with `/datum/emote/silicon/can_run_emote()`, which is used to + // enable silicon emotes for users with synthetic voice boxes. + //mob_type_allowed_typecache = list(/mob/living/silicon, /mob/living/simple_animal/bot) emote_type = EMOTE_AUDIBLE /datum/emote/silicon/boop diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index cb4304f27bbc..9859b66dc610 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -27,6 +27,7 @@ COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) AddElement(/datum/element/connect_loc, loc_connections) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/containment/Destroy() if(field_gen_1) diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 26c3a9edf398..656a169c5587 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -206,6 +206,7 @@ no power level overlay is currently in the overlays list. air_update_turf(TRUE, FALSE) INVOKE_ASYNC(src, PROC_REF(cleanup)) addtimer(CALLBACK(src, PROC_REF(cool_down)), 5 SECONDS) + RemoveElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/generator/proc/cool_down() if(active || warming_up <= 0) @@ -218,6 +219,7 @@ no power level overlay is currently in the overlays list. /obj/machinery/field/generator/proc/turn_on() active = FG_CHARGING addtimer(CALLBACK(src, PROC_REF(warm_up)), 5 SECONDS) + AddElement(/datum/element/give_turf_traits, string_list(list(TRAIT_CONTAINMENT_FIELD))) /obj/machinery/field/generator/proc/warm_up() if(!active) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 579bf1d1fb26..603dc1ffe091 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -386,16 +386,8 @@ /obj/singularity/proc/can_move(turf/considered_turf) if(!considered_turf) return FALSE - if((locate(/obj/machinery/field/containment) in considered_turf) || (locate(/obj/machinery/shieldwall) in considered_turf)) + if (HAS_TRAIT(considered_turf, TRAIT_CONTAINMENT_FIELD)) return FALSE - else if(locate(/obj/machinery/field/generator) in considered_turf) - var/obj/machinery/field/generator/check_generator = locate(/obj/machinery/field/generator) in considered_turf - if(check_generator?.active) - return FALSE - else if(locate(/obj/machinery/power/shieldwallgen) in considered_turf) - var/obj/machinery/power/shieldwallgen/check_shield = locate(/obj/machinery/power/shieldwallgen) in considered_turf - if(check_shield?.active) - return FALSE return TRUE /obj/singularity/proc/event() diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 5d85c69987dd..945c3d2abaa7 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -209,7 +209,9 @@ Primarily used in reagents/reaction_agents /// Called when this reagent is first added to a mob /datum/reagent/proc/on_mob_add(mob/living/L, amount) SHOULD_CALL_PARENT(TRUE) - overdose_threshold /= max(normalise_creation_purity(), 1) //Maybe??? Seems like it would help pure chems be even better but, if I normalised this to 1, then everything would take a 25% reduction + // MONKESTATION REMOVAL START - Purity is disabled and we shouldn't change the overdose thresholds for things behind people's backs. + // overdose_threshold /= max(normalise_creation_purity(), 1) //Maybe??? Seems like it would help pure chems be even better but, if I normalised this to 1, then everything would take a 25% reduction + // MONKESTATION REMOVAL END if(added_traits) L.add_traits(added_traits, "added:[type]") diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 9ce86ecc29e0..50ffe7799979 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -1273,6 +1273,7 @@ color = "#C1151D" overdose_threshold = 30 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE + metabolized_traits = list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE, TRAIT_CANT_STAMCRIT) /datum/reagent/medicine/changelingadrenaline/on_mob_life(mob/living/carbon/metabolizer, seconds_per_tick, times_fired) ..() @@ -1284,13 +1285,11 @@ return TRUE /datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/affected_mob) - ..() - affected_mob.add_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE, TRAIT_CANT_STAMCRIT), type) + . = ..() affected_mob.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) /datum/reagent/medicine/changelingadrenaline/on_mob_end_metabolize(mob/living/affected_mob) - ..() - affected_mob.remove_traits(list(TRAIT_SLEEPIMMUNE, TRAIT_BATON_RESISTANCE, TRAIT_CANT_STAMCRIT), type) + . = ..() affected_mob.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown) affected_mob.remove_status_effect(/datum/status_effect/dizziness) affected_mob.remove_status_effect(/datum/status_effect/jitter) diff --git a/code/modules/recycling/conveyor.dm b/code/modules/recycling/conveyor.dm index 1c4b2713e3e5..079d058c78dc 100644 --- a/code/modules/recycling/conveyor.dm +++ b/code/modules/recycling/conveyor.dm @@ -40,6 +40,8 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/machinery/conveyor/Initialize(mapload) . = ..() AddElement(/datum/element/footstep_override, priority = STEP_SOUND_CONVEYOR_PRIORITY) + var/static/list/give_turf_traits = list(TRAIT_TURF_IGNORE_SLOWDOWN) + AddElement(/datum/element/give_turf_traits, give_turf_traits) /obj/machinery/conveyor/examine(mob/user) . = ..() diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 739d402884b1..b8e382aa6591 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -34,6 +34,7 @@ /obj/item/clothing/head/guardmanhelmet = 1, //monkestation edit: Guardman /obj/item/clothing/under/guardmanuniform = 1, //monkestation edit: Guardman /obj/item/clothing/suit/armor/guardmanvest = 1, //monkestation edit: Guardman + /obj/item/citationinator = 3 // monkestation edit: security assistants ) refill_canister = /obj/item/vending_refill/security default_price = PAYCHECK_CREW diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index a8f885663e60..b3022560075e 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -428,6 +428,7 @@ /obj/item/clothing/under/rank/civilian/lawyer/black = 1, /obj/item/clothing/under/rank/civilian/lawyer/black/skirt = 1, /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/heels = 2, //MONKESTATION ADDITION /obj/item/clothing/accessory/lawyers_badge = 2, /obj/item/radio/headset/headset_srv = 2, ) diff --git a/code/modules/wiremod/shell/brain_computer_interface.dm b/code/modules/wiremod/shell/brain_computer_interface.dm index 2379e7830f34..8c6d2f51d647 100644 --- a/code/modules/wiremod/shell/brain_computer_interface.dm +++ b/code/modules/wiremod/shell/brain_computer_interface.dm @@ -67,13 +67,14 @@ /obj/item/circuit_component/equipment_action/bci/update_action() bci_action.name = button_name.value - bci_action.button_icon_state = "bci_[replacetextEx(lowertext(icon_options.value), " ", "_")]" + // Change nanite -> bci if we get a set of bci action icons instead of nanite action icons + bci_action.button_icon_state = "nanite_[replacetextEx(lowertext(icon_options.value), " ", "_")]" /datum/action/innate/bci_action name = "Action" button_icon = 'icons/mob/actions/actions_items.dmi' check_flags = AB_CHECK_CONSCIOUS - button_icon_state = "bci_power" + button_icon_state = "nanite_power" var/obj/item/circuit_component/equipment_action/bci/circuit_component diff --git a/code/modules/zombie/items.dm b/code/modules/zombie/items.dm index 807e93c33d20..376bef8fbfce 100644 --- a/code/modules/zombie/items.dm +++ b/code/modules/zombie/items.dm @@ -29,7 +29,7 @@ if(!target.get_bodypart(BODY_ZONE_HEAD)) return - if(NOZOMBIE in target.dna.species.species_traits) + if((NOZOMBIE in target.dna.species.species_traits) || HAS_TRAIT(target, TRAIT_NO_ZOMBIFY)) // cannot infect any NOZOMBIE subspecies (such as high functioning // zombies) return diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 3530146f1a2a..17f5f8d2da3f 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -49,6 +49,8 @@ Remove(owner) if(owner.mob_biotypes & MOB_MINERAL)//does not process in inorganic things return + if(HAS_TRAIT(owner, TRAIT_NO_ZOMBIFY)) + return if (causes_damage && !iszombie(owner) && owner.stat != DEAD) owner.adjustToxLoss(0.5 * seconds_per_tick) if (SPT_PROB(5, seconds_per_tick)) diff --git a/html/changelogs/AutoChangeLog-pr-1809.yml b/html/changelogs/AutoChangeLog-pr-1809.yml deleted file mode 100644 index a80687ee40b8..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1809.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MichiRecRoom" -delete-after: True -changes: - - qol: "If a lootbox item fails to save, you will now receive a replacement lootbox that can be used at a later time, and will hopefully work then." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-1814.yml b/html/changelogs/AutoChangeLog-pr-1814.yml deleted file mode 100644 index 0fe00e261959..000000000000 --- a/html/changelogs/AutoChangeLog-pr-1814.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - bugfix: "Fixed floorpills rolling random drinks that should've been filtered out (but weren't due to a bad check)." \ No newline at end of file diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index 90b0842f709a..fea8da7f094d 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -36,3 +36,89 @@ - bugfix: box station pathology now has handcuffs in exchange for the useless extrapolators. RikuTheKiller: - balance: Nanite protocols are back from the experimental tech junkyard. +2024-05-04: + Absolucy: + - rscadd: Adds a new job, Security Assistants! They're basically hall monitors, + with basic security and permabrig access, along with some basic tools to abuse + the clown- err, help detain ner-do-wells with! + - rscadd: Added the Citationinator, a handheld device that can issue fines to people! + - rscadd: Added a new "Permabrig" access, used for allowing access to the permabrig + without granting full brig access. + - balance: Brain damage from borer abilities will no longer go above 100. + - qol: Neutered borers will now "skip over" abilities related to reproduction. + - bugfix: Fixed floorpills rolling random drinks that should've been filtered out + (but weren't due to a bad check). + MichiRecRoom: + - qol: If a lootbox item fails to save, you will now receive a replacement lootbox + that can be used at a later time, and will hopefully work then. +2024-05-06: + Absolucy: + - rscadd: The Damned Rabbit Mask now has a cool visual effect when worn by a hunter. + - rscadd: The Damned Rabbit Mask now works with internals. + - balance: Monster Hunter items such as the Damned Rabbit Mask, Rabbit Eye, Red + Queen Card, etc are now indestructible/fireproof/etc. + - rscadd: If a non-hunter tries to arm a jack in the box, they will botch it, resulting + in an early detonation. + - qol: Made the Red Queen Card a bit less janky to use. + - code_imp: Cleaned up and organized a bunch of Monster Hunter-related code. + - rscadd: Wonderland Apocalypse now raises the alert to delta when it starts, and + applies a station-wide effect that harms anyone attempting to cast magical spells. + - balance: Jabberwockies and killer rabbits are now antimagic. + - bugfix: The Cargorilla station trait works again. +2024-05-07: + AlbertNanotracen: + - qol: using a syringe on a virus dish now fills the syringe at the cost of growth, + rather than decreasing a hidden variable. + - balance: Blood from a virus dish is now O- (Universal donor) + - rscadd: lantern syndrome is now real, drink space cleaner to keep it white if + you want + - rscadd: Added Self-Respiration as a stage 4 symptom + MichiRecRoom: + - rscadd: 'Mobs with synthetic voice boxes (such as IPCs) are now capable of using + silicon-type emotes. As of the time of this change, this means they can now + use: boop, buzz, buzz2, chime, honk, ping, sad, warn, slowclap.' +2024-05-08: + Absolucy: + - bugfix: Bioscramblers can no longer give you buggy abstract organs, like dullahan + eyes. + - qol: Added some more things to the bioscrambler blacklist, such as psyker heads, + fly tongues/stomachs, anime implants, and abductor glands. + - rscadd: Bioscramblers can now give you wings. Moffcats, here we come! + - balance: The Bioscrambler will now actively attempt to get closer to living targets + rather than chilling in a closet nobody goes into (unless you trap it in a containment + field). + - balance: Because it can now travel through walls, the Bioscrambler will no longer + transform you THROUGH walls. + - bugfix: Fixed various worn items (most noticeably gloves) looking weird with variable + heights. + AlbertNanotracen: + - bugfix: fixed some wikibook links + - bugfix: Chef recipe book no longer tells you you can microwave pasta to cook it + (you cant) + DimWhat: + - rscadd: Added heels to the LawDrobe + MrMelbert, NikoTheDude, Ported by Hardly: + - rscadd: Added examine text, describe your character in ways that a 32x32 sprite + can't! + - rscadd: Added temporary examine text alongside an indicator + - rscadd: Added character records text + - admin: Admins can see all flavor texts of a character + NicoDeLuna: + - rscadd: Added Ashsuits for miners + Odairu: + - rscadd: Added a secondary ammo type on the captain's Antique + Oricana-16: + - bugfix: BCI Actions now use icons instead of ERRORs/. + RikuTheKiller: + - bugfix: Remove purity adjustment for overdose thresholds, as we don't even use + reagent purity here. + Uristthedorf: + - rscadd: Diagnostic huds can now see nanite volume. + flleeppyy: + - bugfix: spelling mistake in quirk description +2024-05-09: + Absolucy: + - bugfix: Dimensional anomalies are once again immobile like they should be. + - bugfix: Fixed hollow anomalies "escaping" the anomaly research ruin. + Kitsunemitsu: + - bugfix: fixed the syndicate and prisoner ID cards being missaligned. diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 168443c8bd6a..6420db1c8750 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index fd74b778798c..be13305ca8d4 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/monkestation/code/datums/quirks/negative_quirks.dm b/monkestation/code/datums/quirks/negative_quirks.dm index db2648a98a13..63f898111838 100644 --- a/monkestation/code/datums/quirks/negative_quirks.dm +++ b/monkestation/code/datums/quirks/negative_quirks.dm @@ -36,7 +36,7 @@ /datum/quirk/stowaway name = "Stowaway" - desc = "You wake up up inside a random locker with only a crude fake for an ID card." + desc = "You wake up inside a random locker with only a crude fake for an ID card." value = -2 icon = FA_ICON_SUITCASE diff --git a/monkestation/code/game/objects/effects/anomalies/_anomalies.dm b/monkestation/code/game/objects/effects/anomalies/_anomalies.dm index 67676be94e8d..c2dd23e16ce4 100644 --- a/monkestation/code/game/objects/effects/anomalies/_anomalies.dm +++ b/monkestation/code/game/objects/effects/anomalies/_anomalies.dm @@ -1,6 +1,20 @@ +/obj/effect/anomaly + /// If set, the anomaly will delete itself if it leaves this z-level. + var/stay_on_z + /obj/effect/anomaly/proc/scan_anomaly(mob/user, obj/item/scanner) if(!aSignal) return FALSE playsound(get_turf(user), 'sound/machines/ping.ogg', vol = 30, vary = TRUE, extrarange = SHORT_RANGE_SOUND_EXTRARANGE, ignore_walls = FALSE) to_chat(user, span_boldnotice("Analyzing... [src]'s unstable field is fluctuating along frequency [format_frequency(aSignal.frequency)], code [aSignal.code].")) return TRUE + +/obj/effect/anomaly/stabilize(anchor, has_core) + . = ..() + var/turf/current_turf = get_turf(src) + stay_on_z = current_turf.z + +/obj/effect/anomaly/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents) + . = ..() + if(!isnull(stay_on_z) && !QDELETED(src) && new_turf?.z != stay_on_z) + qdel(src) diff --git a/monkestation/code/game/objects/effects/landmark.dm b/monkestation/code/game/objects/effects/landmark.dm index 508b4d82c6fc..ee0bbd5fa0dc 100644 --- a/monkestation/code/game/objects/effects/landmark.dm +++ b/monkestation/code/game/objects/effects/landmark.dm @@ -126,3 +126,6 @@ /obj/effect/landmark/navigate_destination/centcom/dresser location = "Dressing Room" +/obj/effect/landmark/start/security_assistant + name = "Security Assistant" + icon_state = "Security Officer" diff --git a/monkestation/code/modules/antagonists/borers/code/abilities/evolution_tree.dm b/monkestation/code/modules/antagonists/borers/code/abilities/evolution_tree.dm index 8783099f8b12..eea797153025 100644 --- a/monkestation/code/modules/antagonists/borers/code/abilities/evolution_tree.dm +++ b/monkestation/code/modules/antagonists/borers/code/abilities/evolution_tree.dm @@ -57,6 +57,8 @@ for(var/path in cortical_owner.past_evolutions) var/list/evo_data = list() var/datum/borer_evolution/found_evolution = cortical_owner.past_evolutions[path] + if(cortical_owner.neutered && found_evolution.skip_for_neutered) + continue evo_data["name"] = found_evolution.name evo_data["desc"] = found_evolution.desc diff --git a/monkestation/code/modules/antagonists/borers/code/abilities/force_speech.dm b/monkestation/code/modules/antagonists/borers/code/abilities/force_speech.dm index 531220c4392f..4e21189429a3 100644 --- a/monkestation/code/modules/antagonists/borers/code/abilities/force_speech.dm +++ b/monkestation/code/modules/antagonists/borers/code/abilities/force_speech.dm @@ -20,9 +20,7 @@ borer_message = sanitize(borer_message) var/mob/living/carbon/human/cortical_host = cortical_owner.human_host to_chat(cortical_host, span_boldwarning("Your voice moves without your permission!")) - var/obj/item/organ/internal/brain/victim_brain = cortical_owner.human_host.get_organ_slot(ORGAN_SLOT_BRAIN) - if(victim_brain) - cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * cortical_owner.host_harm_multiplier) + cortical_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * cortical_owner.host_harm_multiplier, maximum = BRAIN_DAMAGE_SEVERE) cortical_host.say(message = borer_message, forced = "borer ([key_name(cortical_owner)])") var/turf/human_turf = get_turf(cortical_owner.human_host) var/logging_text = "[key_name(cortical_owner)] forced [key_name(cortical_owner.human_host)] to say [borer_message] at [loc_name(human_turf)]" diff --git a/monkestation/code/modules/antagonists/borers/code/abilities/learn_chemicals.dm b/monkestation/code/modules/antagonists/borers/code/abilities/learn_chemicals.dm index 74fcc3380f84..f944afddd29f 100644 --- a/monkestation/code/modules/antagonists/borers/code/abilities/learn_chemicals.dm +++ b/monkestation/code/modules/antagonists/borers/code/abilities/learn_chemicals.dm @@ -63,9 +63,7 @@ GLOBAL_VAR_INIT(objective_blood_borer, 3) if(!HAS_TRAIT(cortical_owner.human_host, TRAIT_AGEUSIA)) to_chat(cortical_owner.human_host, span_notice("You get a strange aftertaste of [initial(learned_reagent.taste_description)]!")) - var/obj/item/organ/internal/brain/victim_brain = cortical_owner.human_host.get_organ_slot(ORGAN_SLOT_BRAIN) - if(victim_brain) - cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5 * cortical_owner.host_harm_multiplier) + cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5 * cortical_owner.host_harm_multiplier, maximum = BRAIN_DAMAGE_SEVERE) StartCooldown() @@ -129,9 +127,7 @@ GLOBAL_VAR_INIT(objective_blood_borer, 3) cortical_owner.known_chemicals += learned_reagent.type cortical_owner.blood_chems_learned++ - var/obj/item/organ/internal/brain/victim_brain = cortical_owner.human_host.get_organ_slot(ORGAN_SLOT_BRAIN) - if(victim_brain) - cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5 * cortical_owner.host_harm_multiplier) + cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 5 * cortical_owner.host_harm_multiplier, maximum = BRAIN_DAMAGE_SEVERE) if(cortical_owner.blood_chems_learned == BLOOD_CHEM_OBJECTIVE) GLOB.successful_blood_chem += 1 diff --git a/monkestation/code/modules/antagonists/borers/code/abilities/spawn_offspring.dm b/monkestation/code/modules/antagonists/borers/code/abilities/spawn_offspring.dm index 87b137f78851..626b2000025e 100644 --- a/monkestation/code/modules/antagonists/borers/code/abilities/spawn_offspring.dm +++ b/monkestation/code/modules/antagonists/borers/code/abilities/spawn_offspring.dm @@ -32,7 +32,7 @@ produce_egg() var/obj/item/organ/internal/brain/victim_brain = cortical_owner.human_host.get_organ_slot(ORGAN_SLOT_BRAIN) if(victim_brain) - cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25 * cortical_owner.host_harm_multiplier) + cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 25 * cortical_owner.host_harm_multiplier, maximum = BRAIN_DAMAGE_SEVERE) var/eggroll = rand(1,100) if(eggroll <= 75) switch(eggroll) diff --git a/monkestation/code/modules/antagonists/borers/code/abilities/upgrade_body.dm b/monkestation/code/modules/antagonists/borers/code/abilities/upgrade_body.dm index 6648da839962..0ad9663abc64 100644 --- a/monkestation/code/modules/antagonists/borers/code/abilities/upgrade_body.dm +++ b/monkestation/code/modules/antagonists/borers/code/abilities/upgrade_body.dm @@ -22,9 +22,7 @@ cortical_owner.chemical_regen += cortical_owner.chem_regen_per_level cortical_owner.level += 1 - var/obj/item/organ/internal/brain/victim_brain = cortical_owner.human_host.get_organ_slot(ORGAN_SLOT_BRAIN) - if(victim_brain) - cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10 * cortical_owner.host_harm_multiplier) + cortical_owner.human_host.adjustOrganLoss(ORGAN_SLOT_BRAIN, 10 * cortical_owner.host_harm_multiplier, maximum = BRAIN_DAMAGE_SEVERE) cortical_owner.human_host.adjust_eye_blur(6 SECONDS * cortical_owner.host_harm_multiplier) //about 12 seconds' worth by default to_chat(cortical_owner, span_notice("You have grown!")) diff --git a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_datum.dm b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_datum.dm index ad9c32d1492f..ae3a1802bc1b 100644 --- a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_datum.dm +++ b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_datum.dm @@ -18,21 +18,22 @@ var/list/unlocked_evolutions = list() /// What action does this evolution unlock var/added_action = FALSE - /// If TRUE neutered borers wont be able to get an action button from this, but will still be able to progress through the evolution tree - var/restricted_for_neutered = FALSE + /// If TRUE, then neutered borers will "bypass" this evolution, silently unlocking it when available and hiding it from the UI. + var/skip_for_neutered = FALSE /// What happens when a borer gets this evolution /datum/borer_evolution/proc/on_evolve(mob/living/basic/cortical_borer/cortical_owner) SHOULD_CALL_PARENT(TRUE) + if(cortical_owner.neutered) + for(var/datum/borer_evolution/evolution as anything in unlocked_evolutions) + if(evolution::skip_for_neutered) + cortical_owner.do_evolution(evolution) + if(skip_for_neutered) + return if(mutually_exclusive) cortical_owner.genome_locked = TRUE if(gain_text) to_chat(cortical_owner, span_notice("[gain_text]")) - - if(restricted_for_neutered) - if(istype(cortical_owner, /mob/living/basic/cortical_borer/neutered)) - to_chat(cortical_owner, span_danger("You didnt manage to properly evolve, you feel a strange sensation.")) - return if(added_action) var/datum/action/cooldown/borer/new_action = new added_action(cortical_owner) new_action.Grant(cortical_owner) diff --git a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_diveworm.dm b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_diveworm.dm index e5347cedf9e6..737069a70372 100644 --- a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_diveworm.dm +++ b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_diveworm.dm @@ -104,4 +104,4 @@ /datum/borer_evolution/synthetic_chems_negative, ) added_action = /datum/action/cooldown/borer/empowered_offspring - restricted_for_neutered = TRUE + skip_for_neutered = TRUE diff --git a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_hivelord.dm b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_hivelord.dm index c4b729eaf6a7..5ffa5e2a363b 100644 --- a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_hivelord.dm +++ b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_hivelord.dm @@ -10,7 +10,7 @@ evo_cost = 1 unlocked_evolutions = list(/datum/borer_evolution/hivelord/blood_chemical) added_action = /datum/action/cooldown/borer/produce_offspring - restricted_for_neutered = TRUE + skip_for_neutered = TRUE // T2 /datum/borer_evolution/hivelord/blood_chemical @@ -56,7 +56,7 @@ /datum/borer_evolution/synthetic_chems_positive, /datum/borer_evolution/synthetic_chems_negative, ) - restricted_for_neutered = TRUE // we set this to TRUE purelly for the message, they dont have the reproduction action anyway + skip_for_neutered = TRUE // we set this to TRUE purelly for the message, they dont have the reproduction action anyway /datum/borer_evolution/hivelord/produce_offspring_alone/on_evolve(mob/living/basic/cortical_borer/cortical_owner) . = ..() diff --git a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_symbiote.dm b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_symbiote.dm index a5807b8d0060..0f3d2f84022d 100644 --- a/monkestation/code/modules/antagonists/borers/code/evolution/evolution_symbiote.dm +++ b/monkestation/code/modules/antagonists/borers/code/evolution/evolution_symbiote.dm @@ -10,6 +10,7 @@ unlocked_evolutions = list(/datum/borer_evolution/symbiote/chem_per_level) evo_cost = 1 added_action = /datum/action/cooldown/borer/willing_host + skip_for_neutered = TRUE // T2 /datum/borer_evolution/symbiote/chem_per_level diff --git a/monkestation/code/modules/antagonists/borers/code/items/borer_spawner.dm b/monkestation/code/modules/antagonists/borers/code/items/borer_spawner.dm index 808ff189bd0c..36d0d09e8d3e 100644 --- a/monkestation/code/modules/antagonists/borers/code/items/borer_spawner.dm +++ b/monkestation/code/modules/antagonists/borers/code/items/borer_spawner.dm @@ -53,6 +53,8 @@ ignore_category = POLL_IGNORE_CORTICAL_BORER, pic_source = /mob/living/basic/cortical_borer/neutered, ) + if(QDELETED(src)) // prevent shenanigans with refunds + return if(!LAZYLEN(candidates)) opened = FALSE to_chat(user, "Yet the borer after looking at you quickly retreats back into their cage, visibly scared. Perhaps try later?") @@ -91,5 +93,9 @@ log_game("[key_name(new_mob)] was spawned as a borer by [key_name(user)]") visible_message("A borer wriggles out of the [src]!") - new /obj/item/cortical_cage(drop_location()) + var/obj/item/cortical_cage/empty_cage = new(drop_location()) + var/user_held = user.get_held_index_of_item(src) + if(user_held) // seems more immersive if you don't just suddenly drop the cage, and it empties while still seemingly in your hand. + user.dropItemToGround(src, force = TRUE, silent = TRUE) + user.put_in_hand(empty_cage, user_held, ignore_anim = TRUE) qdel(src) diff --git a/monkestation/code/modules/antagonists/traitor/objectives/kidnapping.dm b/monkestation/code/modules/antagonists/traitor/objectives/kidnapping.dm index 489d643d3018..e55aecf92f81 100644 --- a/monkestation/code/modules/antagonists/traitor/objectives/kidnapping.dm +++ b/monkestation/code/modules/antagonists/traitor/objectives/kidnapping.dm @@ -69,6 +69,8 @@ /datum/job/paramedic, // Service /datum/job/cook, + // Monkestation edit: security assistants + /datum/job/security_assistant, ) alive_bonus = 4 diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_misc_procs.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_misc_procs.dm index dcf646932d27..44f1d7373183 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_misc_procs.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_misc_procs.dm @@ -127,7 +127,7 @@ return returnIcon + returnString // Viewer not a Vamp AND not the target's vassal? if(!viewer.mind.has_antag_datum((/datum/antagonist/bloodsucker)) && !(viewer in vassals)) - if(!(HAS_TRAIT(viewer.mind, TRAIT_BLOODSUCKER_HUNTER) && broke_masquerade)) + if(!(HAS_TRAIT(viewer.mind, TRAIT_OCCULTIST) && broke_masquerade)) return FALSE // Default String var/returnString = "\[[return_full_name()]\]" diff --git a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm index 69607ecb4461..ebd84063641f 100644 --- a/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm +++ b/monkestation/code/modules/bloodsuckers/bloodsucker/bloodsucker_ruleset.dm @@ -12,7 +12,7 @@ // Command JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_RESEARCH_DIRECTOR, JOB_CHIEF_ENGINEER, JOB_CHIEF_MEDICAL_OFFICER, // Security - JOB_WARDEN, JOB_SECURITY_OFFICER, JOB_DETECTIVE, + JOB_WARDEN, JOB_SECURITY_OFFICER, JOB_DETECTIVE, JOB_SECURITY_ASSISTANT, // Curator JOB_CURATOR, ) @@ -63,7 +63,7 @@ protected_roles = list( JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_WARDEN, JOB_SECURITY_OFFICER, JOB_DETECTIVE, - JOB_CURATOR, + JOB_CURATOR, JOB_SECURITY_ASSISTANT, ) restricted_roles = list(JOB_AI, JOB_CYBORG, "Positronic Brain") required_candidates = 1 @@ -112,7 +112,7 @@ protected_roles = list( JOB_CAPTAIN, JOB_HEAD_OF_PERSONNEL, JOB_HEAD_OF_SECURITY, JOB_WARDEN, JOB_SECURITY_OFFICER, JOB_DETECTIVE, - JOB_CURATOR, + JOB_CURATOR, JOB_SECURITY_ASSISTANT, ) restricted_roles = list(JOB_AI, JOB_CYBORG) required_candidates = 1 diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/bloodsilver.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/bloodsilver.dm new file mode 100644 index 000000000000..837ef6888f27 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/bloodsilver.dm @@ -0,0 +1,16 @@ +/datum/action/cooldown/spell/conjure_item/blood_silver + name = "Create bloodsilver bullet" + desc = "Wield your blood and mold it into a bloodsilver bullet" + button_icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + button_icon_state = "bloodsilver" + cooldown_time = 2 MINUTES + item_type = /obj/item/ammo_casing/silver + spell_requirements = NONE + delete_old = FALSE + +/datum/action/cooldown/spell/blood_silver/conjure_item/cast(mob/living/carbon/cast_on) + if(cast_on.blood_volume < BLOOD_VOLUME_NORMAL) + to_chat(cast_on, span_warning ("Using this ability would put our health at risk!")) + return + . = ..() + cast_on.blood_volume -= 20 diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/paradox.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/paradox.dm new file mode 100644 index 000000000000..16f38e845f19 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/paradox.dm @@ -0,0 +1,52 @@ +/datum/action/cooldown/paradox + name = "Paradox Rabbit" + desc = "The rabbit's movements will be translated onto you, ignoring any solid objects in your way." + button_icon = 'icons/mob/simple/rabbit.dmi' + button_icon_state = "rabbit_white_dead" + cooldown_time = 3 MINUTES + ///where we will be teleporting the rabbit too + var/obj/effect/landmark/wonderchess_mark/chessmark + ///where the user will be while this whole ordeal is happening + var/obj/effect/landmark/wonderland_mark/landmark + ///the rabbit in question if it exists + var/mob/living/basic/rabbit/rabbit + ///where the user originally was + var/turf/original_loc + +/datum/action/cooldown/paradox/New(Target) + ..() + chessmark = GLOB.wonderland_marks["Wonderchess landmark"] + landmark = GLOB.wonderland_marks["Wonderland landmark"] + + +/datum/action/cooldown/paradox/Activate() + var/turf/owner_turf = get_turf(owner) + if(!is_station_level(owner_turf.z)) + to_chat(owner, span_warning("The pull of the ice moon isn't strong enough here..")) + return + StartCooldown(360 SECONDS, 360 SECONDS) + if(QDELETED(chessmark)) + return + var/turf/theplace = get_turf(chessmark) + var/turf/land_mark = get_turf(landmark) + original_loc = get_turf(owner) + var/mob/living/basic/rabbit/bunny = new(theplace) + if(QDELETED(bunny)) + return + owner.forceMove(land_mark) ///the user remains safe in the wonderland + var/mob/living/master = owner + owner.mind.transfer_to(bunny) + playsound(bunny, 'monkestation/sound/bloodsuckers/paradoxskip.ogg', vol = 100) + addtimer(CALLBACK(src, PROC_REF(return_to_station), master, bunny, theplace), 5 SECONDS) + StartCooldown() + +/datum/action/cooldown/paradox/proc/return_to_station(mob/user, mob/bunny, turf/mark) + var/new_x = bunny.x - mark.x + var/new_y = bunny.y - mark.y + var/turf/new_location = locate((original_loc.x + new_x) , (original_loc.y + new_y) , original_loc.z) + user.forceMove(new_location) + bunny.mind.transfer_to(user) + playsound(user, 'monkestation/sound/bloodsuckers/paradoxskip.ogg', vol = 100) + rabbit = null + original_loc = null + qdel(bunny) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/wonderland.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/wonderland.dm new file mode 100644 index 000000000000..efbc8df57ac9 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/abilities/wonderland.dm @@ -0,0 +1,37 @@ +/datum/action/cooldown/wonderland_drop + name = "To Wonderland" + button_icon = 'icons/turf/floors.dmi' + button_icon_state = "junglegrass" + cooldown_time = 5 MINUTES + ///where we will be teleporting the user too + var/obj/effect/landmark/wonderland_mark/landmark + ///where the user originally was + var/turf/original_loc + +/datum/action/cooldown/wonderland_drop/New(Target) + ..() + landmark = GLOB.wonderland_marks["Wonderland landmark"] + +/datum/action/cooldown/wonderland_drop/Activate() + StartCooldown(360 SECONDS, 360 SECONDS) + var/mob/living/sleeper = owner + if(QDELETED(landmark)) + return + original_loc = get_turf(sleeper) + var/turf/theplace = get_turf(landmark) + sleeper.forceMove(theplace) + sleeper.Sleeping(2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(awaken), sleeper), 3 SECONDS) + +/datum/action/cooldown/wonderland_drop/proc/awaken(mob/living/sleeper) + to_chat(sleeper, span_warning("You wake up in the Wonderland.")) + owner.playsound_local(sleeper, 'monkestation/sound/bloodsuckers/wonderlandmusic.ogg', vol = 10) + addtimer(CALLBACK(src, PROC_REF(return_to_station), sleeper), 1 MINUTES) + StartCooldown() + +/datum/action/cooldown/wonderland_drop/proc/return_to_station(mob/living/sleeper) + if(QDELETED(original_loc)) + return + sleeper.forceMove(original_loc) + to_chat(sleeper, span_warning("You feel like you have woken up from a deep slumber, was it all a dream?")) + original_loc = null diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm index 3946bdf1845f..9780e9380c9b 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/events/wonderland_apocalypse.dm @@ -23,19 +23,42 @@ category = EVENT_CATEGORY_SPACE /datum/round_event/wonderlandapocalypse/announce(fake) - - priority_announce("What the heELl is going on?! WEeE have detected massive up-spikes in ##@^^?? coming fr*m yoOourr st!*i@n! GeEeEEET out of THERE NOW!!","?????????", 'monkestation/sound/bloodsuckers/monsterhunterintro.ogg') + if(!fake && SSsecurity_level.get_current_level_as_number() < SEC_LEVEL_DELTA) + SSsecurity_level.set_level(SEC_LEVEL_DELTA) + priority_announce( + text = "What the heELl is going on?! WEeE have detected massive up-spikes in ##@^^?? coming fr*m yoOourr st!*i@n! GeEeEEET out of THERE NOW!!", + title = Gibberish("[command_name()] Higher Dimensional Affairs", TRUE, 45), + sound = 'monkestation/sound/bloodsuckers/monsterhunterintro.ogg', + color_override = "purple" + ) /datum/round_event/wonderlandapocalypse/start() - for(var/i = 1, i < 16, i++) + SSshuttle.emergency_no_recall = TRUE + for(var/i = 1 to 16) new /obj/effect/anomaly/dimensional/wonderland(get_safe_random_station_turf(), null, FALSE) - for(var/i = 1, i < 4, i++) + for(var/i = 1 to 4) var/obj/structure/wonderland_rift/rift = new(get_safe_random_station_turf()) - notify_ghosts("A doorway to the wonderland has been opened!", source = rift, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Wonderland rift Opened") - - + notify_ghosts("A doorway to the wonderland has been opened!", source = rift, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Wonderland Rift Opened") + for(var/mob/living/target as anything in GLOB.mob_living_list) + if(QDELETED(target)) + continue + var/area/centcom/target_area = get_area(target) + if(istype(target_area) && target_area.grace) + continue + addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, apply_status_effect), /datum/status_effect/wonderland_district), rand(5 SECONDS, 10 SECONDS)) + RegisterSignal(SSdcs, COMSIG_GLOB_MOB_CREATED, PROC_REF(apply_pressure_to_new_mob)) + +/datum/round_event/wonderlandapocalypse/proc/apply_pressure_to_new_mob(datum/source, mob/living/target) + SIGNAL_HANDLER + if(!istype(target) || QDELING(target)) + return + var/area/centcom/target_area = get_area(target) + if(istype(target_area) && target_area.grace) + return + target.apply_status_effect(/datum/status_effect/wonderland_district) /obj/effect/anomaly/dimensional/wonderland + aSignal = null range = 5 immortal = TRUE drops_core = FALSE @@ -55,14 +78,14 @@ /obj/structure/wonderland_rift name = "Wonderland Door" desc = "A door leading to a magical beautiful land." - armor_type = /datum/armor/wonderland_rift - max_integrity = 300 icon = 'monkestation/icons/mob/infils.dmi' icon_state = "cyborg_rift" anchored = TRUE density = FALSE plane = MASSIVE_OBJ_PLANE - ///Have we already spawned an enemy? + armor_type = /datum/armor/wonderland_rift + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + /// Have we already spawned an enemy? var/enemy_spawned = FALSE /datum/armor/wonderland_rift @@ -83,13 +106,56 @@ /obj/structure/wonderland_rift/proc/summon_rabbit(mob/user) var/spawn_check = tgui_alert(user, "Become a Jabberwocky?", "Wonderland Rift", list("Yes", "No")) - if(spawn_check != "Yes" || !src || QDELETED(src) || QDELETED(user)) + if(spawn_check != "Yes" || QDELETED(src) || QDELETED(user) || enemy_spawned) return FALSE - - if(enemy_spawned) - return FALSE - enemy_spawned = TRUE var/mob/living/basic/red_rabbit/evil_rabbit = new(get_turf(src)) evil_rabbit.key = user.key to_chat(evil_rabbit, span_boldwarning("Destroy everything, spare no one.")) + +/datum/status_effect/wonderland_district + id = "wonderland_district" + alert_type = null + tick_interval = -1 + +/datum/status_effect/wonderland_district/on_apply() + . = ..() + if(FACTION_RABBITS in owner?.faction) + return FALSE + to_chat(owner, span_warning("You feel an ominous pressure fill the air around you...")) + RegisterSignal(owner, COMSIG_ENTER_AREA, PROC_REF(on_enter_area)) + RegisterSignal(owner, COMSIG_MOB_AFTER_SPELL_CAST, PROC_REF(after_spell_cast)) + +/datum/status_effect/wonderland_district/on_remove() + . = ..() + UnregisterSignal(owner, list(COMSIG_ENTER_AREA, COMSIG_MOB_AFTER_SPELL_CAST)) + +/datum/status_effect/wonderland_district/proc/on_enter_area(datum/source, area/centcom/new_area) + SIGNAL_HANDLER + if(istype(new_area) && new_area.grace) + qdel(src) + +/datum/status_effect/wonderland_district/proc/after_spell_cast(datum/source, datum/action/cooldown/spell/spell, atom/cast_on) + SIGNAL_HANDLER + if(!istype(spell) || QDELING(spell) || !spell.antimagic_flags) // don't affect non-magic spells. + return + make_visible() + INVOKE_ASYNC(owner, TYPE_PROC_REF(/mob/living, emote), "scream") + owner.visible_message(span_warning("[owner] doubles over in pain, violently coughing up blood!"), span_userdanger("An overwhelming pressure fills your body as you cast [spell.name || "magic"], filling you with excruciating pain down to the very core of your being!")) + owner.take_overall_damage(brute = rand(5, 15)) + if(iscarbon(owner)) + var/mob/living/carbon/carbon_owner = owner + carbon_owner.vomit(lost_nutrition = 0, blood = TRUE, distance = rand(1, 2), message = FALSE) + +/datum/status_effect/wonderland_district/proc/make_visible() + if(alert_type && !QDELETED(linked_alert)) + return + alert_type = /atom/movable/screen/alert/status_effect/wonderland_district + linked_alert = owner.throw_alert(id, alert_type) + linked_alert.attached_effect = src + +/atom/movable/screen/alert/status_effect/wonderland_district + name = "Wonderland Manifestation" + desc = "An omnipresent pressure surrounds you, causing any use of magic to overload your body!" + icon = 'monkestation/icons/hud/screen_alert.dmi' + icon_state = "wonderland" diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_abilities.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_abilities.dm deleted file mode 100644 index 33b3956c808d..000000000000 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_abilities.dm +++ /dev/null @@ -1,108 +0,0 @@ -/datum/action/cooldown/paradox - name = "Paradox Rabbit" - desc = "The rabbit's movements will be translated onto you, ignoring any solid objects in your way." - button_icon = 'icons/mob/simple/rabbit.dmi' - button_icon_state = "rabbit_white_dead" - cooldown_time = 3 MINUTES - ///where we will be teleporting the rabbit too - var/obj/effect/landmark/wonderchess_mark/chessmark - ///where the user will be while this whole ordeal is happening - var/obj/effect/landmark/wonderland_mark/landmark - ///the rabbit in question if it exists - var/mob/living/basic/rabbit/rabbit - ///where the user originally was - var/turf/original_loc - -/datum/action/cooldown/paradox/New(Target) - ..() - chessmark = GLOB.wonderland_marks["Wonderchess landmark"] - landmark = GLOB.wonderland_marks["Wonderland landmark"] - - - -/datum/action/cooldown/paradox/Activate() - if(!is_station_level(owner.loc.z)) - to_chat(owner,span_warning("The pull of the ice moon isn't strong enough here..")) - return - StartCooldown(360 SECONDS, 360 SECONDS) - if(!chessmark) - return - var/turf/theplace = get_turf(chessmark) - var/turf/land_mark = get_turf(landmark) - original_loc = get_turf(owner) - var/mob/living/basic/rabbit/bunny = new(theplace) - if(!bunny) - return - owner.forceMove(land_mark) ///the user remains safe in the wonderland - var/mob/living/master = owner - owner.mind.transfer_to(bunny) - playsound(bunny, 'monkestation/sound/bloodsuckers/paradoxskip.ogg',100) - addtimer(CALLBACK(src,PROC_REF(return_to_station), master, bunny, theplace), 5 SECONDS) - StartCooldown() - -/datum/action/cooldown/paradox/proc/return_to_station(mob/user, mob/bunny,turf/mark) - var/new_x = bunny.x - mark.x - var/new_y = bunny.y - mark.y - var/turf/new_location = locate((original_loc.x + new_x) , (original_loc.y + new_y) , original_loc.z) - user.forceMove(new_location) - bunny.mind.transfer_to(user) - playsound(user, 'monkestation/sound/bloodsuckers/paradoxskip.ogg',100) - rabbit = null - original_loc = null - qdel(bunny) - - -/datum/action/cooldown/wonderland_drop - name = "To Wonderland" - button_icon = 'icons/turf/floors.dmi' - button_icon_state = "junglegrass" - cooldown_time = 5 MINUTES - ///where we will be teleporting the user too - var/obj/effect/landmark/wonderland_mark/landmark - ///where the user originally was - var/turf/original_loc - -/datum/action/cooldown/wonderland_drop/New(Target) - ..() - landmark = GLOB.wonderland_marks["Wonderland landmark"] - - - -/datum/action/cooldown/wonderland_drop/Activate() - StartCooldown(360 SECONDS, 360 SECONDS) - var/mob/living/sleeper = owner - if(!landmark) - return - original_loc = get_turf(sleeper) - var/turf/theplace = get_turf(landmark) - sleeper.forceMove(theplace) - sleeper.Sleeping(2 SECONDS) - sleep(3 SECONDS) - to_chat(sleeper, span_warning("You wake up in the Wonderland.")) - owner.playsound_local(sleeper, 'monkestation/sound/bloodsuckers/wonderlandmusic.ogg',10) - addtimer(CALLBACK(src, PROC_REF(return_to_station), sleeper), 1 MINUTES) - StartCooldown() - -/datum/action/cooldown/wonderland_drop/proc/return_to_station(mob/living/sleeper) - if(!original_loc) - return - sleeper.forceMove(original_loc) - to_chat(sleeper, span_warning("You feel like you have woken up from a deep slumber, was it all a dream?")) - original_loc = null - -/datum/action/cooldown/spell/conjure_item/blood_silver - name = "Create bloodsilver bullet" - desc = "Wield your blood and mold it into a bloodsilver bullet" - button_icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - button_icon_state = "bloodsilver" - cooldown_time = 2 MINUTES - item_type = /obj/item/ammo_casing/silver - spell_requirements = NONE - delete_old = FALSE - -/datum/action/cooldown/spell/blood_silver/conjure_item/cast(mob/living/carbon/cast_on) - if(cast_on.blood_volume < BLOOD_VOLUME_NORMAL) - to_chat(cast_on, span_warning ("Using this ability would put our health at risk!")) - return - . = ..() - cast_on.blood_volume -= 20 diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm index 963e54152a53..4b4e1106bf39 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_datum.dm @@ -3,8 +3,11 @@ roundend_category = "Monster Hunters" antagpanel_category = "Monster Hunter" job_rank = ROLE_MONSTERHUNTER - antag_hud_name = "obsessed" + hud_icon = 'monkestation/icons/mob/huds/antags/monster_hunter.dmi' + antag_hud_name = "hunter" preview_outfit = /datum/outfit/monsterhunter + antag_moodlet = /datum/mood_event/monster_hunter + show_to_ghosts = TRUE var/list/datum/action/powers = list() var/give_objectives = TRUE ///how many rabbits have we found @@ -17,20 +20,36 @@ var/apocalypse = FALSE ///a list of our prey var/list/datum/mind/prey = list() + /// A list of traits innately granted to monster hunters. + var/static/list/granted_traits = list( + TRAIT_FEARLESS, // to ensure things like fear of heresy or blood or whatever don't fuck them over + TRAIT_NOCRITDAMAGE, + TRAIT_NOSOFTCRIT + ) + /// A list of traits innately granted to the mind of monster hunters. + var/static/list/mind_traits = list( + TRAIT_OCCULTIST, + TRAIT_MADNESS_IMMUNE // You merely adopted the madness. I was born in it, molded by it. + ) + /// A typecache of ability types that will be revealed to the monster hunter when they gain insight. + var/static/list/monster_abilities = typecacheof(list( + /datum/action/changeling, + /datum/action/cooldown/bloodsucker + )) /datum/antagonist/monsterhunter/apply_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current - current_mob.add_traits(list(TRAIT_NOSOFTCRIT, TRAIT_NOCRITDAMAGE), HUNTER_TRAIT) - ADD_TRAIT(owner, TRAIT_BLOODSUCKER_HUNTER, HUNTER_TRAIT) - owner.unconvertable = TRUE + current_mob.add_traits(granted_traits, HUNTER_TRAIT) + current_mob.update_sight() + current_mob.faction |= FACTION_RABBITS /datum/antagonist/monsterhunter/remove_innate_effects(mob/living/mob_override) . = ..() var/mob/living/current_mob = mob_override || owner.current REMOVE_TRAITS_IN(current_mob, HUNTER_TRAIT) - REMOVE_TRAITS_IN(owner, HUNTER_TRAIT) - owner.unconvertable = FALSE + current_mob.faction -= FACTION_RABBITS + current_mob.update_sight() /datum/antagonist/monsterhunter/on_gain() //Give Hunter Objective @@ -39,7 +58,10 @@ var/datum/map_template/wonderland/wonder = new() if(!wonder.load_new_z()) message_admins("The wonderland failed to load.") - CRASH("Failed to initialize wonderland!") + CRASH("Failed to initialize wonderlandmind_traits, !") + + owner.add_traits(mind_traits, HUNTER_TRAIT) + owner.unconvertable = TRUE //Teach Stake crafting owner.teach_crafting_recipe(/datum/crafting_recipe/hardened_stake) @@ -56,7 +78,7 @@ grant_drop_ability(droppod_contract) RegisterSignal(src, COMSIG_GAIN_INSIGHT, PROC_REF(insight_gained)) RegisterSignal(src, COMSIG_BEASTIFY, PROC_REF(turn_beast)) - for(var/i in 1 to 5 ) + for(var/i in 1 to 5) var/turf/rabbit_hole = get_safe_random_station_turf() var/obj/effect/client_image_holder/white_rabbit/cretin = new(rabbit_hole, owner.current) cretin.hunter = src @@ -78,10 +100,11 @@ contract.owner = src summon_contract.Grant(owner.current) - /datum/antagonist/monsterhunter/on_removal() UnregisterSignal(src, COMSIG_GAIN_INSIGHT) UnregisterSignal(src, COMSIG_BEASTIFY) + REMOVE_TRAITS_IN(owner, HUNTER_TRAIT) + owner.unconvertable = FALSE for(var/obj/effect/client_image_holder/white_rabbit/white as anything in rabbits) rabbits -= white qdel(white) @@ -168,7 +191,7 @@ to_chat(owner.current, span_announce("While we can kill anyone in our way to destroy the monsters lurking around, causing property damage is unacceptable.")) to_chat(owner.current, span_announce("However, security WILL detain us if they discover our mission.")) to_chat(owner.current, span_announce("In exchange for our services, it shouldn't matter if a few items are gone missing for our... personal collection.")) - owner.current.playsound_local(null, 'monkestation/sound/bloodsuckers/monsterhunterintro.ogg', 100, FALSE, pressure_affected = FALSE) + owner.current.playsound_local(null, 'monkestation/sound/bloodsuckers/monsterhunterintro.ogg', vol = 100, vary = FALSE, pressure_affected = FALSE) owner.announce_objectives() /datum/antagonist/monsterhunter/proc/insight_gained() @@ -176,28 +199,28 @@ var/description var/datum/objective/assassinate/hunter/obj - var/list/unchecked_objectives = list() + var/list/unchecked_objectives for(var/datum/objective/assassinate/hunter/goal in objectives) if(!goal.discovered) - unchecked_objectives += goal - if(unchecked_objectives.len) + LAZYADD(unchecked_objectives, goal) + if(unchecked_objectives) obj = pick(unchecked_objectives) if(obj) obj.uncover_target() var/datum/antagonist/heretic/heretic_target = IS_HERETIC(obj.target.current) if(heretic_target) - description = "your target [heretic_target.owner.current.real_name] follows the [heretic_target.heretic_path], dear hunter." + description = "Your target, [heretic_target.owner.current.real_name], follows the [heretic_target.heretic_path], dear hunter." else - description = "O' hunter, your target [obj.target.current.real_name] bears these lethal abilities: " - for(var/datum/action/ability in obj.target.current.actions) - if(!ability) - continue - if(!istype(ability, /datum/action/changeling) && !istype(ability, /datum/action/cooldown/bloodsucker)) + description = "O' hunter, your target [obj.target.current.real_name] bears these lethal abilities: " + var/list/abilities = list() + for(var/datum/action/ability as anything in obj.target.current.actions) + if(!is_type_in_typecache(ability, monster_abilities)) continue - description += "[ability.name], " + abilities |= "[ability.name]" + description += english_list(abilities) rabbits_spotted++ - to_chat(owner.current,span_notice("[description]")) + to_chat(owner.current, span_boldnotice("[description]")) /datum/objective/assassinate/hunter ///has our target been discovered? @@ -209,26 +232,22 @@ discovered = !discovered src.update_explanation_text() to_chat(owner.current, span_userdanger("You have identified a monster, your objective list has been updated!")) + update_static_data_for_all_viewers() /datum/antagonist/monsterhunter/proc/find_monster_targets() var/list/possible_targets = list() - for(var/datum/antagonist/victim in GLOB.antagonists) - if(!victim.owner) + for(var/datum/antagonist/victim as anything in GLOB.antagonists) + if(QDELETED(victim?.owner?.current) || victim.owner.current.stat == DEAD || victim.owner == owner) continue - if(!victim.owner.current) - continue - if(victim.owner.current.stat == DEAD || victim.owner == owner) - continue - if(istype(victim, /datum/antagonist/changeling) || istype(victim, /datum/antagonist/heretic) || istype(victim, /datum/antagonist/bloodsucker)) + if(is_type_in_typecache(victim, GLOB.monster_hunter_prey_antags)) possible_targets += victim.owner for(var/i in 1 to 3) //we get 3 targets - if(!(possible_targets.len)) + if(!length(possible_targets)) break var/datum/objective/assassinate/hunter/kill_monster = new kill_monster.owner = owner - var/datum/mind/target = pick(possible_targets) - possible_targets -= target + var/datum/mind/target = pick_n_take(possible_targets) kill_monster.target = target prey += target kill_monster.explanation_text = "A monster target is aboard the station, identify and eliminate this threat." @@ -239,7 +258,7 @@ SIGNAL_HANDLER apocalypse = TRUE - force_event(/datum/round_event_control/wonderlandapocalypse, "a monsterhunter turning into a beast") + force_event(/datum/round_event_control/wonderlandapocalypse, "a monster hunter turning into a beast") /obj/item/clothing/mask/monster_preview_mask name = "Monster Preview Mask" @@ -277,7 +296,7 @@ /datum/action/droppod_item - name = "Summon Monster Hunter tools" + name = "Summon Monster Hunter Tools" desc = "Summon specific monster hunter tools that will aid us with our hunt." button_icon = 'icons/obj/device.dmi' button_icon_state = "beacon" @@ -319,7 +338,6 @@ /datum/action/cooldown/spell/track_monster/proc/remove_vision(mob/living/carbon/cast_on) qdel(cast_on.GetComponent(/datum/component/echolocation)) - /datum/component/echolocation/monsterhunter /datum/component/echolocation/monsterhunter/echolocate() //code stolen from echolocation to make it ignore non-monster mobs diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_rulesets.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_rulesets.dm index cd79d9560b69..aa190a0c2d30 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_rulesets.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_rulesets.dm @@ -1,10 +1,3 @@ -///List of antagonists that are considered 'Monsters' and their chance of being selected. -GLOBAL_LIST_INIT(monster_antagonist_types, list( - /datum/antagonist/bloodsucker, - /datum/antagonist/heretic, - /datum/antagonist/changeling, -)) - #define MINIMUM_MONSTERS_REQUIRED 2 //gives monsterhunters an icon in the antag selection panel @@ -22,6 +15,7 @@ GLOBAL_LIST_INIT(monster_antagonist_types, list( JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, JOB_CHIEF_ENGINEER, JOB_CHIEF_MEDICAL_OFFICER, @@ -39,13 +33,14 @@ GLOBAL_LIST_INIT(monster_antagonist_types, list( /datum/dynamic_ruleset/midround/monsterhunter/trim_candidates() - ..() + . = ..() for(var/mob/living/player in living_players) + var/turf/player_turf = get_turf(player) if(issilicon(player)) living_players -= player - if(is_centcom_level(player.z)) + if(QDELETED(player_turf) || is_centcom_level(player_turf.z)) living_players -= player - if((player.mind?.special_role || player.mind?.antag_datums?.len)) + if((player.mind?.special_role || length(player.mind?.antag_datums))) living_players -= player /datum/dynamic_ruleset/midround/monsterhunter/ready(forced = FALSE) @@ -53,13 +48,9 @@ GLOBAL_LIST_INIT(monster_antagonist_types, list( return FALSE var/count = 0 for(var/datum/antagonist/monster as anything in GLOB.antagonists) - if(!monster.owner) - continue - if(!monster.owner.current) - continue - if(monster.owner.current.stat == DEAD) + if(QDELETED(monster.owner) || QDELETED(monster.owner.current) || monster.owner.current.stat == DEAD) continue - if(GLOB.monster_antagonist_types.Find(monster.type)) + if(is_type_in_typecache(monster, GLOB.monster_hunter_prey_antags)) count++ if(MINIMUM_MONSTERS_REQUIRED > count) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm deleted file mode 100644 index b254e7d2e435..000000000000 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunter_weapons.dm +++ /dev/null @@ -1,543 +0,0 @@ -#define upgraded_val(x,y) ( CEILING((x * (1.07 ** y)), 1) ) -#define CALIBER_BLOODSILVER "bloodsilver" -#define WEAPON_UPGRADE "weapon_upgrade" - -/obj/item/melee/trick_weapon - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - lefthand_file = 'monkestation/icons/bloodsuckers/weapons_lefthand.dmi' - righthand_file = 'monkestation/icons/bloodsuckers/weapons_righthand.dmi' - ///upgrade level of the weapon - var/upgrade_level = 0 - ///base force when transformed - var/on_force - ///base force when in default state - var/base_force - ///default name of the weapon - var/base_name - ///is the weapon in its transformed state? - var/enabled = FALSE - ///wounding chance while on - var/on_wound_bonus - -/obj/item/melee/trick_weapon/proc/upgrade_weapon() - SIGNAL_HANDLER - - upgrade_level++ - force = upgraded_val(base_force,upgrade_level) - var/datum/component/transforming/transform = GetComponent(/datum/component/transforming) - transform.force_on = upgraded_val(on_force,upgrade_level) - - -/obj/item/melee/trick_weapon/attack(mob/target, mob/living/user, params) //our weapon does 25% less damage on non monsters - var/old_force = force - if(!(target.mind?.has_antag_datum(/datum/antagonist/changeling)) && !IS_BLOODSUCKER(target) && !IS_HERETIC(target)) - force = force * 0.75 - ..() - force = old_force - -/obj/item/melee/trick_weapon/darkmoon - name = "Darkmoon Greatsword" - base_name = "Darkmoon Greatsword" - desc = "Ahh my guiding moonlight, you were by my side all along." - icon_state = "darkmoon" - inhand_icon_state = "darkmoon_hilt" - w_class = WEIGHT_CLASS_SMALL - block_chance = 20 - on_force = 20 - base_force = 17 - light_system = OVERLAY_LIGHT - light_color = "#59b3c9" - light_outer_range = 2 - light_power = 2 - light_on = FALSE - throwforce = 12 - damtype = BURN - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") - attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - ///ready to launch a beam attack? - COOLDOWN_DECLARE(moonbeam_fire) - - -/obj/item/melee/trick_weapon/darkmoon/Initialize(mapload) - . = ..() - force = base_force - AddComponent(/datum/component/transforming, \ - force_on = on_force , \ - throwforce_on = 20, \ - throw_speed_on = throw_speed, \ - sharpness_on = SHARP_EDGED, \ - w_class_on = WEIGHT_CLASS_BULKY) - RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) - RegisterSignal(src, WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) - - - -/obj/item/melee/trick_weapon/darkmoon/proc/on_transform(obj/item/source, mob/user, active) - SIGNAL_HANDLER - balloon_alert(user, active ? "extended" : "collapsed") - if(active) - playsound(src, 'monkestation/sound/bloodsuckers/moonlightsword.ogg',50) - inhand_icon_state = active ? "darkmoon" : "darkmoon_hilt" - enabled = active - set_light_on(active) - force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) - return COMPONENT_NO_DEFAULT_MESSAGE - - -/obj/item/melee/trick_weapon/darkmoon/attack_secondary(atom/target, mob/living/user, clickparams) - return SECONDARY_ATTACK_CONTINUE_CHAIN - -/obj/item/melee/trick_weapon/darkmoon/afterattack_secondary(atom/target, mob/living/user, clickparams) - if(!enabled) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(!COOLDOWN_FINISHED(src, moonbeam_fire)) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - if(target == user) - balloon_alert(user, "can't aim at yourself!") - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - fire_moonbeam(target, user, clickparams) - user.changeNext_move(CLICK_CD_MELEE) - COOLDOWN_START(src, moonbeam_fire, 4 SECONDS) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN - -/obj/item/melee/trick_weapon/darkmoon/proc/fire_moonbeam(atom/target, mob/living/user, clickparams) - var/modifiers = params2list(clickparams) - var/turf/proj_turf = user.loc - if(!isturf(proj_turf)) - return - var/obj/projectile/moonbeam/moon = new(proj_turf) - moon.preparePixelProjectile(target, user, modifiers) - moon.firer = user - playsound(src, 'monkestation/sound/bloodsuckers/moonlightbeam.ogg',50) - moon.fire() - - -/obj/projectile/moonbeam - name = "Moonlight" - icon = 'icons/effects/effects.dmi' - icon_state = "plasmasoul" - damage = 25 - light_system = OVERLAY_LIGHT - light_outer_range = 2 - light_power = 1 - light_color = "#44acb1" - damage_type = BURN - hitsound = 'sound/weapons/sear.ogg' - hitsound_wall = 'sound/weapons/effects/searwall.ogg' - - - -/obj/item/melee/trick_weapon/threaded_cane - name = "Threaded Cane" - base_name = "Threaded Cane" - desc = "A blind man's whip." - icon_state = "threaded_cane" - inhand_icon_state = "threaded_cane" - w_class = WEIGHT_CLASS_SMALL - block_chance = 20 - on_force = 15 - base_force = 18 - throwforce = 12 - reach = 1 - hitsound = 'sound/weapons/bladeslice.ogg' - damtype = BURN - attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") - attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - - -/obj/item/melee/trick_weapon/threaded_cane/Initialize(mapload) - . = ..() - force = base_force - AddComponent(/datum/component/transforming, \ - force_on = on_force, \ - throwforce_on = 10, \ - throw_speed_on = throw_speed, \ - sharpness_on = SHARP_EDGED, \ - w_class_on = WEIGHT_CLASS_BULKY) - RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) - RegisterSignal(src,WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) - - - -/obj/item/melee/trick_weapon/threaded_cane/proc/on_transform(obj/item/source, mob/user, active) - SIGNAL_HANDLER - balloon_alert(user, active ? "extended" : "collapsed") - inhand_icon_state = active ? "chain" : "threaded_cane" - if(active) - playsound(src,'sound/magic/clockwork/fellowship_armory.ogg',50) - reach = active ? 2 : 1 - enabled = active - force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) - return COMPONENT_NO_DEFAULT_MESSAGE - - -/obj/item/melee/trick_weapon/hunter_axe - name = "Hunter's Axe" - base_name = "Hunter's Axe" - desc = "A brute's tool of choice." - icon_state = "hunteraxe0" - base_icon_state = "hunteraxe" - w_class = WEIGHT_CLASS_SMALL - block_chance = 20 - base_force = 20 - on_force = 25 - throwforce = 12 - reach = 1 - hitsound = 'sound/weapons/bladeslice.ogg' - damtype = BURN - attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") - attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") - - - -/obj/item/melee/trick_weapon/hunter_axe/Initialize(mapload) - . = ..() - force = base_force - AddComponent(/datum/component/two_handed, \ - force_unwielded=base_force, \ - force_wielded= on_force, \ - icon_wielded="[base_icon_state]1", \ - wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ - unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ - ) - RegisterSignal(src, WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) - -/obj/item/melee/trick_weapon/hunter_axe/upgrade_weapon() - - upgrade_level++ - var/datum/component/two_handed/handed = GetComponent(/datum/component/two_handed) - handed.force_wielded = upgraded_val(on_force, upgrade_level) - handed.force_unwielded = upgraded_val(base_force,upgrade_level) - force = handed.force_unwielded - -/obj/item/melee/trick_weapon/hunter_axe/update_icon_state() - icon_state = "[base_icon_state]0" - playsound(src,'sound/magic/clockwork/fellowship_armory.ogg',50) - return ..() - -/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield(obj/item/source) - enabled = TRUE - block_chance = 75 - -/obj/item/melee/trick_weapon/hunter_axe/proc/on_unwield(obj/item/source) - enabled = FALSE - block_chance = 20 - -/obj/item/melee/trick_weapon/beast_claw - name = "\improper Beast Claw" - base_name = "\improper Beast Claw" - desc = "The bones seem to still be twitching." - icon_state = "Bone_Claw" - base_icon_state = "Claw" - w_class = WEIGHT_CLASS_SMALL - block_chance = 20 - base_force = 18 - on_force = 23 - throwforce = 10 - wound_bonus = 25 - bare_wound_bonus = 35 - demolition_mod = 1.5 //ripping through doors and windows should be a little easier with a claw shouldnt it? - sharpness = SHARP_EDGED - hitsound = 'sound/weapons/fwoosh.ogg' - damtype = BRUTE //why can i not make things do wounds i want - attack_verb_continuous = list("rips", "claws", "gashes", "tears", "lacerates", "dices", "cuts", "attacks") - attack_verb_simple = list("rip", "claw", "gash", "tear", "lacerate", "dice", "cut", "attack" ) - -/obj/item/melee/trick_weapon/beast_claw/Initialize(mapload) - . = ..() - force = base_force - AddComponent(/datum/component/transforming, \ - force_on = on_force, \ - w_class_on = WEIGHT_CLASS_BULKY) - RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) - RegisterSignal(src,WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) - -/obj/item/melee/trick_weapon/beast_claw/proc/on_transform(obj/item/source, mob/user, active) - SIGNAL_HANDLER - balloon_alert(user, active ? "extended" : "collapsed") - inhand_icon_state = active ? "Claw" : "BoneClaw" - if(active) - playsound(src, 'sound/weapons/fwoosh.ogg',50) - enabled = active - active = wound_bonus ? 45 : initial(wound_bonus) - force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) - return COMPONENT_NO_DEFAULT_MESSAGE - -/obj/item/rabbit_eye - name = "Rabbit eye" - desc = "An item that resonates with trick weapons." - icon_state = "rabbit_eye" - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - -/obj/item/rabbit_eye/proc/upgrade(obj/item/melee/trick_weapon/killer, mob/user) - if(killer.upgrade_level >= 3) - user.balloon_alert(user, "Already at maximum upgrade!") - return - if(killer.enabled) - user.balloon_alert(user, "Weapon must be in base form!") - return - SEND_SIGNAL(killer,WEAPON_UPGRADE) - killer.name = "[killer.base_name] +[killer.upgrade_level]" - balloon_alert(user, "[src] crumbles away...") - playsound(src, 'monkestation/sound/bloodsuckers/weaponsmithing.ogg', 50) - qdel(src) - -/obj/item/gun/ballistic/revolver/hunter_revolver - name = "\improper Hunter's Revolver" - desc = "Does minimal damage but slows down the enemy." - icon_state = "revolver" - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - mag_type = /obj/item/ammo_box/magazine/internal/cylinder/bloodsilver - initial_caliber = CALIBER_BLOODSILVER - -/datum/movespeed_modifier/silver_bullet - movetypes = GROUND - multiplicative_slowdown = 4 - flags = IGNORE_NOSLOW - - -/obj/item/ammo_box/magazine/internal/cylinder/bloodsilver - name = "detective revolver cylinder" - ammo_type = /obj/item/ammo_casing/silver - caliber = CALIBER_BLOODSILVER - max_ammo = 2 - -/obj/item/ammo_casing/silver - name = "Bloodsilver casing" - desc = "A Bloodsilver bullet casing." - icon_state = "bloodsilver" - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - projectile_type = /obj/projectile/bullet/bloodsilver - caliber = CALIBER_BLOODSILVER - - -/obj/projectile/bullet/bloodsilver - name = "Bloodsilver bullet" - damage = 3 - ricochets_max = 4 - -/obj/projectile/bullet/bloodsilver/on_hit(atom/target, blocked = 0, pierce_hit) - . = ..() - if(!iscarbon(target)) - return - var/mob/living/carbon/man = target - if(!man) - return - if(man.has_movespeed_modifier(/datum/movespeed_modifier/silver_bullet)) - return - if(!IS_HERETIC(man) && !(IS_BLOODSUCKER(man)) && !(man.mind.has_antag_datum(/datum/antagonist/changeling))) - return - man.add_movespeed_modifier(/datum/movespeed_modifier/silver_bullet) - if(!(man.has_movespeed_modifier(/datum/movespeed_modifier/silver_bullet))) - return - addtimer(CALLBACK(man, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/silver_bullet), 8 SECONDS) - -/obj/structure/rack/weaponsmith - name = "Weapon Forge" - desc = "Fueled by the tears of rabbits." - icon = 'icons/obj/cult/structures.dmi' - icon_state = "altar" - resistance_flags = INDESTRUCTIBLE - -/obj/structure/rack/weaponsmith/attackby(obj/item/organ, mob/living/user, params) - if(!istype(organ, /obj/item/rabbit_eye)) - return ..() - var/obj/item/rabbit_eye/eye = organ - var/obj/item/melee/trick_weapon/tool - for(var/obj/item/weapon in src.loc.contents) - if(!istype(weapon, /obj/item/melee/trick_weapon)) - continue - tool = weapon - break - if(!tool) - to_chat(user, span_warning ("Place your weapon upon the table before upgrading it!")) - return - eye.upgrade(tool,user) - - -/obj/item/clothing/mask/cursed_rabbit - name = "Damned Rabbit Mask" - desc = "Slip into the wonderland." - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - icon_state = "rabbit_mask" - worn_icon = 'monkestation/icons/bloodsuckers/worn_mask.dmi' - worn_icon_state = "rabbit_mask" - clothing_flags = SNUG_FIT - flags_inv = HIDEFACE|HIDEFACIALHAIR|HIDESNOUT - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - flash_protect = FLASH_PROTECTION_WELDER - ///the paradox rabbit ability - var/datum/action/cooldown/paradox/paradox - ///teleporting to the wonderland - var/datum/action/cooldown/wonderland_drop/wonderland - - -/obj/item/clothing/mask/cursed_rabbit/Initialize(mapload) - . = ..() - generate_abilities() - - -/obj/item/clothing/mask/cursed_rabbit/proc/generate_abilities() - var/datum/action/cooldown/paradox/para = new - if(!para.landmark || !para.chessmark) - return - paradox = para - var/datum/action/cooldown/wonderland_drop/drop = new - if(!drop.landmark) - return - wonderland = drop - - -/obj/item/clothing/mask/cursed_rabbit/equipped(mob/living/carbon/human/user,slot) - ..() - if(!paradox) - return - if(!wonderland) - return - if(!(slot & ITEM_SLOT_MASK)) - return - if(!IS_MONSTERHUNTER(user)) - return - paradox.Grant(user) - wonderland.Grant(user) - - -/obj/item/clothing/mask/cursed_rabbit/dropped(mob/user) - . = ..() - if(!paradox) - return - if(paradox.owner != user) - return - paradox.Remove(user) - if(!wonderland) - return - if(wonderland.owner != user) - return - wonderland.Remove(user) - -/obj/item/rabbit_locator - name = "Accursed Red Queen card" - desc = "Hunts down the white rabbits." - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - icon_state = "locator" - w_class = WEIGHT_CLASS_SMALL - ///the hunter the card is tied too - var/datum/antagonist/monsterhunter/hunter - ///cooldown for the locator - var/cooldown = TRUE - - COOLDOWN_DECLARE(locator_timer) - - -/obj/item/rabbit_locator/Initialize(mapload, datum/antagonist/monsterhunter/killer) - . = ..() - if(!killer) - return - hunter = killer - hunter.locator = src - -/obj/item/rabbit_locator/attack_self(mob/user, modifiers) - if (!COOLDOWN_FINISHED(src, locator_timer)) - return - if(!cooldown) - return - if(!hunter) - to_chat(user,span_warning("It's just a normal playing card!")) - return - if(hunter.owner.current != user) - to_chat(user,span_warning("It's just a normal playing card!")) - return - if(!is_station_level(user.loc.z)) - to_chat(user,span_warning("The card cannot be used here...")) - return - var/distance = get_minimum_distance(user) - var/sound_value - if(distance >= 50) - sound_value = 0 - to_chat(user,span_warning("Too far away...")) - if(distance >= 40 && distance < 50) - sound_value = 20 - to_chat(user,span_warning("You feel the slightest hint...")) - if(distance >=30 && distance < 40) - sound_value = 40 - to_chat(user,span_warning("You feel a mild hint...")) - if(distance >=20 && distance < 30) - sound_value = 60 - to_chat(user,span_warning("You feel a strong hint...")) - if(distance >= 10 && distance < 20) - sound_value = 80 - to_chat(user,span_warning("You feel a VERY strong hint...")) - if(distance < 10) - sound_value = 100 - to_chat(user,span_warning("Here...its definitely here!")) - user.playsound_local(src, 'monkestation/sound/bloodsuckers/rabbitlocator.ogg',sound_value) - COOLDOWN_START(src, locator_timer, 7 SECONDS) - -/obj/item/rabbit_locator/proc/get_minimum_distance(mob/user) - var/dist=1000 - if(!hunter) - return - if(!hunter.rabbits.len) - return - var/obj/effect/selected_bunny - for(var/obj/effect/located as anything in hunter.rabbits) - if(get_dist(user,located) < dist) - dist = get_dist(user,located) - selected_bunny = located - var/z_difference = abs(selected_bunny.z - user.z) - if(dist < 50 && z_difference != 0) - to_chat(user,span_warning("[z_difference] [z_difference == 1 ? "floor" : "floors"] [selected_bunny.z > user.z ? "above" : "below"]...")) - return dist - -/obj/item/rabbit_locator/Destroy() - if(hunter) - hunter.locator = null - hunter = null - return ..() - -/obj/item/grenade/jack - name = "jack in the bomb" - desc = "Best kids' toy" - w_class = WEIGHT_CLASS_SMALL - icon = 'monkestation/icons/bloodsuckers/weapons.dmi' - icon_state = "jack_in_the_bomb" - inhand_icon_state = "flashbang" - worn_icon_state = "grenade" - det_time = 12 SECONDS - ex_dev = 1 - ex_heavy = 2 - ex_light = 4 - ex_flame = 2 - - - -/obj/item/grenade/jack/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 60) - log_grenade(user) //Inbuilt admin procs already handle null users - if(user) - add_fingerprint(user) - if(msg) - to_chat(user, span_warning("You prime [src]! [capitalize(DisplayTimeText(det_time))]!")) - playsound(src, 'monkestation/sound/bloodsuckers/jackinthebomb.ogg', volume, TRUE) - if(istype(user)) - user.add_mob_memory(/datum/memory/bomb_planted, protagonist = user, antagonist = src) - active = TRUE - icon_state = initial(icon_state) + "_active" - SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride) - addtimer(CALLBACK(src, PROC_REF(detonate)), isnull(delayoverride)? det_time : delayoverride) - - -/obj/item/grenade/jack/detonate(mob/living/lanced_by) - if (dud_flags) - active = FALSE - update_appearance() - return FALSE - - dud_flags |= GRENADE_USED // Don't detonate if we have already detonated. - icon_state = "jack_in_the_bomb_live" - addtimer(CALLBACK(src, PROC_REF(exploding)), 1 SECONDS) - - -/obj/item/grenade/jack/proc/exploding(mob/living/lanced_by) - SEND_SIGNAL(src, COMSIG_GRENADE_DETONATE, lanced_by) - explosion(src, ex_dev, ex_heavy, ex_light, ex_flame) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/hunting_contracts.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/hunting_contracts.dm index 56c65b67f242..48e2edf69067 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/hunting_contracts.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/hunting_contracts.dm @@ -4,6 +4,7 @@ icon = 'icons/obj/wizard.dmi' icon_state = "scroll2" w_class = WEIGHT_CLASS_SMALL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF ///have we claimed our weapon? var/bought = FALSE ///the datum containing all weapons @@ -24,13 +25,18 @@ /obj/item/hunting_contract/ui_interact(mob/living/user, datum/tgui/ui) if(!IS_MONSTERHUNTER(user)) - to_chat(usr, span_notice("You are unable to decipher the symbols.")) + to_chat(user, span_notice("You are unable to decipher the symbols.")) return ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "HunterContract", name) ui.open() +/obj/item/hunting_contract/ui_status(mob/user) + if(isliving(user) && !IS_MONSTERHUNTER(user)) + return UI_CLOSE + return ..() + /obj/item/hunting_contract/ui_data(mob/user) var/list/data = list() data["bought"] = bought @@ -39,22 +45,22 @@ if(weapons.len) for(var/datum/hunter_weapons/contraband as anything in weapons) data["items"] += list(list( - "id" = contraband.type, - "name" = contraband.name, - "desc" = contraband.desc, + "id" = contraband.type, + "name" = contraband.name, + "desc" = contraband.desc )) var/check_completed = TRUE ///determines if all objectives have been completed if(owner) for(var/datum/objective/obj as anything in owner.objectives) data["objectives"] += list(list( - "explanation" = obj.explanation_text, - "completed" = (obj.check_completion()), + "explanation" = obj.explanation_text, + "completed" = (obj.check_completion()) )) - if(!(obj.check_completion())) + if(!obj.check_completion()) check_completed = FALSE data["all_completed"] = check_completed data["number_of_rabbits"] = owner.rabbits_spotted - data["rabbits_found"] = !(owner.rabbits.len) + data["rabbits_found"] = !length(owner.rabbits) data["used_up"] = used_up return data @@ -73,8 +79,9 @@ if("claim_reward") if(used_up) return - if(!is_station_level(loc.z)) - to_chat(usr,span_warning("The pull of the ice moon isn't strong enough here....")) + var/turf/current_turf = get_turf(src) + if(!is_station_level(current_turf.z)) + to_chat(usr, span_warning("The pull of the ice moon isn't strong enough here...")) return SEND_SIGNAL(owner, COMSIG_BEASTIFY) used_up = TRUE @@ -95,8 +102,8 @@ podspawn(list( "target" = get_turf(user), "style" = STYLE_SYNDICATE, - "spawn" = purchased, - )) + "spawn" = purchased + )) /obj/item/hunting_contract/Destroy() owner = null @@ -112,18 +119,17 @@ var/item /datum/hunter_weapons/threaded_cane - name = "Threaded cane" + name = "Threaded Cane" desc = "cane made out of heavy metal, can transform into a whip to strike foes from afar." item = /obj/item/melee/trick_weapon/threaded_cane - /datum/hunter_weapons/hunter_axe - name = "Hunter's axe" + name = "Hunter's Axe" desc = "simple axe for hunters that lean towards barbarian tactics, can transform into a double bladed axe." item = /obj/item/melee/trick_weapon/hunter_axe /datum/hunter_weapons/darkmoon_greatsword - name = "Darkmoon greatsword" + name = "Darkmoon Greatsword" desc = "a heavy sword hilt that would knock anyone out cold, can transform into the darkmoonlight greatsword. " item = /obj/item/melee/trick_weapon/darkmoon diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/killer_rabbits.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/killer_rabbits.dm index bd903199cb33..0e380d208435 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/killer_rabbits.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/killer_rabbits.dm @@ -15,6 +15,7 @@ /mob/living/basic/killer_rabbit/Initialize(mapload) . = ..() + AddComponent(/datum/component/anti_magic, ALL) RegisterSignal(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(hostile_attackingtarget)) /mob/living/basic/killer_rabbit/proc/hostile_attackingtarget(mob/living/basic/source, atom/target, success) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_effects/white_rabbit.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_effects/white_rabbit.dm index 67272787e828..f8b66536f8f2 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_effects/white_rabbit.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_effects/white_rabbit.dm @@ -40,11 +40,11 @@ /obj/effect/client_image_holder/white_rabbit/proc/spotted(datum/source, mob/user) SIGNAL_HANDLER - new /obj/item/rabbit_eye(loc) + new /obj/item/rabbit_eye(drop_location()) if(hunter?.rabbits_spotted == 0) //our first bunny - new /obj/item/clothing/mask/cursed_rabbit(loc) + new /obj/item/clothing/mask/cursed_rabbit(drop_location()) if(drop_gun) - new /obj/item/gun/ballistic/revolver/hunter_revolver(loc) + new /obj/item/gun/ballistic/revolver/hunter_revolver(drop_location()) var/datum/action/cooldown/spell/conjure_item/blood_silver/silverblood = new(user) silverblood.StartCooldown() silverblood.Grant(user) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_powers/killer_rabbit_powers.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_powers/killer_rabbit_powers.dm index 9aa24472ac46..cc80878a0dc5 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_powers/killer_rabbit_powers.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/monster_powers/killer_rabbit_powers.dm @@ -16,7 +16,7 @@ . = ..() StartCooldown(360 SECONDS, 360 SECONDS) for(var/i in 1 to 3) - var/mob/living/basic/killer_rabbit/rabbit = new(owner.loc) + var/mob/living/basic/killer_rabbit/rabbit = new(owner.drop_location()) rabbit.faction = owner.faction.Copy() StartCooldown() diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/red_rabbit.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/red_rabbit.dm index 5064e5604ae8..5451529583a4 100644 --- a/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/red_rabbit.dm +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/monsters/red_rabbit.dm @@ -44,6 +44,7 @@ /mob/living/basic/red_rabbit/Initialize(mapload) . = ..() + AddComponent(/datum/component/anti_magic, ALL) AddElement(/datum/element/footstep, FOOTSTEP_MOB_HEAVY) hole_power = new rabbit_power = new diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/tools/bnuuy_mask.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/bnuuy_mask.dm new file mode 100644 index 000000000000..d97112fab4bd --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/bnuuy_mask.dm @@ -0,0 +1,54 @@ +/obj/item/clothing/mask/cursed_rabbit + name = "Damned Rabbit Mask" + desc = "Slip into the wonderland." + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + icon_state = "rabbit_mask" + worn_icon = 'monkestation/icons/bloodsuckers/worn_mask.dmi' + worn_icon_state = "rabbit_mask" + clothing_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS | GAS_FILTERING | SNUG_FIT + flags_inv = HIDEFACE | HIDEFACIALHAIR | HIDESNOUT + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flash_protect = FLASH_PROTECTION_WELDER + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + ///the paradox rabbit ability + var/datum/action/cooldown/paradox/paradox + ///teleporting to the wonderland + var/datum/action/cooldown/wonderland_drop/wonderland + +/obj/item/clothing/mask/cursed_rabbit/Initialize(mapload) + . = ..() + paradox = new + wonderland = new + +/obj/item/clothing/mask/cursed_rabbit/equipped(mob/living/carbon/human/user, slot) + . = ..() + if(!ishuman(user) || !(slot & ITEM_SLOT_MASK) || !IS_MONSTERHUNTER(user)) + return + paradox?.Grant(user) + wonderland?.Grant(user) + user.apply_status_effect(/datum/status_effect/bnuuy_mask) + +/obj/item/clothing/mask/cursed_rabbit/dropped(mob/living/user) + . = ..() + paradox?.Remove(user) + wonderland?.Remove(user) + user.remove_status_effect(/datum/status_effect/bnuuy_mask) + +/datum/status_effect/bnuuy_mask + id = "bnuuy_mask" + alert_type = null + tick_interval = -1 + var/datum/component/glitching_state/wondershift + +/datum/status_effect/bnuuy_mask/on_apply() + . = ..() + if(!ishuman(owner) || !IS_MONSTERHUNTER(owner) || !istype(owner.get_item_by_slot(ITEM_SLOT_MASK), /obj/item/clothing/mask/cursed_rabbit)) + return FALSE + wondershift = owner.AddComponent(/datum/component/glitching_state) + +/datum/status_effect/bnuuy_mask/on_remove() + . = ..() + QDEL_NULL(wondershift) + +/datum/status_effect/bnuuy_mask/get_examine_text() + return span_warning("[owner.p_they(TRUE)] seem[owner.p_s()] out-of-place, as if [owner.p_they()] were partially detached from reality.") diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/tools/jack_bomb.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/jack_bomb.dm new file mode 100644 index 000000000000..e26cbefc9775 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/jack_bomb.dm @@ -0,0 +1,48 @@ +/obj/item/grenade/jack + name = "jack in the bomb" + desc = "Best kids' toy" + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + icon_state = "jack_in_the_bomb" + inhand_icon_state = "flashbang" + worn_icon_state = "grenade" + w_class = WEIGHT_CLASS_SMALL + det_time = 12 SECONDS + ex_dev = 1 + ex_heavy = 2 + ex_light = 4 + ex_flame = 2 + +/obj/item/grenade/jack/arm_grenade(mob/user, delayoverride, msg = TRUE, volume = 60) + log_grenade(user) //Inbuilt admin procs already handle null users + if(user) + add_fingerprint(user) + if(msg) + user.balloon_alert(user, "primed [src]!") + to_chat(user, span_warning("You prime [src]! [capitalize(DisplayTimeText(det_time))]!")) + playsound(src, 'monkestation/sound/bloodsuckers/jackinthebomb.ogg', volume, vary = TRUE) + if(istype(user)) + user.add_mob_memory(/datum/memory/bomb_planted, protagonist = user, antagonist = src) + active = TRUE + icon_state = "jack_in_the_bomb_active" + SEND_SIGNAL(src, COMSIG_GRENADE_ARMED, det_time, delayoverride) + addtimer(CALLBACK(src, PROC_REF(detonate)), isnull(delayoverride) ? det_time : delayoverride) + +/obj/item/grenade/jack/detonate(mob/living/lanced_by) + if (dud_flags) + active = FALSE + update_appearance() + return FALSE + dud_flags |= GRENADE_USED // Don't detonate if we have already detonated. + icon_state = "jack_in_the_bomb_live" + addtimer(CALLBACK(src, PROC_REF(exploding)), 1 SECONDS) + +/obj/item/grenade/jack/botch_check(mob/living/carbon/human/user) + if(!IS_MONSTERHUNTER(user)) + to_chat(user, span_danger("You can't begin to comprehend how to properly arm [src], it's as if it were designed by madmen!")) + arm_grenade(user, 0.5 SECONDS, FALSE) + return TRUE + return ..() + +/obj/item/grenade/jack/proc/exploding(mob/living/lanced_by) + SEND_SIGNAL(src, COMSIG_GRENADE_DETONATE, lanced_by) + explosion(src, ex_dev, ex_heavy, ex_light, ex_flame) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_eye.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_eye.dm new file mode 100644 index 000000000000..b989debbe21f --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_eye.dm @@ -0,0 +1,20 @@ +/obj/item/rabbit_eye + name = "Rabbit Eye" + desc = "An item that resonates with trick weapons." + icon_state = "rabbit_eye" + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + w_class = WEIGHT_CLASS_SMALL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/rabbit_eye/proc/upgrade(obj/item/melee/trick_weapon/weapon, mob/user) + if(weapon.upgrade_level >= 3) + user.balloon_alert(user, "already fully upgraded!") + return + if(weapon.enabled) + user.balloon_alert(user, "weapon must be in base form!") + return + SEND_SIGNAL(weapon, WEAPON_UPGRADE) + weapon.name = "[weapon.base_name] +[weapon.upgrade_level]" + balloon_alert(user, "[src] crumbles away...") + playsound(src, 'monkestation/sound/bloodsuckers/weaponsmithing.ogg', vol = 50) + qdel(src) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_locator.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_locator.dm new file mode 100644 index 000000000000..4c47a010ff2e --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/rabbit_locator.dm @@ -0,0 +1,78 @@ +/obj/item/rabbit_locator + name = "Accursed Red Queen card" + desc = "Hunts down the white rabbits.\nThis does NOT track down monster targets, it tracks down the rabbits you must collect." + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + icon_state = "locator" + w_class = WEIGHT_CLASS_SMALL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + ///the hunter the card is tied too + var/datum/antagonist/monsterhunter/hunter + COOLDOWN_DECLARE(locator_timer) + +/obj/item/rabbit_locator/Initialize(mapload, datum/antagonist/monsterhunter/owner) + . = ..() + if(!QDELETED(owner)) + hunter = owner + hunter.locator = src + +/obj/item/rabbit_locator/Destroy() + if(hunter?.locator == src) + hunter.locator = null + return ..() + +/obj/item/rabbit_locator/attack_self(mob/user, modifiers) + if(!COOLDOWN_FINISHED(src, locator_timer)) + return + if(QDELETED(hunter)) + to_chat(user,span_warning("It's just a normal playing card!")) + return + if(hunter.owner.current != user) + to_chat(user,span_warning("It's just a normal playing card!")) + return + var/turf/user_turf = get_turf(user) + if(QDELETED(user_turf) || !is_station_level(user_turf.z)) + to_chat(user, span_warning("The card cannot be used here...")) + return + var/obj/effect/bnuuy = get_nearest_rabbit(user) + if(QDELETED(bnuuy)) + to_chat(user, span_warning("Can't feel any hints...")) + return + var/turf/bnuuy_turf = get_turf(bnuuy) + var/distance = get_dist(user_turf, bnuuy_turf) + var/sound_value + if(distance >= 50) + sound_value = 0 + to_chat(user,span_warning("Too far away...")) + if(distance >= 40 && distance < 50) + sound_value = 20 + to_chat(user,span_warning("You feel the slightest hint...")) + if(distance >=30 && distance < 40) + sound_value = 40 + to_chat(user,span_warning("You feel a mild hint...")) + if(distance >=20 && distance < 30) + sound_value = 60 + to_chat(user,span_warning("You feel a strong hint...")) + if(distance >= 10 && distance < 20) + sound_value = 80 + to_chat(user,span_warning("You feel a VERY strong hint...")) + if(distance < 10) + sound_value = 100 + to_chat(user, span_warning("Here... the white rabbit is definitely here!")) + user.playsound_local(bnuuy_turf, 'monkestation/sound/bloodsuckers/rabbitlocator.ogg', vol = sound_value, pressure_affected = FALSE) + COOLDOWN_START(src, locator_timer, 7 SECONDS) + +/obj/item/rabbit_locator/proc/get_nearest_rabbit(mob/user) + var/dist = 1000 + if(!length(hunter?.rabbits)) + return + var/obj/effect/selected_bunny + for(var/obj/effect/located as anything in hunter.rabbits) + if(get_dist(user, located) < dist) + dist = get_dist(user, located) + selected_bunny = located + if(QDELETED(selected_bunny)) + return + var/z_difference = abs(selected_bunny.z - user.z) + if(dist < 50 && z_difference != 0) + to_chat(user, span_warning("[z_difference] [z_difference == 1 ? "floor" : "floors"] [selected_bunny.z > user.z ? "above" : "below"]...")) + return selected_bunny diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/tools/weaponsmith.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/weaponsmith.dm new file mode 100644 index 000000000000..d19e61eb0224 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/tools/weaponsmith.dm @@ -0,0 +1,15 @@ +/obj/structure/rack/weaponsmith + name = "Weapon Forge" + desc = "Fueled by the tears of rabbits." + icon = 'icons/obj/cult/structures.dmi' + icon_state = "altar" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/structure/rack/weaponsmith/attackby(obj/item/rabbit_eye/eye, mob/living/user, params) + if(!istype(eye)) + return ..() + var/obj/item/melee/trick_weapon/tool = locate() in src.loc + if(QDELETED(tool)) + user.balloon_alert(user, "place weapon on table!") + return + eye.upgrade(tool, user) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/_trick_weapon.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/_trick_weapon.dm new file mode 100644 index 000000000000..35e0a5984a98 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/_trick_weapon.dm @@ -0,0 +1,31 @@ +/obj/item/melee/trick_weapon + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + lefthand_file = 'monkestation/icons/bloodsuckers/weapons_lefthand.dmi' + righthand_file = 'monkestation/icons/bloodsuckers/weapons_righthand.dmi' + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + ///upgrade level of the weapon + var/upgrade_level = 0 + ///base force when transformed + var/on_force + ///base force when in default state + var/base_force + ///default name of the weapon + var/base_name + ///is the weapon in its transformed state? + var/enabled = FALSE + ///wounding chance while on + var/on_wound_bonus + +/obj/item/melee/trick_weapon/proc/upgrade_weapon() + SIGNAL_HANDLER + upgrade_level++ + force = upgraded_val(base_force,upgrade_level) + var/datum/component/transforming/transform = GetComponent(/datum/component/transforming) + transform.force_on = upgraded_val(on_force,upgrade_level) + +/obj/item/melee/trick_weapon/attack(mob/target, mob/living/user, params) //our weapon does 25% less damage on non monsters + var/old_force = force + if(!is_monster_hunter_prey(target)) + force = round(force * 0.75) + . = ..() + force = old_force diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/beast_claw.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/beast_claw.dm new file mode 100644 index 000000000000..6a5431524864 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/beast_claw.dm @@ -0,0 +1,39 @@ +/obj/item/melee/trick_weapon/beast_claw + name = "\improper Beast Claw" + base_name = "\improper Beast Claw" + desc = "The bones seem to still be twitching." + icon_state = "Bone_Claw" + base_icon_state = "Claw" + w_class = WEIGHT_CLASS_SMALL + block_chance = 20 + base_force = 18 + on_force = 23 + throwforce = 10 + wound_bonus = 25 + bare_wound_bonus = 35 + demolition_mod = 1.5 //ripping through doors and windows should be a little easier with a claw shouldnt it? + sharpness = SHARP_EDGED + hitsound = 'sound/weapons/fwoosh.ogg' + damtype = BRUTE //why can i not make things do wounds i want + attack_verb_continuous = list("rips", "claws", "gashes", "tears", "lacerates", "dices", "cuts", "attacks") + attack_verb_simple = list("rip", "claw", "gash", "tear", "lacerate", "dice", "cut", "attack" ) + +/obj/item/melee/trick_weapon/beast_claw/Initialize(mapload) + . = ..() + force = base_force + AddComponent(/datum/component/transforming, \ + force_on = on_force, \ + w_class_on = WEIGHT_CLASS_BULKY) + RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + RegisterSignal(src,WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) + +/obj/item/melee/trick_weapon/beast_claw/proc/on_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + balloon_alert(user, active ? "extended" : "collapsed") + inhand_icon_state = active ? "Claw" : "BoneClaw" + if(active) + playsound(src, 'sound/weapons/fwoosh.ogg', vol = 50) + enabled = active + active = wound_bonus ? 45 : initial(wound_bonus) + force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) + return COMPONENT_NO_DEFAULT_MESSAGE diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/darkmoon.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/darkmoon.dm new file mode 100644 index 000000000000..02d588193801 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/darkmoon.dm @@ -0,0 +1,86 @@ +/obj/item/melee/trick_weapon/darkmoon + name = "Darkmoon Greatsword" + base_name = "Darkmoon Greatsword" + desc = "Ahh my guiding moonlight, you were by my side all along." + icon_state = "darkmoon" + inhand_icon_state = "darkmoon_hilt" + w_class = WEIGHT_CLASS_SMALL + block_chance = 20 + on_force = 20 + base_force = 17 + light_system = OVERLAY_LIGHT + light_color = "#59b3c9" + light_outer_range = 2 + light_power = 2 + light_on = FALSE + throwforce = 12 + damtype = BURN + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + ///ready to launch a beam attack? + COOLDOWN_DECLARE(moonbeam_fire) + +/obj/item/melee/trick_weapon/darkmoon/Initialize(mapload) + . = ..() + force = base_force + AddComponent(/datum/component/transforming, \ + force_on = on_force , \ + throwforce_on = 20, \ + throw_speed_on = throw_speed, \ + sharpness_on = SHARP_EDGED, \ + w_class_on = WEIGHT_CLASS_BULKY) + RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + RegisterSignal(src, WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) + + +/obj/item/melee/trick_weapon/darkmoon/proc/on_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + balloon_alert(user, active ? "extended" : "collapsed") + if(active) + playsound(src, 'monkestation/sound/bloodsuckers/moonlightsword.ogg', vol = 50) + inhand_icon_state = active ? "darkmoon" : "darkmoon_hilt" + enabled = active + set_light_on(active) + force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) + return COMPONENT_NO_DEFAULT_MESSAGE + +/obj/item/melee/trick_weapon/darkmoon/attack_secondary(atom/target, mob/living/user, clickparams) + return SECONDARY_ATTACK_CONTINUE_CHAIN + +/obj/item/melee/trick_weapon/darkmoon/afterattack_secondary(atom/target, mob/living/user, clickparams) + if(!enabled) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!COOLDOWN_FINISHED(src, moonbeam_fire)) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(target == user) + balloon_alert(user, "can't aim at yourself!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + fire_moonbeam(target, user, clickparams) + user.changeNext_move(CLICK_CD_MELEE) + COOLDOWN_START(src, moonbeam_fire, 4 SECONDS) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/obj/item/melee/trick_weapon/darkmoon/proc/fire_moonbeam(atom/target, mob/living/user, clickparams) + var/modifiers = params2list(clickparams) + var/turf/proj_turf = user.loc + if(!isturf(proj_turf)) + return + var/obj/projectile/moonbeam/moon = new(proj_turf) + moon.preparePixelProjectile(target, user, modifiers) + moon.firer = user + playsound(src, 'monkestation/sound/bloodsuckers/moonlightbeam.ogg', vol = 50) + moon.fire() + +/obj/projectile/moonbeam + name = "Moonlight" + icon = 'icons/effects/effects.dmi' + icon_state = "plasmasoul" + damage = 25 + light_system = OVERLAY_LIGHT + light_outer_range = 2 + light_power = 1 + light_color = "#44acb1" + damage_type = BURN + hitsound = 'sound/weapons/sear.ogg' + hitsound_wall = 'sound/weapons/effects/searwall.ogg' diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_axe.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_axe.dm new file mode 100644 index 000000000000..34ed8b93d9c9 --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_axe.dm @@ -0,0 +1,48 @@ +/obj/item/melee/trick_weapon/hunter_axe + name = "Hunter's Axe" + base_name = "Hunter's Axe" + desc = "A brute's tool of choice." + icon_state = "hunteraxe0" + base_icon_state = "hunteraxe" + w_class = WEIGHT_CLASS_SMALL + block_chance = 20 + base_force = 20 + on_force = 25 + throwforce = 12 + reach = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + damtype = BURN + attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + +/obj/item/melee/trick_weapon/hunter_axe/Initialize(mapload) + . = ..() + force = base_force + AddComponent(/datum/component/two_handed, \ + force_unwielded = base_force, \ + force_wielded= on_force, \ + icon_wielded = "[base_icon_state]1", \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + RegisterSignal(src, WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) + +/obj/item/melee/trick_weapon/hunter_axe/upgrade_weapon() + upgrade_level++ + var/datum/component/two_handed/handed = GetComponent(/datum/component/two_handed) + handed.force_wielded = upgraded_val(on_force, upgrade_level) + handed.force_unwielded = upgraded_val(base_force, upgrade_level) + force = handed.force_unwielded + +/obj/item/melee/trick_weapon/hunter_axe/update_icon_state() + icon_state = "[base_icon_state]0" + playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', vol = 50) + return ..() + +/obj/item/melee/trick_weapon/hunter_axe/proc/on_wield(obj/item/source) + enabled = TRUE + block_chance = 75 + +/obj/item/melee/trick_weapon/hunter_axe/proc/on_unwield(obj/item/source) + enabled = FALSE + block_chance = 20 diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_revolver.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_revolver.dm new file mode 100644 index 000000000000..934062cf62df --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/hunter_revolver.dm @@ -0,0 +1,40 @@ +/obj/item/gun/ballistic/revolver/hunter_revolver + name = "\improper Hunter's Revolver" + desc = "Does minimal damage but slows down the enemy." + icon_state = "revolver" + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + mag_type = /obj/item/ammo_box/magazine/internal/cylinder/bloodsilver + initial_caliber = CALIBER_BLOODSILVER + +/datum/movespeed_modifier/silver_bullet + movetypes = GROUND + multiplicative_slowdown = 4 + flags = IGNORE_NOSLOW + +/obj/item/ammo_box/magazine/internal/cylinder/bloodsilver + name = "detective revolver cylinder" + ammo_type = /obj/item/ammo_casing/silver + caliber = CALIBER_BLOODSILVER + max_ammo = 2 + +/obj/item/ammo_casing/silver + name = "Bloodsilver casing" + desc = "A Bloodsilver bullet casing." + icon_state = "bloodsilver" + icon = 'monkestation/icons/bloodsuckers/weapons.dmi' + projectile_type = /obj/projectile/bullet/bloodsilver + caliber = CALIBER_BLOODSILVER + +/obj/projectile/bullet/bloodsilver + name = "Bloodsilver bullet" + damage = 3 + ricochets_max = 4 + +/obj/projectile/bullet/bloodsilver/on_hit(mob/living/carbon/target, blocked = 0, pierce_hit) + . = ..() + if(!iscarbon(target) || QDELING(target) || target.has_movespeed_modifier(/datum/movespeed_modifier/silver_bullet) || !is_monster_hunter_prey(target)) + return + target.add_movespeed_modifier(/datum/movespeed_modifier/silver_bullet) + if(!(target.has_movespeed_modifier(/datum/movespeed_modifier/silver_bullet))) + return + addtimer(CALLBACK(target, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/silver_bullet), 8 SECONDS) diff --git a/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/threaded_cane.dm b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/threaded_cane.dm new file mode 100644 index 000000000000..37109222408f --- /dev/null +++ b/monkestation/code/modules/bloodsuckers/monster_hunters/weapons/threaded_cane.dm @@ -0,0 +1,39 @@ +/obj/item/melee/trick_weapon/threaded_cane + name = "Threaded Cane" + base_name = "Threaded Cane" + desc = "A blind man's whip." + icon_state = "threaded_cane" + inhand_icon_state = "threaded_cane" + w_class = WEIGHT_CLASS_SMALL + block_chance = 20 + on_force = 15 + base_force = 18 + throwforce = 12 + reach = 1 + hitsound = 'sound/weapons/bladeslice.ogg' + damtype = BURN + attack_verb_continuous = list("attacks", "slashes", "stabs", "slices", "tears", "lacerates", "rips", "dices", "cuts") + attack_verb_simple = list("attack", "slash", "stab", "slice", "tear", "lacerate", "rip", "dice", "cut") + +/obj/item/melee/trick_weapon/threaded_cane/Initialize(mapload) + . = ..() + force = base_force + AddComponent(/datum/component/transforming, \ + force_on = on_force, \ + throwforce_on = 10, \ + throw_speed_on = throw_speed, \ + sharpness_on = SHARP_EDGED, \ + w_class_on = WEIGHT_CLASS_BULKY) + RegisterSignal(src, COMSIG_TRANSFORMING_ON_TRANSFORM, PROC_REF(on_transform)) + RegisterSignal(src,WEAPON_UPGRADE, PROC_REF(upgrade_weapon)) + +/obj/item/melee/trick_weapon/threaded_cane/proc/on_transform(obj/item/source, mob/user, active) + SIGNAL_HANDLER + balloon_alert(user, active ? "extended" : "collapsed") + inhand_icon_state = active ? "chain" : "threaded_cane" + if(active) + playsound(src, 'sound/magic/clockwork/fellowship_armory.ogg', vol = 50) + reach = active ? 2 : 1 + enabled = active + force = active ? upgraded_val(on_force, upgrade_level) : upgraded_val(base_force, upgrade_level) + return COMPONENT_NO_DEFAULT_MESSAGE diff --git a/monkestation/code/modules/bloodsuckers/powers/feed.dm b/monkestation/code/modules/bloodsuckers/powers/feed.dm index d780f76d02ad..c8fb13fbc6fc 100644 --- a/monkestation/code/modules/bloodsuckers/powers/feed.dm +++ b/monkestation/code/modules/bloodsuckers/powers/feed.dm @@ -113,7 +113,7 @@ continue if(watchers.is_blind() || watchers.is_nearsighted_currently()) continue - if(IS_BLOODSUCKER(watchers) || IS_VASSAL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_BLOODSUCKER_HUNTER)) + if(IS_BLOODSUCKER(watchers) || IS_VASSAL(watchers) || HAS_TRAIT(watchers.mind, TRAIT_OCCULTIST)) continue owner.balloon_alert(owner, "feed noticed!") bloodsuckerdatum_power.give_masquerade_infraction() diff --git a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm index 0bcb6a479938..80d7ba933ee2 100644 --- a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm +++ b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_crypt.dm @@ -499,7 +499,7 @@ return for(var/mob/living/carbon/nearly_people in viewers(7, src)) /// We dont want Bloodsuckers or Vassals affected by this - if(IS_VASSAL(nearly_people) || IS_BLOODSUCKER(nearly_people)) + if(IS_VASSAL(nearly_people) || IS_BLOODSUCKER(nearly_people) || IS_MONSTERHUNTER(nearly_people)) continue nearly_people.adjust_hallucinations(5 SECONDS) nearly_people.add_mood_event("vampcandle", /datum/mood_event/vampcandle) diff --git a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_objects.dm b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_objects.dm index b1df993070f5..e0f079cf9e77 100644 --- a/monkestation/code/modules/bloodsuckers/structures/bloodsucker_objects.dm +++ b/monkestation/code/modules/bloodsuckers/structures/bloodsucker_objects.dm @@ -242,7 +242,7 @@ . = ..() if(!user.can_read(src) || in_use || (target == user) || !ismob(target)) return - if(!HAS_TRAIT(user.mind, TRAIT_BLOODSUCKER_HUNTER)) + if(!HAS_TRAIT(user.mind, TRAIT_OCCULTIST)) if(IS_BLOODSUCKER(user)) to_chat(user, span_notice("[src] seems to be too complicated for you. It would be best to leave this for someone else to take.")) return @@ -269,7 +269,7 @@ to_chat(user, span_notice("You fail to draw any conclusions to [target] being a Bloodsucker.")) /obj/item/book/kindred/attack_self(mob/living/user) - if(user.mind && !HAS_TRAIT(user.mind, TRAIT_BLOODSUCKER_HUNTER)) + if(user.mind && !HAS_TRAIT(user.mind, TRAIT_OCCULTIST)) if(IS_BLOODSUCKER(user)) to_chat(user, span_notice("[src] seems to be too complicated for you. It would be best to leave this for someone else to take.")) else diff --git a/monkestation/code/modules/clothing/suits/costume.dm b/monkestation/code/modules/clothing/suits/costume.dm index b3fc4c6f60a7..61e535e67052 100644 --- a/monkestation/code/modules/clothing/suits/costume.dm +++ b/monkestation/code/modules/clothing/suits/costume.dm @@ -101,4 +101,63 @@ /datum/store_item/suit/helldiverarmor name = "Helldiver Armor" item_path = /obj/item/clothing/suit/helldiverarmor - item_cost = 10000 \ No newline at end of file + item_cost = 10000 + +/obj/item/clothing/suit/hooded/ashsuit + name = "ashsuit suit" + desc = "Whoever controls the Plasma, controls the Spinward Sector." + icon_state = "ashsuit" + icon = 'monkestation/icons/obj/clothing/suits.dmi' + worn_icon = 'monkestation/icons/mob/clothing/suit.dmi' + inhand_icon_state = null + body_parts_covered = CHEST|GROIN|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + heat_protection = CHEST|GROIN|LEGS|ARMS + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + hoodtype = /obj/item/clothing/head/hooded/ashsuit + armor_type = /datum/armor/hooded_ashsuit + allowed = list( + /obj/item/flashlight, + /obj/item/gun/energy/recharge/kinetic_accelerator, + /obj/item/mining_scanner, + /obj/item/pickaxe, + /obj/item/resonator, + /obj/item/storage/bag/ore, + /obj/item/t_scanner/adv_mining_scanner, + /obj/item/tank/internals, + ) + resistance_flags = FIRE_PROOF + clothing_traits = list(TRAIT_SNOWSTORM_IMMUNE) + +/datum/armor/hooded_ashsuit + melee = 30 + bullet = 10 + laser = 10 + energy = 20 + bomb = 50 + fire = 50 + acid = 50 + +/obj/item/clothing/head/hooded/ashsuit + name = "ashsuit hood" + desc = "For covering your face when walking the ash dunes." + icon = 'monkestation/icons/obj/clothing/hats.dmi' + worn_icon = 'monkestation/icons/mob/clothing/head.dmi' + icon_state = "ashsuit" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + heat_protection = HEAD + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + armor_type = /datum/armor/hooded_explorer + resistance_flags = FIRE_PROOF + +/obj/item/clothing/suit/hooded/ashsuit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate) + +/obj/item/clothing/head/hooded/ashsuit/Initialize(mapload) + . = ..() + AddComponent(/datum/component/armor_plate) diff --git a/monkestation/code/modules/datums/components/glitching_state.dm b/monkestation/code/modules/datums/components/glitching_state.dm new file mode 100644 index 000000000000..976c7180ade0 --- /dev/null +++ b/monkestation/code/modules/datums/components/glitching_state.dm @@ -0,0 +1,51 @@ +/datum/component/glitching_state + var/count = 5 + var/list/obj/effect/after_image/after_images + +/datum/component/glitching_state/Initialize(count = 5) + . = ..() + var/atom/movable/movable = parent + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + src.after_images = list() + src.count = count + if(count > 1) + for(var/number = 1 to count) + var/obj/effect/after_image/added_image = new /obj/effect/after_image(null, time_a = 1, time_b = 5, finalized_alpha = 128 - 64 * (number - 1) / (count - 1)) + after_images += added_image + movable.vis_contents += added_image + added_image.active = TRUE + added_image.sync_with_parent(parent, actual_loc = FALSE) + else + var/obj/effect/after_image/added_image = new /obj/effect/after_image(null, time_a = 1, time_b = 5, finalized_alpha = 64) + after_images |= added_image + movable.vis_contents += added_image + added_image.active = TRUE + added_image.sync_with_parent(parent, actual_loc = FALSE) + + START_PROCESSING(SSobj, src) + +/datum/component/glitching_state/Destroy(force, silent) + STOP_PROCESSING(SSobj, src) + var/atom/movable/movable = parent + movable?.vis_contents -= after_images + QDEL_LIST(after_images) + return ..() + +/datum/component/glitching_state/RegisterWithParent() + . = ..() + RegisterSignal(parent, COMSIG_ATOM_DIR_CHANGE, PROC_REF(on_dir_change)) + +/datum/component/glitching_state/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, COMSIG_ATOM_DIR_CHANGE) + +/datum/component/glitching_state/process(seconds_per_tick) + for(var/obj/effect/after_image/image as anything in after_images) + image.sync_with_parent(parent, actual_loc = FALSE) + +/datum/component/glitching_state/proc/on_dir_change(datum/source, old_dir, new_dir) + SIGNAL_HANDLER + for(var/obj/effect/after_image/image as anything in after_images) + image.sync_with_parent(parent, actual_loc = FALSE, dir_override = new_dir) + diff --git a/monkestation/code/modules/datums/mood_events/generic_positive_events.dm b/monkestation/code/modules/datums/mood_events/generic_positive_events.dm index c6e60732859c..37f39c486364 100644 --- a/monkestation/code/modules/datums/mood_events/generic_positive_events.dm +++ b/monkestation/code/modules/datums/mood_events/generic_positive_events.dm @@ -5,3 +5,7 @@ /datum/mood_event/nanite_happiness/add_effects(message) description = "+++++++[message]+++++++" +/datum/mood_event/monster_hunter + description = "Glory to the hunt." + mood_change = 10 + hidden = TRUE diff --git a/monkestation/code/modules/guns/laser.dm b/monkestation/code/modules/guns/laser.dm new file mode 100644 index 000000000000..40468a54bb69 --- /dev/null +++ b/monkestation/code/modules/guns/laser.dm @@ -0,0 +1,2 @@ +/obj/item/gun/energy/laser/captain + ammo_type = list(/obj/item/ammo_casing/energy/laser/hellfire/antique, /obj/item/ammo_casing/energy/disabler) diff --git a/monkestation/code/modules/jobs/job_types/chaplain.dm b/monkestation/code/modules/jobs/job_types/chaplain.dm index 71e59f810752..b5a924f2d455 100644 --- a/monkestation/code/modules/jobs/job_types/chaplain.dm +++ b/monkestation/code/modules/jobs/job_types/chaplain.dm @@ -1,4 +1,4 @@ /datum/job/chaplain/after_spawn(mob/living/spawned, client/player_client) . = ..() if(spawned.mind) - ADD_TRAIT(spawned.mind, TRAIT_BLOODSUCKER_HUNTER, JOB_TRAIT) + ADD_TRAIT(spawned.mind, TRAIT_OCCULTIST, JOB_TRAIT) diff --git a/monkestation/code/modules/jobs/job_types/curator.dm b/monkestation/code/modules/jobs/job_types/curator.dm index 1748076be53f..08aaaea47b53 100644 --- a/monkestation/code/modules/jobs/job_types/curator.dm +++ b/monkestation/code/modules/jobs/job_types/curator.dm @@ -1,4 +1,4 @@ /datum/job/curator/after_spawn(mob/living/spawned, client/player_client) . = ..() if(spawned.mind) - ADD_TRAIT(spawned.mind, TRAIT_BLOODSUCKER_HUNTER, JOB_TRAIT) + ADD_TRAIT(spawned.mind, TRAIT_OCCULTIST, JOB_TRAIT) diff --git a/monkestation/code/modules/jobs/job_types/security_assistant.dm b/monkestation/code/modules/jobs/job_types/security_assistant.dm new file mode 100644 index 000000000000..57824251bdea --- /dev/null +++ b/monkestation/code/modules/jobs/job_types/security_assistant.dm @@ -0,0 +1,91 @@ +/datum/job/security_assistant + title = JOB_SECURITY_ASSISTANT + description = "Fine people for trivial things. Be an glorified hall monitor." + auto_deadmin_role_flags = DEADMIN_POSITION_SECURITY + department_head = list(JOB_HEAD_OF_SECURITY) + faction = FACTION_STATION + total_positions = 5 + spawn_positions = 5 + supervisors = "the Head of Security, the Warden, and any proper security officers" + minimal_player_age = 7 + exp_requirements = 300 + exp_required_type = EXP_TYPE_CREW + exp_granted_type = EXP_TYPE_CREW + config_tag = "SECURITY_ASSISTANT" + + outfit = /datum/outfit/job/security_assistant + plasmaman_outfit = /datum/outfit/plasmaman/security + + paycheck = PAYCHECK_CREW + paycheck_department = ACCOUNT_SEC + + liver_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) + + display_order = JOB_DISPLAY_ORDER_SECURITY_ASSISTANT + bounty_types = CIV_JOB_SEC + departments_list = list(/datum/job_department/security) + + family_heirlooms = list(/obj/item/book/manual/wiki/security_space_law, /obj/item/clothing/head/beret/sec) + + mail_goodies = list( + /obj/item/food/donut/caramel = 10, + /obj/item/food/donut/matcha = 10, + /obj/item/food/donut/blumpkin = 5 + ) + rpg_title = "Guard" + job_flags = JOB_ANNOUNCE_ARRIVAL | JOB_CREW_MANIFEST | JOB_EQUIP_RANK | JOB_CREW_MEMBER | JOB_NEW_PLAYER_JOINABLE | JOB_REOPEN_ON_ROUNDSTART_LOSS | JOB_ASSIGN_QUIRKS | JOB_CAN_BE_INTERN + + alt_titles = list( + "Security Assistant", + "Deputy", + "Hall Monitor", + "Assistant Officer", + "Professional Snitch" + ) + +/datum/outfit/job/security_assistant + name = "Security Assistant" + jobtype = /datum/job/security_assistant + + id_trim = /datum/id_trim/job/security_assistant + uniform = /obj/item/clothing/under/rank/security/officer/grey + backpack_contents = list( + /obj/item/restraints/handcuffs/cable/zipties = 1, + /obj/item/reagent_containers/spray/pepper = 1 + ) + belt = /obj/item/modular_computer/pda/security + ears = /obj/item/radio/headset/headset_sec + shoes = /obj/item/clothing/shoes/sneakers/black + l_pocket = /obj/item/citationinator + r_pocket = /obj/item/assembly/flash/handheld + glasses = /obj/item/clothing/glasses/hud/security + gloves = /obj/item/clothing/gloves/tackler/dolphin + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + + box = /obj/item/storage/box/survival/security + + implants = list(/obj/item/implant/mindshield) // i think this is stupid but this was apparently agreed upon ~lucy + +/datum/id_trim/job/security_assistant + assignment = "Security Assistant" + trim_state = "trim_secass" + department_color = COLOR_SECURITY_RED + subdepartment_color = COLOR_SECURITY_RED + sechud_icon_state = SECHUD_SECURITY_ASSISTANT + minimal_access = list( + ACCESS_BRIG_ENTRANCE, + ACCESS_SECURITY, + ACCESS_PERMABRIG + ) + extra_access = list( + ACCESS_MAINT_TUNNELS + ) + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ACCESS_HOS + ) + job = /datum/job/security_assistant diff --git a/monkestation/code/modules/mapping/access_helpers.dm b/monkestation/code/modules/mapping/access_helpers.dm index 6a7dac901dfa..e335d07792ce 100644 --- a/monkestation/code/modules/mapping/access_helpers.dm +++ b/monkestation/code/modules/mapping/access_helpers.dm @@ -27,3 +27,7 @@ /obj/effect/mapping_helpers/airlock/access/any/engineering/maintenance/west_offset offset_dir = WEST + +/obj/effect/mapping_helpers/airlock/access/any/security/permabrig/get_access() + . = ..() + . += list(ACCESS_PERMABRIG, ACCESS_BRIG) diff --git a/monkestation/code/modules/mob/living/emote.dm b/monkestation/code/modules/mob/living/emote.dm index 18d7dfec063b..0b135c2f56fa 100644 --- a/monkestation/code/modules/mob/living/emote.dm +++ b/monkestation/code/modules/mob/living/emote.dm @@ -227,3 +227,18 @@ return TRUE else return FALSE + +// The below function replaces the `/datum/emote/silicon/mob_type_allowed_typecache` variable. If +// you remove this function, be sure to replace the above variable. +/datum/emote/silicon/can_run_emote(mob/user, status_check, intentional) + // Silicons and simple bots can always use silicon emotes, assuming nothing else is wrong + if(issilicon(user) || isbot(user)) + return ..() + + // Allow users with synthetic voice boxes to use silicon emotes as well, because a synthetic + // voice box is more akin to a speaker than a human larynx. + var/tongue = user.get_organ_slot(ORGAN_SLOT_TONGUE) + if(istype(tongue, /obj/item/organ/internal/tongue/synth)) + return ..() + + return FALSE diff --git a/monkestation/code/modules/ranching/components/afterimage.dm b/monkestation/code/modules/ranching/components/afterimage.dm index eefbdf7d609b..900dedf8c6ab 100644 --- a/monkestation/code/modules/ranching/components/afterimage.dm +++ b/monkestation/code/modules/ranching/components/afterimage.dm @@ -1,7 +1,7 @@ /datum/component/after_image dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS var/rest_time - var/list/obj/after_image/after_images + var/list/obj/effect/after_image/after_images /datum/component/after_image/Initialize(count = 4, rest_time = 1) ..() @@ -11,11 +11,11 @@ src.after_images = list() if(count > 1) for(var/number = 1 to count) - var/obj/after_image/added_image = new /obj/after_image(null) + var/obj/effect/after_image/added_image = new /obj/effect/after_image(null) added_image.finalized_alpha = 200 - 100 * (number - 1) / (count - 1) after_images += added_image else - var/obj/after_image/added_image = new /obj/after_image(null) + var/obj/effect/after_image/added_image = new /obj/effect/after_image(null) added_image.finalized_alpha = 100 after_images |= added_image @@ -24,20 +24,20 @@ RegisterSignal(parent, COMSIG_MOVABLE_THROW_LANDED, PROC_REF(throw_landed)) /datum/component/after_image/RegisterWithParent() - for(var/obj/after_image/listed_image in src.after_images) + for(var/obj/effect/after_image/listed_image in src.after_images) listed_image.active = TRUE src.sync_after_images() /datum/component/after_image/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_MOVABLE_MOVED, COMSIG_ATOM_DIR_CHANGE, COMSIG_MOVABLE_THROW_LANDED)) - for(var/obj/after_image/listed_image in src.after_images) + for(var/obj/effect/after_image/listed_image in src.after_images) listed_image.active = FALSE qdel(listed_image) . = ..() /datum/component/after_image/Destroy() if(length(src.after_images)) - for(var/obj/after_image/listed_image in src.after_images) + for(var/obj/effect/after_image/listed_image in src.after_images) qdel(listed_image) src.after_images.Cut() src.after_images = null @@ -58,7 +58,7 @@ /datum/component/after_image/proc/sync_after_images(dir_override=null) set waitfor = FALSE - var/obj/after_image/targeted_image = new(null) + var/obj/effect/after_image/targeted_image = new(null) targeted_image.active = TRUE targeted_image.sync_with_parent(parent) targeted_image.loc = null @@ -66,44 +66,39 @@ targeted_image.setDir(dir_override) var/atom/movable/parent_am = parent var/atom/target_loc = parent_am.loc - for(var/obj/after_image/listed_image in src.after_images) + for(var/obj/effect/after_image/listed_image in src.after_images) sleep(src.rest_time) listed_image.sync_with_parent(targeted_image, target_loc) qdel(targeted_image) - - - - -/obj/after_image +/obj/effect/after_image mouse_opacity = FALSE anchored = 2 var/finalized_alpha = 100 var/appearance_ref = null var/active = FALSE -/obj/after_image/New() +/obj/effect/after_image/New(_loc, min_x = -3, max_x = 3, min_y = -3, max_y = 3, time_a = 0.5 SECONDS, time_b = 3 SECONDS, finalized_alpha = 100) . = ..() - animate(src, pixel_x=0, time=1, loop=-1) + src.finalized_alpha = finalized_alpha + animate(src, pixel_x=0, time=1, loop= -1) var/count = rand(5, 10) for(var/number = 1 to count) - var/time = 0.5 SECONDS + rand() * 3 SECONDS - var/pixel_x = number == count ? 0 : rand(-2, 2) - var/pixel_y = number == count ? 0 : rand(-2, 2) - animate(time = time, easing = pick(LINEAR_EASING, SINE_EASING, CIRCULAR_EASING, CUBIC_EASING), flags = ANIMATION_PARALLEL, pixel_x = pixel_x, pixel_y = pixel_y, loop =- 1) + var/time = time_a + rand() * time_b + var/pixel_x = number == count ? 0 : rand(min_x, max_y) + var/pixel_y = number == count ? 0 : rand(min_y, max_y) + animate(time = time, easing = pick(LINEAR_EASING, SINE_EASING, CIRCULAR_EASING, CUBIC_EASING), pixel_x = pixel_x, pixel_y = pixel_y, loop = -1) -/obj/after_image/proc/sync_with_parent(atom/movable/parent, loc_override=null) +/obj/effect/after_image/proc/sync_with_parent(atom/movable/parent, loc_override = null, actual_loc = TRUE, dir_override = null) if(!src.active) return src.name = parent.name src.desc = parent.desc src.glide_size = parent.glide_size - var/parent_appearance_ref = ref(parent.appearance) - if(istype(parent, /obj/after_image)) - var/obj/after_image/parent_after_image = parent + if(istype(parent, /obj/effect/after_image)) + var/obj/effect/after_image/parent_after_image = parent parent_appearance_ref = parent_after_image.appearance_ref - if(src.appearance_ref != parent_appearance_ref) src.appearance_ref = parent_appearance_ref src.appearance = parent.appearance @@ -111,15 +106,13 @@ src.plane = initial(src.plane) src.mouse_opacity = initial(src.mouse_opacity) src.anchored = initial(src.anchored) - var/atom/target_loc = loc_override ? loc_override : parent.loc - - if(target_loc != src.loc) + if(target_loc != src.loc && actual_loc) src.loc = target_loc + var/target_dir = isnull(dir_override) ? parent.dir : dir_override + if(src.dir != target_dir) + src.setDir(target_dir) - if(src.dir != parent.dir) - src.setDir(parent.dir) - -/obj/after_image/Destroy() +/obj/effect/after_image/Destroy() src.active = FALSE - . = ..() + return ..() diff --git a/monkestation/code/modules/security/code/citationinator.dm b/monkestation/code/modules/security/code/citationinator.dm new file mode 100644 index 000000000000..4d5d7baaf675 --- /dev/null +++ b/monkestation/code/modules/security/code/citationinator.dm @@ -0,0 +1,81 @@ +/obj/item/citationinator + name = "Citationinator" + desc = "A cheaply made plastic handheld doohickey, capable of issuing fines to ner-do-wells, and printing out a slip of paper with the details of the fine." + icon = 'monkestation/icons/obj/items/secass.dmi' + icon_state = "doohickey_closed" + inhand_icon_state = "doohickey" + worn_icon_state = "electronic" + lefthand_file = 'monkestation/icons/mob/inhands/equipment/secass_lefthand.dmi' + righthand_file = 'monkestation/icons/mob/inhands/equipment/secass_righthand.dmi' + w_class = WEIGHT_CLASS_SMALL + flags_1 = CONDUCT_1 + item_flags = NOBLUDGEON | NO_MAT_REDEMPTION + slot_flags = ITEM_SLOT_BELT + req_access = list(ACCESS_SECURITY) + +/obj/item/citationinator/attack_self(mob/living/user, modifiers) + if(!isliving(user)) + return + add_fingerprint(user) + icon_state = "doohickey_open" + issue_fine(user) + icon_state = initial(icon_state) + +/obj/item/citationinator/proc/issue_fine(mob/living/user) + var/obj/item/card/id/using_id = user.get_idcard() + if(!istype(using_id) || QDELING(using_id)) + return + if(!check_access(using_id)) + to_chat(user, span_warning("Insufficient access to issue citations!")) + return + var/list/choices = list() + for(var/datum/record/crew/person in GLOB.manifest.general) + if(!person.name) + continue + choices[person.name] = person + var/victim_name = tgui_input_list(user, "Select crew member to fine", "Do you got a loicense for that, mate?", choices, timeout = 1 MINUTES) + if(!victim_name) + return + var/datum/record/crew/victim = choices[victim_name] + if(!victim) + return + var/fine = tgui_input_number(user, "How many credits to fine?", "Civil Asset Forfeiture", default = 50, max_value = CONFIG_GET(number/maxfine), timeout = 1 MINUTES, round_value = 1) + if(!fine) + return + var/citation_name = trim(tgui_input_text(user, "What crime are they being fined for?", "Handling a fish in suspicious circumstances", max_length = MAX_NAME_LEN, encode = FALSE, timeout = 1 MINUTES)) + if(!citation_name) + return + var/reason = trim(tgui_input_text(user, "Provide details about the citation.", "Handling a fish in suspicious circumstances", multiline = TRUE, encode = FALSE, timeout = 1 MINUTES)) + var/issuer_name = using_id.registered_name || "Unknown" + var/datum/crime/citation/new_citation = new(name = citation_name, details = reason, author = issuer_name, fine = fine) + new_citation.alert_owner(user, src, victim.name, "You have been issued a [fine]cr citation for [citation_name] by [issuer_name]. Fines are payable at Security.") + victim.citations += new_citation + investigate_log("New Citation: [citation_name] Fine: [fine] | Added to [victim.name] by [key_name(user)]", INVESTIGATE_RECORDS) + SSblackbox.ReportCitation(REF(new_citation), user.ckey, user.real_name, victim.name, citation_name, fine) + + var/final_paper_text = "
Security Citation

" + final_paper_text += {" + + + + + + +
"} + final_paper_text += "" + final_paper_text += "" + final_paper_text += "" + final_paper_text += "" + final_paper_text += "" + final_paper_text += "" + final_paper_text += "
CitationDetailsAuthorTime AddedFine
[sanitize(new_citation.name)][sanitize(new_citation.details)][sanitize(new_citation.author)][new_citation.time][new_citation.fine]
" + + var/obj/item/paper/slip = new(drop_location()) + slip.name = "Citation - [victim.name] for [sanitize(new_citation.name)]" + slip.color = COLOR_FADED_PINK + slip.add_raw_text(final_paper_text) + slip.update_appearance() + user.put_in_hands(slip) + + user.visible_message(span_warning("[src] whirrs and clicks, before spitting out a slip of paper!")) + playsound(src, 'sound/machines/printer.ogg', vol = 40, vary = TRUE) diff --git a/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm index 8d18788fb841..cf80b78d5757 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/bloodsuckers.dm @@ -12,6 +12,7 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( diff --git a/monkestation/code/modules/storytellers/converted_events/solo/brother.dm b/monkestation/code/modules/storytellers/converted_events/solo/brother.dm index bb2cf73944fa..fffda04fdd40 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/brother.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/brother.dm @@ -13,7 +13,8 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, - JOB_WARDEN + JOB_SECURITY_ASSISTANT, + JOB_WARDEN, ) restricted_roles = list( JOB_AI, diff --git a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm index c655e25f9b84..b9ad1370c21c 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/changeling.dm @@ -12,6 +12,7 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( diff --git a/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm index 54189f3e9c5e..e0a303497e8c 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/heretic.dm @@ -13,6 +13,7 @@ JOB_HEAD_OF_SECURITY, JOB_PRISONER, JOB_SECURITY_OFFICER, + JOB_SECURITY_ASSISTANT, JOB_WARDEN, ) restricted_roles = list( diff --git a/monkestation/code/modules/storytellers/converted_events/solo/monsterhunter.dm b/monkestation/code/modules/storytellers/converted_events/solo/monsterhunter.dm index 5947d45f23f6..be39ec01ca7d 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/monsterhunter.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/monsterhunter.dm @@ -2,9 +2,9 @@ /datum/round_event_control/antagonist/solo/monsterhunter name = "Monster Hunters" - track = EVENT_TRACK_MAJOR //being an anrtag event is for backend reasons, the event itself is major + track = EVENT_TRACK_MAJOR antag_flag = ROLE_MONSTERHUNTER - tags = list(TAG_MAGICAL, TAG_TARGETED, TAG_COMBAT) + tags = list(TAG_MAGICAL, TAG_TARGETED, TAG_COMBAT, TAG_CREW_ANTAG, TAG_DESTRUCTIVE) antag_datum = /datum/antagonist/monsterhunter protected_roles = list( JOB_CAPTAIN, @@ -14,6 +14,7 @@ JOB_RESEARCH_DIRECTOR, JOB_DETECTIVE, JOB_HEAD_OF_SECURITY, + JOB_SECURITY_ASSISTANT, JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, @@ -22,7 +23,7 @@ JOB_AI, JOB_CYBORG, ) - min_players = 10 //no required enemies deu to instead needing enemy antags + min_players = 10 //no required enemies due to instead needing enemy antags weight = 25 // high weight as its a threat maximum_antags = 1 prompted_picking = TRUE @@ -35,10 +36,10 @@ var/count = 0 for(var/datum/antagonist/monster as anything in GLOB.antagonists) - if(!monster.owner || !monster.owner.current || monster.owner.current.stat == DEAD) + if(QDELETED(monster?.owner?.current) || monster.owner.current.stat == DEAD) continue - if(GLOB.monster_antagonist_types.Find(monster.type)) + if(is_type_in_typecache(monster, GLOB.monster_hunter_prey_antags)) count++ if(MINIMUM_MONSTERS_REQUIRED > count) diff --git a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm index 7514064a56db..2709f0307626 100644 --- a/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm +++ b/monkestation/code/modules/storytellers/converted_events/solo/traitor.dm @@ -13,6 +13,7 @@ JOB_PRISONER, JOB_SECURITY_OFFICER, JOB_WARDEN, + JOB_SECURITY_ASSISTANT, ) restricted_roles = list( JOB_AI, diff --git a/monkestation/code/modules/uplink/uplink_items/misc.dm b/monkestation/code/modules/uplink/uplink_items/misc.dm index 1c8feeb87fc1..ef0651d6c01a 100644 --- a/monkestation/code/modules/uplink/uplink_items/misc.dm +++ b/monkestation/code/modules/uplink/uplink_items/misc.dm @@ -16,3 +16,4 @@ purchasable_from = ~(UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS) item = /obj/item/neutered_borer_spawner cost = 20 + refundable = TRUE diff --git a/monkestation/code/modules/virology/disease/symtoms/stage2.dm b/monkestation/code/modules/virology/disease/symtoms/stage2.dm index 4db547f91a88..2330cdc36233 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage2.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage2.dm @@ -189,7 +189,7 @@ blood.diseases |= virus_copylist(mob.diseases) -/* //commented out until i can figure out how to make this work without shoving static lights on moving objects +//commented out until i can figure out how to make this work without shoving static lights on moving objects /datum/symptom/lantern name = "Lantern Syndrome" desc = "Causes the infected to glow." @@ -197,13 +197,21 @@ badness = EFFECT_DANGER_HELPFUL multiplier = 4 max_multiplier = 10 + chance = 10 + max_chance = 15 var/uncolored = 0 var/flavortext = 0 var/color = rgb(255, 255, 255) + var/obj/effect/dummy/lighting_obj/moblight /datum/symptom/lantern/activate(mob/living/mob) + if(moblight) + qdel(moblight) + moblight = new(mob) if(ismouse(mob)) - mob.set_light(multiplier, multiplier/3, l_color = color) + moblight.set_light_range(multiplier) + moblight.set_light_power(multiplier / 3) + moblight.set_light_color(color) return if(mob.reagents.has_reagent(/datum/reagent/space_cleaner)) uncolored = 1 //Having spacecleaner in your system when the effect activates will permanently make the color white. @@ -214,13 +222,15 @@ if(!flavortext) to_chat(mob, span_notice("You are glowing!")) flavortext = 1 - mob.set_light(multiplier, multiplier, multiplier/3, l_color = color) + moblight.set_light_range(multiplier) + moblight.set_light_power(multiplier / 3) + moblight.set_light_color(color) /datum/symptom/lantern/deactivate(mob/living/mob) - mob.set_light(0, 0, 0, l_color = rgb(0,0,0)) + QDEL_NULL(moblight) to_chat(mob, span_notice("You don't feel as bright.")) flavortext = 0 -*/ + /datum/symptom/vitreous name = "Vitreous resonance" diff --git a/monkestation/code/modules/virology/disease/symtoms/stage4.dm b/monkestation/code/modules/virology/disease/symtoms/stage4.dm index 68e71556eda7..1679cf6c530d 100644 --- a/monkestation/code/modules/virology/disease/symtoms/stage4.dm +++ b/monkestation/code/modules/virology/disease/symtoms/stage4.dm @@ -423,3 +423,26 @@ .=..() disease.process_dead = FALSE +/datum/symptom/oxygen + name = "Self-Respiration" + desc = "The virus synthesizes oxygen, which can remove the need for breathing at high symptom strength." + stage = 4 + max_multiplier = 5 + badness = EFFECT_DANGER_HELPFUL + var/breathing = TRUE + +/datum/symptom/oxygen/activate(mob/living/carbon/mob, datum/disease/advanced/disease) + mob.losebreath = max(0, mob.losebreath - multiplier) + mob.adjustOxyLoss(-2 * multiplier) + if(multiplier >= 4) + to_chat(mob, span_notice("[pick("Your lungs feel great.", "You realize you haven't been breathing.", "You don't feel the need to breathe.")]")) + if(breathing) + breathing = FALSE + ADD_TRAIT(mob, TRAIT_NOBREATH, DISEASE_TRAIT) + +/datum/symptom/oxygen/deactivate(mob/living/carbon/mob, datum/disease/advanced/disease) + if(!breathing) + breathing = TRUE + REMOVE_TRAIT(mob, TRAIT_NOBREATH, DISEASE_TRAIT) + mob.emote("gasp") + to_chat(mob, span_notice("You feel the need to breathe again.")) diff --git a/monkestation/code/modules/virology/items/virusdish.dm b/monkestation/code/modules/virology/items/virusdish.dm index b16989728bc3..3a045c745b0d 100644 --- a/monkestation/code/modules/virology/items/virusdish.dm +++ b/monkestation/code/modules/virology/items/virusdish.dm @@ -15,7 +15,6 @@ GLOBAL_LIST_INIT(virusdishes, list()) var/cloud_delay = 8 SECONDS//similar to a mob's breathing var/last_cloud_time = 0 var/mob/last_openner - var/takes_left = 2 /obj/item/weapon/virusdish/New(loc) ..() @@ -105,13 +104,16 @@ GLOBAL_LIST_INIT(virusdishes, list()) ..() if(istype(I,/obj/item/hand_labeler)) return - if(istype(I, /obj/item/reagent_containers/syringe) && takes_left) - takes_left-- - var/obj/item/reagent_containers/syringe/B = I - var/list/data = list("viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"viruses"=list(),"immunity"=list()) - data["viruses"] |= list(contained_virus) - B.reagents.add_reagent(/datum/reagent/blood, B.volume, data) - to_chat(user, span_notice("You take some blood from the [src]")) + if(istype(I, /obj/item/reagent_containers/syringe)) + if(growth < 50) + to_chat(user, span_warning("There isn't enough growth in the [src].")) + else + growth = growth - 50 + var/obj/item/reagent_containers/syringe/B = I + var/list/data = list("viruses"=null,"blood_DNA"=null,"blood_type"="O-","resistances"=null,"trace_chem"=null,"viruses"=list(),"immunity"=list()) + data["viruses"] |= list(contained_virus) + B.reagents.add_reagent(/datum/reagent/blood, B.volume, data) + to_chat(user, span_notice("You take some blood from the [src].")) if (open) if (istype(I,/obj/item/reagent_containers)) var/success = 0 diff --git a/monkestation/icons/hud/screen_alert.dmi b/monkestation/icons/hud/screen_alert.dmi index 967caecb662d..60df15794a67 100644 Binary files a/monkestation/icons/hud/screen_alert.dmi and b/monkestation/icons/hud/screen_alert.dmi differ diff --git a/monkestation/icons/mob/clothing/head.dmi b/monkestation/icons/mob/clothing/head.dmi index c7921069bbc5..7143b2dae137 100644 Binary files a/monkestation/icons/mob/clothing/head.dmi and b/monkestation/icons/mob/clothing/head.dmi differ diff --git a/monkestation/icons/mob/clothing/suit.dmi b/monkestation/icons/mob/clothing/suit.dmi index 0150c152aa30..4536c506ca6d 100644 Binary files a/monkestation/icons/mob/clothing/suit.dmi and b/monkestation/icons/mob/clothing/suit.dmi differ diff --git a/monkestation/icons/mob/huds/antags/monster_hunter.dmi b/monkestation/icons/mob/huds/antags/monster_hunter.dmi new file mode 100644 index 000000000000..6bae8ea82cae Binary files /dev/null and b/monkestation/icons/mob/huds/antags/monster_hunter.dmi differ diff --git a/monkestation/icons/mob/inhands/equipment/secass_lefthand.dmi b/monkestation/icons/mob/inhands/equipment/secass_lefthand.dmi new file mode 100644 index 000000000000..1d533d9f5026 Binary files /dev/null and b/monkestation/icons/mob/inhands/equipment/secass_lefthand.dmi differ diff --git a/monkestation/icons/mob/inhands/equipment/secass_righthand.dmi b/monkestation/icons/mob/inhands/equipment/secass_righthand.dmi new file mode 100644 index 000000000000..c35281cf59a1 Binary files /dev/null and b/monkestation/icons/mob/inhands/equipment/secass_righthand.dmi differ diff --git a/monkestation/icons/obj/clothing/hats.dmi b/monkestation/icons/obj/clothing/hats.dmi index f394e9161053..8d039b341602 100644 Binary files a/monkestation/icons/obj/clothing/hats.dmi and b/monkestation/icons/obj/clothing/hats.dmi differ diff --git a/monkestation/icons/obj/clothing/suits.dmi b/monkestation/icons/obj/clothing/suits.dmi index d0ee109ee212..2ec9a3624132 100644 Binary files a/monkestation/icons/obj/clothing/suits.dmi and b/monkestation/icons/obj/clothing/suits.dmi differ diff --git a/monkestation/icons/obj/items/secass.dmi b/monkestation/icons/obj/items/secass.dmi new file mode 100644 index 000000000000..133c1676b7df Binary files /dev/null and b/monkestation/icons/obj/items/secass.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 2b902ad7078d..5af7a8d6ef11 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -389,6 +389,7 @@ #include "code\__DEFINES\~monkestation\antagonists.dm" #include "code\__DEFINES\~monkestation\artifact.dm" #include "code\__DEFINES\~monkestation\asteroids.dm" +#include "code\__DEFINES\~monkestation\atom_hud.dm" #include "code\__DEFINES\~monkestation\botany.dm" #include "code\__DEFINES\~monkestation\chat.dm" #include "code\__DEFINES\~monkestation\clock_cult.dm" @@ -401,6 +402,7 @@ #include "code\__DEFINES\~monkestation\guns.dm" #include "code\__DEFINES\~monkestation\interaction_particles.dm" #include "code\__DEFINES\~monkestation\ipcs.dm" +#include "code\__DEFINES\~monkestation\jobs.dm" #include "code\__DEFINES\~monkestation\keybinding.dm" #include "code\__DEFINES\~monkestation\level_traits.dm" #include "code\__DEFINES\~monkestation\logging.dm" @@ -547,6 +549,7 @@ #include "code\__HELPERS\sorts\MergeSort.dm" #include "code\__HELPERS\sorts\TimSort.dm" #include "code\__HELPERS\~monkestation-helpers\announcements.dm" +#include "code\__HELPERS\~monkestation-helpers\antags.dm" #include "code\__HELPERS\~monkestation-helpers\icon_smoothing.dm" #include "code\__HELPERS\~monkestation-helpers\time.dm" #include "code\__HELPERS\~monkestation-helpers\virology.dm" @@ -1359,6 +1362,7 @@ #include "code\datums\elements\footstep_override.dm" #include "code\datums\elements\forced_gravity.dm" #include "code\datums\elements\frozen.dm" +#include "code\datums\elements\give_turf_traits.dm" #include "code\datums\elements\haunted.dm" #include "code\datums\elements\high_fiver.dm" #include "code\datums\elements\honkspam.dm" @@ -6095,11 +6099,12 @@ #include "monkestation\code\modules\bloodsuckers\clans\tremere.dm" #include "monkestation\code\modules\bloodsuckers\clans\venture.dm" #include "monkestation\code\modules\bloodsuckers\controllers\sunlight.dm" -#include "monkestation\code\modules\bloodsuckers\monster_hunters\hunter_abilities.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\hunter_datum.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\hunter_rulesets.dm" -#include "monkestation\code\modules\bloodsuckers\monster_hunters\hunter_weapons.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\hunting_contracts.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\abilities\bloodsilver.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\abilities\paradox.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\abilities\wonderland.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\events\wonderland.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\events\wonderland_apocalypse.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\monsters\killer_rabbits.dm" @@ -6109,6 +6114,17 @@ #include "monkestation\code\modules\bloodsuckers\monster_hunters\monsters\monster_effects\killer_rabbit_effects.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\monsters\monster_effects\white_rabbit.dm" #include "monkestation\code\modules\bloodsuckers\monster_hunters\monsters\monster_powers\killer_rabbit_powers.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\tools\bnuuy_mask.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\tools\jack_bomb.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\tools\rabbit_eye.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\tools\rabbit_locator.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\tools\weaponsmith.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\_trick_weapon.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\beast_claw.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\darkmoon.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\hunter_axe.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\hunter_revolver.dm" +#include "monkestation\code\modules\bloodsuckers\monster_hunters\weapons\threaded_cane.dm" #include "monkestation\code\modules\bloodsuckers\powers\_base_power.dm" #include "monkestation\code\modules\bloodsuckers\powers\cloak.dm" #include "monkestation\code\modules\bloodsuckers\powers\feed.dm" @@ -6302,6 +6318,7 @@ #include "monkestation\code\modules\cryopods\persistance\base_persistance.dm" #include "monkestation\code\modules\cryopods\trackers\cryo_chaplain.dm" #include "monkestation\code\modules\datums\brain_damage\mild.dm" +#include "monkestation\code\modules\datums\components\glitching_state.dm" #include "monkestation\code\modules\datums\components\nanites.dm" #include "monkestation\code\modules\datums\diseases\advanced\symptoms\nanites.dm" #include "monkestation\code\modules\datums\mood_events\generic_negative_events.dm" @@ -6352,6 +6369,7 @@ #include "monkestation\code\modules\ghost_players\job_helpers\organ_printer.dm" #include "monkestation\code\modules\goonimizations\goon_keybinds.dm" #include "monkestation\code\modules\goonimizations\shuttle_votes.dm" +#include "monkestation\code\modules\guns\laser.dm" #include "monkestation\code\modules\hydroponics\botanical_lexicon.dm" #include "monkestation\code\modules\hydroponics\plant_genes.dm" #include "monkestation\code\modules\hydroponics\seeds.dm" @@ -6376,6 +6394,7 @@ #include "monkestation\code\modules\jobs\job_types\ghost.dm" #include "monkestation\code\modules\jobs\job_types\godzilla.dm" #include "monkestation\code\modules\jobs\job_types\gorilla.dm" +#include "monkestation\code\modules\jobs\job_types\security_assistant.dm" #include "monkestation\code\modules\jobs\job_types\skeleton.dm" #include "monkestation\code\modules\jobs\job_types\yellowclown.dm" #include "monkestation\code\modules\library\skill_learning\job_skillchips\shaft_miner.dm" @@ -6825,6 +6844,7 @@ #include "monkestation\code\modules\research\nanites\nanite_programs\utility.dm" #include "monkestation\code\modules\research\nanites\nanite_programs\weapon.dm" #include "monkestation\code\modules\research\techweb\all_nodes.dm" +#include "monkestation\code\modules\security\code\citationinator.dm" #include "monkestation\code\modules\security\code\holographic_handcuffs.dm" #include "monkestation\code\modules\security\code\weapons\lawbringer.dm" #include "monkestation\code\modules\security\code\weapons\paco.dm"