diff --git a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm new file mode 100644 index 0000000000..39e29018ea --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm @@ -0,0 +1,582 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/closed/wall, +/area/ruin/space/has_grav/powered/advancedlab) +"c" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"d" = ( +/obj/machinery/vending/assist, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"e" = ( +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"f" = ( +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"g" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"h" = ( +/obj/structure/table/glass, +/obj/item/crowbar/advanced, +/obj/item/multitool/advanced{ + pixel_x = 4; + pixel_y = -1 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"i" = ( +/obj/machinery/computer/rdconsole, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"j" = ( +/obj/structure/chair/comfy/beige, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"k" = ( +/obj/structure/table/glass, +/obj/item/screwdriver/advanced{ + pixel_y = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"l" = ( +/obj/structure/table/glass, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"m" = ( +/obj/structure/table/glass, +/obj/item/gps{ + gpstag = "Abductor Replication Lab"; + pixel_x = -2; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"n" = ( +/obj/structure/chair/comfy/beige{ + icon_state = "comfychair"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"o" = ( +/obj/structure/table/glass, +/obj/item/weldingtool/advanced{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"p" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/paper{ + name = "Note to finder"; + pixel_x = -1; + pixel_y = 3; + info = "As of yet, our experiments have seen a fair bit of success. Unfortunately, our business partners have stopped funding us as they realised they utterly hate each other. To whoever finds this place, they are yours. Use them how you will. I leave you with the next generation of greytiding." + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"q" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"r" = ( +/obj/structure/table/glass, +/obj/item/wirecutters/advanced{ + pixel_y = 7 + }, +/obj/item/wrench/advanced{ + pixel_x = -1; + pixel_y = 3 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"s" = ( +/obj/structure/chair/comfy/beige{ + icon_state = "comfychair"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"t" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"u" = ( +/obj/machinery/light/small{ + icon_state = "bulb"; + dir = 4 + }, +/obj/structure/closet, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/under/pants/classicjeans, +/obj/item/clothing/neck/scarf, +/obj/item/clothing/neck/stripedgreenscarf, +/obj/item/toy/tennis/rainbow, +/obj/item/toy/tennis, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/under/pants/classicjeans, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"v" = ( +/obj/machinery/vending/boozeomat{ + req_access = null; + shut_up = 1 + }, +/turf/closed/wall, +/area/ruin/space/has_grav/powered/advancedlab) +"w" = ( +/obj/machinery/door/airlock/command{ + name = "Dorms" + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"x" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/table/glass, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"y" = ( +/obj/machinery/light/small{ + icon_state = "bulb"; + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"z" = ( +/obj/machinery/door/airlock/security{ + name = "Visiting Business Partners" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"A" = ( +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"B" = ( +/obj/structure/bed, +/obj/item/bedsheet/syndie, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"C" = ( +/obj/structure/closet{ + name = "Clothes" + }, +/obj/item/clothing/head/chameleon, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/suit/chameleon, +/obj/item/clothing/under/chameleon, +/obj/item/clothing/shoes/chameleon, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"D" = ( +/obj/machinery/light/small, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"E" = ( +/obj/structure/table/wood, +/obj/item/radio/headset/chameleon, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"F" = ( +/obj/structure/falsewall, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"G" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"H" = ( +/obj/structure/table/wood, +/obj/item/radio/headset/headset_cent/alt{ + keyslot2 = null + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"I" = ( +/obj/structure/closet{ + name = "Official Clothing" + }, +/obj/item/clothing/under/rank/centcom_commander, +/obj/item/clothing/head/centhat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/shoes/sneakers/brown, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"J" = ( +/obj/machinery/door/airlock/command{ + name = "Dorms" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"K" = ( +/obj/machinery/door/airlock/command{ + name = "Visiting Officials" + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"L" = ( +/obj/structure/bed, +/obj/item/bedsheet/centcom, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) +"M" = ( +/obj/structure/lattice, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/space/basic, +/area/ruin/space/has_grav/powered/advancedlab) +"N" = ( +/obj/structure/extinguisher_cabinet, +/turf/closed/wall, +/area/ruin/space/has_grav/powered/advancedlab) +"O" = ( +/obj/structure/reagent_dispensers/water_cooler, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"P" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/space/nearstation) +"Q" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"R" = ( +/obj/machinery/light/small{ + icon_state = "bulb"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/space/has_grav/powered/advancedlab) +"T" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/space/has_grav/powered/advancedlab) + +(1,1,1) = {" +a +b +b +b +b +b +b +b +b +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +b +d +j +l +q +s +O +b +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +b +e +j +m +l +s +f +b +a +a +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +c +f +j +l +l +s +f +M +M +M +M +M +M +a +a +a +a +"} +(5,1,1) = {" +a +b +f +f +n +n +f +f +w +f +Q +f +f +M +a +a +a +a +"} +(6,1,1) = {" +a +b +f +f +f +f +f +f +M +M +M +M +f +M +a +a +a +a +"} +(7,1,1) = {" +a +b +g +f +f +f +f +f +b +P +P +M +R +M +a +a +a +a +"} +(8,1,1) = {" +a +N +f +f +f +f +f +u +b +P +P +M +f +M +a +a +a +a +"} +(9,1,1) = {" +a +b +f +f +f +f +f +b +b +b +b +M +J +M +b +a +a +a +"} +(10,1,1) = {" +a +b +h +k +o +r +f +b +y +A +A +F +T +A +b +a +a +a +"} +(11,1,1) = {" +a +b +i +f +f +f +t +b +z +v +b +b +b +K +b +a +a +a +"} +(12,1,1) = {" +a +b +p +f +f +f +f +b +A +C +b +G +A +A +b +a +a +a +"} +(13,1,1) = {" +a +b +l +l +x +l +f +b +A +D +b +H +A +D +b +a +a +a +"} +(14,1,1) = {" +a +b +b +b +b +b +b +b +B +E +b +I +A +L +b +a +a +a +"} +(15,1,1) = {" +a +a +a +a +a +a +a +b +b +b +b +b +b +b +b +a +a +a +"} diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index e25fc7ccc1..ee97af14fc 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -17,6 +17,13 @@ /obj/structure/grille, /turf/open/space, /area/space/nearstation) +"abD" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "abI" = ( /obj/structure/lattice, /turf/open/space, @@ -14549,6 +14556,18 @@ }, /turf/open/space, /area/solar/port) +"aIA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "aIC" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -15277,13 +15296,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"aKm" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) "aKn" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16688,6 +16700,19 @@ /turf/open/floor/plating, /area/maintenance/disposal) "aNV" = ( +/obj/machinery/mineral/stacking_unit_console{ + dir = 2; + machinedir = 8; + pixel_x = -32; + pixel_y = 32 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "garbagestacked" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) +"aNW" = ( /obj/machinery/conveyor{ dir = 4; id = "garbagestacked" @@ -24173,6 +24198,17 @@ /obj/item/caution, /turf/open/floor/plating, /area/maintenance/department/cargo) +"beT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "beU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -29405,6 +29441,13 @@ dir = 1 }, /obj/effect/landmark/start/chemist, +/obj/machinery/button/door{ + id = "chemistry_shutters"; + name = "Shutters Control"; + pixel_x = 26; + pixel_y = 4; + req_access_txt = "5; 33" + }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, @@ -29446,6 +29489,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"brp" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-03" + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, +/turf/open/floor/plasteel/dark, +/area/science/lab) "brq" = ( /obj/structure/sink/kitchen{ desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; @@ -31928,27 +31980,13 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "bwW" = ( -/obj/structure/rack, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "chemistry shutters" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/white, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/medical/chemistry) -"bxa" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/research_and_development, -/obj/item/disk/tech_disk, -/obj/item/disk/design_disk, -/turf/open/floor/plasteel/dark, -/area/science/lab) "bxc" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -32457,17 +32495,19 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bxY" = ( -/obj/structure/closet/emcloset, /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "bxZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "bya" = ( /obj/structure/extinguisher_cabinet{ @@ -32476,7 +32516,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "byb" = ( /obj/structure/table, @@ -33190,17 +33230,14 @@ /area/space/nearstation) "bzz" = ( /obj/effect/turf_decal/stripes/line, -/obj/structure/chair{ - dir = 4 - }, -/obj/structure/sign/departments/holy{ - pixel_x = -32 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "bzA" = ( /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "bzB" = ( /obj/effect/turf_decal/stripes/line, @@ -33211,7 +33248,7 @@ network = list("monastery"); pixel_x = 28 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white, /area/hallway/secondary/entry) "bzC" = ( /obj/structure/table, @@ -33744,8 +33781,9 @@ /obj/structure/transit_tube/curved/flipped{ dir = 4 }, -/turf/open/space/basic, -/area/space/nearstation) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/hallway/secondary/entry) "bAJ" = ( /obj/structure/transit_tube/horizontal, /obj/structure/window/reinforced/fulltile, @@ -37156,6 +37194,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/purple{ dir = 1 }, @@ -37280,19 +37319,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bHp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "bHq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -37482,6 +37508,7 @@ dir = 8; layer = 2.9 }, +/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "bHP" = ( @@ -38063,14 +38090,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) -"bIY" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 - }, -/turf/open/space/basic, -/area/space/nearstation) "bIZ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38626,15 +38645,15 @@ /area/chapel/dock) "bKe" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/dark, +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, /area/chapel/dock) "bKf" = ( -/obj/structure/chair, -/turf/open/floor/plasteel/dark, -/area/chapel/dock) -"bKg" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, /area/chapel/dock) "bKh" = ( /obj/machinery/door/window/eastright{ @@ -39148,19 +39167,11 @@ /turf/open/floor/plasteel/dark, /area/chapel/dock) "bLr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 }, -/turf/open/floor/plasteel/dark, /area/chapel/dock) -"bLs" = ( -/obj/structure/lattice, -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 - }, -/turf/open/space, -/area/space/nearstation) "bLt" = ( /obj/effect/decal/cleanable/oil{ icon_state = "floor6" @@ -39651,7 +39662,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, /area/chapel/dock) "bMx" = ( /obj/effect/turf_decal/stripes/line, @@ -39661,16 +39674,13 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/chapel/dock) -"bMy" = ( -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 +/obj/structure/chair{ + dir = 1 }, -/obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "bMA" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/engine, @@ -40522,19 +40532,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) -"bOy" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/dock) "bOz" = ( /obj/structure/chair/comfy/black{ dir = 1 @@ -42245,12 +42242,6 @@ /obj/structure/flora/ausbushes, /turf/open/floor/plating/asteroid, /area/chapel/asteroid/monastery) -"bSn" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/space, -/area/space/nearstation) "bSo" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -44063,7 +44054,8 @@ /turf/open/floor/engine/co2, /area/engine/atmos) "bWh" = ( -/turf/open/floor/plating/asteroid, +/obj/effect/turf_decal/sand, +/turf/open/floor/plasteel, /area/chapel/office) "bWi" = ( /obj/structure/flora/ausbushes/leafybush, @@ -44784,12 +44776,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"bXI" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) "bXJ" = ( /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) @@ -45111,6 +45097,24 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"bYM" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "bYN" = ( /obj/structure/cable{ icon_state = "4-8" @@ -45183,15 +45187,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/yellow{ dir = 1 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "bYR" = ( @@ -46454,13 +46458,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) -"ccL" = ( -/obj/item/flashlight/lantern{ - icon_state = "lantern-on" - }, -/obj/effect/turf_decal/sand, -/turf/open/floor/plasteel, -/area/chapel/asteroid/monastery) "ccM" = ( /obj/structure/chair, /turf/open/floor/plating/asteroid, @@ -46693,6 +46690,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/power/port_gen/pacman, /turf/open/floor/plasteel, /area/engine/engineering) "cdK" = ( @@ -46861,6 +46859,15 @@ }, /turf/open/floor/plating/asteroid, /area/chapel/asteroid/monastery) +"cep" = ( +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "ceq" = ( /obj/machinery/power/emitter, /turf/open/floor/plating, @@ -47121,22 +47128,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) -"cfp" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) "cfr" = ( /obj/structure/transit_tube_pod, /obj/structure/transit_tube/station/reverse{ @@ -47244,7 +47235,6 @@ /turf/open/floor/plating, /area/chapel/main/monastery) "cfL" = ( -/obj/structure/flora/ausbushes/fernybush, /obj/machinery/camera{ c_tag = "Monastery Asteroid Starboard Aft"; dir = 1; @@ -47253,11 +47243,6 @@ /obj/effect/turf_decal/sand, /turf/open/floor/plasteel, /area/chapel/asteroid/monastery) -"cfM" = ( -/obj/structure/flora/ausbushes, -/obj/effect/turf_decal/sand, -/turf/open/floor/plasteel, -/area/chapel/asteroid/monastery) "cfN" = ( /turf/closed/mineral, /area/chapel/asteroid/monastery) @@ -47430,6 +47415,13 @@ }, /turf/open/floor/plating, /area/engine/engineering) +"cgt" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cgu" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -50165,6 +50157,19 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/dock) +"cqI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/dock) "cqS" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -50906,6 +50911,22 @@ /obj/machinery/vending/wardrobe/chap_wardrobe, /turf/open/floor/carpet, /area/chapel/office) +"cua" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "cuc" = ( /obj/machinery/light, /obj/machinery/camera{ @@ -50926,13 +50947,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"cui" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "cuk" = ( /obj/structure/closet{ name = "beekeeping wardrobe" @@ -51548,15 +51562,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/main/monastery) -"cvM" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-10" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main/monastery) "cvR" = ( /obj/machinery/light/small{ dir = 8 @@ -51854,6 +51859,22 @@ }, /turf/open/space/basic, /area/space/nearstation) +"cxj" = ( +/obj/structure/table, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/meson/engine, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/item/pipe_dispenser, +/obj/machinery/light, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "cxk" = ( /obj/structure/window/reinforced{ dir = 1; @@ -52081,13 +52102,6 @@ }, /turf/open/floor/plasteel/dark, /area/library/lounge) -"cyp" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "garbage" - }, -/turf/open/floor/plating, -/area/maintenance/disposal) "cyy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -52406,6 +52420,12 @@ }, /turf/open/floor/plasteel/dark, /area/library) +"cAp" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "cAr" = ( /obj/machinery/light/small{ dir = 8 @@ -52557,15 +52577,6 @@ }, /turf/open/floor/plasteel/dark, /area/library) -"cAQ" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/engine/engineering) "cAS" = ( /obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/plasteel/dark, @@ -52881,23 +52892,6 @@ }, /turf/open/floor/plasteel, /area/science/explab) -"cKV" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"cLw" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating, -/area/engine/engineering) "cOp" = ( /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -52907,6 +52901,13 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/science/xenobiology) +"cOA" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "cPy" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2 @@ -52941,6 +52942,14 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"cQZ" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/maintenance/department/engine) +"cRJ" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/warehouse) "cSJ" = ( /obj/item/reagent_containers/glass/beaker/cryoxadone{ pixel_x = -2; @@ -52996,6 +53005,15 @@ }, /turf/open/floor/plasteel/dark, /area/science/lab) +"cUT" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "cXW" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -53048,13 +53066,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"dgj" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6 - }, -/obj/machinery/meter, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "dgz" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -53076,6 +53087,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"dhu" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "dhz" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -53120,6 +53138,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) +"dlI" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "dmP" = ( /obj/structure/chair{ dir = 8 @@ -53191,10 +53215,6 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) -"dps" = ( -/obj/machinery/status_display/ai, -/turf/closed/wall, -/area/quartermaster/qm) "dqw" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "0"; @@ -53230,13 +53250,6 @@ /obj/machinery/reagentgrinder, /turf/open/floor/plating, /area/maintenance/department/cargo) -"dsz" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "dtm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -53302,6 +53315,24 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating, /area/maintenance/department/engine) +"dzA" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) +"dAa" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "dAF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -53316,54 +53347,30 @@ icon_state = "platingdmg1" }, /area/maintenance/department/engine) -"dEy" = ( -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) -"dFJ" = ( -/turf/open/floor/engine, +"dFF" = ( +/turf/closed/wall/r_wall, /area/engine/supermatter) -"dHr" = ( +"dGd" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/machinery/button/door{ - id = "engsm"; - name = "Radiation Shutters Control"; - pixel_y = 24; - req_access_txt = "10" - }, +/obj/machinery/meter, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/engine, /area/engine/engineering) -"dHZ" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/effect/landmark/start/chemist, -/obj/machinery/button/door{ - id = "chemistry_shutters"; - name = "Shutters Control"; - pixel_x = 26; - pixel_y = 4; - req_access_txt = "5; 33" - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ +"dGp" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) -"dJk" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plating, -/area/engine/atmos) +/turf/closed/wall/r_wall, +/area/engine/engineering) +"dHF" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "dJm" = ( /obj/structure/cable{ icon_state = "4-8" @@ -53423,12 +53430,18 @@ /obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating, /area/maintenance/department/engine) -"dSp" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ - dir = 1 +"dPZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/floor/plating/airless, +/turf/open/floor/plasteel, /area/engine/engineering) +"dRs" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space) "dSr" = ( /obj/item/chair, /turf/open/floor/wood, @@ -53439,6 +53452,25 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"dUk" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) +"dVt" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/obj/effect/turf_decal/tile/yellow{ + dir = 1 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "dVI" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -53505,10 +53537,6 @@ /obj/structure/chair/office/light, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"eex" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/office) "eeQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -53544,13 +53572,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"eiV" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "ekU" = ( /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" @@ -53561,23 +53582,12 @@ /obj/structure/chair/office/dark, /turf/open/floor/wood, /area/lawoffice) -"epj" = ( -/obj/machinery/cryopod{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "epJ" = ( /obj/structure/sign/poster/contraband/random{ pixel_y = 32 }, /turf/open/floor/carpet, /area/maintenance/department/crew_quarters/dorms) -"epV" = ( -/obj/structure/chair, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel, -/area/engine/engineering) "eqD" = ( /obj/structure/sign/poster/contraband/random{ pixel_x = -32 @@ -53587,6 +53597,20 @@ icon_state = "wood-broken" }, /area/maintenance/department/crew_quarters/dorms) +"eqM" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"erV" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "eta" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Supplies"; @@ -53605,6 +53629,40 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"eue" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"eux" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"euN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-10" + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "euQ" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 @@ -53614,10 +53672,20 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"eyj" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/engineering) +"eyT" = ( +/obj/machinery/jukebox, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/bar) +"ezo" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "ezF" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -53649,23 +53717,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"eAH" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"eAZ" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "eCw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53704,19 +53755,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"eFG" = ( -/obj/machinery/mineral/stacking_unit_console{ - dir = 2; - machinedir = 8; - pixel_x = -32; - pixel_y = 32 - }, -/obj/machinery/conveyor{ - dir = 4; - id = "garbagestacked" - }, -/turf/open/floor/plating, -/area/maintenance/disposal) "eHI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, @@ -53741,6 +53779,17 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"eMz" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine"; + req_access_txt = "10" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "eMC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -53760,6 +53809,15 @@ /obj/structure/lattice, /turf/closed/wall, /area/space/nearstation) +"eOA" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "eOZ" = ( /obj/structure/closet, /obj/item/clothing/suit/judgerobe, @@ -53767,6 +53825,19 @@ /obj/item/gavelhammer, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"ePS" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -28 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "ePU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -53794,18 +53865,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) -"eRp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"eSB" = ( -/obj/machinery/computer/cryopod{ - dir = 1; - pixel_y = -26 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "eSL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/beacon, @@ -53827,6 +53886,10 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"eVW" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/plating, +/area/engine/engineering) "eWi" = ( /obj/structure/cable{ icon_state = "0-4" @@ -53856,6 +53919,12 @@ /obj/item/stack/cable_coil/cut/random, /turf/open/floor/plating, /area/maintenance/department/cargo) +"fbu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) "fdQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53940,12 +54009,6 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) -"fjD" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "fkH" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -53958,16 +54021,20 @@ }, /turf/open/floor/plasteel, /area/science/explab) +"flP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "fmh" = ( /turf/open/floor/wood, /area/maintenance/department/engine) -"fmL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" +"fml" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 }, -/turf/open/floor/plasteel/dark, +/turf/closed/wall/r_wall, /area/engine/engineering) "fmU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -54008,12 +54075,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/engine) -"frj" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) "ftp" = ( /turf/open/floor/plating{ icon_state = "platingdmg1" @@ -54063,6 +54124,10 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"fwo" = ( +/obj/machinery/door/airlock/maintenance, +/turf/open/floor/plating, +/area/chapel/main/monastery) "fwr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -54076,21 +54141,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"fxC" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"fym" = ( -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber"; - req_access_txt = "10" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/supermatter) "fyF" = ( /obj/structure/cable/yellow{ icon_state = "0-4" @@ -54159,12 +54209,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"fBZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/supermatter) "fFv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ @@ -54173,6 +54217,14 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"fGt" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel, +/area/engine/engineering) "fIu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54245,19 +54297,9 @@ /obj/structure/bookcase/random/religion, /turf/open/floor/plasteel/dark, /area/library/lounge) -"fZK" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +"fWE" = ( /turf/open/floor/engine, -/area/engine/engineering) +/area/engine/supermatter) "gam" = ( /obj/machinery/door/airlock/medical/glass{ name = "Service Door"; @@ -54270,6 +54312,18 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) +"gaJ" = ( +/obj/machinery/status_display/ai, +/turf/closed/wall, +/area/quartermaster/qm) +"gaQ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "gcj" = ( /obj/machinery/vending/kink, /obj/effect/turf_decal/tile/blue{ @@ -54317,6 +54371,13 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"gfh" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 6 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "gfi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -54326,11 +54387,18 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"ggg" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 6 +"gih" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/light{ + dir = 1; + light_color = "#d1dfff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, /area/engine/engineering) "giI" = ( /obj/machinery/light/small{ @@ -54375,6 +54443,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"gkN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) "gkR" = ( /obj/item/twohanded/required/kirbyplants/random, /obj/structure/extinguisher_cabinet{ @@ -54504,6 +54578,14 @@ heat_capacity = 1e+006 }, /area/hallway/secondary/exit/departure_lounge) +"gvO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "gwn" = ( /obj/structure/sign/warning{ pixel_y = 32 @@ -54556,24 +54638,6 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/carpet, /area/lawoffice) -"gBb" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"gDR" = ( -/obj/machinery/camera{ - c_tag = "Central Primary Hallway Escape"; - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "gDZ" = ( /obj/effect/turf_decal/box/corners{ dir = 1 @@ -54593,11 +54657,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) -"gEo" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "gFo" = ( /obj/structure/window/reinforced, /obj/structure/table/glass, @@ -54631,17 +54690,39 @@ /turf/open/floor/plating, /area/maintenance/department/security/brig) "gGA" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chemistry_shutters"; + name = "chemistry shutters" }, -/turf/open/floor/plasteel/white, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/medical/chemistry) +"gHp" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"gHy" = ( +/obj/machinery/computer/cryopod{ + dir = 1; + pixel_y = -26 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "gHZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -54692,6 +54773,13 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"gLn" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "gLF" = ( /obj/machinery/vending/snack/random, /obj/effect/turf_decal/tile/neutral{ @@ -54743,12 +54831,6 @@ }, /turf/open/floor/wood, /area/lawoffice) -"gQf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/engine, -/area/engine/engineering) "gSH" = ( /turf/closed/wall, /area/lawoffice) @@ -54766,6 +54848,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"gUS" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 1; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/engine, +/area/engine/engineering) "gVc" = ( /turf/open/floor/wood{ icon_state = "wood-broken4" @@ -54778,31 +54875,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"gXZ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Fore"; - dir = 4; - network = list("ss13","engine") - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "gYo" = ( /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) -"haA" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/rods/fifty, -/obj/item/clothing/glasses/welding, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "heC" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -54849,24 +54925,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"hjk" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, -/area/engine/atmos) -"hjD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "hkQ" = ( /obj/machinery/light{ dir = 4 @@ -54889,26 +54947,6 @@ }, /turf/open/floor/wood, /area/lawoffice) -"hon" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Gas to Filter" - }, -/turf/open/floor/engine, -/area/engine/engineering) -"hoS" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/engine, -/area/engine/engineering) "hqo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -54924,6 +54962,13 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"hrx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "hvW" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio4"; @@ -54959,18 +55004,18 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/security/execution/transfer) +"hxh" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "hxn" = ( /obj/structure/chair, /obj/item/clothing/glasses/regular, /turf/open/floor/plating, /area/maintenance/department/science) -"hyh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "hzc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55000,6 +55045,21 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port) +"hCg" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "garbage" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) +"hDy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/engine/engineering) "hDG" = ( /obj/machinery/door/airlock/engineering{ name = "Auxillary Base Construction"; @@ -55032,43 +55092,20 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"hGB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "hHr" = ( /obj/structure/chair/comfy/black{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"hIZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"hKp" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/structure/window/plasma/reinforced{ +"hJO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 }, -/obj/machinery/power/rad_collector/anchored, -/turf/open/floor/engine, -/area/engine/supermatter) +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "hOx" = ( /obj/structure/cable{ icon_state = "2-4" @@ -55106,17 +55143,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"hQy" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" - }, -/obj/item/tank/internals/plasma, -/turf/open/floor/plating, -/area/engine/supermatter) "hQz" = ( /obj/structure/closet/emcloset/anchored, /obj/structure/cable/yellow{ @@ -55128,29 +55154,14 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) -"hSt" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "Gas to Cooling Loop" +"hRQ" = ( +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"hSC" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "hSM" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -55175,18 +55186,23 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"hUf" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"hUi" = ( +/obj/machinery/atmospherics/pipe/manifold4w/general/visible, +/obj/machinery/meter, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "hUt" = ( /obj/structure/closet/crate{ icon_state = "crateopen" }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"hUw" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) "hUJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55202,17 +55218,25 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"hWa" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"hXm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "hXt" = ( /obj/structure/girder, /turf/open/floor/plating, /area/maintenance/department/science) -"hXK" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/engine/engineering) "hYe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red{ @@ -55254,20 +55278,15 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"iaZ" = ( +/turf/open/space/basic, +/area/hallway/secondary/entry) "ick" = ( /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel/dark, /area/library) -"iej" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/engine, -/area/engine/engineering) "igE" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -55316,30 +55335,24 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) +"ikm" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Gas" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "ikB" = ( /obj/structure/closet/secure_closet/medical2, /turf/open/floor/plating, /area/maintenance/department/science) -"ikO" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "ilD" = ( /obj/machinery/processor/slime, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"imE" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "ioj" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -55356,40 +55369,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"iop" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"ioF" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "iqc" = ( /turf/open/floor/plasteel/stairs/right, /area/maintenance/department/crew_quarters/dorms) -"irM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) +"irs" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) "itl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55422,13 +55408,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"iwe" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "iyg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55445,11 +55424,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"izm" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/engine/engineering) "izB" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod" @@ -55532,6 +55506,20 @@ }, /turf/open/floor/plasteel/white, /area/storage/emergency/port) +"iHe" = ( +/obj/machinery/camera{ + c_tag = "Central Primary Hallway Escape"; + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"iHI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "iJi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -55545,13 +55533,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/quartermaster/sorting) -"iLh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/engine, -/area/engine/engineering) "iLl" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -55613,6 +55594,22 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) +"iSi" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Cooling Loop Bypass" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "iSz" = ( /obj/structure/cable{ icon_state = "2-8" @@ -55625,9 +55622,14 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"iTF" = ( -/obj/structure/sign/warning/electricshock, -/turf/closed/wall/r_wall, +"iSL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating, +/area/engine/atmos) +"iTE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, /area/engine/supermatter) "iVJ" = ( /obj/effect/spawner/lootdrop/organ_spawner, @@ -55694,6 +55696,16 @@ icon_state = "platingdmg3" }, /area/maintenance/department/crew_quarters/dorms) +"jjA" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Gas to Cooling Loop" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "jjC" = ( /obj/structure/rack, /obj/item/storage/briefcase{ @@ -55706,6 +55718,18 @@ }, /turf/open/floor/wood, /area/lawoffice) +"jkm" = ( +/obj/structure/closet/emcloset, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"jrb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "jrG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -55761,6 +55785,17 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"jtv" = ( +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Starboard"; + dir = 8; + network = list("ss13","engine") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "jvi" = ( /obj/structure/cable{ icon_state = "4-8" @@ -55806,17 +55841,6 @@ /obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/hallway/secondary/entry) -"jzE" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Supermatter Engine"; - req_access_txt = "10" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "jAy" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55895,15 +55919,39 @@ /obj/machinery/atmospherics/pipe/simple/purple/visible, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"jOw" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "jOB" = ( /turf/open/floor/plating, /area/storage/emergency/starboard) +"jOX" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/chapel/dock) "jPf" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /obj/item/kitchen/knife, /turf/open/floor/plasteel, /area/maintenance/department/engine) +"jPC" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "jQh" = ( /obj/item/stack/sheet/animalhide/xeno, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -55913,6 +55961,15 @@ icon_state = "platingdmg1" }, /area/maintenance/department/science) +"jQn" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "jRG" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -55923,6 +55980,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"jTc" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Gas to Filter" + }, +/turf/open/floor/engine, +/area/engine/engineering) "jTh" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55944,16 +56008,6 @@ }, /turf/open/floor/carpet, /area/lawoffice) -"jTU" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "jUV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55974,12 +56028,6 @@ /obj/item/stack/ore/iron, /turf/open/floor/plating, /area/maintenance/department/science) -"jXF" = ( -/obj/machinery/cryopod{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/security/prison) "jXV" = ( /obj/machinery/light/small{ dir = 1 @@ -56004,20 +56052,14 @@ icon_state = "platingdmg3" }, /area/maintenance/department/engine) -"jZG" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "chemistry shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/medical/chemistry) -"kaR" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 8 +"kec" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" }, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 8 }, /turf/open/floor/engine, /area/engine/engineering) @@ -56075,10 +56117,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"klb" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/sorting) "klo" = ( /obj/structure/dresser, /obj/structure/mirror{ @@ -56097,22 +56135,10 @@ /obj/item/clothing/under/rank/clown/sexy, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) -"kmd" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "kmn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/mixing) -"koz" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "kpK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -56132,6 +56158,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"ksC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "kvj" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -56145,6 +56177,20 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"kvu" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"kvx" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "kwm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -56205,12 +56251,22 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"kBe" = ( +/obj/structure/reflector/double/anchored{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "kDf" = ( /obj/machinery/light/small{ dir = 2 }, /turf/open/floor/carpet/black, /area/chapel/office) +"kDI" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/supermatter) "kDJ" = ( /obj/machinery/light{ dir = 8 @@ -56343,6 +56399,11 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"kNK" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/engine/engineering) "kPi" = ( /obj/structure/table, /obj/machinery/microwave, @@ -56416,20 +56477,10 @@ }, /turf/open/floor/plating, /area/storage/emergency/port) -"kTj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) -"kTR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) +"kVA" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/sorting) "kWQ" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/cable/yellow{ @@ -56443,16 +56494,15 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"kYM" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +"kYR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +/obj/machinery/light, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) +/area/hallway/secondary/entry) "lcU" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -56480,29 +56530,14 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) -"lfx" = ( -/obj/structure/table, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/effect/turf_decal/delivery, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) +"lfZ" = ( +/obj/machinery/status_display/supply, +/turf/closed/wall, +/area/quartermaster/office) "lhA" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"lhP" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "liR" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 @@ -56517,18 +56552,30 @@ /obj/machinery/atmospherics/pipe/simple/general/hidden, /turf/open/floor/plating, /area/maintenance/department/cargo) -"ljG" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 +"llS" = ( +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/area/hallway/secondary/entry) "lms" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, /turf/closed/wall, /area/maintenance/department/engine) +"lmv" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + light_color = "#d1dfff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "lnn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, @@ -56537,32 +56584,17 @@ }, /turf/open/floor/plasteel, /area/storage/primary) -"lnr" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"loz" = ( -/obj/structure/closet/radiation, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "lqc" = ( /obj/item/toy/gun, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"lqo" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "lqy" = ( /obj/machinery/door/airlock/grunge{ name = "Library" @@ -56572,13 +56604,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/library/lounge) -"lrM" = ( -/obj/structure/cable{ - icon_state = "2-8" +"lxh" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) +/turf/open/space, +/area/space/nearstation) "lzJ" = ( /obj/structure/closet/crate/bin, /turf/open/floor/carpet, @@ -56612,6 +56644,24 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"lCR" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"lCY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"lDW" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, +/area/engine/engineering) "lEn" = ( /obj/structure/window/reinforced{ dir = 1 @@ -56682,12 +56732,6 @@ /obj/item/wrench, /turf/open/floor/plating, /area/maintenance/department/science) -"lJI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "lKL" = ( /obj/machinery/door/airlock/abandoned{ name = "Starboard Emergency Storage"; @@ -56722,6 +56766,13 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"lQy" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/space, +/area/space/nearstation) "lQQ" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgespace"; @@ -56747,13 +56798,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"lRX" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/turf/open/floor/plating, -/area/engine/engineering) "lTC" = ( /obj/item/shard, /obj/effect/turf_decal/stripes/line{ @@ -56764,10 +56808,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"lUO" = ( -/obj/structure/sign/warning/radiation, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "lWy" = ( /turf/open/floor/plating, /area/maintenance/department/science) @@ -56789,28 +56829,11 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"lXb" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Gas to Mix" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "lXc" = ( /obj/structure/table, /obj/item/clothing/head/beret, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"lXJ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "mal" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56851,10 +56874,32 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"mci" = ( -/obj/machinery/portable_atmospherics/canister/toxins, +"mbD" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/engine/engineering) +"mcf" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"mdi" = ( +/obj/machinery/rnd/production/circuit_imprinter, +/obj/machinery/camera{ + c_tag = "Engineering Starboard Aft"; + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "mdL" = ( /obj/structure/table, /obj/item/paper_bin, @@ -56871,19 +56916,19 @@ /obj/machinery/status_display/evac, /turf/closed/wall/r_wall, /area/engine/supermatter) -"mfC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +"mfg" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"mgz" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/space, +/area/space/nearstation) +"mfx" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "mhl" = ( /obj/machinery/power/emitter, /obj/machinery/light{ @@ -56891,39 +56936,14 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"mhn" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/poster/random{ - pixel_x = 32 +"mlb" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"miw" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Fore"; - dir = 1; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"mjn" = ( -/obj/machinery/jukebox, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/bar) -"mjK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/closed/wall/r_wall, +/turf/open/floor/plating, /area/engine/engineering) "mlr" = ( /obj/structure/lattice, @@ -56932,6 +56952,26 @@ }, /turf/open/space/basic, /area/space/nearstation) +"mlx" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"mlS" = ( +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/supermatter) "mmv" = ( /obj/machinery/door/airlock/engineering{ name = "Engineering Supplies"; @@ -56979,19 +57019,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"mqp" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -28 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "msX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -57030,6 +57057,21 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"mvA" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"mvY" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "Gas to Filter" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/engine, +/area/engine/supermatter) "mwg" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -57097,6 +57139,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/department/engine) +"mAi" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "mCe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -57105,6 +57153,27 @@ }, /turf/open/floor/plating, /area/security/checkpoint/engineering) +"mCP" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"mCU" = ( +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/rods/fifty, +/obj/item/clothing/glasses/welding, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "mDW" = ( /obj/machinery/power/smes{ charge = 5e+006 @@ -57112,16 +57181,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/tcommsat/computer) -"mEu" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "mES" = ( /obj/machinery/door/airlock/maintenance/abandoned{ name = "Surgical Room" @@ -57151,6 +57210,10 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"mLc" = ( +/obj/structure/sign/warning/electricshock, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "mLB" = ( /obj/structure/cable{ icon_state = "1-4" @@ -57190,6 +57253,16 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"mVj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "mVM" = ( /turf/open/floor/plating/airless, /area/space/nearstation) @@ -57202,6 +57275,20 @@ "mZE" = ( /turf/open/space/basic, /area/space/nearstation) +"mZK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) +"mZV" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "naq" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -57211,14 +57298,14 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"ncm" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 +"ndf" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Gas to Mix" }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) "ndI" = ( @@ -57263,10 +57350,37 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) +"ngg" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "ngp" = ( /obj/item/chair/stool, /turf/open/floor/carpet, /area/maintenance/department/crew_quarters/dorms) +"nhW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"nif" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/engineering_hacking{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/book/manual/wiki/engineering_construction, +/turf/open/floor/plasteel, +/area/engine/engineering) "nih" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/costume, @@ -57290,6 +57404,30 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"nkk" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/structure/chair{ + dir = 8; + name = "Defense" + }, +/obj/machinery/camera{ + c_tag = "Atmospherics Starboard"; + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "nku" = ( /obj/machinery/door/airlock/centcom{ name = "Crematorium"; @@ -57299,6 +57437,21 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/chapel/office) +"nnf" = ( +/obj/structure/rack, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "nnh" = ( /obj/structure/chair{ dir = 8 @@ -57320,13 +57473,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/department/engine) -"nqu" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "nqV" = ( /obj/structure/cable{ icon_state = "1-2" @@ -57337,6 +57483,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"nqW" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "nsy" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -57366,14 +57525,6 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) -"nsJ" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "ntj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57410,6 +57561,10 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/primary/central) +"nyN" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/open/floor/engine, +/area/engine/supermatter) "nyO" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" @@ -57436,12 +57591,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"nAY" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel, -/area/engine/engineering) "nBw" = ( /obj/machinery/computer/crew{ dir = 1 @@ -57514,6 +57663,15 @@ /obj/structure/table/reinforced, /turf/open/floor/plasteel, /area/science/xenobiology) +"nIq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 4; + network = list("ss13","engine") + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "nIU" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -57537,6 +57695,17 @@ }, /turf/open/floor/engine, /area/science/explab) +"nKF" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/poster/random{ + pixel_x = 32 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "nLl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -57572,6 +57741,17 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) +"nNn" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "nNJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57606,6 +57786,13 @@ /obj/item/chair, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"nPW" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "nQc" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -57616,13 +57803,9 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"nRM" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel, +"nQf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/closed/wall/r_wall, /area/engine/engineering) "nSj" = ( /obj/structure/grille/broken, @@ -57636,16 +57819,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/lawoffice) -"nTr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"nUQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/engine/supermatter) "nVU" = ( /obj/item/twohanded/spear, /turf/open/floor/plating, @@ -57658,6 +57831,13 @@ /obj/structure/table_frame/wood, /turf/open/floor/wood, /area/maintenance/department/engine) +"nYe" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Mix to Engine" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "nYn" = ( /obj/structure/sign/warning/docking, /obj/effect/spawner/structure/window/reinforced, @@ -57684,6 +57864,23 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"obl" = ( +/obj/structure/sign/warning/radiation, +/turf/closed/wall/r_wall, +/area/engine/supermatter) +"obG" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/machinery/button/door{ + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_y = 24; + req_access_txt = "10" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "obP" = ( /obj/structure/table, /obj/item/paper_bin, @@ -57693,6 +57890,11 @@ initial_gas_mix = "o2=0.01;n2=0.01" }, /area/maintenance/department/science) +"ocy" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/engine/engineering) "oep" = ( /obj/structure/table/glass, /obj/item/paper_bin, @@ -57725,6 +57927,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"oge" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/turf/open/floor/plating, +/area/engine/engineering) "ohR" = ( /obj/item/chair, /turf/open/floor/plating, @@ -57739,6 +57945,18 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"ona" = ( +/obj/machinery/atmospherics/pipe/manifold/green/visible{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/engineering) "onX" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -57796,6 +58014,12 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/science/xenobiology) +"oto" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "ous" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/door{ @@ -57818,6 +58042,14 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"ovE" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "ovM" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -57843,11 +58075,17 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) -"oxw" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +"oxt" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/research_and_development, +/obj/item/disk/tech_disk, +/obj/item/disk/design_disk, +/turf/open/floor/plasteel/dark, +/area/science/lab) +"oyE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, /area/engine/engineering) "oyF" = ( @@ -57875,6 +58113,19 @@ }, /turf/closed/wall/r_wall, /area/science/xenobiology) +"oBY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/engine, +/area/engine/engineering) "oCn" = ( /obj/structure/chair/office/dark{ dir = 1 @@ -57945,6 +58196,15 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"oFi" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/engine, +/area/engine/engineering) "oFo" = ( /obj/structure/closet/emcloset/anchored, /obj/structure/sign/warning/vacuum/external{ @@ -57961,23 +58221,6 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plasteel, /area/maintenance/department/engine) -"oHa" = ( -/obj/machinery/power/emitter/anchored{ - dir = 8; - state = 2 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/engine/engineering) -"oJr" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plating, -/area/engine/engineering) "oKa" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -57993,18 +58236,6 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) -"oKv" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/bot, -/turf/open/floor/engine, -/area/engine/engineering) -"oKJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/engine, -/area/engine/engineering) "oLR" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -58111,6 +58342,12 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) +"oTD" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/turf/open/floor/engine, +/area/engine/engineering) "oUa" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58126,14 +58363,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"oWu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/holopad, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/engineering) "oWw" = ( /obj/item/flashlight, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -58154,22 +58383,6 @@ }, /turf/open/floor/plasteel/white, /area/security/execution/transfer) -"oXq" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Cooling Loop Bypass" - }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "oYj" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -58182,12 +58395,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"paU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, -/turf/open/floor/plating/airless, -/area/engine/engineering) "pbm" = ( /obj/machinery/door/airlock/external{ name = "Pod Docking Bay" @@ -58223,6 +58430,19 @@ }, /turf/open/floor/plating, /area/science/explab) +"peb" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 8 + }, +/obj/structure/window/plasma/reinforced{ + dir = 4 + }, +/obj/machinery/power/rad_collector/anchored, +/turf/open/floor/engine, +/area/engine/supermatter) "pfz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -58243,13 +58463,12 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"pgH" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"pga" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 }, -/turf/open/floor/engine, -/area/engine/engineering) +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "phJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -58271,13 +58490,6 @@ /obj/structure/piano, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) -"pmB" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, -/area/engine/atmos) "pnU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 4; @@ -58286,14 +58498,16 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"poP" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +"ppi" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = 29 + }, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/space, -/area/space/nearstation) +/turf/open/floor/engine, +/area/engine/engineering) "pps" = ( /turf/closed/wall, /area/engine/break_room) @@ -58312,18 +58526,20 @@ }, /turf/open/floor/engine, /area/engine/supermatter) -"psd" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "Gas to Filter" +"ptk" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine, -/area/engine/supermatter) -"puw" = ( -/obj/structure/sign/warning/fire, -/turf/closed/wall/r_wall, -/area/engine/supermatter) +/area/engine/engineering) +"puO" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 10 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "pvK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -58358,17 +58574,13 @@ }, /turf/open/space/basic, /area/space/nearstation) -"pxD" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +"pBs" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistry_shutters"; - name = "chemistry shutters" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/medical/chemistry) +/turf/open/floor/engine, +/area/engine/engineering) "pBD" = ( /obj/structure/cable{ icon_state = "0-8" @@ -58379,22 +58591,6 @@ /obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating, /area/maintenance/department/engine) -"pBJ" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) -"pCo" = ( -/obj/structure/reflector/single/anchored{ - dir = 6 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plating, -/area/engine/engineering) "pDP" = ( /obj/machinery/vending/assist, /obj/effect/turf_decal/tile/neutral{ @@ -58451,6 +58647,29 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/hop) +"pIk" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) +"pJx" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/engine, +/area/engine/engineering) "pKd" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; @@ -58510,6 +58729,12 @@ dir = 1 }, /area/hallway/secondary/exit/departure_lounge) +"pPu" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "pQw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58590,19 +58815,6 @@ /obj/structure/cable, /turf/open/floor/wood, /area/lawoffice) -"pYh" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/closed/wall/r_wall, -/area/engine/engineering) -"pYw" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-03" - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -24 - }, -/turf/open/floor/plasteel/dark, -/area/science/lab) "pYC" = ( /obj/structure/sign/warning{ pixel_y = -32 @@ -58617,12 +58829,25 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"qbm" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "qbp" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"qbV" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space) "qbZ" = ( /obj/structure/rack, /obj/item/clothing/mask/gas, @@ -58677,18 +58902,6 @@ /obj/item/stack/sheet/mineral/wood, /turf/open/floor/plating, /area/maintenance/department/engine) -"qeY" = ( -/turf/closed/wall/r_wall, -/area/engine/supermatter) -"qhE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "qjx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, @@ -58698,38 +58911,10 @@ }, /turf/open/floor/plasteel, /area/construction/mining/aux_base) -"qkM" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/engine/engineering) "qnT" = ( /obj/machinery/iv_drip, /turf/open/floor/plating, /area/maintenance/department/science) -"qpd" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"qpS" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) "qtA" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -58870,21 +59055,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/department/science) -"qLI" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty{ - layer = 4 - }, -/obj/item/stack/cable_coil, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/engineering) "qMi" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/general/visible, @@ -58921,10 +59091,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"qOS" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, +"qPh" = ( +/obj/structure/chair, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/plasteel, /area/engine/engineering) "qPB" = ( /obj/structure/chair/stool, @@ -58933,22 +59103,8 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) -"qRl" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = 29 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"qTV" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -27 - }, -/obj/effect/turf_decal/tile/blue{ +"qUe" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel, @@ -58978,6 +59134,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"qWB" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "qWG" = ( /obj/structure/closet/emcloset/anchored, /turf/open/floor/plating, @@ -59054,6 +59216,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"rax" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "garbage" + }, +/turf/open/floor/plating, +/area/maintenance/disposal) "reH" = ( /obj/item/reagent_containers/food/drinks/bottle/vodka, /obj/structure/disposalpipe/segment{ @@ -59209,6 +59378,23 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) +"rwf" = ( +/obj/machinery/power/emitter/anchored{ + dir = 8; + state = 2 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/engine/engineering) +"rwt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/engine, +/area/engine/engineering) "rxa" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 @@ -59243,6 +59429,13 @@ icon_state = "panelscorched" }, /area/maintenance/department/engine) +"rAZ" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 9 + }, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "rBh" = ( /obj/structure/mopbucket, /obj/item/mop, @@ -59257,6 +59450,19 @@ /obj/item/reagent_containers/blood/random, /turf/open/floor/plating, /area/maintenance/department/science) +"rEt" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "rFq" = ( /obj/structure/chair, /obj/item/reagent_containers/food/snacks/donkpocket, @@ -59264,6 +59470,24 @@ icon_state = "platingdmg3" }, /area/maintenance/department/science) +"rGz" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) +"rHv" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "rHA" = ( /turf/open/floor/plasteel, /area/construction/mining/aux_base) @@ -59322,6 +59546,16 @@ /obj/item/ammo_casing/shotgun/improvised, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"rMt" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "rMV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -59333,6 +59567,16 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/department/science) +"rPd" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -27 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "rPg" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ dir = 8 @@ -59347,13 +59591,12 @@ /obj/item/trash/can, /turf/open/floor/wood, /area/maintenance/department/engine) -"rTd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/yellow{ - icon_state = "4-8" +"rTZ" = ( +/obj/machinery/cryopod{ + dir = 8 }, /turf/open/floor/plasteel, -/area/engine/engineering) +/area/crew_quarters/dorms) "rWE" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -59380,6 +59623,14 @@ }, /turf/open/floor/plating, /area/storage/emergency/starboard) +"saW" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Monastery Transit" + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "sbk" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -59422,6 +59673,17 @@ }, /turf/open/space, /area/space/nearstation) +"sdZ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) +"sfr" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "sgc" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/neutral{ @@ -59436,51 +59698,23 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) -"shH" = ( -/turf/closed/wall/r_wall, -/area/space/nearstation) +"sho" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white{ + heat_capacity = 1e+006 + }, +/area/hallway/secondary/entry) "sij" = ( /obj/structure/closet, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, /turf/open/floor/plating, /area/maintenance/department/engine) -"sjC" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/machinery/power/port_gen/pacman, -/turf/open/floor/plasteel, -/area/engine/engineering) "skw" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall, /area/maintenance/department/security/brig) -"slJ" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1; - light_color = "#d1dfff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"smv" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Cooling Loop to Gas" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "spz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, @@ -59526,12 +59760,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) -"svA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) "svN" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/sign/departments/restroom{ @@ -59539,11 +59767,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"swg" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "sww" = ( /obj/effect/decal/cleanable/blood/old, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, @@ -59578,6 +59801,12 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) +"sAF" = ( +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/landmark/start/station_engineer, +/turf/open/floor/plasteel, +/area/engine/engineering) "sAK" = ( /obj/item/clothing/mask/gas/plaguedoctor, /turf/open/floor/plating, @@ -59615,6 +59844,17 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"sHX" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Cooling Loop to Gas" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/engine, +/area/engine/engineering) "sJp" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, /obj/effect/turf_decal/stripes/line, @@ -59636,6 +59876,21 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"sKw" = ( +/obj/structure/table, +/obj/item/stack/sheet/glass/fifty{ + layer = 4 + }, +/obj/item/stack/cable_coil, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "sNz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -59649,6 +59904,12 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) +"sOQ" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/space/basic, +/area/space) "sQt" = ( /obj/machinery/door/airlock/external{ name = "Supply Dock Airlock"; @@ -59659,6 +59920,37 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) +"sQG" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"sQV" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, +/area/engine/engineering) +"sRH" = ( +/obj/structure/lattice, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/space, +/area/space/nearstation) +"sTg" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "sUP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 @@ -59685,19 +59977,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"sWW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/engine, -/area/engine/engineering) "sXi" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -59712,16 +59991,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/science/xenobiology) -"sYQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "sZh" = ( /obj/structure/closet/crate, /turf/open/floor/plating, @@ -59759,13 +60028,16 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"tbw" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 +"tcC" = ( +/obj/machinery/door/firedoor, +/obj/structure/sign/poster/official/random{ + pixel_x = -32 }, -/turf/open/space, -/area/space/nearstation) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "tcY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -59813,10 +60085,6 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"tdL" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/closed/wall/r_wall, -/area/engine/supermatter) "tfw" = ( /obj/structure/cable{ icon_state = "0-2"; @@ -59862,17 +60130,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"tkL" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "tlc" = ( /obj/machinery/recharger, /obj/structure/table, @@ -59891,12 +60148,14 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"tlV" = ( -/obj/structure/reflector/double/anchored{ - dir = 9 +"tmi" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) +/turf/open/space, +/area/space/nearstation) "tnY" = ( /obj/machinery/button/door{ id = "aux_base_shutters"; @@ -59918,15 +60177,13 @@ icon_state = "panelscorched" }, /area/maintenance/department/security/brig) -"tqO" = ( -/obj/structure/sign/poster/official/random{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/blue{ +"tpX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "tqX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -59938,6 +60195,13 @@ }, /turf/open/floor/plating, /area/science/xenobiology) +"ttX" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/floor/plating, +/area/engine/engineering) "tue" = ( /obj/structure/cable{ icon_state = "2-4" @@ -59994,14 +60258,19 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"tzH" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - id = "research_shutters_2"; - name = "research shutters" +"tzh" = ( +/obj/structure/chair/office/dark{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/science/lab) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/engine/engineering) +"tAv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6 + }, +/turf/open/floor/plating/airless, +/area/engine/engineering) "tAK" = ( /obj/structure/table, /obj/structure/window/reinforced{ @@ -60019,13 +60288,6 @@ /obj/item/wrench, /turf/open/floor/plating, /area/maintenance/department/cargo) -"tDE" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix to Engine" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "tHk" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -60041,33 +60303,13 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"tJr" = ( -/obj/structure/plasticflaps/opaque, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "research_shutters_2"; - name = "research shutters" +"tMA" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ + dir = 5 }, -/turf/open/floor/plasteel, -/area/science/lab) -"tLP" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, -/area/quartermaster/warehouse) -"tOD" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"tQT" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/engineering) +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "tRc" = ( /obj/structure/ore_box, /turf/open/floor/plating{ @@ -60100,6 +60342,11 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"uaa" = ( +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "uaC" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -60112,13 +60359,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"uaO" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space/nearstation) "uaP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -60132,14 +60372,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/science/mixing) -"udl" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "uek" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -60168,21 +60400,27 @@ icon_state = "panelscorched" }, /area/maintenance/department/science) -"ueX" = ( -/obj/structure/table/glass, -/obj/item/book/manual/wiki/engineering_hacking{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/book/manual/wiki/engineering_construction, -/turf/open/floor/plasteel, -/area/engine/engineering) "ufa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"ufr" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) +"ufx" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + id = "research_shutters_2"; + name = "research shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/lab) "ugC" = ( /obj/structure/chair/office/light{ icon_state = "officechair_white"; @@ -60215,16 +60453,6 @@ }, /turf/closed/wall, /area/maintenance/department/engine) -"ukp" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Gas" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/engine, -/area/engine/engineering) "ulu" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -60287,13 +60515,12 @@ "uoS" = ( /turf/open/floor/plating, /area/construction/mining/aux_base) -"upc" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ +"upg" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 6 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "uqJ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -60362,44 +60589,17 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) +"uwT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "uwX" = ( /obj/machinery/field/generator, /turf/open/floor/plating, /area/maintenance/department/engine) -"uxP" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/structure/chair{ - dir = 8; - name = "Defense" - }, -/obj/machinery/camera{ - c_tag = "Atmospherics Starboard"; - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) -"uzh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/engineering/glass/critical{ - heat_proof = 1; - name = "Supermatter Chamber"; - req_access_txt = "10" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/engine, -/area/engine/supermatter) "uzn" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/cable{ @@ -60413,6 +60613,10 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) +"uAL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "uAU" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -60434,6 +60638,11 @@ }, /turf/open/floor/engine, /area/science/explab) +"uBu" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/department/chapel/monastery) "uCS" = ( /obj/machinery/door/poddoor/shutters{ id = "aux_base_shutters"; @@ -60442,6 +60651,16 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/construction/mining/aux_base) +"uDr" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) +"uER" = ( +/turf/closed/wall/r_wall, +/area/space/nearstation) "uHG" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60454,12 +60673,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"uIB" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/engineering) "uLF" = ( /obj/structure/cable{ icon_state = "1-4" @@ -60496,6 +60709,12 @@ /obj/effect/turf_decal/plaque, /turf/open/floor/plating, /area/maintenance/department/engine) +"uQa" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/engine, +/area/engine/supermatter) "uQR" = ( /obj/item/ammo_casing/shotgun/beanbag, /turf/open/floor/plating, @@ -60535,6 +60754,14 @@ /obj/item/stamp/law, /turf/open/floor/carpet, /area/lawoffice) +"uWe" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 2; + name = "External Gas to Loop" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/engine, +/area/engine/engineering) "uXG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60557,12 +60784,28 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard) +"uZs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "vay" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plating, /area/maintenance/department/engine) +"vbQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"vdb" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "veM" = ( /obj/machinery/suit_storage_unit/rd, /obj/machinery/light{ @@ -60580,6 +60823,15 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"vfn" = ( +/obj/structure/plasticflaps/opaque, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "research_shutters_2"; + name = "research shutters" + }, +/turf/open/floor/plasteel, +/area/science/lab) "vgp" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -60597,6 +60849,14 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"vgX" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "vhk" = ( /obj/structure/chair, /turf/open/floor/carpet, @@ -60610,31 +60870,6 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) -"vli" = ( -/obj/structure/table, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/glasses/meson/engine, -/obj/item/pipe_dispenser, -/obj/item/pipe_dispenser, -/obj/item/pipe_dispenser, -/obj/machinery/light, -/obj/effect/turf_decal/delivery, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/engineering) -"vlC" = ( -/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "vlF" = ( /obj/item/coin/silver, /obj/effect/decal/cleanable/oil{ @@ -60669,20 +60904,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) -"voh" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) -"vor" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/engine/engineering) "vpz" = ( /obj/structure/girder, /turf/open/floor/plating{ @@ -60700,31 +60921,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) -"vsw" = ( -/obj/machinery/camera{ - c_tag = "Engineering Supermatter Starboard"; - dir = 8; - network = list("ss13","engine") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"vsG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Research Lab Maintenance"; - req_access_txt = "0"; - req_one_access_txt = "7;29" - }, -/turf/open/floor/plating, -/area/maintenance/department/engine) "vsJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -60758,6 +60954,13 @@ /obj/item/clothing/mask/gas, /turf/open/floor/plating, /area/maintenance/department/science) +"vvr" = ( +/obj/effect/spawner/structure/window/plasma/reinforced, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/engineering) "vxp" = ( /obj/machinery/door/window/eastright{ base_state = "left"; @@ -60771,17 +60974,12 @@ /obj/item/assembly/mousetrap, /turf/open/floor/engine, /area/science/explab) -"vxr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/effect/turf_decal/stripes/line{ +"vyN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, -/area/engine/engineering) +/turf/closed/wall/r_wall, +/area/crew_quarters/heads/hor) "vzz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -60792,15 +60990,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) -"vzA" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "vzP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, @@ -60831,19 +61020,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"vBE" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/light{ - dir = 1; - light_color = "#d1dfff" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "vCC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -60869,16 +61045,36 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"vKq" = ( -/obj/machinery/door/firedoor, -/obj/structure/sign/poster/official/random{ +"vIn" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/closed/wall/r_wall, +/area/engine/engineering) +"vIU" = ( +/obj/structure/transit_tube/horizontal, +/obj/structure/sign/departments/holy{ pixel_x = -32 }, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/plating, +/area/hallway/secondary/entry) +"vJS" = ( +/obj/structure/closet/radiation, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/open/floor/plasteel, -/area/hallway/primary/aft) +/area/engine/engineering) +"vMv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/chapel/main/monastery) "vMx" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -60888,6 +61084,19 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"vMH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) +"vMQ" = ( +/obj/structure/sign/warning/fire, +/turf/closed/wall/r_wall, +/area/engine/supermatter) "vOw" = ( /obj/machinery/door/airlock/grunge{ name = "Library" @@ -60902,6 +61111,13 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/library) +"vPU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) "vRi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -60970,16 +61186,20 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) -"vVO" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/cable/yellow{ - icon_state = "2-8" +"vYi" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/engine, -/area/engine/engineering) +/obj/machinery/door/airlock/maintenance{ + name = "Research Lab Maintenance"; + req_access_txt = "0"; + req_one_access_txt = "7;29" + }, +/turf/open/floor/plating, +/area/maintenance/department/engine) "vYN" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8; @@ -60989,22 +61209,16 @@ }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"wbB" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 2; - name = "External Gas to Loop" +"waN" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/engine, -/area/engine/engineering) -"wbF" = ( -/obj/machinery/rnd/production/circuit_imprinter, -/obj/machinery/camera{ - c_tag = "Engineering Starboard Aft"; - dir = 8 +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "panelscorched" }, -/turf/open/floor/plasteel, -/area/engine/engineering) +/area/maintenance/department/chapel/monastery) "wcs" = ( /turf/open/floor/plasteel/dark, /area/engine/engineering) @@ -61041,24 +61255,10 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"wfG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/crew_quarters/heads/hor) "wfO" = ( /mob/living/simple_animal/hostile/retaliate/poison/snake, /turf/open/floor/plating, /area/maintenance/department/engine) -"wfP" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/machinery/meter, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "wig" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plating{ @@ -61073,22 +61273,14 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "wjm" = ( -/obj/structure/cable{ +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "wkZ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -61117,6 +61309,27 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"wlZ" = ( +/obj/machinery/light/small, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) +"wmA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) +"wnw" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "wnJ" = ( /obj/structure/sign/warning, /turf/closed/wall, @@ -61150,6 +61363,17 @@ }, /turf/open/floor/wood, /area/lawoffice) +"wsx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/engineering) "wun" = ( /obj/structure/cable{ icon_state = "1-2" @@ -61177,6 +61401,9 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"wwK" = ( +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "wxb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -61224,15 +61451,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/bar) -"wDl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel, -/area/engine/engineering) "wDm" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"wDH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/item/tank/internals/plasma, +/turf/open/floor/plating, +/area/engine/supermatter) "wDZ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -61260,18 +61493,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) -"wHI" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, -/turf/open/floor/plating, -/area/engine/engineering) -"wIo" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "wIv" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -61306,12 +61527,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/heads/cmo) -"wLK" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "wMF" = ( /obj/effect/spawner/lootdrop/three_course_meal, /obj/effect/spawner/lootdrop/three_course_meal, @@ -61327,10 +61542,6 @@ /obj/structure/grille, /turf/open/floor/plating, /area/maintenance/department/engine) -"wMX" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/supermatter) "wNq" = ( /obj/structure/cable{ icon_state = "1-4" @@ -61401,6 +61612,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"wSU" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/hallway/secondary/entry) "wTD" = ( /obj/structure/table/wood, /obj/item/folder/red, @@ -61443,6 +61660,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"wXe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/engineering/glass/critical{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/engine, +/area/engine/supermatter) "wXu" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced{ @@ -61460,10 +61687,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"wYK" = ( -/obj/machinery/power/supermatter_crystal/engine, -/turf/open/floor/engine, -/area/engine/supermatter) "xah" = ( /obj/structure/cable{ icon_state = "1-2" @@ -61511,18 +61734,15 @@ /obj/structure/sign/warning/vacuum/external, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) -"xer" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "garbage" - }, -/turf/open/floor/plating, -/area/maintenance/disposal) "xeB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/lawoffice) +"xgB" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/r_wall, +/area/engine/engineering) "xgG" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -61547,12 +61767,11 @@ dir = 1 }, /area/hallway/secondary/exit/departure_lounge) -"xhI" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, -/area/engine/engineering) +"xiY" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "xja" = ( /obj/machinery/light/small{ dir = 4 @@ -61600,10 +61819,34 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"xkf" = ( +/obj/effect/landmark/carpspawn, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"xkL" = ( +/obj/structure/table, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/engineering) "xlA" = ( /obj/machinery/door/airlock/maintenance/abandoned, /turf/open/floor/plating, /area/maintenance/department/science) +"xlY" = ( +/obj/effect/landmark/xeno_spawn, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/department/chapel/monastery) "xmp" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -61658,6 +61901,20 @@ /obj/item/broken_bottle, /turf/open/floor/plating, /area/maintenance/solars/port) +"xuW" = ( +/obj/machinery/atmospherics/pipe/heat_exchanging/simple, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"xvK" = ( +/obj/structure/reflector/single/anchored{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plating, +/area/engine/engineering) "xvO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -61715,6 +61972,10 @@ icon_state = "panelscorched" }, /area/maintenance/department/security/brig) +"xyT" = ( +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "xzp" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -61722,13 +61983,6 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) -"xzR" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine, -/area/engine/engineering) "xCV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -61813,13 +62067,6 @@ /obj/structure/disposalpipe/junction/flip, /turf/open/space/basic, /area/space/nearstation) -"xNy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "xOC" = ( /obj/machinery/door/airlock/external{ name = "Construction Zone"; @@ -61862,6 +62109,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"xVT" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "xWl" = ( /obj/item/pen, /obj/item/paper_bin{ @@ -61873,6 +62126,10 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) +"xXh" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "ybX" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -61910,6 +62167,21 @@ }, /turf/open/floor/plating, /area/maintenance/department/cargo) +"yjy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/turf/open/floor/plasteel/dark, +/area/engine/engineering) +"ykV" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "ymb" = ( /obj/machinery/camera{ c_tag = "Engineering Telecomms Access"; @@ -75971,7 +76243,7 @@ cfN bOw bOw bOw -bOw +bQg bOw ccu cbG @@ -76228,7 +76500,7 @@ bOw bOw bOw bOw -bOw +bQg bUC bOw cbG @@ -76480,12 +76752,12 @@ bOv bNs bNs bWh -bOw -bOw -bOw -bOw -bOw -bOw +bQg +bQg +bQg +bQg +bQg +bQg bOw bOw cbG @@ -76736,7 +77008,7 @@ bQQ bNs bNs bQe -bOw +bQg bOw bOw bOw @@ -76993,7 +77265,7 @@ bNs bNs bOw bOw -bOw +bQg bOw bOw bOw @@ -77250,7 +77522,7 @@ bOw bOw bOw bOw -bOw +bQg bOw bOw bOw @@ -77507,7 +77779,7 @@ bOw bOw bOw bOw -bOw +bQg bOw bOw bUC @@ -77524,7 +77796,7 @@ ctL cgg cfE cfE -cfp +cua cfE cuW cfE @@ -77763,8 +78035,8 @@ bOw bOw bOw bOw -bOw -bOw +bQg +bQg bOw bWV bWV @@ -78020,7 +78292,7 @@ bOw bOw bOw bOw -bOw +bQg bOw bOw bWV @@ -78277,7 +78549,7 @@ bOw bQd bOw bQd -bOw +bQg bQd bWV bWV @@ -78534,7 +78806,7 @@ bOw bQe bOw bOw -bOw +bQg bQe bWV bXJ @@ -78794,7 +79066,7 @@ bQf bQf bQf bWW -bXI +vMv bZn bZn bZn @@ -79036,10 +79308,10 @@ bGG bHL bIW bKc -bOy +cqI bMt bLn -bOy +cqI bPo bQg bQg @@ -79305,7 +79577,7 @@ bOw bQe bOw bOw -bOw +bQg bQe bWV bXJ @@ -79562,7 +79834,7 @@ bOw bQd bOw bQd -bOw +bQg bWi bWV bWV @@ -79789,7 +80061,7 @@ aaa aaa aaa aaa -aaa +btK aaa aaa aaa @@ -79819,7 +80091,7 @@ bOw bOw bOw bOw -bOw +bQg bOw bOw bWV @@ -80044,9 +80316,9 @@ aaa aaa aaa aaa -aZx -aZx -aZx +iaZ +bsl +btL aZx aaa aaa @@ -80060,11 +80332,11 @@ aaa aaa aaa aaa -aaa -bGI +irs +aqG bGE bKf -bLn +gvO bMw bNy bNw @@ -80076,7 +80348,7 @@ bOw bSm bOw bOw -bOw +bQg bOw bOw bWV @@ -80301,9 +80573,9 @@ aaa aaa aaa aaa +iaZ aZx -baJ -bon +bcX aZx aaa aaa @@ -80316,12 +80588,12 @@ aaa aaa aaa aaa -aaa -aaa -bGI +irs +irs +aqG bGE -bKg -bLn +bKf +gvO bMx bNz bHM @@ -80333,7 +80605,7 @@ bOw bOw bOw bOw -bOw +bQg bOw bOw bOw @@ -80348,7 +80620,7 @@ ccJ cdw cel ceM -cfp +cua cfE cfE chn @@ -80559,8 +80831,8 @@ aaa jzz aZx jzz -baK -bon +bsl +btM aZx aaa aaa @@ -80572,17 +80844,17 @@ aaa aaa aaa aaa -aaa -aaa -aaa -bGI -bHM -bGE +irs +irs +irs +aqG bGE +jOX +beT bHM bNA bHM -abI +bSZ bQi bQR bNs @@ -80590,7 +80862,7 @@ bNs bOw bOw bOw -bOw +bQg bOw bOw bOw @@ -80615,8 +80887,8 @@ cvc cho cvk cdx -cvc -cvM +euN +csS cfm cwe fWv @@ -80822,23 +81094,23 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -bIY -bIY -bLs -bMy +mZE +bVp +bVp +bVp +bVp +bVp +gLn +sTg +gLn +gLn +eOA +aZx +llS +kYR +aZx bNB -bMy +hRQ abI aby abI @@ -80847,15 +81119,15 @@ bNs bNs bNs bOw -bOw -bOw -bOw -bOw -bOw -bOw -bOw -bOw -bOw +bQg +bQg +bQg +bQg +bQg +bQg +bQg +bQg +bQg bQg cbR bXJ @@ -80873,7 +81145,7 @@ ciF cuQ cfm cfm -cfm +fwo cfm cwe ckp @@ -81079,29 +81351,29 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aby -aby -aaa -aaa +bGI +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +llS +sho +aZx amC aaa aht aby aby abI -bSn -bSZ +mfg +sRH cqS bNs bQe @@ -81112,8 +81384,8 @@ bQg bQg bQg bOw -bOw -ccL +bQe +bQg bWV csT cen @@ -81130,7 +81402,7 @@ chq ciX cfm cfN -cfN +cwA cfN cwe cwe @@ -81336,21 +81608,21 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bGI +aZx +jkm +tpX +iHI +iHI +iHI +tpX +iHI +hWa +wwK +wSU +llS +wmA +aZx amB aht aht @@ -81359,7 +81631,7 @@ aaa abI abI abI -abI +sRH bNs bNs bNs @@ -81370,7 +81642,7 @@ bXL bNs bOw bOw -bOw +bQg bWV csU bWV @@ -81387,7 +81659,7 @@ chr chL cfm cfN -cfN +xyT cfN cfN cfN @@ -81593,21 +81865,21 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bGI +aZx +oto +wwK +wwK +wwK +uAL +vbQ +vbQ +vbQ +vbQ +vbQ +vbQ +pga +aZx amC aaa aht @@ -81617,7 +81889,7 @@ aaa aaa abI aaa -aaa +sOQ bQR bNs bNs @@ -81627,7 +81899,7 @@ bXM bNs bOw bOw -bOw +bQg bOw ccM cdD @@ -81644,7 +81916,7 @@ chs ciY cfm cfN -cfN +cwA cfN cfN cfN @@ -81850,21 +82122,21 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +bGI +aZx +oto +wwK +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx +aZx amB aht aht @@ -81884,12 +82156,12 @@ bXN bNs bOw bOw -bOw -bOw -bOw -bQe -bOw -bOw +bQg +bQg +bQg +bQg +bQg +bQg cfL cfm cfm @@ -81901,7 +82173,7 @@ cht cfm cfm cfN -cfN +cwA cfN cfN cfN @@ -82107,21 +82379,21 @@ aZx aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aqG +aZx +oto +wwK +aZx +irs +irs +irs +irs +irs +irs +irs +irs +irs +irs amD aaa aht @@ -82144,10 +82416,10 @@ bOw bUC bOw bOw -bOw +bQe bOw bUC -cfM +bQg cfm cgO chu @@ -82158,7 +82430,7 @@ chu ciZ cfm cfN -cfN +cwA cfN cfN cfN @@ -82363,12 +82635,12 @@ bon aZx aaa aaa -btK -aaa -aaa -aaa -aaa -aaa +irs +aqG +aZx +oto +wwK +aZx bBV bDf bDf @@ -82415,8 +82687,8 @@ cfm cfm cfm cfN -cfN -cfN +cwA +cjm cfN cfN cfN @@ -82619,16 +82891,16 @@ bnp bon aZx aZx -bsl -btL aZx -aaa -aaa -aaa +aZx +aZx +aZx +oto +kvx bAI -bBW +qbV abI -aaa +irs abI aaa bva @@ -82654,11 +82926,11 @@ abI ahi bSZ crO -crO -crO -crO -crO -crO +arF +arF +arF +arF +arF crO crO crO @@ -82672,8 +82944,8 @@ cfN cfN cfN cfN -cfN -cfN +wlZ +cjm cfN cfN aaa @@ -82806,7 +83078,7 @@ aeU afo afG aeU -eSB +gHy agy agL agZ @@ -82876,12 +83148,12 @@ bnp baK bbR bbR +bbR +bbR +bbR aZx -bcX -aZx -aYG -aZx -aYG +rHv +saW bAJ bBX bBX @@ -82929,9 +83201,9 @@ cfN cfN cfN cfN -cfN -cfN -aaa +uaa +cjm +irs aaa aaa aaa @@ -83133,13 +83405,13 @@ bnq baM baK baK -bsl -btM +baK +baK +baK aZx -aYG bxY bzz -bAK +vIU bBX bDg bEj @@ -83173,23 +83445,23 @@ caZ cbS ccN bIZ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cjm +cjm +cjm +cjm +cjm +cjm +cjm +cjm +cjm cfN cfN cfN cfN -aaa -aaa -aaa -aaa +uBu +cjm +cjm +irs aaa aaa aaa @@ -83320,7 +83592,7 @@ lGp aeU afI aeU -jXF +dUk agy agN agY @@ -83429,24 +83701,24 @@ bIZ cba cbT bDi -bIZ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cQZ +cwA +cwA +cwA +cwA +lqo +cwA +cwA +cwA +cwA +uaa +ovE +uaa +uBu +xlY +ezo +cjm +aht aaa aaa aaa @@ -83687,23 +83959,23 @@ cbb bDi ccO bIZ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cjm +cjm +xXh +xXh +cjm +cjm +cjm +xXh +xXh +cjm +cjm +cjm +cjm +waN +dzA +cjm +aht aaa aaa aaa @@ -83944,23 +84216,23 @@ bva bNK bva bva -aaa -cFB -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +irs +xkf +dRs +dRs +aht +aht +mau +fon +fon +aht +aht +aht +cjm +cjm +cjm +cjm +aht aaa aaa aaa @@ -84213,11 +84485,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +dRs +dRs +irs +irs +xiY aaa aaa aaa @@ -88824,9 +89096,9 @@ eQN tcY cam cam -sjC +cdI bXk -mci +eVW cbX ceq mhl @@ -89081,7 +89353,7 @@ bpL fQf cbW cbd -cdI +gaQ cri cbX cbX @@ -90619,9 +90891,9 @@ bXh bXZ bYK bZz -nAY +sAF cbd -nRM +fGt cam cdM bXq @@ -90631,8 +90903,8 @@ cfQ bXk qWG bXk -paU -dSp +tAv +pPu cdm aaa aht @@ -90884,22 +91156,22 @@ qtO bXk bXk bXk -svA -mjK -mjK -mjK -wHI -eyj -eyj +fbu +nQf +nQf +nQf +cgt +oge +oge bXk -shH -shH -shH -shH -shH -shH -shH -shH +uER +uER +uER +uER +uER +uER +uER +uER fon fon mau @@ -91131,23 +91403,23 @@ bVH bWr bXj qGZ -bYQ +bYM bZD caj cbf ccb cah cdO -ioF +jOw ceX -qOS +ocy cfS fFv -fmL -gXZ -kmd -lXJ -lXJ +yjy +nIq +mAi +abD +abD bXk aaa aht @@ -91400,10 +91672,10 @@ mwG nAs cfT wcs -ggg +upg qbp qbp -gEo +hUi dMG bXk aaa @@ -91647,14 +91919,14 @@ bXk bYc bYO bZA -xhI +dlI cbh cbh cbh cbh cbh -hjD -vor +nNn +mvA cfU tIS iCs @@ -91904,21 +92176,21 @@ bXk bYd bYP bZF -rTd -wDl -vxr -irM -irM +uZs +lDW +wsx +uwT +uwT qFu cet ulY cfV cgu cgU -izm +kNK chw -eyj -jzE +oge +eMz bXk bXk bXk @@ -92159,31 +92431,31 @@ bVK bWu bXk bYe -bYQ +bYM bZA can cbi ccc -eyj +oge cdR -tQT +vvr bXk bXk -sWW +oBY cgv -lXb +ndf cgv uaP cgv -ukp +ikm cgV cgv cgv -gQf +gkN bXk aht fon -shH +uER fon aaa aaa @@ -92420,27 +92692,27 @@ bYR bZA can cbj -eyj +oge cbX wcs iyJ cfa -eyj +oge twv -hoS +pJx sWj dnS -hSC -jTU -fZK -pgH -pgH +rEt +mZK +nqW +pBs +pBs uRk ciG bXk aaa fon -shH +uER fon aaa aaa @@ -92676,7 +92948,7 @@ bYf bYS bZA can -qpS +eue ccd ccX ccX @@ -92684,20 +92956,20 @@ ceu cbX cfu tlN -ncm +pIk cCI uoq -hQy +wDH chA meF -oKv -wbB -xzR +oTD +uWe +dHF hQC bXk aht fon -shH +uER fon aht aaa @@ -92898,7 +93170,7 @@ bmz bnG boN bpW -dHZ +brk bsK buk bvs @@ -92934,27 +93206,27 @@ bYT bZB caq cbk -eyj +oge ccY cdT ccY cbX -eyj -vlC -iej -qeY +oge +jQn +sQV +dFF fyO fyO fyO -qeY -oKv -wbB -wfP +dFF +oTD +uWe +dGd hQC bXk aaa fon -shH +uER fon aaa aaa @@ -93190,28 +93462,28 @@ bYh bYU bZE car -mgz -eyj +sdZ +oge cbX wcs wcs cfd bXk tlN -ncm -lUO +pIk +obl mpd -hKp -hKp +peb +peb cit -qeY -puw -vBE +dFF +vMQ +gih hQC bXk aht fon -shH +uER fon aaa aaa @@ -93412,7 +93684,7 @@ bkh bkh boN bpW -brk +dVt bsM bum bvt @@ -93453,22 +93725,22 @@ cda wcs wcs wcs -eyj -eAH -lnr -qeY -fBZ -fBZ -fBZ +oge +oFi +wjm +dFF +uQa +uQa +uQa cgY ciI -tdL -dHr +mZV +obG hQC bXk aaa fon -shH +uER fon aaa aaa @@ -93649,7 +93921,7 @@ aSS aUg aVf aWi -mjn +eyT aYe aZb bag @@ -93672,8 +93944,8 @@ bpV brm bsN bun -gGA -bwW +mcf +nnf byA bAi bpY @@ -93702,30 +93974,30 @@ bWz bVN bYf bYW -oWu +hDy cam -vli +cxj ckJ cey cdW wcs cdW -eyj -kTR -mEu -wMX -dFJ -wYK -dFJ -uzh -nUQ -fym -hon +oge +vPU +eux +kDI +fWE +nyN +fWE +wXe +iTE +mlS +jTc hQC bXk aht fon -shH +uER fon aaa aaa @@ -93929,12 +94201,12 @@ bpY bpY bpY bpY -pxD -jZG +gGA +bwW bpY bpY bpY -vsG +vYi bva bva bva @@ -93961,28 +94233,28 @@ bUT bYX bZA cam -lfx +xkL bXk -pCo +xvK wcs wcs -tlV -eyj -qkM -miw -qeY +kBe +oge +mlx +gUS +dFF prQ prQ prQ -dgj -psd -fxC +nPW +mvY +sfr dZj hQC bXk aaa fon -shH +uER fon aaa aaa @@ -94182,17 +94454,17 @@ bls aBI aBI bmB -vKq -nTr -gDR -vzA +tcC +qWB +iHe +qbm bvu -hIZ -tqO -mqp -cKV -iwe -qTV +wnw +cep +ePS +nhW +rGz +rPd xDj blt jCv @@ -94215,31 +94487,31 @@ bVO bWA mCe bYj -bYQ +bYM bZA cam -mgz -eyj +sdZ +oge cbX wcs wcs -dEy +hxh bXk tlN -ncm -puw +pIk +vMQ fyF cZt cZt -fjD -qeY -iTF -slJ +hUf +dFF +mLc +lmv hQC bXk aht fon -shH +uER fon aaa aaa @@ -94447,11 +94719,11 @@ gkS tTl tTl tTl -koz +qUe dgg phJ phJ -lJI +lCY bAk bIt bJB @@ -94472,31 +94744,31 @@ bVP bWB mCe bYk -wjm +bYQ bZF cbm -mgz -eyj -oHa -oHa +sdZ +oge +rwf +rwf eWi cbX -eyj -vlC +oge +jQn cgx -qeY +dFF fyO fyO fyO -qeY +dFF cBS cjt -kaR +mCP hQC bXk aaa fon -shH +uER fon aht aaa @@ -94696,19 +94968,19 @@ blu aDZ aDZ bjm -mhn +nKF cqi cqi cqi cqi cqi -imE -kYM -mfC +erV +rMt +ksC fdQ bmD bmD -eRp +jrb bAl bIu bJC @@ -94732,28 +95004,28 @@ bYl bYO bZA cam -lrM +lCR ccd -cAQ -cAQ -cLw +mlb +mlb +mbD cbX cfu jBn -oxw +ptk meF chA chA woh cCI cBS -iLh +rwt liR hQC bXk aht fon -shH +uER fon aaa aaa @@ -94956,18 +95228,18 @@ bKM cCl cCl cCl -tJr -tzH -tzH +vfn +ufx +ufx byD bAm dhz -uxP +nkk bDA bEQ bGa -bHp -sYQ +bHg +mVj bJD bBo bBo @@ -94990,27 +95262,27 @@ bYY bZA cam cbn -eyj +oge cbX wcs cfP cff -eyj +oge cfX -vVO -iop +kvu +gHp kWQ -oXq -qpd -tkL -tOD -tOD -ikO +iSi +ona +kec +ngg +ngg +cUT hQC bXk aaa fon -shH +uER fon aaa aaa @@ -95211,14 +95483,14 @@ bmC cqi boP bqb -pYw +brp gFo cSK duF -bxa +oxt byE bBp -wfG +vyN bBp bBp bBp @@ -95248,22 +95520,22 @@ bZG cax cbo ccc -eyj +oge cdR -oJr +uDr bXq bXq cfY -xNy -smv -xNy -hGB -hSt +hrx +sHX +hrx +hXm +jjA civ civ -vsw -qRl -oKJ +jtv +ppi +oyE bXk aht fon @@ -95505,19 +95777,19 @@ bZF cal cbp cci -kTj -kTj -qhE -loz -frj -lRX -eyj -uIB -eyj -eyj -uIB -eyj -eyj +dPZ +dPZ +vMH +vJS +vIn +ttX +oge +dGp +oge +oge +dGp +oge +oge bXk bXk bXk @@ -95757,24 +96029,24 @@ bVU bWG bXq bYo -hXK +tzh bZI -hXK +tzh cbq cbd cam cam cam -haA -aKm -upc -wIo -hyh -upc -voh -pBJ -wIo -voh +mCU +cOA +gfh +vdb +rAZ +gfh +tMA +puO +vdb +tMA cdm aaa aaa @@ -96015,23 +96287,23 @@ bWH bXk bTE bZc -ueX +nif cCU bZJ -wbF +mdi cCV ceb -epV -qLI -aKm -eiV -upc -dsz -eiV -eiV -uaO -voh -eiV +qPh +sKw +cOA +sQG +gfh +eqM +sQG +sQG +dhu +tMA +sQG cdm aaa aaa @@ -96271,29 +96543,29 @@ bJN bJN bJN bJN -frj -pYh -pYh -pYh -pYh -pYh -pYh -pYh -pYh -hUw -nqu -nsJ -gBb -nsJ -nsJ -gBb -nsJ -nsJ -dsz +vIn +xgB +xgB +xgB +xgB +xgB +xgB +xgB +xgB +fml +mfx +hJO +dAa +hJO +hJO +dAa +hJO +hJO +eqM aht aht fon -shH +uER fon aaa aaa @@ -96528,7 +96800,7 @@ bVV bWI bXr bKQ -udl +vgX bZK abI abI @@ -96537,20 +96809,20 @@ abI aaa aaa aaa -uaO -wIo -nsJ -gBb -nsJ -nsJ -gBb -nsJ -nsJ -hyh +dhu +vdb +hJO +dAa +hJO +hJO +dAa +hJO +hJO +rAZ aaa aaa fon -shH +uER fon aaa aaa @@ -96785,7 +97057,7 @@ bQI bWJ bXs bJN -cui +lxh bJP bJP bJP @@ -96794,20 +97066,20 @@ bJP abI abI aht -pBJ -wIo -nsJ -gBb -nsJ -nsJ -gBb -nsJ -nsJ -dsz +puO +vdb +hJO +dAa +hJO +hJO +dAa +hJO +hJO +eqM aht aht fon -shH +uER fon aaa aaa @@ -97022,7 +97294,7 @@ bCK bDG bEW bAt -bHg +aIA cqw cqD bKO @@ -97042,7 +97314,7 @@ bMf fuR bXt bYp -eAZ +jPC bZL caz cbs @@ -97051,20 +97323,20 @@ bJP aaa aaa aaa -uaO -wIo -nsJ -gBb -nsJ -nsJ -gBb -nsJ -nsJ -hyh +dhu +vdb +hJO +dAa +hJO +hJO +dAa +hJO +hJO +rAZ aaa aaa fon -shH +uER fon aaa aaa @@ -97299,7 +97571,7 @@ bVW bWL bXu bLW -cui +lxh bMi caA cbt @@ -97308,20 +97580,20 @@ bJP aaa aaa aaa -pBJ -swg -hyh -pBJ -hyh -pBJ -hyh -pBJ -hyh +puO +xuW +rAZ +puO +rAZ +puO +rAZ +puO +rAZ cdm aht aht fon -shH +uER fon aaa aaa @@ -97556,7 +97828,7 @@ bVX bWM bXv bWc -poP +tmi bZL caB cbs @@ -97793,7 +98065,7 @@ bAt bAt bAu bAu -bHp +bHg cqx bJJ bKQ @@ -97808,12 +98080,12 @@ bQI bQI bTM bUs -ljG -hjk -pmB +cAp +ykV +ufr bXw -dJk -tbw +iSL +lQy bJP bJP bJP @@ -98065,7 +98337,7 @@ bMf bMf bTN bUt -wLK +flP bOk bWK bXt @@ -98321,8 +98593,8 @@ bRx bQJ bPQ bTO -ljG -lhP +cAp +xVT bOk bWL bXx @@ -98336,21 +98608,21 @@ bJP aaa aaa fon -shH -shH -shH -shH -shH -shH -shH -shH -shH -shH +uER +uER +uER +uER +uER +uER +uER +uER +uER +uER fon aaa aht -shH -shH +uER +uER fon aaa aaa @@ -98578,7 +98850,7 @@ bPQ bPQ bPQ bTP -wLK +flP bVh bVY bWM @@ -98606,7 +98878,7 @@ fon fon aaa aht -shH +uER fon fon aaa @@ -98835,7 +99107,7 @@ bQK bQK bPQ bTQ -wLK +flP bKX bOk bWN @@ -99092,7 +99364,7 @@ bRy bSf bSR bTM -wLK +flP bKX bVZ bWO @@ -99349,7 +99621,7 @@ bRz bMf bSS bTR -tDE +nYe bKX bWa bMf @@ -99806,7 +100078,7 @@ aHn aIi aJi aKe -klb +kVA aMi aNJ fwl @@ -100844,7 +101116,7 @@ lAs eeQ aUs aLf -eex +lfZ aLf aLf aUl @@ -101368,7 +101640,7 @@ bcA bdF beJ bfB -dps +gaJ aZv aUC biz @@ -102105,7 +102377,7 @@ apX apX avl fIu -epj +rTZ aIh azA dbi @@ -102639,7 +102911,7 @@ aNP aPb aNO aNP -tLP +cRJ aTq aSk aTm @@ -107517,7 +107789,7 @@ aaa aaa aLn aNT -xer +rax aQo aPg aRu @@ -107775,7 +108047,7 @@ aaa aLm aLm aNU -cyp +hCg dqY aRv sZh @@ -108031,8 +108303,8 @@ aaa aaa aLm aME -eFG -cyp +aNV +hCg dqY aRw sqQ @@ -108288,8 +108560,8 @@ aaa aaa aLo aMF -aNV -cyp +aNW +hCg cvf aQn sqQ @@ -108546,8 +108818,8 @@ aaa aLo aMG aNX -cyp -xer +hCg +rax aRy aSn aSn diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index b71b7b8efa..6e21fbe06a 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -40,7 +40,7 @@ #define BALLS_SACK_SIZE_DEF 8 #define BALLS_SACK_SIZE_MAX 40 -#define CUM_RATE 5 +#define CUM_RATE 0.035 #define CUM_RATE_MULT 1 #define CUM_EFFICIENCY 1//amount of nutrition required per life() @@ -115,22 +115,22 @@ //xenobio console upgrade stuff #define XENOBIO_UPGRADE_MONKEYS 1 -#define XENOBIO_UPGRADE_SLIMEBASIC 2 +#define XENOBIO_UPGRADE_SLIMEBASIC 2 #define XENOBIO_UPGRADE_SLIMEADV 4 //stamina stuff -#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement -#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit -#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations +#define STAMINA_SOFTCRIT 100 //softcrit for stamina damage. prevents standing up, prevents performing actions that cost stamina, etc, but doesn't force a rest or stop movement +#define STAMINA_CRIT 140 //crit for stamina damage. forces a rest, and stops movement until stamina goes back to stamina softcrit +#define STAMINA_SOFTCRIT_TRADITIONAL 0 //same as STAMINA_SOFTCRIT except for the more traditional health calculations #define STAMINA_CRIT_TRADITIONAL -40 //ditto, but for STAMINA_CRIT -#define MIN_MELEE_STAMCOST 1.25 //Minimum cost for swinging items around. Will be extra useful when stats and skills are introduced. +#define MIN_MELEE_STAMCOST 1.25 //Minimum cost for swinging items around. Will be extra useful when stats and skills are introduced. #define CRAWLUNDER_DELAY 30 //Delay for crawling under a standing mob //Citadel toggles because bitflag memes -#define MEDIHOUND_SLEEPER 1 -#define EATING_NOISES 2 -#define DIGESTION_NOISES 4 +#define MEDIHOUND_SLEEPER (1<<0) +#define EATING_NOISES (1<<1) +#define DIGESTION_NOISES (1<<2) #define TOGGLES_CITADEL (EATING_NOISES|DIGESTION_NOISES) diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 8d86826ac2..e01bf5669b 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -73,6 +73,8 @@ #define COMSIG_ATOM_CANREACH "atom_can_reach" //from internal loop in atom/movable/proc/CanReach(): (list/next) #define COMPONENT_BLOCK_REACH 1 #define COMSIG_ATOM_SCREWDRIVER_ACT "atom_screwdriver_act" //from base of atom/screwdriver_act(): (mob/living/user, obj/item/I) +#define COMSIG_ATOM_INTERCEPT_TELEPORT "intercept_teleport" //called when teleporting into a protected turf: (channel, turf/origin) + #define COMPONENT_BLOCK_TELEPORT 1 ///////////////// #define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" //from base of atom/attack_ghost(): (mob/dead/observer/ghost) #define COMSIG_ATOM_ATTACK_HAND "atom_attack_hand" //from base of atom/attack_hand(): (mob/user) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 73711fe02d..2ba1563001 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -455,6 +455,13 @@ GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_S #define SUMMON_GUNS "guns" #define SUMMON_MAGIC "magic" +#define TELEPORT_CHANNEL_BLUESPACE "bluespace" //Classic bluespace teleportation, requires a sender but no receiver +#define TELEPORT_CHANNEL_QUANTUM "quantum" //Quantum-based teleportation, requires both sender and receiver, but is free from normal disruption +#define TELEPORT_CHANNEL_WORMHOLE "wormhole" //Wormhole teleportation, is not disrupted by bluespace fluctuations but tends to be very random or unsafe +#define TELEPORT_CHANNEL_MAGIC "magic" //Magic teleportation, does whatever it wants (unless there's antimagic) +#define TELEPORT_CHANNEL_CULT "cult" //Cult teleportation, does whatever it wants (unless there's holiness) +#define TELEPORT_CHANNEL_FREE "free" //Anything else + //Run the world with this parameter to enable a single run though of the game setup and tear down process with unit tests in between #define TEST_RUN_PARAMETER "test-run" //Force the log directory to be something specific in the data/logs folder diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index 897d107939..928f364a81 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -1,5 +1,55 @@ // Radios use a large variety of predefined frequencies. +//say based modes like binary are in living/say.dm + +#define RADIO_CHANNEL_COMMON "Common" +#define RADIO_KEY_COMMON ";" + +#define RADIO_CHANNEL_SECURITY "Security" +#define RADIO_KEY_SECURITY "s" +#define RADIO_TOKEN_SECURITY ":s" + +#define RADIO_CHANNEL_ENGINEERING "Engineering" +#define RADIO_KEY_ENGINEERING "e" +#define RADIO_TOKEN_ENGINEERING ":e" + +#define RADIO_CHANNEL_COMMAND "Command" +#define RADIO_KEY_COMMAND "c" +#define RADIO_TOKEN_COMMAND ":c" + +#define RADIO_CHANNEL_SCIENCE "Science" +#define RADIO_KEY_SCIENCE "n" +#define RADIO_TOKEN_SCIENCE ":n" + +#define RADIO_CHANNEL_MEDICAL "Medical" +#define RADIO_KEY_MEDICAL "m" +#define RADIO_TOKEN_MEDICAL ":m" + +#define RADIO_CHANNEL_SUPPLY "Supply" +#define RADIO_KEY_SUPPLY "u" +#define RADIO_TOKEN_SUPPLY ":u" + +#define RADIO_CHANNEL_SERVICE "Service" +#define RADIO_KEY_SERVICE "v" +#define RADIO_TOKEN_SERVICE ":v" + +#define RADIO_CHANNEL_AI_PRIVATE "AI Private" +#define RADIO_KEY_AI_PRIVATE "o" +#define RADIO_TOKEN_AI_PRIVATE ":o" + + +#define RADIO_CHANNEL_SYNDICATE "Syndicate" +#define RADIO_KEY_SYNDICATE "t" +#define RADIO_TOKEN_SYNDICATE ":t" + +#define RADIO_CHANNEL_CENTCOM "CentCom" +#define RADIO_KEY_CENTCOM "y" +#define RADIO_TOKEN_CENTCOM ":y" + +#define RADIO_CHANNEL_CTF_RED "Red Team" +#define RADIO_CHANNEL_CTF_BLUE "Blue Team" + + #define MIN_FREE_FREQ 1201 // ------------------------------------------------- // Frequencies are always odd numbers and range from 1201 to 1599. diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 82fbfdb848..e655408db1 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -6,17 +6,43 @@ //Message modes. Each one defines a radio channel, more or less. #define MODE_HEADSET "headset" #define MODE_ROBOT "robot" + #define MODE_R_HAND "right hand" +#define MODE_KEY_R_HAND "r" + #define MODE_L_HAND "left hand" +#define MODE_KEY_L_HAND "l" + #define MODE_INTERCOM "intercom" +#define MODE_KEY_INTERCOM "i" + #define MODE_BINARY "binary" +#define MODE_KEY_BINARY "b" +#define MODE_TOKEN_BINARY ":b" + #define MODE_WHISPER "whisper" #define MODE_WHISPER_CRIT "whispercrit" + #define MODE_DEPARTMENT "department" +#define MODE_KEY_DEPARTMENT "h" +#define MODE_TOKEN_DEPARTMENT ":h" + +#define MODE_ADMIN "admin" +#define MODE_KEY_ADMIN "p" + +#define MODE_DEADMIN "deadmin" +#define MODE_KEY_DEADMIN "d" + #define MODE_ALIEN "alientalk" #define MODE_HOLOPAD "holopad" + #define MODE_CHANGELING "changeling" +#define MODE_KEY_CHANGELING "g" +#define MODE_TOKEN_CHANGELING ":g" + #define MODE_VOCALCORDS "cords" +#define MODE_KEY_VOCALCORDS "x" + #define MODE_MONKEY "monkeyhive" //Spans. Robot speech, italics, etc. Applied in compose_message(). diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 7bcb4881f0..e23d8dba76 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -128,6 +128,7 @@ #define TRAIT_HEAVY_SLEEPER "heavy_sleeper" #define TRAIT_NIGHT_VISION "night_vision" #define TRAIT_LIGHT_STEP "light_step" +#define TRAIT_SILENT_STEP "silent_step" #define TRAIT_SPEEDY_STEP "speedy_step" #define TRAIT_SPIRITUAL "spiritual" #define TRAIT_VORACIOUS "voracious" diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index f432e44b18..2f56c69384 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -87,17 +87,20 @@ SUBSYSTEM_DEF(vote) /datum/controller/subsystem/vote/proc/announce_result() var/list/winners = get_result() var/text + var/was_roundtype_vote = mode == "roundtype" if(winners.len > 0) if(question) text += "[question]" else text += "[capitalize(mode)] Vote" - stored_gamemode_votes = list() + if(was_roundtype_vote) + stored_gamemode_votes = list() for(var/i=1,i<=choices.len,i++) var/votes = choices[choices[i]] if(!votes) votes = 0 - stored_gamemode_votes[choices[i]] = votes + if(was_roundtype_vote) + stored_gamemode_votes[choices[i]] = votes text += "\n[choices[i]]: [obfuscated ? "???" : votes]" //CIT CHANGE - adds obfuscated votes if(mode != "custom") if(winners.len > 1 && !obfuscated) //CIT CHANGE - adds obfuscated votes diff --git a/code/datums/action.dm b/code/datums/action.dm index f64a549b29..fd33ef79b5 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -494,6 +494,7 @@ else to_chat(owner, "Your hands are full!") +//MGS Box /datum/action/item_action/agent_box name = "Deploy Box" desc = "Find inner peace, here, in the box." @@ -502,21 +503,27 @@ icon_icon = 'icons/mob/actions/actions_items.dmi' button_icon_state = "deploy_box" var/cooldown = 0 - var/obj/structure/closet/cardboard/agent/box + var/boxtype = /obj/structure/closet/cardboard/agent +//Handles open and closing the box /datum/action/item_action/agent_box/Trigger() - if(!..()) + . = ..() + if(!.) return FALSE - if(QDELETED(box)) - if(cooldown < world.time - 100) - box = new(owner.drop_location()) - owner.forceMove(box) - cooldown = world.time - owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) - else - owner.forceMove(box.drop_location()) + if(istype(owner.loc, /obj/structure/closet/cardboard/agent)) + var/obj/structure/closet/cardboard/agent/box = owner.loc + owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) + box.open() + return + //Box closing from here on out. + if(!isturf(owner.loc)) //Don't let the player use this to escape mechs/welded closets. + to_chat(owner, "You need more space to activate this implant.") + return + if(cooldown < world.time - 100) + var/box = new boxtype(owner.drop_location()) + owner.forceMove(box) + cooldown = world.time owner.playsound_local(box, 'sound/misc/box_deploy.ogg', 50, TRUE) - QDEL_NULL(box) //Preset for spells /datum/action/spell_action diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm index bfcc49f453..e6c9f20de6 100644 --- a/code/datums/components/footstep.dm +++ b/code/datums/components/footstep.dm @@ -14,15 +14,18 @@ var/turf/open/T = get_turf(parent) if(!istype(T)) return - + var/mob/living/LM = parent var/v = volume var/e = e_range if(!T.footstep || LM.buckled || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.movement_type & (VENTCRAWLING | FLYING)) - if (LM.lying && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying + if (LM.lying && !LM.buckled && !(!T.footstep || LM.movement_type & (VENTCRAWLING | FLYING))) //play crawling sound if we're lying playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v) return - + + if(HAS_TRAIT(LM, TRAIT_SILENT_STEP)) + return + if(iscarbon(LM)) var/mob/living/carbon/C = LM if(!C.get_bodypart(BODY_ZONE_L_LEG) && !C.get_bodypart(BODY_ZONE_R_LEG)) @@ -31,18 +34,18 @@ v /= 2 e -= 5 steps++ - + if(steps >= 3) steps = 0 - + else return - + if(prob(80) && !LM.has_gravity(T)) // don't need to step as often when you hop around return - + //begin playsound shenanigans// - + //for barefooted non-clawed mobs like monkeys if(isbarefoot(LM)) playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]), @@ -50,19 +53,19 @@ TRUE, GLOB.barefootstep[T.barefootstep][3] + e) return - + //for xenomorphs, dogs, and other clawed mobs if(isclawfoot(LM)) if(isalienadult(LM)) //xenos are stealthy and get quieter footsteps v /= 3 e -= 5 - + playsound(T, pick(GLOB.clawfootstep[T.clawfootstep][1]), GLOB.clawfootstep[T.clawfootstep][2] * v, TRUE, GLOB.clawfootstep[T.clawfootstep][3] + e) return - + //for megafauna and other large and imtimidating mobs such as the bloodminer if(isheavyfoot(LM)) playsound(T, pick(GLOB.heavyfootstep[T.heavyfootstep][1]), @@ -70,12 +73,12 @@ TRUE, GLOB.heavyfootstep[T.heavyfootstep][3] + e) return - + //for slimes - if(isslime(LM)) + if(isslime(LM)) playsound(T, 'sound/effects/footstep/slime1.ogg', 15 * v) return - + //for (simple) humanoid mobs (clowns, russians, pirates, etc.) if(isshoefoot(LM)) if(!ishuman(LM)) @@ -87,17 +90,17 @@ if(ishuman(LM)) //for proper humans, they're special var/mob/living/carbon/human/H = LM var/feetCover = (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)) || (H.w_uniform && (H.w_uniform.body_parts_covered & FEET)) - + if (H.dna.features["taur"] == "Naga" || H.dna.features["taur"] == "Tentacle") //are we a naga or tentacle taur creature playsound(T, 'sound/effects/footstep/crawl1.ogg', 15 * v) return - + if(H.shoes || feetCover) //are we wearing shoes playsound(T, pick(GLOB.footstep[T.footstep][1]), GLOB.footstep[T.footstep][2] * v, TRUE, GLOB.footstep[T.footstep][3] + e) - + if((!H.shoes && !feetCover)) //are we NOT wearing shoes playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]), GLOB.barefootstep[T.barefootstep][2] * v, diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 0623e2f5f9..4d1986cccf 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -5,11 +5,19 @@ // effectout: effect to show right after teleportation // asoundin: soundfile to play before teleportation // asoundout: soundfile to play after teleportation -// force_teleport: if false, teleport will use Move() proc (dense objects will prevent teleportation) // no_effects: disable the default effectin/effectout of sparks -/proc/do_teleport(atom/movable/teleatom, atom/destination, precision=null, force_teleport=TRUE, datum/effect_system/effectin=null, datum/effect_system/effectout=null, asoundin=null, asoundout=null, no_effects=FALSE) +// forceMove: if false, teleport will use Move() proc (dense objects will prevent teleportation) +// forced: whether or not to ignore no_teleport +/proc/do_teleport(atom/movable/teleatom, atom/destination, precision=null, forceMove = TRUE, datum/effect_system/effectin=null, datum/effect_system/effectout=null, asoundin=null, asoundout=null, no_effects=FALSE, channel=TELEPORT_CHANNEL_BLUESPACE, forced = FALSE) // teleporting most effects just deletes them - if(iseffect(teleatom) && !istype(teleatom, /obj/effect/dummy/chameleon)) + var/static/list/delete_atoms = typecacheof(list( + /obj/effect, + )) - typecacheof(list( + /obj/effect/dummy/chameleon, + /obj/effect/wisp, + /obj/effect/mob_spawn + )) + if(delete_atoms[teleatom.type]) qdel(teleatom) return FALSE @@ -17,25 +25,37 @@ // if the precision is not specified, default to 0, but apply BoH penalties if (isnull(precision)) precision = 0 - if(istype(teleatom, /obj/item/storage/backpack/holding)) - precision = rand(1,100) - var/static/list/bag_cache = typecacheof(/obj/item/storage/backpack/holding) - var/list/bagholding = typecache_filter_list(teleatom.GetAllContents(), bag_cache) - if(bagholding.len) - precision = max(rand(1,100)*bagholding.len,100) - if(isliving(teleatom)) - var/mob/living/MM = teleatom - to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!") + switch(channel) + if(TELEPORT_CHANNEL_BLUESPACE) + if(istype(teleatom, /obj/item/storage/backpack/holding)) + precision = rand(1,100) - // if effects are not specified and not explicitly disabled, sparks - if ((!effectin || !effectout) && !no_effects) - var/datum/effect_system/spark_spread/sparks = new - sparks.set_up(5, 1, teleatom) - if (!effectin) - effectin = sparks - if (!effectout) - effectout = sparks + var/static/list/bag_cache = typecacheof(/obj/item/storage/backpack/holding) + var/list/bagholding = typecache_filter_list(teleatom.GetAllContents(), bag_cache) + if(bagholding.len) + precision = max(rand(1,100)*bagholding.len,100) + if(isliving(teleatom)) + var/mob/living/MM = teleatom + to_chat(MM, "The bluespace interface on your bag of holding interferes with the teleport!") + + // if effects are not specified and not explicitly disabled, sparks + if ((!effectin || !effectout) && !no_effects) + var/datum/effect_system/spark_spread/sparks = new + sparks.set_up(5, 1, teleatom) + if (!effectin) + effectin = sparks + if (!effectout) + effectout = sparks + if(TELEPORT_CHANNEL_QUANTUM) + // if effects are not specified and not explicitly disabled, rainbow sparks + if ((!effectin || !effectout) && !no_effects) + var/datum/effect_system/spark_spread/quantum/sparks = new + sparks.set_up(5, 1, teleatom) + if (!effectin) + effectin = sparks + if (!effectout) + effectout = sparks // perform the teleport var/turf/curturf = get_turf(teleatom) @@ -45,11 +65,15 @@ return FALSE var/area/A = get_area(curturf) - if(A.noteleport) + var/area/B = get_area(destturf) + if(!forced && (A.noteleport || B.noteleport)) + return FALSE + + if(SEND_SIGNAL(destturf, COMSIG_ATOM_INTERCEPT_TELEPORT, channel, curturf, destturf)) return FALSE tele_play_specials(teleatom, curturf, effectin, asoundin) - var/success = force_teleport ? teleatom.forceMove(destturf) : teleatom.Move(destturf) + var/success = forceMove ? teleatom.forceMove(destturf) : teleatom.Move(destturf) if (success) log_game("[key_name(teleatom)] has teleported from [loc_name(curturf)] to [loc_name(destturf)]") tele_play_specials(teleatom, destturf, effectout, asoundout) diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 9e40a5a3dc..6379d481ca 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -197,7 +197,7 @@ name = "combat gloves plus" desc = "These tactical gloves are fireproof and shock resistant, and using nanochip technology it teaches you the powers of krav maga." icon_state = "combat" - item_state = "blackglovesplus" + item_state = "blackgloves" siemens_coefficient = 0 permeability_coefficient = 0.05 strip_delay = 80 diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 461c221ff8..a32220aa43 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -63,16 +63,14 @@ /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.resize = 0.8 - owner.update_transform() + owner.transform = owner.transform.Scale(1, 0.8) owner.pass_flags |= PASSTABLE owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") /datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.resize = 1.25 - owner.update_transform() + owner.transform = owner.transform.Scale(1, 1.25) owner.pass_flags &= ~PASSTABLE owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 22fca23902..9762426608 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -305,3 +305,9 @@ suffix = "spacehermit.dmm" name = "Space Hermit" description = "A late awakening cryo pod in a crashed escape pod wakes up to find what befell of his fellow survivors. Contains all the necessary resources to actually make it out alive. Good luck." + +/datum/map_template/ruin/space/advancedlab + id = "advancedlab" + suffix = "advancedlab.dmm" + name = "Abductor Replication Lab" + description = "Some scientists tried and almost succeeded to recreate abductor tools. Somewhat slower and a bit less modern than their originals, these tools are the best you can get if you aren't an alien." diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index c4f485653e..3b6fae5aee 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -11,7 +11,7 @@ /datum/saymode/changeling - key = "g" + key = MODE_KEY_CHANGELING mode = MODE_CHANGELING /datum/saymode/changeling/handle_message(mob/living/user, message, datum/language/language) @@ -73,7 +73,7 @@ /datum/saymode/vocalcords - key = "x" + key = MODE_KEY_VOCALCORDS mode = MODE_VOCALCORDS /datum/saymode/vocalcords/handle_message(mob/living/user, message, datum/language/language) @@ -87,7 +87,7 @@ /datum/saymode/binary //everything that uses .b (silicons, drones, blobbernauts/spores, swarmers) - key = "b" + key = MODE_KEY_BINARY mode = MODE_BINARY /datum/saymode/binary/handle_message(mob/living/user, message, datum/language/language) diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index f1b08ee18b..fab5a1313c 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -231,6 +231,9 @@ // Same for anyone with an abductor multitool. else if(user.is_holding_item_of_type(/obj/item/multitool/abductor)) reveal_wires = TRUE + // and advanced multitool + else if(user.is_holding_item_of_type(/obj/item/multitool/advanced)) + reveal_wires = TRUE // Station blueprints do that too, but only if the wires are not randomized. else if(user.is_holding_item_of_type(/obj/item/areaeditor/blueprints) && !randomize) diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm index 00a7fed012..d5ceb833b7 100644 --- a/code/game/area/areas/ruins/space.dm +++ b/code/game/area/areas/ruins/space.dm @@ -467,3 +467,8 @@ /area/ruin/space/has_grav/powered/ancient_shuttle name = "Ancient Shuttle" icon_state = "yellow" + +// Abductor Replication Lab +/area/ruin/space/has_grav/powered/advancedlab + name = "Abductor Replication Lab" + icon_state = "yellow" diff --git a/code/game/communications.dm b/code/game/communications.dm index 212a99f966..ed470473d9 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -91,35 +91,35 @@ GLOBAL_LIST_EMPTY(all_radios) // use in maps, such as in intercoms. GLOBAL_LIST_INIT(radiochannels, list( - "Common" = FREQ_COMMON, - "Science" = FREQ_SCIENCE, - "Command" = FREQ_COMMAND, - "Medical" = FREQ_MEDICAL, - "Engineering" = FREQ_ENGINEERING, - "Security" = FREQ_SECURITY, - "CentCom" = FREQ_CENTCOM, - "Syndicate" = FREQ_SYNDICATE, - "Supply" = FREQ_SUPPLY, - "Service" = FREQ_SERVICE, - "AI Private" = FREQ_AI_PRIVATE, - "Red Team" = FREQ_CTF_RED, - "Blue Team" = FREQ_CTF_BLUE + RADIO_CHANNEL_COMMON = FREQ_COMMON, + RADIO_CHANNEL_SCIENCE = FREQ_SCIENCE, + RADIO_CHANNEL_COMMAND = FREQ_COMMAND, + RADIO_CHANNEL_MEDICAL = FREQ_MEDICAL, + RADIO_CHANNEL_ENGINEERING = FREQ_ENGINEERING, + RADIO_CHANNEL_SECURITY = FREQ_SECURITY, + RADIO_CHANNEL_CENTCOM = FREQ_CENTCOM, + RADIO_CHANNEL_SYNDICATE = FREQ_SYNDICATE, + RADIO_CHANNEL_SUPPLY = FREQ_SUPPLY, + RADIO_CHANNEL_SERVICE = FREQ_SERVICE, + RADIO_CHANNEL_AI_PRIVATE = FREQ_AI_PRIVATE, + RADIO_CHANNEL_CTF_RED = FREQ_CTF_RED, + RADIO_CHANNEL_CTF_BLUE = FREQ_CTF_BLUE )) GLOBAL_LIST_INIT(reverseradiochannels, list( - "[FREQ_COMMON]" = "Common", - "[FREQ_SCIENCE]" = "Science", - "[FREQ_COMMAND]" = "Command", - "[FREQ_MEDICAL]" = "Medical", - "[FREQ_ENGINEERING]" = "Engineering", - "[FREQ_SECURITY]" = "Security", - "[FREQ_CENTCOM]" = "CentCom", - "[FREQ_SYNDICATE]" = "Syndicate", - "[FREQ_SUPPLY]" = "Supply", - "[FREQ_SERVICE]" = "Service", - "[FREQ_AI_PRIVATE]" = "AI Private", - "[FREQ_CTF_RED]" = "Red Team", - "[FREQ_CTF_BLUE]" = "Blue Team" + "[FREQ_COMMON]" = RADIO_CHANNEL_COMMON, + "[FREQ_SCIENCE]" = RADIO_CHANNEL_SCIENCE, + "[FREQ_COMMAND]" = RADIO_CHANNEL_COMMAND, + "[FREQ_MEDICAL]" = RADIO_CHANNEL_MEDICAL, + "[FREQ_ENGINEERING]" = RADIO_CHANNEL_ENGINEERING, + "[FREQ_SECURITY]" = RADIO_CHANNEL_SECURITY, + "[FREQ_CENTCOM]" = RADIO_CHANNEL_CENTCOM, + "[FREQ_SYNDICATE]" = RADIO_CHANNEL_SYNDICATE, + "[FREQ_SUPPLY]" = RADIO_CHANNEL_SUPPLY, + "[FREQ_SERVICE]" = RADIO_CHANNEL_SERVICE, + "[FREQ_AI_PRIVATE]" = RADIO_CHANNEL_AI_PRIVATE, + "[FREQ_CTF_RED]" = RADIO_CHANNEL_CTF_RED, + "[FREQ_CTF_BLUE]" = RADIO_CHANNEL_CTF_BLUE )) /datum/radio_frequency diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index 94ca86e0dd..808022d25f 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -52,7 +52,7 @@ Credit where due: if(!istype(M)) return FALSE if(M.mind) - if(ishuman(M) && (M.mind.assigned_role in list("Captain", "Chaplain"))) + if(M.mind.assigned_role in list("Captain", "Chaplain")) return FALSE if(M.mind.enslaved_to && !is_servant_of_ratvar(M.mind.enslaved_to)) return FALSE @@ -275,7 +275,7 @@ Credit where due: gloves = /obj/item/clothing/gloves/color/yellow belt = /obj/item/storage/belt/utility/servant backpack_contents = list(/obj/item/storage/box/engineer = 1, \ - /obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1, /obj/item/reagent_containers/food/drinks/holyoil = 1) + /obj/item/clockwork/replica_fabricator = 1, /obj/item/stack/tile/brass/fifty = 1, /obj/item/paper/servant_primer = 1, /obj/item/reagent_containers/food/drinks/bottle/holyoil = 1) id = /obj/item/pda var/plasmaman //We use this to determine if we should activate internals in post_equip() diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 8f091b6372..e7cc3c53ae 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -16,7 +16,7 @@ if(!istype(M)) return FALSE if(M.mind) - if(ishuman(M) && (M.mind.assigned_role in list("Captain", "Chaplain"))) + if(M.mind.assigned_role in list("Captain", "Chaplain")) return FALSE if(specific_cult && specific_cult.is_sacrifice_target(M.mind)) return FALSE diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index 71dcb89ce7..0b9ed6bb3f 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -6,7 +6,7 @@ var/siphoning = FALSE var/next_warning = 0 var/obj/item/radio/radio - var/radio_channel = "Common" + var/radio_channel = RADIO_CHANNEL_COMMON var/minimum_time_between_warnings = 400 /obj/machinery/computer/bank_machine/Initialize() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index f32772b600..4f04335852 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -31,7 +31,7 @@ var/internal_radio = TRUE var/obj/item/radio/radio var/radio_key = /obj/item/encryptionkey/headset_med - var/radio_channel = "Medical" + var/radio_channel = RADIO_CHANNEL_MEDICAL var/obj/effect/countdown/clonepod/countdown diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 8d0cfb95e8..e38445f606 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -57,6 +57,7 @@ /obj/item/stack/tile/fakespace/loaded = ARCADE_WEIGHT_TRICK, /obj/item/stack/tile/fakepit/loaded = ARCADE_WEIGHT_TRICK, /obj/item/restraints/handcuffs/fake = ARCADE_WEIGHT_TRICK, + /obj/item/clothing/gloves/rapid/hug = ARCADE_WEIGHT_TRICK, /obj/item/grenade/chem_grenade/glitter/pink = ARCADE_WEIGHT_TRICK, /obj/item/grenade/chem_grenade/glitter/blue = ARCADE_WEIGHT_TRICK, diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 86fcefb340..43582e39bf 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -361,14 +361,16 @@ return button_icon_state = "warp_down" owner.update_action_buttons() + QDEL_NULL(warping) + if(!do_teleport(user, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)) + to_chat(user, "Warp Failed. Something deflected our attempt to warp to [AR].") + return T.visible_message("[user] warps in!") playsound(user, 'sound/magic/magic_missile.ogg', 50, TRUE) playsound(T, 'sound/magic/magic_missile.ogg', 50, TRUE) - user.forceMove(get_turf(T)) user.setDir(SOUTH) flash_color(user, flash_color = "#AF0AAF", flash_time = 5) R.remove_eye_control(user) - QDEL_NULL(warping) /datum/action/innate/servant_warp/proc/is_canceled() return !cancel diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index bfa6b46134..1654768de0 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -1,4 +1,4 @@ -#define AUTOCLONING_MINIMAL_LEVEL 3 +#define AUTOCLONING_MINIMAL_LEVEL 4 /obj/machinery/computer/cloning name = "cloning console" diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 03c60be91c..84a688c724 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -63,7 +63,7 @@ if(91 to INFINITY) filling_overlay.icon_state = "reagent100" - filling_overlay.color = list("#0000", "#0000", "#0000", "#000f", mix_color_from_reagents(beaker.reagents.reagent_list)) + filling_overlay.color = mix_color_from_reagents(beaker.reagents.reagent_list) add_overlay(filling_overlay) /obj/machinery/iv_drip/MouseDrop(mob/living/target) diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 4016c32162..db59f3f413 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -127,7 +127,7 @@ if(first_inner) log_msg += "empty" log_msg += ")" - do_teleport(ROI, dest, no_effects = !first) + do_teleport(ROI, dest, no_effects = !first, channel = TELEPORT_CHANNEL_BLUESPACE) first = FALSE if (first) @@ -206,7 +206,7 @@ /obj/item/storage/briefcase/launchpad/PopulateContents() new /obj/item/pen(src) - new /obj/item/launchpad_remote(src, pad) + new /obj/item/launchpad_remote(src, pad) /obj/item/storage/briefcase/launchpad/attack_self(mob/user) if(!isturf(user.loc)) //no setting up in a locker @@ -227,7 +227,7 @@ L.pad = src.pad to_chat(user, "You link [pad] to [L].") else - return ..() + return ..() /obj/item/launchpad_remote name = "folder" diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 7a8552607b..b5ef38b42c 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -36,7 +36,7 @@ to_chat(user, "The panel is screwed in, obstructing the linking device.") else to_chat(user, "The linking device is now able to be scanned with a multitool.") - + /obj/machinery/quantumpad/RefreshParts() var/E = 0 for(var/obj/item/stock_parts/capacitor/C in component_parts) @@ -74,15 +74,26 @@ to_chat(user, "There is no quantum pad data saved in [I]'s buffer!") return TRUE + else if(istype(I, /obj/item/quantum_keycard)) + var/obj/item/quantum_keycard/K = I + if(K.qpad) + to_chat(user, "You insert [K] into [src]'s card slot, activating it.") + interact(user, K.qpad) + else + to_chat(user, "You insert [K] into [src]'s card slot, initiating the link procedure.") + if(do_after(user, 40, target = src)) + to_chat(user, "You complete the link between [K] and [src].") + K.qpad = src + if(default_deconstruction_crowbar(I)) return return ..() -/obj/machinery/quantumpad/interact(mob/user) - if(!linked_pad || QDELETED(linked_pad)) +/obj/machinery/quantumpad/interact(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) + if(!target_pad || QDELETED(target_pad)) if(!map_pad_link_id || !initMappedLink()) - to_chat(user, "There is no linked pad!") + to_chat(user, "Target pad not found!") return if(world.time < last_teleport + teleport_cooldown) @@ -93,18 +104,18 @@ to_chat(user, "[src] is charging up. Please wait.") return - if(linked_pad.teleporting) - to_chat(user, "Linked pad is busy. Please wait.") + if(target_pad.teleporting) + to_chat(user, "Target pad is busy. Please wait.") return - if(linked_pad.stat & NOPOWER) - to_chat(user, "Linked pad is not responding to ping.") + if(target_pad.stat & NOPOWER) + to_chat(user, "Target pad is not responding to ping.") return add_fingerprint(user) - doteleport(user) + doteleport(user, target_pad) /obj/machinery/quantumpad/proc/sparks() - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + var/datum/effect_system/spark_spread/quantum/s = new s.set_up(5, 1, get_turf(src)) s.start() @@ -117,8 +128,8 @@ if(linked_pad) ghost.forceMove(get_turf(linked_pad)) -/obj/machinery/quantumpad/proc/doteleport(mob/user) - if(linked_pad) +/obj/machinery/quantumpad/proc/doteleport(mob/user, obj/machinery/quantumpad/target_pad = linked_pad) + if(target_pad) playsound(get_turf(src), 'sound/weapons/flash.ogg', 25, 1) teleporting = TRUE @@ -130,7 +141,7 @@ to_chat(user, "[src] is unpowered!") teleporting = FALSE return - if(!linked_pad || QDELETED(linked_pad) || linked_pad.stat & NOPOWER) + if(!target_pad || QDELETED(target_pad) || target_pad.stat & NOPOWER) to_chat(user, "Linked pad is not responding to ping. Teleport aborted.") teleporting = FALSE return @@ -141,26 +152,30 @@ // use a lot of power use_power(10000 / power_efficiency) sparks() - linked_pad.sparks() + target_pad.sparks() flick("qpad-beam", src) playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) - flick("qpad-beam", linked_pad) - playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) + flick("qpad-beam", target_pad) + playsound(get_turf(target_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) for(var/atom/movable/ROI in get_turf(src)) + if(QDELETED(ROI)) + continue //sleeps in CHECK_TICK + // if is anchored, don't let through if(ROI.anchored) if(isliving(ROI)) var/mob/living/L = ROI - if(L.buckled) - // TP people on office chairs - if(L.buckled.anchored) - continue + //only TP living mobs buckled to non anchored items + if(!L.buckled || L.buckled.anchored) + continue else continue + //Don't TP camera mobs else if(!isobserver(ROI)) continue - do_teleport(ROI, get_turf(linked_pad)) + do_teleport(ROI, get_turf(target_pad),null,TRUE,null,null,null,null,TRUE, channel = TELEPORT_CHANNEL_QUANTUM) + CHECK_TICK /obj/machinery/quantumpad/proc/initMappedLink() . = FALSE diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index cc83e6502a..1f1f13ee22 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -66,18 +66,18 @@ visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return if (ismovableatom(M)) - if(do_teleport(M, com.target)) + if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE)) use_power(5000) - if(!calibrated && prob(30 - ((accurate) * 10))) //oh dear a problem - log_game("[M] ([key_name(M)]) was turned into a fly person") - if(ishuman(M))//don't remove people from the round randomly you jerks - var/mob/living/carbon/human/human = M - if(human.dna && human.dna.species.id == "human") - to_chat(M, "You hear a buzzing in your ears.") - human.set_species(/datum/species/fly) - human.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0) - calibrated = 0 + if(!calibrated && iscarbon(M) && prob(30 - ((accurate) * 10))) //oh dear a problem + var/mob/living/carbon/C = M + if(C.dna?.species && C.dna.species.id != "fly" && !HAS_TRAIT(C, TRAIT_RADIMMUNE)) + to_chat(C, "You hear a buzzing in your ears.") + C.set_species(/datum/species/fly) + log_game("[C] ([key_name(C)]) was turned into a fly person") + C.apply_effect((rand(120 - accurate * 40, 180 - accurate * 60)), EFFECT_IRRADIATE, 0) + + calibrated = FALSE return /obj/machinery/teleport/hub/update_icon() diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 80c92c7922..a8ba9850ff 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -17,7 +17,7 @@ return var/turf/T = get_turf(target) if(T) - do_teleport(chassis, T, 4) + do_teleport(chassis, T, 4, channel = TELEPORT_CHANNEL_BLUESPACE) return 1 diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 91df57052e..fbe25c5d1b 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -190,11 +190,11 @@ /obj/effect/anomaly/bluespace/anomalyEffect() ..() for(var/mob/living/M in range(1,src)) - do_teleport(M, locate(M.x, M.y, M.z), 4) + do_teleport(M, locate(M.x, M.y, M.z), 4, channel = TELEPORT_CHANNEL_BLUESPACE) /obj/effect/anomaly/bluespace/Bumped(atom/movable/AM) if(isliving(AM)) - do_teleport(AM, locate(AM.x, AM.y, AM.z), 8) + do_teleport(AM, locate(AM.x, AM.y, AM.z), 8, channel = TELEPORT_CHANNEL_BLUESPACE) /obj/effect/anomaly/bluespace/detonate() var/turf/T = safepick(get_area_turfs(impact_area)) diff --git a/code/game/objects/effects/blessing.dm b/code/game/objects/effects/blessing.dm index 06ba2bb47c..5df90d65c7 100644 --- a/code/game/objects/effects/blessing.dm +++ b/code/game/objects/effects/blessing.dm @@ -16,3 +16,12 @@ I.alpha = 64 I.appearance_flags = RESET_ALPHA add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessedAware, "blessing", I) + RegisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT, .proc/block_cult_teleport) + +/obj/effect/blessing/Destroy() + UnregisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT) + return ..() + +/obj/effect/blessing/proc/block_cult_teleport(datum/source, channel, turf/origin, turf/destination) + if(channel == TELEPORT_CHANNEL_CULT) + return COMPONENT_BLOCK_TELEPORT \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index 0656d9b3ca..19b0dc76dd 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -26,7 +26,7 @@ /obj/effect/particle_effect/sparks/Initialize() . = ..() - flick("sparks", src) // replay the animation + flick(icon_state, src) // replay the animation playsound(src, "sparks", 100, TRUE) var/turf/T = loc if(isturf(T)) @@ -48,6 +48,8 @@ /datum/effect_system/spark_spread effect_type = /obj/effect/particle_effect/sparks +/datum/effect_system/spark_spread/quantum + effect_type = /obj/effect/particle_effect/sparks/quantum //electricity @@ -55,5 +57,9 @@ name = "lightning" icon_state = "electricity" +/obj/effect/particle_effect/sparks/quantum + name = "quantum sparks" + icon_state = "quantum_sparks" + /datum/effect_system/lightning_spread effect_type = /obj/effect/particle_effect/sparks/electricity diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index d69cfd38ef..631b87cada 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -20,6 +20,7 @@ var/mech_sized = FALSE var/obj/effect/portal/linked var/hardlinked = TRUE //Requires a linked portal at all times. Destroy if there's no linked portal, if there is destroy it when this one is deleted. + var/teleport_channel = TELEPORT_CHANNEL_BLUESPACE var/creator var/turf/hard_target //For when a portal needs a hard target and isn't to be linked. var/atmos_link = FALSE //Link source/destination atmos. @@ -34,6 +35,7 @@ icon = 'icons/obj/objects.dmi' icon_state = "anom" mech_sized = TRUE + teleport_channel = TELEPORT_CHANNEL_WORMHOLE /obj/effect/portal/Move(newloc) for(var/T in newloc) @@ -160,7 +162,7 @@ no_effect = TRUE else last_effect = world.time - if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect)) + if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect, channel = teleport_channel)) if(istype(M, /obj/item/projectile)) var/obj/item/projectile/P = M P.ignore_source_check = TRUE diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 384a1e4ee4..e17fe20977 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -579,6 +579,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/proc/get_belt_overlay() //Returns the icon used for overlaying the object on a belt return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state) +/obj/item/proc/get_worn_belt_overlay(icon_file) + return + /obj/item/proc/update_slot_icon() if(!ismob(loc)) return diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index f8b1d6e15b..a3ab9153ce 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -237,3 +237,10 @@ icon = 'icons/obj/abductor.dmi' icon_state = "multitool" toolspeed = 0.1 + +/obj/item/multitool/advanced + name = "advanced multitool" + desc = "The reproduction of an abductor's multitool, this multitool is a classy silver." + icon = 'icons/obj/advancedtools.dmi' + icon_state = "multitool" + toolspeed = 0.2 diff --git a/code/game/objects/items/devices/quantum_keycard.dm b/code/game/objects/items/devices/quantum_keycard.dm new file mode 100644 index 0000000000..37079722c0 --- /dev/null +++ b/code/game/objects/items/devices/quantum_keycard.dm @@ -0,0 +1,32 @@ +/obj/item/quantum_keycard + name = "quantum keycard" + desc = "A keycard able to link to a quantum pad's particle signature, allowing other quantum pads to travel there instead of their linked pad." + icon = 'icons/obj/device.dmi' + icon_state = "quantum_keycard" + item_state = "card-id" + lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' + w_class = WEIGHT_CLASS_TINY + var/obj/machinery/quantumpad/qpad + +/obj/item/quantum_keycard/examine(mob/user) + ..() + if(qpad) + to_chat(user, "It's currently linked to a quantum pad.") + to_chat(user, "Alt-click to unlink the keycard.") + else + to_chat(user, "Insert [src] into an active quantum pad to link it.") + +/obj/item/quantum_keycard/AltClick(mob/living/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + to_chat(user, "You start pressing [src]'s unlink button...") + if(do_after(user, 40, target = src)) + to_chat(user, "The keycard beeps twice and disconnects the quantum link.") + qpad = null + +/obj/item/quantum_keycard/update_icon() + if(qpad) + icon_state = "quantum_keycard_on" + else + icon_state = initial(icon_state) diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index dd7489d6b1..9adc0488aa 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -1,6 +1,6 @@ /obj/item/encryptionkey name = "standard encryption key" - desc = "An encryption key for a radio headset. Has no special codes in it. WHY DOES IT EXIST? ASK NANOTRASEN." + desc = "An encryption key for a radio headset." icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" w_class = WEIGHT_CLASS_TINY @@ -9,124 +9,119 @@ var/independent = FALSE var/list/channels = list() +/obj/item/encryptionkey/Initialize() + . = ..() + if(!channels.len) + desc = "An encryption key for a radio headset. Has no special codes in it. You should probably tell a coder!" + +/obj/item/encryptionkey/examine(mob/user) + . = ..() + if(LAZYLEN(channels)) + var/list/examine_text_list = list() + for(var/i in channels) + examine_text_list += "[GLOB.channel_tokens[i]] - [lowertext(i)]" + + to_chat(user, "It can access the following channels; [jointext(examine_text_list, ", ")].") + /obj/item/encryptionkey/syndicate name = "syndicate encryption key" - desc = "An encryption key for a radio headset. To access the syndicate channel, use :t." icon_state = "syn_cypherkey" - channels = list("Syndicate" = 1) - syndie = 1//Signifies that it de-crypts Syndicate transmissions + channels = list(RADIO_CHANNEL_SYNDICATE = 1) + syndie = TRUE //Signifies that it de-crypts Syndicate transmissions /obj/item/encryptionkey/binary name = "binary translator key" - desc = "An encryption key for a radio headset. To access the binary channel, use :b." icon_state = "bin_cypherkey" translate_binary = TRUE /obj/item/encryptionkey/headset_sec name = "security radio encryption key" - desc = "An encryption key for a radio headset. To access the security channel, use :s." icon_state = "sec_cypherkey" - channels = list("Security" = 1) + channels = list(RADIO_CHANNEL_SECURITY = 1) /obj/item/encryptionkey/headset_eng name = "engineering radio encryption key" - desc = "An encryption key for a radio headset. To access the engineering channel, use :e." icon_state = "eng_cypherkey" - channels = list("Engineering" = 1) + channels = list(RADIO_CHANNEL_ENGINEERING = 1) /obj/item/encryptionkey/headset_rob name = "robotics radio encryption key" - desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For research, use :n." icon_state = "rob_cypherkey" - channels = list("Science" = 1, "Engineering" = 1) + channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_ENGINEERING = 1) /obj/item/encryptionkey/headset_med name = "medical radio encryption key" - desc = "An encryption key for a radio headset. To access the medical channel, use :m." icon_state = "med_cypherkey" - channels = list("Medical" = 1) + channels = list(RADIO_CHANNEL_MEDICAL = 1) /obj/item/encryptionkey/headset_sci name = "science radio encryption key" - desc = "An encryption key for a radio headset. To access the science channel, use :n." icon_state = "sci_cypherkey" - channels = list("Science" = 1) + channels = list(RADIO_CHANNEL_SCIENCE = 1) /obj/item/encryptionkey/headset_medsci name = "medical research radio encryption key" - desc = "An encryption key for a radio headset. To access the medical channel, use :m. For science, use :n." icon_state = "medsci_cypherkey" - channels = list("Science" = 1, "Medical" = 1) + channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1) /obj/item/encryptionkey/headset_com name = "command radio encryption key" - desc = "An encryption key for a radio headset. To access the command channel, use :c." icon_state = "com_cypherkey" - channels = list("Command" = 1) + channels = list(RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/heads/captain name = "\proper the captain's encryption key" - desc = "An encryption key for a radio headset. Channels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science." icon_state = "cap_cypherkey" - channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0) + channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 0, RADIO_CHANNEL_SCIENCE = 0, RADIO_CHANNEL_MEDICAL = 0, RADIO_CHANNEL_SUPPLY = 0, RADIO_CHANNEL_SERVICE = 0) /obj/item/encryptionkey/heads/rd name = "\proper the research director's encryption key" - desc = "An encryption key for a radio headset. To access the science channel, use :n. For command, use :c." icon_state = "rd_cypherkey" - channels = list("Science" = 1, "Command" = 1) + channels = list(RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/heads/hos name = "\proper the head of security's encryption key" - desc = "An encryption key for a radio headset. To access the security channel, use :s. For command, use :c." icon_state = "hos_cypherkey" - channels = list("Security" = 1, "Command" = 1) + channels = list(RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/heads/ce name = "\proper the chief engineer's encryption key" - desc = "An encryption key for a radio headset. To access the engineering channel, use :e. For command, use :c." icon_state = "ce_cypherkey" - channels = list("Engineering" = 1, "Command" = 1) + channels = list(RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/heads/cmo name = "\proper the chief medical officer's encryption key" - desc = "An encryption key for a radio headset. To access the medical channel, use :m. For command, use :c." icon_state = "cmo_cypherkey" - channels = list("Medical" = 1, "Command" = 1) + channels = list(RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/heads/hop name = "\proper the head of personnel's encryption key" - desc = "An encryption key for a radio headset. Channels are as follows: :u - supply, :v - service, :c - command." icon_state = "hop_cypherkey" - channels = list("Supply" = 1, "Service" = 1, "Command" = 1) + channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_COMMAND = 1) /obj/item/encryptionkey/headset_cargo name = "supply radio encryption key" - desc = "An encryption key for a radio headset. To access the supply channel, use :u." icon_state = "cargo_cypherkey" - channels = list("Supply" = 1) + channels = list(RADIO_CHANNEL_SUPPLY = 1) /obj/item/encryptionkey/headset_mining name = "mining radio encryption key" - desc = "An encryption key for a radio headset. To access the supply channel, use :u. For science, use :n." icon_state = "cargo_cypherkey" - channels = list("Supply" = 1, "Science" = 1) + channels = list(RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SCIENCE = 1) /obj/item/encryptionkey/headset_service name = "service radio encryption key" - desc = "An encryption key for a radio headset. To access the service channel, use :v." icon_state = "srv_cypherkey" - channels = list("Service" = 1) + channels = list(RADIO_CHANNEL_SERVICE = 1) /obj/item/encryptionkey/headset_cent name = "\improper CentCom radio encryption key" - desc = "An encryption key for a radio headset. To access the CentCom channel, use :y." icon_state = "cent_cypherkey" independent = TRUE - channels = list("CentCom" = 1) + channels = list(RADIO_CHANNEL_CENTCOM = 1) /obj/item/encryptionkey/ai //ported from NT, this goes 'inside' the AI. - channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1) + channels = list(RADIO_CHANNEL_COMMAND = 1, RADIO_CHANNEL_SECURITY = 1, RADIO_CHANNEL_ENGINEERING = 1, RADIO_CHANNEL_SCIENCE = 1, RADIO_CHANNEL_MEDICAL = 1, RADIO_CHANNEL_SUPPLY = 1, RADIO_CHANNEL_SERVICE = 1, RADIO_CHANNEL_AI_PRIVATE = 1) /obj/item/encryptionkey/secbot - channels = list("AI Private"=1,"Security"=1) + channels = list(RADIO_CHANNEL_AI_PRIVATE = 1, RADIO_CHANNEL_SECURITY = 1) diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index ea9c6fb99e..cca5eb4217 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -1,3 +1,19 @@ +// Used for translating channels to tokens on examination +GLOBAL_LIST_INIT(channel_tokens, list( + RADIO_CHANNEL_COMMON = RADIO_KEY_COMMON, + RADIO_CHANNEL_SCIENCE = RADIO_TOKEN_SCIENCE, + RADIO_CHANNEL_COMMAND = RADIO_TOKEN_COMMAND, + RADIO_CHANNEL_MEDICAL = RADIO_TOKEN_MEDICAL, + RADIO_CHANNEL_ENGINEERING = RADIO_TOKEN_ENGINEERING, + RADIO_CHANNEL_SECURITY = RADIO_TOKEN_SECURITY, + RADIO_CHANNEL_CENTCOM = RADIO_TOKEN_CENTCOM, + RADIO_CHANNEL_SYNDICATE = RADIO_TOKEN_SYNDICATE, + RADIO_CHANNEL_SUPPLY = RADIO_TOKEN_SUPPLY, + RADIO_CHANNEL_SERVICE = RADIO_TOKEN_SERVICE, + MODE_BINARY = MODE_TOKEN_BINARY, + RADIO_CHANNEL_AI_PRIVATE = RADIO_TOKEN_AI_PRIVATE +)) + /obj/item/radio/headset name = "radio headset" desc = "An updated, modular intercom that fits over the head. Takes encryption keys." @@ -17,9 +33,24 @@ /obj/item/radio/headset/examine(mob/user) ..() - to_chat(user, "To speak on the general radio frequency, use ; before speaking.") - if (command) - to_chat(user, "Alt-click to toggle the high-volume mode.") + + if(item_flags & IN_INVENTORY && loc == user) + // construction of frequency description + var/list/avail_chans = list("Use [RADIO_KEY_COMMON] for the currently tuned frequency") + if(translate_binary) + avail_chans += "use [MODE_TOKEN_BINARY] for [MODE_BINARY]" + if(length(channels)) + for(var/i in 1 to length(channels)) + if(i == 1) + avail_chans += "use [MODE_TOKEN_DEPARTMENT] or [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" + else + avail_chans += "use [GLOB.channel_tokens[channels[i]]] for [lowertext(channels[i])]" + to_chat(user, "A small screen on the headset displays the following available frequencies:\n[english_list(avail_chans)].") + + if(command) + to_chat(user, "Alt-click to toggle the high-volume mode.") + else + to_chat(user, "A small screen on the headset flashes, it's too small to read without holding or wearing the headset.") /obj/item/radio/headset/Initialize() . = ..() @@ -47,7 +78,7 @@ /obj/item/radio/headset/syndicate/alt //undisguised bowman with flash protection name = "syndicate headset" - desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs. \nTo access the syndicate channel, use ; before speaking." + desc = "A syndicate headset that can be used to hear all radio frequencies. Protects ears from flashbangs." icon_state = "syndie_headset" item_state = "syndie_headset" @@ -72,13 +103,13 @@ /obj/item/radio/headset/headset_sec name = "security radio headset" - desc = "This is used by your elite security force.\nTo access the security channel, use :s." + desc = "This is used by your elite security force." icon_state = "sec_headset" keyslot = new /obj/item/encryptionkey/headset_sec /obj/item/radio/headset/headset_sec/alt name = "security bowman headset" - desc = "This is used by your elite security force. Protects ears from flashbangs.\nTo access the security channel, use :s." + desc = "This is used by your elite security force. Protects ears from flashbangs." icon_state = "sec_headset_alt" item_state = "sec_headset_alt" @@ -88,31 +119,31 @@ /obj/item/radio/headset/headset_eng name = "engineering radio headset" - desc = "When the engineers wish to chat like girls.\nTo access the engineering channel, use :e." + desc = "When the engineers wish to chat like girls." icon_state = "eng_headset" keyslot = new /obj/item/encryptionkey/headset_eng /obj/item/radio/headset/headset_rob name = "robotics radio headset" - desc = "Made specifically for the roboticists, who cannot decide between departments.\nTo access the engineering channel, use :e. For research, use :n." + desc = "Made specifically for the roboticists, who cannot decide between departments." icon_state = "rob_headset" keyslot = new /obj/item/encryptionkey/headset_rob /obj/item/radio/headset/headset_med name = "medical radio headset" - desc = "A headset for the trained staff of the medbay.\nTo access the medical channel, use :m." + desc = "A headset for the trained staff of the medbay." icon_state = "med_headset" keyslot = new /obj/item/encryptionkey/headset_med /obj/item/radio/headset/headset_sci name = "science radio headset" - desc = "A sciency headset. Like usual.\nTo access the science channel, use :n." + desc = "A sciency headset. Like usual." icon_state = "sci_headset" keyslot = new /obj/item/encryptionkey/headset_sci /obj/item/radio/headset/headset_medsci name = "medical research radio headset" - desc = "A headset that is a result of the mating between medical and science.\nTo access the medical channel, use :m. For science, use :n." + desc = "A headset that is a result of the mating between medical and science." icon_state = "medsci_headset" keyslot = new /obj/item/encryptionkey/headset_medsci @@ -127,13 +158,13 @@ /obj/item/radio/headset/heads/captain name = "\proper the captain's headset" - desc = "The headset of the king.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science." + desc = "The headset of the king." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/captain /obj/item/radio/headset/heads/captain/alt name = "\proper the captain's bowman headset" - desc = "The headset of the boss. Protects ears from flashbangs.\nChannels are as follows: :c - command, :s - security, :e - engineering, :u - supply, :v - service, :m - medical, :n - science." + desc = "The headset of the boss. Protects ears from flashbangs." icon_state = "com_headset_alt" item_state = "com_headset_alt" @@ -143,19 +174,19 @@ /obj/item/radio/headset/heads/rd name = "\proper the research director's headset" - desc = "Headset of the fellow who keeps society marching towards technological singularity.\nTo access the science channel, use :n. For command, use :c." + desc = "Headset of the fellow who keeps society marching towards technological singularity." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/rd /obj/item/radio/headset/heads/hos name = "\proper the head of security's headset" - desc = "The headset of the man in charge of keeping order and protecting the station.\nTo access the security channel, use :s. For command, use :c." + desc = "The headset of the man in charge of keeping order and protecting the station." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/hos /obj/item/radio/headset/heads/hos/alt name = "\proper the head of security's bowman headset" - desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs.\nTo access the security channel, use :s. For command, use :c." + desc = "The headset of the man in charge of keeping order and protecting the station. Protects ears from flashbangs." icon_state = "com_headset_alt" item_state = "com_headset_alt" @@ -165,43 +196,43 @@ /obj/item/radio/headset/heads/ce name = "\proper the chief engineer's headset" - desc = "The headset of the guy in charge of keeping the station powered and undamaged.\nTo access the engineering channel, use :e. For command, use :c." + desc = "The headset of the guy in charge of keeping the station powered and undamaged." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/ce /obj/item/radio/headset/heads/cmo name = "\proper the chief medical officer's headset" - desc = "The headset of the highly trained medical chief.\nTo access the medical channel, use :m. For command, use :c." + desc = "The headset of the highly trained medical chief." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/cmo /obj/item/radio/headset/heads/hop name = "\proper the head of personnel's headset" - desc = "The headset of the guy who will one day be captain.\nChannels are as follows: :u - supply, :v - service, :c - command." + desc = "The headset of the guy who will one day be captain." icon_state = "com_headset" keyslot = new /obj/item/encryptionkey/heads/hop /obj/item/radio/headset/headset_cargo name = "supply radio headset" - desc = "A headset used by the QM and his slaves.\nTo access the supply channel, use :u." + desc = "A headset used by the QM and his slaves." icon_state = "cargo_headset" keyslot = new /obj/item/encryptionkey/headset_cargo /obj/item/radio/headset/headset_cargo/mining name = "mining radio headset" - desc = "Headset used by shaft miners.\nTo access the supply channel, use :u. For science, use :n." + desc = "Headset used by shaft miners." icon_state = "mine_headset" keyslot = new /obj/item/encryptionkey/headset_mining /obj/item/radio/headset/headset_srv name = "service radio headset" - desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean.\nTo access the service channel, use :v." + desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean." icon_state = "srv_headset" keyslot = new /obj/item/encryptionkey/headset_service /obj/item/radio/headset/headset_cent name = "\improper CentCom headset" - desc = "A headset used by the upper echelons of Nanotrasen.\nTo access the CentCom channel, use :y." + desc = "A headset used by the upper echelons of Nanotrasen." icon_state = "cent_headset" keyslot = new /obj/item/encryptionkey/headset_com keyslot2 = new /obj/item/encryptionkey/headset_cent @@ -215,7 +246,7 @@ /obj/item/radio/headset/headset_cent/alt name = "\improper CentCom bowman headset" - desc = "A headset especially for emergency response personnel. Protects ears from flashbangs.\nTo access the CentCom channel, use :y." + desc = "A headset especially for emergency response personnel. Protects ears from flashbangs." icon_state = "cent_headset_alt" item_state = "cent_headset_alt" keyslot = null diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 1d51aabf86..7c136f556e 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -221,7 +221,7 @@ // From the channel, determine the frequency and get a reference to it. var/freq if(channel && channels && channels.len > 0) - if(channel == "department") + if(channel == MODE_DEPARTMENT) channel = channels[1] freq = secure_radio_connections[channel] if (!channels[channel]) // if the channel is turned off, don't broadcast diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 686c6fd511..71687f0d5a 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -421,7 +421,7 @@ //Crafting Recipe books /obj/item/book/granter/crafting_recipe - var/list/crafting_recipe_types = list() + var/list/crafting_recipe_types = list() //Use full /datum/crafting_recipe/what_you_craft /obj/item/book/granter/crafting_recipe/on_reading_finished(mob/user) . = ..() @@ -430,4 +430,30 @@ for(var/crafting_recipe_type in crafting_recipe_types) var/datum/crafting_recipe/R = crafting_recipe_type user.mind.teach_crafting_recipe(crafting_recipe_type) - to_chat(user,"You learned how to make [initial(R.name)].") \ No newline at end of file + to_chat(user,"You learned how to make [initial(R.name)].") + +/obj/item/book/granter/crafting_recipe/cooking_sweets_101 //We start at 101 for 103 and 105 + name = "Cooking Desserts 101" + desc = "A cook book that teaches you some more of the newest desserts. AI approved, and a best seller on Honkplanet." + crafting_recipe_types = list(/datum/crafting_recipe/food/mimetart, /datum/crafting_recipe/food/berrytart, /datum/crafting_recipe/food/cocolavatart, /datum/crafting_recipe/food/clowncake, /datum/crafting_recipe/food/vanillacake) + icon_state = "cooking_learing_sweets" + oneuse = FALSE + remarks = list("So that is how icing is made!", "Placing fruit on top? How simple...", "Huh layering cake seems harder then this...", "This book smells like candy", "A clown must have made this page, or they forgot to spell check it before printing...", "Wait, a way to cook slime to be safe?") + +//Later content when I have free time - Trilby Date:02-Aug-2019 + +/obj/item/book/granter/crafting_recipe/under_the_oven //Illegal cook book + name = "Under The Oven" + desc = "A cook book that teaches you many illegal and fun candys. MALF AI approved, and a best seller on the blackmarket." + crafting_recipe_types = list() + icon_state = "cooking_learing_illegal" + oneuse = FALSE + remarks = list() + +/obj/item/book/granter/crafting_recipe/coldcooking //IceCream + name = "Cooking with Ice" + desc = "A cook book that teaches you many old icecream treats." + crafting_recipe_types = list() + icon_state = "cooking_learing_ice" + oneuse = FALSE + remarks = list() \ No newline at end of file diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 5e19577b46..a306b48385 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -26,6 +26,7 @@ gender = PLURAL icon = 'icons/obj/items_and_weapons.dmi' icon_state = "handcuff" + item_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' flags_1 = CONDUCT_1 @@ -103,7 +104,6 @@ desc = "A pair of restraints fashioned from long strands of flesh." icon = 'icons/obj/mining.dmi' icon_state = "sinewcuff" - item_state = "sinewcuff" breakouttime = 300 //Deciseconds = 30s cuffsound = 'sound/weapons/cablecuff.ogg' @@ -164,14 +164,6 @@ /obj/item/restraints/handcuffs/cable/white item_color = "white" -/obj/item/restraints/handcuffs/alien - icon_state = "handcuffAlien" - -/obj/item/restraints/handcuffs/fake - name = "fake handcuffs" - desc = "Fake handcuffs meant for gag purposes." - breakouttime = 10 //Deciseconds = 1s - /obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) ..() if(istype(I, /obj/item/stack/rods)) @@ -206,7 +198,7 @@ /obj/item/restraints/handcuffs/cable/zipties name = "zipties" desc = "Plastic, disposable zipties that can be used to restrain temporarily but are destroyed after use." - icon_state = "cuff" + item_state = "zipties" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' materials = list() @@ -217,11 +209,25 @@ /obj/item/restraints/handcuffs/cable/zipties/used desc = "A pair of broken zipties." icon_state = "cuff_used" - item_state = "cuff" /obj/item/restraints/handcuffs/cable/zipties/used/attack() return +/obj/item/restraints/handcuffs/alien + icon_state = "handcuffAlien" + +/obj/item/restraints/handcuffs/fake + name = "fake handcuffs" + desc = "Fake handcuffs meant for gag purposes." + breakouttime = 10 //Deciseconds = 1s + +/obj/item/restraints/handcuffs/fake/kinky + name = "kinky handcuffs" + desc = "Fake handcuffs meant for erotic roleplay." + icon = 'modular_citadel/icons/obj/items_and_weapons.dmi' + icon_state = "handcuffgag" + item_state = "kinkycuff" + //Legcuffs /obj/item/restraints/legcuffs @@ -230,6 +236,7 @@ gender = PLURAL icon = 'icons/obj/items_and_weapons.dmi' icon_state = "handcuff" + item_state = "legcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' flags_1 = CONDUCT_1 diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 0d45960767..daeceb7f87 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -89,6 +89,12 @@ if(istype(B)) playsound(B, 'sound/items/sheath.ogg', 25, 1) +/obj/item/melee/sabre/get_belt_overlay() + return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "sabre") + +/obj/item/melee/sabre/get_worn_belt_overlay(icon_file) + return mutable_appearance(icon_file, "-sabre") + /obj/item/melee/sabre/suicide_act(mob/living/user) user.visible_message("[user] is trying to cut off all [user.p_their()] limbs with [src]! it looks like [user.p_theyre()] trying to commit suicide!") var/i = 0 @@ -147,13 +153,19 @@ flags_1 = CONDUCT_1 obj_flags = UNIQUE_RENAME w_class = WEIGHT_CLASS_BULKY - sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_- + sharpness = IS_SHARP_ACCURATE //It cant be sharpend cook -_- attack_verb = list("slashed", "cut", "pierces", "pokes") /obj/item/melee/rapier/Initialize() . = ..() AddComponent(/datum/component/butchering, 20, 65, 0) +/obj/item/melee/rapier/get_belt_overlay() + return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "rapier") + +/obj/item/melee/rapier/get_worn_belt_overlay(icon_file) + return mutable_appearance(icon_file, "-rapier") + /obj/item/melee/classic_baton name = "police baton" desc = "A wooden truncheon for beating criminal scum." diff --git a/code/game/objects/items/scrolls.dm b/code/game/objects/items/scrolls.dm index 07f6edb828..28a4664a24 100644 --- a/code/game/objects/items/scrolls.dm +++ b/code/game/objects/items/scrolls.dm @@ -66,7 +66,8 @@ to_chat(user, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") return - user.forceMove(pick(L)) - - smoke.start() - uses-- + if(do_teleport(user, pick(L), forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE)) + smoke.start() + uses-- + else + to_chat(user, "The spell matrix was disrupted by something near the destination.") diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 522e1a1153..49a735af9c 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -33,7 +33,7 @@ use(1) /obj/item/stack/ore/bluespace_crystal/proc/blink_mob(mob/living/L) - do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg') + do_teleport(L, get_turf(L), blink_range, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) /obj/item/stack/ore/bluespace_crystal/throw_impact(atom/hit_atom) if(!..()) // not caught in mid-air diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 5594059463..c65129ec85 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -415,6 +415,8 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("brass window - directional", /obj/structure/window/reinforced/clockwork/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("brass window - fulltile", /obj/structure/window/reinforced/clockwork/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ new/datum/stack_recipe("brass chair", /obj/structure/chair/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass bar stool", /obj/structure/chair/stool/bar/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("brass stool", /obj/structure/chair/stool/brass, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("brass table frame", /obj/structure/table_frame/brass, 1, time = 5, one_per_turf = TRUE, on_floor = TRUE), \ null, new/datum/stack_recipe("sender - pressure sensor", /obj/structure/destructible/clockwork/trap/trigger/pressure_sensor, 2, time = 20, one_per_turf = TRUE, on_floor = TRUE), \ @@ -426,7 +428,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ new/datum/stack_recipe("receiver - steam vent", /obj/structure/destructible/clockwork/trap/steam_vent, 3, time = 30, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ new/datum/stack_recipe("receiver - power nullifier", /obj/structure/destructible/clockwork/trap/power_nullifier, 5, time = 20, one_per_turf = TRUE, on_floor = TRUE, placement_checks = STACK_CHECK_CARDINALS), \ null, - new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/holyoil/null), \ + new/datum/stack_recipe("brass flask", /obj/item/reagent_containers/food/drinks/bottle/holyoil/empty), \ )) @@ -478,6 +480,8 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ null, new/datum/stack_recipe("bronze chair", /obj/structure/chair/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze bar stool", /obj/structure/chair/stool/bar/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bronze stool", /obj/structure/chair/stool/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ )) /obj/item/stack/tile/bronze diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index b746058588..d71b91c8dc 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -10,6 +10,7 @@ attack_verb = list("whipped", "lashed", "disciplined") max_integrity = 300 var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding + var/worn_overlays = FALSE //worn counterpart of the above. /obj/item/storage/belt/suicide_act(mob/living/carbon/user) user.visible_message("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -23,6 +24,12 @@ add_overlay(M) ..() +/obj/item/storage/belt/worn_overlays(isinhands, icon_file) + . = ..() + if(!isinhands && worn_overlays) + for(var/obj/item/I in contents) + . += I.get_worn_belt_overlay(icon_file) + /obj/item/storage/belt/Initialize() . = ..() update_icon() @@ -653,9 +660,10 @@ icon_state = "sheath" item_state = "sheath" w_class = WEIGHT_CLASS_BULKY + content_overlays = TRUE + worn_overlays = TRUE var/list/fitting_swords = list(/obj/item/melee/sabre, /obj/item/melee/baton/stunsword) var/starting_sword = /obj/item/melee/sabre - var/sword_overlay /obj/item/storage/belt/sabre/ComponentInitialize() . = ..() @@ -682,27 +690,13 @@ to_chat(user, "[src] is empty.") /obj/item/storage/belt/sabre/update_icon() - icon_state = initial(icon_state) - item_state = initial(item_state) - sword_overlay = null - if(contents.len) - var/obj/item/I = contents[1] - sword_overlay = initial(I.icon_state) - add_overlay("-[sword_overlay]") - item_state += "-[I.icon_state]" - if(loc && isliving(loc)) + . = ..() + if(isliving(loc)) var/mob/living/L = loc L.regenerate_icons() - ..() - -/obj/item/storage/belt/sabre/worn_overlays(isinhands, icon_file) - . = ..() - if(!isinhands) - . += mutable_appearance(icon_file, "-[sword_overlay]") /obj/item/storage/belt/sabre/PopulateContents() new starting_sword(src) - update_icon() /obj/item/storage/belt/sabre/rapier name = "rapier sheath" diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 5a4d85885b..903c319644 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -1131,6 +1131,7 @@ name = "Nanotrasen MRE Ration Kit Menu 0" desc = "A package containing food suspended in an outdated bluespace pocket which lasts for centuries. If you're lucky you may even be able to enjoy the meal without getting food poisoning." icon_state = "mre" + illustration = null var/can_expire = TRUE var/spawner_chance = 2 var/expiration_date @@ -1184,7 +1185,7 @@ /obj/item/storage/box/mre/menu3 name = "\improper Nanotrasen MRE Ration Kit Menu 3" - desc = "The holy grail of MREs. This item contains the fabled MRE pizza and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed." + desc = "The holy grail of MREs. This item contains the fabled MRE pizza, spicy nachos and a sample of coffee instant type 2. Any NT employee lucky enough to get their hands on one of these is truly blessed." icon_state = "menu3" can_expire = FALSE //always fresh, never expired. spawner_chance = 1 @@ -1192,11 +1193,29 @@ /obj/item/storage/box/mre/menu3/PopulateContents() new /obj/item/reagent_containers/food/snacks/pizzaslice/pepperoni(src) new /obj/item/reagent_containers/food/snacks/breadslice/plain(src) - new /obj/item/reagent_containers/food/snacks/cheesewedge(src) + new /obj/item/reagent_containers/food/snacks/cubannachos(src) new /obj/item/reagent_containers/food/snacks/grown/chili(src) new /obj/item/reagent_containers/food/drinks/coffee/type2(src) new /obj/item/tank/internals/emergency_oxygen(src) +/obj/item/storage/box/mre/menu4 + name = "\improper Nanotrasen MRE Ration Kit Menu 4" + +/obj/item/storage/box/mre/menu4/safe + spawner_chance = 0 + desc = "A package containing food suspended in a bluespace pocket capable of lasting till the end of time." + can_expire = FALSE + +/obj/item/storage/box/mre/menu4/PopulateContents() + if(prob(66)) + new /obj/item/reagent_containers/food/snacks/salad/boiledrice(src) + else + new /obj/item/reagent_containers/food/snacks/salad/ricebowl(src) + new /obj/item/reagent_containers/food/snacks/burger/tofu(src) + new /obj/item/reagent_containers/food/snacks/salad/fruit(src) + new /obj/item/reagent_containers/food/snacks/cracker(src) + new /obj/item/tank/internals/emergency_oxygen(src) + //Where do I put this? /obj/item/secbat name = "Secbat box" diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index 341c85fa1c..40392c19c3 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -10,7 +10,7 @@ . = ..() if(!. || !istype(M) || M.anchored) return - do_teleport(M, get_turf(M), 15) + do_teleport(M, get_turf(M), 15, channel = TELEPORT_CHANNEL_BLUESPACE) /obj/item/melee/baton/cattleprod/teleprod/clowning_around(mob/living/user) user.visible_message("[user] accidentally hits [user.p_them()]self with [src]!", \ @@ -18,7 +18,7 @@ SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK) user.Knockdown(stunforce*3) playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) - if(do_teleport(user, get_turf(user), 50)) + if(do_teleport(user, get_turf(user), 50, channel = TELEPORT_CHANNEL_BLUESPACE)) deductcharge(hitcost) else deductcharge(hitcost * 0.25) diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 97375221d4..70bfebb799 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -90,4 +90,12 @@ var/obj/item/wirecutters/power/cutjaws = new /obj/item/wirecutters/power(drop_location()) to_chat(user, "You attach the cutting jaws to [src].") qdel(src) - user.put_in_active_hand(cutjaws) \ No newline at end of file + user.put_in_active_hand(cutjaws) + +/obj/item/crowbar/advanced + name = "advanced crowbar" + desc = "A scientist's almost successful reproduction of an abductor's crowbar, it uses the same technology combined with a handle that can't quite hold it." + icon = 'icons/obj/advancedtools.dmi' + usesound = 'sound/weapons/sonic_jackhammer.ogg' + icon_state = "crowbar" + toolspeed = 0.2 \ No newline at end of file diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index e5808de088..68946f73cd 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -141,4 +141,14 @@ name = "powered screwdriver" desc = "An electrical screwdriver, designed to be both precise and quick." usesound = 'sound/items/drill_use.ogg' - toolspeed = 0.5 \ No newline at end of file + toolspeed = 0.5 + +/obj/item/screwdriver/advanced + name = "advanced screwdriver" + desc = "A classy silver screwdriver with an alien alloy tip, it works almost as well as the real thing." + icon = 'icons/obj/advancedtools.dmi' + icon_state = "screwdriver_a" + item_state = "screwdriver_nuke" + usesound = 'sound/items/pshoom.ogg' + toolspeed = 0.2 + random_color = FALSE \ No newline at end of file diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 718035a9a5..9b622a14c4 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -377,4 +377,18 @@ nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) +/obj/item/weldingtool/advanced + name = "advanced welding tool" + desc = "A modern welding tool combined with an alien welding tool, it never runs out of fuel and works almost as fast." + icon = 'icons/obj/advancedtools.dmi' + icon_state = "welder" + toolspeed = 0.2 + light_intensity = 0 + change_icons = 0 + +/obj/item/weldingtool/advanced/process() + if(get_fuel() <= max_fuel) + reagents.add_reagent("welding_fuel", 1) + ..() + #undef WELDER_FUEL_BURN_INTERVAL diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 1a35196bd8..527891afdb 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -82,7 +82,6 @@ icon = 'icons/obj/abductor.dmi' icon_state = "cutters" toolspeed = 0.1 - random_color = FALSE /obj/item/wirecutters/cyborg @@ -126,3 +125,11 @@ return else ..() + +/obj/item/wirecutters/advanced + name = "advanced wirecutters" + desc = "A set of reproduction alien wirecutters, they have a silver handle with an exceedingly sharp blade." + icon = 'icons/obj/advancedtools.dmi' + icon_state = "cutters" + toolspeed = 0.2 + random_color = FALSE \ No newline at end of file diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 4fd99e9adf..8ff960825a 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -112,4 +112,12 @@ user.dust() - return OXYLOSS \ No newline at end of file + return OXYLOSS + +/obj/item/wrench/advanced + name = "advanced wrench" + desc = "A wrench that uses the same magnetic technology that abductor tools use, but slightly more ineffeciently." + icon = 'icons/obj/advancedtools.dmi' + icon_state = "wrench" + usesound = 'sound/effects/empulse.ogg' + toolspeed = 0.2 \ No newline at end of file diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index e944eb32da..88d141a9ad 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -317,9 +317,6 @@ new stack_type(get_turf(loc)) qdel(src) - - - /obj/item/chair/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(attack_type == UNARMED_ATTACK && prob(hit_reaction_chance)) owner.visible_message("[owner] fends off [attack_text] with [src]!") @@ -338,7 +335,6 @@ C.Knockdown(20) smash(user) - /obj/item/chair/stool name = "stool" icon_state = "stool_toppled" @@ -352,6 +348,70 @@ item_state = "stool_bar" origin_type = /obj/structure/chair/stool/bar +////////////////////////// +//Brass & Bronze stools!// +////////////////////////// + +/obj/structure/chair/stool/bar/brass + name = "brass bar stool" + desc = "A brass bar stool with red silk for a pillow." + icon_state = "barbrass" + item_chair = /obj/item/chair/stool/bar/brass + buildstacktype = /obj/item/stack/tile/brass + buildstackamount = 1 + +/obj/structure/chair/stool/bar/bronze + name = "bronze bar stool" + desc = "A bronze bar stool with red silk for a pillow." + icon_state = "barbrass" + item_chair = /obj/item/chair/stool/bar/bronze + buildstacktype = /obj/item/stack/tile/bronze + buildstackamount = 1 + +/obj/structure/chair/stool/brass + name = "brass stool" + desc = "A brass stool with a silk top for comfort." + icon_state = "stoolbrass" + item_chair = /obj/item/chair/stool/brass + buildstacktype = /obj/item/stack/tile/brass + buildstackamount = 1 + +/obj/structure/chair/stool/bronze + name = "bronze stool" + desc = "A bronze stool with a silk top for comfort." + icon_state = "stoolbrass" + item_chair = /obj/item/chair/stool/bronze + buildstacktype = /obj/item/stack/tile/bronze + buildstackamount = 1 + +/obj/item/chair/stool/brass + name = "brass stool" + icon_state = "stoolbrass_toppled" + item_state = "stoolbrass" + origin_type = /obj/structure/chair/stool/brass + +/obj/item/chair/stool/bar/brass + name = "brass bar stool" + icon_state = "barbrass_toppled" + item_state = "stoolbrass_bar" + origin_type = /obj/structure/chair/stool/bar/brass + +/obj/item/chair/stool/bronze + name = "bronze stool" + icon_state = "stoolbrass_toppled" + item_state = "stoolbrass" + origin_type = /obj/structure/chair/stool/bronze + +/obj/item/chair/stool/bar/bronze + name = "bronze bar stool" + icon_state = "barbrass_toppled" + item_state = "stoolbrass_bar" + origin_type = /obj/structure/chair/stool/bar/bronze + +///////////////////////////////// +//End of Brass & Bronze stools!// +///////////////////////////////// + /obj/item/chair/stool/narsie_act() return //sturdy enough to ignore a god diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 2c4463928c..eedb49f2c3 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -34,7 +34,8 @@ var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable. var/anchorable = TRUE var/icon_welded = "welded" - + var/obj/item/electronics/airlock/lockerelectronics //Installed electronics + var/lock_in_use = FALSE //Someone is doing some stuff with the lock here, better not proceed further /obj/structure/closet/Initialize(mapload) . = ..() @@ -42,47 +43,56 @@ PopulateContents() if(mapload && !opened) // if closed, any item at the crate's loc is put in the contents take_contents() + if(secure) + lockerelectronics = new(src) + lockerelectronics.accesses = req_access //USE THIS TO FILL IT, NOT INITIALIZE OR NEW /obj/structure/closet/proc/PopulateContents() return /obj/structure/closet/Destroy() - dump_contents() + dump_contents(override = FALSE) return ..() /obj/structure/closet/update_icon() cut_overlays() - if(!opened) + if(opened & icon_door_override) + add_overlay("[icon_door]_open") layer = OBJ_LAYER - if(icon_door) - add_overlay("[icon_door]_door") - else - add_overlay("[icon_state]_door") - if(welded) - add_overlay(icon_welded) - if(secure && !broken) - if(locked) - add_overlay("locked") - else - add_overlay("unlocked") - + return + else if(opened) + add_overlay("[icon_state]_open") + return + if(icon_door) + add_overlay("[icon_door]_door") else layer = BELOW_OBJ_LAYER - if(icon_door_override) - add_overlay("[icon_door]_open") - else - add_overlay("[icon_state]_open") + add_overlay("[icon_state]_door") + if(welded) + add_overlay("welded") + if(!secure) + return + if(broken) + add_overlay("off") + add_overlay("sparking") + else if(locked) + add_overlay("locked") + else + add_overlay("unlocked") /obj/structure/closet/examine(mob/user) ..() if(welded) - to_chat(user, "It's welded shut.") + to_chat(user, "It's welded shut.") if(anchored) to_chat(user, "It is bolted to the ground.") if(opened) to_chat(user, "The parts are welded together.") else if(secure && !opened) + else if(broken) + to_chat(user, "The lock is screwed in.") + else if(secure) to_chat(user, "Alt-click to [locked ? "unlock" : "lock"].") if(isliving(user)) var/mob/living/L = user @@ -117,9 +127,37 @@ return FALSE return TRUE -/obj/structure/closet/proc/dump_contents() +/obj/structure/closet/proc/can_lock(mob/living/user, var/check_access = TRUE) //set check_access to FALSE if you only need to check if a locker has a functional lock rather than access + if(!secure) + return FALSE + if(broken) + to_chat(user, "[src] is broken!") + return FALSE + if(QDELETED(lockerelectronics) && !locked) //We want to be able to unlock it regardless of electronics, but only lockable with electronics + to_chat(user, "[src] is missing locker electronics!") + return FALSE + if(!check_access) + return TRUE + if(allowed(user)) + return TRUE + to_chat(user, "Access denied.") + +/obj/structure/closet/proc/togglelock(mob/living/user) + add_fingerprint(user) + if(opened) + return + if(!can_lock(user)) + return + locked = !locked + user.visible_message("[user] [locked ? null : "un"]locks [src].", + "You [locked ? null : "un"]lock [src].") + update_icon() + +/obj/structure/closet/proc/dump_contents(var/override = TRUE) //Override is for not revealing the locker electronics when you open the locker, for example var/atom/L = drop_location() for(var/atom/movable/AM in src) + if(AM == lockerelectronics && override) + continue AM.forceMove(L) if(throwing) // you keep some momentum when getting out of a thrown closet step(AM, dir) @@ -207,6 +245,73 @@ else return open(user) +/obj/structure/closet/proc/bust_open() + welded = FALSE //applies to all lockers + locked = FALSE //applies to critter crates and secure lockers only + broken = TRUE //applies to secure lockers only + open() + +/obj/structure/closet/proc/handle_lock_addition(mob/user, obj/item/electronics/airlock/E) + add_fingerprint(user) + if(lock_in_use) + to_chat(user, "Wait for work on [src] to be done first!") + return + if(secure) + to_chat(user, "This locker already has a lock!") + return + if(broken) + to_chat(user, "Unscrew the broken lock first!") + return + if(!istype(E)) + return + user.visible_message("[user] begins installing a lock on [src]...","You begin installing a lock on [src]...") + lock_in_use = TRUE + playsound(loc, 'sound/items/screwdriver.ogg', 50, 1) + if(!do_after(user, 60, target = src)) + lock_in_use = FALSE + return + lock_in_use = FALSE + to_chat(user, "You finish the lock on [src]!") + E.forceMove(src) + lockerelectronics = E + req_access = E.accesses + secure = TRUE + update_icon() + return TRUE + +/obj/structure/closet/proc/handle_lock_removal(mob/user, obj/item/screwdriver/S) + if(lock_in_use) + to_chat(user, "Wait for work on [src] to be done first!") + return + if(locked) + to_chat(user, "Unlock it first!") + return + if(!secure) + to_chat(user, "[src] doesn't have a lock that you can remove!") + return + if(!istype(S)) + return + var/brokenword = broken ? "broken " : null + user.visible_message("[user] begins removing the [brokenword]lock on [src]...","You begin removing the [brokenword]lock on [src]...") + playsound(loc, S.usesound, 50, 1) + lock_in_use = TRUE + if(!do_after(user, 100 * S.toolspeed, target = src)) + lock_in_use = FALSE + return + to_chat(user, "You remove the [brokenword]lock from [src]!") + if(!QDELETED(lockerelectronics)) + lockerelectronics.add_fingerprint(user) + lockerelectronics.forceMove(user.loc) + lockerelectronics = null + req_access = null + secure = FALSE + broken = FALSE + locked = FALSE + lock_in_use = FALSE + update_icon() + return TRUE + + /obj/structure/closet/deconstruct(disassembled = TRUE) if(ispath(material_drop) && material_drop_amount && !(flags_1 & NODECONSTRUCT_1)) new material_drop(loc, material_drop_amount) @@ -247,7 +352,11 @@ deconstruct(TRUE) return if(user.transferItemToLoc(W, drop_location())) // so we put in unlit welder too - return + return TRUE + else if(istype(W, /obj/item/electronics/airlock)) + handle_lock_addition(user, W) + else if(istype(W, /obj/item/screwdriver)) + handle_lock_removal(user, W) else if(istype(W, /obj/item/weldingtool) && can_weld_shut) if(!W.tool_start_check(user, amount=0)) return @@ -258,7 +367,7 @@ return welded = !welded after_weld(welded) - user.visible_message("[user] [welded ? "welds shut" : "unwelded"] \the [src].", + user.visible_message("[user] [welded ? "welds shut" : "unwelds"] \the [src].", "You [welded ? "weld" : "unwelded"] \the [src] with \the [W].", "You hear welding.") update_icon() @@ -401,20 +510,12 @@ if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. to_chat(user, "You fail to break out of [src]!") -/obj/structure/closet/proc/bust_open() - welded = FALSE //applies to all lockers - locked = FALSE //applies to critter crates and secure lockers only - broken = TRUE //applies to secure lockers only - open() - /obj/structure/closet/AltClick(mob/user) ..() - if(!user.canUseTopic(src, BE_CLOSE) || !isturf(loc)) + if(!user.canUseTopic(src, be_close=TRUE) || !isturf(loc)) + to_chat(user, "You can't do that right now!") return - if(opened || !secure) - return - else - togglelock(user) + togglelock(user) /obj/structure/closet/CtrlShiftClick(mob/living/user) if(!HAS_TRAIT(user, TRAIT_SKITTISH)) @@ -423,20 +524,6 @@ return dive_into(user) -/obj/structure/closet/proc/togglelock(mob/living/user, silent) - if(secure && !broken) - if(allowed(user)) - if(iscarbon(user)) - add_fingerprint(user) - locked = !locked - user.visible_message("[user] [locked ? null : "un"]locks [src].", - "You [locked ? null : "un"]lock [src].") - update_icon() - else if(!silent) - to_chat(user, "Access Denied") - else if(secure && broken) - to_chat(user, "\The [src] is broken!") - /obj/structure/closet/emag_act(mob/user) if(secure && !broken) user.visible_message("Sparks fly from [src]!", @@ -445,6 +532,9 @@ playsound(src, "sparks", 50, 1) broken = TRUE locked = FALSE + if(!QDELETED(lockerelectronics)) + qdel(lockerelectronics) + lockerelectronics = null update_icon() /obj/structure/closet/get_remote_view_fullscreens(mob/user) @@ -458,16 +548,19 @@ if (!(. & EMP_PROTECT_CONTENTS)) for(var/obj/O in src) O.emp_act(severity) - if(secure && !broken && !(. & EMP_PROTECT_SELF)) - if(prob(50 / severity)) - locked = !locked - update_icon() - if(prob(20 / severity) && !opened) - if(!locked) - open() - else - req_access = list() - req_access += pick(get_all_accesses()) + if(!secure || broken) + return ..() + if(prob(50 / severity)) + locked = !locked + update_icon() + if(prob(20 / severity) && !opened) + if(!locked) + open() + else + req_access = list() + req_access += pick(get_all_accesses()) + if(!QDELETED(lockerelectronics)) + lockerelectronics.accesses = req_access /obj/structure/closet/contents_explosion(severity, target) for(var/atom/A in contents) diff --git a/code/game/objects/structures/crates_lockers/closets/bodybag.dm b/code/game/objects/structures/crates_lockers/closets/bodybag.dm index 502b23354c..1c34850274 100644 --- a/code/game/objects/structures/crates_lockers/closets/bodybag.dm +++ b/code/game/objects/structures/crates_lockers/closets/bodybag.dm @@ -49,6 +49,12 @@ return 1 return 0 +/obj/structure/closet/body_bag/handle_lock_addition() + return + +/obj/structure/closet/body_bag/handle_lock_removal() + return + /obj/structure/closet/body_bag/MouseDrop(over_object, src_location, over_location) . = ..() if(over_object == usr && Adjacent(usr) && (in_range(src, usr) || usr.contents.Find(src))) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 82b0d1a441..aad68b2166 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -57,6 +57,11 @@ I.alpha = 0 animate(I, pixel_z = 32, alpha = 255, time = 5, easing = ELASTIC_EASING) +/obj/structure/closet/cardboard/handle_lock_addition() //Whoever heard of a lockable cardboard box anyway + return + +/obj/structure/closet/cardboard/handle_lock_removal() + return /obj/structure/closet/cardboard/metal name = "large metal box" diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index d6d2f18e5a..d2ab9ea6fb 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -358,3 +358,8 @@ new /obj/item/clothing/shoes/workboots/mining(src) new /obj/item/storage/backpack/satchel/explorer(src) +/obj/structure/closet/coffin/handle_lock_addition() + return + +/obj/structure/closet/coffin/handle_lock_removal() + return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index eb764fc230..e44d3c9079 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -4,6 +4,18 @@ req_access = list(ACCESS_ALL_PERSONAL_LOCKERS) var/registered_name = null +/obj/structure/closet/secure_closet/personal/examine(mob/user) + ..() + if(registered_name) + to_chat(user, "The display reads, \"Owned by [registered_name]\".") + +/obj/structure/closet/secure_closet/personal/check_access(obj/item/card/id/I) + . = ..() + if(!I || !istype(I)) + return + if(registered_name == I.registered_name) + return TRUE + /obj/structure/closet/secure_closet/personal/PopulateContents() ..() if(prob(50)) @@ -33,21 +45,21 @@ /obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params) var/obj/item/card/id/I = W.GetID() - if(istype(I)) - if(broken) - to_chat(user, "It appears to be broken.") - return - if(!I || !I.registered_name) - return - if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) - //they can open all lockers, or nobody owns this, or they own this locker - locked = !locked - update_icon() - - if(!registered_name) - registered_name = I.registered_name - desc = "Owned by [I.registered_name]." - else - to_chat(user, "Access Denied.") - else + if(!I || !istype(I)) return ..() + if(!can_lock(user, FALSE)) //Can't do anything if there isn't a lock! + return + if(I.registered_name && !registered_name) + to_chat(user, "You claim [src].") + registered_name = I.registered_name + else + ..() + +/obj/structure/closet/secure_closet/personal/handle_lock_addition() //If lock construction is successful we don't care what access the electronics had, so we override it + if(..()) + req_access = list(ACCESS_ALL_PERSONAL_LOCKERS) + lockerelectronics.accesses = req_access + +/obj/structure/closet/secure_closet/personal/handle_lock_removal() + if(..()) + registered_name = null diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 067b1b0eb1..6caa7d834b 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -54,6 +54,12 @@ manifest = null update_icon() +/obj/structure/closet/crate/handle_lock_addition() + return + +/obj/structure/closet/crate/handle_lock_removal() + return + /obj/structure/closet/crate/proc/tear_manifest(mob/user) to_chat(user, "You tear the manifest off of [src].") playsound(src, 'sound/items/poster_ripped.ogg', 75, 1) diff --git a/code/game/objects/structures/dresser.dm b/code/game/objects/structures/dresser.dm index 461e19adf1..cdca354563 100644 --- a/code/game/objects/structures/dresser.dm +++ b/code/game/objects/structures/dresser.dm @@ -79,4 +79,4 @@ var/n_color = input(H, "Choose your [garment_type]'\s color.", "Character Preference", default_color) as color|null if(!n_color || !H.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) return default_color - return n_color + return sanitize_hexcolor(n_color) diff --git a/code/game/objects/structures/femur_breaker.dm b/code/game/objects/structures/femur_breaker.dm new file mode 100644 index 0000000000..e3002a8fae --- /dev/null +++ b/code/game/objects/structures/femur_breaker.dm @@ -0,0 +1,175 @@ +#define BREAKER_ANIMATION_LENGTH 32 +#define BREAKER_SLAT_RAISED 1 +#define BREAKER_SLAT_MOVING 2 +#define BREAKER_SLAT_DROPPED 3 +#define BREAKER_ACTIVATE_DELAY 30 +#define BREAKER_WRENCH_DELAY 10 +#define BREAKER_ACTION_INUSE 5 +#define BREAKER_ACTION_WRENCH 6 + +/obj/structure/femur_breaker + name = "femur breaker" + desc = "A large structure used to break the femurs of traitors and treasonists." + icon = 'icons/obj/femur_breaker.dmi' + icon_state = "breaker_raised" + can_buckle = TRUE + anchored = TRUE + density = TRUE + max_buckled_mobs = 1 + buckle_lying = TRUE + buckle_prevents_pull = TRUE + layer = ABOVE_MOB_LAYER + var/slat_status = BREAKER_SLAT_RAISED + var/current_action = 0 // What's currently happening to the femur breaker + +/obj/structure/femur_breaker/examine(mob/user) + ..() + + var/msg = "" + + msg += "It is [anchored ? "secured to the floor." : "unsecured."]
" + + if (slat_status == BREAKER_SLAT_RAISED) + msg += "The breaker slat is in a neutral position." + else + msg += "The breaker slat is lowered, and must be raised." + + if (LAZYLEN(buckled_mobs)) + msg += "
" + msg += "Someone appears to be strapped in. You can help them unbuckle, or activate the femur breaker." + + to_chat(user, msg) + + return msg + +/obj/structure/femur_breaker/attack_hand(mob/user) + add_fingerprint(user) + + // Currently being used + if (current_action) + return + + switch (slat_status) + if (BREAKER_SLAT_MOVING) + return + if (BREAKER_SLAT_DROPPED) + slat_status = BREAKER_SLAT_MOVING + icon_state = "breaker_raise" + addtimer(CALLBACK(src, .proc/raise_slat), BREAKER_ANIMATION_LENGTH) + return + if (BREAKER_SLAT_RAISED) + if (LAZYLEN(buckled_mobs)) + if (user.a_intent == INTENT_HARM) + user.visible_message("[user] begins to pull the lever!", + "You begin to the pull the lever.") + current_action = BREAKER_ACTION_INUSE + + if (do_after(user, BREAKER_ACTIVATE_DELAY, target = src) && slat_status == BREAKER_SLAT_RAISED) + current_action = 0 + slat_status = BREAKER_SLAT_MOVING + icon_state = "breaker_drop" + drop_slat(user) + else + current_action = 0 + else + var/mob/living/carbon/human/H = buckled_mobs[1] + + if (H) + H.regenerate_icons() + + unbuckle_all_mobs() + else //HERE + slat_status = BREAKER_SLAT_DROPPED + icon_state = "breaker_drop" + +/obj/structure/femur_breaker/proc/damage_leg(mob/living/carbon/human/H) + H.emote("scream") + H.apply_damage(150, BRUTE, pick(BODY_ZONE_L_LEG, BODY_ZONE_R_LEG)) + H.adjustBruteLoss(rand(5,20) + (max(0, H.health))) //Make absolutely sure they end up in crit, so that they can succumb if they wish. + +/obj/structure/femur_breaker/proc/raise_slat() + slat_status = BREAKER_SLAT_RAISED + icon_state = "breaker_raised" + +/obj/structure/femur_breaker/proc/drop_slat(mob/user) + if (buckled_mobs.len) + var/mob/living/carbon/human/H = buckled_mobs[1] + + if (!H) + return + + playsound(src, 'sound/effects/femur_breaker.ogg', 100, FALSE) + H.Stun(BREAKER_ANIMATION_LENGTH) + addtimer(CALLBACK(src, .proc/damage_leg, H), BREAKER_ANIMATION_LENGTH, TIMER_UNIQUE) + log_combat(user, H, "femur broke", src) + + slat_status = BREAKER_SLAT_DROPPED + icon_state = "breaker" + +/obj/structure/femur_breaker/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) + if (!anchored) + to_chat(usr, "The [src] needs to be wrenched to the floor!") + return FALSE + + if (!istype(M, /mob/living/carbon/human)) + to_chat(usr, "It doesn't look like [M.p_they()] can fit into this properly!") + return FALSE + + if (slat_status != BREAKER_SLAT_RAISED) + to_chat(usr, "The femur breaker must be in its neutral position before buckling someone in!") + return FALSE + + return ..(M, force, FALSE) + +/obj/structure/femur_breaker/post_buckle_mob(mob/living/M) + if (!istype(M, /mob/living/carbon/human)) + return + + var/mob/living/carbon/human/H = M + + if (H.dna) + if (H.dna.species) + var/datum/species/S = H.dna.species + + if (!istype(S)) + unbuckle_all_mobs() + else + unbuckle_all_mobs() + else + unbuckle_all_mobs() + + ..() + +/obj/structure/femur_breaker/can_be_unfasten_wrench(mob/user, silent) + if (LAZYLEN(buckled_mobs)) + if (!silent) + to_chat(user, "Can't unfasten, someone's strapped in!") + return FAILED_UNFASTEN + + if (current_action) + return FAILED_UNFASTEN + + return ..() + +/obj/structure/femur_breaker/wrench_act(mob/living/user, obj/item/I) + if (current_action) + return + + current_action = BREAKER_ACTION_WRENCH + + if (do_after(user, BREAKER_WRENCH_DELAY, target = src)) + current_action = 0 + default_unfasten_wrench(user, I, 0) + setDir(SOUTH) + return TRUE + else + current_action = 0 + +#undef BREAKER_ANIMATION_LENGTH +#undef BREAKER_SLAT_RAISED +#undef BREAKER_SLAT_MOVING +#undef BREAKER_SLAT_DROPPED +#undef BREAKER_ACTIVATE_DELAY +#undef BREAKER_WRENCH_DELAY +#undef BREAKER_ACTION_INUSE +#undef BREAKER_ACTION_WRENCH diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index cff219c63e..f6d234b346 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -272,7 +272,7 @@ return 0 if(ishuman(C) && (lube&NO_SLIP_WHEN_WALKING)) var/mob/living/carbon/human/H = C - if(!H.sprinting && H.getStaminaLoss() >= 20) + if(!H.sprinting && H.getStaminaLoss() <= 20) return 0 if(!(lube&SLIDE_ICE)) to_chat(C, "You slipped[ O ? " on the [O.name]" : ""]!") diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index fad7410a6a..f66cda42dc 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -15,9 +15,9 @@ H.real_name = random_unique_name(H.gender) H.name = H.real_name H.underwear = random_underwear(H.gender) - H.undie_color = random_color() + H.undie_color = random_short_color() H.undershirt = random_undershirt(H.gender) - H.shirt_color = random_color() + H.shirt_color = random_short_color() H.skin_tone = random_skin_tone() H.hair_style = random_hair_style(H.gender) H.facial_hair_style = random_facial_hair_style(H.gender) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 6fa118ab7f..d881044757 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1882,14 +1882,14 @@ return var/mob/M = locate(href_list["CentComReply"]) - usr.client.admin_headset_message(M, "CentCom") + usr.client.admin_headset_message(M, RADIO_CHANNEL_CENTCOM) else if(href_list["SyndicateReply"]) if(!check_rights(R_ADMIN)) return var/mob/M = locate(href_list["SyndicateReply"]) - usr.client.admin_headset_message(M, "Syndicate") + usr.client.admin_headset_message(M, RADIO_CHANNEL_SYNDICATE) else if(href_list["HeadsetMessage"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 6295d4be43..c0445d588d 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -62,7 +62,7 @@ .["laws"] = borg.laws ? borg.laws.get_law_list(include_zeroth = TRUE) : list() .["channels"] = list() for (var/k in GLOB.radiochannels) - if (k == "Common") + if (k == RADIO_CHANNEL_COMMON) continue .["channels"] += list(list("name" = k, "installed" = (k in borg.radio.channels))) .["cell"] = borg.cell ? list("missing" = FALSE, "maxcharge" = borg.cell.maxcharge, "charge" = borg.cell.charge) : list("missing" = TRUE, "maxcharge" = 1, "charge" = 0) @@ -164,15 +164,15 @@ if (channel in borg.radio.channels) // We're removing a channel if (!borg.radio.keyslot) // There's no encryption key. This shouldn't happen but we can cope borg.radio.channels -= channel - if (channel == "Syndicate") + if (channel == RADIO_CHANNEL_SYNDICATE) borg.radio.syndie = FALSE - else if (channel == "CentCom") + else if (channel == RADIO_CHANNEL_CENTCOM) borg.radio.independent = FALSE else borg.radio.keyslot.channels -= channel - if (channel == "Syndicate") + if (channel == RADIO_CHANNEL_SYNDICATE) borg.radio.keyslot.syndie = FALSE - else if (channel == "CentCom") + else if (channel == RADIO_CHANNEL_CENTCOM) borg.radio.keyslot.independent = FALSE message_admins("[key_name_admin(user)] removed the [channel] radio channel from [ADMIN_LOOKUPFLW(borg)].") log_admin("[key_name(user)] removed the [channel] radio channel from [key_name(borg)].") @@ -180,9 +180,9 @@ if (!borg.radio.keyslot) // Assert that an encryption key exists borg.radio.keyslot = new (borg.radio) borg.radio.keyslot.channels[channel] = 1 - if (channel == "Syndicate") + if (channel == RADIO_CHANNEL_SYNDICATE) borg.radio.keyslot.syndie = TRUE - else if (channel == "CentCom") + else if (channel == RADIO_CHANNEL_CENTCOM) borg.radio.keyslot.independent = TRUE message_admins("[key_name_admin(user)] added the [channel] radio channel to [ADMIN_LOOKUPFLW(borg)].") log_admin("[key_name(user)] added the [channel] radio channel to [key_name(borg)].") diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 52e76f95b6..a725399b0f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -65,7 +65,7 @@ return if (!sender) - sender = input("Who is the message from?", "Sender") as null|anything in list("CentCom","Syndicate") + sender = input("Who is the message from?", "Sender") as null|anything in list(RADIO_CHANNEL_CENTCOM,RADIO_CHANNEL_SYNDICATE) if(!sender) return diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index a1b9b53fe9..252e2b5cbe 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -353,7 +353,7 @@ /datum/antagonist/changeling/greet() if (you_are_greet) to_chat(owner.current, "You are [changelingID], a changeling! You have absorbed and taken the form of a human.") - to_chat(owner.current, "Use say \":g message\" to communicate with your fellow changelings.") + to_chat(owner.current, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with your fellow changelings.") to_chat(owner.current, "You must complete the following tasks:") owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_aler.ogg', 100, FALSE, pressure_affected = FALSE) diff --git a/code/modules/antagonists/changeling/powers/hivemind.dm b/code/modules/antagonists/changeling/powers/hivemind.dm index 1d7382d947..f7718d7708 100644 --- a/code/modules/antagonists/changeling/powers/hivemind.dm +++ b/code/modules/antagonists/changeling/powers/hivemind.dm @@ -1,8 +1,8 @@ -//HIVEMIND COMMUNICATION (:g) +//HIVEMIND COMMUNICATION //MODE_TOKEN_CHANGELING / :g /obj/effect/proc_holder/changeling/hivemind_comms name = "Hivemind Communication" desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings." - helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." + helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives." //MODE_TOKEN_CHANGELING needs to be manually updated here. dna_cost = 1 chemical_cost = -1 action_icon = 'icons/mob/actions/actions_xeno.dmi' @@ -20,7 +20,7 @@ ..() var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.changeling_speak = 1 - to_chat(user, "Use say \":g message\" to communicate with the other changelings.") + to_chat(user, "Use say \"[MODE_TOKEN_CHANGELING] message\" to communicate with the other changelings.") var/obj/effect/proc_holder/changeling/hivemind_upload/S1 = new if(!changeling.has_sting(S1)) changeling.purchasedpowers+=S1 diff --git a/code/modules/antagonists/changeling/powers/linglink.dm b/code/modules/antagonists/changeling/powers/linglink.dm index 70df78e3b4..971c811074 100644 --- a/code/modules/antagonists/changeling/powers/linglink.dm +++ b/code/modules/antagonists/changeling/powers/linglink.dm @@ -56,8 +56,8 @@ if(M.lingcheck() == LINGHIVE_LING) to_chat(M, "We can sense a foreign presence in the hivemind...") target.mind.linglink = 1 - target.say(":g AAAAARRRRGGGGGHHHHH!!") - to_chat(target, "You can now communicate in the changeling hivemind, say \":g message\" to communicate!") + target.say("[MODE_TOKEN_CHANGELING] AAAAARRRRGGGGGHHHHH!!") + to_chat(target, "You can now communicate in the changeling hivemind, say \"[MODE_TOKEN_CHANGELING] message\" to communicate!") target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them sleep(1800) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]", "[i]")) diff --git a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm index ea2ec4d6ef..5cf7ab7923 100644 --- a/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm +++ b/code/modules/antagonists/clockcult/clock_effects/spatial_gateway.dm @@ -133,6 +133,9 @@ return FALSE if(!uses) return FALSE + if(!do_teleport(A, get_turf(linked_gateway), channel = TELEPORT_CHANNEL_CULT, forced = TRUE)) + visible_message("[A] bounces off [src]!") + return FALSE if(isliving(A)) var/mob/living/user = A to_chat(user, "You pass through [src] and appear elsewhere!") @@ -141,7 +144,6 @@ playsound(linked_gateway, 'sound/effects/empulse.ogg', 50, 1) transform = matrix() * 1.5 linked_gateway.transform = matrix() * 1.5 - A.forceMove(get_turf(linked_gateway)) if(!no_cost) uses = max(0, uses - 1) linked_gateway.uses = max(0, linked_gateway.uses - 1) diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index 530c4c5662..23caa788d4 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -67,6 +67,7 @@ name = "replicant manacles" desc = "Heavy manacles made out of freezing-cold metal. It looks like brass, but feels much more solid." icon_state = "brass_manacles" + item_state = "brass_manacles" item_flags = DROPDEL /obj/item/restraints/handcuffs/clockwork/dropped(mob/user) diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm index 54027266e5..0ac96c47f9 100644 --- a/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm +++ b/code/modules/antagonists/clockcult/clock_items/clockwork_armor.dm @@ -69,7 +69,7 @@ heat_protection = CHEST|GROIN|LEGS resistance_flags = FIRE_PROOF | ACID_PROOF armor = list("melee" = 60, "bullet" = 70, "laser" = -25, "energy" = 0, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/holyoil) + allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/mmi/posibrain/soul_vessel, /obj/item/reagent_containers/food/drinks/bottle/holyoil) /obj/item/clothing/suit/armor/clockwork/Initialize() . = ..() diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm index 552a747651..6d6b1fa9d0 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm @@ -27,7 +27,7 @@ to_chat(invoker, "Stargazers can't be built off-station.") return return ..() - + //Integration Cog: Creates an integration cog that can be inserted into APCs to passively siphon power. /datum/clockwork_scripture/create_object/integration_cog @@ -224,12 +224,14 @@ . = ..() /datum/clockwork_scripture/abscond/scripture_effects() - var/take_pulling = invoker.pulling && isliving(invoker.pulling) && get_clockwork_power(ABSCOND_ABDUCTION_COST) + var/mob/living/pulled_mob = (invoker.pulling && isliving(invoker.pulling) && get_clockwork_power(ABSCOND_ABDUCTION_COST)) ? invoker.pulling : null var/turf/T if(GLOB.ark_of_the_clockwork_justiciar) T = get_step(GLOB.ark_of_the_clockwork_justiciar, SOUTH) else T = get_turf(pick(GLOB.servant_spawns)) + if(!do_teleport(invoker, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)) + return invoker.visible_message("[invoker] flickers and phases out of existence!", \ "You feel a dizzying sense of vertigo as you're yanked back to Reebe!") T.visible_message("[invoker] flickers and phases into existence!") @@ -237,10 +239,9 @@ playsound(T, 'sound/magic/magic_missile.ogg', 50, TRUE) do_sparks(5, TRUE, invoker) do_sparks(5, TRUE, T) - if(take_pulling) + if(pulled_mob && do_teleport(pulled_mob, T, channel = TELEPORT_CHANNEL_CULT, forced = TRUE)) adjust_clockwork_power(-special_power_cost) - invoker.pulling.forceMove(T) - invoker.forceMove(T) + invoker.start_pulling(pulled_mob) //forcemove resets pulls, so we need to re-pull if(invoker.client) animate(invoker.client, color = client_color, time = 25) diff --git a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm index 2b1d9d5f02..56b36d13e6 100644 --- a/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/modules/antagonists/clockcult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -131,10 +131,8 @@ if(!M || !M.current) continue if(isliving(M.current) && M.current.stat != DEAD) - if(isAI(M.current)) - M.current.forceMove(get_step(get_step(src, NORTH),NORTH)) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark. - else - M.current.forceMove(get_turf(src)) + var/turf/t_turf = isAI(M.current) ? get_step(get_step(src, NORTH),NORTH) : get_turf(src) // AI too fat, must make sure it always ends up a 2 tiles north instead of on the ark. + do_teleport(M, t_turf, channel = TELEPORT_CHANNEL_CULT, forced = TRUE) M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) M.current.clear_fullscreen("flash", 5) playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, FALSE) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index a5fd516a42..f58ffc56d2 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -490,11 +490,12 @@ to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") return uses-- - user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \ - "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") + var/turf/origin = get_turf(user) var/mob/living/L = target - L.forceMove(dest) - dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") + if(do_teleport(L, dest, channel = TELEPORT_CHANNEL_CULT)) + origin.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \ + "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") + dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") ..() //Shackles diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index 9a17c3270b..dc2c29eb6d 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -568,7 +568,7 @@ var/mob/living/carbon/C = user if(C.pulling) var/atom/movable/pulled = C.pulling - pulled.forceMove(T) + do_teleport(pulled, T, channel = TELEPORT_CHANNEL_CULT) . = pulled /obj/item/cult_shift/attack_self(mob/user) @@ -593,13 +593,12 @@ new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir) var/atom/movable/pulled = handle_teleport_grab(destination, C) - C.forceMove(destination) - if(pulled) - C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull - - new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir) - playsound(destination, 'sound/effects/phasein.ogg', 25, 1) - playsound(destination, "sparks", 50, 1) + if(do_teleport(C, destination, channel = TELEPORT_CHANNEL_CULT)) + if(pulled) + C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull + new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir) + playsound(destination, 'sound/effects/phasein.ogg', 25, 1) + playsound(destination, "sparks", 50, 1) else to_chat(C, "The veil cannot be torn here!") diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index be8d3b2e0a..a69694ced9 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -422,6 +422,7 @@ structure_check() searches for nearby cultist structures required for the invoca return var/movedsomething = FALSE var/moveuserlater = FALSE + var/movesuccess = FALSE for(var/atom/movable/A in T) if(ishuman(A)) new /obj/effect/temp_visual/dir_setting/cult/phase/out(T, A.dir) @@ -432,20 +433,26 @@ structure_check() searches for nearby cultist structures required for the invoca continue if(!A.anchored) movedsomething = TRUE - A.forceMove(target) + if(do_teleport(A, target, forceMove = TRUE, channel = TELEPORT_CHANNEL_CULT)) + movesuccess = TRUE if(movedsomething) ..() - visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.") - to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") if(moveuserlater) - user.forceMove(target) + if(do_teleport(user, target, channel = TELEPORT_CHANNEL_CULT)) + movesuccess = TRUE + if(movesuccess) + visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.") + to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") + else + to_chat(user, "You[moveuserlater ? "r vision blurs briefly, but nothing happens":" try send everything above the rune away, but the teleportation fails"].") if(is_mining_level(z) && !is_mining_level(target.z)) //No effect if you stay on lavaland actual_selected_rune.handle_portal("lava") else var/area/A = get_area(T) if(A.map_name == "Space") actual_selected_rune.handle_portal("space", T) - target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") + if(movesuccess) + target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") else fail_invoke() diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index c616459bd1..b274283621 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -62,7 +62,10 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) for(var/obj/machinery/computer/camera_advanced/shuttle_docker/D in GLOB.jam_on_wardec) D.jammed = TRUE - new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS + CEILING(PLAYER_SCALING * GLOB.player_list.len, 1)) + var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop) + var/actual_players = GLOB.joined_player_list.len - nukeops.len + + new uplink_type(get_turf(user), user.key, CHALLENGE_TELECRYSTALS + CEILING(PLAYER_SCALING * actual_players, 1)) CONFIG_SET(number/shuttle_refuel_delay, max(CONFIG_GET(number/shuttle_refuel_delay), CHALLENGE_SHUTTLE_DELAY)) SSblackbox.record_feedback("amount", "nuclear_challenge_mode", 1) @@ -72,7 +75,10 @@ GLOBAL_LIST_EMPTY(jam_on_wardec) if(declaring_war) to_chat(user, "You are already in the process of declaring war! Make your mind up.") return FALSE - if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) + + var/list/nukeops = get_antag_minds(/datum/antagonist/nukeop) + var/actual_players = GLOB.joined_player_list.len - nukeops.len + if(actual_players < CHALLENGE_MIN_PLAYERS) to_chat(user, "The enemy crew is too small to be worth declaring war on.") return FALSE if(!user.onSyndieBase()) diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm index 9fb2c3e2b7..87cee7586d 100644 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ b/code/modules/antagonists/swarmer/swarmer.dm @@ -488,7 +488,7 @@ S.set_up(4,0,get_turf(target)) S.start() playsound(src,'sound/effects/sparks4.ogg',50,1) - do_teleport(target, F, 0) + do_teleport(target, F, 0, channel = TELEPORT_CHANNEL_BLUESPACE) /mob/living/simple_animal/hostile/swarmer/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = FALSE, tesla_shock = FALSE, illusion = FALSE, stun = TRUE) if(!tesla_shock) diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 86493f6322..08e00ea0f4 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -408,7 +408,7 @@ break var/turf/potential_T = find_safe_turf() if(T.z != potential_T.z || abs(get_dist_euclidian(potential_T,T)) > 50 - breakout) - user.forceMove(potential_T) + do_teleport(user, potential_T, channel = TELEPORT_CHANNEL_MAGIC) user.canmove = 0 T = potential_T break diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 552b9dbd64..35b30107d8 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -27,7 +27,7 @@ var/obj/item/radio/radio var/radio_key = /obj/item/encryptionkey/headset_med - var/radio_channel = "Medical" + var/radio_channel = RADIO_CHANNEL_MEDICAL var/running_anim = FALSE diff --git a/code/modules/cargo/exports/manifest.dm b/code/modules/cargo/exports/manifest.dm index 02b060e0bf..d03f5a46ce 100644 --- a/code/modules/cargo/exports/manifest.dm +++ b/code/modules/cargo/exports/manifest.dm @@ -81,6 +81,7 @@ /datum/export/paperwork_correct cost = 150 + k_elasticity = 0 unit_name = "correct paperwork" export_types = list(/obj/item/folder/paperwork_correct) @@ -88,5 +89,6 @@ /datum/export/paperwork_incorrect cost = -500 // Failed to meet NT standers + k_elasticity = 0 unit_name = "returned incorrect paperwork" export_types = list(/obj/item/folder/paperwork) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 53a8ab42c3..5656287c52 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2006,7 +2006,8 @@ /obj/item/storage/box/mre/menu1/safe, /obj/item/storage/box/mre/menu2/safe, /obj/item/storage/box/mre/menu2/safe, - /obj/item/storage/box/mre/menu3) + /obj/item/storage/box/mre/menu3, + /obj/item/storage/box/mre/menu4/safe) crate_name = "MRE crate (emergency rations)" /datum/supply_pack/organic/pizza @@ -2233,6 +2234,12 @@ /obj/item/clothing/neck/petcollar) crate_name = "pug crate" +/datum/supply_pack/organic/critter/kiwi + name = "Space kiwi Crate" + cost = 2000 + contains = list( /mob/living/simple_animal/kiwi) + crate_name = "space kiwi crate" + /datum/supply_pack/critter/snake name = "Snake Crate" desc = "Tired of these MOTHER FUCKING snakes on this MOTHER FUCKING space station? Then this isn't the crate for you. Contains three poisonous snakes." @@ -2610,6 +2617,13 @@ /obj/item/vending_refill/wardrobe/law_wardrobe) crate_name = "security department supply crate" +/datum/supply_pack/costumes_toys/kinkmate + name = "Kinkmate construction kit" + cost = 2000 + contraband = TRUE + contains = list(/obj/item/vending_refill/kink, /obj/item/circuitboard/machine/kinkmate) + crate_name = "Kinkmate construction kit" + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Miscellaneous /////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -2723,6 +2737,26 @@ crate_type = /obj/structure/closet/crate/wooden crate_name = "festive wrapping paper crate" +/datum/supply_pack/misc/paper_work + name = "Freelance Paper work" + desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up. + cost = 700 // Net of 0 credits + contains = list(/obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/folder/paperwork, + /obj/item/pen/fountain, + /obj/item/pen/fountain, + /obj/item/pen/fountain, + /obj/item/pen/fountain, + /obj/item/pen/fountain) + crate_name = "Paperwork" /datum/supply_pack/misc/funeral name = "Funeral Supply crate" @@ -2735,18 +2769,11 @@ crate_name = "coffin" crate_type = /obj/structure/closet/crate/coffin -/datum/supply_pack/misc/religious_supplies - name = "Religious Supplies Crate" - desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets." - cost = 4000 // it costs so much because the Space Church is ran by Space Jews - contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/reagent_containers/food/drinks/bottle/holywater, - /obj/item/storage/book/bible/booze, - /obj/item/storage/book/bible/booze, - /obj/item/clothing/suit/hooded/chaplain_hoodie, - /obj/item/clothing/suit/hooded/chaplain_hoodie - ) - crate_name = "religious supplies crate" +/datum/supply_pack/misc/jukebox + name = "Jukebox" + cost = 35000 + contains = list(/obj/machinery/jukebox) + crate_name = "Jukebox" /datum/supply_pack/misc/lewd name = "Lewd Crate" // OwO @@ -2779,26 +2806,18 @@ crate_name = "deluxe keg" crate_type = /obj/structure/closet/crate -/datum/supply_pack/misc/paper_work - name = "Freelance Paper work" - desc = "The Nanotrasen Primary Bureaucratic Database Intelligence (PDBI) reports that the station has not completed its funding and grant paperwork this solar cycle. In order to gain further funding, your station is required to fill out (10) ten of these forms or no additional capital will be disbursed. We have sent you ten copies of the following form and we expect every one to be up to Nanotrasen Standards." // Disbursement. It's not a typo, look it up. - cost = 400 // Net of 0 credits - contains = list(/obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/folder/paperwork, - /obj/item/pen/fountain, - /obj/item/pen/fountain, - /obj/item/pen/fountain, - /obj/item/pen/fountain, - /obj/item/pen/fountain) - crate_name = "Paperwork" +/datum/supply_pack/misc/religious_supplies + name = "Religious Supplies Crate" + desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets." + cost = 4000 // it costs so much because the Space Church is ran by Space Jews + contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/reagent_containers/food/drinks/bottle/holywater, + /obj/item/storage/book/bible/booze, + /obj/item/storage/book/bible/booze, + /obj/item/clothing/suit/hooded/chaplain_hoodie, + /obj/item/clothing/suit/hooded/chaplain_hoodie + ) + crate_name = "religious supplies crate" /datum/supply_pack/misc/randomised/promiscuous name = "Promiscuous Organs" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8493030a30..146ed9b6cb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -72,11 +72,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/gender = MALE //gender of character (well duh) var/age = 30 //age of character var/underwear = "Nude" //underwear type - var/undie_color = "#FFFFFF" + var/undie_color = "FFF" var/undershirt = "Nude" //undershirt type - var/shirt_color = "#FFFFFF" + var/shirt_color = "FFF" var/socks = "Nude" //socks type - var/socks_color = "#FFFFFF" + var/socks_color = "FFF" var/backbag = DBACKPACK //backpack type var/jumpsuit_style = PREF_SUIT //suit/skirt var/hair_style = "Bald" //Hair type @@ -1321,13 +1321,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) facial_hair_style = random_facial_hair_style(gender) if("underwear") underwear = random_underwear(gender) - undie_color = random_color() + undie_color = random_short_color() if("undershirt") undershirt = random_undershirt(gender) - shirt_color = random_color() + shirt_color = random_short_color() if("socks") socks = random_socks() - socks_color = random_color() + socks_color = random_short_color() if(BODY_ZONE_PRECISE_EYES) eye_color = random_eye_color() if("s_tone") @@ -1442,7 +1442,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("undie_color") var/n_undie_color = input(user, "Choose your underwear's color.", "Character Preference", undie_color) as color|null if(n_undie_color) - undie_color = n_undie_color + undie_color = sanitize_hexcolor(n_undie_color) if("undershirt") var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in GLOB.undershirt_list @@ -1452,7 +1452,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("shirt_color") var/n_shirt_color = input(user, "Choose your undershirt's color.", "Character Preference", shirt_color) as color|null if(n_shirt_color) - shirt_color = n_shirt_color + shirt_color = sanitize_hexcolor(n_shirt_color) if("socks") var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in GLOB.socks_list @@ -1462,7 +1462,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("socks_color") var/n_socks_color = input(user, "Choose your socks' color.", "Character Preference", socks_color) as color|null if(n_socks_color) - socks_color = n_socks_color + socks_color = sanitize_hexcolor(n_socks_color) if("eyes") var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index bc36353ac5..1af24f8e61 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -72,9 +72,30 @@ M.adjustStaminaLoss(-2) //Restore 2/3 of the stamina used assuming empty stam buffer. With proper stamina buffer management, this results in a net gain of +.5 stamina per click. if(warcry) M.say("[warcry]", ignore_spam = TRUE, forced = "north star warcry") + .= FALSE + /obj/item/clothing/gloves/rapid/attack_self(mob/user) var/input = stripped_input(user,"What do you want your battlecry to be? Max length of 6 characters.", ,"", 7) if(input) warcry = input + +/obj/item/clothing/gloves/rapid/hug + name = "Hugs of the North Star" + desc = "Just looking at these fills you with an urge to hug the shit out of people" + warcry = "owo" //Shouldn't ever come into play + +/obj/item/clothing/gloves/rapid/hug/Touch(mob/living/target,proximity = TRUE) + var/mob/living/M = loc + + if(M.a_intent == INTENT_HELP) + if(target.health >= 0 && !HAS_TRAIT(target, TRAIT_FAKEDEATH)) //Can't hug people who are dying/dead + if(target.on_fire || target.lying ) //No spamming extinguishing, helping them up, or other non-hugging/patting help interactions + return + else + M.changeNext_move(CLICK_CD_RAPID) + . = FALSE + +/obj/item/clothing/gloves/rapid/hug/attack_self(mob/user) + return FALSE \ No newline at end of file diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index bf11d40caf..3c3c8f0e9d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -177,3 +177,23 @@ armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) cold_protection = CHEST|ARMS heat_protection = CHEST|ARMS + + +//Robotocist + +/obj/item/clothing/suit/hooded/techpriest + name = "techpriest robes" + desc = "For those who REALLY love their toasters." + icon_state = "techpriest" + item_state = "techpriest" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + hoodtype = /obj/item/clothing/head/hooded/techpriest + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/head/hooded/techpriest + name = "techpriest's hood" + desc = "A hood for those who REALLY love their toasters." + icon_state = "techpriesthood" + item_state = "techpriesthood" + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEEARS diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 3c614c6a9e..48ade24bbe 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -211,6 +211,12 @@ time = 40 category = CAT_ROBOT +/datum/crafting_recipe/potatos + name = "Potat-OS" + reqs = list(/obj/item/stack/cable_coil = 1, /obj/item/stack/rods = 1, /obj/item/reagent_containers/food/snacks/grown/potato = 1, /obj/item/aicard = 1 ) + result = /obj/item/aicard/potato + category = CAT_ROBOT + /datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but name = "Pneumatic Cannon" result = /obj/item/pneumatic_cannon/ghetto @@ -455,6 +461,12 @@ /obj/item/bikehorn = 1) category = CAT_MISC +/datum/crafting_recipe/toyneb + name = "Non-Euplastic Blade" + reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) + result = /obj/item/toy/sword/cx + category = CAT_MISC + /datum/crafting_recipe/chemical_payload name = "Chemical Payload (C4)" result = /obj/item/bombcore/chemical @@ -660,6 +672,15 @@ tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) category = CAT_MISC +/datum/crafting_recipe/femur_breaker + name = "Femur Breaker" + result = /obj/structure/femur_breaker + time = 150 + reqs = list(/obj/item/stack/sheet/metal = 20, + /obj/item/stack/cable_coil = 30) + tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + category = CAT_MISC + /datum/crafting_recipe/lizardhat name = "Lizard Cloche Hat" result = /obj/item/clothing/head/lizard diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm index 798bcf82dd..af22ae3b96 100644 --- a/code/modules/events/meteor_wave.dm +++ b/code/modules/events/meteor_wave.dm @@ -15,6 +15,12 @@ var/list/wave_type var/wave_name = "normal" +/datum/round_event/meteor_wave/setup() + announceWhen = 1 + startWhen = rand(300, 600) //Yeah for SOME REASON this is measured in seconds and not deciseconds??? + endWhen = startWhen + 60 + + /datum/round_event/meteor_wave/New() ..() if(!wave_type) @@ -46,7 +52,7 @@ kill() /datum/round_event/meteor_wave/announce(fake) - priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg') + priority_announce("Meteors have been detected on collision course with the station. Estimated time until impact: [round(startWhen/60)] minutes.", "Meteor Alert", 'sound/ai/meteors.ogg') /datum/round_event/meteor_wave/tick() if(ISMULTIPLE(activeFor, 3)) diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index ec253f13c3..7e37429223 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -27,7 +27,7 @@ for(var/mob/living/carbon/human/H in mobs) if(!moblocs) break //locs aren't always unique, so this may come into play - do_teleport(H, moblocs[moblocs.len]) + do_teleport(H, moblocs[moblocs.len], channel = TELEPORT_CHANNEL_MAGIC) moblocs.len -= 1 for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 412e54878a..bb601b7c82 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -63,4 +63,4 @@ hard_target = P.loc if(!hard_target) return - do_teleport(M, hard_target, 1, 1, 0, 0) ///You will appear adjacent to the beacon + do_teleport(M, hard_target, 1, 1, 0, 0, channel = TELEPORT_CHANNEL_WORMHOLE) ///You will appear adjacent to the beacon diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 0794d274b6..e72b624ae5 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -7,11 +7,12 @@ /obj/item/reagent_containers/food/drinks/bottle amount_per_transfer_from_this = 10 volume = 100 + force = 15 throwforce = 15 item_state = "broken_beer" //Generic held-item sprite until unique ones are made. lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' - var/const/duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets) + var/knockdown_duration = 13 //Directly relates to the 'knockdown' duration. Lowered by armor (i.e. helmets) isGlass = TRUE foodtype = ALCOHOL @@ -61,46 +62,30 @@ to_chat(user, "You don't want to harm [target]!") return - force = 15 //Smashing bottles over someoen's head hurts. - var/obj/item/bodypart/affecting = user.zone_selected //Find what the player is aiming at - var/armor_block = 0 //Get the target's armor values for normal attack damage. - var/armor_duration = 0 //The more force the bottle has, the longer the duration. + var/headarmor = 0 // Target's head armor + var/armor_block = min(90, target.run_armor_check(affecting, "melee", null, null,armour_penetration)) // For normal attack damage - //Calculating duration and calculating damage. - if(ishuman(target)) + //If they have a hat/helmet and the user is targeting their head. + if(affecting == BODY_ZONE_HEAD) + var/obj/item/I = target.get_item_by_slot(SLOT_HEAD) + if(I) + headarmor = I.armor.melee - var/mob/living/carbon/human/H = target - var/headarmor = 0 // Target's head armor - armor_block = H.run_armor_check(affecting, "melee", null, null,armour_penetration) // For normal attack damage - - //If they have a hat/helmet and the user is targeting their head. - if(istype(H.head, /obj/item/clothing/head) && affecting == BODY_ZONE_HEAD) - headarmor = H.head.armor.melee - else - headarmor = 0 - - //Calculate the knockdown duration for the target. - armor_duration = (duration - headarmor) + force - - else - //Only humans can have armor, right? - armor_block = target.run_armor_check(affecting, "melee") - if(affecting == BODY_ZONE_HEAD) - armor_duration = duration + force + //Calculate the knockdown duration for the target. + var/armor_duration = (knockdown_duration - headarmor) + force //Apply the damage! - armor_block = min(90,armor_block) target.apply_damage(force, BRUTE, affecting, armor_block) // You are going to knock someone out for longer if they are not wearing a helmet. var/head_attack_message = "" - if(affecting == BODY_ZONE_HEAD && istype(target, /mob/living/carbon/)) + if(affecting == BODY_ZONE_HEAD && iscarbon(target)) head_attack_message = " on the head" //Knockdown the target for the duration that we calculated and divide it by 5. if(armor_duration) - target.apply_effect(min(armor_duration, 200) , EFFECT_KNOCKDOWN) // Never knockdown more than a flash! + target.Knockdown(min(armor_duration, 200)) // Never knockdown more than a flash! //Display an attack message. if(target != user) @@ -202,17 +187,18 @@ desc = "A flask of holy water...it's been sitting in the Necropolis a while though." list_reagents = list("hell_water" = 100) -/obj/item/reagent_containers/food/drinks/holyoil +/obj/item/reagent_containers/food/drinks/bottle/holyoil name = "flask of zelus oil" desc = "A brass flask of Zelus oil, a viscous fluid scenting of brass. Can be thrown to deal damage from afar." icon_state = "zelusflask" - list_reagents = list("holyoil" = 30) //Powerfull + list_reagents = list("holyoil" = 30) volume = 30 foodtype = NONE - force = 12 //Same as a toolbox + force = 18 throwforce = 18 + knockdown_duration = 18 -/obj/item/reagent_containers/food/drinks/holyoil/null +/obj/item/reagent_containers/food/drinks/bottle/holyoil/empty list_reagents = list("holyoil" = 0) /obj/item/reagent_containers/food/drinks/bottle/vermouth diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm index 6d10a2c6ef..d66cfdd667 100644 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ b/code/modules/food_and_drinks/food/snacks_cake.dm @@ -17,21 +17,21 @@ foodtype = GRAIN | DAIRY /obj/item/reagent_containers/food/snacks/store/cake/plain - name = "vanilla cake" + name = "plain cake" desc = "A plain cake, not a lie." icon_state = "plaincake" custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/cake bonus_reagents = list("nutriment" = 10, "vitamin" = 2) - tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5) + tastes = list("sweetness" = 2,"cake" = 5) foodtype = GRAIN | DAIRY | SUGAR /obj/item/reagent_containers/food/snacks/cakeslice/plain - name = "vanilla cake slice" + name = "plain cake slice" desc = "Just a slice of cake, it is enough for everyone." icon_state = "plaincake_slice" filling_color = "#FFD700" customfoodfilling = 1 - tastes = list("vanilla" = 1, "sweetness" = 2,"cake" = 5) + tastes = list("sweetness" = 2,"cake" = 5) foodtype = GRAIN | DAIRY | SUGAR /obj/item/reagent_containers/food/snacks/store/cake/carrot @@ -147,7 +147,6 @@ tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) foodtype = GRAIN | DAIRY | FRUIT | SUGAR - /obj/item/reagent_containers/food/snacks/store/cake/chocolate name = "chocolate cake" desc = "A cake with added chocolate." @@ -186,7 +185,6 @@ tastes = list("cake" = 5, "sweetness" = 1) foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - /obj/item/reagent_containers/food/snacks/store/cake/apple name = "apple cake" desc = "A cake centred with Apple." @@ -248,7 +246,6 @@ /obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake name = "blackberry and strawberry vanilla cake" desc = "A plain cake, filled with assortment of blackberries and strawberries!" - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "blackbarry_strawberries_cake_vanilla_cake" slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc bonus_reagents = list("nutriment" = 14, "vitamin" = 4) @@ -258,7 +255,6 @@ /obj/item/reagent_containers/food/snacks/cakeslice/bsvc name = "blackberry and strawberry vanilla cake slice" desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "blackbarry_strawberries_cake_vanilla_slice" filling_color = "#FFD700" tastes = list("blackbarry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) @@ -267,7 +263,6 @@ /obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake name = "blackberry and strawberry chocolate cake" desc = "A plain cake, filled with assortment of blackberries and strawberries!" - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "blackbarry_strawberries_cake_coco_cake" slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc bonus_reagents = list("nutriment" = 14, "vitamin" = 4, "cocoa" = 5) @@ -277,7 +272,6 @@ /obj/item/reagent_containers/food/snacks/cakeslice/bscc name = "blackberry and strawberry chocolate cake slice" desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "blackbarry_strawberries_cake_coco_cake_slice" filling_color = "#FFD700" tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) @@ -286,7 +280,6 @@ /obj/item/reagent_containers/food/snacks/store/cake/holy_cake name = "angel food cake" desc = "A cake made for angels and chaplains alike! Contains holy water." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "holy_cake" slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice bonus_reagents = list("nutriment" = 1, "vitamin" = 3, "holy_water" = 10) @@ -296,7 +289,6 @@ /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice name = "angel food cake slice" desc = "A slice of heavenly cake." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "holy_cake_slice" filling_color = "#00FFFF" tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) @@ -305,7 +297,6 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake name = "pound cake" desc = "A condensed cake made for filling people up quickly." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "pound_cake" slices_num = 7 //Its ment to feed the party slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice @@ -316,7 +307,6 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice name = "pound cake slice" desc = "A slice of condensed cake made for filling people up quickly." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "pound_cake_slice" filling_color = "#00FFFF" tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) @@ -325,7 +315,6 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake name = "hardware cake" desc = "A cake that is made with electronic boards and leaks acid..." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "hardware_cake" slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice bonus_reagents = list("sacid" = 15, "oil" = 15) @@ -335,8 +324,41 @@ obj/item/reagent_containers/food/snacks/store/cake/pound_cake /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice name = "hardware cake slice" desc = "A slice of electronic boards and some acid." - icon = 'modular_citadel/icons/obj/food/cake.dmi' icon_state = "hardware_cake_slice" filling_color = "#00FFFF" tastes = list("acid" = 1, "metal" = 1, "regret" = 10) foodtype = GRAIN | GROSS + +/obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake + name = "vanilla cake" + desc = "A vanilla frosted cake." + icon_state = "vanillacake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice + bonus_reagents = list("sugar" = 15, "vanilla" = 15) + tastes = list("caje" = 1, "sugar" = 1, "vanilla" = 10) + foodtype = GRAIN | SUGAR | DAIRY + +/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice + name = "vanilla cake slice" + desc = "A slice of vanilla frosted cake." + icon_state = "vanillacake_slice" + filling_color = "#00FFFF" + tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) + foodtype = GRAIN | SUGAR | DAIRY + +/obj/item/reagent_containers/food/snacks/store/cake/clown_cake + name = "clown cake" + desc = "A funny cake with a clown face on it." + icon_state = "clowncake" + slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice + bonus_reagents = list("sugar" = 15, "laugher" = 15) + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtype = GRAIN | SUGAR | DAIRY + +/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice + name = "clown cake slice" + desc = "A slice of bad jokes, and silly props." + icon_state = "clowncake_slice" + filling_color = "#00FFFF" + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtype = GRAIN | SUGAR | DAIRY \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm index febfa527ca..c4f8ccf76b 100644 --- a/code/modules/food_and_drinks/food/snacks_frozen.dm +++ b/code/modules/food_and_drinks/food/snacks_frozen.dm @@ -88,7 +88,7 @@ /obj/item/reagent_containers/food/snacks/snowcones/orange name = "orange flavored snowcone" - desc = "A mix of different flavors dizzled on a snowball in a paper cup." + desc = "A orange flavor dizzled on a snowball in a paper cup." icon_state = "orange_sc" list_reagents = list("nutriment" = 1, "orangejuice" = 10) tastes = list("ice" = 1, "water" = 1, "berries" = 5) @@ -130,7 +130,7 @@ name = "mixed fruit flavored snowcone" desc = "A mix of different flavors dizzled on a snowball in a paper cup." icon_state = "fruitsalad_sc" - list_reagents = list("nutriment" = 1, "lemonjuice" = 5, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5) + list_reagents = list("nutriment" = 1, "limejuice" = 5, "lemonjuice" = 5, "orangejuice" = 5) tastes = list("ice" = 1, "water" = 1, "fruits" = 25) foodtype = FRUIT diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index e36efe750b..c4b9451c7f 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -573,4 +573,14 @@ name = "Maintenance Peaches" desc = "I have a mouth and I must eat." icon_state = "peachcanmaint" - tastes = list("peaches" = 1, "tin" = 7) \ No newline at end of file + tastes = list("peaches" = 1, "tin" = 7) + +/obj/item/reagent_containers/food/snacks/chocolatestrawberry + name = "Chocolate dipped strawberries" + desc = "A strawberry dipped in a bit of chocolate." + icon_state = "chocolatestrawberry" + list_reagents = list("sugar" = 5, "nutriment" = 2) + filling_color = "#ffdf26" + w_class = WEIGHT_CLASS_NORMAL + tastes = list("strawberries" = 5, "chocolate" = 3) + foodtype = FRUIT | SUGAR \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 238bb4f86a..9b87002738 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -308,7 +308,6 @@ tastes = list("bread" = 1, "egg" = 1, "cheese" = 1) foodtype = GRAIN | MEAT | DAIRY - /obj/item/reagent_containers/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." @@ -369,6 +368,16 @@ tastes = list("cake" = 3, "blue cherry" = 1) foodtype = GRAIN | FRUIT | SUGAR +/obj/item/reagent_containers/food/snacks/strawberrycupcake + name = "Strawberry cupcake" + desc = "Strawberry inside a delicious cupcake." + icon_state = "strawberrycupcake" + bonus_reagents = list("nutriment" = 1, "vitamin" = 3) + list_reagents = list("nutriment" = 5, "vitamin" = 1) + filling_color = "#F0E68C" + tastes = list("cake" = 2, "strawberry" = 1) + foodtype = GRAIN | FRUIT | SUGAR + /obj/item/reagent_containers/food/snacks/honeybun name = "honey bun" desc = "A sticky pastry bun glazed with honey." diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 13222cc22d..be6c11fd68 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -171,8 +171,6 @@ tastes = list("pie" = 1, "apple" = 1) foodtype = GRAIN | FRUIT | SUGAR - - /obj/item/reagent_containers/food/snacks/pie/cherrypie name = "cherry pie" desc = "Taste so good, make a grown man cry." @@ -221,6 +219,33 @@ tastes = list("pie" = 1, "grape" = 1) foodtype = GRAIN | FRUIT | SUGAR +/obj/item/reagent_containers/food/snacks/pie/mimetart + name = "mime tart" + desc = "..." + icon_state = "mimetart" + bonus_reagents = list("nutriment" = 1, "vitamin" = 4, "nothing" = 10) + list_reagents = list("nutriment" = 5, "vitamin" = 5) + tastes = list("pie" = 1, "nothing" = 1) + foodtype = GRAIN + +/obj/item/reagent_containers/food/snacks/pie/berrytart + name = "berry tart" + desc = "A tasty dessert of many different small barries on a thin pie crust." + icon_state = "berrytart" + bonus_reagents = list("nutriment" = 1, "vitamin" = 4) + list_reagents = list("nutriment" = 3, "vitamin" = 5) + tastes = list("pie" = 1, "berries" = 2) + foodtype = GRAIN | FRUIT + +/obj/item/reagent_containers/food/snacks/pie/cocolavatart + name = "chocolate lava tart" + desc = "A tasty dessert made of chocaloate, with a liquid core." + icon_state = "cocolavatart" + bonus_reagents = list("nutriment" = 1, "vitamin" = 4) + list_reagents = list("nutriment" = 4, "vitamin" = 4) + tastes = list("pie" = 1, "grape" = 1) + foodtype = GRAIN | SUGAR + /obj/item/reagent_containers/food/snacks/pie/blumpkinpie name = "blumpkin pie" desc = "An odd blue pie made with toxic blumpkin." @@ -290,4 +315,12 @@ filling_color = "#1E90FF" list_reagents = list("nutriment" = 2, "vitamin" = 4) tastes = list("nuts" = 1, "pie" = 1) - foodtype = GRAIN \ No newline at end of file + foodtype = GRAIN + +/obj/item/reagent_containers/food/snacks/pie/strawberrypie + name = "strawberry pie" + desc = "A strawberry.pie." + icon_state = "strawberrypie" + bonus_reagents = list("nutriment" = 6, "vitamin" = 6) + tastes = list("strawberry" = 1, "pie" = 1) + foodtype = GRAIN | FRUIT | SUGAR diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 464b8ce26f..e26d15dbd3 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -148,6 +148,27 @@ result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc subcategory = CAT_CAKE +/datum/crafting_recipe/food/clowncake + name = "clown cake" + always_availible = FALSE + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/reagent_containers/food/snacks/sundae = 2, + /obj/item/reagent_containers/food/snacks/grown/banana = 5 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake + subcategory = CAT_CAKE + +/datum/crafting_recipe/food/vanillacake + name = "vanilla cake" + always_availible = FALSE + reqs = list( + /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2 + ) + result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake + subcategory = CAT_CAKE + /datum/crafting_recipe/food/cak name = "Living cat/cake hybrid" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm index 08d5716779..73b09df68d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm @@ -211,7 +211,7 @@ subcategory = CAT_ICE /datum/crafting_recipe/food/kiwi_sc - name = "Soda water snowcone" + name = "Kiwi snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, /obj/item/reagent_containers/food/snacks/egg/kiwiEgg = 1, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index a6240e5b48..71ba5dfe41 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -258,7 +258,7 @@ subcategory = CAT_MISCFOOD -/datum/crafting_recipe/food/lizardwine +/datum/crafting_recipe/lizardwine //not a subtype of /datum/crafting_recipe/food due to a bug where the resulting bottle would contain 100u of lizardwine and 100u of ethanol. name = "Lizard wine" time = 40 reqs = list( @@ -266,6 +266,7 @@ /datum/reagent/consumable/ethanol = 100 ) result = /obj/item/reagent_containers/food/drinks/bottle/lizardwine + category = CAT_FOOD subcategory = CAT_MISCFOOD @@ -331,3 +332,12 @@ ) result = /obj/item/reagent_containers/food/snacks/riceball subcategory = CAT_MISCFOOD + +/datum/crafting_recipe/food/chocolatestrawberry + name = "Chocolate Strawberry" + reqs = list( + /obj/item/reagent_containers/food/snacks/chocolatebar = 1, + /obj/item/reagent_containers/food/snacks/grown/strawberries = 1 + ) + result = /obj/item/reagent_containers/food/snacks/chocolatestrawberry + subcategory = CAT_MISCFOOD \ No newline at end of file diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 2246d12df4..f3675ccb0d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -325,6 +325,15 @@ datum/crafting_recipe/food/donut/meat result = /obj/item/reagent_containers/food/snacks/bluecherrycupcake subcategory = CAT_PASTRY +/datum/crafting_recipe/food/strawberrycupcake + name = "Strawberry cherry cupcake" + reqs = list( + /obj/item/reagent_containers/food/snacks/pastrybase = 1, + /obj/item/reagent_containers/food/snacks/grown/strawberries = 1 + ) + result = /obj/item/reagent_containers/food/snacks/strawberrycupcake + subcategory = CAT_PASTRY + /datum/crafting_recipe/food/honeybun name = "Honey bun" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm index 79d761c2e2..a0a225c44f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm @@ -160,6 +160,15 @@ result = /obj/item/reagent_containers/food/snacks/pie/frostypie subcategory = CAT_PIE +/datum/crafting_recipe/food/strawberrypie + name = "Strawberry pie" + reqs = list( + /obj/item/reagent_containers/food/snacks/pie/plain = 1, + /obj/item/reagent_containers/food/snacks/grown/strawberries = 1 + ) + result = /obj/item/reagent_containers/food/snacks/pie/strawberrypie + subcategory = CAT_PIE + /datum/crafting_recipe/food/baklava name = "Baklava pie" reqs = list( @@ -168,4 +177,41 @@ /obj/item/seeds/wheat/oat = 3 ) result = /obj/item/reagent_containers/food/snacks/pie/baklava + subcategory = CAT_PIE + +/datum/crafting_recipe/food/mimetart + name = "Mime tart" + always_availible = FALSE + reqs = list( + /datum/reagent/consumable/milk = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/reagent_containers/food/snacks/pie/plain = 1, + /datum/reagent/consumable/nothing = 5 + ) + result = /obj/item/reagent_containers/food/snacks/pie/mimetart + subcategory = CAT_PIE + +/datum/crafting_recipe/food/berrytart + name = "Berry tart" + always_availible = FALSE + reqs = list( + /datum/reagent/consumable/milk = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/reagent_containers/food/snacks/pie/plain = 1, + /obj/item/reagent_containers/food/snacks/grown/berries = 3 + ) + result = /obj/item/reagent_containers/food/snacks/pie/berrytart + subcategory = CAT_PIE + +/datum/crafting_recipe/food/cocolavatart + name = "Chocolate Lava tart" + always_availible = FALSE + reqs = list( + /datum/reagent/consumable/milk = 5, + /datum/reagent/consumable/sugar = 5, + /obj/item/reagent_containers/food/snacks/pie/plain = 1, + /obj/item/reagent_containers/food/snacks/chocolatebar = 3, + /obj/item/slime_extract = 1 + ) + result = /obj/item/reagent_containers/food/snacks/pie/cocolavatart subcategory = CAT_PIE \ No newline at end of file diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 19abdacf3a..f106a0dfe0 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -215,3 +215,22 @@ filling_color = "#7FFF00" tastes = list("green grape" = 1) distill_reagent = "cognac" + +// Strawberry +/obj/item/seeds/strawberries + name = "pack of green grape seeds" + desc = "These seeds grow into strawberries vines." + icon_state = "seed-strawberry" + species = "strawberry" + plantname = "Strawberry Vine" + product = /obj/item/reagent_containers/food/snacks/grown/strawberries + reagents_add = list("vitamin" = 0.07, "nutriment" = 0.1, "sugar" = 0.1) + mutatelist = list() + +/obj/item/reagent_containers/food/snacks/grown/strawberries + seed = /obj/item/seeds/strawberries + name = "strawberry" + icon_state = "strawberries" + filling_color = "#7FFF00" + tastes = list("strawberries" = 1) + wine_power = 20 \ No newline at end of file diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index 17462c0626..db529e8ffb 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -290,15 +290,15 @@ var/teleport_radius = max(round(G.seed.potency / 10), 1) var/turf/T = get_turf(target) new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... - do_teleport(target, T, teleport_radius) + do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) /datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) var/teleport_radius = max(round(G.seed.potency / 10), 1) var/turf/T = get_turf(C) to_chat(C, "You slip through spacetime!") - do_teleport(C, T, teleport_radius) + do_teleport(C, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) if(prob(50)) - do_teleport(G, T, teleport_radius) + do_teleport(G, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) else new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... qdel(G) diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm deleted file mode 100755 index e6cf7d1c5c..0000000000 --- a/code/modules/jobs/job_types/captain.dm +++ /dev/null @@ -1,64 +0,0 @@ -/datum/job/captain - title = "Captain" - flag = CAPTAIN -// auto_deadmin_role_flags = DEADMIN_POSITION_HEAD|DEADMIN_POSITION_SECURITY //:eyes: - department_head = list("CentCom") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "Nanotrasen officials and Space law" - selection_color = "#ccccff" - req_admin_notify = 1 - minimal_player_age = 14 - exp_requirements = 180 - exp_type = EXP_TYPE_CREW - exp_type_department = EXP_TYPE_COMMAND - - outfit = /datum/outfit/job/captain - - access = list() //See get_access() - minimal_access = list() //See get_access() - - mind_traits = list(TRAIT_LAW_ENFORCEMENT_METABOLISM) -// mind_traits = list(TRAIT_DISK_VERIFIER) - - display_order = JOB_DISPLAY_ORDER_CAPTAIN - -/datum/job/captain/get_access() - return get_all_accesses() - -/datum/job/captain/announce(mob/living/carbon/human/H) - ..() - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!")) - -/datum/outfit/job/captain - name = "Captain" - jobtype = /datum/job/captain - - id = /obj/item/card/id/gold - belt = /obj/item/pda/captain - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/radio/headset/heads/captain/alt - gloves = /obj/item/clothing/gloves/color/captain - uniform = /obj/item/clothing/under/rank/captain - suit = /obj/item/clothing/suit/armor/vest/capcarapace - shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/caphat - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1) - - backpack = /obj/item/storage/backpack/captain - satchel = /obj/item/storage/backpack/satchel/cap - duffelbag = /obj/item/storage/backpack/duffelbag/captain - - implants = list(/obj/item/implant/mindshield) - accessory = /obj/item/clothing/accessory/medal/gold/captain - - chameleon_extras = list(/obj/item/gun/energy/e_gun, /obj/item/stamp/captain) - -/datum/outfit/job/captain/hardsuit - name = "Captain (Hardsuit)" - - mask = /obj/item/clothing/mask/gas/sechailer - suit = /obj/item/clothing/suit/space/hardsuit/captain - suit_store = /obj/item/tank/internals/oxygen diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index a1ba493d46..0abb1cfa9e 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -68,6 +68,7 @@ /obj/machinery/computer/shuttle/mining name = "mining shuttle console" desc = "Used to call and send the mining shuttle." + req_access = list(ACCESS_MINING) circuit = /obj/item/circuitboard/computer/mining_shuttle shuttleId = "mining" possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public" diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 809bc2edde..b08fadefcb 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -6,11 +6,11 @@ else gender = pick(MALE,FEMALE) underwear = random_underwear(gender) - undie_color = random_color() + undie_color = random_short_color() undershirt = random_undershirt(gender) - shirt_color = random_color() + shirt_color = random_short_color() socks = random_socks() - socks_color = random_color() + socks_color = random_short_color() skin_tone = random_skin_tone() hair_style = random_hair_style(gender) facial_hair_style = random_facial_hair_style(gender) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm index bf63ea09d7..fb40563ccf 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/undershirt.dm @@ -172,11 +172,13 @@ name = "Tank Top - Midriff" icon_state = "tank_midriff" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/tanktop_midriff_alt name = "Tank Top - Midriff Halterneck" icon_state = "tank_midriff_alt" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/tankstripe name = "Tank Top - Striped" @@ -190,100 +192,122 @@ name = "Baby-Doll" icon_state = "babydoll" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra name = "Bra" icon_state = "bra" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_alt name = "Bra - Alt" icon_state = "bra_alt" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_thin name = "Bra - Thin" icon_state = "bra_thin" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_kinky name = "Bra - Kinky Black" icon_state = "bra_kinky" + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_freedom name = "Bra - Freedom" icon_state = "bra_assblastusa" + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_commie name = "Bra - Commie" icon_state = "bra_commie" + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_beekini name = "Bra - Bee-kini" icon_state = "bra_bee-kini" + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_uk name = "Bra - UK" icon_state = "bra_uk" + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_neko name = "Bra - Neko" icon_state = "bra_neko" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/halterneck_bra name = "Bra - Halterneck" icon_state = "halterneck_bra" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/sports_bra name = "Bra, Sports" icon_state = "sports_bra" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/sports_bra_alt name = "Bra, Sports - Alt" icon_state = "sports_bra_alt" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_strapless name = "Bra, Strapless" icon_state = "bra_strapless" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/bra_strapless_alt name = "Bra, Strapless - Alt" icon_state = "bra_blue" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/striped_bra name = "Bra - Striped" icon_state = "striped_bra" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/fishnet_sleeves name = "Fishnet - sleeves" icon_state = "fishnet_sleeves" + gender = FEMALE /datum/sprite_accessory/underwear/top/fishnet_gloves name = "Fishnet - gloves" icon_state = "fishnet_gloves" + gender = FEMALE /datum/sprite_accessory/underwear/top/fishnet_base name = "Fishnet - top" icon_state = "fishnet_body" + gender = FEMALE /datum/sprite_accessory/underwear/top/swimsuit name = "Swimsuit Top" icon_state = "bra_swimming" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/swimsuit_alt name = "Swimsuit Top - Strapless" icon_state = "bra_swimming_alt" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/top/tubetop name = "Tube Top" icon_state = "tubetop" - has_color = TRUE \ No newline at end of file + has_color = TRUE + gender = FEMALE \ No newline at end of file diff --git a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm index 611547ad4e..3356804cb3 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/underwear.dm @@ -10,45 +10,55 @@ name = "Mankini" icon_state = "mankini" has_color = TRUE + gender = MALE /datum/sprite_accessory/underwear/bottom/male_kinky name = "Jockstrap" icon_state = "jockstrap" has_color = TRUE + gender = MALE /datum/sprite_accessory/underwear/bottom/briefs name = "Briefs" icon_state = "briefs" has_color = TRUE + gender = MALE /datum/sprite_accessory/underwear/bottom/boxers name = "Boxers" icon_state = "boxers" has_color = TRUE + gender = MALE /datum/sprite_accessory/underwear/bottom/male_bee name = "Boxers - Bee" icon_state = "bee_shorts" + gender = MALE /datum/sprite_accessory/underwear/bottom/male_hearts name = "Boxers - Heart" icon_state = "boxers_heart" + gender = MALE /datum/sprite_accessory/underwear/bottom/male_stripe name = "Boxers - Striped" icon_state = "boxers_striped" + gender = MALE /datum/sprite_accessory/underwear/bottom/male_commie name = "Boxers - Striped Communist" icon_state = "boxers_commie" + gender = MALE /datum/sprite_accessory/underwear/bottom/male_usastripe name = "Boxers - Striped Freedom" icon_state = "boxers_assblastusa" + gender = MALE /datum/sprite_accessory/underwear/bottom/male_uk name = "Boxers - Striped UK" icon_state = "boxers_uk" + gender = MALE /datum/sprite_accessory/underwear/bottom/boxer_briefs name = "Boxer Briefs" @@ -59,60 +69,73 @@ name = "Panties" icon_state = "panties" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_alt name = "Panties - Alt" icon_state = "panties_alt" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/fishnet_lower name = "Panties - Fishnet" icon_state = "fishnet_lower" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/female_beekini name = "Panties - Bee-kini" icon_state = "panties_bee-kini" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/female_commie name = "Panties - Commie" icon_state = "panties_commie" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/female_usastripe name = "Panties - Freedom" icon_state = "panties_assblastusa" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/female_kinky name = "Panties - Kinky Black" icon_state = "panties_kinky" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_uk name = "Panties - UK" icon_state = "panties_uk" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_neko name = "Panties - Neko" icon_state = "panties_neko" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_slim name = "Panties - Slim" icon_state = "panties_slim" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/striped_panties name = "Panties - Striped" icon_state = "striped_panties" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_swimsuit name = "Panties - Swimsuit" icon_state = "panties_swimming" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/panties_thin name = "Panties - Thin" icon_state = "panties_thin" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/longjon name = "Long John Bottoms" @@ -122,23 +145,28 @@ /datum/sprite_accessory/underwear/bottom/swimsuit_red name = "Swimsuit, One Piece - Red" icon_state = "swimming_red" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/swimsuit name = "Swimsuit, One Piece - Black" icon_state = "swimming_black" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/swimsuit_blue name = "Swimsuit, One Piece - Striped Blue" icon_state = "swimming_blue" + gender = FEMALE /datum/sprite_accessory/underwear/bottom/thong name = "Thong" icon_state = "thong" has_color = TRUE + gender = FEMALE /datum/sprite_accessory/underwear/bottom/thong_babydoll name = "Thong - Alt" icon_state = "thong_babydoll" has_color = TRUE + gender = FEMALE diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index d521ef179f..7eeab05466 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -4,14 +4,14 @@ return var/message_mode = get_message_mode(message) - if(client && (message_mode == "admin" || message_mode == "deadmin")) + if(client && (message_mode == MODE_ADMIN || message_mode == MODE_DEADMIN)) message = copytext(message, 3) if(findtext(message, " ", 1, 2)) message = copytext(message, 2) - if(message_mode == "admin") + if(message_mode == MODE_ADMIN) client.cmd_admin_say(message) - else if(message_mode == "deadmin") + else if(message_mode == MODE_DEADMIN) client.dsay(message) return diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index e1a7752e9d..d2788075e2 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -59,15 +59,19 @@ /mob/living/carbon/alien/humanoid/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) - var/cuff_icon = "aliencuff" - var/dmi_file = 'icons/mob/alien.dmi' - - if(mob_size == MOB_SIZE_LARGE) - cuff_icon = "aliencuff_[caste]" - dmi_file = 'icons/mob/alienqueen.dmi' if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) + var/cuff_icon = handcuffed.item_state + var/dmi_file = 'icons/mob/alien.dmi' + + if(mob_size == MOB_SIZE_LARGE) + cuff_icon += "_[caste]" + dmi_file = 'icons/mob/alienqueen.dmi' + + var/mutable_appearance/cuffs = mutable_appearance(dmi_file, cuff_icon, -HANDCUFF_LAYER) + cuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = cuffs apply_overlay(HANDCUFF_LAYER) //Royals have bigger sprites, so inhand things must be handled differently. diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index b4739f943e..1574305a83 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -63,7 +63,7 @@ -/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(gib_on_success=TRUE) +/obj/item/organ/body_egg/alien_embryo/proc/AttemptGrow(var/kill_on_sucess=TRUE) if(!owner || bursting) return @@ -102,10 +102,12 @@ new_xeno.notransform = 0 new_xeno.invisibility = 0 - if(gib_on_success) - new_xeno.visible_message("[new_xeno] bursts out of [owner] in a shower of gore!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") - owner.gib(TRUE) - else + if(kill_on_sucess) //ITS TOO LATE + new_xeno.visible_message("[new_xeno] bursts out of [owner]!", "You exit [owner], your previous host.", "You hear organic matter ripping and tearing!") + owner.apply_damage(rand(100,300),BRUTE,zone,FALSE) //Random high damage to torso so health sensors don't metagame. + owner.spill_organs(TRUE,FALSE,TRUE) //Lets still make the death gruesome and impossible to just simply defib someone. + owner.death(FALSE) //Just in case some freak occurance occurs where you somehow survive all your organs being removed from you and the 100-300 brute damage. + else //When it is removed via surgery at a late stage, rather than forced. new_xeno.visible_message("[new_xeno] wriggles out of [owner]!", "You exit [owner], your previous host.") owner.adjustBruteLoss(40) owner.cut_overlay(overlay) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index e9114d5298..a067be798f 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -11,8 +11,8 @@ var/silent = FALSE //Can't talk. Value goes down every life proc. //NOTE TO FUTURE CODERS: DO NOT INITIALIZE NUMERICAL VARS AS NULL OR I WILL MURDER YOU. var/dreaming = 0 //How many dream images we have left to send - var/obj/item/handcuffed = null //Whether or not the mob is handcuffed - var/obj/item/legcuffed = null //Same as handcuffs but for legs. Bear traps use this. + var/obj/item/restraints/handcuffed //Whether or not the mob is handcuffed + var/obj/item/restraints/legcuffed //Same as handcuffs but for legs. Bear traps use this. var/disgust = 0 diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 67596a828a..69926f46f9 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -623,6 +623,7 @@ facial_hair_style = "Shaved" hair_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") underwear = "Nude" + undershirt = "Nude" update_body() update_hair() update_genitals() diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 56be62c75e..eee425063d 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -53,14 +53,14 @@ if(ears) var/obj/item/radio/headset/dongle = ears if(!istype(dongle)) - return 0 + return FALSE if(dongle.translate_binary) - return 1 + return TRUE /mob/living/carbon/human/radio(message, message_mode, list/spans, language) . = ..() - if(. != 0) - return . + if(.) + return switch(message_mode) if(MODE_HEADSET) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 076b8efb66..9abfc5826f 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -500,7 +500,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(B) var/mutable_appearance/MA = mutable_appearance(B.icon, B.icon_state, -BODY_LAYER) if(UNDIE_COLORABLE(B)) - MA.color = H.undie_color + MA.color = "#[H.undie_color]" standing += MA if(H.undershirt) @@ -516,7 +516,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) else MA = mutable_appearance(T.icon, T.icon_state, -BODY_LAYER) if(UNDIE_COLORABLE(T)) - MA.color = H.shirt_color + MA.color = "#[H.shirt_color]" standing += MA if(H.socks && H.get_num_legs(FALSE) >= 2) @@ -529,7 +529,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : "" var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER) if(UNDIE_COLORABLE(S)) - MA.color = H.socks_color + MA.color = "[H.socks_color]" standing += MA if(standing.len) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 2c663b4094..88dd59749c 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -420,7 +420,7 @@ H.visible_message("[H] teleports!", "You destabilize and teleport!") new /obj/effect/particle_effect/sparks(get_turf(H)) playsound(get_turf(H), "sparks", 50, 1) - do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg') + do_teleport(H, get_turf(H), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) last_teleport = world.time /datum/species/golem/bluespace/spec_hitby(atom/movable/AM, mob/living/carbon/human/H) @@ -486,7 +486,7 @@ spark_system.set_up(10, 0, src) spark_system.attach(H) spark_system.start() - do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg') + do_teleport(H, get_turf(H), 12, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) last_teleport = world.time UpdateButtonIcon() //action icon looks unavailable sleep(cooldown + 5) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index bb1b7ebe0e..72ff7e7a60 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -288,8 +288,10 @@ There are several things that need to be remembered: S.alternate_worn_icon = 'modular_citadel/icons/mob/digishoes.dmi' else S.alternate_worn_icon = null - - overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi')) + var/t_state = shoes.item_state + if (!t_state) + t_state = shoes.icon_state + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = t_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi')) var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] if(OFFSET_SHOES in dna.species.offset_features) shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] @@ -471,14 +473,6 @@ There are several things that need to be remembered: overlays_standing[BACK_LAYER] = back_overlay apply_overlay(BACK_LAYER) -/mob/living/carbon/human/update_inv_legcuffed() - remove_overlay(LEGCUFF_LAYER) - clear_alert("legcuffed") - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) - /proc/wear_female_version(t_color, icon, layer, type) var/index = t_color var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 6311776596..e9bb9fc207 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -43,12 +43,15 @@ /mob/living/carbon/monkey/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") if(legcuffed) - var/mutable_appearance/legcuff_overlay = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - legcuff_overlay.pixel_y = 8 - overlays_standing[LEGCUFF_LAYER] = legcuff_overlay - apply_overlay(LEGCUFF_LAYER) + var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) + legcuffs.color = handcuffed.color + legcuffs.pixel_y = 8 + overlays_standing[HANDCUFF_LAYER] = legcuffs + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) //monkey HUD updates for items in our inventory diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 87bf662c4f..5662f25993 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -176,9 +176,22 @@ /mob/living/carbon/update_inv_handcuffed() remove_overlay(HANDCUFF_LAYER) if(handcuffed) - overlays_standing[HANDCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "handcuff1", -HANDCUFF_LAYER) + var/mutable_appearance/cuffs = mutable_appearance('icons/mob/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER) + cuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = cuffs apply_overlay(HANDCUFF_LAYER) +/mob/living/carbon/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") + if(legcuffed) + var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) + legcuffs.color = legcuffed.color + + overlays_standing[HANDCUFF_LAYER] = legcuffs + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) //mob HUD updates for items in our inventory diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 155ff15d5b..bfd27c11cc 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -2,61 +2,61 @@ GLOBAL_LIST_INIT(department_radio_prefixes, list(":", ".")) GLOBAL_LIST_INIT(department_radio_keys, list( // Location - "r" = "right hand", - "l" = "left hand", - "i" = "intercom", + MODE_KEY_R_HAND = MODE_R_HAND, + MODE_KEY_L_HAND = MODE_L_HAND, + MODE_KEY_INTERCOM = MODE_INTERCOM, // Department - "h" = "department", - "c" = "Command", - "n" = "Science", - "m" = "Medical", - "e" = "Engineering", - "s" = "Security", - "u" = "Supply", - "v" = "Service", + MODE_KEY_DEPARTMENT = MODE_DEPARTMENT, + RADIO_KEY_COMMAND = RADIO_CHANNEL_COMMAND, + RADIO_KEY_SCIENCE = RADIO_CHANNEL_SCIENCE, + RADIO_KEY_MEDICAL = RADIO_CHANNEL_MEDICAL, + RADIO_KEY_ENGINEERING = RADIO_CHANNEL_ENGINEERING, + RADIO_KEY_SECURITY = RADIO_CHANNEL_SECURITY, + RADIO_KEY_SUPPLY = RADIO_CHANNEL_SUPPLY, + RADIO_KEY_SERVICE = RADIO_CHANNEL_SERVICE, // Faction - "t" = "Syndicate", - "y" = "CentCom", + RADIO_KEY_SYNDICATE = RADIO_CHANNEL_SYNDICATE, + RADIO_KEY_CENTCOM = RADIO_CHANNEL_CENTCOM, // Admin - "p" = "admin", - "d" = "deadmin", + MODE_KEY_ADMIN = MODE_ADMIN, + MODE_KEY_DEADMIN = MODE_DEADMIN, // Misc - "o" = "AI Private", // AI Upload channel - "x" = "cords", // vocal cords, used by Voice of God + RADIO_KEY_AI_PRIVATE = RADIO_CHANNEL_AI_PRIVATE, // AI Upload channel + MODE_KEY_VOCALCORDS = MODE_VOCALCORDS, // vocal cords, used by Voice of God //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. // Location - "ê" = "right hand", - "ä" = "left hand", - "ø" = "intercom", + "ê" = MODE_R_HAND, + "ä" = MODE_L_HAND, + "ø" = MODE_INTERCOM, // Department - "ð" = "department", - "ñ" = "Command", - "ò" = "Science", - "ü" = "Medical", - "ó" = "Engineering", - "û" = "Security", - "ã" = "Supply", - "ì" = "Service", + "ð" = MODE_DEPARTMENT, + "ñ" = RADIO_CHANNEL_COMMAND, + "ò" = RADIO_CHANNEL_SCIENCE, + "ü" = RADIO_CHANNEL_MEDICAL, + "ó" = RADIO_CHANNEL_ENGINEERING, + "û" = RADIO_CHANNEL_SECURITY, + "ã" = RADIO_CHANNEL_SUPPLY, + "ì" = RADIO_CHANNEL_SERVICE, // Faction - "å" = "Syndicate", - "í" = "CentCom", + "å" = RADIO_CHANNEL_SYNDICATE, + "í" = RADIO_CHANNEL_CENTCOM, // Admin - "ç" = "admin", - "â" = "deadmin", + "ç" = MODE_ADMIN, + "â" = MODE_ADMIN, // Misc - "ù" = "AI Private", - "÷" = "cords" + "ù" = RADIO_CHANNEL_AI_PRIVATE, + "÷" = MODE_VOCALCORDS )) /mob/living/proc/Ellipsis(original_msg, chance = 50, keep_words) @@ -105,12 +105,12 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(findtext(message, " ", 1, 2)) message = copytext(message, 2) - if(message_mode == "admin") + if(message_mode == MODE_ADMIN) if(client) client.cmd_admin_say(message) return - if(message_mode == "deadmin") + if(message_mode == MODE_DEADMIN) if(client) client.dsay(message) return diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ce99e301c5..91515e4511 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -61,7 +61,7 @@ var/mob/living/silicon/ai/calling_ai //Links a bot to the AI calling it. var/obj/item/radio/Radio //The bot's radio, for speaking to people. var/radio_key = null //which channels can the bot listen to - var/radio_channel = "Common" //The bot's default radio channel + var/radio_channel = RADIO_CHANNEL_COMMON //The bot's default radio channel var/auto_patrol = 0// set to make bot automatically patrol var/turf/patrol_target // this is turf to navigate to (location of beacon) var/turf/summon_target // The turf of a user summoning a bot. diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index bc8dd0c3ab..e09eb13886 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -9,7 +9,7 @@ health = 25 maxHealth = 25 radio_key = /obj/item/encryptionkey/headset_service - radio_channel = "Service" //Service + radio_channel = RADIO_CHANNEL_SERVICE //Service bot_type = CLEAN_BOT model = "Cleanbot" bot_core_type = /obj/machinery/bot_core/cleanbot @@ -155,7 +155,7 @@ else shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way. path = list() - + if(!path || path.len == 0) //No path, need a new one //Try to produce a path to the target, and ignore airlocks to which it has access. path = get_path_to(src, target.loc, /turf/proc/Distance_cardinal, 0, 30, id=access_card) diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 581711d271..0781c2907a 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -13,7 +13,7 @@ mob_size = MOB_SIZE_LARGE radio_key = /obj/item/encryptionkey/headset_sec - radio_channel = "Security" + radio_channel = RADIO_CHANNEL_SECURITY bot_type = SEC_BOT model = "ED-209" bot_core = /obj/machinery/bot_core/secbot diff --git a/code/modules/mob/living/simple_animal/bot/firebot.dm b/code/modules/mob/living/simple_animal/bot/firebot.dm index d8c3bca72a..1c2a6393ae 100644 --- a/code/modules/mob/living/simple_animal/bot/firebot.dm +++ b/code/modules/mob/living/simple_animal/bot/firebot.dm @@ -16,7 +16,7 @@ spacewalk = TRUE radio_key = /obj/item/encryptionkey/headset_eng - radio_channel = "Engineering" + radio_channel = RADIO_CHANNEL_ENGINEERING bot_type = FIRE_BOT model = "Firebot" bot_core = /obj/machinery/bot_core/firebot diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 7e5cfe2110..4709680ad9 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -11,7 +11,7 @@ spacewalk = TRUE radio_key = /obj/item/encryptionkey/headset_eng - radio_channel = "Engineering" + radio_channel = RADIO_CHANNEL_ENGINEERING bot_type = FLOOR_BOT model = "Floorbot" bot_core = /obj/machinery/bot_core/floorbot diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm index d586cc694b..e069b46e9d 100644 --- a/code/modules/mob/living/simple_animal/bot/honkbot.dm +++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm @@ -11,7 +11,6 @@ pass_flags = PASSMOB radio_key = /obj/item/encryptionkey/headset_service //doesn't have security key - radio_channel = "Service" //Doesn't even use the radio anyway. bot_type = HONK_BOT model = "Honkbot" bot_core_type = /obj/machinery/bot_core/honkbot diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index 5a21d33d5a..5eaaaea175 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -17,7 +17,7 @@ status_flags = (CANPUSH | CANSTUN) radio_key = /obj/item/encryptionkey/headset_med - radio_channel = "Medical" + radio_channel = RADIO_CHANNEL_MEDICAL bot_type = MED_BOT model = "Medibot" diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index c45d435253..2efdf09f24 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -23,7 +23,7 @@ mob_size = MOB_SIZE_LARGE radio_key = /obj/item/encryptionkey/headset_cargo - radio_channel = "Supply" + radio_channel = RADIO_CHANNEL_SUPPLY bot_type = MULE_BOT model = "MULE" diff --git a/code/modules/mob/living/simple_animal/bot/secbot.dm b/code/modules/mob/living/simple_animal/bot/secbot.dm index fca1f66546..b6ef509d54 100644 --- a/code/modules/mob/living/simple_animal/bot/secbot.dm +++ b/code/modules/mob/living/simple_animal/bot/secbot.dm @@ -11,7 +11,7 @@ pass_flags = PASSMOB radio_key = /obj/item/encryptionkey/secbot //AI Priv + Security - radio_channel = "Security" //Security channel + radio_channel = RADIO_CHANNEL_SECURITY //Security channel bot_type = SEC_BOT model = "Securitron" bot_core_type = /obj/machinery/bot_core/secbot @@ -61,7 +61,7 @@ /mob/living/simple_animal/bot/secbot/pingsky name = "Officer Pingsky" desc = "It's Officer Pingsky! Delegated to satellite guard duty for harbouring anti-human sentiment." - radio_channel = "AI Private" + radio_channel = RADIO_CHANNEL_AI_PRIVATE /mob/living/simple_animal/bot/secbot/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm index 8fb1de18df..ff2f453207 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/explosive.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/explosive.dm @@ -22,7 +22,7 @@ var/mob/living/M = target if(!M.anchored && M != summoner && !hasmatchingsummoner(M)) new /obj/effect/temp_visual/guardian/phase/out(get_turf(M)) - do_teleport(M, M, 10) + do_teleport(M, M, 10, channel = TELEPORT_CHANNEL_BLUESPACE) for(var/mob/living/L in range(1, M)) if(hasmatchingsummoner(L)) //if the summoner matches don't hurt them continue diff --git a/code/modules/mob/living/simple_animal/guardian/types/support.dm b/code/modules/mob/living/simple_animal/guardian/types/support.dm index 8ef70e439f..794683e69f 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/support.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/support.dm @@ -142,5 +142,5 @@ L.flash_act() A.visible_message("[A] disappears in a flash of light!", \ "Your vision is obscured by a flash of light!") - do_teleport(A, beacon, 0) + do_teleport(A, beacon, 0, channel = TELEPORT_CHANNEL_BLUESPACE) new /obj/effect/temp_visual/guardian/phase(get_turf(A)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 7cf8defc0f..b529d826c9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -747,6 +747,12 @@ Difficulty: Very Hard /obj/structure/closet/stasis/ex_act() return +/obj/structure/closet/stasis/handle_lock_addition() + return + +/obj/structure/closet/stasis/handle_lock_removal() + return + /obj/effect/proc_holder/spell/targeted/exit_possession name = "Exit Possession" desc = "Exits the body you are possessing." diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index fc53483eda..a50af21d47 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -241,23 +241,23 @@ clearlist(available_channels) for(var/ch in headset_to_add.channels) switch(ch) - if("Engineering") - available_channels.Add(":e") - if("Command") - available_channels.Add(":c") - if("Security") - available_channels.Add(":s") - if("Science") - available_channels.Add(":n") - if("Medical") - available_channels.Add(":m") - if("Supply") - available_channels.Add(":u") - if("Service") - available_channels.Add(":v") + if(RADIO_CHANNEL_ENGINEERING) + available_channels.Add(RADIO_TOKEN_ENGINEERING) + if(RADIO_CHANNEL_COMMAND) + available_channels.Add(RADIO_TOKEN_COMMAND) + if(RADIO_CHANNEL_SECURITY) + available_channels.Add(RADIO_TOKEN_SECURITY) + if(RADIO_CHANNEL_SCIENCE) + available_channels.Add(RADIO_TOKEN_SCIENCE) + if(RADIO_CHANNEL_MEDICAL) + available_channels.Add(RADIO_TOKEN_MEDICAL) + if(RADIO_CHANNEL_SUPPLY) + available_channels.Add(RADIO_TOKEN_SUPPLY) + if(RADIO_CHANNEL_SERVICE) + available_channels.Add(RADIO_TOKEN_SERVICE) if(headset_to_add.translate_binary) - available_channels.Add(":b") + available_channels.Add(MODE_TOKEN_BINARY) else return ..() diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm index 4d808a11a9..41ece5ed06 100644 --- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm +++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm @@ -105,6 +105,9 @@ var/mob/living/carbon/human/user = usr if(!istype(user) || user.stat) return + if(!vore_active) + return + if(vore_selected.digest_mode == DM_HOLD) var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel") if(confirm == "Enable") diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f7d10bfb7b..84f0df3cc7 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -116,7 +116,7 @@ // vision_distance (optional) define how many tiles away the message can be seen. // ignored_mob (optional) doesn't show any message to a given mob if TRUE. -/atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mob) +/atom/proc/visible_message(message, self_message, blind_message, vision_distance, ignored_mob, no_ghosts = FALSE) var/turf/T = get_turf(src) if(!T) return @@ -129,6 +129,8 @@ if(M == ignored_mob) continue var/msg = message + if(isobserver(M) && no_ghosts) + continue if(M == src) //the src always see the main message or self message if(self_message) msg = self_message diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm index 1c3fbd8147..94be922fdf 100644 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm @@ -8,33 +8,37 @@ Contents: /obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth() - var/mob/living/carbon/human/U = affecting - if(!U) + if(!affecting) return if(stealth) cancel_stealth() else if(cell.charge <= 0) - to_chat(U, "You don't have enough power to enable Stealth!") + to_chat(affecting, "You don't have enough power to enable Stealth!") return stealth = !stealth - animate(U, alpha = 50,time = 15) - U.visible_message("[U.name] vanishes into thin air!", \ + animate(affecting, alpha = 10,time = 15) + affecting.visible_message("[affecting.name] vanishes into thin air!", \ "You are now mostly invisible to normal detection.") + RegisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY), .proc/reduce_stealth) + RegisterSignal(affecting, COMSIG_MOVABLE_BUMP, .proc/bumping_stealth) +/obj/item/clothing/suit/space/space_ninja/proc/reduce_stealth() + affecting.alpha = min(affecting.alpha + 30, 80) + +/obj/item/clothing/suit/space/space_ninja/proc/bumping_stealth(datum/source, atom/A) + if(isliving(A)) + affecting.alpha = min(affecting.alpha + 15, 80) /obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() - var/mob/living/carbon/human/U = affecting - if(!U) - return 0 - if(stealth) - stealth = !stealth - animate(U, alpha = 255, time = 15) - U.visible_message("[U.name] appears from thin air!", \ - "You are now visible.") - return 1 - return 0 - + if(!affecting || !stealth) + return FALSE + stealth = !stealth + UnregisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP)) + animate(affecting, alpha = 255, time = 15) + affecting.visible_message("[affecting.name] appears from thin air!", \ + "You are now visible.") + return TRUE /obj/item/clothing/suit/space/space_ninja/proc/stealth() if(!s_busy) diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 1b935a00de..115b14b63b 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -1,4 +1,3 @@ - /obj/item/clothing/shoes/space_ninja name = "ninja shoes" desc = "A pair of running shoes. Excellent for running and even better for smashing skulls." @@ -13,3 +12,12 @@ min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT + +/obj/item/clothing/shoes/space_ninja/equipped(mob/user, slot) + . = ..() + if(slot == SLOT_SHOES) + ADD_TRAIT(user, TRAIT_SILENT_STEP, "ninja_shoes_[REF(src)]") + +/obj/item/clothing/shoes/space_ninja/dropped(mob/user) + . = ..() + REMOVE_TRAIT(user, TRAIT_SILENT_STEP, "ninja_shoes_[REF(src)]") diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index b98ef764c0..ac1ef3b96a 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -149,12 +149,11 @@ Contents: /obj/item/clothing/suit/space/space_ninja/examine(mob/user) ..() - if(s_initialized) - if(user == affecting) - to_chat(user, "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].") - to_chat(user, "The CLOAK-tech device is [stealth?"active":"inactive"].") - to_chat(user, "There are [s_bombs] smoke bomb\s remaining.") - to_chat(user, "There are [a_boost] adrenaline booster\s remaining.") + if(s_initialized && user == affecting) + to_chat(user, "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n\ + The CLOAK-tech device is [stealth?"active":"inactive"].\n\ + There are [s_bombs] smoke bomb\s remaining.\n\ + There are [a_boost] adrenaline booster\s remaining.") /obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/initialize_ninja_suit)) diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index 4b159557bc..3d80282fe7 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -48,7 +48,7 @@ /obj/item/clothing/suit/space/space_ninja/proc/ninitialize_seven(delay, mob/living/carbon/human/U) to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].") s_initialized = TRUE - ntick() + START_PROCESSING(SSprocessing, src) s_busy = FALSE @@ -91,4 +91,5 @@ unlock_suit() U.regenerate_icons() s_initialized = FALSE + STOP_PROCESSING(SSprocessing, src) s_busy = FALSE diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm index 4a89a59f75..850fb837b4 100644 --- a/code/modules/ninja/suit/suit_process.dm +++ b/code/modules/ninja/suit/suit_process.dm @@ -1,20 +1,17 @@ -/obj/item/clothing/suit/space/space_ninja/proc/ntick(mob/living/carbon/human/U = affecting) - //Runs in the background while the suit is initialized. - //Requires charge or stealth to process. - spawn while(s_initialized) - if(!affecting) - terminate()//Kills the suit and attached objects. +/obj/item/clothing/suit/space/space_ninja/process() + if(!affecting || !s_initialized) + return PROCESS_KILL - else if(cell.charge > 0) - if(s_coold) - s_coold--//Checks for ability s_cooldown first. + if(cell.charge > 0) + if(s_coold) + s_coold--//Checks for ability s_cooldown first. - cell.charge -= s_cost//s_cost is the default energy cost each ntick, usually 5. - if(stealth)//If stealth is active. - cell.charge -= s_acost + cell.charge -= s_cost//s_cost is the default energy cost each tick, usually 5. + if(stealth)//If stealth is active. + cell.charge -= s_acost + affecting.alpha = max(affecting.alpha - 10, 10) - else - cell.charge = 0 + else + cell.charge = 0 + if(stealth) cancel_stealth() - - sleep(10)//Checks every second. diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index bb6a144c93..856dfed78b 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -212,14 +212,41 @@ ) /obj/item/gun/ballistic/shotgun/automatic/combat/compact - name = "compact combat shotgun" - desc = "A compact version of the semi automatic combat shotgun. For close encounters." + name = "warden's combat shotgun" + desc = "A modified version of the semi automatic combat shotgun with a collapsible stock. For close encounters." icon_state = "cshotgunc" - mag_type = /obj/item/ammo_box/magazine/internal/shot/com/compact + mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_NORMAL - unique_reskin = list("Tatical" = "cshotgunc", - "Slick" = "cshotgunc_slick" - ) + var/stock = FALSE + recoil = 5 + spread = 2 + +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/AltClick(mob/living/user) + if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + toggle_stock(user) + . = ..() + +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/examine(mob/user) + ..() + to_chat(user, "Alt-click to toggle the stock.") + +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/proc/toggle_stock(mob/living/user) + stock = !stock + if(stock) + w_class = WEIGHT_CLASS_HUGE + to_chat(user, "You unfold the stock.") + recoil = 1 + spread = 0 + else + w_class = WEIGHT_CLASS_NORMAL + to_chat(user, "You fold the stock.") + recoil = 5 + spread = 2 + update_icon() + +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon() + icon_state = "[current_skin ? unique_reskin[current_skin] : "cshotgun"][stock ? "" : "c"]" //Dual Feed Shotgun @@ -235,6 +262,7 @@ /obj/item/gun/ballistic/shotgun/automatic/dual_tube/examine(mob/user) ..() to_chat(user, "Alt-click to pump it.") + . = ..() /obj/item/gun/ballistic/shotgun/automatic/dual_tube/Initialize() . = ..() diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index e3724fdf31..42033d8c88 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -131,7 +131,7 @@ no_den_usage = 1 /obj/item/gun/magic/wand/teleport/zap_self(mob/living/user) - if(do_teleport(user, user, 10)) + if(do_teleport(user, user, 10, channel = TELEPORT_CHANNEL_MAGIC)) var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(3, user.loc) smoke.start() diff --git a/code/modules/projectiles/projectile/energy/net_snare.dm b/code/modules/projectiles/projectile/energy/net_snare.dm index f5d0607341..c8333a811c 100644 --- a/code/modules/projectiles/projectile/energy/net_snare.dm +++ b/code/modules/projectiles/projectile/energy/net_snare.dm @@ -42,10 +42,10 @@ /obj/effect/nettingportal/proc/pop(teletarget) if(teletarget) for(var/mob/living/L in get_turf(src)) - do_teleport(L, teletarget, 2)//teleport what's in the tile to the beacon + do_teleport(L, teletarget, 2, channel = TELEPORT_CHANNEL_BLUESPACE)//teleport what's in the tile to the beacon else for(var/mob/living/L in get_turf(src)) - do_teleport(L, L, 15) //Otherwise it just warps you off somewhere. + do_teleport(L, L, 15, channel = TELEPORT_CHANNEL_BLUESPACE) //Otherwise it just warps you off somewhere. qdel(src) diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index dee88f176f..5b84608fad 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -67,7 +67,7 @@ teleloc = target.loc for(var/atom/movable/stuff in teleloc) if(!stuff.anchored && stuff.loc) - if(do_teleport(stuff, stuff, 10)) + if(do_teleport(stuff, stuff, 10, channel = TELEPORT_CHANNEL_MAGIC)) teleammount++ var/datum/effect_system/smoke_spread/smoke = new smoke.set_up(max(round(4 - teleammount),0), stuff.loc) //Smoke drops off if a lot of stuff is moved for the sake of sanity diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 211fddca26..a46a4d61e4 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -2076,7 +2076,7 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M) if(M.drunkenness > 40) if(stored_teleports) - do_teleport(M, get_turf(M), rand(1,3)) + do_teleport(M, get_turf(M), rand(1,3), channel = TELEPORT_CHANNEL_WORMHOLE) stored_teleports-- if(prob(10)) stored_teleports += rand(2,6) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 840a57055c..db927411c0 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -346,7 +346,7 @@ //We only get 30u to start with... /datum/reagent/fuel/holyoil/reaction_obj(obj/O, reac_volume) - . = ..() + . = ..() if(istype(O, /obj/item/stack/sheet/metal)) var/obj/item/stack/sheet/metal/M = O reac_volume = min(reac_volume, M.amount) @@ -989,7 +989,7 @@ /datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) - do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg') //4 tiles per crystal + do_teleport(M, get_turf(M), (reac_volume / 5), asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //4 tiles per crystal ..() /datum/reagent/bluespace/on_mob_life(mob/living/carbon/M) @@ -1001,7 +1001,7 @@ ..() /mob/living/proc/bluespace_shuffle() - do_teleport(src, get_turf(src), 5, asoundin = 'sound/effects/phasein.ogg') + do_teleport(src, get_turf(src), 5, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) /datum/reagent/aluminium name = "Aluminium" diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 59df0f6e85..d27c876f88 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -460,6 +460,16 @@ category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING +/datum/design/quantum_keycard + name = "Quantum Keycard" + desc = "Allows for the construction of a quantum keycard." + id = "quantum_keycard" + build_type = PROTOLATHE + materials = list(MAT_GLASS = 500, MAT_METAL = 500, MAT_SILVER = 500, MAT_BLUESPACE = 1000) + build_path = /obj/item/quantum_keycard + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING + /datum/design/anomaly_neutralizer name = "Anomaly Neutralizer" desc = "An advanced tool capable of instantly neutralizing anomalies, designed to capture the fleeting aberrations created by the engine." diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index ebd386513e..e56350a280 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -651,7 +651,7 @@ if(loc == user && !is_centcom_level(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you! visible_message("[src] twists and bends, relocating itself!") throwSmoke(userturf) - do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg') + do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) throwSmoke(get_turf(user)) warn_admins(user, "Teleport", 0) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index c6487c92f0..c70ee8a16b 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -221,13 +221,22 @@ //research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) //export_price = 5000 +/datum/techweb_node/computer_board_gaming + id = "computer_board_gaming" + display_name = "Games and Toys" + description = "For the slackers on the station." + prereq_ids = list("comptech") + design_ids = list("arcade_battle", "arcade_orion", "slotmachine", "autoylathe") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1000) + export_price = 5000 + /////////////////////////Bluespace tech///////////////////////// /datum/techweb_node/bluespace_basic //Bluespace-memery id = "bluespace_basic" display_name = "Basic Bluespace Theory" description = "Basic studies into the mysterious alternate dimension known as bluespace." prereq_ids = list("base", "datatheory") - design_ids = list("beacon", "xenobioconsole", "telesci_gps") + design_ids = list("beacon", "xenobioconsole", "telesci_gps", "xenobio_monkeys") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -236,7 +245,7 @@ display_name = "Applied Bluespace Research" description = "Using bluespace to make things faster and better." prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart") + design_ids = list("bs_rped","biobag_holding","minerbag_holding", "bluespacebeaker", "bluespacesyringe", "phasic_scanning", "bluespacesmartdart", "xenobio_slimebasic") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) export_price = 5000 @@ -245,7 +254,7 @@ display_name = "Advanced Bluespace Research" description = "Deeper understanding of how the Bluespace dimension works" prereq_ids = list("practical_bluespace", "high_efficiency") - design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal") + design_ids = list("bluespace_matter_bin", "femto_mani", "triphasic_scanning", "bluespace_crystal", "xenobio_slimeadv") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) export_price = 5000 @@ -278,10 +287,10 @@ /datum/techweb_node/bluespace_warping id = "bluespace_warping" - display_name = "Bluespace Teleportation tech" - description = "Traversing through space at an instant with Bluespace." + display_name = "Bluespace Travel" + description = "Application of Bluespace for static teleportation technology." prereq_ids = list("adv_power", "adv_bluespace") - design_ids = list( "tele_station", "tele_hub", "quantumpad", "launchpad", "launchpad_console", "teleconsole", "roastingstick") + design_ids = list("tele_station", "tele_hub", "quantumpad", "quantum_keycard", "launchpad", "launchpad_console", "teleconsole", "roastingstick") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -672,7 +681,7 @@ display_name = "Ballistic Weaponry" description = "This isn't research.. This is reverse-engineering!" prereq_ids = list("weaponry") - design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic") + design_ids = list("mag_oldsmg", "mag_oldsmg_ap", "mag_oldsmg_ic", "mag_oldsmg_rubber", "mag_oldsmg_tx") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2750) export_price = 5000 @@ -1049,6 +1058,15 @@ continue boost_item_paths |= UI.item //allows deconning to unlock. +/datum/techweb_node/advanced_illegl_ballistics + id = "advanced_illegal_ballistics" + display_name = "Advanced Illegal Ballistics" + description = "Advanced Ballistic for Illegal weaponds." + design_ids = list("10mm","10mmap","10mminc","10mmhp","pistolm9mm","m45","bolt_clip") + prereq_ids = list("ballistic_weapons","syndicate_basic","explosive_weapons") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 25000) //This gives sec lethal mags/clips for guns form traitors or space. + export_price = 7000 + //Helpers for debugging/balancing the techweb in its entirety! /proc/total_techweb_exports() var/list/datum/techweb_node/processing = list() diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index ad5bfa27dc..b9e7122d07 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -680,7 +680,7 @@ datum/status_effect/stabilized/blue/on_remove() if(!F) F = get_turf(owner) range = 50 - if(do_teleport(owner, F, range)) + if(do_teleport(owner, F, range, channel = TELEPORT_CHANNEL_BLUESPACE)) to_chat(owner, "[linked_extract] will take some time to re-align you on the bluespace axis.") do_sparks(5,FALSE,owner) owner.apply_status_effect(/datum/status_effect/bluespacestabilization) diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index 38362e6d64..363331e12d 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -144,7 +144,7 @@ Burning extracts: user.visible_message("[src] sparks, and lets off a shockwave of bluespace energy!") for(var/mob/living/L in range(1, get_turf(user))) if(L != user) - do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg') //Somewhere between the effectiveness of fake and real BS crystal + do_teleport(L, get_turf(L), 6, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //Somewhere between the effectiveness of fake and real BS crystal new /obj/effect/particle_effect/sparks(get_turf(L)) playsound(get_turf(L), "sparks", 50, 1) ..() diff --git a/code/modules/research/xenobiology/crossbreeding/consuming.dm b/code/modules/research/xenobiology/crossbreeding/consuming.dm index b51a7b2553..0b2d60da8c 100644 --- a/code/modules/research/xenobiology/crossbreeding/consuming.dm +++ b/code/modules/research/xenobiology/crossbreeding/consuming.dm @@ -232,7 +232,7 @@ Consuming extracts: L.Cut(I,I+1) if(target) - do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg') + do_teleport(M, target, 0, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) new /obj/effect/particle_effect/sparks(get_turf(M)) playsound(get_turf(M), "sparks", 50, 1) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index ce36be8e42..7acbaaac1c 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -494,7 +494,7 @@ to_chat(user, "You feel your body vibrating...") if(do_after(user, 25, target = user)) to_chat(user, "You teleport!") - do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg') + do_teleport(user, get_turf(user), 6, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) return 300 if(SLIME_ACTIVATE_MAJOR) @@ -510,7 +510,7 @@ if(teleport_x && teleport_y && teleport_z) var/turf/T = locate(teleport_x, teleport_y, teleport_z) to_chat(user, "You snap back to your anchor point!") - do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg') + do_teleport(user, T, asoundin = 'sound/weapons/emitter2.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) return 450 diff --git a/code/modules/spells/spell_types/area_teleport.dm b/code/modules/spells/spell_types/area_teleport.dm index ab399f4e2a..7bede9f8be 100644 --- a/code/modules/spells/spell_types/area_teleport.dm +++ b/code/modules/spells/spell_types/area_teleport.dm @@ -58,7 +58,7 @@ var/success = 0 while(tempL.len) attempt = pick(tempL) - target.Move(attempt) + do_teleport(target, attempt, channel = TELEPORT_CHANNEL_MAGIC) if(get_turf(target) == attempt) success = 1 break @@ -66,7 +66,7 @@ tempL.Remove(attempt) if(!success) - target.forceMove(L) + do_teleport(target, L, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) playsound(get_turf(user), sound2, 50,1) return diff --git a/code/modules/spells/spell_types/turf_teleport.dm b/code/modules/spells/spell_types/turf_teleport.dm index 093285b74d..8a45f2be22 100644 --- a/code/modules/spells/spell_types/turf_teleport.dm +++ b/code/modules/spells/spell_types/turf_teleport.dm @@ -40,6 +40,5 @@ if(!picked || !isturf(picked)) return - if(!target.Move(picked)) - target.forceMove(picked) - playsound(get_turf(user), sound2, 50,1) + if(do_teleport(user, picked, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)) + playsound(get_turf(user), sound1, 50,1) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 98f5534d06..be88d0ecdc 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -133,6 +133,7 @@ mode = "M-SHIELD" speed_process = TRUE var/kill_range = 14 + density = 0 /obj/machinery/satellite/meteor_shield/sci name = "\improper Meteor Shield Satellite" diff --git a/code/modules/surgery/bodyparts/robot_bodyparts.dm b/code/modules/surgery/bodyparts/robot_bodyparts.dm index ab31d64034..a3f8b883b4 100644 --- a/code/modules/surgery/bodyparts/robot_bodyparts.dm +++ b/code/modules/surgery/bodyparts/robot_bodyparts.dm @@ -20,8 +20,8 @@ icon_state = "borg_l_arm" status = BODYPART_ROBOTIC - brute_reduction = 5 - burn_reduction = 4 + brute_reduction = 2 + burn_reduction = 1 light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG @@ -41,8 +41,8 @@ icon_state = "borg_r_arm" status = BODYPART_ROBOTIC - brute_reduction = 5 - burn_reduction = 4 + brute_reduction = 2 + burn_reduction = 1 light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG @@ -62,8 +62,8 @@ icon_state = "borg_l_leg" status = BODYPART_ROBOTIC - brute_reduction = 5 - burn_reduction = 4 + brute_reduction = 2 + burn_reduction = 1 light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG @@ -83,8 +83,8 @@ icon_state = "borg_r_leg" status = BODYPART_ROBOTIC - brute_reduction = 5 - burn_reduction = 4 + brute_reduction = 2 + burn_reduction = 1 light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG @@ -103,8 +103,8 @@ icon_state = "borg_chest" status = BODYPART_ROBOTIC - brute_reduction = 5 - burn_reduction = 4 + brute_reduction = 2 + burn_reduction = 1 light_brute_msg = ROBOTIC_LIGHT_BRUTE_MSG medium_brute_msg = ROBOTIC_MEDIUM_BRUTE_MSG @@ -268,38 +268,38 @@ burn_reduction = 0 max_damage = 20 -// Upgraded Surplus lims +// Upgraded Surplus lims - Better then robotic lims /obj/item/bodypart/l_arm/robot/surplus_upgraded name = "reinforced surplus prosthetic left arm" - desc = "A skeletal, robotic limb. This one is reinforced to provide better protection." + desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts." icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 1 - burn_reduction = 1 - max_damage = 30 + brute_reduction = 3 + burn_reduction = 2 + max_damage = 55 /obj/item/bodypart/r_arm/robot/surplus_upgraded name = "reinforced surplus prosthetic right arm" - desc = "A skeletal, robotic limb. This one is reinforced to provide better protection." + desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts." icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 1 - burn_reduction = 1 - max_damage = 30 + brute_reduction = 3 + burn_reduction = 2 + max_damage = 55 /obj/item/bodypart/l_leg/robot/surplus_upgraded name = "reinforced surplus prosthetic left leg" - desc = "A skeletal, robotic limb. This one is reinforced to provide better protection." + desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts." icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 1 - burn_reduction = 1 - max_damage = 30 + brute_reduction = 3 + burn_reduction = 2 + max_damage = 55 /obj/item/bodypart/r_leg/robot/surplus_upgraded name = "reinforced surplus prosthetic right leg" - desc = "A skeletal, robotic limb. This one is reinforced to provide better protection." + desc = "A skeletal, robotic limb. This one is reinforced to provide better protection, and is made of stronger parts." icon = 'icons/mob/augmentation/surplus_augments.dmi' - brute_reduction = 1 - burn_reduction = 1 - max_damage = 30 + brute_reduction = 3 + burn_reduction = 2 + max_damage = 55 #undef ROBOTIC_LIGHT_BRUTE_MSG #undef ROBOTIC_MEDIUM_BRUTE_MSG diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 98abb2528a..55c8d95082 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -169,7 +169,6 @@ var/list/obj/effect/abstract/eye_lighting/eye_lighting var/obj/effect/abstract/eye_lighting/on_mob var/image/mob_overlay - var/datum/component/mobhook /obj/item/organ/eyes/robotic/glow/Initialize() . = ..() @@ -238,26 +237,18 @@ return deactivate(silent = TRUE) -/obj/item/organ/eyes/robotic/glow/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE) - . = ..() - if (mobhook && mobhook.parent != M) - QDEL_NULL(mobhook) - if (!mobhook) - mobhook = M.AddComponent(/datum/component/redirect, list(COMSIG_ATOM_DIR_CHANGE = CALLBACK(src, .proc/update_visuals))) - /obj/item/organ/eyes/robotic/glow/Remove(mob/living/carbon/M) . = ..() - QDEL_NULL(mobhook) - -/obj/item/organ/eyes/robotic/glow/Destroy() - QDEL_NULL(mobhook) // mobhook is not our component - return ..() + if(active) + UnregisterSignal(M, COMSIG_ATOM_DIR_CHANGE) + active = FALSE /obj/item/organ/eyes/robotic/glow/proc/activate(silent = FALSE) start_visuals() if(!silent) to_chat(owner, "Your [src] clicks and makes a whining noise, before shooting out a beam of light!") active = TRUE + RegisterSignal(owner, COMSIG_ATOM_DIR_CHANGE, .proc/update_visuals) cycle_mob_overlay() /obj/item/organ/eyes/robotic/glow/proc/deactivate(silent = FALSE) @@ -265,6 +256,7 @@ if(!silent) to_chat(owner, "Your [src] shuts off!") active = FALSE + UnregisterSignal(owner, COMSIG_ATOM_DIR_CHANGE) remove_mob_overlay() /obj/item/organ/eyes/robotic/glow/proc/update_visuals(datum/source, olddir, newdir) diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 55ead3b5b4..ad13de0a01 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -3,7 +3,7 @@ #define COOLDOWN_MEME 300 #define COOLDOWN_NONE 100 -/obj/item/organ/vocal_cords //organs that are activated through speech with the :x channel +/obj/item/organ/vocal_cords //organs that are activated through speech with the :x/MODE_KEY_VOCALCORDS channel name = "vocal cords" icon_state = "appendix" zone = BODY_ZONE_PRECISE_MOUTH diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 1831f38940..38c31a1294 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -290,6 +290,22 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/dangerous category = "Conspicuous and Dangerous Weapons" +/datum/uplink_item/dangerous/pistol + name = "Stechkin Pistol" + desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ + with suppressors." + item = /obj/item/gun/ballistic/automatic/pistol + cost = 7 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + +/datum/uplink_item/dangerous/revolver + name = "Syndicate Revolver" + desc = "A brutally simple syndicate revolver that fires .357 Magnum rounds and has 7 chambers." + item = /obj/item/gun/ballistic/revolver/syndie + cost = 13 + surplus = 50 + exclude_modes = list(/datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/dangerous/rawketlawnchair name = "84mm Rocket Propelled Grenade Launcher" desc = "A reusable rocket propelled grenade launcher preloaded with a low-yield 84mm HE round. \ @@ -494,14 +510,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 25 include_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/dangerous/pistol - name = "Stechkin Pistol" - desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible \ - with suppressors." - item = /obj/item/gun/ballistic/automatic/pistol - cost = 7 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - /datum/uplink_item/dangerous/bolt_action name = "Surplus Rifle" desc = "A horribly outdated bolt action weapon. You've got to be desperate to use this." @@ -509,14 +517,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 2 include_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/dangerous/revolver - name = "Syndicate Revolver" - desc = "A brutally simple Syndicate revolver that fires .357 Magnum rounds and has 7 chambers." - item = /obj/item/gun/ballistic/revolver/syndie - cost = 13 - surplus = 50 - exclude_modes = list(/datum/game_mode/nuclear/clown_ops) - /datum/uplink_item/dangerous/foamsmg name = "Toy Submachine Gun" desc = "A fully-loaded Donksoft bullpup submachine gun that fires riot grade darts with a 20-round magazine." @@ -563,6 +563,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 13 surplus = 0 +/datum/uplink_item/dangerous/phantomthief + name = "Syndicate Mask" + desc = "A cheap plastic mask fitted with an adrenaline autoinjector, which can be used by simply tensing your muscles" + item = /obj/item/clothing/glasses/phantomthief/syndicate + cost = 2 + /datum/uplink_item/stealthy_weapons/dart_pistol name = "Dart Pistol" desc = "A miniaturized version of a normal syringe gun. It is very quiet when fired and can fit into any \ @@ -1307,6 +1313,19 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes /datum/uplink_item/device_tools category = "Devices and Tools" +/datum/uplink_item/device_tools/emag + name = "Cryptographic Sequencer" + desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \ + in electronic devices, subverts intended functions, and easily breaks security mechanisms." + item = /obj/item/card/emag + cost = 6 + +/datum/uplink_item/device_tools/emagrecharge + name = "Electromagnet Charging Device" + desc = "A small device intended for recharging Cryptographic Sequencers. Using it will add five extra charges to the Cryptographic Sequencer." + item = /obj/item/emagrecharge + cost = 2 + /datum/uplink_item/device_tools/cutouts name = "Adaptive Cardboard Cutouts" desc = "These cardboard cutouts are coated with a thin material that prevents discoloration and makes the images on them appear more lifelike. \ @@ -1375,19 +1394,6 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes cost = 1 exclude_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/device_tools/emag - name = "Cryptographic Sequencer" - desc = "The cryptographic sequencer, electromagnetic card, or emag, is a small card that unlocks hidden functions \ - in electronic devices, subverts intended functions, and easily breaks security mechanisms." - item = /obj/item/card/emag - cost = 6 - -/datum/uplink_item/device_tools/emagrecharge - name = "Electromagnet Charging Device" - desc = "A small device intended for recharging Cryptographic Sequencers. Using it will add five extra charges to the Cryptographic Sequencer." - item = /obj/item/emagrecharge - cost = 2 - /datum/uplink_item/device_tools/fakenucleardisk name = "Decoy Nuclear Authentication Disk" desc = "It's just a normal disk. Visually it's identical to the real deal, but it won't hold up under closer scrutiny by the Captain. \ diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 4c5bbd2734..e86c8521a6 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -129,6 +129,7 @@ /obj/item/clothing/head/soft/black = 3, /obj/item/clothing/mask/bandana/skull = 2) premium = list(/obj/item/radio/headset/headset_rob = 2) //Cit change + contraband = list(/obj/item/clothing/suit/hooded/techpriest = 2) refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe /obj/item/vending_refill/wardrobe/robo_wardrobe @@ -239,7 +240,8 @@ /obj/item/clothing/under/rank/chef = 2, /obj/item/clothing/under/rank/chef/skirt = 2, /obj/item/clothing/head/chefhat = 2, - /obj/item/reagent_containers/rag = 3) + /obj/item/reagent_containers/rag = 3, + /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2) refill_canister = /obj/item/vending_refill/wardrobe/chef_wardrobe /obj/item/vending_refill/wardrobe/chef_wardrobe diff --git a/config/spaceRuinBlacklist.txt b/config/spaceRuinBlacklist.txt index cba9a01e73..deafa47969 100644 --- a/config/spaceRuinBlacklist.txt +++ b/config/spaceRuinBlacklist.txt @@ -49,3 +49,4 @@ #_maps/RandomRuins/SpaceRuins/bigape.dmm #_maps/RandomRuins/SpaceRuins/arcade.dmm #_maps/RandomRuins/SpaceRuins/spacehermit.dmm +#_maps/RandomRuins/SpaceRuins/advancedlab.dmm diff --git a/html/changelogs/AutoChangeLog-pr-8660.yml b/html/changelogs/AutoChangeLog-pr-8660.yml new file mode 100644 index 0000000000..710c4489ea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8660.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - code_imp: "Changes some files to be better" diff --git a/html/changelogs/AutoChangeLog-pr-8673.yml b/html/changelogs/AutoChangeLog-pr-8673.yml new file mode 100644 index 0000000000..6ff2c7135c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8673.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - balance: "As all things are not" diff --git a/html/changelogs/AutoChangeLog-pr-8774.yml b/html/changelogs/AutoChangeLog-pr-8774.yml new file mode 100644 index 0000000000..7ba01cc6aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8774.yml @@ -0,0 +1,4 @@ +author: "Sishen1542" +delete-after: True +changes: + - bugfix: "Removed the human check for cult conversion of captain/chaplain minds." diff --git a/html/changelogs/AutoChangeLog-pr-8900.yml b/html/changelogs/AutoChangeLog-pr-8900.yml new file mode 100644 index 0000000000..cbb910c3d5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8900.yml @@ -0,0 +1,4 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "Abductor Replication Lab ruin and advanced tools" diff --git a/html/changelogs/AutoChangeLog-pr-8908.yml b/html/changelogs/AutoChangeLog-pr-8908.yml new file mode 100644 index 0000000000..d9cbd5abed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8908.yml @@ -0,0 +1,5 @@ +author: "Ghommie" +delete-after: True +changes: + - balance: "Improved the zelus flask to be more viable for bottle smashing than the average barman's selection." + - code_imp: "Very slight bottle smashing code clean up, stupid const vars." diff --git a/html/changelogs/AutoChangeLog-pr-8912.yml b/html/changelogs/AutoChangeLog-pr-8912.yml new file mode 100644 index 0000000000..5d5a7c38fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8912.yml @@ -0,0 +1,6 @@ +author: "Ghommie (original PRs by ShizCalev and bobbahbrown)" +delete-after: True +changes: + - rscadd: "Headsets now dynamically show in their description how to speak on any channels they can use when held or worn." + - code_imp: "Radio channels names and keys now use defines." + - tweak: "The head arrival announcement will now be broadcast to the supply for the quartermaster." diff --git a/html/changelogs/AutoChangeLog-pr-8913.yml b/html/changelogs/AutoChangeLog-pr-8913.yml new file mode 100644 index 0000000000..ccac6aef16 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8913.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "Added new chairs" diff --git a/html/changelogs/AutoChangeLog-pr-8942.yml b/html/changelogs/AutoChangeLog-pr-8942.yml new file mode 100644 index 0000000000..a1b80ba839 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8942.yml @@ -0,0 +1,4 @@ +author: "Chayse" +delete-after: True +changes: + - tweak: "Changed the Warden's compact combat shotgun to instead be a regular combat shotgun with a foldable stock and penalties for being folded." diff --git a/html/changelogs/AutoChangeLog-pr-8986.yml b/html/changelogs/AutoChangeLog-pr-8986.yml new file mode 100644 index 0000000000..810631f5f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8986.yml @@ -0,0 +1,6 @@ +author: "Ghommie" +delete-after: True +changes: + - rscadd: "reworked ninja's stealth mode. Increased invisibility, but engaging in combat, attacking or throwing things, bumping people will temporarily lower it." + - rscadd: "Ninja shoes are even stealthier." + - code_imp: "cleaned up some 2014 tier processing code horror." diff --git a/html/changelogs/AutoChangeLog-pr-8995.yml b/html/changelogs/AutoChangeLog-pr-8995.yml new file mode 100644 index 0000000000..76669d7821 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8995.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - rscadd: "When you're jogging, you will only slip on water if you have more than 20% staminaloss, for real this time." diff --git a/html/changelogs/AutoChangeLog-pr-8996.yml b/html/changelogs/AutoChangeLog-pr-8996.yml new file mode 100644 index 0000000000..7c631e3301 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8996.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - imageadd: "Different cuffs now come with different worn overlays instead of a generic one." diff --git a/html/changelogs/AutoChangeLog-pr-8998.yml b/html/changelogs/AutoChangeLog-pr-8998.yml new file mode 100644 index 0000000000..981e746fc9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8998.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "High luminosity eyes can now be properly deactivated and won't illuminate your surroundings again until turned back on." diff --git a/html/changelogs/AutoChangeLog-pr-8999.yml b/html/changelogs/AutoChangeLog-pr-8999.yml new file mode 100644 index 0000000000..182e3a8409 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8999.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - balance: "Chestbursters no longer give and remove your brain. They just disembowel and kill you now." diff --git a/html/changelogs/AutoChangeLog-pr-9009.yml b/html/changelogs/AutoChangeLog-pr-9009.yml new file mode 100644 index 0000000000..21cf0c8d85 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9009.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - bugfix: "Fixes WarOps miscalculating players." diff --git a/html/changelogs/AutoChangeLog-pr-9014.yml b/html/changelogs/AutoChangeLog-pr-9014.yml new file mode 100644 index 0000000000..f217b64afd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9014.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixes freshly cloned people starting with undershirts. Fixes random characters possibly rolling with undergarments of the opposite gender (Doesn't affect preferences' freedom of choice)." diff --git a/html/changelogs/AutoChangeLog-pr-9018.yml b/html/changelogs/AutoChangeLog-pr-9018.yml new file mode 100644 index 0000000000..7acb63b426 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9018.yml @@ -0,0 +1,12 @@ +author: "Ghommie (original PRs by XDTM, optimumtact, Nichlas0010 and monster860)" +delete-after: True +changes: + - rscadd: "Added Quantum Keycards, devices that can link to a quantum pad, and can be used on any other quantum pad to teleport to its linked pad. +spellchecking: Renamed \"Bluespace Teleportation Tech\" tech node to \"Bluespace Travel\"." + - tweak: "Moved roasting sticks from the \"Bluespace Travel\" to \"Practical Bluespace\"." + - rscadd: "Spraying holy water on tiles will now prevent cult-based teleportation from using them as a destination point." + - tweak: "Quantum, wormhole and magic teleportation is no longer disrupted by bags of holding." + - bugfix: "You are now also blocked from teleporting IN to no-teleport areas, not just out of them." + - tweak: "Quantum teleportation now makes pretty rainbow sparks instead of the normal ones." + - bugfix: "Non-bluespace teleportation (spells etc.) no longer makes sparks." + - bugfix: "Fixed teleportation deleting mob spawners like golem shells and ashwalker eggs." diff --git a/html/changelogs/AutoChangeLog-pr-9019.yml b/html/changelogs/AutoChangeLog-pr-9019.yml new file mode 100644 index 0000000000..8006c134e3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9019.yml @@ -0,0 +1,6 @@ +author: "Ghommie" +delete-after: True +changes: + - balance: "MRE menu 3 has cuban nachos instead of a chili now." + - bugfix: "Removed the illustration overlay from MREs, looks pretty weird otherwise." + - rscadd: "MRE menu 4, vegetarian." diff --git a/html/changelogs/AutoChangeLog-pr-9021.yml b/html/changelogs/AutoChangeLog-pr-9021.yml new file mode 100644 index 0000000000..e8809f1d7e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9021.yml @@ -0,0 +1,4 @@ +author: "Ghommie (by Floyd / Qustinnus, Arathian)" +delete-after: True +changes: + - rscadd: "The robotocist now has robe to show his love for toasters" diff --git a/html/changelogs/AutoChangeLog-pr-9022.yml b/html/changelogs/AutoChangeLog-pr-9022.yml new file mode 100644 index 0000000000..4fb48506e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9022.yml @@ -0,0 +1,4 @@ +author: "Ghommie (by nemvar)" +delete-after: True +changes: + - tweak: "Dwarfs are now more robust." diff --git a/html/changelogs/AutoChangeLog-pr-9024.yml b/html/changelogs/AutoChangeLog-pr-9024.yml new file mode 100644 index 0000000000..1d75959c79 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9024.yml @@ -0,0 +1,4 @@ +author: "Ghommie (by Arkatos)" +delete-after: True +changes: + - bugfix: "Fixed an issue with a Lizardwine drink crafting, where a final product would contain unwated 100u of Ethanol." diff --git a/html/changelogs/AutoChangeLog-pr-9030.yml b/html/changelogs/AutoChangeLog-pr-9030.yml new file mode 100644 index 0000000000..94c797433a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9030.yml @@ -0,0 +1,4 @@ +author: "CameronWoof" +delete-after: True +changes: + - bugfix: "Attaching a beaker that contains water to an IV stand no longer causes a visual glitch" diff --git a/html/changelogs/AutoChangeLog-pr-9033.yml b/html/changelogs/AutoChangeLog-pr-9033.yml new file mode 100644 index 0000000000..3e69bc9486 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9033.yml @@ -0,0 +1,4 @@ +author: "EgoSumStultus" +delete-after: True +changes: + - bugfix: "fixed magpistol magazine sprites" diff --git a/html/changelogs/AutoChangeLog-pr-9036.yml b/html/changelogs/AutoChangeLog-pr-9036.yml new file mode 100644 index 0000000000..afd2882fc3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9036.yml @@ -0,0 +1,5 @@ +author: "Linzolle" +delete-after: True +changes: + - rscadd: "shoes can have a different icon used for their item and mob icons" + - bugfix: "combat gloves plus having no mob icon" diff --git a/html/changelogs/AutoChangeLog-pr-9040.yml b/html/changelogs/AutoChangeLog-pr-9040.yml new file mode 100644 index 0000000000..33958a2ece --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9040.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "new books/cooking" diff --git a/html/changelogs/AutoChangeLog-pr-9042.yml b/html/changelogs/AutoChangeLog-pr-9042.yml new file mode 100644 index 0000000000..38c4006383 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9042.yml @@ -0,0 +1,4 @@ +author: "EgoSumStultus" +delete-after: True +changes: + - rscadd: "Added the Femur Breaker" diff --git a/html/changelogs/AutoChangeLog-pr-9043.yml b/html/changelogs/AutoChangeLog-pr-9043.yml new file mode 100644 index 0000000000..14c9331e5b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9043.yml @@ -0,0 +1,7 @@ +author: "chef" +delete-after: True +changes: + - rscadd: "Added main hallway approach to monastery" + - rscadd: "Added Maintenance hallway approach, with some maint loot" + - tweak: "moved the docking arm for the white ship" + - tweak: "changed placement of some grills and windows" diff --git a/html/changelogs/AutoChangeLog-pr-9044.yml b/html/changelogs/AutoChangeLog-pr-9044.yml new file mode 100644 index 0000000000..6133ea45e9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9044.yml @@ -0,0 +1,7 @@ +author: "Original by Citinited, port by Sishen1542" +delete-after: True +changes: + - rscadd: "You can now use an airlock electronics on a locker to add a lock, and can screwdriver an unlocked locker to remove its lock." + - rscadd: "You can now remove the locks on broken or emagged lockers." + - tweak: "Removing the lock from a personal locker now wipes that locker's ID details." + - tweak: "Broken lockers have had their appearance changed." diff --git a/html/changelogs/AutoChangeLog-pr-9045.yml b/html/changelogs/AutoChangeLog-pr-9045.yml new file mode 100644 index 0000000000..8917707ae3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9045.yml @@ -0,0 +1,8 @@ +author: "CameronWoof" +delete-after: True +changes: + - tweak: "Fluid-producing sexual organs no longer start full" + - tweak: "Sexual organ fluid capacity decreased from 50 to 15" + - tweak: "Sexual organ production rate decreased from 5u to 0.035u per two seconds." + - tweak: "Sexual fluid decals no longer contain reagents" + - tweak: "Sexual fluids cannot by synthesized (e.g., by the Odysseus)" diff --git a/html/changelogs/AutoChangeLog-pr-9046.yml b/html/changelogs/AutoChangeLog-pr-9046.yml new file mode 100644 index 0000000000..24e7035a88 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9046.yml @@ -0,0 +1,4 @@ +author: "Sishen1542" +delete-after: True +changes: + - tweak: "density = 0" diff --git a/html/changelogs/AutoChangeLog-pr-9050.yml b/html/changelogs/AutoChangeLog-pr-9050.yml new file mode 100644 index 0000000000..3b12a12f17 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9050.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "fixes a few bad touchs on combat mode pushing." diff --git a/html/changelogs/AutoChangeLog-pr-9061.yml b/html/changelogs/AutoChangeLog-pr-9061.yml new file mode 100644 index 0000000000..4fc9d10ba5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9061.yml @@ -0,0 +1,5 @@ +author: "deathride58" +delete-after: True +changes: + - tweak: "The femur breaker now uses `*scream` instead of forced speech. This means that the femur breaker will no longer spam deadchat with \"AAAAAAAAAHHHHHHHHHH!!\"" + - tweak: "The femur breaker will now guarantee that the victim falls into crit, which will make it harder to perform torture scenes with it since the victim can just succumb." diff --git a/html/changelogs/AutoChangeLog-pr-9064.yml b/html/changelogs/AutoChangeLog-pr-9064.yml new file mode 100644 index 0000000000..6e775c1eb4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9064.yml @@ -0,0 +1,4 @@ +author: "Cebutris" +delete-after: True +changes: + - rscadd: "Hugs of the North Star! Get them from the arcades (if you're lucky) and hug your friends at INCREDIBLE hihg speeds!" diff --git a/html/changelogs/AutoChangeLog-pr-9069.yml b/html/changelogs/AutoChangeLog-pr-9069.yml new file mode 100644 index 0000000000..0439515dd3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9069.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixes clock cult Abscond scripture not dragging pulled mobs into Reebe. Also fixes blood cult tele runes teleporting you from the source turf to the source turf." diff --git a/html/changelogs/AutoChangeLog-pr-9070.yml b/html/changelogs/AutoChangeLog-pr-9070.yml new file mode 100644 index 0000000000..2013550dd2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9070.yml @@ -0,0 +1,5 @@ +author: "Linzolle" +delete-after: True +changes: + - rscadd: "inhands sprite for rainbow knife" + - tweak: "colour of highlight on the regular knife when held in the right hand" diff --git a/html/changelogs/AutoChangeLog-pr-9071.yml b/html/changelogs/AutoChangeLog-pr-9071.yml new file mode 100644 index 0000000000..40ae43867f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9071.yml @@ -0,0 +1,4 @@ +author: "Yakumo Chen" +delete-after: True +changes: + - balance: "Autocloning now requires tier 4 parts" diff --git a/html/changelogs/AutoChangeLog-pr-9078.yml b/html/changelogs/AutoChangeLog-pr-9078.yml new file mode 100644 index 0000000000..2e202ec43a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9078.yml @@ -0,0 +1,7 @@ +author: "kappa-sama" +delete-after: True +changes: + - rscdel: "Removed racism" + - tweak: "Teleporter calibration actually matters to all roundstart players" + - balance: "Slows down teleportation with the console/hub/teleporter setup if you care for your species." + - balance: "Dedicated non-humans can now get hulk without having to become human." diff --git a/html/changelogs/AutoChangeLog-pr-9081.yml b/html/changelogs/AutoChangeLog-pr-9081.yml new file mode 100644 index 0000000000..c66148e446 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9081.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - balance: "Central Command informs you when a Meteor Storm is about to hit 5 to 10 minutes before it happens." diff --git a/html/changelogs/AutoChangeLog-pr-9083.yml b/html/changelogs/AutoChangeLog-pr-9083.yml new file mode 100644 index 0000000000..74b4d95ca3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9083.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "strawbarries and such" diff --git a/html/changelogs/AutoChangeLog-pr-9084.yml b/html/changelogs/AutoChangeLog-pr-9084.yml new file mode 100644 index 0000000000..c2569d10b4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9084.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "fixes clock cult mass recall." diff --git a/html/changelogs/AutoChangeLog-pr-9085.yml b/html/changelogs/AutoChangeLog-pr-9085.yml new file mode 100644 index 0000000000..92f5dc4cf8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9085.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Fixes underwear colors a bit." diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 29086033c8..e13ce10347 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index c50351eef3..21238366f1 100644 Binary files a/icons/mob/alien.dmi and b/icons/mob/alien.dmi differ diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi index 115bd17cb0..1176f43edd 100644 Binary files a/icons/mob/alienqueen.dmi and b/icons/mob/alienqueen.dmi differ diff --git a/icons/mob/custom_w.dmi b/icons/mob/custom_w.dmi index d974d0ca6c..c22ff7f159 100644 Binary files a/icons/mob/custom_w.dmi and b/icons/mob/custom_w.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 3ca7290a0f..ea13294dfe 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/inhands/equipment/kitchen_lefthand.dmi b/icons/mob/inhands/equipment/kitchen_lefthand.dmi index 277a7d8f05..93cd988cff 100644 Binary files a/icons/mob/inhands/equipment/kitchen_lefthand.dmi and b/icons/mob/inhands/equipment/kitchen_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/kitchen_righthand.dmi b/icons/mob/inhands/equipment/kitchen_righthand.dmi index 0103bd19b5..075b4c2033 100644 Binary files a/icons/mob/inhands/equipment/kitchen_righthand.dmi and b/icons/mob/inhands/equipment/kitchen_righthand.dmi differ diff --git a/icons/mob/inhands/equipment/security_lefthand.dmi b/icons/mob/inhands/equipment/security_lefthand.dmi index 6ccdfba3fc..01f8e2ca27 100644 Binary files a/icons/mob/inhands/equipment/security_lefthand.dmi and b/icons/mob/inhands/equipment/security_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/security_righthand.dmi b/icons/mob/inhands/equipment/security_righthand.dmi index e3f930a13e..d2126fe22f 100644 Binary files a/icons/mob/inhands/equipment/security_righthand.dmi and b/icons/mob/inhands/equipment/security_righthand.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 1649706279..9beedfb417 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/mob/restraints.dmi b/icons/mob/restraints.dmi new file mode 100644 index 0000000000..fa7eb43aa3 Binary files /dev/null and b/icons/mob/restraints.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 835f3448b4..2a777b9af5 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/advancedtools.dmi b/icons/obj/advancedtools.dmi new file mode 100644 index 0000000000..974202dd58 Binary files /dev/null and b/icons/obj/advancedtools.dmi differ diff --git a/icons/obj/chairs.dmi b/icons/obj/chairs.dmi index 3754ff052c..9e8fb64aba 100644 Binary files a/icons/obj/chairs.dmi and b/icons/obj/chairs.dmi differ diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index d7bf32d7b1..717937c034 100644 Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 506cdffe8e..5290c43073 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 568adb69b3..4b7b67b39f 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index eb4f5813c8..bf976060c7 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 55c33e5e83..032b0c27ad 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/femur_breaker.dmi b/icons/obj/femur_breaker.dmi new file mode 100644 index 0000000000..4b36f4b2b8 Binary files /dev/null and b/icons/obj/femur_breaker.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 92b5203f5d..6fda702cb3 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/piecake.dmi b/icons/obj/food/piecake.dmi index 57dda21757..df1e61c849 100644 Binary files a/icons/obj/food/piecake.dmi and b/icons/obj/food/piecake.dmi differ diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 7d44d35f55..0ac8ccf566 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index d309884be0..9b0bc9816b 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/icons/obj/hydroponics/harvest.dmi b/icons/obj/hydroponics/harvest.dmi index a1ab5b08e5..61070621c2 100644 Binary files a/icons/obj/hydroponics/harvest.dmi and b/icons/obj/hydroponics/harvest.dmi differ diff --git a/icons/obj/hydroponics/seeds.dmi b/icons/obj/hydroponics/seeds.dmi index 5a2088c332..30be27486b 100644 Binary files a/icons/obj/hydroponics/seeds.dmi and b/icons/obj/hydroponics/seeds.dmi differ diff --git a/icons/obj/iv_drip.dmi b/icons/obj/iv_drip.dmi index 016513245e..f530688da7 100644 Binary files a/icons/obj/iv_drip.dmi and b/icons/obj/iv_drip.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index 140f6a4d9e..f28b8be5c5 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 2a6ec3955a..066842f089 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/modular_citadel/code/game/objects/items/handcuffs.dm b/modular_citadel/code/game/objects/items/handcuffs.dm deleted file mode 100644 index ed5e8a191e..0000000000 --- a/modular_citadel/code/game/objects/items/handcuffs.dm +++ /dev/null @@ -1,5 +0,0 @@ -/obj/item/restraints/handcuffs/fake/kinky - name = "kinky handcuffs" - desc = "Fake handcuffs meant for erotic roleplay." - icon = 'modular_citadel/icons/obj/items_and_weapons.dmi' - icon_state = "handcuffgag" diff --git a/modular_citadel/code/game/objects/items/stunsword.dm b/modular_citadel/code/game/objects/items/stunsword.dm index 1262b0018a..7a5398f7d2 100644 --- a/modular_citadel/code/game/objects/items/stunsword.dm +++ b/modular_citadel/code/game/objects/items/stunsword.dm @@ -7,6 +7,14 @@ lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi' righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi' +/obj/item/melee/baton/stunsword/get_belt_overlay() + if(istype(loc, /obj/item/storage/belt/sabre)) + return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "stunsword") + return ..() + +/obj/item/melee/baton/stunsword/get_worn_belt_overlay(icon_file) + return mutable_appearance(icon_file, "-stunsword") + /obj/item/ssword_kit name = "stunsword kit" desc = "a modkit for making a stunbaton into a stunsword" diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index 1223f0b616..9771dd0897 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -15,10 +15,6 @@ can_climax = TRUE fluid_transfer_factor = 0.5 -/obj/item/organ/genital/breasts/Initialize() - . = ..() - reagents.add_reagent(fluid_id, fluid_max_volume) - /obj/item/organ/genital/breasts/on_life() if(QDELETED(src)) return @@ -26,6 +22,14 @@ return reagents.maximum_volume = fluid_max_volume if(fluid_id && producing) + if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank. + fluid_rate = 0.1 + else + fluid_rate = CUM_RATE + if(reagents.total_volume >= 5) + fluid_mult = 0.5 + else + fluid_mult = 1 generate_milk() /obj/item/organ/genital/breasts/proc/generate_milk() diff --git a/modular_citadel/code/modules/arousal/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm index 63d6834409..c4fffea355 100644 --- a/modular_citadel/code/modules/arousal/organs/genitals.dm +++ b/modular_citadel/code/modules/arousal/organs/genitals.dm @@ -10,7 +10,7 @@ var/fluid_transfer_factor = 0.0 //How much would a partner get in them if they climax using this? var/size = 2 //can vary between num or text, just used in icon_state strings var/fluid_id = null - var/fluid_max_volume = 50 + var/fluid_max_volume = 15 var/fluid_efficiency = 1 var/fluid_rate = 1 var/fluid_mult = 1 diff --git a/modular_citadel/code/modules/arousal/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm index 1e6b4d62d4..f4ef4b5064 100644 --- a/modular_citadel/code/modules/arousal/organs/testicles.dm +++ b/modular_citadel/code/modules/arousal/organs/testicles.dm @@ -16,14 +16,18 @@ can_climax = TRUE var/sent_full_message = TRUE //defaults to 1 since they're full to start -/obj/item/organ/genital/testicles/Initialize() - . = ..() - reagents.add_reagent(fluid_id, fluid_max_volume) - /obj/item/organ/genital/testicles/on_life() if(QDELETED(src)) return if(reagents && producing) + if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank. + fluid_rate = 0.1 + else + fluid_rate = CUM_RATE + if(reagents.total_volume >= 5) + fluid_mult = 0.5 + else + fluid_mult = 1 generate_cum() /obj/item/organ/genital/testicles/proc/generate_cum() diff --git a/modular_citadel/code/modules/arousal/organs/womb.dm b/modular_citadel/code/modules/arousal/organs/womb.dm index 686d9059a0..3f190b72ac 100644 --- a/modular_citadel/code/modules/arousal/organs/womb.dm +++ b/modular_citadel/code/modules/arousal/organs/womb.dm @@ -9,14 +9,18 @@ fluid_id = "femcum" producing = TRUE -/obj/item/organ/genital/womb/Initialize() - . = ..() - reagents.add_reagent(fluid_id, fluid_max_volume) - /obj/item/organ/genital/womb/on_life() if(QDELETED(src)) return if(reagents && producing) + if(reagents.total_volume == 0) // Apparently, 0.015 gets rounded down to zero and no reagents are created if we don't start it with 0.1 in the tank. + fluid_rate = 0.1 + else + fluid_rate = CUM_RATE + if(reagents.total_volume >= 5) + fluid_mult = 0.5 + else + fluid_mult = 1 generate_femcum() /obj/item/organ/genital/womb/proc/generate_femcum() diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index e75a63f540..e3dbbbd490 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -226,7 +226,7 @@ /datum/gear/darksabre name = "Dark Sabre" category = SLOT_IN_BACKPACK - path = /obj/item/toy/sword/darksabre + path = /obj/item/toy/darksabre ckeywhitelist = list("inferno707") datum/gear/darksabresheath diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index 0ce4fbdd78..ece673587f 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -49,7 +49,7 @@ item_color = "steele" medaltype = "medal-silver" -/obj/item/toy/sword/darksabre +/obj/item/toy/darksabre name = "Kiara's Sabre" desc = "This blade looks as dangerous as its owner." icon = 'icons/obj/custom.dmi' @@ -58,9 +58,13 @@ item_state = "darksabre" lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi' righthand_file = 'modular_citadel/icons/mob/inhands/stunsword_right.dmi' - w_class = WEIGHT_CLASS_SMALL attack_verb = list("attacked", "struck", "hit") +/obj/item/toy/darksabre/get_belt_overlay() + return mutable_appearance('icons/obj/custom.dmi', "darksheath-darksabre") + +/obj/item/toy/darksabre/get_worn_belt_overlay(icon_file) + return mutable_appearance(icon_file, "darksheath-darksabre") /obj/item/storage/belt/sabre/darksabre name = "Ornate Sheathe" @@ -69,32 +73,8 @@ alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "darksheath" item_state = "darksheath" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/belt/sabre/darksabre/ComponentInitialize() - . = ..() - GET_COMPONENT(STR, /datum/component/storage) - STR.max_items = 1 - STR.rustle_sound = FALSE - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.can_hold = typecacheof(list( - /obj/item/toy/sword/darksabre - )) - -/obj/item/storage/belt/sabre/darksabre/update_icon() - icon_state = "darksheath" - item_state = "darksheath" - if(contents.len) - icon_state += "-darksabre" - item_state += "-darksabre" - if(loc && isliving(loc)) - var/mob/living/L = loc - L.regenerate_icons() - ..() - -/obj/item/storage/belt/sabre/darksabre/PopulateContents() - new /obj/item/toy/sword/darksabre(src) - update_icon() + fitting_swords = list(/obj/item/toy/darksabre) + starting_sword = /obj/item/toy/darksabre /obj/item/clothing/suit/armor/vest/darkcarapace name = "Dark Armor" diff --git a/modular_citadel/code/modules/jobs/job_types/captain.dm b/modular_citadel/code/modules/jobs/job_types/captain.dm index 674cd9d09e..7135e86507 100644 --- a/modular_citadel/code/modules/jobs/job_types/captain.dm +++ b/modular_citadel/code/modules/jobs/job_types/captain.dm @@ -4,7 +4,6 @@ /datum/job/hop minimal_player_age = 20 - head_announce = list("Service") exp_type_department = EXP_TYPE_SERVICE access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, diff --git a/modular_citadel/code/modules/mob/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm index aff1739ae4..a34b7b0526 100644 --- a/modular_citadel/code/modules/mob/cit_emotes.dm +++ b/modular_citadel/code/modules/mob/cit_emotes.dm @@ -185,22 +185,6 @@ emote_type = EMOTE_AUDIBLE restraint_check = TRUE - - -/datum/emote/living/dab/run_emote(mob/living/user, params) - if (ishuman(user)) - var/def_zone = BODY_ZONE_CHEST - var/luck = (rand(1,100)) - if(luck >= 65) - user.adjustStaminaLoss(70) - if(luck >= 80) - def_zone = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM) - user.apply_damage(20, BRUTE, def_zone) - if(luck >= 95) - user.adjustBrainLoss(100) - . = ..() - - /datum/emote/living/mothsqueak key = "msqueak" key_third_person = "lets out a tiny squeak" diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species.dm b/modular_citadel/code/modules/mob/living/carbon/human/species.dm index 1e86da47e1..1c7456a8d8 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species.dm @@ -80,21 +80,23 @@ else target.Move(target_shove_turf, shove_dir) if(get_turf(target) == target_oldturf) - var/thoushallnotpass = FALSE - for(var/obj/O in target_shove_turf) - if(O.density) - shove_blocked = TRUE + if(target_shove_turf.density) + shove_blocked = TRUE + else + var/thoushallnotpass = FALSE + for(var/obj/O in target_shove_turf) if(istype(O, /obj/structure/table)) target_table = O - else + else if(!O.CanPass(src, target_shove_turf)) + shove_blocked = TRUE thoushallnotpass = TRUE - if(thoushallnotpass) - target_table = null + if(thoushallnotpass) + target_table = null if(target.is_shove_knockdown_blocked()) return - if(shove_blocked) + if(shove_blocked || target_table) var/directional_blocked = FALSE if(shove_dir in GLOB.cardinals) //Directional checks to make sure that we're not shoving through a windoor or something like that var/target_turf = get_turf(target) diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index ee8268128a..c4c1cff1e7 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -8,6 +8,7 @@ data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null) reagent_state = LIQUID color = "#FFFFFF" // rgb: 255, 255, 255 + can_synth = FALSE nutriment_factor = 0.5 * REAGENTS_METABOLISM /datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume) @@ -19,7 +20,6 @@ var/obj/effect/decal/cleanable/semen/S = locate() in T if(!S) S = new(T) - S.reagents.add_reagent("semen", reac_volume) if(data["blood_DNA"]) S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) @@ -50,6 +50,7 @@ data = list("donor"=null,"viruses"=null,"donor_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null) reagent_state = LIQUID color = "#AAAAAA77" + can_synth = FALSE nutriment_factor = 0.5 * REAGENTS_METABOLISM /obj/effect/decal/cleanable/femcum @@ -82,7 +83,6 @@ var/obj/effect/decal/cleanable/femcum/S = locate() in T if(!S) S = new(T) - S.reagents.add_reagent("femcum", reac_volume) if(data["blood_DNA"]) S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm index 22085d520c..c4b2fbf5b1 100644 --- a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm +++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm @@ -47,7 +47,7 @@ var/tmp/next_process = 0 // Waiting for this SSbellies times_fired to process again. var/tmp/list/items_preserved = list() // Stuff that wont digest so we shouldn't process it again. var/tmp/next_emote = 0 // When we're supposed to print our next emote, as a belly controller tick # - var/tmp/recent_sound = FALSE // Prevent audio spam + var/tmp/recent_sound // Prevent audio spam var/tmp/last_hearcheck = 0 var/tmp/list/hearing_mobs @@ -167,12 +167,13 @@ to_chat(owner,"[thing] slides into your [lowertext(name)].") //Sound w/ antispam flag setting - if(is_wet && !recent_sound) - for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) - if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) - var/sound/devourments = GLOB.vore_sounds[vore_sound] - playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) - recent_sound = TRUE + if(is_wet && (world.time > recent_sound)) + var/turf/source = get_turf(owner) + var/sound/eating = GLOB.vore_sounds[vore_sound] + for(var/mob/living/M in get_hearers_in_view(3, source)) + if(M.client && M.client.prefs.cit_toggles & EATING_NOISES) + SEND_SOUND(M, eating) + recent_sound = (world.time + 20 SECONDS) //Messages if it's a mob if(isliving(thing)) @@ -187,7 +188,7 @@ var/atom/destination = drop_location() //Don't bother if we don't have contents if(!contents.len) - return 0 + return FALSE var/count = 0 for(var/thing in contents) @@ -206,10 +207,10 @@ SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey) AM.forceMove(destination) // Move the belly contents into the same location as belly's owner. count++ - for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) + for(var/mob/living/M in get_hearers_in_view(2, get_turf(owner))) if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) var/sound/releasement = GLOB.release_sounds[release_sound] - playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + SEND_SOUND(M, releasement) //Clean up our own business items_preserved.Cut() @@ -233,10 +234,10 @@ M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner. items_preserved -= M if(!silent) - for(var/mob/H in get_hearers_in_view(2, get_turf(owner))) + for(var/mob/living/H in get_hearers_in_view(2, get_turf(owner))) if(H.client && (H.client.prefs.cit_toggles & EATING_NOISES)) var/sound/releasement = GLOB.release_sounds[release_sound] - playsound(get_turf(owner),releasement,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + SEND_SOUND(H, releasement) if(istype(M,/mob/living)) var/mob/living/ML = M @@ -285,10 +286,6 @@ SEND_SIGNAL(prey, COMSIG_CLEAR_MOOD_EVENT, "emptyprey", /datum/mood_event/emptyprey) prey.forceMove(src) - var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE) - - if(is_wet) - prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP) owner.updateVRPanel() @@ -317,10 +314,12 @@ M.cure_blind("belly_[REF(src)]") target.nom_mob(content, target.owner) if(!silent) - for(var/mob/M in get_hearers_in_view(5, get_turf(owner))) - if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) - var/sound/devourments = GLOB.vore_sounds[vore_sound] - playsound(get_turf(owner),devourments,50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + var/turf/source = get_turf(owner) + var/sound/eating = GLOB.vore_sounds[vore_sound] + for(var/mob/living/M in get_hearers_in_view(3, source)) + if(M.client && M.client.prefs.cit_toggles & EATING_NOISES) + SEND_SOUND(M, eating) + owner.updateVRPanel() for(var/mob/living/M in contents) M.updateVRPanel() @@ -524,22 +523,25 @@ struggle_outer_message = "" + struggle_outer_message + "" struggle_user_message = "" + struggle_user_message + "" + var/turf/source = get_turf(owner) + var/sound/struggle_snuggle = sound(get_sfx("struggle_sound")) + var/sound/struggle_rustle = sound(get_sfx("rustle")) + if(is_wet) - for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) - if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) - playsound(get_turf(owner),"struggle_sound",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED) - R.stop_sound_channel(CHANNEL_PRED) - var/sound/prey_struggle = sound(get_sfx("prey_struggle")) - R.playsound_local(get_turf(R),prey_struggle,45,0) + for(var/mob/living/M in get_hearers_in_view(3, source)) + if(M.client && M.client.prefs.cit_toggles & EATING_NOISES) + SEND_SOUND(M, struggle_snuggle) else - for(var/mob/M in get_hearers_in_view(2, get_turf(owner))) - if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) - playsound(get_turf(owner),"rustle",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED) + for(var/mob/living/M in get_hearers_in_view(3, source)) + if(M.client && M.client.prefs.cit_toggles & EATING_NOISES) + SEND_SOUND(M, struggle_rustle) - for(var/mob/M in get_hearers_in_view(3, get_turf(owner))) + var/list/watching = hearers(3, owner) + for(var/mob/living/M in watching) if(M.client && (M.client.prefs.cit_toggles & EATING_NOISES)) //Might as well censor the normies here too. M.show_message(struggle_outer_message, 1) // visible + to_chat(R,struggle_user_message) if(escapable) //If the stomach has escapable enabled. diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm index 6b6a3d30cc..9356c25f57 100644 --- a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm +++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm @@ -26,10 +26,13 @@ if(isbelly(M.loc)) if(world.time > M.next_preyloop) if(is_wet) + if(!M.client) + continue M.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case - var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE) - M.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP) - M.next_preyloop = world.time + 52 SECONDS + if(M.client.prefs.cit_toggles & DIGESTION_NOISES) + var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE) + M.playsound_local(get_turf(src),preyloop, 80,0, channel = CHANNEL_PREYLOOP) + M.next_preyloop = (world.time + 52 SECONDS) /////////////////////////// Exit Early //////////////////////////// @@ -63,12 +66,12 @@ if(prob(25)) if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) @@ -100,12 +103,12 @@ owner.nutrition += 400 // so eating dead mobs gives you *something*. if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_death) else if(H in contents) @@ -135,12 +138,12 @@ if(prob(25)) if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) @@ -159,12 +162,12 @@ if(prob(35)) if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) @@ -179,12 +182,12 @@ if(prob(10))//Less often than gurgles. People might leave this on forever. if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) @@ -221,12 +224,12 @@ if(prob(55)) //if you're hearing this, you're a vore ho anyway. if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_digest) else if(H in contents) @@ -254,12 +257,12 @@ M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.") if((world.time - NORMIE_HEARCHECK) > last_hearcheck) LAZYCLEARLIST(hearing_mobs) - for(var/mob/H in get_hearers_in_view(3, source)) + for(var/mob/living/H in get_hearers_in_view(3, source)) if(!H.client || !(H.client.prefs.cit_toggles & DIGESTION_NOISES)) continue LAZYADD(hearing_mobs, H) last_hearcheck = world.time - for(var/mob/H in hearing_mobs) + for(var/mob/living/H in hearing_mobs) if(!isbelly(H.loc)) H.playsound_local(source, null, 45, falloff = 0, S = pred_death) else if(H in contents) diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm index a8a77895c8..d9adde04d1 100644 --- a/modular_citadel/code/modules/vore/eating/living_vr.dm +++ b/modular_citadel/code/modules/vore/eating/living_vr.dm @@ -60,18 +60,6 @@ B.can_taste = 1 return TRUE -/* -// Hide vore organs in contents -// -/datum/proc/view_variables_filter_contents(list/L) - return 0 - -/mob/living/view_variables_filter_contents(list/L) - . = ..() - var/len_before = L.len - L -= vore_organs - . += len_before - L.len*/ - // Handle being clicked, perhaps with something to devour // @@ -121,21 +109,12 @@ /mob/living/proc/feed_grabbed_to_self(var/mob/living/user, var/mob/living/prey) var/belly = user.vore_selected return perform_the_nom(user, prey, user, belly) -/* -/mob/living/proc/eat_held_mob(var/mob/living/user, var/mob/living/prey, var/mob/living/pred) - var/belly - if(user != pred) - belly = input("Choose Belly") in pred.vore_organs - else - belly = pred.vore_selected - return perform_the_nom(user, prey, pred, belly)*/ /mob/living/proc/feed_self_to_grabbed(var/mob/living/user, var/mob/living/pred) var/belly = input("Choose Belly") in pred.vore_organs return perform_the_nom(user, user, pred, belly) /mob/living/proc/feed_grabbed_to_other(var/mob/living/user, var/mob/living/prey, var/mob/living/pred) -// return//disabled until I can make that toggle work var/belly = input("Choose Belly") in pred.vore_organs return perform_the_nom(user, prey, pred, belly) @@ -182,9 +161,13 @@ // If we got this far, nom successful! Announce it! user.visible_message(success_msg) - for(var/mob/M in get_hearers_in_view(5, get_turf(user))) + + // incredibly contentious eating noises time + var/turf/source = get_turf(user) + var/sound/eating = GLOB.vore_sounds[belly.vore_sound] + for(var/mob/living/M in get_hearers_in_view(3, source)) if(M.client && M.client.prefs.cit_toggles & EATING_NOISES) - playsound(get_turf(user),"[belly.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED) + SEND_SOUND(M, eating) // Actually shove prey into the belly. belly.nom_mob(prey, user) @@ -214,41 +197,7 @@ // //End vore code. -/* - //Handle case: /obj/item/holder - if(/obj/item/holder/micro) - var/obj/item/holder/H = I - if(!isliving(user)) return 0 // Return 0 to continue upper procs - var/mob/living/attacker = user // Typecast to living - - if (is_vore_predator(src)) - for (var/mob/living/M in H.contents) - attacker.eat_held_mob(attacker, M, src) - return 1 //Return 1 to exit upper procs - else - log_attack("[attacker] attempted to feed [H.contents] to [src] ([src.type]) but it failed.") - - // I just can't imagine this not being complained about - //Handle case: /obj/item/radio/beacon - if(/obj/item/radio/beacon) - var/confirm = alert(user, "[src == user ? "Eat the beacon?" : "Feed the beacon to [src]?"]", "Confirmation", "Yes!", "Cancel") - if(confirm == "Yes!") - var/bellychoice = input("Which belly?","Select A Belly") in src.vore_organs - var/datum/belly/B = src.vore_organs[bellychoice] - src.visible_message("[user] is trying to stuff a beacon into [src]'s [bellychoice]!","[user] is trying to stuff a beacon into you!") - if(do_after(user,30,src)) - user.drop_item() - I.loc = src - B.internal_contents += I - src.visible_message("[src] is fed the beacon!","You're fed the beacon!") - playsound(get_turf(src), B.vore_sound,50,0,-6,0) - return 1 - else - return 1 //You don't get to hit someone 'later' - - return 0 -*/ // // Our custom resist catches for /mob/living @@ -272,7 +221,7 @@ if(isbelly(loc)) src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE) - src.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP) + SEND_SOUND(src, preyloop) else to_chat(src, "You aren't inside anything, you clod.") diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm index 6f484e7a51..ae7da895a6 100644 --- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm @@ -57,7 +57,7 @@ /datum/vore_look/proc/gen_vui(var/mob/living/user) var/dat dat += "Remember to toggle the vore mode, it's to the left of your combat toggle. Open mouth means you're voracious!
" - dat += "Remember that your prey is blind, use audible mode subtle messages to communicate to them with posts!
" + dat += "Remember that the prey is blind, use audible mode subtle messages to communicate to them with posts!
" dat += "
" var/atom/userloc = user.loc if (isbelly(userloc)) @@ -554,7 +554,7 @@ if(href_list["b_releasesoundtest"]) var/sound/releasetest = GLOB.release_sounds[selected.release_sound] if(releasetest) - user << releasetest + SEND_SOUND(user, releasetest) if(href_list["b_sound"]) var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.vore_sounds @@ -567,7 +567,7 @@ if(href_list["b_soundtest"]) var/sound/voretest = GLOB.vore_sounds[selected.vore_sound] if(voretest) - user << voretest + SEND_SOUND(user, voretest) if(href_list["b_tastes"]) selected.can_taste = !selected.can_taste diff --git a/modular_citadel/icons/mob/muzzled_helmet.dmi b/modular_citadel/icons/mob/muzzled_helmet.dmi index e321f8ae47..a318f394f8 100644 Binary files a/modular_citadel/icons/mob/muzzled_helmet.dmi and b/modular_citadel/icons/mob/muzzled_helmet.dmi differ diff --git a/modular_citadel/icons/obj/food/cake.dmi b/modular_citadel/icons/obj/food/cake.dmi deleted file mode 100644 index 840bfe714d..0000000000 Binary files a/modular_citadel/icons/obj/food/cake.dmi and /dev/null differ diff --git a/modular_citadel/icons/obj/guns/cit_guns.dmi b/modular_citadel/icons/obj/guns/cit_guns.dmi index cec9b076aa..bd48d8edbd 100644 Binary files a/modular_citadel/icons/obj/guns/cit_guns.dmi and b/modular_citadel/icons/obj/guns/cit_guns.dmi differ diff --git a/sound/effects/femur_breaker.ogg b/sound/effects/femur_breaker.ogg new file mode 100644 index 0000000000..140dc0477e Binary files /dev/null and b/sound/effects/femur_breaker.ogg differ diff --git a/tgstation.dme b/tgstation.dme index aabcad82f6..e0c6f708d4 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -862,6 +862,7 @@ #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\pressureplates.dm" +#include "code\game\objects\items\devices\quantum_keycard.dm" #include "code\game\objects\items\devices\reverse_bear_trap.dm" #include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\sensor_device.dm" @@ -969,6 +970,7 @@ #include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\false_walls.dm" +#include "code\game\objects\structures\femur_breaker.dm" #include "code\game\objects\structures\fence.dm" #include "code\game\objects\structures\fireaxe.dm" #include "code\game\objects\structures\fireplace.dm" @@ -2905,7 +2907,6 @@ #include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\tracer.dm" #include "modular_citadel\code\game\objects\items\balls.dm" #include "modular_citadel\code\game\objects\items\boombox.dm" -#include "modular_citadel\code\game\objects\items\handcuffs.dm" #include "modular_citadel\code\game\objects\items\holy_weapons.dm" #include "modular_citadel\code\game\objects\items\honk.dm" #include "modular_citadel\code\game\objects\items\meat.dm" @@ -2947,7 +2948,6 @@ #include "modular_citadel\code\modules\arousal\toys\dildos.dm" #include "modular_citadel\code\modules\awaymissions\citadel_ghostrole_spawners.dm" #include "modular_citadel\code\modules\cargo\console.dm" -#include "modular_citadel\code\modules\cargo\packs.dm" #include "modular_citadel\code\modules\client\client_defines.dm" #include "modular_citadel\code\modules\client\client_procs.dm" #include "modular_citadel\code\modules\client\preferences.dm" @@ -2981,7 +2981,6 @@ #include "modular_citadel\code\modules\clothing\under\trek_under.dm" #include "modular_citadel\code\modules\clothing\under\turtlenecks.dm" #include "modular_citadel\code\modules\clothing\under\under.dm" -#include "modular_citadel\code\modules\crafting\recipes.dm" #include "modular_citadel\code\modules\custom_loadout\custom_items.dm" #include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm" #include "modular_citadel\code\modules\custom_loadout\read_from_file.dm" @@ -3006,7 +3005,6 @@ #include "modular_citadel\code\modules\mentor\mentorhelp.dm" #include "modular_citadel\code\modules\mentor\mentorpm.dm" #include "modular_citadel\code\modules\mentor\mentorsay.dm" -#include "modular_citadel\code\modules\mining\mine_items.dm" #include "modular_citadel\code\modules\mining\mining_ruins.dm" #include "modular_citadel\code\modules\mob\cit_emotes.dm" #include "modular_citadel\code\modules\mob\mob.dm" @@ -3064,7 +3062,6 @@ #include "modular_citadel\code\modules\research\designs\xenobio_designs.dm" #include "modular_citadel\code\modules\research\designs\weapon_designs\weapon_designs.dm" #include "modular_citadel\code\modules\research\techweb\_techweb.dm" -#include "modular_citadel\code\modules\research\techweb\all_nodes.dm" #include "modular_citadel\code\modules\research\xenobiology\xenobio_camera.dm" #include "modular_citadel\code\modules\vehicles\secway.dm" #include "modular_citadel\code\modules\vore\hook-defs_vr.dm"