diff --git a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm index 1fb4e60aff..d440e2d15b 100644 --- a/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm +++ b/_maps/RandomRuins/SpaceRuins/cloning_facility.dmm @@ -69,7 +69,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/powered/ancient_shuttle) "j" = ( -/obj/machinery/computer/prototype_cloning, +/obj/machinery/computer/cloning/prototype, /obj/machinery/light{ dir = 1 }, diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 8c558e000e..2f27c3f747 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -5534,11 +5534,10 @@ /turf/open/floor/plating, /area/maintenance/disposal) "ann" = ( -/obj/effect/turf_decal/plaque{ +/obj/effect/landmark/event_spawn, +/turf/open/floor/goonplaque{ desc = "It reads 'In honor of spacemen past, whose work allowed this station to find its new home. The fact that you stand on a station originally built light years away is a definitive representation of the ingenuity of the human spirit.' Beneath this is the image of a spaceman rocketing upwards by means of what appears to be a match and flatulence." }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, /area/hallway/secondary/entry) "ano" = ( /obj/structure/disposalpipe/segment, @@ -23461,6 +23460,17 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"aYG" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "aYH" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -24359,6 +24369,17 @@ }, /turf/open/floor/carpet, /area/crew_quarters/bar) +"bau" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Aft Maintenance - Port"; + pixel_x = 22 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bav" = ( /obj/structure/chair/sofa/right, /obj/machinery/firealarm{ @@ -26737,6 +26758,25 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"bga" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/highcap/five_k{ + areastring = "/area/hallway/primary/aft"; + dir = 1; + name = "Aft Primary Hallway APC"; + pixel_x = 1; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/aft) "bgb" = ( /obj/structure/disposalpipe/sorting/mail{ sortType = 30 @@ -28064,6 +28104,13 @@ /obj/machinery/pipedispenser, /turf/open/floor/plasteel, /area/science/mixing) +"biU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/maintenance/aft) "biV" = ( /turf/closed/wall, /area/storage/primary) @@ -29556,6 +29603,13 @@ }, /turf/closed/wall/r_wall, /area/science/mixing) +"blU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/closet/cardboard, +/turf/open/floor/plating, +/area/maintenance/aft) "blV" = ( /obj/machinery/computer/cargo{ dir = 8 @@ -31652,6 +31706,15 @@ dir = 1 }, /area/hallway/secondary/exit) +"bqq" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera{ + c_tag = "Medbay - Chemistry Lab"; + network = list("ss13","rd") + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) "bqr" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -31663,8 +31726,13 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bqs" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating, /area/maintenance/aft) "bqt" = ( @@ -31744,16 +31812,8 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "bqz" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/machinery/light, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) +/turf/closed/wall, +/area/medical/chemistry) "bqA" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -32318,6 +32378,15 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/civilian) +"brF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chem1"; + name = "chem lab shutters" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/medical/chemistry) "brG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -32332,20 +32401,8 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/heads/hos) "brH" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/closet/wardrobe/chemistry_white{ - anchored = 1 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/showroomfloor, +/obj/structure/disposalpipe/segment, +/turf/closed/wall, /area/medical/chemistry) "brI" = ( /obj/effect/turf_decal/tile/neutral{ @@ -32364,20 +32421,25 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "brJ" = ( +/obj/machinery/door/firedoor, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/door/airlock/maintenance{ + name = "Chemistry Maintenance"; + req_access_txt = "5; 33" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/medical/chemistry) "brK" = ( -/obj/machinery/chem_heater, -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 1 +/obj/structure/window/reinforced/spawner/east, +/obj/machinery/chem_dispenser, +/obj/machinery/airalarm{ + pixel_y = 24 }, -/turf/open/floor/plasteel/showroomfloor, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, /area/medical/chemistry) "brL" = ( /obj/structure/disposalpipe/segment, @@ -32857,11 +32919,14 @@ /turf/open/floor/grass, /area/hydroponics) "bsG" = ( -/obj/item/kirbyplants{ - icon_state = "plant-03" +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/contraband/borg_fancy_2{ + pixel_y = 32 }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/turf/open/floor/plasteel, +/area/maintenance/aft) "bsH" = ( /obj/structure/table/glass, /obj/item/storage/box/syringes{ @@ -32899,26 +32964,40 @@ /turf/open/floor/grass, /area/hydroponics) "bsL" = ( -/obj/effect/turf_decal/trimline/yellow/filled/end, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 5 +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/turf/open/floor/plasteel/showroomfloor, +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/storage/box/syringes, +/obj/item/storage/box/beakers{ + pixel_x = -2; + pixel_y = -2 + }, +/turf/open/floor/plasteel, /area/medical/chemistry) "bsM" = ( /turf/closed/wall, /area/science/robotics/lab) "bsN" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/eastright{ - base_state = "left"; - dir = 2; - icon_state = "left"; - name = "Chemistry Desk"; - req_access_txt = "33" +/obj/structure/table, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light{ + dir = 1 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/cable_coil/random, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/screwdriver{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, /area/medical/chemistry) "bsO" = ( /obj/structure/disposalpipe/segment{ @@ -32926,9 +33005,22 @@ }, /turf/closed/wall/r_wall, /area/hallway/secondary/civilian) +"bsP" = ( +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/white/full, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/medical/chemistry) "bsQ" = ( -/obj/machinery/smartfridge/chemistry/preloaded, -/turf/closed/wall/r_wall, +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plasteel, /area/medical/chemistry) "bsR" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, @@ -33130,6 +33222,14 @@ }, /turf/open/floor/plating, /area/maintenance/department/chapel) +"bts" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/light_construct/small{ + icon_state = "bulb-construct-stage1"; + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/aft) "btt" = ( /obj/structure/chair{ dir = 8 @@ -33159,11 +33259,12 @@ /turf/closed/wall, /area/hallway/secondary/civilian) "btv" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/closed/wall/r_wall, -/area/router/medsci) +/obj/effect/landmark/event_spawn, +/turf/open/floor/plating, +/area/maintenance/aft) "btw" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -33444,6 +33545,10 @@ "bui" = ( /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"buj" = ( +/obj/structure/closet/crate, +/turf/open/floor/plating, +/area/maintenance/aft) "buk" = ( /obj/structure/cable{ icon_state = "1-2" @@ -33458,13 +33563,9 @@ /turf/open/floor/plating, /area/router) "bul" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chem1"; - name = "chem lab shutters" - }, +/obj/structure/girder, /turf/open/floor/plating, -/area/medical/chemistry) +/area/maintenance/aft) "bum" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, @@ -34093,24 +34194,10 @@ /area/crew_quarters/heads/hop) "bvK" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/cable_coil/random, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/screwdriver{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "bvL" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -34291,23 +34378,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/table/glass, -/obj/item/book/manual/wiki/chemistry, -/obj/item/book/manual/wiki/chemistry{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science{ - pixel_x = 2; - pixel_y = 4 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "bwg" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -35438,11 +35510,17 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "byw" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 +/obj/machinery/airalarm{ + pixel_y = 24 }, -/turf/open/floor/plasteel/dark, -/area/medical/chemistry) +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "byx" = ( /obj/machinery/telecomms/processor/preset_three, /turf/open/floor/circuit/telecomms/mainframe, @@ -35472,11 +35550,25 @@ /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) "byD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/camera{ + c_tag = "Medbay - Lobby"; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "byE" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -35861,6 +35953,24 @@ }, /turf/open/floor/plasteel/white, /area/gateway) +"bzA" = ( +/obj/machinery/power/apc{ + areastring = "/area/medical/chemistry"; + dir = 1; + name = "Chemistry APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bzB" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 6 @@ -35903,14 +36013,13 @@ /turf/open/floor/plating, /area/router) "bzG" = ( -/obj/machinery/chem_dispenser, -/obj/item/radio/intercom{ - pixel_x = -25 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/turf_decal/trimline/yellow/filled/end{ +/obj/effect/turf_decal/tile/blue{ dir = 1 }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "bzH" = ( /obj/structure/disposalpipe/segment, @@ -35926,9 +36035,21 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bzJ" = ( -/obj/structure/sign/warning/biohazard, -/turf/closed/wall/r_wall, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "bzK" = ( /obj/machinery/disposal/bin{ name = "Chapel Corpse Delivery" @@ -36332,27 +36453,60 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "bAC" = ( -/obj/machinery/chem_master, -/obj/machinery/requests_console{ - department = "Chemistry"; - departmentType = 2; - pixel_x = -30; - receive_ore_updates = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/turf_decal/trimline/yellow/filled/end, -/turf/open/floor/plasteel/showroomfloor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"bAD" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/delivery, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/window/eastleft{ + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "bAE" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -3; - pixel_y = 3 +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office/light{ + dir = 8 }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/dropper, -/obj/effect/turf_decal/trimline/yellow/filled/end, -/turf/open/floor/plasteel/showroomfloor, +/obj/machinery/button/door{ + id = "chem1"; + name = "Shutters Control Button"; + pixel_x = -8; + pixel_y = 24; + req_access_txt = "29" + }, +/obj/effect/landmark/start/chemist, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 5; + pixel_y = 32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "bAF" = ( /obj/machinery/gateway/centerstation, @@ -36703,10 +36857,23 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bBs" = ( -/obj/structure/sign/warning/nosmoking{ - pixel_y = -32 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "bBt" = ( /obj/structure/cable{ @@ -36890,16 +37057,25 @@ name = "Power Monitoring" }) "bBP" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/science/robotics/lab) -"bBQ" = ( -/obj/machinery/door/airlock/research{ - name = "Mech Bay"; - req_access_txt = "29" +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/machinery/door/window/eastright{ + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"bBQ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/light_switch{ + pixel_x = -24 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "bBR" = ( /obj/structure/cable{ icon_state = "0-8" @@ -37049,6 +37225,29 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hop) +"bCf" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"bCg" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bCh" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -37370,6 +37569,22 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"bCY" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bCZ" = ( /obj/machinery/conveyor{ dir = 8; @@ -38634,6 +38849,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/sorting) +"bFE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bFF" = ( /obj/machinery/light_switch{ pixel_y = 24 @@ -38643,6 +38872,10 @@ }, /turf/open/floor/plating, /area/storage/tech) +"bFG" = ( +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bFH" = ( /obj/machinery/power/apc{ name = "Customs APC"; @@ -38907,20 +39140,9 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bFZ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/obj/machinery/airalarm{ - pixel_y = 24 - }, +/obj/machinery/chem_heater, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/chemistry) "bGa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/dark, @@ -39633,48 +39855,26 @@ /turf/open/floor/plating, /area/crew_quarters/locker) "bHC" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/firealarm{ - pixel_y = 26 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/chemistry) +"bHD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/maintenance/aft) "bHE" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Medbay - Starboard"; - network = list("ss13","rd") - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/chemistry) "bHF" = ( /obj/structure/table/reinforced, /obj/item/assembly/timer{ @@ -39696,23 +39896,11 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bHG" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel, +/area/maintenance/aft) "bHH" = ( /obj/structure/table, /obj/machinery/recharger, @@ -39727,33 +39915,15 @@ }, /area/gateway) "bHI" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/medbay/lobby) "bHJ" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 10 +/obj/item/kirbyplants{ + icon_state = "plant-03" }, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/medbay/lobby) "bHK" = ( /obj/structure/sign/warning/biohazard, /turf/closed/wall, @@ -39926,6 +40096,10 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bIi" = ( +/obj/machinery/smartfridge/chemistry/preloaded, +/turf/closed/wall, +/area/medical/chemistry) "bIj" = ( /obj/machinery/door/window/southright, /turf/open/floor/plasteel/dark, @@ -40011,15 +40185,15 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bIt" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/chemistry) "bIu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ @@ -40152,6 +40326,26 @@ /obj/item/extinguisher, /turf/open/floor/plasteel, /area/science/xenobiology) +"bIL" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"bIM" = ( +/obj/machinery/shower{ + desc = "The HS-451. Standard Nanotrasen Hygiene Division design, although it looks like this one was installed more recently."; + dir = 8; + name = "emergency shower"; + pixel_y = -4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/medical/chemistry) "bIN" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -40328,6 +40522,10 @@ /obj/structure/window/reinforced/spawner, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"bJd" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "bJe" = ( /obj/structure/closet/secure_closet/personal/patient, /obj/effect/turf_decal/tile/blue, @@ -40342,20 +40540,14 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bJf" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +/obj/machinery/door/airlock/maintenance{ + name = "Chemistry Maintenance"; + req_access_txt = "5; 33" }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/medical/chemistry) "bJg" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red{ @@ -43904,33 +44096,11 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/morgue) "bQp" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/power/apc{ - areastring = "/area/medical/chemistry"; - dir = 1; - name = "Chemistry APC"; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/item/storage/box/syringes, -/obj/item/storage/box/beakers{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 8 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/small, +/turf/open/floor/plasteel, +/area/maintenance/aft) "bQq" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -47830,11 +48000,11 @@ name = "Research Sector" }) "bXL" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/turf/open/floor/plasteel, +/area/maintenance/aft) "bXM" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor{ @@ -48328,6 +48498,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) +"bYK" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "bYL" = ( /obj/effect/turf_decal/tile/purple{ dir = 4 @@ -48958,6 +49134,18 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"caj" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cak" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/r_wall, @@ -49056,9 +49244,12 @@ /turf/open/floor/engine/n2, /area/engine/atmos) "caz" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, -/area/science/explab) +/obj/machinery/door/airlock/research{ + name = "Mech Bay"; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/mechbay) "caA" = ( /obj/structure/closet/radiation, /turf/open/floor/plasteel, @@ -49111,6 +49302,19 @@ }, /turf/open/floor/plasteel/dark, /area/science/explab) +"caH" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 6 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "caI" = ( /obj/structure/table/reinforced, /obj/item/integrated_electronics/analyzer, @@ -49359,6 +49563,17 @@ /obj/item/healthanalyzer, /turf/open/floor/engine, /area/science/explab) +"cbm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance{ + name = "Medbay Maintenance"; + req_access_txt = "5" + }, +/turf/open/floor/plating, +/area/medical/medbay/central) "cbn" = ( /obj/structure/window/reinforced{ dir = 4; @@ -49399,6 +49614,28 @@ /obj/item/pen, /turf/open/floor/engine, /area/science/explab) +"cbr" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) +"cbs" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "cbt" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/engine, @@ -49536,6 +49773,26 @@ /area/engine/supermatter{ name = "Thermo-Electric Generator" }) +"cbK" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/departments/chemistry{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "cbL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -49799,13 +50056,11 @@ /turf/open/floor/plasteel/stairs, /area/maintenance/department/chapel) "ccm" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "robotics2"; - name = "robotics lab shutters" +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/turf/open/floor/plating, -/area/router/medsci) +/turf/closed/wall/r_wall, +/area/science/robotics/lab) "ccn" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor/auto{ @@ -50647,14 +50902,52 @@ /turf/closed/wall/r_wall, /area/engine/teg_hot) "cdW" = ( -/obj/machinery/airalarm{ - pixel_y = 24 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 }, -/obj/machinery/light{ +/obj/machinery/door/poddoor/shutters/preopen{ + id = "robotics2"; + name = "robotics lab shutters" + }, +/turf/open/floor/plating, +/area/science/robotics/lab) +"cdX" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/landmark/start/chemist, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/item/radio/intercom{ + broadcasting = 1; + frequency = 1485; + listening = 0; + name = "Station Intercom (Medical)"; + pixel_y = -30 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"cdY" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/medical/medbay/central) "cdZ" = ( /turf/closed/wall/r_wall, /area/medical/medbay/lobby) @@ -52596,6 +52889,18 @@ }, /turf/open/floor/wood, /area/library) +"chV" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 26 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "chW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -53003,21 +53308,20 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "ciQ" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/disposalpipe/segment{ + dir = 10 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/power/apc/highcap/five_k{ - areastring = "/area/hallway/primary/aft"; - dir = 1; - name = "Aft Primary Hallway APC"; - pixel_x = 1; - pixel_y = 24 +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "ciR" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/red, @@ -53752,6 +54056,14 @@ /area/engine/engineering{ name = "Engine Room" }) +"ckp" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "ckq" = ( /obj/structure/closet/crate/hydroponics, /obj/machinery/light_switch{ @@ -53886,9 +54198,15 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "ckD" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/trimline/yellow/filled/end, -/turf/open/floor/plasteel/showroomfloor, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/sign/warning/fire{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "ckE" = ( /obj/effect/decal/cleanable/dirt, @@ -54134,6 +54452,17 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"clc" = ( +/obj/machinery/vending/wardrobe/chem_wardrobe, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "cld" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -54760,6 +55089,14 @@ }, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) +"cmB" = ( +/obj/structure/window/reinforced/spawner/west, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northright{ + name = "Emergency Shower" + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) "cmC" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -54856,6 +55193,23 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) +"cmK" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "cmL" = ( /obj/effect/landmark/blobstart, /turf/open/floor/plating, @@ -54980,12 +55334,20 @@ /turf/open/floor/plasteel, /area/security/checkpoint/supply) "cmU" = ( -/obj/machinery/camera{ - c_tag = "Medbay - Lobby"; - network = list("ss13","rd") +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/medical/chemistry) "cmV" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -55152,10 +55514,16 @@ name = "Research Observatory" }) "cnk" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/machinery/light, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "cnl" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -55291,6 +55659,21 @@ /area/science/server{ name = "Computer Core" }) +"cnz" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/structure/sign/departments/chemistry{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cnA" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -55646,6 +56029,21 @@ }, /turf/open/floor/plasteel, /area/engine/teg_hot) +"col" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) +"com" = ( +/obj/machinery/chem_master, +/obj/effect/turf_decal/stripes/end{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/turf/open/floor/plasteel, +/area/medical/chemistry) "con" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55731,6 +56129,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) +"cov" = ( +/obj/structure/sign/warning/nosmoking{ + pixel_y = -32 + }, +/turf/closed/wall, +/area/medical/medbay/central) "cow" = ( /obj/machinery/door/airlock/external/glass{ name = "Asteroid Mining Access"; @@ -55750,6 +56154,16 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) +"cox" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "coy" = ( /obj/structure/sign/poster/official/safety_internals{ pixel_x = -32 @@ -55855,16 +56269,25 @@ /turf/open/floor/engine, /area/science/explab) "coH" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "robotics2"; - name = "robotics lab shutters" +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plating, -/area/router/medsci) +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/research{ + name = "Robotics Lab"; + req_access_txt = "29" + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) "coI" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/turf_decal/tile/yellow{ @@ -56391,6 +56814,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"cpI" = ( +/obj/machinery/chem_dispenser, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner, +/turf/open/floor/plasteel, +/area/medical/chemistry) "cpJ" = ( /turf/closed/wall/r_wall/rust, /area/quartermaster/office) @@ -57178,6 +57609,29 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/dark, /area/science/robotics/mechbay) +"crg" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/door/airlock/medical/glass{ + name = "Chemistry Lab"; + req_access_txt = "5; 33" + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "crh" = ( /obj/machinery/mass_driver{ dir = 1; @@ -57231,6 +57685,15 @@ }, /turf/open/floor/plating, /area/engine/teg_cold) +"crn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "chem1"; + name = "chem lab shutters" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plating, +/area/medical/chemistry) "cro" = ( /turf/closed/wall/r_wall/rust, /area/maintenance/starboard/aft) @@ -57989,8 +58452,22 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "csK" = ( -/turf/closed/wall/r_wall, -/area/medical/chemistry) +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/window/northright{ + name = "Medbay Desk"; + req_access_txt = "5" + }, +/obj/item/clipboard, +/obj/item/clothing/glasses/hud/health, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/pen, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "csL" = ( /obj/effect/landmark/xmastree/rdrod, /turf/open/floor/carpet{ @@ -58817,16 +59294,14 @@ /turf/open/floor/plating, /area/hallway/primary/aft) "cup" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/closet/secure_closet/chemical, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ +/obj/effect/turf_decal/tile/blue{ dir = 1 }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cuq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -59360,19 +59835,12 @@ /turf/open/floor/plasteel/dark/side, /area/science/robotics/lab) "cvu" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 1 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cvv" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -59687,19 +60155,24 @@ /turf/open/floor/plasteel/dark/side, /area/science/robotics/lab) "cvR" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 26 +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 +/obj/structure/disposalpipe/sorting/mail/flip{ + sortType = 23 }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cvS" = ( /obj/machinery/vending/wardrobe/robo_wardrobe, /turf/open/floor/plasteel/dark, @@ -60024,18 +60497,21 @@ /turf/open/floor/plasteel, /area/engine/workshop) "cws" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/vending/wardrobe/chem_wardrobe, -/obj/effect/turf_decal/trimline/yellow/filled/line, -/obj/effect/turf_decal/trimline/yellow/filled/line{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 6 +/obj/machinery/light_switch{ + pixel_x = -24 }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "cwt" = ( /obj/structure/disposalpipe/segment, @@ -60327,26 +60803,40 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cxf" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/medical/chemistry) +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cxg" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/medical/chemistry) -"cxh" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/trimline/yellow/filled/end{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"cxh" = ( +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "cxi" = ( /obj/structure/rack, @@ -60983,19 +61473,11 @@ /turf/open/floor/plating, /area/maintenance/aft) "cyu" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/closet/wardrobe/chemistry_white{ + anchored = 1 }, -/obj/machinery/camera{ - c_tag = "Aft Maintenance - Port"; - pixel_x = 22 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "cyv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -61059,13 +61541,38 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) "cyB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/sign/poster/official/medical_green_cross{ + pixel_y = 32 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"cyC" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cyD" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -61080,50 +61587,32 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) "cyF" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/structure/closet/secure_closet/chemical, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/medical/chemistry) "cyG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/obj/machinery/chem_master, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "cyH" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Aft Maintenance"; - req_access_txt = "12" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plating, -/area/medical/medbay/lobby) -"cyI" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/aft) +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"cyI" = ( +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cyJ" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -61140,41 +61629,37 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) "cyL" = ( -/obj/structure/closet/cardboard, -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 5 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cyM" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 - }, -/turf/open/floor/plating, -/area/maintenance/aft) -"cyN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/machinery/door/airlock/maintenance{ - name = "Chemistry Maintenance"; - req_access_txt = "5; 33" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/open/floor/plating, -/area/medical/chemistry) +/obj/structure/window/reinforced/spawner, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"cyN" = ( +/obj/machinery/chem_dispenser/apothecary, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "cyO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -61539,15 +62024,22 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/cmo) "czv" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/machinery/door/airlock/medical/glass{ - name = "Chemistry Lab"; - req_access_txt = "5; 33" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -28 + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "czw" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -61595,18 +62087,12 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hor) "czB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance"; - req_access_txt = "5" +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/effect/turf_decal/tile/blue, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "czC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -61640,27 +62126,9 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "czF" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/disposalpipe/sorting/mail/flip{ - sortType = 23 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/structure/cable{ - icon_state = "1-4" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/area/medical/chemistry) "czG" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/showroomfloor, @@ -61710,7 +62178,15 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "czM" = ( -/turf/open/floor/plasteel/dark, +/obj/machinery/requests_console{ + department = "Chemistry"; + departmentType = 2; + name = "Chemistry RC"; + pixel_x = 30; + pixel_y = 0; + receive_ore_updates = 1 + }, +/turf/open/floor/plasteel/white, /area/medical/chemistry) "czN" = ( /obj/structure/closet/crate/trashcart, @@ -61736,12 +62212,12 @@ /turf/open/floor/plating, /area/maintenance/disposal) "czP" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/light/small{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, -/area/medical/chemistry) +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "czQ" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -61818,28 +62294,14 @@ /turf/open/floor/plasteel, /area/maintenance/disposal) "czW" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/turf_decal/tile/purple{ +/obj/structure/chair/office/light{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/obj/machinery/door/airlock/medical/glass{ - name = "Chemistry Lab"; - req_access_txt = "5; 33" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "czX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -61898,17 +62360,11 @@ /turf/open/floor/plasteel, /area/maintenance/disposal) "cAc" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/white, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, /area/medical/medbay/central) "cAd" = ( /obj/structure/disposalpipe/segment, @@ -62033,23 +62489,17 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cAo" = ( -/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/door/window/northright{ - name = "Medbay Desk"; - req_access_txt = "5" +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/obj/item/clipboard, -/obj/item/clothing/glasses/hud/health, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/item/paper/fluff/cogstation/sleepers, -/obj/item/pen, -/obj/item/clothing/glasses/hud/health, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/medical/medbay/central) "cAp" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -64080,6 +64530,40 @@ }, /turf/open/floor/engine, /area/gateway) +"cDL" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Medbay - Apothecary"; + dir = 8; + network = list("ss13","medbay"); + pixel_y = -22 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) +"cDM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/table/glass, +/obj/item/book/manual/wiki/chemistry, +/obj/item/book/manual/wiki/chemistry{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science{ + pixel_x = 2; + pixel_y = 4 + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) "cDN" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -65499,25 +65983,13 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "cFX" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/chem_heater, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 26 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/research{ - name = "Robotics Lab"; - req_access_txt = "29" - }, -/turf/open/floor/plasteel/dark, -/area/router/medsci) +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "cFY" = ( /turf/open/floor/plasteel, /area/router/air) @@ -65985,6 +66457,14 @@ /obj/machinery/portable_atmospherics/pump, /turf/open/floor/engine, /area/science/storage) +"cGI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/chair/office/light, +/obj/effect/landmark/start/chemist, +/turf/open/floor/plasteel, +/area/medical/chemistry) "cGJ" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/stripes/line{ @@ -66054,6 +66534,17 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"cGU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/door/airlock/medical{ + name = "Morgue"; + req_access_txt = "5;6" + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/morgue) "cGV" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/effect/turf_decal/delivery, @@ -66572,6 +67063,19 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) +"cHW" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/delivery, +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright{ + base_state = "left"; + dir = 2; + icon_state = "left"; + name = "Chemistry Desk"; + req_access_txt = "33" + }, +/turf/open/floor/plasteel, +/area/medical/chemistry) "cHX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67895,24 +68399,14 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) "cKi" = ( -/obj/machinery/button/door{ - id = "chem1"; - name = "Shutters Control Button"; - pixel_x = -8; - pixel_y = 24; - req_access_txt = "29" - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 5 - }, -/obj/effect/turf_decal/trimline/yellow/filled/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/airlock/medical{ + name = "Apothecary"; + req_access_txt = "5" }, /turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) +/area/medical/medbay/central) "cKj" = ( /obj/structure/closet/secure_closet/CMO, /obj/effect/turf_decal/tile/blue, @@ -68143,6 +68637,24 @@ /obj/structure/closet/wardrobe/yellow, /turf/open/floor/plasteel, /area/hallway/primary/central) +"cKH" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cKI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -69407,17 +69919,24 @@ /turf/open/floor/plating/airless, /area/router/aux) "cNJ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Medbay - Starboard"; + network = list("ss13","rd") + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cNK" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4 @@ -69499,6 +70018,19 @@ /obj/item/stack/sheet/plasteel/fifty, /turf/open/floor/plating, /area/quartermaster/miningdock/airless) +"cNV" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cNW" = ( /obj/structure/lattice/catwalk, /obj/machinery/camera{ @@ -70192,30 +70724,6 @@ "cPw" = ( /turf/open/floor/plasteel/dark, /area/science/robotics/mechbay) -"cPx" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/official/medical_green_cross{ - pixel_y = 32 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "cPy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -70412,16 +70920,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cPP" = ( -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/yellow/filled/line{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/chemistry) "cPQ" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -94786,7 +95284,7 @@ bYv bYv cio cct -caz +cct bOO cHq cHs @@ -95043,7 +95541,7 @@ cct bYo ckk bYF -bBP +cct bFu bIc btn @@ -95300,7 +95798,7 @@ bYv bYp bYx cPw -bBQ +caz ccd bId cpw @@ -95557,7 +96055,7 @@ bYv bYq cPv bYH -bsM +bYv bDT bIe bYB @@ -95814,7 +96312,7 @@ bYv cgr bYy crf -bsM +bYv bFx bIf bto @@ -96071,7 +96569,7 @@ bYv bYv cwb bYv -bsM +bYv csV bIe bYB @@ -97104,10 +97602,10 @@ bFC bIj ccd bJD -btv -cFX ccm -cOI +coH +bJH +bIk cOI cOI cOI @@ -97361,7 +97859,7 @@ clv bsU ccd bJE -btv +ccm cOx cOA cOE @@ -97618,7 +98116,7 @@ bZT bsU ccd ckb -coH +cdW cOy cOB cOF @@ -97875,7 +98373,7 @@ cum bIj ccd cvS -cOI +bIk cOz cOC cOG @@ -98132,7 +98630,7 @@ bIk bIk ccB bJH -cOI +bIk cGb bRI cOH @@ -99152,7 +99650,7 @@ bRJ bth bTB cek -cAo +csK cKk cKl cKm @@ -100690,9 +101188,9 @@ bXi bXq caQ bXC -bXL -cyF -bst +bvK +bHI +bYK buK bst bst @@ -100947,9 +101445,9 @@ buF bDm bqe ceY -bst -cyG -bst +bwf +bHJ +cbr cDE cDG cEa @@ -101204,9 +101702,9 @@ bbh bbh bqm bqm -cdW -cyG +byw bst +cbr cDF cDJ cKC @@ -101461,9 +101959,9 @@ bbh bpA bXz bqm -cmU -cyG -bst +byD +bHJ +cbs buS cDZ czg @@ -101716,11 +102214,11 @@ ccp cJe bbh bpB -bPw +btv bqm -bsG -cyG -bsG +bzJ +bst +cbK buS bAJ czh @@ -101973,11 +102471,11 @@ ccw csM cyo cyt -bPw -bqm -bqm -cyH -bqm +blU +bqz +bAD +bIi +bBP buS caR czi @@ -102229,18 +102727,18 @@ cIH cgv coE bxM -cyu -cNJ -cyB -cyB -cyI -cyL +bau +bXt +brH +bAE +bIt +cdX buS buS buS buS buS -bFZ +cnz cEZ bJa aKZ @@ -102486,18 +102984,18 @@ cIF cgB bqr bbh +bga +bqs +brJ +bBs +bIL ciQ -bpD -bpD -bpD -bpD -cyM -cyB -cyB -cyB -cyB -czB -czF +cmK +cws +czv +cmU +crg +cvR cFd bEl aMm @@ -102744,17 +103242,17 @@ cgB bqx bbh bPw -bsZ -bsZ -bsZ -bsZ -csK -csK -csK -csK -csK -csK -bHC +bqz +bqz +bzA +bFE +bFG +col +cxh +czB +cnk +bqz +cKH cFe cFk cFm @@ -103001,17 +103499,17 @@ cgB bqr bbh bPw -bsZ -bim -bim -bim -csK -bQp -byw +bqz +bqq bzG -bAC -csK -bHG +bFZ +ckp +com +cyu +czF +cDM +crn +cxf cFf bEl aOF @@ -103258,17 +103756,17 @@ cgB bqr bbh bPw -bsZ -bim -bim -bim -bul -bvK +bqz +brK +bCf +bJd +ckD +cpI +cyF czM -czM -czM -bsN -bHG +cGI +cHW +cxg cFf bJb bJJ @@ -103515,17 +104013,17 @@ cgB bqr bcT bPw -bsZ -bim -bim -bim -bul -bwf -byD -brK -bAE -bsQ -bHE +bqz +bsL +bzG +bFG +clc +bqz +bqz +bqz +bqz +bqz +cNJ cAm cAt cAv @@ -103769,20 +104267,20 @@ bbh bdF cIL ciF -bqz -bcT -bPw -bsZ -bim -bim -bim -bul -cup -cxf -czM -czM +aYG +bdu +biU +brF bsN -bHG +bCg +bHC +cmB +bqz +cyG +czP +bBQ +cKi +cNV cFf bJc bJL @@ -104029,17 +104527,17 @@ ciW bqC bdu bXt -bqs -cnk -cnk -cnk csi -cvu -cxf -cxh -ckD -csK -cPx +bsP +bAC +bHC +bIM +bqz +cyN +czW +cFX +bRI +cyB cFh bJe cRb @@ -104286,17 +104784,17 @@ cjV bdu bdu bXu -bsZ -bim -bim -bim -bul -cws -cxg -czM -bBs -csK -bHI +bqz +bsQ +bCY +bHE +bqz +bqz +bMj +cAc +cov +bMj +cyC cFf btp bJN @@ -104543,17 +105041,17 @@ cgB bTv bcT bQE -bsZ -bim -bim -bim -bul -brH -brJ -czP -czP -czW -cAc +bqz +bqz +bqz +bJf +bqz +caj +cdY +cAo +cdY +cup +cyH cFi bMF bNF @@ -104800,19 +105298,19 @@ cgB bYW bcT bQE -bsZ -bim -bim -bim -csK -cKi -cvR -cPP -bsL -bul -bHJ -bIt -bJf +bsV +bsG +bHD +bHD +bMj +caH +chV +cDL +cox +cvu +cyI +cyL +cyM bJO cKp cHS @@ -105057,16 +105555,16 @@ cgB bbh bbh bQE -bsZ -bim -bim -bim -csK -cyN -csK -bzJ -czv -csK +bsV +bts +bHG +bQp +bMj +cbm +byQ +bHK +cGU +byQ bHK bIu bJh @@ -105314,11 +105812,11 @@ cgB bbh bpm bQE -bsZ -bim -bim -bim -bsZ +bsV +buj +bpD +bXL +bsV cyO byN bzK @@ -105571,11 +106069,11 @@ cmn bWZ bXj bXv -bsZ -bsZ -bsZ -bsZ -bsZ +bsV +bul +bpD +bsV +bsV cyP byQ bzS diff --git a/code/__DEFINES/cooldowns.dm b/code/__DEFINES/cooldowns.dm new file mode 100644 index 0000000000..29c7a25dad --- /dev/null +++ b/code/__DEFINES/cooldowns.dm @@ -0,0 +1,71 @@ +//// COOLDOWN SYSTEMS +/* + * We have 2 cooldown systems: timer cooldowns (divided between stoppable and regular) and world.time cooldowns. + * + * When to use each? + * + * * Adding a commonly-checked cooldown, like on a subsystem to check for processing + * * * Use the world.time ones, as they are cheaper. + * + * * Adding a rarely-used one for special situations, such as giving an uncommon item a cooldown on a target. + * * * Timer cooldown, as adding a new variable on each mob to track the cooldown of said uncommon item is going too far. + * + * * Triggering events at the end of a cooldown. + * * * Timer cooldown, registering to its signal. + * + * * Being able to check how long left for the cooldown to end. + * * * Either world.time or stoppable timer cooldowns, depending on the other factors. Regular timer cooldowns do not support this. + * + * * Being able to stop the timer before it ends. + * * * Either world.time or stoppable timer cooldowns, depending on the other factors. Regular timer cooldowns do not support this. +*/ + + +/* + * Cooldown system based on an datum-level associative lazylist using timers. +*/ + +//INDEXES +#define COOLDOWN_EMPLOYMENT_CABINET "employment cabinet" + + +//TIMER COOLDOWN MACROS + +#define COMSIG_CD_STOP(cd_index) "cooldown_[cd_index]" +#define COMSIG_CD_RESET(cd_index) "cd_reset_[cd_index]" + +#define TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time)) + +#define TIMER_COOLDOWN_CHECK(cd_source, cd_index) LAZYACCESS(cd_source.cooldowns, cd_index) + +#define TIMER_COOLDOWN_END(cd_source, cd_index) LAZYREMOVE(cd_source.cooldowns, cd_index) + +/* + * Stoppable timer cooldowns. + * Use indexes the same as the regular tiemr cooldowns. + * They make use of the TIMER_COOLDOWN_CHECK() and TIMER_COOLDOWN_END() macros the same, just not the TIMER_COOLDOWN_START() one. + * A bit more expensive than the regular timers, but can be reset before they end and the time left can be checked. +*/ + +#define S_TIMER_COOLDOWN_START(cd_source, cd_index, cd_time) LAZYSET(cd_source.cooldowns, cd_index, addtimer(CALLBACK(GLOBAL_PROC, /proc/end_cooldown, cd_source, cd_index), cd_time, TIMER_STOPPABLE)) + +#define S_TIMER_COOLDOWN_RESET(cd_source, cd_index) reset_cooldown(cd_source, cd_index) + +#define S_TIMER_COOLDOWN_TIMELEFT(cd_source, cd_index) (timeleft(TIMER_COOLDOWN_CHECK(cd_source, cd_index))) + + +/* + * Cooldown system based on storing world.time on a variable, plus the cooldown time. + * Better performance over timer cooldowns, lower control. Same functionality. +*/ + +#define COOLDOWN_DECLARE(cd_index) var/##cd_index = 0 + +#define COOLDOWN_START(cd_source, cd_index, cd_time) (cd_source.cd_index = world.time + cd_time) + +//Returns true if the cooldown has run its course, false otherwise +#define COOLDOWN_FINISHED(cd_source, cd_index) (cd_source.cd_index < world.time) + +#define COOLDOWN_RESET(cd_source, cd_index) cd_source.cd_index = 0 + +#define COOLDOWN_TIMELEFT(cd_source, cd_index) (max(0, cd_source.cd_index - world.time)) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 86b518234b..d9a6452f38 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -224,6 +224,11 @@ #define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone) #define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items) +#define COMSIG_LIVING_ACTIVE_BLOCK_START "active_block_start" //from base of mob/living/keybind_start_active_blocking(): (obj/item/blocking_item, list/backup_items) + #define COMPONENT_PREVENT_BLOCK_START 1 +#define COMSIG_LIVING_ACTIVE_PARRY_START "active_parry_start" //from base of mob/living/initiate_parry_sequence(): (parrying_method, datum/parrying_item_mob_or_art, list/backup_items) + #define COMPONENT_PREVENT_PARRY_START 1 + //ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS! #define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore) #define COMSIG_LIVING_STATUS_KNOCKDOWN "living_knockdown" //from base of mob/living/Knockdown() (amount, update, ignore) diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 5a26feb624..0e8e34d20e 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -115,3 +115,7 @@ //these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified. #define PLANT_GENE_REMOVABLE (1<<0) #define PLANT_GENE_EXTRACTABLE (1<<1) + +#define CLONEPOD_GET_MIND 1 +#define CLONEPOD_POLL_MIND 2 +#define CLONEPOD_NO_MIND 3 \ No newline at end of file diff --git a/code/__DEFINES/skills/defines.dm b/code/__DEFINES/skills/defines.dm index 60d2321927..47aaeeb1dc 100644 --- a/code/__DEFINES/skills/defines.dm +++ b/code/__DEFINES/skills/defines.dm @@ -8,12 +8,6 @@ /// Levels #define SKILL_PROGRESSION_LEVEL 4 - -/// Max value of skill for numerical skills -#define SKILL_NUMERICAL_MAX 100 -/// Min value of skill for numerical skills -#define SKILL_NUMERICAL_MIN 0 - // Standard values for job starting skills #define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX @@ -26,6 +20,13 @@ #define DEF_SKILL_GAIN 1 #define SKILL_GAIN_SURGERY_PER_STEP 0.25 +#define STD_USE_TOOL_MULT 1 +#define EASY_USE_TOOL_MULT 0.75 +#define TRIVIAL_USE_TOOL_MULT 0.5 +#define BARE_USE_TOOL_MULT 0.25 + +//multiplier of the difference of max_value and min_value. Mostly for balance purposes between numerical and level-based skills. +#define STD_NUM_SKILL_ITEM_GAIN_MULTI 0.002 //An extra point for each few seconds of delay when using a tool. Before the multiplier. #define SKILL_GAIN_DELAY_DIVISOR 3 SECONDS diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 106db7f40a..bef06a69e9 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -123,7 +123,7 @@ if(totitemdamage) totitemdamage = user.mind.item_action_skills_mod(I, totitemdamage, I.skill_difficulty, SKILL_ATTACK_OBJ, bad_trait) for(var/skill in I.used_skills) - if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_OBJ)) + if(!(SKILL_TRAIN_ATTACK_OBJ in I.used_skills[skill])) continue user.mind.auto_gain_experience(skill, I.skill_gain) @@ -192,9 +192,10 @@ if(.) . = user.mind.item_action_skills_mod(I, ., I.skill_difficulty, SKILL_ATTACK_MOB, bad_trait) for(var/skill in I.used_skills) - if(!(I.used_skills[skill] & SKILL_TRAIN_ATTACK_MOB)) + if(!(SKILL_TRAIN_ATTACK_MOB in I.used_skills[skill])) continue - user.mind.auto_gain_experience(skill, I.skill_gain) + var/datum/skill/S = GLOB.skill_datums[skill] + user.mind.auto_gain_experience(skill, I.skill_gain*S.item_skill_gain_multi) // Proximity_flag is 1 if this afterattack was called on something adjacent, in your square, or on your person. // Click parameters is the params string from byond Click() code, see that documentation. diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 6cf01ec8ff..f95ebf82b5 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -102,9 +102,8 @@ //stops TK grabs being equipped anywhere but into hands /obj/item/tk_grab/equipped(mob/user, slot) if(slot == SLOT_HANDS) - return + return ..() qdel(src) - return /obj/item/tk_grab/examine(user) if (focus) diff --git a/code/controllers/configuration/entries/comms.dm b/code/controllers/configuration/entries/comms.dm index 012c3ec9fe..e56ff3f0d1 100644 --- a/code/controllers/configuration/entries/comms.dm +++ b/code/controllers/configuration/entries/comms.dm @@ -25,4 +25,23 @@ /datum/config_entry/string/medal_hub_address /datum/config_entry/string/medal_hub_password - protection = CONFIG_ENTRY_HIDDEN \ No newline at end of file + protection = CONFIG_ENTRY_HIDDEN + +/datum/config_entry/keyed_list/cross_server_bunker_override + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_TEXT + protection = CONFIG_ENTRY_LOCKED + +/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateAndSet(str_val) + . = ..() + if(.) + var/list/newv = list() + for(var/I in config_entry_value) + newv[replacetext(I, "+", " ")] = config_entry_value[I] + config_entry_value = newv + +/datum/config_entry/keyed_list/cross_server_bunker_override/ValidateListEntry(key_name, key_value) + return key_value != "byond:\\address:port" && ..() + +/datum/config_entry/flag/allow_cross_server_bunker_override + protection = CONFIG_ENTRY_LOCKED diff --git a/code/datums/components/crafting/guncrafting.dm b/code/datums/components/crafting/guncrafting.dm index 4626ef69d1..deab5e9b69 100644 --- a/code/datums/components/crafting/guncrafting.dm +++ b/code/datums/components/crafting/guncrafting.dm @@ -1,4 +1,4 @@ -k// PARTS // +// PARTS // /obj/item/weaponcrafting icon = 'icons/obj/improvised.dmi' @@ -8,61 +8,33 @@ k// PARTS // custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 6) icon_state = "riflestock" -/obj/item/weaponcrafting/durathread_string - name = "durathread string" - desc = "A long piece of durathread with some resemblance to cable coil." +/obj/item/weaponcrafting/string + name = "wound thread" + desc = "A long piece of thread with some resemblance to cable coil." icon_state = "durastring" //////////////////////////////// -// KAT IMPROVISED WEAPON PARTS// +// IMPROVISED WEAPON PARTS// //////////////////////////////// /obj/item/weaponcrafting/improvised_parts - name = "Eerie bunch of coloured dots." - desc = "You feel the urge to report to Central that the parent type of guncrafting, which should never appear in this reality, has appeared. Whatever that means." + name = "Debug Improvised Gun Part" + desc = "A badly coded gun part. You should report coders if you see this." icon = 'icons/obj/guns/gun_parts.dmi' icon_state = "palette" -// BARRELS - -/obj/item/weaponcrafting/improvised_parts/barrel_rifle - name = "rifle barrel" - desc = "A pipe with a diameter just the right size to fire 7.62 rounds out of." - icon_state = "barrel_rifle" - -/obj/item/weaponcrafting/improvised_parts/barrel_shotgun - name = "shotgun barrel" - desc = "A twenty bore shotgun barrel." - icon_state = "barrel_shotgun" - -/obj/item/weaponcrafting/improvised_parts/barrel_pistol - name = "pistol barrel" - desc = "A pipe with a small diameter and some holes finely cut into it. It fits .32 ACP bullets. Probably." - icon_state = "barrel_pistol" - w_class = WEIGHT_CLASS_SMALL - // RECEIVERS /obj/item/weaponcrafting/improvised_parts/rifle_receiver - name = "bolt action receiver" - desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle. It's generic enough to modify to create other rifles, potentially." + name = "rifle receiver" + desc = "A crudely constructed receiver to create an improvised bolt-action breechloaded rifle." // removed some text implying that the item had more uses than it does icon_state = "receiver_rifle" w_class = WEIGHT_CLASS_SMALL -/obj/item/weaponcrafting/improvised_parts/pistol_receiver - name = "pistol receiver" - desc = "A receiver to connect house and connects all the parts to make an improvised pistol." - icon_state = "receiver_pistol" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weaponcrafting/improvised_parts/laser_receiver - name = "energy emitter assembly" - desc = "A mixture of components haphazardly wired together to form an energy emitter." - icon_state = "laser_assembly" /obj/item/weaponcrafting/improvised_parts/shotgun_receiver - name = "break-action assembly" - desc = "An improvised receiver to create a break-action breechloaded shotgun. Parts of this are still useful if you want to make another type of shotgun, however." + name = "shotgun reciever" + desc = "An improvised receiver to create a break-action breechloaded shotgun." // removed some text implying that the item had more uses than it does icon_state = "receiver_shotgun" w_class = WEIGHT_CLASS_SMALL @@ -78,15 +50,3 @@ k// PARTS // name = "wooden firearm body" desc = "A crudely fashioned wooden body to help keep higher calibre improvised weapons from blowing themselves apart." icon_state = "wooden_body" - -/obj/item/weaponcrafting/improvised_parts/wooden_grip - name = "wooden pistol grip" - desc = "A nice wooden grip hollowed out for pistol magazines." - icon_state = "wooden_pistolgrip" - w_class = WEIGHT_CLASS_SMALL - -/obj/item/weaponcrafting/improvised_parts/makeshift_lens - name = "makeshift focusing lens" - desc = "A properly made lens made with actual glassworking tools would perform much better, but this will have to do." - icon_state = "focusing_lens" - w_class = WEIGHT_CLASS_TINY diff --git a/code/datums/components/crafting/recipes/recipes_primal.dm b/code/datums/components/crafting/recipes/recipes_primal.dm index e646d24018..aaae94df1d 100644 --- a/code/datums/components/crafting/recipes/recipes_primal.dm +++ b/code/datums/components/crafting/recipes/recipes_primal.dm @@ -103,7 +103,7 @@ /datum/crafting_recipe/bone_bow name = "Bone Bow" result = /obj/item/gun/ballistic/bow/ashen - time = 200 + time = 120 // 80+120 = 200 always_availible = FALSE reqs = list(/obj/item/stack/sheet/bone = 8, /obj/item/stack/sheet/sinew = 4) @@ -112,7 +112,7 @@ /datum/crafting_recipe/bow_tablet name = "Sandstone Bow Making Manual" result = /obj/item/book/granter/crafting_recipe/bone_bow - time = 600 //Scribing + time = 200 //Scribing // don't care always_availible = FALSE reqs = list(/obj/item/stack/rods = 1, /obj/item/stack/sheet/mineral/sandstone = 4) diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index 177f6fb2b6..ec8ea86d24 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -192,8 +192,8 @@ result = /obj/item/gun/ballistic/bow/pipe reqs = list(/obj/item/pipe = 5, /obj/item/stack/sheet/plastic = 15, - /obj/item/weaponcrafting/durathread_string = 5) - time = 450 + /obj/item/weaponcrafting/string = 5) + time = 150 category = CAT_WEAPONRY subcategory = CAT_WEAPON @@ -248,10 +248,10 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ishotgun +/datum/crafting_recipe/ishotgun // smaller and more versatile gun requires some better materials name = "Improvised Shotgun" result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_shotgun = 1, + reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks /obj/item/weaponcrafting/improvised_parts/shotgun_receiver = 1, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, @@ -262,10 +262,10 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/irifle +/datum/crafting_recipe/irifle // larger and less versatile gun, but a bit easier to make name = "Improvised Rifle (7.62mm)" result = /obj/item/gun/ballistic/shotgun/boltaction/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_rifle = 1, + reqs = list(/obj/item/pipe = 2, // above /obj/item/weaponcrafting/improvised_parts/rifle_receiver = 1, /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, /obj/item/weaponcrafting/improvised_parts/wooden_body = 1, @@ -276,49 +276,6 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ipistol - name = "Improvised Pistol (.32)" - result = /obj/item/gun/ballistic/automatic/pistol/improvised/nomag - reqs = list(/obj/item/weaponcrafting/improvised_parts/barrel_pistol = 1, - /obj/item/weaponcrafting/improvised_parts/pistol_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/wooden_grip = 1, - /obj/item/stack/sheet/plastic = 15, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_WIRECUTTER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser - name = "Improvised Energy Gun" - result = /obj/item/gun/energy/e_gun/old/improvised - reqs = list(/obj/item/weaponcrafting/improvised_parts/laser_receiver = 1, - /obj/item/weaponcrafting/improvised_parts/trigger_assembly = 1, - /obj/item/weaponcrafting/improvised_parts/makeshift_lens = 1, - /obj/item/stock_parts/cell = 1, - /obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 5, - /obj/item/stack/cable_coil = 10) - tools = list(TOOL_SCREWDRIVER) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - -/datum/crafting_recipe/ilaser/upgraded - name = "Improvised Energy Gun Upgrade" - result = /obj/item/gun/energy/e_gun/old/improvised/upgraded - reqs = list(/obj/item/gun/energy/e_gun/old/improvised = 1, - /obj/item/glasswork/glass_base/lens = 1, - /obj/item/stock_parts/capacitor/quadratic = 2, - /obj/item/stock_parts/micro_laser/ultra = 1, - /obj/item/stock_parts/cell/bluespace = 1, - /obj/item/stack/cable_coil = 5) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL) - time = 100 - category = CAT_WEAPONRY - subcategory = CAT_WEAPON - ////////////////// ///AMMO CRAFTING// ////////////////// @@ -326,9 +283,9 @@ /datum/crafting_recipe/arrow name = "Arrow" result = /obj/item/ammo_casing/caseless/arrow/wood - time = 30 + time = 5 // these only do 15 damage reqs = list(/obj/item/stack/sheet/mineral/wood = 1, - /obj/item/stack/sheet/durathread = 1, + /obj/item/stack/sheet/cloth = 1, /obj/item/stack/rods = 1) // 1 metal sheet = 2 rods = 2 arrows category = CAT_WEAPONRY subcategory = CAT_AMMO @@ -336,7 +293,7 @@ /datum/crafting_recipe/bone_arrow name = "Bone Arrow" result = /obj/item/ammo_casing/caseless/arrow/bone - time = 30 + time = 5 always_availible = FALSE reqs = list(/obj/item/stack/sheet/bone = 1, /obj/item/stack/sheet/sinew = 1, @@ -348,7 +305,7 @@ name = "Ashen Arrow" result = /obj/item/ammo_casing/caseless/arrow/ash tools = list(TOOL_WELDER) - time = 30 + time = 10 // 1.5 seconds minimum per actually worthwhile arrow excluding interface lag always_availible = FALSE reqs = list(/obj/item/ammo_casing/caseless/arrow/wood = 1) category = CAT_WEAPONRY @@ -442,92 +399,28 @@ category = CAT_WEAPONRY subcategory = CAT_AMMO -/datum/crafting_recipe/m32acp - name = ".32ACP Empty Magazine" - result = /obj/item/ammo_box/magazine/m32acp/empty - reqs = list(/obj/item/stack/sheet/metal = 3, - /obj/item/stack/sheet/plasteel = 1, - /obj/item/stack/packageWrap = 1) - tools = list(TOOL_WELDER,TOOL_SCREWDRIVER) - time = 5 - category = CAT_WEAPONRY - subcategory = CAT_AMMO - //////////////////// // PARTS CRAFTING // //////////////////// -// BARRELS - -/datum/crafting_recipe/rifle_barrel - name = "Improvised Rifle Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_rifle - reqs = list(/obj/item/pipe = 2) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/shotgun_barrel - name = "Improvised Shotgun Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_shotgun - reqs = list(/obj/item/pipe = 2) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/pistol_barrel - name = "Improvised Pistol Barrel" - result = /obj/item/weaponcrafting/improvised_parts/barrel_pistol - reqs = list(/obj/item/pipe = 1, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_WELDER,TOOL_SAW) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - // RECEIVERS /datum/crafting_recipe/rifle_receiver name = "Improvised Rifle Receiver" result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 1) + reqs = list(/obj/item/stack/sheet/metal = 15) // you can carry multiple shotguns tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 50 + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS /datum/crafting_recipe/shotgun_receiver name = "Improvised Shotgun Receiver" result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) // Dual wielding has been removed, plasteel is a soft timesink to obtain for most to make mass production harder. - time = 50 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/pistol_receiver - name = "Improvised Pistol Receiver" - result = /obj/item/weaponcrafting/improvised_parts/pistol_receiver - reqs = list(/obj/item/stack/sheet/metal = 5, - /obj/item/stack/sheet/plasteel = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_WELDER, TOOL_SAW) - time = 50 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/laser_receiver - name = "Energy Weapon Assembly" - result = /obj/item/weaponcrafting/improvised_parts/laser_receiver - reqs = list(/obj/item/stack/sheet/metal = 10, - /obj/item/stock_parts/capacitor = 2, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/assembly/prox_sensor = 1) - tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL, TOOL_WELDER) // Prox sensor and multitool for the circuit board, welder for extremely ghetto soldering. - time = 150 + reqs = list(/obj/item/stack/sheet/metal = 15, + /obj/item/stack/sheet/plasteel = 1) // requires access or hacking since shotgun is better + tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS @@ -539,16 +432,6 @@ reqs = list(/obj/item/stack/sheet/metal = 3, /obj/item/assembly/igniter = 1) tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 150 - category = CAT_WEAPONRY - subcategory = CAT_PARTS - -/datum/crafting_recipe/makeshift_lens - name = "Makeshift Lens" - result = /obj/item/weaponcrafting/improvised_parts/makeshift_lens - reqs = list(/obj/item/stack/sheet/metal = 1, - /obj/item/stack/sheet/glass = 2) - tools = list(TOOL_WELDER) // Glassmaking lets you make non-makeshift lenses. - time = 50 + time = 25 category = CAT_WEAPONRY subcategory = CAT_PARTS diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 6202ac444e..7756cfd906 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -39,6 +39,9 @@ /// A weak reference to another datum var/datum/weakref/weak_reference + ///Lazy associative list of currently active cooldowns. + var/list/cooldowns + #ifdef TESTING var/running_find_references var/last_find_references = 0 @@ -201,3 +204,34 @@ qdel(D) else return returned + +/** + * Callback called by a timer to end an associative-list-indexed cooldown. + * + * Arguments: + * * source - datum storing the cooldown + * * index - string index storing the cooldown on the cooldowns associative list + * + * This sends a signal reporting the cooldown end. + */ +/proc/end_cooldown(datum/source, index) + if(QDELETED(source)) + return + SEND_SIGNAL(source, COMSIG_CD_STOP(index)) + TIMER_COOLDOWN_END(source, index) + + +/** + * Proc used by stoppable timers to end a cooldown before the time has ran out. + * + * Arguments: + * * source - datum storing the cooldown + * * index - string index storing the cooldown on the cooldowns associative list + * + * This sends a signal reporting the cooldown end, passing the time left as an argument. + */ +/proc/reset_cooldown(datum/source, index) + if(QDELETED(source)) + return + SEND_SIGNAL(source, COMSIG_CD_RESET(index), S_TIMER_COOLDOWN_TIMELEFT(source, index)) + TIMER_COOLDOWN_END(source, index) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index ed5104e296..80059bece7 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -678,7 +678,7 @@ holder.update_transform() var/danger = CONFIG_GET(number/threshold_body_size_slowdown) if(features["body_size"] < danger) - var/slowdown = 1 + round(danger/features["body_size"], 0.1) * CONFIG_GET(number/body_size_slowdown_multiplier) + var/slowdown = (1 - round(features["body_size"] / danger, 0.1)) * CONFIG_GET(number/body_size_slowdown_multiplier) holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown) else if(old_size < danger) holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride) diff --git a/code/datums/martial/boxing.dm b/code/datums/martial/boxing.dm index e3c7726d61..4682595aec 100644 --- a/code/datums/martial/boxing.dm +++ b/code/datums/martial/boxing.dm @@ -58,12 +58,10 @@ var/datum/martial_art/boxing/style = new /obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) + . = ..() + if(ishuman(user) && slot == SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,TRUE) - return /obj/item/clothing/gloves/boxing/dropped(mob/user) . = ..() diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 50438d9d8d..c2fe24a20d 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -196,9 +196,8 @@ var/datum/martial_art/krav_maga/style = new /obj/item/clothing/gloves/krav_maga/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_GLOVES) + . = ..() + if(ishuman(user) && slot == SLOT_GLOVES) var/mob/living/carbon/human/H = user style.teach(H,1) diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index 87fcf78964..18fd8e7b18 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -377,7 +377,7 @@ var/turf/ST = null var/falling = 0 var/damage = damage_roll(A,D) - + for (var/obj/O in oview(1, A)) if (O.density == 1) if (O == A) @@ -472,12 +472,10 @@ var/datum/martial_art/wrestling/style = new /obj/item/storage/belt/champion/wrestling/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_BELT) + . = ..() + if(ishuman(user) && slot == SLOT_BELT) var/mob/living/carbon/human/H = user style.teach(H,1) - return /obj/item/storage/belt/champion/wrestling/dropped(mob/user) . = ..() diff --git a/code/datums/skills/_check_skills.dm b/code/datums/skills/_check_skills.dm index 2421bd36ff..d02a716b8a 100644 --- a/code/datums/skills/_check_skills.dm +++ b/code/datums/skills/_check_skills.dm @@ -40,7 +40,7 @@ . = list() .["playername"] = owner.name .["see_skill_mods"] = see_skill_mods - .["admin"] = check_rights(R_DEBUG) + .["admin"] = check_rights(R_DEBUG, FALSE) /datum/skill_holder/ui_act(action, params) . = ..() diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm index e3f1d00ae6..eecf416b1b 100644 --- a/code/datums/skills/_skill.dm +++ b/code/datums/skills/_skill.dm @@ -33,6 +33,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums()) var/base_multiplier = 1 /// Value added to the base multiplier depending on overall competency compared to maximum value/level. var/competency_multiplier = 1 + /// Experience gain multiplier gained from using items. + var/item_skill_gain_multi = 1 + /// Skill gain quantisation + var/skill_gain_quantisation = 0.1 /// A list of ways this skill can affect or be affected through actions and skill modifiers. var/list/skill_traits = list(SKILL_SANITY, SKILL_INTELLIGENCE) /// Index of this skill in the UI @@ -108,6 +112,10 @@ GLOBAL_LIST_INIT_TYPED(skill_datums, /datum/skill, init_skill_datums()) /// Min value of this skill var/min_value = 0 +/datum/skill/numerical/New() + ..() + skill_gain_quantisation = item_skill_gain_multi = item_skill_gain_multi * (max_value - min_value) * STD_NUM_SKILL_ITEM_GAIN_MULTI + /datum/skill/numerical/sanitize_value(new_value) return clamp(new_value, min_value, max_value) diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm index 8357211463..73748417c3 100644 --- a/code/datums/skills/_skill_holder.dm +++ b/code/datums/skills/_skill_holder.dm @@ -91,10 +91,10 @@ CRASH("Invalid set_skill_value call. Use skill typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this. var/datum/skill/S = GLOB.skill_datums[skill] value = S.sanitize_value(value) - skill_holder.need_static_data_update = TRUE if(!isnull(value)) LAZYINITLIST(skill_holder.skills) S.set_skill_value(skill_holder, value, src, silent) + skill_holder.need_static_data_update = TRUE return TRUE return FALSE @@ -120,11 +120,9 @@ CRASH("You cannot auto increment a non numerical(experience skill!") var/current = get_skill_value(skill, FALSE) var/affinity = get_skill_affinity(skill) - var/target_value = current + (value * affinity) - if(maximum) - target_value = min(target_value, maximum) - if(target_value == maximum) //no more experience to gain, early return. - return + var/target_value = round(current + (value * affinity), S.skill_gain_quantisation) + if(maximum && target_value >= maximum) //no more experience to gain, early return. + return boost_skill_value_to(skill, target_value, silent, current) /** diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 30699d36f4..261e423640 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -74,6 +74,25 @@ for(var/client/C in GLOB.clients) C.AnnouncePR(final_composed) +/datum/world_topic/auto_bunker_passthrough + keyword = "auto_bunker_override" + require_comms_key = TRUE + +/datum/world_topic/auto_bunker_passthrough/Run(list/input) + if(!CONFIG_GET(flag/allow_cross_server_bunker_override)) + return "Function Disabled" + var/ckeytobypass = input["ckey"] + var/is_new_ckey = !(ckey(ckeytobypass) in GLOB.bunker_passthrough) + var/sender = input["source"] || "UNKNOWN" + GLOB.bunker_passthrough |= ckey(ckeytobypass) + GLOB.bunker_passthrough[ckey(ckeytobypass)] = world.realtime + SSpersistence.SavePanicBunker() //we can do this every time, it's okay + if(!is_new_ckey) + log_admin("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + message_admins("AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + send2irc("Panic Bunker", "AUTO BUNKER: [ckeytobypass] given access (incoming comms from [sender]).") + return "Success" + /datum/world_topic/ahelp_relay keyword = "Ahelp" require_comms_key = TRUE diff --git a/code/game/atoms.dm b/code/game/atoms.dm index fedbeb97c0..bbd38e9021 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -436,7 +436,7 @@ var/blood_id = get_blood_id() if(!(blood_id in GLOB.blood_reagent_types)) return - return list("color" = list(BLOOD_COLOR_HUMAN), "ANIMAL DNA" = "Y-") + return list("color" = BLOOD_COLOR_HUMAN, "ANIMAL DNA" = "Y-") /mob/living/carbon/get_blood_dna_list() var/blood_id = get_blood_id() @@ -444,15 +444,15 @@ return var/list/blood_dna = list() if(dna) - blood_dna["color"] = list(dna.species.exotic_blood_color) //so when combined, the list grows with the number of colors + blood_dna["color"] = dna.species.exotic_blood_color //so when combined, the list grows with the number of colors blood_dna[dna.unique_enzymes] = dna.blood_type else - blood_dna["color"] = list(BLOOD_COLOR_HUMAN) + blood_dna["color"] = BLOOD_COLOR_HUMAN blood_dna["UNKNOWN DNA"] = "X*" return blood_dna /mob/living/carbon/alien/get_blood_dna_list() - return list("color" = list(BLOOD_COLOR_XENO), "UNKNOWN DNA" = "X*") + return list("color" = BLOOD_COLOR_XENO, "UNKNOWN DNA" = "X*") //to add a mob's dna info into an object's blood_DNA list. /atom/proc/transfer_mob_blood_dna(mob/living/L) @@ -461,25 +461,35 @@ if(!new_blood_dna) return FALSE LAZYINITLIST(blood_DNA) //if our list of DNA doesn't exist yet, initialise it. - LAZYINITLIST(blood_DNA["color"]) var/old_length = blood_DNA.len blood_DNA |= new_blood_dna - blood_DNA["color"] += new_blood_dna["color"] + var/changed = FALSE + if(!blood_DNA["color"]) + blood_DNA["color"] = new_blood_dna["color"] + changed = TRUE + else + var/old = blood_DNA["color"] + blood_DNA["color"] = BlendRGB(blood_DNA["color"], new_blood_dna["color"]) + changed = old != blood_DNA["color"] if(blood_DNA.len == old_length) return FALSE - return TRUE + return changed //to add blood dna info to the object's blood_DNA list /atom/proc/transfer_blood_dna(list/blood_dna, list/datum/disease/diseases) LAZYINITLIST(blood_DNA) - LAZYINITLIST(blood_dna["color"]) var/old_length = blood_DNA.len blood_DNA |= blood_dna if(blood_DNA.len > old_length) - blood_DNA["color"] += blood_dna["color"] - return TRUE + . = TRUE //some new blood DNA was added + if(!blood_dna["color"]) + return + if(!blood_DNA["color"]) + blood_DNA["color"] = blood_dna["color"] + else + blood_DNA["color"] = BlendRGB(blood_DNA["color"], blood_dna["color"]) //to add blood from a mob onto something, and transfer their dna info /atom/proc/add_mob_blood(mob/living/M) @@ -548,27 +558,7 @@ return TRUE /atom/proc/blood_DNA_to_color() - var/list/colors = list()//first we make a list of all bloodtypes present - for(var/blood_color in blood_DNA["color"]) - if(colors[blood_color]) - colors[blood_color]++ - else - colors[blood_color] = 1 - - var/final_rgb = BLOOD_COLOR_HUMAN //a default so we don't have white blood graphics if something messed up - if(colors.len) - var/sum = 0 //this is all shitcode, but it works; trust me - final_rgb = colors[1] - sum = colors[colors[1]] - if(colors.len > 1) - var/i = 2 - while(i <= colors.len) - var/tmp = colors[colors[i]] - final_rgb = BlendRGB(final_rgb, colors[i], tmp/(tmp+sum)) - sum += tmp - i++ - - return final_rgb + return (blood_DNA && blood_DNA["color"]) || BLOOD_COLOR_HUMAN /atom/proc/clean_blood() . = blood_DNA? TRUE : FALSE diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 3b95b1281f..6312dc08a4 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -201,10 +201,13 @@ GLOBAL_LIST_EMPTY(objectives) return won || ..() /datum/objective/assassinate/once/process() - won = check_completion() + won = check_midround_completion() if(won) STOP_PROCESSING(SSprocessing,src) +/datum/objective/assassinate/once/proc/check_midround_completion() + return won || !considered_alive(target) //The target afking / logging off for a bit during the round doesn't complete it, but them being afk at roundend does. + /datum/objective/assassinate/internal var/stolen = 0 //Have we already eliminated this target? diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 9afe4808fd..6f798a41ef 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -26,6 +26,7 @@ var/efficiency var/datum/mind/clonemind + var/get_clone_mind = CLONEPOD_GET_MIND var/grab_ghost_when = CLONER_MATURE_CLONE var/internal_radio = TRUE @@ -134,43 +135,44 @@ return examine(user) //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas) +/obj/machinery/clonepod/proc/growclone(ckey, clonename, ui, mutation_index, mindref, blood_type, datum/species/mrace, list/features, factions, list/quirks, datum/bank_account/insurance, list/traumas) if(panel_open) return FALSE if(mess || attempting) return FALSE - clonemind = locate(mindref) in SSticker.minds - if(!istype(clonemind)) //not a mind - return FALSE - if(!QDELETED(clonemind.current)) - if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body + if(get_clone_mind == CLONEPOD_GET_MIND) + clonemind = locate(mindref) in SSticker.minds + if(!istype(clonemind)) //not a mind return FALSE - if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding. + if(!QDELETED(clonemind.current)) + if(clonemind.current.stat != DEAD) //mind is associated with a non-dead body + return FALSE + if(clonemind.current.suiciding) // Mind is associated with a body that is suiciding. + return FALSE + if(AmBloodsucker(clonemind.current)) //If the mind is a bloodsucker + return FALSE + if(clonemind.active) //somebody is using that mind + if( ckey(clonemind.key)!=ckey ) + return FALSE + else + // get_ghost() will fail if they're unable to reenter their body + var/mob/dead/observer/G = clonemind.get_ghost() + if(!G) + return FALSE + if(G.suiciding) // The ghost came from a body that is suiciding. + return FALSE + if(clonemind.damnation_type) //Can't clone the damned. + INVOKE_ASYNC(src, .proc/horrifyingsound) + mess = TRUE + update_icon() return FALSE - if(AmBloodsucker(clonemind.current)) //If the mind is a bloodsucker - return FALSE - if(clonemind.active) //somebody is using that mind - if( ckey(clonemind.key)!=ckey ) - return FALSE - else - // get_ghost() will fail if they're unable to reenter their body - var/mob/dead/observer/G = clonemind.get_ghost() - if(!G) - return FALSE - if(G.suiciding) // The ghost came from a body that is suiciding. - return FALSE - if(clonemind.damnation_type) //Can't clone the damned. - INVOKE_ASYNC(src, .proc/horrifyingsound) - mess = TRUE - update_icon() - return FALSE current_insurance = insurance attempting = TRUE //One at a time!! countdown.start() var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) - H.hardset_dna(ui, mutation_index, H.real_name, null, mrace, features) + H.hardset_dna(ui, mutation_index, H.real_name, blood_type, mrace, features) H.easy_randmut(NEGATIVE+MINOR_NEGATIVE) //100% bad mutation. Can be cured with mutadone. @@ -192,7 +194,14 @@ ADD_TRAIT(H, TRAIT_NOCRITDAMAGE, CLONING_POD_TRAIT) H.Unconscious(80) - clonemind.transfer_to(H) + if(clonemind) + clonemind.transfer_to(H) + + else if(get_clone_mind == CLONEPOD_POLL_MIND) + var/list/candidates = pollCandidatesForMob("Do you want to play as [clonename]'s defective clone? (Don't ERP without permission from the original)", null, null, null, 100, H, POLL_IGNORE_CLONE) + if(LAZYLEN(candidates)) + var/mob/C = pick(candidates) + H.key = C.key if(grab_ghost_when == CLONER_FRESH_CLONE) H.grab_ghost() @@ -549,6 +558,17 @@ . += "cover-on" . += "panel" +//Experimental cloner; clones a body regardless of the owner's status, letting a ghost control it instead +/obj/machinery/clonepod/experimental + name = "experimental cloning pod" + desc = "An ancient cloning pod. It seems to be an early prototype of the experimental cloners used in Nanotrasen Stations." + icon = 'icons/obj/machines/cloning.dmi' + icon_state = "pod_0" + req_access = null + circuit = /obj/item/circuitboard/machine/clonepod/experimental + internal_radio = FALSE + get_clone_mind = CLONEPOD_POLL_MIND + /* * Manual -- A big ol' manual. */ diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 7834d6f2a2..400ce041c7 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -8,6 +8,7 @@ circuit = /obj/item/circuitboard/computer/cloning req_access = list(ACCESS_HEADS) //ONLY USED FOR RECORD DELETION RIGHT NOW. var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning. + var/clonepod_type = /obj/machinery/clonepod var/list/pods //Linked cloning pods var/temp = "Inactive" var/scantemp_ckey @@ -17,6 +18,7 @@ var/obj/item/disk/data/diskette = null //Mostly so the geneticist can steal everything. var/loading = 0 // Nice loading text var/autoprocess = 0 + var/use_records = TRUE // Old experimental cloner. var/list/records = list() light_color = LIGHT_COLOR_BLUE @@ -36,29 +38,32 @@ return ..() /obj/machinery/computer/cloning/proc/GetAvailablePod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && pod.clonemind == mind) - return null - if(pod.is_operational() && !(pod.occupant || pod.mess)) - return pod + if(!pods) + return + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.occupant && pod.get_clone_mind == CLONEPOD_GET_MIND && pod.clonemind == mind) + return null + if(pod.is_operational() && !(pod.occupant || pod.mess)) + return pod /obj/machinery/computer/cloning/proc/HasEfficientPod() - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.is_operational() && pod.efficiency > 5) - return TRUE + if(!pods) + return + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.is_operational() && pod.efficiency > 5) + return TRUE /obj/machinery/computer/cloning/proc/GetAvailableEfficientPod(mind = null) - if(pods) - for(var/P in pods) - var/obj/machinery/clonepod/pod = P - if(pod.occupant && pod.clonemind == mind) - return pod - else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5) - . = pod + if(!pods) + return + for(var/P in pods) + var/obj/machinery/clonepod/pod = P + if(pod.occupant && pod.clonemind == mind) + return pod + else if(!. && pod.is_operational() && !(pod.occupant || pod.mess) && pod.efficiency > 5) + . = pod /obj/machinery/computer/cloning/process() if(!(scanner && LAZYLEN(pods) && autoprocess)) @@ -73,7 +78,7 @@ if(pod.occupant) continue //how though? - if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"])) + if(pod.growclone(R.fields["ckey"], R.fields["name"], R.fields["UI"], R.fields["SE"], R.fields["mind"], R.fields["blood_type"], R.fields["mrace"], R.fields["features"], R.fields["factions"], R.fields["quirks"], R.fields["bank_account"], R.fields["traumas"])) temp = "[R.fields["name"]] => Cloning cycle in progress..." records -= R @@ -103,12 +108,10 @@ return null /obj/machinery/computer/cloning/proc/findcloner() - var/obj/machinery/clonepod/podf = null - + var/obj/machinery/clonepod/podf for(var/direction in GLOB.cardinals) - - podf = locate(/obj/machinery/clonepod, get_step(src, direction)) - if (!isnull(podf) && podf.is_operational()) + podf = locate(clonepod_type, get_step(src, direction)) + if(podf?.is_operational()) AttachCloner(podf) /obj/machinery/computer/cloning/proc/AttachCloner(obj/machinery/clonepod/pod) @@ -132,7 +135,7 @@ else if(istype(W, /obj/item/multitool)) var/obj/item/multitool/P = W - if(istype(P.buffer, /obj/machinery/clonepod)) + if(istype(P.buffer, clonepod_type)) if(get_area(P.buffer) != get_area(src)) to_chat(user, "-% Cannot link machines across power zones. Buffer cleared %-") P.buffer = null @@ -157,13 +160,14 @@ var/dat = "" dat += "Refresh" - if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL) - if(!autoprocess) - dat += "Autoclone" + if(use_records) + if(scanner && HasEfficientPod() && scanner.scan_level >= AUTOCLONING_MINIMAL_LEVEL) + if(!autoprocess) + dat += "Autoclone" + else + dat += "Stop autoclone" else - dat += "Stop autoclone" - else - dat += "Autoclone" + dat += "Autoclone" dat += "