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