diff --git a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm index 1f616ced8d2..f8ec15738e1 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm @@ -824,7 +824,7 @@ /turf/open/floor/carpet, /area/ruin/space/has_grav/derelictsulaco) "BQ" = ( -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Jonesy"; desc = "Old and grumpy cat- wait, how the hell is he still alive?!" }, diff --git a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm index 9597a976d84..0a51efbd58a 100644 --- a/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm +++ b/_maps/RandomRuins/SpaceRuins/mrow_thats_right.dmm @@ -245,7 +245,7 @@ /obj/structure/bed/dogbed{ name = "kitty bed" }, -/mob/living/simple_animal/pet/cat/space, +/mob/living/basic/pet/cat/space, /turf/open/floor/carpet, /area/ruin/space/has_grav/powered/cat_man) "aS" = ( diff --git a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm index 2c13cd12d70..c86038452d7 100644 --- a/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm +++ b/_maps/RandomRuins/SpaceRuins/skyrat/interdynefob.dmm @@ -5283,7 +5283,7 @@ /area/ruin/space/has_grav/skyrat/interdynefob/medbay) "yb" = ( /obj/effect/turf_decal/stripes/red/corner, -/mob/living/simple_animal/pet/cat/kitten{ +/mob/living/basic/pet/cat/kitten{ desc = "What appears to be a single-celled organism with a pronounced low-level intelligence."; name = "Murder-Mittens" }, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index 47abe5bb4af..f6acf37d02a 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -2140,6 +2140,15 @@ /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating, /area/awaymission/moonoutpost19/arrivals) +"ob" = ( +/mob/living/basic/pet/cat/space{ + desc = "With survival instincts like these, it's no wonder cats survived to the 26th century."; + name = "Jones" + }, +/turf/open/misc/asteroid/moon{ + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) "od" = ( /obj/effect/decal/cleanable/xenoblood/xgibs/larva/body, /turf/open/misc/asteroid/moon{ @@ -2775,16 +2784,6 @@ dir = 1 }, /area/awaymission/moonoutpost19/research) -"rF" = ( -/obj/structure/secure_safe/directional/east, -/obj/effect/decal/cleanable/blood/splatter, -/obj/item/pen, -/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/research) "rH" = ( /obj/structure/closet/crate/bin, /obj/effect/turf_decal/siding/purple{ @@ -3366,6 +3365,17 @@ /obj/item/stack/cable_coil/cut, /turf/open/floor/plating, /area/awaymission/moonoutpost19/research) +"vu" = ( +/obj/structure/table, +/obj/item/storage/briefcase/secure, +/obj/item/taperecorder{ + pixel_x = -3 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/research) "vx" = ( /obj/structure/table/reinforced, /obj/machinery/button/door{ @@ -5047,17 +5057,6 @@ /obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/plating, /area/awaymission/moonoutpost19/syndicate) -"Hr" = ( -/obj/structure/table, -/obj/item/storage/briefcase/secure, -/obj/item/taperecorder{ - pixel_x = -3 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/research) "Hs" = ( /obj/effect/turf_decal/stripes{ dir = 4 @@ -5129,15 +5128,6 @@ dir = 8 }, /area/awaymission/moonoutpost19/research) -"HP" = ( -/mob/living/simple_animal/pet/cat/space{ - desc = "With survival instincts like these, it's no wonder cats survived to the 26th century."; - name = "Jones" - }, -/turf/open/misc/asteroid/moon{ - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) "HS" = ( /obj/structure/chair/stool/directional/east{ pixel_x = 9 @@ -6853,6 +6843,16 @@ dir = 5 }, /area/awaymission/moonoutpost19/research) +"Tx" = ( +/obj/structure/secure_safe/directional/east, +/obj/effect/decal/cleanable/blood/splatter, +/obj/item/pen, +/obj/item/paper/crumpled/awaymissions/moonoutpost19/hastey_note, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/research) "Tz" = ( /obj/machinery/power/shuttle_engine/propulsion/burst/left{ dir = 4 @@ -29319,7 +29319,7 @@ ac ac My My -HP +ob My My My @@ -35484,8 +35484,8 @@ ik OC aJ Um -rF -Hr +Tx +vu ea of TS diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 8d7b0590853..50f2b3ed7df 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -46,10 +46,6 @@ }, /turf/open/floor/iron, /area/station/security/tram) -"ach" = ( -/obj/machinery/netpod, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "acl" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -116,6 +112,12 @@ /obj/machinery/portable_atmospherics/canister, /turf/open/floor/plating, /area/station/engineering/atmos/project) +"adH" = ( +/obj/machinery/netpod, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "adL" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3929,30 +3931,6 @@ }, /turf/open/floor/iron, /area/station/security/processing) -"bCh" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/door/airlock/mining{ - name = "Bitrunning Den" - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "bCi" = ( /obj/effect/turf_decal/tile/yellow/opposingcorners, /obj/machinery/atmospherics/components/binary/crystallizer{ @@ -6128,27 +6106,6 @@ "cvJ" = ( /turf/open/floor/plating, /area/station/maintenance/department/engine/atmos) -"cvP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "cvZ" = ( /obj/structure/closet/secure_closet/evidence, /obj/effect/decal/cleanable/dirt, @@ -11107,10 +11064,6 @@ /obj/structure/frame/computer, /turf/open/floor/eighties/red, /area/station/service/abandoned_gambling_den/gaming) -"ejq" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/bitrunning/den) "ejt" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -14020,6 +13973,12 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/dark, /area/station/science/ordnance) +"fkL" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/delivery, +/obj/machinery/light/cold/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "fkT" = ( /obj/effect/turf_decal/sand/plating, /obj/structure/alien/weeds, @@ -16287,6 +16246,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/maintenance/department/medical/central) +"fXd" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) "fXg" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -17805,6 +17767,10 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/grass, /area/station/service/hydroponics) +"gzl" = ( +/obj/machinery/netpod, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "gzu" = ( /obj/effect/turf_decal/tile/dark_red{ dir = 1 @@ -18395,6 +18361,27 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/station/maintenance/department/medical/central) +"gKH" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "gKK" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -19149,6 +19136,30 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"gWV" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/machinery/door/airlock/mining{ + name = "Bitrunning Den" + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "gXf" = ( /obj/effect/turf_decal/sand/plating, /obj/effect/decal/cleanable/dirt, @@ -21610,12 +21621,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/port/fore) -"hNv" = ( -/obj/machinery/netpod, -/obj/machinery/light_switch/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "hNA" = ( /obj/effect/turf_decal/tile/brown/opposingcorners, /turf/open/floor/iron, @@ -25270,6 +25275,19 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/commons/fitness/recreation/entertainment) +"jeB" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/trimline/brown/line, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "jeC" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -26030,6 +26048,26 @@ /obj/effect/mapping_helpers/airlock/access/all/supply/general, /turf/open/floor/catwalk_floor/iron_dark, /area/station/commons/storage/tools) +"jux" = ( +/obj/effect/turf_decal/stripes{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/smooth_half{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "juJ" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -27427,6 +27465,13 @@ /obj/item/bedsheet/brown, /turf/open/floor/wood, /area/station/maintenance/starboard/greater) +"jSp" = ( +/obj/machinery/computer/quantum_console{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "jSw" = ( /obj/structure/railing, /turf/open/floor/catwalk_floor, @@ -27774,25 +27819,6 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/half, /area/station/hallway/primary/central/fore) -"jYV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/table, -/obj/item/folder/red, -/obj/item/food/monkeycube/bee{ - name = "monkey cube"; - pixel_y = 17 - }, -/obj/item/food/monkeycube/chicken{ - pixel_y = 15; - pixel_x = 6; - name = "monkey cube"; - desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" - }, -/turf/open/floor/iron/dark, -/area/station/commons/storage/tools) "jYY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30684,19 +30710,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/wood, /area/station/service/abandoned_gambling_den) -"lbF" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/trimline/brown/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 8 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "lbG" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 @@ -32878,20 +32891,6 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron, /area/station/maintenance/starboard/aft) -"lKH" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/stripes, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "lKK" = ( /obj/effect/mapping_helpers/broken_floor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -32907,13 +32906,6 @@ /obj/effect/mapping_helpers/airlock/access/any/security/general, /turf/open/floor/iron, /area/station/security/checkpoint/escape) -"lLq" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/oil, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "lLr" = ( /obj/machinery/porta_turret/ai{ dir = 4 @@ -37842,13 +37834,6 @@ }, /turf/open/floor/circuit/telecomms/mainframe, /area/station/science/xenobiology) -"nyf" = ( -/obj/machinery/camera/autoname/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/table, -/obj/item/food/cornchips/green, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "nyi" = ( /turf/closed/wall/rust, /area/station/maintenance/hallway/abandoned_command) @@ -38199,13 +38184,6 @@ /obj/structure/falsewall, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) -"nEl" = ( -/obj/machinery/computer/quantum_console{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "nEo" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -38267,9 +38245,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/cargo/drone_bay) -"nFo" = ( -/turf/closed/wall, -/area/station/cargo/bitrunning/den) "nFp" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -39219,6 +39194,26 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) +"nXz" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/trimline/brown/corner, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/dark/smooth_edge{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "nXP" = ( /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ @@ -40806,9 +40801,6 @@ /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) -"oCG" = ( -/turf/closed/wall/rust, -/area/station/cargo/bitrunning/den) "oCM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/pile/directional/east, @@ -46359,6 +46351,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/science/xenobiology) +"qrE" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "qrI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/textured_half{ @@ -51052,26 +51048,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/orange/hidden/layer1, /turf/open/floor/catwalk_floor/iron_white, /area/station/engineering/atmos) -"rPx" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/effect/turf_decal/trimline/brown/corner, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/cable, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/dark/smooth_edge{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "rPz" = ( /obj/structure/table/glass, /obj/item/flashlight/lamp/green{ @@ -51281,6 +51257,18 @@ /obj/structure/railing/corner, /turf/open/space/basic, /area/space/nearstation) +"rSG" = ( +/obj/effect/turf_decal/bot_white, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 7 + }, +/obj/structure/fluff/broken_canister_frame, +/obj/machinery/camera/autoname/directional/north, +/obj/item/stack/sticky_tape/super, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/station/commons/storage/tools) "rST" = ( /turf/closed/wall, /area/station/cargo/storage) @@ -51541,26 +51529,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) -"rWP" = ( -/obj/effect/turf_decal/stripes{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron/dark/smooth_half{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "rWW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -52537,6 +52505,13 @@ /obj/structure/thermoplastic, /turf/open/floor/tram, /area/station/security/tram) +"snI" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/oil, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "snJ" = ( /obj/effect/turf_decal/stripes/corner, /obj/machinery/light/small/directional/south, @@ -53446,6 +53421,12 @@ }, /turf/closed/wall, /area/station/commons/storage/art) +"sBO" = ( +/obj/machinery/netpod, +/obj/machinery/light_switch/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "sCc" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -57232,12 +57213,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/hallway/primary/starboard) -"tPZ" = ( -/obj/machinery/netpod, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "tQx" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, @@ -61205,6 +61180,25 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/iron/showroomfloor, /area/station/service/cafeteria) +"vgd" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/table, +/obj/item/folder/red, +/obj/item/food/monkeycube/bee{ + name = "monkey cube"; + pixel_y = 17 + }, +/obj/item/food/monkeycube/chicken{ + pixel_y = 15; + pixel_x = 6; + name = "monkey cube"; + desc = "A new Nanotrasen classic, the monkey cube. Tastes like everything!" + }, +/turf/open/floor/iron/dark, +/area/station/commons/storage/tools) "vgf" = ( /obj/effect/mapping_helpers/broken_floor, /obj/structure/chair/stool/directional/west, @@ -62127,15 +62121,6 @@ /obj/machinery/duct, /turf/open/floor/iron/showroomfloor, /area/station/commons/toilet/restrooms) -"vtq" = ( -/obj/effect/turf_decal/siding/blue{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/white/small, -/area/station/command/heads_quarters/cmo) "vtv" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -62660,6 +62645,13 @@ }, /turf/open/floor/iron/dark, /area/station/security/office) +"vCa" = ( +/obj/machinery/camera/autoname/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/food/cornchips/green, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "vCe" = ( /obj/structure/cable, /turf/open/floor/iron, @@ -65762,18 +65754,6 @@ /obj/effect/landmark/start/cargo_technician, /turf/open/floor/iron/smooth, /area/station/cargo/office) -"wzp" = ( -/obj/effect/turf_decal/bot_white, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/color/fyellow{ - pixel_y = 7 - }, -/obj/structure/fluff/broken_canister_frame, -/obj/machinery/camera/autoname/directional/north, -/obj/item/stack/sticky_tape/super, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plating, -/area/station/commons/storage/tools) "wzK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -66923,6 +66903,20 @@ /obj/machinery/firealarm/directional/north, /turf/open/floor/iron/smooth, /area/station/service/greenroom) +"wRI" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/stripes, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "wRL" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -67164,6 +67158,15 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/recreation) +"wVb" = ( +/obj/effect/turf_decal/siding/blue{ + dir = 1 + }, +/obj/machinery/airalarm/directional/north, +/obj/structure/bed/dogbed/runtime, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/white/small, +/area/station/command/heads_quarters/cmo) "wVg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/event_spawn, @@ -71938,6 +71941,9 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/central/greater) +"ygc" = ( +/turf/closed/wall/rust, +/area/station/cargo/bitrunning/den) "ygd" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/engineering/atmospherics_portable, @@ -72311,12 +72317,6 @@ "ylD" = ( /turf/closed/wall, /area/station/maintenance/starboard/greater) -"ylH" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/delivery, -/obj/machinery/light/cold/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "ylJ" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -84014,12 +84014,12 @@ slY ueX slY ueX -nFo -oCG -nFo -nFo -nFo -nFo +fXd +ygc +fXd +fXd +fXd +fXd lxy hzm jTA @@ -84271,12 +84271,12 @@ slY hfc jBb iNE -nFo -ach -lKH -ylH -nEl -ejq +fXd +gzl +wRI +fkL +jSp +qrE tvN lRc moz @@ -84528,12 +84528,12 @@ gZk iNE kwY kPW -nFo -tPZ -rPx -cvP -rWP -bCh +fXd +adH +nXz +gKH +jux +gWV jWA lTv oem @@ -84785,12 +84785,12 @@ slY hff kPW hfc -nFo -hNv -lbF -lLq -nyf -ejq +fXd +sBO +jeB +snI +vCa +qrE jkS lTN mRD @@ -85042,12 +85042,12 @@ slY jCo slY slY -nFo -nFo -nFo -nFo -nFo -nFo +fXd +fXd +fXd +fXd +fXd +fXd kZB lUz ohj @@ -89663,7 +89663,7 @@ ueX slY slY slY -wzp +rSG hbv rkr hmj @@ -90180,7 +90180,7 @@ hXf oQM hbI hgd -jYV +vgd xrZ sRg xat @@ -100285,7 +100285,7 @@ oNd fFD cbO vDV -vtq +wVb clt jbr guF diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index dff513abc40..534b8b3662e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -9156,24 +9156,6 @@ "cjN" = ( /turf/closed/wall/r_wall, /area/station/security/office) -"cjO" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "ckb" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable, @@ -13841,12 +13823,6 @@ dir = 4 }, /area/station/science/lobby) -"dsb" = ( -/obj/machinery/netpod, -/obj/structure/sign/poster/random/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "dse" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -16131,6 +16107,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/department/science) +"dVq" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) "dVv" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -19322,6 +19301,11 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central/fore) +"eMd" = ( +/obj/machinery/netpod, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "eMu" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/simple/cyan/hidden{ @@ -27299,10 +27283,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/research) -"gHq" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/bitrunning/den) "gHt" = ( /obj/item/kirbyplants/random, /obj/machinery/button/door/directional/north{ @@ -28389,11 +28369,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/commons/storage/primary) -"gVv" = ( -/obj/machinery/netpod, -/obj/effect/decal/cleanable/robot_debris, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "gVx" = ( /obj/structure/cable, /obj/machinery/door/window/brigdoor/right/directional/south{ @@ -29892,28 +29867,6 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/wood, /area/station/maintenance/starboard/aft) -"hrz" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "hrG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -32168,9 +32121,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/maintenance/department/science) -"hXg" = ( -/turf/closed/wall, -/area/station/cargo/bitrunning/den) "hXi" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -35773,6 +35723,13 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"iSm" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/cargo/bitrunning/den) "iSI" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42185,17 +42142,6 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit/green, /area/station/ai_monitored/turret_protected/ai) -"kuj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/mining/glass{ - name = "Bitrunning Den" - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "kun" = ( /obj/structure/lattice/catwalk, /obj/structure/cable, @@ -43259,6 +43205,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"kIU" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 1 + }, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron, +/area/station/command/heads_quarters/cmo) "kJb" = ( /obj/structure/cable, /obj/structure/closet/secure_closet/detective, @@ -47375,11 +47330,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) -"lJw" = ( -/obj/machinery/computer/quantum_console, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/iron/dark/smooth_corner, -/area/station/cargo/bitrunning/den) "lJB" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/west, @@ -50799,6 +50749,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/service/kitchen/abandoned) +"mEL" = ( +/obj/machinery/netpod, +/obj/structure/sign/poster/random/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "mFi" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/emergency, @@ -52763,6 +52719,11 @@ /obj/effect/turf_decal/bot, /turf/open/floor/iron/large, /area/station/medical/break_room) +"ngl" = ( +/obj/machinery/computer/quantum_console, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/cargo/bitrunning/den) "ngp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -54113,6 +54074,23 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/wood, /area/station/service/theater) +"nyV" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/oil, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "nyW" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch" @@ -58921,6 +58899,10 @@ }, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"oMy" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "oML" = ( /obj/machinery/door/window/left/directional/west, /obj/machinery/atmospherics/components/binary/pump{ @@ -62202,13 +62184,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/ai_monitored/security/armory) -"pDz" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/station/cargo/bitrunning/den) "pDE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -63000,6 +62975,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/grimy, /area/station/service/lawoffice) +"pLT" = ( +/obj/machinery/light/directional/south, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "pMa" = ( /obj/item/reagent_containers/cup/bucket, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -65691,21 +65672,6 @@ /obj/effect/turf_decal/tile/neutral/full, /turf/open/floor/iron/dark/smooth_large, /area/station/security/detectives_office) -"quh" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "qul" = ( /obj/structure/chair/stool/bar/directional/south, /turf/open/floor/wood, @@ -66511,6 +66477,28 @@ }, /turf/open/floor/iron, /area/station/medical/virology) +"qDW" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "qDZ" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -66947,6 +66935,18 @@ /obj/effect/turf_decal/tile/yellow/opposingcorners, /turf/open/floor/iron, /area/station/engineering/supermatter/room) +"qJt" = ( +/obj/effect/decal/cleanable/oil/streak, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 7 + }, +/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ + pixel_x = 5 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "qJy" = ( /obj/effect/turf_decal/siding/yellow{ dir = 1 @@ -69781,6 +69781,17 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"rvq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/mining/glass{ + name = "Bitrunning Den" + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "rvu" = ( /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt, @@ -72868,6 +72879,24 @@ /obj/machinery/airalarm/directional/north, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"shp" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "shJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/mix_output{ dir = 4 @@ -74669,6 +74698,22 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"sEw" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "sEF" = ( /obj/structure/cable, /obj/machinery/duct, @@ -76247,11 +76292,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science/ordnance/office) -"sYn" = ( -/obj/machinery/netpod, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "sYw" = ( /obj/effect/landmark/start/hangover, /obj/effect/landmark/event_spawn, @@ -76957,12 +76997,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/cargo/storage) -"tjo" = ( -/obj/machinery/light/directional/south, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "tjp" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, @@ -78419,6 +78453,11 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"tCP" = ( +/obj/machinery/netpod, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "tCQ" = ( /obj/effect/turf_decal/loading_area{ dir = 4 @@ -79024,6 +79063,21 @@ /obj/item/pen, /turf/open/floor/carpet, /area/station/commons/vacant_room/office) +"tJG" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "tJT" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -80249,22 +80303,6 @@ /obj/structure/window/reinforced/spawner/directional/west, /turf/open/floor/carpet/blue, /area/station/commons/vacant_room/office) -"tYI" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 4 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "tYL" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -81817,15 +81855,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/xenobiology) -"utz" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/radio/intercom/directional/south, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 1 - }, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron, -/area/station/command/heads_quarters/cmo) "utK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 8 @@ -82397,18 +82426,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/science/auxlab/firing_range) -"uAi" = ( -/obj/effect/decal/cleanable/oil/streak, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 7 - }, -/obj/item/reagent_containers/cup/soda_cans/space_mountain_wind{ - pixel_x = 5 - }, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "uAo" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -91889,23 +91906,6 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/maintenance/port) -"wTL" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/brown/line{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/obj/effect/decal/cleanable/oil, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "wTN" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -134821,7 +134821,7 @@ rEO lrK pMF jDq -utz +kIU loe eoE jbc @@ -140913,11 +140913,11 @@ xhW xhW nPo xce -hXg -hXg -hXg -hXg -hXg +dVq +dVq +dVq +dVq +dVq seX mEv vPp @@ -141170,11 +141170,11 @@ rWo gpD kLA qbd -gHq -lJw -tYI -uAi -hXg +oMy +ngl +sEw +qJt +dVq lDY tpZ kOj @@ -141427,11 +141427,11 @@ oYr pGR bmo bFA -gHq -pDz -quh -tjo -hXg +oMy +iSm +tJG +pLT +dVq fmH tpZ aaa @@ -141684,11 +141684,11 @@ rid vFg eQG vXy -kuj -cjO -hrz -wTL -hXg +rvq +shp +qDW +nyV +dVq uoz tpZ aaa @@ -141941,11 +141941,11 @@ rWo xdZ nMi tJp -hXg -dsb -sYn -gVv -hXg +dVq +mEL +tCP +eMd +dVq uoz tpZ aad @@ -142198,11 +142198,11 @@ aJE vMq izK rWo -hXg -hXg -hXg -hXg -hXg +dVq +dVq +dVq +dVq +dVq mwM tpZ aaa diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 2169321b0cf..6c8be9c8ff4 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -2132,6 +2132,18 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/hallway/primary/port) +"aJC" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 8; + id = "chemistry_lower_shutters"; + name = "Chemistry Exterior Shutters" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/hollow/reinforced/middle{ + dir = 4 + }, +/turf/open/floor/plating, +/area/station/medical/chemistry) "aJG" = ( /obj/machinery/light/directional/west, /obj/structure/cable, @@ -38461,11 +38473,6 @@ "lLm" = ( /turf/open/floor/iron/cafeteria, /area/station/maintenance/port/aft) -"lLE" = ( -/obj/machinery/netpod, -/obj/machinery/camera/autoname/directional/south, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "lLN" = ( /obj/effect/turf_decal/delivery, /obj/effect/decal/cleanable/dirt, @@ -40878,13 +40885,6 @@ "mAe" = ( /turf/open/floor/glass/reinforced, /area/station/security/lockers) -"mAo" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/toy/cattoy, -/obj/machinery/newscaster/directional/north, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "mAz" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -51538,18 +51538,6 @@ dir = 8 }, /area/station/medical/chem_storage) -"pHT" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 8; - id = "chemistry_lower_shutters"; - name = "Chemistry Exterior Shutters" - }, -/obj/structure/cable, -/obj/effect/spawner/structure/window/hollow/reinforced/middle{ - dir = 4 - }, -/turf/open/floor/plating, -/area/station/medical/chemistry) "pHX" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -59526,6 +59514,13 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron, /area/station/commons/fitness) +"sfM" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/toy/cattoy, +/obj/machinery/newscaster/directional/north, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "sfY" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -59642,6 +59637,11 @@ dir = 8 }, /area/station/hallway/secondary/entry) +"shW" = ( +/obj/machinery/netpod, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "sib" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -177710,12 +177710,12 @@ iDt iDt eXH eXH -pHT -pHT -pHT -pHT -pHT -pHT +aJC +aJC +aJC +aJC +aJC +aJC eXH hjM hjM @@ -231688,7 +231688,7 @@ eMa nRt lPK jFJ -lLE +shW pBE qjQ rVe @@ -251203,7 +251203,7 @@ qEM lso bGT vBG -mAo +sfM moG vBG ayR diff --git a/_maps/map_files/KiloStation2/KiloStation2.dmm b/_maps/map_files/KiloStation2/KiloStation2.dmm index 77d644ea302..055328a080a 100644 --- a/_maps/map_files/KiloStation2/KiloStation2.dmm +++ b/_maps/map_files/KiloStation2/KiloStation2.dmm @@ -4301,7 +4301,7 @@ /area/station/engineering/atmos) "buJ" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 00e39a64876..fda76eb5ea1 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -11809,6 +11809,13 @@ /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible, /turf/closed/wall/r_wall, /area/station/engineering/atmos) +"eok" = ( +/obj/machinery/computer/quantum_console, +/obj/effect/turf_decal/siding/thinplating_new/dark, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "eol" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/turf_decal/bot, @@ -26183,15 +26190,6 @@ }, /turf/open/floor/iron, /area/station/engineering/break_room) -"juO" = ( -/obj/structure/bed/dogbed/runtime, -/obj/item/toy/cattoy, -/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ - dir = 4 - }, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "juV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -34234,15 +34232,6 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) -"mrm" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/turf/open/floor/iron, -/area/station/commons/lounge) "mru" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -35372,13 +35361,6 @@ }, /turf/open/floor/iron, /area/station/cargo/lobby) -"mJt" = ( -/obj/machinery/computer/quantum_console, -/obj/effect/turf_decal/siding/thinplating_new/dark, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/camera/autoname/directional/north, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "mJE" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -42191,6 +42173,15 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"pgf" = ( +/obj/structure/bed/dogbed/runtime, +/obj/item/toy/cattoy, +/obj/effect/turf_decal/tile/blue/anticorner/contrasted{ + dir = 4 + }, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "pgD" = ( /obj/machinery/door/airlock/maintenance{ name = "Chapel Maintenance" @@ -53432,6 +53423,15 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"tbl" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/turf/open/floor/iron, +/area/station/commons/lounge) "tbp" = ( /obj/machinery/door/airlock/command/glass{ name = "Server Access" @@ -85114,7 +85114,7 @@ jXu kXA ufv jXu -mJt +eok aQP pFU hKg @@ -92890,7 +92890,7 @@ gQG tFr tar cOR -juO +pgf uyw pcM cNk @@ -101340,7 +101340,7 @@ myG rac bvJ bvJ -mrm +tbl cNA bvJ bvJ diff --git a/_maps/map_files/NSSJourney/NSSJourney.dmm b/_maps/map_files/NSSJourney/NSSJourney.dmm index bdcfa64ca6b..9ab16fab30a 100644 --- a/_maps/map_files/NSSJourney/NSSJourney.dmm +++ b/_maps/map_files/NSSJourney/NSSJourney.dmm @@ -54324,7 +54324,7 @@ /area/station/science/breakroom) "tJO" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "tJW" = ( diff --git a/_maps/map_files/NSVBlueshift/Blueshift.dmm b/_maps/map_files/NSVBlueshift/Blueshift.dmm index 50df0951d45..02a54339866 100644 --- a/_maps/map_files/NSVBlueshift/Blueshift.dmm +++ b/_maps/map_files/NSVBlueshift/Blueshift.dmm @@ -19904,7 +19904,7 @@ "dLv" = ( /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/machinery/requests_console/directional/east{ department = "Chief Medical Officer's Desk"; name = "Chief Medical Officer's Requests Console" @@ -29839,7 +29839,7 @@ /obj/effect/decal/cleanable/dirt{ icon_state = "dirt-flat-1" }, -/mob/living/simple_animal/pet/cat, +/mob/living/basic/pet/cat, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, @@ -85349,7 +85349,7 @@ /turf/open/floor/plating, /area/station/maintenance/department/medical/central) "qoz" = ( -/mob/living/simple_animal/pet/cat/space{ +/mob/living/basic/pet/cat/space{ dir = 4 }, /obj/effect/decal/cleanable/dirt{ diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 877c513bf33..e632d4e2006 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -295,24 +295,6 @@ /obj/effect/turf_decal/trimline/blue/line, /turf/open/floor/carpet/blue, /area/station/command/meeting_room) -"acR" = ( -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/effect/turf_decal/trimline/brown/line, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "adk" = ( /obj/structure/grille, /obj/structure/sign/directions/medical/directional/north, @@ -1936,6 +1918,17 @@ /obj/structure/sign/warning/docking, /turf/closed/wall/r_wall, /area/station/security/execution/transfer) +"ayQ" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/disposalpipe/trunk/multiz, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "ayU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/red/dim/directional/east, @@ -6602,21 +6595,6 @@ /obj/machinery/light/directional/east, /turf/open/floor/iron/checker, /area/station/cargo/miningdock) -"bED" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 7 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 1 - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "bEK" = ( /obj/structure/holosign/barrier, /turf/open/floor/iron/dark, @@ -6749,6 +6727,20 @@ /mob/living/basic/pet/fox, /turf/open/floor/noslip, /area/station/maintenance/floor1/port) +"bGW" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/trimline/brown/line, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "bHw" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -9260,6 +9252,22 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/floor1/port) +"cot" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, +/obj/machinery/door/airlock/mining/glass{ + name = "Bitrunning Den" + }, +/turf/open/floor/pod/dark, +/area/station/cargo/bitrunning/den) "cow" = ( /turf/open/floor/iron/smooth, /area/station/cargo/sorting) @@ -11083,17 +11091,6 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/carpet/neon/simple/pink/nodots, /area/station/maintenance/floor2/port/fore) -"cOT" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/machinery/light/directional/north, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "cPg" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/machinery/atmospherics/components/binary/pump/on{ @@ -11622,6 +11619,21 @@ dir = 4 }, /area/station/service/chapel) +"cWb" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 7 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "cWf" = ( /obj/structure/flora/bush/sparsegrass/style_random, /turf/open/floor/grass, @@ -13036,25 +13048,6 @@ /obj/machinery/light/broken/directional/south, /turf/open/floor/plating, /area/station/medical/abandoned) -"dqM" = ( -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/brown/line, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 8 - }, -/area/station/cargo/bitrunning/den) "dqQ" = ( /turf/closed/wall/r_wall, /area/station/security/medical) @@ -13949,6 +13942,24 @@ }, /turf/open/floor/wood/tile, /area/station/service/library) +"dDe" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/line, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_half, +/area/station/cargo/bitrunning/den) "dDk" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners{ dir = 8 @@ -14813,6 +14824,16 @@ /obj/effect/spawner/random/structure/grille, /turf/open/floor/pod/light, /area/station/maintenance/floor1/port) +"dPd" = ( +/obj/machinery/netpod, +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = -12; + pixel_y = -13 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "dPf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -14843,12 +14864,6 @@ }, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"dPx" = ( -/obj/machinery/computer/quantum_console{ - dir = 4 - }, -/turf/open/floor/iron/dark/smooth_corner, -/area/station/cargo/bitrunning/den) "dPC" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -17072,13 +17087,6 @@ dir = 8 }, /area/station/hallway/floor2/fore) -"etY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/stripes{ - dir = 8 - }, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "eub" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -22575,6 +22583,9 @@ /obj/machinery/newscaster/directional/north, /turf/open/floor/iron/dark/textured_large, /area/station/engineering/lobby) +"fXh" = ( +/turf/closed/wall, +/area/station/cargo/bitrunning/den) "fXm" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/brown{ @@ -25763,6 +25774,15 @@ /obj/item/reagent_containers/spray/cleaner, /turf/open/floor/carpet/royalblue, /area/station/medical/break_room) +"gNB" = ( +/obj/structure/sign/poster/random/directional/north, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "gNN" = ( /turf/open/floor/pod/dark, /area/station/maintenance/floor1/starboard) @@ -32609,15 +32629,6 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor3/starboard) -"iCP" = ( -/obj/structure/sign/poster/random/directional/north, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/effect/decal/cleanable/oil, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "iCQ" = ( /obj/effect/turf_decal/trimline/green/filled/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -34090,6 +34101,13 @@ /obj/item/storage/toolbox/mechanical/old, /turf/open/floor/plating/foam, /area/station/maintenance/floor1/port/aft) +"iXD" = ( +/obj/machinery/quantum_server, +/obj/effect/turf_decal/bot/left, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 4 + }, +/area/station/cargo/bitrunning/den) "iXF" = ( /turf/closed/wall/r_wall, /area/station/ai_monitored/security/armory) @@ -34544,20 +34562,6 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) -"jdQ" = ( -/obj/effect/turf_decal/trimline/brown/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/trimline/brown/line, -/turf/open/floor/iron/dark/smooth_half, -/area/station/cargo/bitrunning/den) "jdR" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/sink/directional/east, @@ -35394,6 +35398,17 @@ }, /turf/open/floor/iron/dark/smooth_large, /area/station/science/lobby) +"jpR" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "jpT" = ( /obj/machinery/flasher/portable, /obj/item/radio/intercom/directional/east, @@ -35410,21 +35425,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, /area/station/maintenance/floor4/starboard/aft) -"jqm" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/structure/railing{ - layer = 3.1 - }, -/obj/effect/decal/cleanable/robot_debris, -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/bitrunner, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "jqx" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/firedoor/heavy, @@ -36019,14 +36019,6 @@ /obj/machinery/recharger, /turf/open/floor/iron/dark, /area/station/security/range) -"jyn" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/directional/south, -/obj/effect/decal/cleanable/oil/streak, -/obj/machinery/byteforge, -/obj/effect/turf_decal/box, -/turf/open/floor/iron/dark/smooth_large, -/area/station/cargo/bitrunning/den) "jyp" = ( /obj/machinery/door/airlock/security/glass{ name = "Head of Security Office" @@ -36306,6 +36298,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor2/starboard/fore) +"jBn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/stripes{ + dir = 8 + }, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "jBu" = ( /obj/effect/decal/cleanable/dirt, /obj/item/assembly/igniter{ @@ -37780,6 +37779,13 @@ }, /turf/open/floor/pod/light, /area/station/maintenance/floor1/starboard) +"jVX" = ( +/obj/machinery/netpod, +/obj/structure/railing{ + layer = 3.1 + }, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "jWi" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -47307,22 +47313,6 @@ /obj/structure/stairs/south, /turf/open/floor/wood/parquet, /area/station/service/library) -"mps" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/access/any/supply/bit_den, -/obj/machinery/door/airlock/mining/glass{ - name = "Bitrunning Den" - }, -/turf/open/floor/pod/dark, -/area/station/cargo/bitrunning/den) "mpy" = ( /obj/machinery/newscaster/directional/west, /obj/effect/decal/cleanable/dirt, @@ -51204,14 +51194,6 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/turret_protected/aisat/hallway) -"nnu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 8 - }, -/obj/machinery/holopad, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "nnJ" = ( /obj/structure/filingcabinet, /turf/open/floor/iron/dark/smooth_large, @@ -52241,6 +52223,14 @@ /obj/effect/mapping_helpers/airlock/unres, /turf/open/floor/pod, /area/station/maintenance/floor3/starboard) +"nAl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 8 + }, +/obj/machinery/holopad, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "nAm" = ( /obj/effect/turf_decal/bot, /obj/effect/spawner/random/structure/crate, @@ -54923,17 +54913,6 @@ }, /turf/open/floor/engine, /area/station/science/cytology) -"olH" = ( -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/disposalpipe/trunk/multiz, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "olM" = ( /obj/effect/turf_decal/trimline/yellow/line{ dir = 9 @@ -58436,16 +58415,6 @@ /obj/machinery/light/small/directional/north, /turf/open/floor/iron/dark, /area/station/service/hydroponics) -"pjw" = ( -/obj/machinery/netpod, -/obj/effect/decal/cleanable/vomit/old{ - pixel_x = -12; - pixel_y = -13 - }, -/obj/item/radio/intercom/directional/north, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "pjB" = ( /obj/effect/decal/cleanable/blood/old, /obj/structure/chair{ @@ -60993,6 +60962,14 @@ /obj/machinery/griddle, /turf/open/floor/iron/kitchen, /area/station/service/kitchen) +"pTH" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/stairs{ + dir = 1 + }, +/area/station/cargo/bitrunning/den) "pTI" = ( /obj/structure/railing/corner{ dir = 4 @@ -61108,13 +61085,6 @@ "pUV" = ( /turf/open/floor/plating/airless, /area/station/solars/port/aft) -"pUY" = ( -/obj/machinery/quantum_server, -/obj/effect/turf_decal/bot/left, -/turf/open/floor/iron/dark/smooth_corner{ - dir = 4 - }, -/area/station/cargo/bitrunning/den) "pVd" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 @@ -64805,6 +64775,25 @@ /obj/structure/marker_beacon/jade, /turf/open/floor/catwalk_floor, /area/station/maintenance/floor3/port/aft) +"qSj" = ( +/obj/effect/turf_decal/trimline/brown/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/trimline/brown/line, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/smooth_corner{ + dir = 8 + }, +/area/station/cargo/bitrunning/den) "qSl" = ( /turf/closed/wall, /area/station/maintenance/department/engine/atmos) @@ -65359,10 +65348,6 @@ /obj/structure/cable, /turf/open/floor/plating/airless, /area/space/nearstation) -"qZU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/station/cargo/bitrunning/den) "rac" = ( /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/cmo) @@ -69092,11 +69077,6 @@ }, /turf/open/floor/iron/dark, /area/station/maintenance/floor2/starboard/aft) -"scn" = ( -/obj/machinery/netpod, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "sct" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -71814,15 +71794,6 @@ "sOU" = ( /turf/open/openspace, /area/station/maintenance/floor4/port/aft) -"sPg" = ( -/obj/structure/cable, -/obj/structure/bed/dogbed/runtime, -/obj/effect/turf_decal/trimline/blue/filled/line{ - dir = 5 - }, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/white, -/area/station/command/heads_quarters/cmo) "sPk" = ( /obj/machinery/door/airlock/hatch{ name = "Maintenance Bulkhead" @@ -75960,6 +75931,15 @@ dir = 4 }, /area/station/cargo/sorting) +"tSt" = ( +/obj/structure/cable, +/obj/structure/bed/dogbed/runtime, +/obj/effect/turf_decal/trimline/blue/filled/line{ + dir = 5 + }, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/white, +/area/station/command/heads_quarters/cmo) "tSD" = ( /obj/structure/closet/mini_fridge{ pixel_x = 6; @@ -76284,9 +76264,6 @@ /obj/structure/emergency_shield/regenerating, /turf/open/floor/plating, /area/station/hallway/secondary/entry) -"tXe" = ( -/turf/closed/wall, -/area/station/cargo/bitrunning/den) "tXg" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod/light, @@ -81391,14 +81368,6 @@ /obj/effect/turf_decal/siding/white, /turf/open/floor/iron/dark/textured, /area/station/medical/paramedic) -"voF" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/stairs{ - dir = 1 - }, -/area/station/cargo/bitrunning/den) "voG" = ( /obj/structure/chair/sofa/bench/right{ dir = 1 @@ -82324,13 +82293,6 @@ /obj/effect/turf_decal/trimline/brown/arrow_ccw, /turf/open/floor/iron/dark/side, /area/station/cargo/lobby) -"vzo" = ( -/obj/machinery/netpod, -/obj/structure/railing{ - layer = 3.1 - }, -/turf/open/floor/catwalk_floor/iron_dark, -/area/station/cargo/bitrunning/den) "vzu" = ( /obj/effect/landmark/start/psychologist, /obj/structure/sign/poster/official/random/directional/south, @@ -83439,6 +83401,11 @@ }, /turf/open/floor/wood/tile, /area/station/command/heads_quarters/captain) +"vPt" = ( +/obj/machinery/netpod, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/catwalk_floor/iron_dark, +/area/station/cargo/bitrunning/den) "vPu" = ( /obj/machinery/light/red/dim/directional/south, /obj/effect/decal/cleanable/dirt, @@ -86105,6 +86072,10 @@ /obj/machinery/camera/emp_proof/directional/east, /turf/open/floor/iron, /area/station/engineering/atmos) +"wxa" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/station/cargo/bitrunning/den) "wxb" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -87228,6 +87199,21 @@ "wKg" = ( /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"wKh" = ( +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 4 + }, +/obj/effect/turf_decal/arrows{ + dir = 4 + }, +/obj/structure/railing{ + layer = 3.1 + }, +/obj/effect/decal/cleanable/robot_debris, +/obj/structure/disposalpipe/segment, +/obj/effect/landmark/start/bitrunner, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "wKi" = ( /obj/effect/turf_decal/tile/red/diagonal_edge, /turf/open/floor/iron/dark, @@ -89776,6 +89762,12 @@ /obj/effect/spawner/random/structure/crate, /turf/open/floor/pod/dark, /area/station/maintenance/floor1/port/aft) +"xsU" = ( +/obj/machinery/computer/quantum_console{ + dir = 4 + }, +/turf/open/floor/iron/dark/smooth_corner, +/area/station/cargo/bitrunning/den) "xsX" = ( /obj/structure/railing/corner, /obj/structure/cable, @@ -92323,6 +92315,14 @@ /obj/structure/sign/poster/official/random/directional/west, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"ybb" = ( +/obj/machinery/firealarm/directional/south, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/oil/streak, +/obj/machinery/byteforge, +/obj/effect/turf_decal/box, +/turf/open/floor/iron/dark/smooth_large, +/area/station/cargo/bitrunning/den) "ybe" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -115524,11 +115524,11 @@ owI owI owI owI -tXe -tXe -tXe -tXe -tXe +fXh +fXh +fXh +fXh +fXh jGQ mMV oic @@ -115781,14 +115781,14 @@ owI owI owI owI -tXe -tXe -dPx -pUY -tXe -tXe -tXe -tXe +fXh +fXh +xsU +iXD +fXh +fXh +fXh +fXh gUS nOj dzo @@ -116038,14 +116038,14 @@ owI owI owI owI -tXe -tXe -iCP -nnu -voF -jdQ -jyn -tXe +fXh +fXh +gNB +nAl +pTH +bGW +ybb +fXh eps yiZ yiZ @@ -116295,14 +116295,14 @@ owI owI owI owI -tXe -tXe -cOT -olH -jqm -acR -etY -qZU +fXh +fXh +jpR +ayQ +wKh +dDe +jBn +wxa dQo qWJ qWJ @@ -116552,14 +116552,14 @@ owI owI owI owI -tXe -tXe -pjw -scn -vzo -dqM -bED -qZU +fXh +fXh +dPd +vPt +jVX +qSj +cWb +wxa rYA eEB lUY @@ -116809,14 +116809,14 @@ owI owI owI owI -tXe -tXe -tXe -tXe -tXe -mps -qZU -tXe +fXh +fXh +fXh +fXh +fXh +cot +wxa +fXh srf fve aSL @@ -190614,7 +190614,7 @@ pdY lGp xKy wHq -sPg +tSt hxy nCG nzJ diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index f080b79a59c..02c0a5b0fdb 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -11758,7 +11758,7 @@ /area/station/ai_monitored/turret_protected/ai_upload) "dzp" = ( /obj/structure/window/spawner/directional/south, -/mob/living/simple_animal/pet/cat/cak, +/mob/living/basic/pet/cat/cak, /turf/open/floor/iron/smooth_large, /area/station/maintenance/starboard/greater) "dzq" = ( @@ -12452,7 +12452,7 @@ anchored = 1; name = "Jerry's bed" }, -/mob/living/simple_animal/pet/cat/jerry, +/mob/living/basic/pet/cat/jerry, /turf/open/floor/wood, /area/station/security/prison/garden) "dIf" = ( @@ -71263,7 +71263,7 @@ /area/station/engineering/atmos) "tLD" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime{ +/mob/living/basic/pet/cat/runtime{ icon_dead = "original_dead"; icon_living = "original"; icon_state = "original" diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 1a4dccbb567..b7e5199bbc9 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -10598,6 +10598,13 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/security/prison) +"cCS" = ( +/obj/structure/bed/dogbed/runtime, +/obj/structure/sign/clock/directional/north, +/obj/machinery/light/cold/directional/north, +/mob/living/basic/pet/cat/runtime, +/turf/open/floor/iron/dark, +/area/station/command/heads_quarters/cmo) "cDd" = ( /obj/effect/turf_decal/sand/plating, /turf/open/floor/plating, @@ -14087,6 +14094,18 @@ }, /turf/open/floor/iron/white, /area/station/science/xenobiology) +"dOx" = ( +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed/dogbed{ + desc = "A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off."; + name = "cat bed" + }, +/mob/living/basic/pet/cat/jerry, +/turf/open/floor/iron, +/area/station/maintenance/tram/mid) "dOC" = ( /obj/effect/turf_decal/trimline/neutral/filled/line{ dir = 8 @@ -19631,6 +19650,18 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron/smooth, /area/station/maintenance/tram/right) +"fUY" = ( +/obj/effect/turf_decal/trimline/brown/line, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/siding/thinplating_new/dark{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/oil/streak, +/obj/effect/landmark/start/bitrunner, +/obj/machinery/camera/autoname/directional/west, +/turf/open/floor/iron/dark/textured_large, +/area/station/cargo/bitrunning/den) "fVg" = ( /obj/effect/turf_decal/trimline/neutral/filled/corner{ dir = 1 @@ -32233,18 +32264,6 @@ }, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"kxC" = ( -/obj/effect/turf_decal/trimline/neutral/filled/line{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/bed/dogbed{ - desc = "A comfy-looking cat bed. You can even strap your pet in, in case the gravity turns off."; - name = "cat bed" - }, -/mob/living/simple_animal/pet/cat/jerry, -/turf/open/floor/iron, -/area/station/maintenance/tram/mid) "kxF" = ( /obj/item/kirbyplants/random/dead/research_director, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -36395,18 +36414,6 @@ "lQM" = ( /turf/closed/wall/r_wall, /area/station/maintenance/port/central) -"lQS" = ( -/obj/effect/turf_decal/trimline/brown/line, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/siding/thinplating_new/dark{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/decal/cleanable/oil/streak, -/obj/effect/landmark/start/bitrunner, -/obj/machinery/camera/autoname/directional/west, -/turf/open/floor/iron/dark/textured_large, -/area/station/cargo/bitrunning/den) "lQT" = ( /obj/effect/turf_decal/trimline/green/filled/line{ dir = 6 @@ -51709,13 +51716,6 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) -"rsk" = ( -/obj/structure/bed/dogbed/runtime, -/obj/structure/sign/clock/directional/north, -/obj/machinery/light/cold/directional/north, -/mob/living/simple_animal/pet/cat/runtime, -/turf/open/floor/iron/dark, -/area/station/command/heads_quarters/cmo) "rsz" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ dir = 4 @@ -104629,7 +104629,7 @@ eYs kFp kFp dcq -kxC +dOx qjU aaa qjU @@ -165821,7 +165821,7 @@ aNr apC abM mBq -rsk +cCS ojQ iTS eUJ @@ -179387,7 +179387,7 @@ aaa aaa eSQ nwB -lQS +fUY mgE cTU vSI diff --git a/_maps/shuttles/emergency_hugcage.dmm b/_maps/shuttles/emergency_hugcage.dmm index fc474764401..6e68506c433 100644 --- a/_maps/shuttles/emergency_hugcage.dmm +++ b/_maps/shuttles/emergency_hugcage.dmm @@ -289,7 +289,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "Hf" = ( -/mob/living/simple_animal/pet/cat/kitten, +/mob/living/basic/pet/cat/kitten, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "IH" = ( diff --git a/_maps/shuttles/skyrat/whiteship_blueshift.dmm b/_maps/shuttles/skyrat/whiteship_blueshift.dmm index 998e435d1d5..533ea6484b0 100644 --- a/_maps/shuttles/skyrat/whiteship_blueshift.dmm +++ b/_maps/shuttles/skyrat/whiteship_blueshift.dmm @@ -3472,7 +3472,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Jones" }, /turf/open/floor/iron, diff --git a/_maps/virtual_domains/pipedream.dmm b/_maps/virtual_domains/pipedream.dmm index c443e8c4764..ffce92e9915 100644 --- a/_maps/virtual_domains/pipedream.dmm +++ b/_maps/virtual_domains/pipedream.dmm @@ -66,6 +66,19 @@ /obj/structure/railing, /turf/open/chasm, /area/virtual_domain) +"bL" = ( +/mob/living/basic/pet/cat/space, +/obj/structure/bed/dogbed{ + name = "cat bed" + }, +/obj/item/toy/plush/moth{ + pixel_x = 3; + pixel_y = 4 + }, +/obj/machinery/light/small/dim/directional/south, +/obj/structure/sign/poster/official/moth_hardhat/directional/west, +/turf/open/floor/plating, +/area/virtual_domain) "bS" = ( /obj/effect/turf_decal/tile/yellow/anticorner/contrasted{ dir = 1 @@ -220,7 +233,6 @@ /area/virtual_domain) "gc" = ( /obj/structure/disposalpipe/broken, -/obj/effect/landmark/bitrunning/mob_segment, /turf/open/floor/plating, /area/virtual_domain) "gj" = ( @@ -363,6 +375,10 @@ /obj/effect/mapping_helpers/airlock/locked, /turf/open/floor/plating, /area/virtual_domain) +"lt" = ( +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "lx" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; @@ -474,6 +490,12 @@ }, /turf/open/floor/carpet/orange, /area/virtual_domain) +"pb" = ( +/obj/structure/broken_flooring/corner{ + dir = 4 + }, +/turf/open/floor/plating, +/area/virtual_domain) "pf" = ( /obj/effect/spawner/structure/window/reinforced, /obj/effect/mapping_helpers/damaged_window, @@ -627,6 +649,13 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/virtual_domain) +"tE" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, +/area/virtual_domain) "ud" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/carpet/royalblue{ @@ -882,6 +911,12 @@ /obj/item/stack/rods/two, /turf/open/space/basic, /area/virtual_domain) +"Aw" = ( +/obj/structure/lattice/catwalk{ + name = "industrial lift" + }, +/turf/open/chasm, +/area/virtual_domain) "AJ" = ( /obj/effect/decal/cleanable/generic, /obj/structure/disposalpipe/segment, @@ -1040,10 +1075,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/virtual_domain) -"EK" = ( -/obj/structure/disposalpipe/broken, -/turf/open/floor/plating, -/area/virtual_domain) "Fa" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet/crate/maint, @@ -1239,10 +1270,9 @@ /turf/open/floor/plating, /area/virtual_domain) "KX" = ( -/obj/structure/lattice/catwalk{ - name = "industrial lift" - }, -/turf/open/chasm, +/obj/structure/disposalpipe/broken, +/obj/effect/landmark/bitrunning/mob_segment, +/turf/open/floor/plating, /area/virtual_domain) "Ln" = ( /obj/structure/disposalpipe/broken{ @@ -1363,10 +1393,6 @@ }, /turf/open/floor/plating, /area/virtual_domain) -"Ou" = ( -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/plating, -/area/virtual_domain) "OJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes{ @@ -1498,13 +1524,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/virtual_domain) -"Rs" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/landmark/bitrunning/mob_segment, -/turf/open/floor/plating, -/area/virtual_domain) "Ru" = ( /obj/machinery/door/airlock/external/glass/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -1582,12 +1601,6 @@ /obj/effect/mob_spawn/corpse/human/factory/qm, /turf/open/floor/iron, /area/virtual_domain) -"Tn" = ( -/obj/structure/broken_flooring/corner{ - dir = 4 - }, -/turf/open/floor/plating, -/area/virtual_domain) "Tp" = ( /obj/machinery/door/poddoor/shutters/indestructible{ dir = 4; @@ -1818,19 +1831,6 @@ /obj/structure/broken_flooring/corner/directional/west, /turf/open/floor/plating, /area/virtual_domain) -"Ym" = ( -/mob/living/simple_animal/pet/cat/space, -/obj/structure/bed/dogbed{ - name = "cat bed" - }, -/obj/item/toy/plush/moth{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/machinery/light/small/dim/directional/south, -/obj/structure/sign/poster/official/moth_hardhat/directional/west, -/turf/open/floor/plating, -/area/virtual_domain) "Yt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -2161,7 +2161,7 @@ vA Dr bw Jq -EK +gc eg RJ eg @@ -2259,8 +2259,8 @@ RJ eg uU gj -Ou -Tn +lt +pb OR eg RJ @@ -2506,7 +2506,7 @@ kU pv AP IZ -KX +Aw Wd uv DE @@ -2555,14 +2555,14 @@ mu uF xl AP -KX +Aw JT bG -Rs +tE DA DA zE -gc +KX mu Yz lW @@ -2605,8 +2605,8 @@ iz jS gj rJ -KX -KX +Aw +Aw Wd Ff lN @@ -2756,7 +2756,7 @@ Tp Tp Tp eg -Ym +bL eg eg xa @@ -2857,9 +2857,9 @@ Yl pJ eg kn -Tn +pb kU -Ou +lt kU Fa kU @@ -2909,7 +2909,7 @@ eg rc mu rM -EK +gc vQ vQ mu diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index 6f5f0364bec..aff00260705 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -220,6 +220,34 @@ /// Key for the next time we can cast a spell #define BB_WIZARD_SPELL_COOLDOWN "BB_wizard_spell_cooldown" + +//cat AI keys +/// key that holds the target we will battle over our turf +#define BB_TRESSPASSER_TARGET "tresspasser_target" +/// key that holds angry meows +#define BB_HOSTILE_MEOWS "hostile_meows" +/// key that holds the mouse target +#define BB_MOUSE_TARGET "mouse_target" +/// key that holds our dinner target +#define BB_CAT_FOOD_TARGET "cat_food_target" +/// key that holds the food we must deliver +#define BB_FOOD_TO_DELIVER "food_to_deliver" +/// key that holds things we can hunt +#define BB_HUNTABLE_PREY "huntable_prey" +/// key that holds target kitten to feed +#define BB_KITTEN_TO_FEED "kitten_to_feed" +/// key that holds our hungry meows +#define BB_HUNGRY_MEOW "hungry_meows" +/// key that holds maximum distance food is to us so we can pursue it +#define BB_MAX_DISTANCE_TO_FOOD "max_distance_to_food" +/// key that holds the stove we must turn off +#define BB_STOVE_TARGET "stove_target" +/// key that holds the donut we will decorate +#define BB_DONUT_TARGET "donut_target" +/// key that holds our home... +#define BB_CAT_HOME "cat_home" +/// key that holds the human we will beg +#define BB_HUMAN_BEG_TARGET "human_beg_target" //netguardians /// rocket launcher #define BB_NETGUARDIAN_ROCKET_ABILITY "netguardian_rocket" diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index e9963ca1f6a..8eec04ebe06 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -178,7 +178,7 @@ GLOBAL_LIST_INIT(turfs_pass_meteor, typecacheof(list( #define isdrone(A) (istype(A, /mob/living/basic/drone)) -#define iscat(A) (istype(A, /mob/living/simple_animal/pet/cat)) +#define iscat(A) (istype(A, /mob/living/basic/pet/cat)) #define isdog(A) (istype(A, /mob/living/basic/pet/dog)) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index b7fdcea57f2..1c97c9d725f 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -995,6 +995,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_MOB_BREEDER "mob_breeder" /// Trait given to mobs that we do not want to mindswap #define TRAIT_NO_MINDSWAP "no_mindswap" +///trait given to food that can be baked by /datum/component/bakeable +#define TRAIT_BAKEABLE "bakeable" /// Trait given to foam darts that have an insert in them #define TRAIT_DART_HAS_INSERT "dart_has_insert" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 58b7e04cd98..58d31b90b42 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -480,6 +480,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_TRANSFORM_ACTIVE" = TRAIT_TRANSFORM_ACTIVE, "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, "TRAIT_WIELDED" = TRAIT_WIELDED, + "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, ), /obj/item/ammo_casing = list( "TRAIT_DART_HAS_INSERT" = TRAIT_DART_HAS_INSERT, diff --git a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm index b02ec8eaa85..9e3cd557b64 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm @@ -1,5 +1,9 @@ /// similar to finding a target but looks for food types in the // the what? /datum/ai_planning_subtree/find_food + ///behavior we use to find the food + var/datum/ai_behavior/finding_behavior = /datum/ai_behavior/find_and_set/in_list + ///key of foods list + var/food_list_key = BB_BASIC_FOODS /datum/ai_planning_subtree/find_food/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) . = ..() @@ -7,4 +11,4 @@ // Busy with something return - controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[BB_BASIC_FOODS]) + controller.queue_behavior(finding_behavior, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[food_list_key]) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm index 7a3d5470b1a..5bd0f840488 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -214,6 +214,14 @@ emote_hear = list("rawrs.","grumbles.","grawls.", "stomps!") emote_see = list("stares ferociously.") +/datum/ai_planning_subtree/random_speech/cats + speech_chance = 10 + speak = list( + "mrawww!", + "meow!", + "maw!", + ) + /datum/ai_planning_subtree/random_speech/blackboard //literal tower of babel, subtree form speech_chance = 1 diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index d368641ce0c..84a007c2559 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -62,6 +62,13 @@ var/mob/living/living_pawn = controller.pawn return locate(locate_path) in living_pawn.held_items +/datum/ai_behavior/find_and_set/in_hands/given_list + +/datum/ai_behavior/find_and_set/in_hands/given_list/search_tactic(datum/ai_controller/controller, locate_paths) + var/list/found = typecache_filter_list(controller.pawn, locate_paths) + if(length(found)) + return pick(found) + /** * Variant of find and set that takes a list of things to find. */ diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 3ea9feb2b34..3e747640be3 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -60,10 +60,10 @@ if(!valid_dinner(living_mob, possible_dinner, hunt_range)) continue controller.set_blackboard_key(hunting_target_key, possible_dinner) - finish_action(controller, TRUE) + finish_action(controller, TRUE, hunting_target_key) return - finish_action(controller, FALSE) + finish_action(controller, FALSE, hunting_target_key) /datum/ai_behavior/find_hunt_target/proc/valid_dinner(mob/living/source, atom/dinner, radius) if(isliving(dinner)) diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index b4cde3c5752..a745be2b1a5 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -26,6 +26,8 @@ src.required_bake_time = required_bake_time src.positive_result = positive_result src.added_reagents = added_reagents + if(positive_result) + ADD_TRAIT(parent, TRAIT_BAKEABLE, REF(src)) // Inherit the new values passed to the component /datum/component/bakeable/InheritComponent(datum/component/bakeable/new_comp, original, bake_result, required_bake_time, positive_result, use_large_steam_sprite) @@ -45,6 +47,7 @@ /datum/component/bakeable/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_ITEM_OVEN_PLACED_IN, COMSIG_ITEM_OVEN_PROCESS, COMSIG_ATOM_EXAMINE)) + REMOVE_TRAIT(parent, TRAIT_BAKEABLE, REF(src)) /// Signal proc for [COMSIG_ITEM_OVEN_PLACED_IN] when baking starts (parent enters an oven) /datum/component/bakeable/proc/on_baking_start(datum/source, atom/used_oven, mob/baker) diff --git a/code/datums/elements/consumable_mob.dm b/code/datums/elements/consumable_mob.dm new file mode 100644 index 00000000000..1a7c67a4312 --- /dev/null +++ b/code/datums/elements/consumable_mob.dm @@ -0,0 +1,32 @@ +/** + * element for mobs that can be consumed! + */ +/datum/element/consumable_mob + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///reagents to give our consumer + var/list/reagents_list + +/datum/element/consumable_mob/Attach(datum/target, list/reagents_list) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + if(isnull((reagents_list))) + stack_trace("No valid reagents list provided!") + + src.reagents_list = reagents_list + RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_consume)) + +/datum/element/consumable_mob/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_ATTACK_HAND) + +/datum/element/consumable_mob/proc/on_consume(atom/movable/source, mob/living/consumer) + SIGNAL_HANDLER + if(!consumer.combat_mode || !consumer.reagents) + return + for(var/reagent_type in reagents_list) + if(isnull(reagents_list[reagent_type])) + return + consumer.reagents.add_reagent(reagent_type, reagents_list[reagent_type]) + diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index dd571c85746..57312774776 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -267,6 +267,8 @@ /mob/living/basic/mouse, /mob/living/basic/mushroom, /mob/living/basic/parrot, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/cak, /mob/living/basic/pet/dog/breaddog, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, @@ -277,8 +279,6 @@ /mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/cak, /obj/item/food/sausage/american, /obj/item/skub, ) diff --git a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm index b078b5c76ed..235986cbd0d 100644 --- a/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm +++ b/code/game/machinery/dna_infuser/infuser_entries/infuser_tier_zero_entries.dm @@ -78,7 +78,7 @@ "oh, let me guess, you're a big fan of those japanese tourist bots", ) input_obj_or_mob = list( - /mob/living/simple_animal/pet/cat, + /mob/living/basic/pet/cat, ) output_organs = list( /obj/item/organ/internal/ears/cat, diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index cd1d2c94753..4f5cc1b5e8a 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -270,20 +270,6 @@ target_felinid.visible_message(span_notice("[target_felinid] looks briefly distracted by the light."), span_warning("You're briefly tempted by the shiny light...")) else target_felinid.visible_message(span_notice("[target_felinid] stares at the light."), span_warning("You stare at the light...")) - - //cats! - chance for any cat near the target to pounce at the light, stepping to the target - for(var/mob/living/simple_animal/pet/cat/target_kitty in view(1, targloc)) - if(target_kitty.stat == DEAD) - continue - if(prob(effectchance * diode.rating)) - if(target_kitty.resting) - target_kitty.set_resting(FALSE, instant = TRUE) - target_kitty.visible_message(span_notice("[target_kitty] pounces on the light!"), span_warning("LIGHT!")) - target_kitty.Move(targloc) - target_kitty.Immobilize(1 SECONDS) - else - target_kitty.visible_message(span_notice("[target_kitty] looks uninterested in your games."), span_warning("You spot [user] shining [src] at you. How insulting!")) - //The pointer is shining, change its sprite to show icon_state = "pointer_[pointer_icon_state]" diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index e4166f62984..ebf4c2ff4ee 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -304,6 +304,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \ new/datum/stack_recipe("wooden door", /obj/structure/mineral_door/wood, 10, time = 2 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_DOORS), \ new/datum/stack_recipe("wooden stairs frame", /obj/structure/stairs_frame/wood, 10, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("wooden fence", /obj/structure/railing/wooden_fence, 2, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("cat house", /obj/structure/cat_house, 5, time = 5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("coffin", /obj/structure/closet/crate/coffin, 5, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("book case", /obj/structure/bookcase, 4, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_FURNITURE), \ new/datum/stack_recipe("drying rack", /obj/machinery/smartfridge/drying_rack, 10, time = 1.5 SECONDS, one_per_turf = TRUE, on_solid_ground = TRUE, category = CAT_TOOLS), \ diff --git a/code/game/objects/structures/cat_house.dm b/code/game/objects/structures/cat_house.dm new file mode 100644 index 00000000000..8baa9ce2416 --- /dev/null +++ b/code/game/objects/structures/cat_house.dm @@ -0,0 +1,46 @@ +/obj/structure/cat_house + name = "cat house" + desc = "cozy home for cats" + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat_house" + density = TRUE + anchored = TRUE + ///cat residing in this house + var/mob/living/resident_cat + +/obj/structure/cat_house/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ATOM_ATTACK_BASIC_MOB, PROC_REF(enter_home)) + +/obj/structure/cat_house/proc/enter_home(datum/source, mob/living/attacker) + SIGNAL_HANDLER + + if(isnull(resident_cat) && istype(attacker, /mob/living/basic/pet/cat)) + attacker.forceMove(src) + return + if(resident_cat == attacker) + attacker.forceMove(drop_location()) + +/obj/structure/cat_house/Entered(atom/movable/mover) + . = ..() + if(!istype(mover, /mob/living/basic/pet/cat)) + return + resident_cat = mover + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/cat_house/Exited(atom/movable/mover) + . = ..() + if(mover != resident_cat) + return + resident_cat = null + update_appearance(UPDATE_OVERLAYS) + +/obj/structure/cat_house/update_overlays() + . = ..() + if(isnull(resident_cat)) + return + var/image/cat_icon = image(icon = resident_cat.icon, icon_state = resident_cat.icon_state, layer = LOW_ITEM_LAYER) + cat_icon.transform = cat_icon.transform.Scale(0.7, 0.7) + cat_icon.pixel_x = 0 + cat_icon.pixel_y = -9 + . += cat_icon diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm index b8a8f39fbc3..e598f1f9215 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm @@ -14,8 +14,8 @@ possible_shapes = list( /mob/living/basic/carp, /mob/living/basic/mouse, + /mob/living/basic/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/fox, /mob/living/simple_animal/bot/secbot, - /mob/living/simple_animal/pet/cat, ) diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index 01ab042f11b..21bf06eb386 100644 --- a/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -23,7 +23,7 @@ /mob/living/basic/pet/dog/corgi/puppy/ian ), JOB_CAPTAIN = /mob/living/basic/pet/fox/renault, - JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime, + JOB_CHIEF_MEDICAL_OFFICER = /mob/living/basic/pet/cat/runtime, JOB_CHIEF_ENGINEER = /mob/living/basic/parrot/poly, JOB_QUARTERMASTER = list( /mob/living/basic/gorilla/cargorilla, diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index 942b1414cf9..676dfb0a2f7 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -31,18 +31,22 @@ name = "Cat Crate" desc = "The cat goes meow! Comes with a collar and a nice cat toy! Cheeseburger not included."//i can't believe im making this reference cost = CARGO_CRATE_VALUE * 10 //Cats are worth as much as corgis. - contains = list(/mob/living/simple_animal/pet/cat, - /obj/item/clothing/neck/petcollar, - /obj/item/toy/cattoy, - ) + contains = list( + /mob/living/basic/pet/cat, + /obj/item/clothing/neck/petcollar, + /obj/item/toy/cattoy, + ) crate_name = "cat crate" /datum/supply_pack/critter/cat/generate() . = ..() - if(prob(50)) - var/mob/living/simple_animal/pet/cat/C = locate() in . - qdel(C) - new /mob/living/simple_animal/pet/cat/_proc(.) + if(!prob(50)) + return + var/mob/living/basic/pet/cat/delete_cat = locate() in . + if(isnull(delete_cat)) + return + qdel(delete_cat) + new /mob/living/basic/pet/cat/_proc(.) /datum/supply_pack/critter/chick name = "Chicken Crate" diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index 1259f56597d..7dd423ed733 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -40,12 +40,12 @@ total_requirement = 3 max_requirement_per_type = 2 possible_types = list( + /mob/living/basic/pet/cat, /mob/living/basic/carp, /mob/living/basic/chicken, /mob/living/basic/cow, /mob/living/basic/pet/dog/corgi, /mob/living/basic/snake, - /mob/living/simple_animal/pet/cat, ) /datum/experiment/scanning/random/cytology/medium/one diff --git a/code/modules/explorer_drone/loot.dm b/code/modules/explorer_drone/loot.dm index 121880af7ce..3f3d6f6c520 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -96,10 +96,10 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) id = "pets" var/carrier_type = /obj/item/pet_carrier/biopod var/list/possible_pets = list( + /mob/living/basic/pet/cat/space, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, /mob/living/basic/pet/penguin/baby, - /mob/living/simple_animal/pet/cat/space, ) /datum/adventure_loot_generator/pet/generate() diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index e78efd293ff..c05446d3521 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -222,7 +222,7 @@ /datum/reagent/blood = 50, /datum/reagent/medicine/strange_reagent = 5 ) - result = /mob/living/simple_animal/pet/cat/breadcat + result = /mob/living/basic/pet/cat/breadcat category = CAT_BREAD /datum/crafting_recipe/food/frenchtoast diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index 4a2c9f2935d..b34cc5f36e9 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -226,7 +226,7 @@ /datum/reagent/consumable/sprinkles = 5, /datum/reagent/teslium = 1 //To shock the whole thing into life ) - result = /mob/living/simple_animal/pet/cat/cak + result = /mob/living/basic/pet/cat/cak category = CAT_CAKE //Cat! Haha, get it? CAT? GET IT? We get it - Love Felines /datum/crafting_recipe/food/fruitcake diff --git a/code/modules/holodeck/holo_effect.dm b/code/modules/holodeck/holo_effect.dm index 76b3d320774..6b727a2c750 100644 --- a/code/modules/holodeck/holo_effect.dm +++ b/code/modules/holodeck/holo_effect.dm @@ -94,8 +94,8 @@ /mob/living/basic/pet/dog/pug, ) mobtype += pick( - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/kitten, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/kitten, ) /obj/effect/holodeck_effect/mobspawner/bee diff --git a/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm new file mode 100644 index 00000000000..35a5d9e12af --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm @@ -0,0 +1,62 @@ +/datum/ai_controller/basic_controller/cat/bread + planning_subtrees = list( + /datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove + target_key = BB_STOVE_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target + finding_behavior = /datum/ai_behavior/find_hunt_target/stove + hunt_targets = list(/obj/machinery/oven/range) + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/stove + +/datum/ai_behavior/find_hunt_target/stove/valid_dinner(mob/living/source, obj/machinery/oven/range/stove, radius) + if(!length(stove.used_tray?.contents) || stove.open) + return FALSE + //something in there is still baking... + for(var/atom/baking in stove.used_tray) + if(HAS_TRAIT(baking, TRAIT_BAKEABLE)) + return FALSE + return TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target/target_caught(mob/living/hunter, obj/machinery/oven/range/stove) + if(stove.open) + return + return ..() + +/datum/ai_controller/basic_controller/cat/cake + planning_subtrees = list( + /datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove, + /datum/ai_planning_subtree/find_and_hunt_target/decorate_donuts, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/find_and_hunt_target/decorate_donuts + target_key = BB_DONUT_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/decorate_donuts + finding_behavior = /datum/ai_behavior/find_hunt_target/decorate_donuts + hunt_targets = list(/obj/item/food/donut) + hunt_range = 9 + +/datum/ai_behavior/find_hunt_target/decorate_donuts/valid_dinner(mob/living/source, obj/item/food/donut/target, radius) + if(!target.is_decorated) + return FALSE + return can_see(source, target, radius) + +/datum/ai_behavior/hunt_target/decorate_donuts + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/decorate_donuts/target_caught(mob/living/hunter, atom/target) + hunter.spin(spintime = 4, speed = 1) diff --git a/code/modules/mob/living/basic/pets/cat/cat.dm b/code/modules/mob/living/basic/pets/cat/cat.dm new file mode 100644 index 00000000000..425dd428ce5 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -0,0 +1,189 @@ +/mob/living/basic/pet/cat + name = "cat" + desc = "Kitty!!" + icon = 'icons/mob/simple/pets.dmi' + icon_state = "cat2" + icon_living = "cat2" + icon_dead = "cat2_dead" + speak_emote = list("purrs", "meows") + pass_flags = PASSTABLE + mob_size = MOB_SIZE_SMALL + mob_biotypes = MOB_ORGANIC|MOB_BEAST + unsuitable_atmos_damage = 0.5 + butcher_results = list( + /obj/item/food/meat/slab = 1, + /obj/item/organ/internal/ears/cat = 1, + /obj/item/organ/external/tail/cat = 1, + /obj/item/stack/sheet/animalhide/cat = 1 + ) + response_help_continuous = "pets" + response_help_simple = "pet" + response_disarm_continuous = "gently pushes aside" + response_disarm_simple = "gently push aside" + response_harm_continuous = "kicks" + response_harm_simple = "kick" + mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT + gold_core_spawnable = FRIENDLY_SPAWN + collar_icon_state = "cat" + has_collar_resting_icon_state = TRUE + can_be_held = TRUE + ai_controller = /datum/ai_controller/basic_controller/cat + held_state = "cat2" + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/weapons/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + ///can this cat breed? + var/can_breed = TRUE + ///can hold items? + var/can_hold_item = TRUE + ///can this cat interact with stoves? + var/can_interact_with_stove = FALSE + ///list of items we can carry + var/static/list/huntable_items = list( + /obj/item/fish, + /obj/item/food/deadmouse, + /obj/item/food/fishmeat, + ) + ///item we are currently holding + var/obj/item/held_food + ///mutable appearance for held item + var/mutable_appearance/held_item_overlay + +/mob/living/basic/pet/cat/Initialize(mapload) + . = ..() + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/pet_bonus, "purrs!") + add_verb(src, /mob/living/proc/toggle_resting) + ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) + ai_controller.set_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) + if(can_breed) + add_breeding_component() + if(can_hold_item) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) + if(can_interact_with_stove) + RegisterSignal(src, COMSIG_LIVING_EARLY_UNARMED_ATTACK, PROC_REF(pre_unarmed_attack)) + +/mob/living/basic/pet/cat/proc/pre_attack(mob/living/source, atom/movable/target) + SIGNAL_HANDLER + if(!is_type_in_list(target, huntable_items) || held_food) + return + target.forceMove(src) + +/mob/living/basic/pet/cat/proc/pre_unarmed_attack(mob/living/hitter, atom/target, proximity, modifiers) + SIGNAL_HANDLER + + if(istype(target, /obj/machinery/oven/range)) + target.attack_hand(src) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/mob/living/basic/pet/cat/Exited(atom/movable/gone, direction) + . = ..() + if(gone != held_food) + return + held_food = null + update_appearance(UPDATE_OVERLAYS) + +/mob/living/basic/pet/cat/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(is_type_in_list(arrived, huntable_items)) + held_food = arrived + update_appearance(UPDATE_OVERLAYS) + return ..() + +/mob/living/basic/pet/cat/update_overlays() + . = ..() + if(stat == DEAD || resting || !held_food) + return + if(istype(held_food, /obj/item/fish)) + held_item_overlay = mutable_appearance(icon, "cat_fish_overlay") + if(istype(held_food, /obj/item/food/deadmouse)) + held_item_overlay = mutable_appearance(icon, "cat_mouse_overlay") + . += held_item_overlay + +/mob/living/basic/pet/cat/update_resting() + . = ..() + if(stat == DEAD) + return + update_appearance(UPDATE_ICON_STATE) + +/mob/living/basic/pet/cat/update_icon_state() + . = ..() + if (resting) + icon_state = "[icon_living]_rest" + return + icon_state = "[icon_living]" + +/mob/living/basic/pet/cat/proc/add_breeding_component() + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/cat)),\ + baby_path = /mob/living/basic/pet/cat/kitten,\ + ) + +/mob/living/basic/pet/cat/space + name = "space cat" + desc = "They're a cat... in space!" + icon_state = "spacecat" + icon_living = "spacecat" + icon_dead = "spacecat_dead" + minimum_survivable_temperature = TCMB + maximum_survivable_temperature = T0C + 40 + held_state = "spacecat" + +/mob/living/basic/pet/cat/breadcat + name = "bread cat" + desc = "They're a cat... with a bread!" + icon_state = "breadcat" + icon_living = "breadcat" + icon_dead = "breadcat_dead" + ai_controller = /datum/ai_controller/basic_controller/cat/bread + collar_icon_state = null + held_state = "breadcat" + can_interact_with_stove = TRUE + butcher_results = list( + /obj/item/food/meat/slab = 2, + /obj/item/organ/internal/ears/cat = 1, + /obj/item/organ/external/tail/cat = 1, + /obj/item/food/breadslice/plain = 1 + ) + + +/mob/living/basic/pet/cat/original + name = "Batsy" + desc = "The product of alien DNA and bored geneticists." + gender = FEMALE + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + collar_icon_state = null + unique_pet = TRUE + held_state = "original" + +/mob/living/basic/pet/cat/kitten + name = "kitten" + desc = "D'aaawwww." + icon_state = "kitten" + icon_living = "kitten" + icon_dead = "kitten_dead" + density = FALSE + pass_flags = PASSMOB + mob_size = MOB_SIZE_SMALL + collar_icon_state = "kitten" + can_breed = FALSE + ai_controller = /datum/ai_controller/basic_controller/cat/kitten + can_hold_item = FALSE + +/mob/living/basic/pet/cat/kitten/Initialize(mapload) + . = ..() + AddElement(/datum/element/basic_eating, food_types = huntable_items) + +/mob/living/basic/pet/cat/_proc + name = "Proc" + gender = MALE + gold_core_spawnable = NO_SPAWN + unique_pet = TRUE + +/mob/living/basic/pet/cat/jerry //Holy shit we left jerry on donut ~ Arcane ~Fikou + name = "Jerry" + desc = "Tom is VERY amused." + gender = MALE diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm new file mode 100644 index 00000000000..b9436b555e5 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -0,0 +1,299 @@ +/datum/ai_controller/basic_controller/cat + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_HOSTILE_MEOWS = list("Mawwww", "Mrewwww", "mhhhhng..."), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/cat/kitten), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/reside_in_home, + /datum/ai_planning_subtree/flee_target/from_flee_key/cat_struggle, + /datum/ai_planning_subtree/find_and_hunt_target/hunt_mice, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food, + /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/haul_food_to_young, + /datum/ai_planning_subtree/territorial_struggle, + /datum/ai_planning_subtree/make_babies, + /datum/ai_planning_subtree/random_speech/cats, + ) + +/datum/ai_planning_subtree/reside_in_home + ///chance we enter our home + var/reside_chance = 5 + ///chance we leave our home + var/leave_home_chance = 15 + +/datum/ai_planning_subtree/reside_in_home/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + + if(controller.blackboard_key_exists(BB_CAT_HOME)) + controller.queue_behavior(/datum/ai_behavior/enter_cat_home, BB_CAT_HOME) + return + + if(istype(living_pawn.loc, /obj/structure/cat_house)) + if(SPT_PROB(leave_home_chance, seconds_per_tick)) + controller.set_blackboard_key(BB_CAT_HOME, living_pawn.loc) + return SUBTREE_RETURN_FINISH_PLANNING + + if(SPT_PROB(reside_chance, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/valid_home, BB_CAT_HOME, /obj/structure/cat_house) + +/datum/ai_behavior/find_and_set/valid_home/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/obj/structure/cat_house/home in oview(search_range, controller.pawn)) + if(home.resident_cat) + continue + return home + + return null + +/datum/ai_behavior/enter_cat_home + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/enter_cat_home/setup(datum/ai_controller/controller, target_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/enter_cat_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/obj/structure/cat_house/home = controller.blackboard[target_key] + var/mob/living/basic/living_pawn = controller.pawn + if(living_pawn == home.resident_cat || isnull(home.resident_cat)) + living_pawn.melee_attack(home) + finish_action(controller, TRUE, target_key) + return + + finish_action(controller, FALSE, target_key) + +/datum/ai_behavior/enter_cat_home/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + + +/datum/ai_planning_subtree/flee_target/from_flee_key/cat_struggle + flee_behaviour = /datum/ai_behavior/run_away_from_target/cat_struggle + +/datum/ai_behavior/run_away_from_target/cat_struggle + clear_failed_targets = TRUE + +/datum/ai_planning_subtree/territorial_struggle + ///chance we become hostile to another cat + var/hostility_chance = 5 + +/datum/ai_planning_subtree/territorial_struggle/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + if(living_pawn.gender != MALE || !SPT_PROB(hostility_chance, seconds_per_tick)) + return + if(controller.blackboard_key_exists(BB_TRESSPASSER_TARGET)) + controller.queue_behavior(/datum/ai_behavior/territorial_struggle, BB_TRESSPASSER_TARGET, BB_HOSTILE_MEOWS) + return SUBTREE_RETURN_FINISH_PLANNING + + controller.queue_behavior(/datum/ai_behavior/find_and_set/cat_tresspasser, BB_TRESSPASSER_TARGET, /mob/living/basic/pet/cat) + +/datum/ai_behavior/find_and_set/cat_tresspasser/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/ignore_types = controller.blackboard[BB_BABIES_CHILD_TYPES] + for(var/mob/living/basic/pet/cat/potential_enemy in oview(search_range, controller.pawn)) + if(potential_enemy.gender != MALE) + continue + if(is_type_in_list(potential_enemy, ignore_types)) + continue + var/datum/ai_controller/basic_controller/enemy_controller = potential_enemy.ai_controller + if(isnull(enemy_controller)) + continue + //theyre already engaged in a battle, leave them alone! + if(enemy_controller.blackboard_key_exists(BB_TRESSPASSER_TARGET)) + continue + //u choose me and i choose u + enemy_controller.set_blackboard_key(BB_TRESSPASSER_TARGET, controller.pawn) + return potential_enemy + return null + +/datum/ai_behavior/territorial_struggle + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 5 SECONDS + ///chance the battle ends! + var/end_battle_chance = 25 + +/datum/ai_behavior/territorial_struggle/setup(datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + if(target.ai_controller?.blackboard[target_key] != living_pawn) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/territorial_struggle/perform(seconds_per_tick, datum/ai_controller/controller, target_key, cries_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, TRUE, target_key) + return + + var/mob/living/living_pawn = controller.pawn + var/list/threaten_list = controller.blackboard[cries_key] + if(length(threaten_list)) + living_pawn.say(pick(threaten_list), forced = "ai_controller") + + if(!prob(end_battle_chance)) + return + + //50 50 chance we lose + var/datum/ai_controller/loser_controller = prob(50) ? controller : target.ai_controller + + loser_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, target) + target.ai_controller.clear_blackboard_key(BB_TRESSPASSER_TARGET) + finish_action(controller, TRUE, target_key) + +/datum/ai_behavior/territorial_struggle/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/find_and_hunt_target/hunt_mice + target_key = BB_MOUSE_TARGET + hunting_behavior = /datum/ai_behavior/play_with_mouse + finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_mice + hunt_targets = list(/mob/living/basic/mouse) + hunt_chance = 75 + hunt_range = 9 + +/datum/ai_planning_subtree/find_and_hunt_target/hunt_mice/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + var/list/items_we_carry = typecache_filter_list(living_pawn, controller.blackboard[BB_HUNTABLE_PREY]) + if(length(items_we_carry)) + return + return ..() + + +/datum/ai_behavior/find_hunt_target/hunt_mice/valid_dinner(mob/living/source, mob/living/mouse, radius) + if(mouse.stat == DEAD || mouse.mind) + return FALSE + return can_see(source, mouse, radius) + +//play as in kill +/datum/ai_behavior/play_with_mouse + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 10 SECONDS + ///chance we hunt the mouse! + var/consume_chance = 70 + +/datum/ai_behavior/play_with_mouse/setup(datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/play_with_mouse/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() + var/mob/living/basic/mouse/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, TRUE, target_key) + return + + consume_chance = istype(target, /mob/living/basic/mouse/brown/tom) ? 5 : initial(consume_chance) + if(prob(consume_chance)) + target.splat() + finish_action(controller, TRUE, target_key) + return + finish_action(controller, FALSE, target_key) + +/datum/ai_behavior/play_with_mouse/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + var/atom/target = controller.blackboard[target_key] + controller.clear_blackboard_key(target_key) + if(isnull(target)) + return + var/manual_emote = "attempts to hunt [target]..." + var/end_result = success ? "and succeeds!" : "but fails!" + manual_emote += end_result + living_pawn.manual_emote(manual_emote) + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food + target_key = BB_CAT_FOOD_TARGET + hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food + finding_behavior = /datum/ai_behavior/find_hunt_target/find_cat_food + hunt_targets = list(/obj/item/fish, /obj/item/food/deadmouse, /obj/item/food/fishmeat) + hunt_chance = 75 + hunt_range = 9 + +/datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food + always_reset_target = TRUE + +/datum/ai_behavior/find_hunt_target/find_cat_food/valid_dinner(mob/living/source, atom/dinner, radius) + //this food is already near a kitten, let the kitten eat it + var/mob/living/nearby_kitten = locate(/mob/living/basic/pet/cat/kitten) in oview(2, dinner) + if(nearby_kitten && nearby_kitten != source) + return FALSE + return can_see(source, dinner, radius) + +/datum/ai_planning_subtree/haul_food_to_young/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_FOOD_TO_DELIVER)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/in_hands/given_list, BB_FOOD_TO_DELIVER, controller.blackboard[BB_HUNTABLE_PREY]) + return + if(!controller.blackboard_key_exists(BB_KITTEN_TO_FEED)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/valid_kitten, BB_KITTEN_TO_FEED, /mob/living/basic/pet/cat/kitten) + return + + controller.queue_behavior(/datum/ai_behavior/deliver_food_to_kitten, BB_KITTEN_TO_FEED, BB_FOOD_TO_DELIVER) + +/datum/ai_behavior/find_and_set/valid_kitten + +/datum/ai_behavior/find_and_set/valid_kitten/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/mob/living/kitten = locate(locate_path) in oview(search_range, controller.pawn) + //kitten already has food near it, go feed another hungry kitten + + if(isnull(kitten)) + return null + + var/list/nearby_food = typecache_filter_list(oview(2, kitten), controller.blackboard[BB_HUNTABLE_PREY]) + if(kitten.stat != DEAD && !length(nearby_food)) + return kitten + return null + +/datum/ai_behavior/deliver_food_to_kitten +/datum/ai_behavior/deliver_food_to_kitten + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + action_cooldown = 5 SECONDS + +/datum/ai_behavior/deliver_food_to_kitten/setup(datum/ai_controller/controller, target_key, food_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + if(QDELETED(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/deliver_food_to_kitten/perform(seconds_per_tick, datum/ai_controller/controller, target_key, food_key) + . = ..() + var/mob/living/target = controller.blackboard[target_key] + + if(QDELETED(target)) + finish_action(controller, FALSE, target_key, food_key) + return + + var/mob/living/living_pawn = controller.pawn + var/atom/movable/food = controller.blackboard[food_key] + + if(isnull(food) || !(food in living_pawn)) + finish_action(controller, FALSE, target_key, food_key) + return + + food.forceMove(get_turf(living_pawn)) + finish_action(controller, TRUE, target_key, food_key) + +/datum/ai_behavior/deliver_food_to_kitten/finish_action(datum/ai_controller/controller, success, target_key, food_key) + . = ..() + controller.clear_blackboard_key(target_key) + controller.clear_blackboard_key(food_key) + + + + diff --git a/code/modules/mob/living/basic/pets/cat/keeki.dm b/code/modules/mob/living/basic/pets/cat/keeki.dm new file mode 100644 index 00000000000..5cf16552e9a --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/keeki.dm @@ -0,0 +1,59 @@ +/mob/living/basic/pet/cat/cak + name = "Keeki" + desc = "She is a cat made out of cake." + icon_state = "cak" + icon_living = "cak" + icon_dead = "cak_dead" + health = 50 + maxHealth = 50 + gender = FEMALE + butcher_results = list( + /obj/item/organ/internal/brain = 1, + /obj/item/organ/internal/heart = 1, + /obj/item/food/cakeslice/birthday = 3, + /obj/item/food/meat/slab = 2 + ) + response_harm_continuous = "takes a bite out of" + response_harm_simple = "take a bite out of" + ai_controller = /datum/ai_controller/basic_controller/cat/cake + attacked_sound = 'sound/items/eatfood.ogg' + death_message = "loses her false life and collapses!" + death_sound = SFX_BODYFALL + held_state = "cak" + can_interact_with_stove = TRUE + +/mob/living/basic/pet/cat/cak/Initialize(mapload) + . = ..() + AddComponent(/datum/component/regenerator,\ + regeneration_delay = 1 SECONDS,\ + brute_per_second = 5,\ + outline_colour = COLOR_PINK,\ + ) + var/static/list/on_consume = list( + /datum/reagent/consumable/nutriment = 0.4, + /datum/reagent/consumable/nutriment/vitamin = 0.4, + ) + AddElement(/datum/element/consumable_mob, reagents_list = on_consume) + +/mob/living/basic/pet/cat/cak/CheckParts(list/parts) + . = ..() + var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents + if(isnull(candidate?.brainmob?.mind)) + return + var/datum/mind/candidate_mind = candidate.brainmob.mind + candidate_mind.transfer_to(src) + candidate_mind.grab_ghost() + to_chat(src, "[span_boldbig("You are a cak!")] You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ + so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ + free cake to the station!") + var/default_name = initial(name) + var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "You are the [name]. Would you like to change your name to something else?", "Name change", default_name, MAX_NAME_LEN)), cap_after_symbols = FALSE) + if(new_name) + to_chat(src, span_notice("Your name is now [new_name]!")) + name = new_name + +/mob/living/basic/pet/cat/cak/spin(spintime, speed) + . = ..() + for(var/obj/item/food/donut/target in oview(1, src)) + if(!target.is_decorated) + target.decorate_donut() diff --git a/code/modules/mob/living/basic/pets/cat/kitten_ai.dm b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm new file mode 100644 index 00000000000..355ec4d3e48 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/kitten_ai.dm @@ -0,0 +1,67 @@ + +/datum/ai_controller/basic_controller/cat/kitten + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_HUNGRY_MEOW = list("mrrp...", "mraw..."), + BB_MAX_DISTANCE_TO_FOOD = 2, + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/target_retaliate, + /datum/ai_planning_subtree/flee_target, + /datum/ai_planning_subtree/beg_human, + /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten, + /datum/ai_planning_subtree/random_speech/cats, + ) + +//if the food is too far away, point at it or meow. if its near us then go eat it + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten + + +/datum/ai_planning_subtree/find_and_hunt_target/find_cat_food/kitten/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/target = controller.blackboard[BB_CAT_FOOD_TARGET] + if(target && get_dist(target, controller.pawn) > controller.blackboard[BB_MAX_DISTANCE_TO_FOOD]) + controller.queue_behavior(/datum/ai_behavior/beacon_for_food, BB_CAT_FOOD_TARGET, BB_HUNGRY_MEOW) + return + return ..() + +/datum/ai_behavior/beacon_for_food + action_cooldown = 5 SECONDS + +/datum/ai_behavior/beacon_for_food/perform(seconds_per_tick, datum/ai_controller/controller, target_key, meows_key) + . = ..() + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + finish_action(controller, FALSE) + var/mob/living/living_pawn = controller.pawn + var/list/meowing_list = controller.blackboard[meows_key] + if(length(meowing_list)) + living_pawn.say(pick(meowing_list), forced = "ai_controller") + living_pawn._pointed(target) + finish_action(controller, TRUE) + +/datum/ai_behavior/beacon_for_food/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + controller.clear_blackboard_key(target_key) + +/datum/ai_planning_subtree/beg_human + +/datum/ai_planning_subtree/beg_human/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + + if(controller.blackboard_key_exists(BB_HUMAN_BEG_TARGET)) + controller.queue_behavior(/datum/ai_behavior/beacon_for_food, BB_HUMAN_BEG_TARGET, BB_HUNGRY_MEOW) + return + + controller.queue_behavior(/datum/ai_behavior/find_and_set/human_beg, BB_HUMAN_BEG_TARGET, /mob/living/carbon/human) + +/datum/ai_behavior/find_and_set/human_beg/search_tactic(datum/ai_controller/controller, locate_path, search_range) + var/list/locate_items = controller.blackboard[BB_HUNTABLE_PREY] + for(var/mob/living/carbon/human/human_target in oview(search_range, controller.pawn)) + if(human_target.stat != CONSCIOUS || isnull(human_target.mind)) + continue + if(!length(typecache_filter_list(human_target.held_items, locate_items))) + continue + return human_target + + return null diff --git a/code/modules/mob/living/basic/pets/cat/runtime.dm b/code/modules/mob/living/basic/pets/cat/runtime.dm new file mode 100644 index 00000000000..9b3adac5a2a --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/runtime.dm @@ -0,0 +1,99 @@ +#define RUNTIME_SAVE_DATA "data/npc_saves/Runtime.sav" +#define RUNTIME_JSON_DATA "data/npc_saves/Runtime.json" +#define MAX_CAT_DEPLOY 50 + +/mob/living/basic/pet/cat/runtime + name = "Runtime" + desc = "GCAT" + icon_state = "cat" + icon_living = "cat" + icon_dead = "cat_dead" + gender = FEMALE + gold_core_spawnable = NO_SPAWN + unique_pet = TRUE + ///the family we will bring in when a round starts + var/list/family = null + ///saved list of kids + var/list/children = null + /// have we deployed the cats? + var/cats_deployed = FALSE + /// have we saved memory? + var/memory_saved = FALSE + ///callback we use to register our family + var/datum/callback/register_family + +/mob/living/basic/pet/cat/runtime/Initialize(mapload) + . = ..() + register_family = CALLBACK(src, PROC_REF(Write_Memory)) + SSticker.OnRoundend(register_family) + if(mapload) + read_memory() + deploy_the_cats() + + if(!prob(5)) + return + icon_state = "original" + icon_living = "original" + icon_dead = "original_dead" + update_appearance() + + +/mob/living/basic/pet/cat/runtime/add_breeding_component() + AddComponent(\ + /datum/component/breed,\ + can_breed_with = typecacheof(list(/mob/living/basic/pet/cat)),\ + baby_path = /mob/living/basic/pet/cat/kitten,\ + post_birth = CALLBACK(src, PROC_REF(after_birth)),\ + ) + +/mob/living/basic/pet/cat/runtime/proc/after_birth(mob/living/baby) + if(isnull(baby)) + return + LAZYADD(children, baby) + +/mob/living/basic/pet/cat/runtime/proc/read_memory() + if(fexists(RUNTIME_SAVE_DATA)) + var/savefile/save_data = new(RUNTIME_SAVE_DATA) + save_data["family"] >> family + fdel(RUNTIME_SAVE_DATA) + return + var/json_file = file(RUNTIME_JSON_DATA) + if(!fexists(json_file)) + return + var/list/json_list = json_decode(file2text(json_file)) + family = json_list["family"] + +/mob/living/basic/pet/cat/runtime/Destroy() + LAZYREMOVE(SSticker.round_end_events, register_family) + register_family = null + return ..() + +/mob/living/basic/pet/cat/runtime/Write_Memory(dead, gibbed) + . = ..() + if(!.) + return + var/json_file = file(RUNTIME_JSON_DATA) + var/list/file_data = list() + if(!dead) + for(var/mob/living/basic/pet/cat/kitten/kitten in children) + if(kitten.stat == DEAD) + continue + if(kitten.type in family) + family[kitten.type] += 1 + continue + family[kitten.type] = 1 + file_data["family"] = family + fdel(json_file) + WRITE_FILE(json_file, json_encode(file_data, JSON_PRETTY_PRINT)) + +/mob/living/basic/pet/cat/runtime/proc/deploy_the_cats() + cats_deployed = TRUE + for(var/cat_type in family) + if(isnull(family[cat_type])) + return + for(var/index in 1 to min(family[cat_type], MAX_CAT_DEPLOY)) + new cat_type(loc) + +#undef RUNTIME_SAVE_DATA +#undef RUNTIME_JSON_DATA +#undef MAX_CAT_DEPLOY diff --git a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm index 8ba6699648e..e23e022d00e 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -133,6 +133,11 @@ brute_per_second = 5,\ outline_colour = COLOR_YELLOW,\ ) + var/static/list/on_consume = list( + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/nutriment/vitamin = 0.1, + ) + AddElement(/datum/element/consumable_mob, reagents_list = on_consume) /mob/living/basic/bear/butter/attack_hand(mob/living/user, list/modifiers) //Borrowed code from Cak, feeds people if they hit you. More nutriment but less vitamin to represent BUTTER. . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm index d8c419ea2e3..e7fbfa5c2ec 100644 --- a/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm +++ b/code/modules/mob/living/basic/space_fauna/demon/demon_subtypes.dm @@ -149,7 +149,7 @@ /// We do our own special thing on death, which is to spawn a kitten. /mob/living/basic/demon/slaughter/laughter/proc/on_death() SIGNAL_HANDLER - var/mob/living/simple_animal/pet/cat/kitten/kitty = new(drop_location()) + var/mob/living/basic/pet/cat/kitten/kitty = new(drop_location()) kitty.name = "Laughter" /mob/living/basic/demon/slaughter/laughter/ex_act(severity) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 3b5341047a8..67fd68ee239 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1517,6 +1517,8 @@ /mob/living/basic/mouse, /mob/living/basic/mushroom, /mob/living/basic/parrot, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/cak, /mob/living/basic/pet/dog/breaddog, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, @@ -1527,11 +1529,8 @@ /mob/living/basic/stickman, /mob/living/basic/stickman/dog, /mob/living/simple_animal/hostile/megafauna/dragon/lesser, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/cak, ) new_mob = new picked_animal(loc) - if(WABBAJACK_HUMAN) var/mob/living/carbon/human/new_human = new(loc) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm deleted file mode 100644 index f1857a00e2c..00000000000 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ /dev/null @@ -1,332 +0,0 @@ -//Cat -/mob/living/simple_animal/pet/cat - name = "cat" - desc = "Kitty!!" - icon = 'icons/mob/simple/pets.dmi' - icon_state = "cat2" - icon_living = "cat2" - icon_dead = "cat2_dead" - speak = list("Meow!", "Esp!", "Purr!", "HSSSSS") - speak_emote = list("purrs", "meows") - emote_hear = list("meows.", "mews.") - emote_see = list("shakes their head.", "shivers.") - speak_chance = 1 - turns_per_move = 5 - pass_flags = PASSTABLE - mob_size = MOB_SIZE_SMALL - mob_biotypes = MOB_ORGANIC|MOB_BEAST - minbodytemp = 200 - maxbodytemp = 400 - unsuitable_atmos_damage = 0.5 - animal_species = /mob/living/simple_animal/pet/cat - childtype = list(/mob/living/simple_animal/pet/cat/kitten = 1) - butcher_results = list(/obj/item/food/meat/slab = 1, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/stack/sheet/animalhide/cat = 1) - response_help_continuous = "pets" - response_help_simple = "pet" - response_disarm_continuous = "gently pushes aside" - response_disarm_simple = "gently push aside" - response_harm_continuous = "kicks" - response_harm_simple = "kick" - mobility_flags = MOBILITY_FLAGS_REST_CAPABLE_DEFAULT - var/mob/living/basic/mouse/movement_target - gold_core_spawnable = FRIENDLY_SPAWN - collar_icon_state = "cat" - has_collar_resting_icon_state = TRUE - can_be_held = TRUE - held_state = "cat2" - attack_verb_continuous = "claws" - attack_verb_simple = "claw" - attack_sound = 'sound/weapons/slash.ogg' - attack_vis_effect = ATTACK_EFFECT_CLAW - - footstep_type = FOOTSTEP_MOB_CLAW - -/mob/living/simple_animal/pet/cat/Initialize(mapload) - . = ..() - AddElement(/datum/element/pet_bonus, "purrs!") - add_verb(src, /mob/living/proc/toggle_resting) - add_cell_sample() - ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) - -/mob/living/simple_animal/pet/cat/add_cell_sample() - AddElement(/datum/element/swabable, CELL_LINE_TABLE_CAT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) - - -/mob/living/simple_animal/pet/cat/space - name = "space cat" - desc = "They're a cat... in space!" - icon_state = "spacecat" - icon_living = "spacecat" - icon_dead = "spacecat_dead" - unsuitable_atmos_damage = 0 - minbodytemp = TCMB - maxbodytemp = T0C + 40 - held_state = "spacecat" - -/mob/living/simple_animal/pet/cat/breadcat - name = "bread cat" - desc = "They're a cat... with a bread!" - icon_state = "breadcat" - icon_living = "breadcat" - icon_dead = "breadcat_dead" - collar_icon_state = null - held_state = "breadcat" - butcher_results = list(/obj/item/food/meat/slab = 2, /obj/item/organ/internal/ears/cat = 1, /obj/item/organ/external/tail/cat = 1, /obj/item/food/breadslice/plain = 1) - -/mob/living/simple_animal/pet/cat/breadcat/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/original - name = "Batsy" - desc = "The product of alien DNA and bored geneticists." - gender = FEMALE - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - collar_icon_state = null - unique_pet = TRUE - held_state = "original" - -/mob/living/simple_animal/pet/cat/original/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/kitten - name = "kitten" - desc = "D'aaawwww." - icon_state = "kitten" - icon_living = "kitten" - icon_dead = "kitten_dead" - density = FALSE - pass_flags = PASSMOB - mob_size = MOB_SIZE_SMALL - collar_icon_state = "kitten" - -//RUNTIME IS ALIVE! SQUEEEEEEEE~ -/mob/living/simple_animal/pet/cat/runtime - name = "Runtime" - desc = "GCAT" - icon_state = "cat" - icon_living = "cat" - icon_dead = "cat_dead" - gender = FEMALE - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - var/list/family = list()//var restored from savefile, has count of each child type - var/list/children = list()//Actual mob instances of children - var/static/cats_deployed = 0 - var/memory_saved = FALSE - held_state = "cat" - -/mob/living/simple_animal/pet/cat/runtime/Initialize(mapload) - if(prob(5)) - icon_state = "original" - icon_living = "original" - icon_dead = "original_dead" - Read_Memory() - . = ..() - -/mob/living/simple_animal/pet/cat/runtime/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(!cats_deployed && SSticker.current_state >= GAME_STATE_SETTING_UP) - Deploy_The_Cats() - if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) - Write_Memory() - memory_saved = TRUE - ..() - -/mob/living/simple_animal/pet/cat/runtime/make_babies() - var/mob/baby = ..() - if(baby) - children += baby - return baby - -/mob/living/simple_animal/pet/cat/runtime/death() - if(!memory_saved) - Write_Memory(TRUE) - ..() - -/mob/living/simple_animal/pet/cat/runtime/proc/Read_Memory() - if(fexists("data/npc_saves/Runtime.sav")) //legacy compatability to convert old format to new - var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") - S["family"] >> family - fdel("data/npc_saves/Runtime.sav") - else - var/json_file = file("data/npc_saves/Runtime.json") - if(!fexists(json_file)) - return - var/list/json = json_decode(file2text(json_file)) - family = json["family"] - if(isnull(family)) - family = list() - -/mob/living/simple_animal/pet/cat/runtime/Write_Memory(dead, gibbed) - . = ..() - if(!.) - return - var/json_file = file("data/npc_saves/Runtime.json") - var/list/file_data = list() - family = list() - if(!dead) - for(var/mob/living/simple_animal/pet/cat/kitten/C in children) - if(istype(C,type) || C.stat || !C.z || (C.flags_1 & HOLOGRAM_1)) - continue - if(C.type in family) - family[C.type] += 1 - else - family[C.type] = 1 - file_data["family"] = family - fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) - -/mob/living/simple_animal/pet/cat/runtime/proc/Deploy_The_Cats() - cats_deployed = 1 - for(var/cat_type in family) - if(family[cat_type] > 0) - for(var/i in 1 to min(family[cat_type],100)) //Limits to about 500 cats, you wouldn't think this would be needed (BUT IT IS) - new cat_type(loc) - -/mob/living/simple_animal/pet/cat/_proc - name = "Proc" - gender = MALE - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - - -/mob/living/simple_animal/pet/cat/update_resting() - . = ..() - if(stat == DEAD) - return - if (resting) - icon_state = "[icon_living]_rest" - else - icon_state = "[icon_living]" - - -/mob/living/simple_animal/pet/cat/Life(seconds_per_tick = SSMOBS_DT, times_fired) - if(!stat && !buckled && !client) - if(SPT_PROB(0.5, seconds_per_tick)) - manual_emote(pick("stretches out for a belly rub.", "wags [p_their()] tail.", "lies down.")) - set_resting(TRUE) - else if(SPT_PROB(0.5, seconds_per_tick)) - manual_emote(pick("sits down.", "crouches on [p_their()] hind legs.", "looks alert.")) - set_resting(TRUE) - icon_state = "[icon_living]_sit" - cut_overlays() // No collar support in sitting state - else if(SPT_PROB(0.5, seconds_per_tick)) - if (resting) - manual_emote(pick("gets up and meows.", "walks around.", "stops resting.")) - set_resting(FALSE) - else - manual_emote(pick("grooms [p_their()] fur.", "twitches [p_their()] whiskers.", "shakes out [p_their()] coat.")) - - //MICE! RATS! OH MY! - if((src.loc) && isturf(src.loc)) - if(!stat && !buckled) - //Targeting anything in the rat faction nearby - for(var/mob/living/M in view(1,src)) - if(!M.stat && Adjacent(M)) - if (FACTION_RAT in M.faction) - //Jerry can never catch Tom snowflaking - if(istype(M, /mob/living/basic/mouse/brown/tom) && inept_hunter) - if(COOLDOWN_FINISHED(src, emote_cooldown)) - visible_message(span_warning("[src] chases [M] around, to no avail!")) - step(M, pick(GLOB.cardinals)) - COOLDOWN_START(src, emote_cooldown, 1 MINUTES) - break - //Mouse splatting - if(ismouse(M)) - manual_emote("splats \the [M]!") - var/mob/living/basic/mouse/snack = M - snack.splat() - movement_target = null - stop_automated_movement = 0 - break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - manual_emote("bats \the [T] around with \his paw!") - T.cooldown = world.time - - ..() - - make_babies() - - if(!stat && !resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - SSmove_manager.stop_looping(src) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - stop_automated_movement = 0 - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - stop_automated_movement = 0 - //Targeting mice and mobs in the rat faction - for(var/mob/living/target in oview(src,3)) - if(isturf(target.loc) && !target.stat) - if(FACTION_RAT in target.faction) - movement_target = target - break - if(movement_target) - stop_automated_movement = 1 - SSmove_manager.move_to(src, movement_target, 0, 3) - -/mob/living/simple_animal/pet/cat/jerry //Holy shit we left jerry on donut ~ Arcane ~Fikou - name = "Jerry" - desc = "Tom is VERY amused." - inept_hunter = TRUE - gender = MALE - -/mob/living/simple_animal/pet/cat/cak //I told you I'd do it, Remie - name = "Keeki" - desc = "She is a cat made out of cake." - icon_state = "cak" - icon_living = "cak" - icon_dead = "cak_dead" - health = 50 - maxHealth = 50 - gender = FEMALE - harm_intent_damage = 10 - butcher_results = list(/obj/item/organ/internal/brain = 1, /obj/item/organ/internal/heart = 1, /obj/item/food/cakeslice/birthday = 3, \ - /obj/item/food/meat/slab = 2) - response_harm_continuous = "takes a bite out of" - response_harm_simple = "take a bite out of" - attacked_sound = 'sound/items/eatfood.ogg' - death_message = "loses her false life and collapses!" - death_sound = SFX_BODYFALL - held_state = "cak" - -/mob/living/simple_animal/pet/cat/cak/add_cell_sample() - return - -/mob/living/simple_animal/pet/cat/cak/CheckParts(list/parts) - ..() - var/obj/item/organ/internal/brain/candidate = locate(/obj/item/organ/internal/brain) in contents - if(!candidate || !candidate.brainmob || !candidate.brainmob.mind) - return - var/datum/mind/candidate_mind = candidate.brainmob.mind - candidate_mind.transfer_to(src) - candidate_mind.grab_ghost() - to_chat(src, "[span_boldbig("You are a cak!")] You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ - so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ - free cake to the station!") - var/default_name = "Keeki" - var/new_name = sanitize_name(reject_bad_text(tgui_input_text(src, "You are the [name]. Would you like to change your name to something else?", "Name change", default_name, MAX_NAME_LEN)), cap_after_symbols = FALSE) - if(new_name) - to_chat(src, span_notice("Your name is now [new_name]!")) - name = new_name - -/mob/living/simple_animal/pet/cat/cak/Life(seconds_per_tick = SSMOBS_DT, times_fired) - ..() - if(stat) - return - if(health < maxHealth) - adjustBruteLoss(-4 * seconds_per_tick) //Fast life regen - for(var/obj/item/food/donut/D in range(1, src)) //Frosts nearby donuts! - if(!D.is_decorated) - D.decorate_donut() - -/mob/living/simple_animal/pet/cat/cak/attack_hand(mob/living/user, list/modifiers) - ..() - if(user.combat_mode && user.reagents && !stat) - user.reagents.add_reagent(/datum/reagent/consumable/nutriment, 0.4) - user.reagents.add_reagent(/datum/reagent/consumable/nutriment/vitamin, 0.4) diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 6136f8c8189..1c5543bbb59 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -380,7 +380,7 @@ return FALSE //Verbs do not appear for players. //Good mobs! - if(ispath(MP, /mob/living/simple_animal/pet/cat)) + if(ispath(MP, /mob/living/basic/pet/cat)) return TRUE if(ispath(MP, /mob/living/basic/pet/dog/corgi)) return TRUE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 17c425c4e2f..119f65a75de 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -90,7 +90,7 @@ . = ..() tracked_ian_ref = WEAKREF(locate(/mob/living/basic/pet/dog/corgi/ian) in GLOB.mob_living_list) - tracked_runtime_ref = WEAKREF(locate(/mob/living/simple_animal/pet/cat/runtime) in GLOB.mob_living_list) + tracked_runtime_ref = WEAKREF(locate(/mob/living/basic/pet/cat/runtime) in GLOB.mob_living_list) critical_items_typecache = typecacheof(list( /obj/item/construction/rcd, @@ -511,7 +511,7 @@ tracked_runtime.forceMove(drop_location()) investigate_log("Experimentor has stolen Runtime!", INVESTIGATE_EXPERIMENTOR) else - new /mob/living/simple_animal/pet/cat(loc) + new /mob/living/basic/pet/cat(loc) investigate_log("Experimentor failed to steal runtime, and instead spawned a new cat.", INVESTIGATE_EXPERIMENTOR) ejectItem(TRUE) if(globalMalf > 76 && globalMalf < 98) @@ -642,10 +642,10 @@ /mob/living/basic/lizard, /mob/living/basic/mouse, /mob/living/basic/parrot, + /mob/living/basic/pet/cat, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, /mob/living/basic/pet/fox, - /mob/living/simple_animal/pet/cat, ) for(var/counter in 1 to rand(1, 25)) var/mobType = pick(valid_animals) diff --git a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm index 5e9045e751f..3230f44dabb 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -108,7 +108,7 @@ /datum/reagent/consumable/milk/chocolate_milk = -1) virus_suspectibility = 1.5 - resulting_atoms = list(/mob/living/simple_animal/pet/cat = 1) //The basic cat mobs are all male, so you mightt need a gender swap potion if you want to fill the fortress with kittens. + resulting_atoms = list(/mob/living/basic/pet/cat = 1) /datum/micro_organism/cell_line/corgi desc = "Canid cells" diff --git a/code/modules/unit_tests/simple_animal_freeze.dm b/code/modules/unit_tests/simple_animal_freeze.dm index 1a8b4561140..fba922380d9 100644 --- a/code/modules/unit_tests/simple_animal_freeze.dm +++ b/code/modules/unit_tests/simple_animal_freeze.dm @@ -93,15 +93,6 @@ /mob/living/simple_animal/hostile/vatbeast, /mob/living/simple_animal/hostile/zombie, /mob/living/simple_animal/pet, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/_proc, - /mob/living/simple_animal/pet/cat/breadcat, - /mob/living/simple_animal/pet/cat/cak, - /mob/living/simple_animal/pet/cat/jerry, - /mob/living/simple_animal/pet/cat/kitten, - /mob/living/simple_animal/pet/cat/original, - /mob/living/simple_animal/pet/cat/runtime, - /mob/living/simple_animal/pet/cat/space, /mob/living/simple_animal/pet/gondola, /mob/living/simple_animal/pet/gondola/gondolapod, /mob/living/simple_animal/pet/gondola/virtual_domain, diff --git a/icons/mob/pets.dmi b/icons/mob/pets.dmi index 7c6800d602d..8ddeaa0c3f4 100644 Binary files a/icons/mob/pets.dmi and b/icons/mob/pets.dmi differ diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi index 78212b93c76..9bd7d69c06b 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm b/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm index c6bcd6ed585..234ad65a916 100644 --- a/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm +++ b/modular_skyrat/master_files/code/modules/antagonists/traitor/objectives/kill_pet.dm @@ -6,7 +6,7 @@ /mob/living/basic/pet/dog/corgi/puppy/ian ), JOB_CAPTAIN = /mob/living/basic/pet/fox/renault, - JOB_CHIEF_MEDICAL_OFFICER = /mob/living/simple_animal/pet/cat/runtime, + JOB_CHIEF_MEDICAL_OFFICER = /mob/living/basic/pet/cat/runtime, JOB_CHIEF_ENGINEER = /mob/living/basic/parrot/poly, JOB_QUARTERMASTER = list( /mob/living/basic/sloth/citrus, diff --git a/modular_skyrat/modules/pet_owner/pet_owner.dm b/modular_skyrat/modules/pet_owner/pet_owner.dm index 17931d6b842..0d6c1f4eb1a 100644 --- a/modular_skyrat/modules/pet_owner/pet_owner.dm +++ b/modular_skyrat/modules/pet_owner/pet_owner.dm @@ -49,7 +49,7 @@ GLOBAL_LIST_INIT(possible_player_pet, list( "Bat" = /mob/living/basic/bat, "Bull terrier" = /mob/living/basic/pet/dog/bullterrier, "Butterfly" = /mob/living/basic/butterfly, - "Cat" = /mob/living/simple_animal/pet/cat, + "Cat" = /mob/living/basic/pet/cat, "Chick" = /mob/living/basic/chick/permanent, "Chicken" = /mob/living/basic/chicken, "Chinchilla (dark)" = /mob/living/basic/pet/chinchilla/black, @@ -63,7 +63,7 @@ GLOBAL_LIST_INIT(possible_player_pet, list( "Fox" = /mob/living/basic/pet/fox/docile, "Frog" = /mob/living/basic/frog, "Giant ant" = /mob/living/basic/ant, - "Kitten" = /mob/living/simple_animal/pet/cat/kitten, + "Kitten" = /mob/living/basic/pet/cat/kitten, "Kiwi" = /mob/living/basic/kiwi, "Mothroach" = /mob/living/basic/mothroach, "Mouse (white)" = /mob/living/basic/mouse/white, diff --git a/tgstation.dme b/tgstation.dme index 9866806d92a..d7d56de967a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1440,6 +1440,7 @@ #include "code\datums\elements\cliff_walker.dm" #include "code\datums\elements\climbable.dm" #include "code\datums\elements\connect_loc.dm" +#include "code\datums\elements\consumable_mob.dm" #include "code\datums\elements\content_barfer.dm" #include "code\datums\elements\crackable.dm" #include "code\datums\elements\crusher_loot.dm" @@ -2614,6 +2615,7 @@ #include "code\game\objects\structures\billboard.dm" #include "code\game\objects\structures\bonfire.dm" #include "code\game\objects\structures\broken_flooring.dm" +#include "code\game\objects\structures\cat_house.dm" #include "code\game\objects\structures\chess.dm" #include "code\game\objects\structures\containers.dm" #include "code\game\objects\structures\deployable_turret.dm" @@ -4692,7 +4694,13 @@ #include "code\modules\mob\living\basic\pets\penguin.dm" #include "code\modules\mob\living\basic\pets\pet.dm" #include "code\modules\mob\living\basic\pets\sloth.dm" +#include "code\modules\mob\living\basic\pets\cat\bread_cat_ai.dm" +#include "code\modules\mob\living\basic\pets\cat\cat.dm" +#include "code\modules\mob\living\basic\pets\cat\cat_ai.dm" #include "code\modules\mob\living\basic\pets\cat\feral.dm" +#include "code\modules\mob\living\basic\pets\cat\keeki.dm" +#include "code\modules\mob\living\basic\pets\cat\kitten_ai.dm" +#include "code\modules\mob\living\basic\pets\cat\runtime.dm" #include "code\modules\mob\living\basic\pets\dog\_dog.dm" #include "code\modules\mob\living\basic\pets\dog\corgi.dm" #include "code\modules\mob\living\basic\pets\dog\dog_subtypes.dm" @@ -4970,7 +4978,6 @@ #include "code\modules\mob\living\simple_animal\bot\secbot.dm" #include "code\modules\mob\living\simple_animal\bot\SuperBeepsky.dm" #include "code\modules\mob\living\simple_animal\bot\vibebot.dm" -#include "code\modules\mob\living\simple_animal\friendly\cat.dm" #include "code\modules\mob\living\simple_animal\friendly\gondola.dm" #include "code\modules\mob\living\simple_animal\friendly\pet.dm" #include "code\modules\mob\living\simple_animal\hostile\alien.dm" diff --git a/tools/UpdatePaths/Scripts/79800_basic_cats.txt b/tools/UpdatePaths/Scripts/79800_basic_cats.txt new file mode 100644 index 00000000000..7a990f79086 --- /dev/null +++ b/tools/UpdatePaths/Scripts/79800_basic_cats.txt @@ -0,0 +1 @@ +/mob/living/simple_animal/pet/cat/@SUBTYPES : /mob/living/basic/pet/cat/@SUBTYPES{@OLD} \ No newline at end of file