diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index c71cd3890928..f3119852d4dd 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -70,6 +70,10 @@ jobs: key: ${{ runner.os }}-rust-${{ hashFiles('tools/ci/ci_dependencies.sh')}} restore-keys: | ${{ runner.os }}-rust- + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4.2.0 + with: + dotnet-version: 9.x - name: Install OpenDream uses: robinraju/release-downloader@v1.9 with: diff --git a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm index 09f79c998481..4db15d98c706 100644 --- a/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm +++ b/_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm @@ -864,7 +864,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 616aa0f45d64..0c2f329a071f 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/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 9771c0342e11..4bb58c074685 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -2802,9 +2802,6 @@ /obj/machinery/atmospherics/components/binary/pump/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2{ - dir = 10 - }, /obj/effect/decal/cleanable/glass, /obj/item/shard, /obj/effect/mapping_helpers/broken_floor, @@ -4160,7 +4157,6 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue/half/contrasted, -/obj/machinery/atmospherics/components/binary/pump/layer4, /obj/effect/decal/cleanable/dirt, /obj/structure/broken_flooring/corner/directional/north, /turf/open/floor/iron/airless, @@ -5819,6 +5815,15 @@ }, /turf/open/floor/iron, /area/ruin/space/ancientstation/delta/hall) +"AI" = ( +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random/maintenance, +/obj/effect/spawner/random/trash/garbage, +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/airless, +/area/ruin/space/ancientstation/beta/medbay) "AJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -6192,11 +6197,8 @@ /turf/open/floor/plating/airless, /area/ruin/space/ancientstation/beta/supermatter) "Dy" = ( -/obj/structure/closet/crate/bin, -/obj/effect/spawner/random/trash/garbage, -/obj/effect/spawner/random/maintenance, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/airalarm/all_access, /turf/open/floor/iron/airless, /area/ruin/space/ancientstation/beta/medbay) @@ -8379,9 +8381,6 @@ "Sq" = ( /obj/item/shard, /obj/machinery/atmospherics/components/binary/pump/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ - dir = 4 - }, /obj/effect/decal/cleanable/glass, /obj/effect/mapping_helpers/broken_floor, /obj/structure/cable, @@ -10616,7 +10615,7 @@ aa Ck NC IR -yz +AI Qr Dy XI diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index b97079f7dcff..c60ea4eac94f 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -5,88 +5,58 @@ "ac" = ( /turf/closed/mineral/random/labormineral, /area/awaymission/moonoutpost19/main) -"ad" = ( -/obj/machinery/light/small/broken/directional/west, -/obj/machinery/camera/directional/west{ - c_tag = "Xenobiology"; - network = list("mo19","mo19r") - }, -/turf/open/floor/iron/white/side{ - dir = 6; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "ae" = ( /turf/closed/indestructible/rock, /area/awaymission/moonoutpost19/main) -"aj" = ( -/obj/structure/table/reinforced, -/obj/structure/alien/weeds, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching the contents of the xenobiology containment pen."; - dir = 8; - name = "xenobiology monitor"; - network = list("mo19x") - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"an" = ( +/obj/structure/sign/warning/secure_area/directional/north, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 }, /turf/open/floor/iron{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/research) -"ap" = ( -/obj/machinery/light/small/directional/south, +/area/awaymission/moonoutpost19/syndicate) +"at" = ( +/turf/closed/wall/r_wall, +/area/awaymission/moonoutpost19/syndicate) +"aD" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"at" = ( -/turf/closed/wall/r_wall, /area/awaymission/moonoutpost19/syndicate) -"aw" = ( -/obj/machinery/vending/medical{ - req_access = list("away_maintenance") +"aL" = ( +/obj/structure/reagent_dispensers/wall/peppertank/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, -/turf/open/floor/iron/white/side{ +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"aG" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" +"aT" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/misc/asteroid{ +/turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"aM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/candy, -/turf/open/floor/plating{ - heat_capacity = 1e+006 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/syndicate) "aU" = ( /turf/closed/wall, /area/awaymission/moonoutpost19/syndicate) -"aY" = ( -/obj/structure/table, -/obj/item/stack/sheet/mineral/plasma, -/obj/machinery/light/small/broken/directional/north, -/obj/machinery/airalarm/directional/north{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/structure/alien/weeds, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +"aX" = ( +/obj/structure/alien/weeds/node, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/hive) "bb" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -103,48 +73,63 @@ /turf/closed/mineral/random/high_chance, /area/awaymission/moonoutpost19/hive) "bn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"by" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/research) +"bF" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible{ + desc = "A one meter section of pipe. This one has been applied with an acid-proof coating."; + dir = 4; + name = "Acid-Proof Pipe" + }, +/obj/item/stack/rods, +/obj/item/stack/cable_coil{ + amount = 5 + }, +/obj/item/shard{ + icon_state = "small" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"bz" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" +/area/awaymission/moonoutpost19/research) +"bK" = ( +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"bE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"bR" = ( +/obj/structure/noticeboard/directional/south, +/obj/machinery/light/small/broken/directional/south, +/obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation, +/obj/machinery/camera/directional/south{ + c_tag = "Research Division"; + network = list("mo19","mo19r") + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 }, /turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"bH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +"bW" = ( +/obj/machinery/newscaster/directional/south, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/research) "bX" = ( /obj/machinery/conveyor{ id = "awaysyndie" @@ -158,40 +143,59 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"cd" = ( -/obj/effect/decal/cleanable/xenoblood, -/obj/effect/decal/remains/xeno{ - desc = "They look like the remains of something... alien. The front of skull appears to have been completely obliterated." +"ck" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/corner, +/obj/effect/turf_decal/stripes/asteroid/corner{ + dir = 8 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"ce" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ +/area/awaymission/moonoutpost19/main) +"cn" = ( +/obj/structure/sign/warning/biohazard/directional/north, +/obj/structure/alien/weeds/node, +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"cn" = ( -/obj/structure/chair/stool/directional/west, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 +"cr" = ( +/obj/structure/grille, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) -"cH" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" +"cM" = ( +/obj/structure/chair{ + dir = 1 }, -/turf/open/floor/iron/freezer{ +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"cP" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" + }, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) "cS" = ( /obj/machinery/airalarm/directional/east{ pixel_x = 23; @@ -207,66 +211,151 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"cX" = ( -/obj/structure/table, -/obj/machinery/recharger{ - pixel_y = 4 +"cV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/loading_area, +/obj/structure/alien/weeds, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"cY" = ( +/obj/structure/table/wood, +/obj/item/pen, +/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2, +/obj/structure/sign/poster/contraband/c20r/directional/south, +/turf/open/floor/wood{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/syndicate) +"cZ" = ( +/obj/structure/closet/secure_closet{ + icon_state = "sec"; + name = "security officer's locker"; + req_access = list("away_maintenance") + }, +/obj/item/clothing/suit/armor/vest, +/obj/item/reagent_containers/spray/pepper, +/obj/item/grenade/flashbang, +/obj/item/storage/belt/security, +/obj/item/reagent_containers/cup/glass/bottle/beer{ + pixel_x = -3; + pixel_y = -2 }, +/obj/machinery/airalarm/directional/north{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, /obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 + dir = 1 }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"dd" = ( -/obj/structure/closet/l3closet/scientist, -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"da" = ( +/obj/machinery/airalarm/directional/east{ + pixel_x = 23; + req_access = list("syndicate") }, -/turf/open/floor/iron{ +/turf/open/floor/wood{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/syndicate) +"db" = ( +/obj/machinery/shower/directional/north, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "df" = ( /obj/machinery/mineral/stacking_unit_console, /turf/closed/wall, /area/awaymission/moonoutpost19/syndicate) -"dk" = ( -/obj/machinery/light/small/directional/west, -/obj/structure/table, -/obj/item/storage/box, -/obj/machinery/airalarm/directional/west{ - req_access = null +"dh" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg/burst, +/obj/effect/decal/cleanable/blood, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/obj/effect/mapping_helpers/airalarm/unlocked, +/area/awaymission/moonoutpost19/hive) +"dn" = ( +/obj/structure/grille, +/obj/machinery/door/poddoor/preopen{ + desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; + id = "Awaylab"; + name = "Acid-Proof Containment Chamber Blast Door" + }, +/obj/item/stack/cable_coil/cut, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"do" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) +"ds" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/syndi_cakes, +/obj/item/trash/sosjerky, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"dr" = ( -/obj/machinery/firealarm/directional/south, +/area/awaymission/moonoutpost19/syndicate) +"dA" = ( +/turf/closed/mineral/random, +/area/awaymission/moonoutpost19/main) +"dE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"dA" = ( -/turf/closed/mineral/random, -/area/awaymission/moonoutpost19/main) -"dT" = ( -/obj/structure/table, -/obj/item/book/manual/wiki/barman_recipes{ - pixel_y = 5 +"dI" = ( +/obj/machinery/door/airlock{ + name = "Kitchen Cold Room" }, -/obj/item/reagent_containers/cup/glass/shaker, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, +/turf/open/floor/iron/showroomfloor{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"dO" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 9 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) +"dQ" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "dZ" = ( /turf/closed/wall/r_wall/rust, /area/awaymission/moonoutpost19/research) @@ -314,14 +403,26 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) -"ek" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Break Room" +"ej" = ( +/obj/item/stack/ore/iron{ + pixel_x = -7; + pixel_y = -4 + }, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, +/area/awaymission/moonoutpost19/main) +"ek" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small/directional/west, +/obj/item/trash/cheesie, +/obj/item/trash/can, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "el" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, @@ -374,23 +475,33 @@ /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/research) "eu" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/command{ - density = 0; - icon_state = "open"; - name = "Research Director's Office"; - opacity = 0 +/obj/machinery/mineral/processing_unit{ + dir = 1 }, -/obj/effect/mapping_helpers/atom_injector/obj_flag{ - inject_flags = 1; - target_type = /obj/machinery/door/airlock +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"ew" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) +"ex" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "ez" = ( /obj/structure/table, /obj/item/clothing/glasses/hud/health, @@ -401,6 +512,15 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) +"eA" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "eB" = ( /obj/structure/alien/weeds/node, /turf/open/floor/engine, @@ -421,53 +541,27 @@ "eJ" = ( /turf/closed/wall/rust, /area/awaymission/moonoutpost19/research) -"eK" = ( -/obj/machinery/door/poddoor{ - id = "AwayRD"; - layer = 2.9; - name = "Privacy Shutter" - }, -/obj/effect/spawner/structure/window/reinforced, +"eL" = ( +/obj/structure/sign/warning/electric_shock, +/turf/closed/wall/r_wall, +/area/awaymission/moonoutpost19/research) +"eP" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"eL" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) +/area/awaymission/moonoutpost19/arrivals) "eQ" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"eR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) -"eV" = ( -/obj/machinery/airalarm/directional/east{ - pixel_x = 23; - req_access = list("syndicate") - }, -/turf/open/floor/wood{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"fa" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"fe" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock{ + id_tag = "awaydorm3"; + name = "Dorm 3" }, /turf/open/floor/iron{ heat_capacity = 1e+006 @@ -498,35 +592,19 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"fo" = ( -/obj/structure/noticeboard/directional/north, -/obj/item/paper/fluff/awaymissions/moonoutpost19/food_specials, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron{ - dir = 8; +"fn" = ( +/obj/machinery/power/shieldwallgen/unlocked, +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/research) "fp" = ( /obj/structure/alien/weeds, /obj/structure/bed/nest, /obj/item/clothing/mask/facehugger/impregnated, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"fu" = ( -/obj/structure/closet/crate, -/obj/item/storage/bag/ore, -/obj/structure/alien/weeds, -/obj/item/mining_scanner, -/obj/item/shovel, -/obj/item/pickaxe, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) "fy" = ( /obj/item/storage/secure/safe/directional/east, /obj/effect/decal/cleanable/blood/splatter, @@ -572,6 +650,14 @@ /obj/structure/cable, /turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) +"fD" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) "fE" = ( /obj/machinery/door/poddoor/preopen{ desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; @@ -640,13 +726,24 @@ }, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"fO" = ( +"fM" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"fO" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "fS" = ( @@ -655,42 +752,6 @@ dir = 5 }, /area/awaymission/moonoutpost19/research) -"fT" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/syndie{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"fU" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock{ - id_tag = "awaydorm3"; - name = "Dorm 3" - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"fV" = ( -/obj/machinery/light/small/directional/south, -/obj/machinery/computer/security/telescreen/entertainment/directional/south, -/obj/machinery/camera/directional/south{ - c_tag = "Arrivals North"; - network = list("mo19") - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/iron/white/corner{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "fW" = ( /obj/structure/table, /obj/item/radio/off, @@ -699,12 +760,6 @@ dir = 5 }, /area/awaymission/moonoutpost19/research) -"fY" = ( -/obj/machinery/newscaster/directional/east, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "fZ" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small/directional/south, @@ -715,6 +770,24 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) +"ga" = ( +/obj/item/storage/box/lights/mixed, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"gb" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "gc" = ( /obj/structure/alien/weeds, /obj/effect/decal/cleanable/blood, @@ -724,19 +797,16 @@ }, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"gd" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 6; - icon_state = "ltrails_1" - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron/white{ +"gh" = ( +/obj/machinery/vending/coffee, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/arrivals) +"gm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/arrivals) "gq" = ( /obj/machinery/door/airlock/medical{ name = "Research Division" @@ -768,16 +838,6 @@ /obj/structure/alien/weeds, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"gw" = ( -/obj/item/storage/box/lights/mixed, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) "gA" = ( /obj/effect/decal/cleanable/oil, /obj/structure/cable, @@ -813,16 +873,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"gG" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) "gI" = ( /obj/structure/table, /obj/item/surgical_drapes, @@ -841,6 +891,12 @@ /obj/structure/alien/weeds, /turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) +"gL" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "gM" = ( /obj/structure/disposalpipe/segment{ desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; @@ -849,21 +905,6 @@ /obj/structure/alien/weeds, /turf/open/floor/engine, /area/awaymission/moonoutpost19/research) -"gO" = ( -/obj/machinery/light/small/directional/south, -/obj/structure/closet/toolcloset, -/obj/item/clothing/gloves/color/yellow, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"gS" = ( -/obj/item/cigbutt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "gU" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/purple{ @@ -927,6 +968,12 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"hj" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "hn" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -943,40 +990,47 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"hp" = ( -/obj/structure/cable, -/turf/open/floor/iron{ +"hs" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/item/radio/off, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"hs" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) -"ht" = ( -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 +"hy" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" }, -/turf/open/floor/iron/dark{ +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/research) "hB" = ( /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/awaymission/moonoutpost19/research) -"hC" = ( -/obj/machinery/light/small/directional/east, -/obj/structure/chair/wood, -/obj/machinery/airalarm/directional/east{ - req_access = null +"hF" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -3 + }, +/obj/machinery/door/poddoor/shutters{ + id = "awaykitchen"; + name = "Serving Hatch" }, -/obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/carpet{ heat_capacity = 1e+006 }, @@ -987,10 +1041,37 @@ "hJ" = ( /turf/closed/wall, /area/awaymission/moonoutpost19/arrivals) -"hW" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 +"hN" = ( +/obj/structure/sign/poster/contraband/syndicate_recruitment/directional/north, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/structure/alien/weeds, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"hQ" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/generic, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/arrivals) +"hT" = ( +/obj/machinery/light/directional/east, +/obj/machinery/processor, +/obj/machinery/airalarm/directional/east{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, /area/awaymission/moonoutpost19/arrivals) "hX" = ( @@ -1055,14 +1136,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"ij" = ( -/obj/structure/sink/directional/south, -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) "im" = ( /obj/structure/bed{ dir = 4 @@ -1080,11 +1153,16 @@ /turf/open/floor/plating, /area/awaymission/moonoutpost19/arrivals) "iq" = ( -/obj/item/cigbutt, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron{ + pixel_x = -7; + pixel_y = -4 }, -/area/awaymission/moonoutpost19/research) +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) "ir" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -1104,23 +1182,11 @@ }, /area/awaymission/moonoutpost19/research) "it" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet/syndie{ - dir = 4 - }, -/obj/machinery/button/door/directional/north{ - id = "awaydorm4"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/obj/machinery/newscaster/directional/east, +/turf/open/floor/carpet{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "iv" = ( /obj/machinery/door/airlock/external/ruin, /obj/effect/decal/cleanable/dirt, @@ -1161,6 +1227,32 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) +"iD" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"iF" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/iron{ + amount = 12 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron{ + dir = 1; + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) "iH" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/south, /obj/machinery/light/small/broken/directional/south, @@ -1194,34 +1286,20 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"iN" = ( -/obj/machinery/door/airlock/external/ruin, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plating{ +"iR" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"iP" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/clothing/gloves/color/yellow, -/obj/item/multitool, +/area/awaymission/moonoutpost19/syndicate) +"iT" = ( +/obj/structure/closet/l3closet/scientist, +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/alien/weeds, /obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 + dir = 8 }, -/area/awaymission/moonoutpost19/syndicate) -"iR" = ( -/obj/structure/chair/stool/directional/south, -/turf/open/floor/plating{ +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) @@ -1232,19 +1310,14 @@ }, /area/awaymission/moonoutpost19/arrivals) "iW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 5; - icon_state = "ltrails_1" - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron/white{ +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/arrivals) "iX" = ( /turf/open/floor/iron/cafeteria{ dir = 5 @@ -1257,18 +1330,18 @@ dir = 5 }, /area/awaymission/moonoutpost19/arrivals) -"jb" = ( -/obj/structure/chair/comfy/black{ - dir = 8 - }, +"je" = ( +/obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron{ + dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"je" = ( -/obj/effect/mapping_helpers/burnt_floor, +"jh" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron{ - dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) @@ -1297,6 +1370,11 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"jt" = ( +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "jv" = ( /obj/structure/extinguisher_cabinet/directional/north, /obj/effect/mapping_helpers/burnt_floor, @@ -1332,15 +1410,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"jC" = ( -/obj/structure/sign/warning/vacuum/directional/west{ - desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; - name = "\improper HOSTILE ATMOSPHERE AHEAD" - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "jE" = ( /obj/structure/chair{ dir = 8 @@ -1351,41 +1420,20 @@ }, /area/awaymission/moonoutpost19/arrivals) "jF" = ( -/obj/machinery/light/small/directional/east, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/arrivals) -"jG" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"jH" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; - dir = 4; - name = "Acid-Proof disposal pipe" - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 }, /turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"jM" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/turf/open/floor/plating{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"jP" = ( +/area/awaymission/moonoutpost19/syndicate) +"jH" = ( +/obj/machinery/light/small/broken/directional/east, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, @@ -1395,44 +1443,25 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) +"jM" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "jR" = ( /obj/machinery/vending/dinnerware, /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/awaymission/moonoutpost19/arrivals) -"jU" = ( -/obj/machinery/door/airlock/external/ruin, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"jW" = ( -/obj/structure/closet/secure_closet{ - icon_state = "sec"; - name = "security officer's locker"; - req_access = list("away_maintenance") - }, -/obj/item/clothing/suit/armor/vest, -/obj/item/reagent_containers/spray/pepper, -/obj/item/grenade/flashbang, -/obj/item/storage/belt/security, -/obj/item/reagent_containers/cup/glass/bottle/beer{ - pixel_x = -3; - pixel_y = -2 - }, -/obj/machinery/airalarm/directional/north{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 1 - }, -/turf/open/floor/iron{ +"jS" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/syndicate) "jY" = ( /obj/machinery/light/small/directional/north, /obj/machinery/airalarm/directional/north{ @@ -1447,6 +1476,22 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"jZ" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/effect/decal/remains/xeno{ + desc = "They look like the remains of something... alien. The front of skull appears to have been completely obliterated." + }, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"kc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "kd" = ( /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, @@ -1467,19 +1512,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"kj" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" - }, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "kl" = ( /obj/machinery/door/airlock/maintenance, /turf/open/floor/plating{ @@ -1487,30 +1519,27 @@ }, /area/awaymission/moonoutpost19/arrivals) "km" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"ko" = ( +/obj/structure/sink/directional/south, +/obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"kp" = ( -/obj/machinery/light/small/broken/directional/east, +/area/awaymission/moonoutpost19/syndicate) +"kn" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 - }, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) +"ko" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/arrivals) "kq" = ( /obj/structure/table, /obj/item/book/manual/chef_recipes{ @@ -1528,18 +1557,6 @@ dir = 5 }, /area/awaymission/moonoutpost19/arrivals) -"ks" = ( -/obj/machinery/power/smes{ - charge = 1.5e+006; - input_level = 10000; - inputting = 0; - output_level = 15000 - }, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "kB" = ( /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/iron{ @@ -1555,30 +1572,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) -"kD" = ( -/obj/machinery/shower/directional/south, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"kI" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"kJ" = ( -/obj/item/shard{ - icon_state = "small" - }, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) "kM" = ( /obj/structure/closet/crate/bin, /obj/item/plate, @@ -1587,6 +1580,12 @@ dir = 5 }, /area/awaymission/moonoutpost19/arrivals) +"kQ" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "kR" = ( /obj/item/stack/rods, /obj/item/shard, @@ -1595,47 +1594,23 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"kS" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) "kT" = ( -/obj/machinery/computer/monitor, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"kU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/iron{ +/obj/structure/table, +/obj/item/storage/medkit/fire, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/iron/white/side{ + dir = 8; heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/research) "kV" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/corner, -/obj/effect/turf_decal/stripes/asteroid/corner{ - dir = 8 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/obj/machinery/light/small/directional/east, +/obj/structure/chair/wood, +/obj/machinery/airalarm/directional/east{ + req_access = null }, -/area/awaymission/moonoutpost19/main) -"kY" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) @@ -1655,40 +1630,37 @@ "ld" = ( /turf/closed/wall/mineral/titanium, /area/awaymission/moonoutpost19/arrivals) +"le" = ( +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "ln" = ( /turf/open/floor/carpet{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"lq" = ( -/obj/structure/closet/crate/bin, -/obj/item/trash/syndi_cakes, -/obj/item/trash/sosjerky, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +"lx" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/area/awaymission/moonoutpost19/syndicate) -"lt" = ( /obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"lw" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/dirt, +/area/awaymission/moonoutpost19/syndicate) +"lz" = ( +/obj/machinery/door/firedoor/closed, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"lz" = ( -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) "lD" = ( /obj/machinery/power/shuttle_engine/heater{ dir = 4 @@ -1699,11 +1671,26 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"lN" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, +"lG" = ( +/obj/structure/closet/crate, +/obj/item/storage/bag/ore, /obj/structure/alien/weeds, +/obj/item/mining_scanner, +/obj/item/shovel, +/obj/item/pickaxe, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"lN" = ( +/obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, @@ -1727,6 +1714,14 @@ /obj/item/clothing/suit/hooded/chaplain_hoodie, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/arrivals) +"lU" = ( +/obj/effect/decal/cleanable/xenoblood, +/obj/effect/decal/cleanable/xenoblood/xgibs, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "lW" = ( /obj/structure/table, /obj/item/storage/lockbox, @@ -1766,55 +1761,27 @@ /obj/structure/closet/emcloset, /turf/open/floor/mineral/titanium/blue, /area/awaymission/moonoutpost19/arrivals) -"mg" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"mj" = ( -/obj/machinery/power/apc/worn_out, -/obj/effect/mapping_helpers/apc/full_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "ml" = ( /obj/structure/table, /obj/item/storage/backpack/satchel/leather/withwallet, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/arrivals) -"mn" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/external/ruin{ - density = 0; - icon_state = "open"; - opacity = 0 - }, -/obj/effect/mapping_helpers/atom_injector/obj_flag{ - inject_flags = 1; - target_type = /obj/machinery/door/airlock - }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/syndicate) -"mo" = ( -/obj/effect/decal/cleanable/dirt, +"mm" = ( +/obj/structure/table, +/obj/item/cigbutt, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"mn" = ( +/obj/structure/closet/l3closet, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/white/side{ + dir = 1; + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "mp" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, @@ -1857,15 +1824,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"mz" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) "mD" = ( /obj/machinery/light/small/directional/west, /obj/structure/chair/comfy/beige, @@ -1902,6 +1860,21 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) +"mJ" = ( +/obj/structure/closet/secure_closet/freezer{ + locked = 0; + name = "meat fridge"; + req_access = list("away_maintenance") + }, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/obj/item/food/meat/slab/monkey, +/turf/open/floor/iron/showroomfloor{ + heat_capacity = 1e+006; + temperature = 273.15 + }, +/area/awaymission/moonoutpost19/arrivals) "mK" = ( /obj/machinery/door/airlock/titanium{ name = "Shuttle Airlock" @@ -1919,20 +1892,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"mO" = ( -/obj/structure/extinguisher_cabinet/directional/west, -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - icon_state = "ltrails_2" - }, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "mT" = ( /obj/machinery/light/small/directional/east, /obj/machinery/airalarm/directional/east{ @@ -1962,60 +1921,20 @@ /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) "mX" = ( -/obj/structure/table/reinforced, -/obj/structure/alien/weeds, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/item/radio/off, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron{ +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/syndicate) "mY" = ( /obj/machinery/light/small/directional/east, /obj/structure/window/reinforced/spawner/directional/south, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) -"na" = ( -/obj/machinery/door/firedoor, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/research{ - density = 0; - icon_state = "open"; - name = "Xenobiology Lab"; - opacity = 0 - }, -/obj/effect/mapping_helpers/atom_injector/obj_flag{ - inject_flags = 1; - target_type = /obj/machinery/door/airlock - }, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "nd" = ( /obj/machinery/vending/cigarette, /obj/structure/sign/poster/contraband/smoke/directional/north, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/syndicate) -"ne" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "nf" = ( /obj/structure/filingcabinet, /turf/open/floor/mineral/titanium/blue, @@ -2041,26 +1960,28 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"nm" = ( -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ +"nj" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, /turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"nn" = ( -/obj/item/flashlight/lantern{ - icon_state = "lantern-on" + heat_capacity = 1e+006 }, -/obj/effect/decal/cleanable/blood/splatter, +/area/awaymission/moonoutpost19/research) +"no" = ( +/obj/structure/alien/weeds, +/obj/effect/decal/cleanable/blood/gibs, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/main) +/area/awaymission/moonoutpost19/hive) "nq" = ( /obj/effect/decal/cleanable/blood/tracks{ desc = "Your instincts say you shouldn't be following these."; @@ -2078,6 +1999,14 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) +"nr" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Break Room" + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "ns" = ( /obj/structure/grille/broken, /obj/item/stack/rods, @@ -2097,11 +2026,6 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"nv" = ( -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "nx" = ( /obj/machinery/light/small/directional/north, /obj/structure/window/reinforced/spawner/directional/east{ @@ -2120,28 +2044,17 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"nz" = ( -/obj/structure/disposalpipe/segment{ - desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; - dir = 4; - name = "Acid-Proof disposal pipe" - }, -/obj/machinery/door/poddoor/preopen{ - desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; - id = "Awaylab"; - name = "Acid-Proof Containment Chamber Blast Door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "nA" = ( -/obj/machinery/light/directional/west, -/obj/structure/chair/stool/directional/south, +/obj/machinery/airalarm/directional/north{ + req_access = list("syndicate") + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron{ - heat_capacity = 1e+006 + dir = 8; + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) "nB" = ( @@ -2150,20 +2063,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"nG" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/cup/rag{ - pixel_y = 5 - }, -/obj/machinery/door/poddoor/shutters{ - id = "awaykitchen"; - name = "Serving Hatch" - }, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "nH" = ( /obj/structure/bed{ dir = 4 @@ -2238,6 +2137,25 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) +"nQ" = ( +/obj/structure/dresser, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/north{ + id = "awaydorm5"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"nR" = ( +/obj/structure/chair/office, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "nS" = ( /obj/structure/table, /obj/item/toy/cards/deck, @@ -2249,37 +2167,17 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"nT" = ( -/obj/structure/table, -/obj/item/scalpel{ - pixel_y = 12 +"nV" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/obj/item/circular_saw, -/obj/item/razor{ - pixel_y = 5 - }, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"nW" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/gun/ballistic/automatic/pistol, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) -"nX" = ( -/obj/structure/chair/comfy/black{ - dir = 8 +/area/awaymission/moonoutpost19/research) +"nX" = ( +/obj/structure/chair/comfy/black{ + dir = 8 }, /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/iron{ @@ -2289,92 +2187,214 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) +"od" = ( +/obj/machinery/mineral/processing_unit_console, +/turf/closed/wall, +/area/awaymission/moonoutpost19/syndicate) "oi" = ( -/obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" +/obj/structure/closet/crate, +/obj/item/stack/sheet/glass{ + amount = 10 }, -/turf/open/floor/iron/showroomfloor{ +/obj/structure/alien/weeds, +/obj/effect/turf_decal/bot{ + dir = 1 + }, +/turf/open/floor/iron{ + dir = 1; heat_capacity = 1e+006; - temperature = 273.15 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"om" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 6 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "os" = ( -/obj/structure/sign/departments/science/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 1 +/obj/structure/table, +/obj/item/book/manual/wiki/barman_recipes{ + pixel_y = 5 }, -/turf/open/floor/iron{ +/obj/item/reagent_containers/cup/glass/shaker, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/arrivals) +"oV" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/research) +"oZ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + icon_state = "ltrails_1" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, /area/awaymission/moonoutpost19/arrivals) -"ox" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/iron/dark{ +"pb" = ( +/obj/machinery/shower/directional/west, +/obj/item/bikehorn/rubberducky, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"oT" = ( -/obj/structure/dresser, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/north{ - id = "awaydorm5"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 +/area/awaymission/moonoutpost19/arrivals) +"ph" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 }, -/turf/open/floor/wood{ +/obj/item/clothing/gloves/color/yellow, +/obj/item/multitool, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"oZ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ +"pp" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 + }, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron{ + dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"pa" = ( -/obj/effect/decal/cleanable/dirt, +"ps" = ( +/obj/structure/table/reinforced, +/obj/machinery/button/door{ + id = "Awaylab"; + name = "Containment Chamber Blast Doors"; + pixel_x = 4; + pixel_y = -2; + req_access = list("away_maintenance") + }, +/obj/machinery/button/ignition{ + id = "awayxenobio"; + pixel_x = 4; + pixel_y = 8 + }, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"pp" = ( +"pz" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"pD" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 5 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) +"pI" = ( +/obj/structure/rack, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 6 }, -/turf/open/floor/iron{ +/turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"pD" = ( -/obj/structure/closet/secure_closet/freezer{ - locked = 0; - name = "refrigerator"; - req_access = list("away_maintenance") - }, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/reagent_containers/condiment/milk, -/obj/item/storage/fancy/egg_box, -/turf/open/floor/iron/showroomfloor{ +"pO" = ( +/mob/living/basic/construct/proteon/hostile, +/turf/open/space, +/area/space) +"pP" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, +/obj/structure/alien/resin/wall, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; - temperature = 273.15 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/arrivals) -"pI" = ( -/obj/structure/chair/stool/directional/south, -/obj/effect/mapping_helpers/broken_floor, +/area/awaymission/moonoutpost19/hive) +"pS" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"qk" = ( +/obj/structure/sign/warning/vacuum{ + desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; + name = "\improper HOSTILE ATMOSPHERE AHEAD" + }, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/arrivals) +"ql" = ( +/obj/structure/alien/weeds/node, +/obj/effect/decal/cleanable/blood, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"qm" = ( +/obj/structure/sink/directional/south, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"qo" = ( +/obj/structure/table, +/turf/open/floor/iron/white/corner{ + dir = 1; + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"qp" = ( +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 + }, /area/awaymission/moonoutpost19/syndicate) -"pK" = ( +"qw" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, /obj/item/radio/off{ @@ -2389,351 +2409,323 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"pM" = ( -/obj/machinery/light/broken/directional/south, -/obj/structure/alien/weeds, -/obj/machinery/camera/directional/south{ - c_tag = "Xenobiology Containment South"; - network = list("mo19x") - }, -/turf/open/floor/engine, -/area/awaymission/moonoutpost19/research) -"pO" = ( -/mob/living/basic/construct/proteon/hostile, -/turf/open/space, -/area/space) -"pT" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - locked = 0; - req_access = list("syndicate") - }, -/obj/item/stack/spacecash/c50, -/turf/open/floor/wood{ +"qM" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"qd" = ( -/obj/structure/reagent_dispensers/wall/peppertank/directional/west, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 +/area/awaymission/moonoutpost19/arrivals) +"qT" = ( +/obj/machinery/light/small/directional/west, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/arrivals) +"qX" = ( +/obj/structure/alien/weeds, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) +"qY" = ( +/obj/structure/closet/crate/bin, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, /area/awaymission/moonoutpost19/research) -"qf" = ( -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark{ +"rc" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"qi" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/generic, -/obj/effect/turf_decal/tile/neutral, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, /area/awaymission/moonoutpost19/arrivals) -"qk" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +"rd" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 5; + icon_state = "ltrails_1" }, -/turf/open/floor/iron/freezer{ +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"qr" = ( +/area/awaymission/moonoutpost19/arrivals) +"rf" = ( +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"qw" = ( -/obj/structure/sign/warning/secure_area/directional/north, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"qy" = ( +"rg" = ( +/obj/structure/extinguisher_cabinet/directional/north, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark{ +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"qG" = ( -/obj/machinery/portable_atmospherics/scrubber, +/area/awaymission/moonoutpost19/arrivals) +"rm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"qM" = ( +"rp" = ( +/obj/structure/chair/wood, +/obj/machinery/airalarm/directional/west{ + pixel_x = -23; + req_access = list("syndicate") + }, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/turf/open/floor/wood{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/syndicate) +"rq" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst/right{ + dir = 4 + }, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) -"qR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ +"rN" = ( +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/structure/cable, +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"rP" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"rU" = ( +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 + }, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"qV" = ( +"rZ" = ( +/obj/structure/table, +/obj/item/kitchen/rollingpin, +/obj/item/knife/kitchen, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/arrivals) +"sb" = ( /obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/clothing/under/syndicate, -/obj/item/clothing/glasses/night, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"qW" = ( -/obj/structure/cable, -/turf/open/floor/iron/dark{ +"sc" = ( +/obj/machinery/firealarm/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"si" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/sign/poster/contraband/hacking_guide/directional/east, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"rd" = ( -/obj/structure/sign/warning/electric_shock, -/turf/closed/wall/r_wall, -/area/awaymission/moonoutpost19/research) -"re" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 +"sj" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/syndicate/orange, +/obj/item/clothing/mask/gas, +/obj/item/pickaxe/drill, +/obj/item/clothing/head/helmet/space/syndicate/orange, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, /turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/main) -"rh" = ( -/obj/machinery/button/door/directional/west{ - id = "awaydorm1"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - specialfunctions = 4 - }, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"rl" = ( -/obj/machinery/light/directional/east, -/obj/machinery/processor, -/obj/machinery/airalarm/directional/east{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/arrivals) -"rm" = ( +/area/awaymission/moonoutpost19/syndicate) +"sk" = ( +/obj/item/cigbutt, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue/half/contrasted, +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"rq" = ( -/obj/machinery/power/shuttle_engine/propulsion/burst/right{ - dir = 4 - }, -/turf/open/misc/asteroid{ +"sn" = ( +/obj/machinery/power/apc/worn_out, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/structure/cable, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"rx" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/syndicate) +"st" = ( +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"rC" = ( -/obj/structure/chair{ +/area/awaymission/moonoutpost19/syndicate) +"sC" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"rE" = ( -/obj/item/stack/rods, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/syndicate) +"sG" = ( +/obj/machinery/door/poddoor/preopen{ + desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; + id = "Awaybiohazard"; + name = "Acid-Proof Biohazard Containment Door" }, -/area/awaymission/moonoutpost19/research) -"rW" = ( -/obj/machinery/door/firedoor, /obj/machinery/door/poddoor{ desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; id = "Awaybiohazard"; layer = 2.9; name = "Acid-Proof Biohazard Containment Door" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/iron{ +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"sa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/loading_area, -/obj/structure/alien/weeds, +"sI" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"sQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"sg" = ( -/obj/structure/rack, +/area/awaymission/moonoutpost19/arrivals) +"sS" = ( /obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"te" = ( +/obj/structure/alien/weeds/node, /obj/effect/turf_decal/stripes/line{ - dir = 6 + dir = 8 }, -/turf/open/floor/plating{ +/turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"sp" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Post" +"ti" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm/directional/east{ + req_access = null }, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/turf/open/floor/iron/white{ +/obj/effect/mapping_helpers/airalarm/unlocked, +/turf/open/floor/iron/white/side{ + dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"ss" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"sA" = ( -/obj/structure/alien/weeds/node, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) -"sG" = ( -/obj/structure/grille, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"tj" = ( +/obj/machinery/door/window{ + dir = 1; + name = "Gateway Access"; + req_access = list("syndicate") }, -/area/awaymission/moonoutpost19/arrivals) -"sI" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/area/awaymission/moonoutpost19/hive) -"sN" = ( -/obj/machinery/shower/directional/west, -/obj/item/bikehorn/rubberducky, -/turf/open/floor/iron/freezer{ +/obj/structure/cable, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"sO" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) -"sT" = ( -/obj/machinery/firealarm/directional/north, -/obj/structure/table, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 +/area/awaymission/moonoutpost19/syndicate) +"to" = ( +/obj/machinery/airalarm/directional/north{ + req_access = null }, -/obj/item/storage/box/syringes, -/obj/structure/alien/weeds, +/obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"sU" = ( -/obj/structure/chair, +/area/awaymission/moonoutpost19/arrivals) +"tq" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/awaymission/moonoutpost19/research) -"tj" = ( -/obj/structure/sink/directional/west, -/obj/structure/mirror/directional/east{ - icon_state = "mirror_broke" +"tE" = ( +/obj/machinery/door/poddoor/preopen{ + desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; + id = "Awaylab"; + name = "Acid-Proof Containment Chamber Blast Door" }, -/turf/open/floor/iron/freezer{ +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"tJ" = ( -/obj/item/cigbutt, +/area/awaymission/moonoutpost19/research) +"tQ" = ( +/obj/structure/chair{ + dir = 1 + }, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"tP" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron{ - dir = 8; - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"tQ" = ( -/obj/structure/closet/emcloset, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"tT" = ( +/obj/structure/grille, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "tX" = ( /obj/structure/chair{ dir = 8 @@ -2741,70 +2733,116 @@ /obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/blue, /area/awaymission/moonoutpost19/arrivals) -"tZ" = ( -/obj/item/radio/off, -/obj/item/screwdriver{ - pixel_y = 10 +"ud" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + icon_state = "ltrails_1" }, -/obj/structure/sign/poster/official/safety_report/directional/north, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 4 +/obj/effect/turf_decal/tile/purple{ + dir = 8 }, -/turf/open/floor/iron{ +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) "ue" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"uk" = ( +/obj/structure/table, +/obj/item/retractor, +/obj/item/hemostat, /obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/turf/open/floor/iron/white, +/area/awaymission/moonoutpost19/research) +"uu" = ( +/obj/structure/table, +/obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/hive) -"ul" = ( -/obj/item/kirbyplants{ - desc = "A plastic potted plant."; - pixel_y = 3 +/area/awaymission/moonoutpost19/research) +"uv" = ( +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ + dir = 4 }, -/obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"um" = ( -/obj/machinery/door/airlock/engineering{ - name = "Power Maintenance" +"ux" = ( +/obj/structure/table, +/obj/item/clothing/gloves/latex, +/obj/item/clothing/mask/surgical, +/obj/item/clothing/suit/apron/surgical, +/obj/structure/alien/weeds, +/turf/open/floor/iron/white/side{ + dir = 1; + heat_capacity = 1e+006 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/cable, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/research) +"uz" = ( +/obj/machinery/vending/medical{ + req_access = list("away_maintenance") + }, +/turf/open/floor/iron/white/side{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"uA" = ( +/turf/open/floor/wood{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"us" = ( -/obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/syndicate/orange, -/obj/item/clothing/mask/gas, -/obj/item/clothing/head/helmet/space/syndicate/orange, -/obj/item/clothing/mask/facehugger/impregnated, +"uH" = ( /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/hive) -"ux" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock{ - name = "Kitchen" +/area/awaymission/moonoutpost19/main) +"uK" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Security Post" }, /obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/turf/open/floor/iron/dark, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"uM" = ( +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"uN" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/item/shard, +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_2" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, /area/awaymission/moonoutpost19/arrivals) "uO" = ( /obj/machinery/airalarm/directional/east{ @@ -2818,63 +2856,60 @@ temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"uR" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/machinery/newscaster{ - pixel_x = -30 +"uT" = ( +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/research{ + density = 0; + icon_state = "open"; + name = "Xenobiology Lab"; + opacity = 0 }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 +/obj/effect/mapping_helpers/atom_injector/obj_flag{ + inject_flags = 1; + target_type = /obj/machinery/door/airlock }, +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"uX" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 +"uU" = ( +/obj/machinery/computer/monitor{ + dir = 1 }, -/obj/machinery/light/small/directional/east, +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"uY" = ( +/obj/item/cigbutt, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"vc" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 8 - }, +/area/awaymission/moonoutpost19/arrivals) +"vb" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/item/stack/rods, +/obj/item/shard, +/obj/structure/alien/weeds, /turf/open/floor/plating{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"vg" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, +/area/awaymission/moonoutpost19/syndicate) +"vl" = ( +/obj/structure/chair/stool/directional/west, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"vn" = ( -/obj/structure/alien/weeds, -/obj/effect/decal/cleanable/blood/gibs, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) +/area/awaymission/moonoutpost19/syndicate) "vt" = ( /obj/structure/sign/warning/vacuum{ desc = "A beacon used by a teleporter."; @@ -2885,118 +2920,63 @@ /obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) -"vH" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"vJ" = ( -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"vM" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"vW" = ( -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +"vC" = ( +/obj/structure/rack, +/obj/item/pai_card{ + pixel_x = 4 }, -/area/awaymission/moonoutpost19/syndicate) -"vZ" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - locked = 0; - req_access = list("away_maintenance") +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/obj/item/clothing/under/misc/assistantformal, -/turf/open/floor/carpet{ +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"wa" = ( -/obj/structure/chair/wood, -/obj/machinery/airalarm/directional/west{ - pixel_x = -23; - req_access = list("syndicate") - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/syndicate) -"wc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/area/awaymission/moonoutpost19/research) +"vE" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; + dir = 4; + name = "Acid-Proof disposal pipe" }, -/area/awaymission/moonoutpost19/syndicate) -"wf" = ( -/obj/machinery/airalarm/directional/north{ - req_access = null +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/mapping_helpers/airalarm/unlocked, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"wh" = ( -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/east{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/turf/open/floor/iron/white/side{ - dir = 8; - heat_capacity = 1e+006 - }, /area/awaymission/moonoutpost19/research) -"wj" = ( -/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ - dir = 4 - }, +"vT" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"wm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted, +"vV" = ( +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"wv" = ( +/area/awaymission/moonoutpost19/research) +"wl" = ( /obj/machinery/door/firedoor/closed, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"ww" = ( -/obj/structure/rack, -/obj/item/pai_card{ - pixel_x = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +"wu" = ( +/obj/machinery/airalarm/directional/north{ + pixel_y = 23; + req_access = list("syndicate") }, -/turf/open/floor/iron/white{ +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/syndicate) "wy" = ( /obj/structure/alien/weeds, /mob/living/basic/alien, @@ -3005,119 +2985,68 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"wz" = ( -/obj/structure/sign/warning/vacuum/directional/south{ - desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; - name = "\improper HOSTILE ATMOSPHERE AHEAD" +"wB" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/area/awaymission/moonoutpost19/research) +"wE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/arrivals) +"wF" = ( +/obj/structure/chair/comfy/black, /turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"wB" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/hive) -"wH" = ( -/obj/structure/alien/weeds, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/area/awaymission/moonoutpost19/arrivals) +"wZ" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + icon_state = "ltrails_2" }, -/area/awaymission/moonoutpost19/main) -"wI" = ( -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/structure/alien/weeds, +/obj/effect/turf_decal/tile/purple{ + dir = 8 }, -/turf/open/floor/plating{ +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"wS" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/tile/blue/half/contrasted, +/area/awaymission/moonoutpost19/research) +"xh" = ( +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"wU" = ( -/obj/structure/bed{ - dir = 4 - }, -/obj/item/bedsheet{ - dir = 4 - }, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) "xj" = ( /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"xk" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ +"xt" = ( +/obj/structure/urinal/directional/north, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"xl" = ( -/obj/structure/alien/weeds, +"xu" = ( +/obj/item/storage/bag/ore, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/hive) -"xs" = ( -/obj/machinery/mineral/processing_unit{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"xt" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/space_cube/directional/west, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/main) "xz" = ( -/obj/structure/closet, -/obj/item/storage/box/lights/mixed, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"xB" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Diner" - }, +/obj/machinery/door/firedoor/closed, /turf/open/floor/iron{ heat_capacity = 1e+006 }, @@ -3132,6 +3061,25 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) +"xK" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron{ + dir = 8; + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"xN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "xP" = ( /obj/structure/alien/weeds/node, /mob/living/basic/alien/drone{ @@ -3146,227 +3094,215 @@ /obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/yellow, /area/awaymission/moonoutpost19/arrivals) -"xV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 +"xW" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/external/ruin{ + density = 0; + icon_state = "open"; + opacity = 0 }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"ya" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - icon_state = "ltrails_1" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/obj/effect/mapping_helpers/atom_injector/obj_flag{ + inject_flags = 1; + target_type = /obj/machinery/door/airlock }, -/area/awaymission/moonoutpost19/arrivals) -"yb" = ( -/obj/effect/decal/cleanable/oil, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/arrivals) -"ye" = ( -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/syndicate) +"xZ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; + id = "Awaybiohazard"; + layer = 2.9; + name = "Acid-Proof Biohazard Containment Door" }, -/area/awaymission/moonoutpost19/arrivals) -"yg" = ( -/obj/structure/closet/crate/freezer, -/obj/structure/alien/weeds, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/xenos_claw, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/delivery, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"yh" = ( -/obj/structure/table, -/obj/item/book/manual/wiki/detective, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"yk" = ( +"ya" = ( +/obj/item/stack/rods, /obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"yp" = ( -/obj/structure/sign/warning/vacuum{ - desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; - name = "\improper HOSTILE ATMOSPHERE AHEAD" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +"yg" = ( +/obj/structure/tank_dispenser/oxygen{ + oxygentanks = 9 }, -/area/awaymission/moonoutpost19/arrivals) -"yy" = ( -/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/light/small/broken/directional/north, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 9 }, /turf/open/floor/plating{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"yH" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 +"yh" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" }, -/turf/open/floor/iron/dark{ +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"yJ" = ( -/obj/structure/table, -/obj/item/book/manual/wiki/security_space_law, -/obj/machinery/computer/security/telescreen/entertainment/directional/west, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 +/area/awaymission/moonoutpost19/research) +"yi" = ( +/obj/item/shard{ + icon_state = "small" }, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/research) -"yM" = ( -/obj/structure/cable, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/main) +"yl" = ( +/obj/item/flashlight/lantern{ + icon_state = "lantern-on" + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/syndicate) -"yO" = ( -/obj/effect/decal/cleanable/cobweb, +/area/awaymission/moonoutpost19/main) +"yp" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"yQ" = ( -/obj/machinery/airalarm/directional/north{ - pixel_y = 23; - req_access = list("syndicate") +/obj/effect/turf_decal/tile/purple{ + dir = 4 }, -/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"yU" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_2" +/area/awaymission/moonoutpost19/arrivals) +"ys" = ( +/obj/structure/alien/weeds/node, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/main) +"yX" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"zm" = ( -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +"yZ" = ( +/obj/structure/table, +/obj/item/scalpel{ + pixel_y = 12 }, -/area/awaymission/moonoutpost19/arrivals) -"zt" = ( -/obj/structure/sign/warning/vacuum/directional/north{ - desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; - name = "\improper HOSTILE ATMOSPHERE AHEAD" +/obj/item/circular_saw, +/obj/item/razor{ + pixel_y = 5 }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/area/awaymission/moonoutpost19/arrivals) -"zu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/port_gen/pacman/super{ - name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator" +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 }, -/obj/effect/turf_decal/stripes/line, +/area/awaymission/moonoutpost19/research) +"za" = ( /obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"zw" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 5 +/area/awaymission/moonoutpost19/research) +"zd" = ( +/obj/item/stack/ore/iron{ + pixel_x = -3; + pixel_y = 9 }, -/turf/open/floor/plating{ +/turf/open/misc/asteroid{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"zy" = ( -/obj/structure/closet/crate, -/obj/item/storage/box/lights/mixed, -/obj/item/poster/random_contraband, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +"zk" = ( +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 }, -/area/awaymission/moonoutpost19/research) -"zz" = ( -/obj/effect/turf_decal/stripes/corner, +/obj/item/multitool, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"zC" = ( -/obj/structure/sink/directional/south, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"zI" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/decal/cleanable/dirt, -/obj/structure/noticeboard/directional/east, -/obj/item/paper/fluff/awaymissions/moonoutpost19/welcome, -/obj/machinery/camera/directional/east{ - c_tag = "Arrivals South"; - network = list("mo19") +"zp" = ( +/obj/structure/alien/weeds, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/area/awaymission/moonoutpost19/syndicate) +"zs" = ( +/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/closet/secure_closet{ + icon_state = "science"; + name = "scientist's locker"; + req_access = list("away_maintenance") }, +/obj/item/clothing/suit/toggle/labcoat, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/mask/gas, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/research) +"zt" = ( +/turf/open/floor/iron/white/corner{ + dir = 8; + heat_capacity = 1e+006 + }, /area/awaymission/moonoutpost19/arrivals) +"zy" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/effect/decal/cleanable/blood/gibs, +/obj/effect/decal/cleanable/blood, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/clothing/under/syndicate, +/obj/item/clothing/glasses/night, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) "zM" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/shutters{ - id = "awaykitchen"; - name = "Serving Hatch" +/obj/machinery/computer/monitor, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/turf/open/floor/carpet{ +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/syndicate) "zN" = ( /obj/machinery/mineral/stacking_machine{ dir = 1; @@ -3382,113 +3318,101 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"zO" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/closet/l3closet/scientist, +"zP" = ( /obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/turf_decal/tile/purple{ dir = 8 }, -/turf/open/floor/iron{ +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"zP" = ( -/obj/item/cigbutt, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +"zS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door/directional/west{ + id = "awaykitchen"; + name = "Kitchen Shutters Control" + }, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, /area/awaymission/moonoutpost19/arrivals) -"zQ" = ( -/obj/item/storage/bag/ore, +"zV" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"zR" = ( -/obj/machinery/airalarm/directional/west{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/machinery/light/small/directional/west, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 +"Ac" = ( +/obj/machinery/power/port_gen/pacman{ + name = "P.A.C.M.A.N.-type portable generator" }, -/area/awaymission/moonoutpost19/arrivals) -"zV" = ( -/obj/structure/table, -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/ivan, -/obj/effect/mapping_helpers/broken_floor, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"Ab" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"Ac" = ( +/area/awaymission/moonoutpost19/syndicate) +"Ai" = ( +/obj/structure/table/reinforced, /obj/structure/alien/weeds, -/obj/structure/bed/nest, -/obj/effect/decal/cleanable/blood/gibs, -/obj/item/clothing/mask/facehugger/impregnated, -/obj/item/clothing/under/rank/security/officer, -/obj/item/clothing/suit/armor/vest, -/obj/item/melee/baton/security/loaded, -/obj/item/clothing/head/helmet, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) -"Af" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/button/door/directional/west{ - id = "awaykitchen"; - name = "Kitchen Shutters Control" - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 }, -/area/awaymission/moonoutpost19/arrivals) -"Ah" = ( -/obj/machinery/door/firedoor, -/obj/structure/extinguisher_cabinet/directional/south, +/obj/item/pen, +/obj/item/radio/off, /obj/effect/turf_decal/stripes/line{ - dir = 4 + dir = 8 }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"At" = ( -/obj/machinery/power/terminal{ +"Aq" = ( +/obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"At" = ( +/obj/structure/sign/departments/science/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/purple/anticorner/contrasted{ dir = 1 }, -/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"Au" = ( +/obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/research) "Av" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" +/obj/structure/closet/secure_closet{ + icon_state = "rd"; + name = "research director's locker"; + req_access = list("away_maintenance") }, -/obj/structure/cable, -/turf/open/floor/plating{ +/obj/item/storage/backpack/satchel/science, +/obj/item/clothing/gloves/latex, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/research) +"AA" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) @@ -3498,44 +3422,99 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"AL" = ( -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"AX" = ( +"AF" = ( /turf/open/floor/iron/white/side{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ba" = ( +"AK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"Bb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 +"AN" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/syndicate) +"AQ" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_2" + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, +/area/awaymission/moonoutpost19/arrivals) +"AS" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, /area/awaymission/moonoutpost19/syndicate) -"Bc" = ( -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating{ +"AT" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair/stool/directional/south, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"AX" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"Ba" = ( +/obj/structure/alien/weeds/node, +/obj/structure/alien/resin/wall, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) +"Bh" = ( +/obj/item/pickaxe/drill, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"Be" = ( +"Bj" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"Bm" = ( +/obj/machinery/vending/cigarette, +/obj/structure/sign/poster/contraband/smoke/directional/south, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/arrivals) +"Br" = ( +/obj/machinery/light/broken/directional/east, +/obj/machinery/airalarm/directional/east{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"BB" = ( /obj/machinery/light/small/directional/east, /obj/effect/decal/remains/human{ desc = "They look like human remains. The skeleton is sitting upright with its legs tucked in and hands still holding onto its arms." @@ -3546,22 +3525,22 @@ temperature = 273.15 }, /area/awaymission/moonoutpost19/arrivals) -"Bm" = ( -/obj/machinery/vending/cigarette, -/obj/structure/sign/poster/contraband/smoke/directional/south, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/arrivals) -"Bn" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 5; - icon_state = "ltrails_1" +"BR" = ( +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/turf/open/floor/carpet{ +/area/awaymission/moonoutpost19/research) +"BT" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Bp" = ( +"BX" = ( /obj/structure/closet/crate/bin, /obj/item/trash/candy, /obj/item/trash/can, @@ -3572,149 +3551,116 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Bw" = ( +"BZ" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"Bx" = ( -/obj/item/stack/rods, -/obj/item/shard{ - icon_state = "small" - }, -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" - }, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 4 +/obj/item/trash/candy, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"Cb" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/lights/mixed, +/obj/item/poster/random_contraband, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"BA" = ( -/obj/machinery/light/small/directional/south, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 +"Cf" = ( +/obj/machinery/power/smes{ + input_level = 10000; + inputting = 0; + output_level = 15000 }, -/area/awaymission/moonoutpost19/research) -"BC" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/decal/cleanable/dirt, -/obj/structure/window/spawner/directional/north, +/obj/structure/cable, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"BE" = ( -/obj/structure/closet/secure_closet/freezer{ - locked = 0; - name = "meat fridge"; - req_access = list("away_maintenance") +/area/awaymission/moonoutpost19/syndicate) +"Ch" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral/half/contrasted{ + dir = 4 }, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/obj/item/food/meat/slab/monkey, -/turf/open/floor/iron/showroomfloor{ +/turf/open/floor/iron{ heat_capacity = 1e+006; - temperature = 273.15 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"BR" = ( +"Ci" = ( +/obj/machinery/door/airlock/maintenance, +/obj/structure/cable, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Cc" = ( -/obj/machinery/light/small/directional/south, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"Cp" = ( +/obj/structure/closet/l3closet, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Cd" = ( -/obj/machinery/door/airlock{ - id_tag = "awaydorm1"; - name = "Dorm 1" +/area/awaymission/moonoutpost19/syndicate) +"Ct" = ( +/obj/structure/alien/weeds, +/turf/open/floor/iron/white/side{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/research) +"CC" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + locked = 0; + req_access = list("away_maintenance") + }, +/obj/item/clothing/under/misc/assistantformal, +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Cf" = ( -/obj/structure/window/reinforced/spawner/directional/north, -/obj/structure/table, -/obj/item/storage/medkit/regular, -/obj/effect/decal/cleanable/dirt, +"CN" = ( +/obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 5 }, -/turf/open/floor/iron{ +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"Ci" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/turf/open/floor/plating{ - heat_capacity = 1e+006 +"CP" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera/directional/east{ + c_tag = "Bar"; + network = list("mo19") }, -/area/awaymission/moonoutpost19/research) -"Cp" = ( -/obj/machinery/door/firedoor/closed, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Cv" = ( -/obj/machinery/power/port_gen/pacman{ - name = "P.A.C.M.A.N.-type portable generator" - }, -/obj/structure/cable, +"CR" = ( +/obj/item/cigbutt, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Cw" = ( -/obj/machinery/light/small/directional/west, -/obj/machinery/computer/security{ - desc = "Used to access the various cameras on the outpost."; - dir = 4; - network = list("mo19r","mo19") - }, -/obj/machinery/button/door/directional/west{ - id = "Awaybiohazard"; - name = "Biohazard Shutter Control" - }, -/obj/effect/mapping_helpers/airlock/access/all/admin/general, -/obj/effect/turf_decal/tile/red/half/contrasted{ - dir = 8 +"CS" = ( +/obj/machinery/door/airlock{ + name = "Unisex Showers" }, -/turf/open/floor/iron{ +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"CF" = ( -/obj/structure/grille, -/obj/machinery/door/poddoor/preopen{ - desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; - id = "Awaylab"; - name = "Acid-Proof Containment Chamber Blast Door" - }, -/obj/item/stack/cable_coil/cut, +/area/awaymission/moonoutpost19/arrivals) +"CT" = ( +/obj/effect/decal/cleanable/oil, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"CK" = ( +/area/awaymission/moonoutpost19/arrivals) +"Dc" = ( /obj/item/stack/rods, /obj/item/shard{ icon_state = "small" @@ -3723,259 +3669,256 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"CL" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "Awaylab"; - name = "Containment Chamber Blast Doors"; - pixel_x = 4; - pixel_y = -2; +"Dh" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + locked = 0; req_access = list("away_maintenance") }, -/obj/machinery/button/ignition{ - id = "awayxenobio"; - pixel_x = 4; - pixel_y = 8 +/obj/item/clothing/under/suit/burgundy, +/turf/open/floor/carpet{ + heat_capacity = 1e+006 }, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/area/awaymission/moonoutpost19/arrivals) +"Di" = ( +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/turf/open/floor/iron{ +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"CR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/area/awaymission/moonoutpost19/syndicate) +"Dk" = ( +/obj/structure/alien/weeds, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/turf/open/floor/iron/white/corner{ - dir = 1; +/area/awaymission/moonoutpost19/hive) +"Ds" = ( +/obj/structure/noticeboard/directional/north, +/obj/item/paper/fluff/awaymissions/moonoutpost19/food_specials, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/iron{ + dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"CU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +"DA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Diner" }, -/area/awaymission/moonoutpost19/syndicate) -"Di" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Dn" = ( -/obj/structure/sign/warning/secure_area/directional/east, -/obj/structure/alien/weeds, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 +"DJ" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 10 }, -/area/awaymission/moonoutpost19/research) -"Dt" = ( -/obj/item/pickaxe/drill, -/turf/open/misc/asteroid{ +/turf/open/floor/plating{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"Dw" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 6; - icon_state = "ltrails_1" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/obj/effect/decal/cleanable/dirt, +/area/awaymission/moonoutpost19/arrivals) +"DO" = ( +/obj/item/cigbutt, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"DP" = ( +/obj/structure/sign/warning/vacuum/directional/south{ + desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; + name = "\improper HOSTILE ATMOSPHERE AHEAD" + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"DE" = ( +/area/awaymission/moonoutpost19/syndicate) +"DX" = ( +/obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white{ +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"DG" = ( -/obj/machinery/door/poddoor/preopen{ - desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; - id = "Awaybiohazard"; - name = "Acid-Proof Biohazard Containment Door" +/area/awaymission/moonoutpost19/arrivals) +"Eb" = ( +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/machinery/door/poddoor{ - desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; - id = "Awaybiohazard"; - layer = 2.9; - name = "Acid-Proof Biohazard Containment Door" +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/obj/effect/spawner/structure/window/reinforced, +/area/awaymission/moonoutpost19/main) +"Ek" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/sand/plating, /turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"El" = ( +/obj/structure/table, +/obj/item/stack/sheet/mineral/plasma, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/airalarm/directional/north{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/structure/alien/weeds, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"DJ" = ( +"Eo" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"DK" = ( +"Eq" = ( +/obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/public/glass{ +/obj/machinery/door/airlock/command{ density = 0; icon_state = "open"; - name = "Dormitories" + name = "Research Director's Office"; + opacity = 0 }, /obj/effect/mapping_helpers/atom_injector/obj_flag{ inject_flags = 1; target_type = /obj/machinery/door/airlock }, -/obj/item/stack/rods, -/obj/item/shard{ - icon_state = "small" - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/syndicate) -"DX" = ( -/obj/structure/closet/secure_closet{ - icon_state = "rd"; - name = "research director's locker"; - req_access = list("away_maintenance") - }, -/obj/item/storage/backpack/satchel/science, -/obj/item/clothing/gloves/latex, +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, /turf/open/floor/iron/cafeteria{ dir = 5 }, /area/awaymission/moonoutpost19/research) -"Em" = ( -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/stripes/line{ +"Er" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, +/obj/structure/chair/office/light{ dir = 4 }, -/obj/structure/sign/poster/contraband/hacking_guide/directional/east, -/turf/open/floor/plating{ +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/awaymission/moonoutpost19/research) +"EB" = ( +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"En" = ( -/obj/structure/tank_dispenser/oxygen{ - oxygentanks = 9 +/area/awaymission/moonoutpost19/research) +"EG" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/obj/machinery/light/small/broken/directional/north, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/area/awaymission/moonoutpost19/research) +"ES" = ( +/obj/machinery/mineral/unloading_machine{ + dir = 1; + icon_state = "unloader-corner"; + input_dir = 4; + output_dir = 8 }, +/obj/structure/alien/weeds, /turf/open/floor/plating{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) -"Er" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +"ET" = ( +/obj/structure/table/reinforced, +/obj/structure/alien/weeds, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching the contents of the xenobiology containment pen."; + dir = 8; + name = "xenobiology monitor"; + network = list("mo19x") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/area/awaymission/moonoutpost19/syndicate) -"Et" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ew" = ( -/obj/machinery/computer/operating{ - dir = 8 - }, +"EU" = ( +/obj/structure/sign/warning/secure_area/directional/east, /obj/structure/alien/weeds, -/turf/open/floor/iron/white/side{ - dir = 1; +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ez" = ( +"Fc" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"EF" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"EH" = ( -/obj/machinery/door/firedoor/closed, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"ET" = ( -/obj/item/stack/rods, -/obj/item/shard{ - icon_state = "small" - }, -/turf/open/misc/asteroid{ +"Fj" = ( +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/main) -"EU" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/syndicate) +"Fq" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/iron{ + dir = 8; + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"Fa" = ( -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood{ +"Fu" = ( +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Fc" = ( -/obj/structure/alien/weeds, -/obj/effect/turf_decal/tile/purple{ - dir = 8 +"Fv" = ( +/obj/structure/alien/weeds/node, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Fx" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +"FA" = ( +/obj/machinery/door/airlock{ + name = "Unit 1" + }, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) "FJ" = ( @@ -3986,26 +3929,14 @@ }, /area/awaymission/moonoutpost19/arrivals) "FK" = ( -/obj/structure/toilet{ +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 }, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"FM" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - icon_state = "ltrails_1" - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron/white{ +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"FR" = ( +/area/awaymission/moonoutpost19/syndicate) +"FP" = ( /obj/structure/disposalpipe/segment, /obj/effect/turf_decal/sand/plating, /obj/effect/turf_decal/stripes/asteroid/corner{ @@ -4020,25 +3951,39 @@ temperature = 251 }, /area/awaymission/moonoutpost19/main) -"FW" = ( -/obj/machinery/power/shieldwallgen/unlocked, -/obj/structure/cable, -/turf/open/floor/plating{ +"FQ" = ( +/obj/machinery/light/small/broken/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"FZ" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, +"FT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/cable, /turf/open/floor/iron{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Ga" = ( -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"FV" = ( +/obj/structure/closet, +/obj/item/storage/box/lights/mixed, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/main) +/area/awaymission/moonoutpost19/arrivals) +"FX" = ( +/obj/machinery/door/firedoor/closed, +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "Gh" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes/dromedaryco, @@ -4049,67 +3994,75 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Gi" = ( -/obj/machinery/shower/directional/north, -/turf/open/floor/iron/freezer{ +"Gj" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/item/stack/rods, +/obj/item/shard{ + icon_state = "medium" + }, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/research) "Gk" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ +/obj/structure/closet/emcloset, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"Gv" = ( -/obj/machinery/door/airlock{ - name = "Kitchen Cold Room" +"Go" = ( +/obj/structure/chair/wood{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, -/turf/open/floor/iron/showroomfloor{ +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) "Gw" = ( -/obj/structure/chair/comfy/black{ +/obj/structure/filingcabinet/chestdrawer, +/obj/machinery/light/small/broken/directional/north, +/obj/machinery/airalarm/directional/north{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, +/area/awaymission/moonoutpost19/research) +"Gx" = ( +/obj/machinery/door/firedoor, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"GG" = ( +/obj/structure/closet/crate/freezer, +/obj/structure/alien/weeds, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/xenos_claw, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Gy" = ( -/obj/machinery/mineral/processing_unit_console, -/turf/closed/wall, -/area/awaymission/moonoutpost19/syndicate) -"GE" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock{ - density = 0; - icon_state = "open"; - id_tag = "awaydorm4"; - name = "Dorm 1"; - opacity = 0 - }, -/obj/effect/mapping_helpers/atom_injector/obj_flag{ - inject_flags = 1; - target_type = /obj/machinery/door/airlock - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/area/awaymission/moonoutpost19/research) +"GJ" = ( +/obj/structure/sign/poster/official/nanotrasen_logo/directional/south, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/area/awaymission/moonoutpost19/syndicate) -"GS" = ( -/obj/machinery/light/small/broken/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ +/turf/open/floor/iron/white/corner{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"GV" = ( +/area/awaymission/moonoutpost19/arrivals) +"GS" = ( /obj/item/stack/rods, /obj/structure/grille/broken, /obj/item/stack/rods, @@ -4121,83 +4074,73 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) -"Hd" = ( -/obj/structure/sink/directional/east, -/turf/open/floor/iron/white, -/area/awaymission/moonoutpost19/research) -"Hh" = ( -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"Hl" = ( +"GX" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Hr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/obj/effect/decal/cleanable/dirt, +"Hb" = ( +/obj/machinery/door/airlock/engineering{ + name = "Power Maintenance" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, /obj/structure/cable, -/turf/open/floor/iron{ +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Hu" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +/area/awaymission/moonoutpost19/syndicate) +"Hf" = ( +/turf/open/floor/iron/showroomfloor{ + heat_capacity = 1e+006; + temperature = 273.15 }, -/obj/item/multitool, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"Hl" = ( +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Hy" = ( -/obj/machinery/light/directional/east, -/obj/machinery/airalarm/directional/east{ - pixel_x = 23; - req_access = list("syndicate") +"Ho" = ( +/obj/machinery/light/small/directional/south, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, +/area/awaymission/moonoutpost19/arrivals) +"Hz" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/turf/open/floor/wood{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) -"HA" = ( -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +"HB" = ( +/obj/structure/closet/secure_closet{ + locked = 0; + name = "kitchen Cabinet"; + req_access = list("away_maintenance") }, -/area/awaymission/moonoutpost19/syndicate) -"HG" = ( -/obj/structure/chair/office, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/showroomfloor{ + heat_capacity = 1e+006; + temperature = 273.15 }, -/area/awaymission/moonoutpost19/research) -"HI" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible, -/obj/structure/chair/office/light{ +/area/awaymission/moonoutpost19/arrivals) +"HD" = ( +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/structure/cable, -/turf/open/floor/iron/white, -/area/awaymission/moonoutpost19/research) -"HK" = ( -/obj/structure/table, -/obj/item/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/research) "HQ" = ( /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/oil, @@ -4218,241 +4161,198 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"HW" = ( -/obj/structure/table/wood, -/obj/item/pen, -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal_2, -/obj/structure/sign/poster/contraband/c20r/directional/south, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"HU" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" }, -/area/awaymission/moonoutpost19/syndicate) -"Ib" = ( -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Im" = ( -/obj/structure/alien/weeds/node, +"HW" = ( +/obj/item/stack/rods, +/obj/item/shard{ + icon_state = "small" + }, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"Ip" = ( -/obj/structure/filingcabinet, -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/kenneth, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 1 +"HZ" = ( +/obj/structure/chair/office/light{ + dir = 1; + pixel_y = 3 }, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/turf/open/floor/iron/cafeteria{ + dir = 5 }, /area/awaymission/moonoutpost19/research) -"Is" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/external/ruin{ - density = 0; - icon_state = "open"; - opacity = 0 +"Id" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/effect/mapping_helpers/atom_injector/obj_flag{ - inject_flags = 1; - target_type = /obj/machinery/door/airlock +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/area/awaymission/moonoutpost19/syndicate) +"Ik" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 }, -/obj/effect/turf_decal/sand/plating, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/obj/item/pen, +/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"Iw" = ( -/obj/machinery/shower/directional/south, +"Ip" = ( +/obj/item/soap/nanotrasen, +/obj/machinery/light/small/directional/west, /turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Ix" = ( -/obj/structure/alien/weeds/node, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"Iy" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + locked = 0; + req_access = list("syndicate") }, -/area/awaymission/moonoutpost19/hive) -"IL" = ( -/obj/item/stack/ore/iron{ - pixel_x = 7; - pixel_y = -6 +/obj/item/stack/spacecash/c50, +/turf/open/floor/wood{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"Iz" = ( +/obj/machinery/power/apc/worn_out, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/arrivals) +"IF" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/egg, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/main) -"IP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/area/awaymission/moonoutpost19/hive) +"IK" = ( +/obj/machinery/power/port_gen/pacman/super{ + name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator" }, -/area/awaymission/moonoutpost19/arrivals) -"IW" = ( -/obj/effect/decal/cleanable/oil, /obj/structure/cable, /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ja" = ( -/obj/structure/alien/weeds/node, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"Jc" = ( -/obj/machinery/light/small/directional/west, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +"IN" = ( +/obj/structure/alien/weeds, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/area/awaymission/moonoutpost19/research) +"IQ" = ( +/obj/machinery/door/airlock/external/ruin, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 }, -/area/awaymission/moonoutpost19/arrivals) -"Jm" = ( -/obj/structure/closet/emcloset, -/obj/structure/window/spawner/directional/south, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Jq" = ( -/turf/open/floor/wood{ - heat_capacity = 1e+006 +"IR" = ( +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 }, -/area/awaymission/moonoutpost19/syndicate) -"Jt" = ( -/obj/structure/table, -/obj/item/plate, -/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/machinery/portable_atmospherics/canister, +/obj/structure/alien/weeds, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"JD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral/half/contrasted{ - dir = 4 +/area/awaymission/moonoutpost19/research) +"IW" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/public/glass{ + density = 0; + icon_state = "open"; + name = "Dormitories" }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/obj/effect/mapping_helpers/atom_injector/obj_flag{ + inject_flags = 1; + target_type = /obj/machinery/door/airlock }, -/area/awaymission/moonoutpost19/arrivals) -"JE" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/item/stack/rods, +/obj/item/shard{ + icon_state = "small" }, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) -"JH" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 6 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +"IZ" = ( +/obj/structure/table/wood, +/obj/item/lighter, +/obj/machinery/newscaster/directional/east, +/turf/open/floor/carpet{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"JJ" = ( -/obj/structure/noticeboard/directional/south, -/obj/machinery/light/small/broken/directional/south, -/obj/item/paper/fluff/awaymissions/moonoutpost19/research/evacuation, -/obj/machinery/camera/directional/south{ - c_tag = "Research Division"; - network = list("mo19","mo19r") - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/turf/open/floor/iron/white{ +"Jb" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/burnt_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"JL" = ( -/turf/open/floor/iron/white/corner{ - dir = 8; - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"Km" = ( -/obj/structure/table, -/turf/open/floor/iron/white/side{ - dir = 8; +"Jc" = ( +/obj/machinery/power/apc/worn_out, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/effect/mapping_helpers/apc/unlocked, +/obj/effect/mapping_helpers/apc/cell_10k, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ko" = ( +"Jj" = ( +/obj/machinery/light/small/directional/north, /obj/effect/decal/cleanable/dirt, /obj/structure/cable, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Kp" = ( -/obj/item/trash/candy, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"Ku" = ( -/obj/structure/alien/weeds/node, -/mob/living/basic/alien, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/hive) -"KF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ +"Jm" = ( +/obj/structure/closet/emcloset, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"KJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/arrivals) +"Jo" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "awaysyndie"; + layer = 3.1; + name = "mining conveyor" }, -/area/awaymission/moonoutpost19/syndicate) -"KO" = ( -/obj/effect/turf_decal/tile/red/half/contrasted{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/iron{ @@ -4461,240 +4361,265 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Lb" = ( -/obj/structure/closet/emcloset, -/obj/effect/turf_decal/tile/blue/half/contrasted, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"Ld" = ( -/obj/effect/mapping_helpers/broken_floor, +"Jq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) -"Lo" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Lp" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"LI" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, +"Jt" = ( +/obj/machinery/firealarm/directional/east, /obj/structure/alien/weeds, -/turf/open/floor/iron{ +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple, +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"LJ" = ( -/obj/structure/table/wood, -/obj/item/lighter, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/carpet{ +"JD" = ( +/obj/item/cigbutt, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"LQ" = ( -/obj/structure/table, -/obj/machinery/computer/security/telescreen/entertainment/directional/east, -/obj/item/plate, -/obj/item/cigbutt, -/obj/effect/turf_decal/tile/bar/opposingcorners, +"JF" = ( /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"LY" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 +"JH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 }, -/obj/effect/mapping_helpers/burnt_floor, +/area/awaymission/moonoutpost19/syndicate) +"JS" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/item/stack/rods, +/obj/item/shard, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"Kk" = ( +/obj/structure/chair/stool/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ - dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Mb" = ( -/obj/effect/decal/cleanable/dirt, +"Km" = ( +/obj/item/newspaper, /obj/structure/cable, /turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Me" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/highsecurity{ - name = "Gateway" +"Kn" = ( +/obj/structure/chair{ + dir = 8 }, -/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, -/obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"Mg" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - locked = 0; - req_access = list("away_maintenance") +/area/awaymission/moonoutpost19/arrivals) +"Kp" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, -/obj/item/clothing/under/suit/burgundy, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"Mm" = ( +"Kq" = ( /obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/airalarm/directional/north{ + pixel_y = 23; + req_access = list("syndicate") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /turf/open/floor/plating{ heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/syndicate) +"Ku" = ( +/obj/structure/alien/weeds/node, +/mob/living/basic/alien, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"Kw" = ( +/obj/structure/chair, +/turf/open/floor/iron/cafeteria{ + dir = 5 + }, /area/awaymission/moonoutpost19/research) -"Mp" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/small/directional/west, -/obj/item/trash/cheesie, -/obj/item/trash/can, -/obj/effect/turf_decal/tile/bar/opposingcorners, +"Kz" = ( +/obj/structure/closet/secure_closet{ + icon_state = "science"; + locked = 0; + name = "scientist's locker"; + req_access = list("away_maintenance") + }, +/obj/item/clothing/suit/toggle/labcoat, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Ms" = ( -/obj/structure/cable, -/obj/effect/turf_decal/tile/neutral/fourcorners, -/turf/open/floor/iron/dark{ +/area/awaymission/moonoutpost19/research) +"KK" = ( +/obj/structure/table, +/turf/open/floor/iron/white/side{ + dir = 8; heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/research) +"KN" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock{ + density = 0; + icon_state = "open"; + id_tag = "awaydorm4"; + name = "Dorm 1"; + opacity = 0 + }, +/obj/effect/mapping_helpers/atom_injector/obj_flag{ + inject_flags = 1; + target_type = /obj/machinery/door/airlock + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, /area/awaymission/moonoutpost19/syndicate) -"Mt" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +"KW" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/tile/blue/opposingcorners{ + dir = 1 }, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/turf/open/floor/iron/cafeteria{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/research) -"Mw" = ( -/obj/machinery/gateway/away{ - calibrated = 0 +/area/awaymission/moonoutpost19/arrivals) +"KZ" = ( +/obj/machinery/door/airlock{ + id_tag = "awaydorm5"; + name = "Dorm 2" }, -/obj/structure/cable, -/turf/open/floor/iron/dark{ +/turf/open/floor/wood{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"Mx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red/anticorner/contrasted{ - dir = 8 +"Ld" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/button/door{ + id = "Awaybiohazard"; + name = "Biohazard Shutter Control"; + pixel_y = 8; + req_access = list("away_maintenance") }, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +/obj/machinery/button/door{ + id = "AwayRD"; + name = "Privacy Shutter Control"; + pixel_y = -2; + req_access = list("away_maintenance") }, -/area/awaymission/moonoutpost19/syndicate) -"MI" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/turf/open/floor/iron/cafeteria{ + dir = 5 }, -/area/awaymission/moonoutpost19/arrivals) -"MJ" = ( +/area/awaymission/moonoutpost19/research) +"Lh" = ( +/obj/structure/window/reinforced/spawner/directional/north, /obj/structure/table, -/obj/item/trash/raisins, -/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/item/storage/medkit/regular, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"MM" = ( -/obj/structure/grille, +/area/awaymission/moonoutpost19/syndicate) +"Lq" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 + }, /turf/open/floor/plating{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"MN" = ( -/obj/structure/sign/poster/official/nanotrasen_logo/directional/south, -/obj/effect/turf_decal/tile/blue{ +/area/awaymission/moonoutpost19/main) +"Lr" = ( +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 8 }, -/turf/open/floor/iron/white/corner{ - heat_capacity = 1e+006 +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/arrivals) -"MZ" = ( +/area/awaymission/moonoutpost19/syndicate) +"Lv" = ( /obj/structure/alien/weeds, -/obj/structure/bed/nest, +/obj/structure/alien/egg/burst, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"Na" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 9 - }, +"LF" = ( +/obj/machinery/space_heater, +/obj/machinery/light/small/directional/north, +/obj/structure/sign/poster/official/build/directional/north, +/obj/structure/cable, /turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/main) -"Nc" = ( -/obj/structure/table, -/obj/item/clothing/gloves/latex, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/suit/apron/surgical, -/obj/structure/alien/weeds, -/turf/open/floor/iron/white/side{ - dir = 1; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Ne" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/obj/item/radio/off, -/turf/open/floor/plating{ +"LG" = ( +/obj/structure/sink/directional/west, +/obj/structure/mirror/directional/east{ + icon_state = "mirror_broke" + }, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"Nh" = ( -/obj/machinery/door/window{ - dir = 1; - name = "Gateway Access"; - req_access = list("syndicate") +/area/awaymission/moonoutpost19/arrivals) +"LI" = ( +/obj/machinery/airalarm/directional/west{ + req_access = null }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 }, -/obj/structure/cable, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"LM" = ( +/obj/structure/sign/warning/vacuum/directional/west{ + desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; + name = "\improper HOSTILE ATMOSPHERE AHEAD" + }, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"Ni" = ( -/obj/structure/cable, +/area/awaymission/moonoutpost19/arrivals) +"LR" = ( /obj/effect/turf_decal/tile/red/half/contrasted{ dir = 4 }, @@ -4704,138 +4629,164 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Nk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 +"LY" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 4 }, -/turf/open/floor/iron/dark{ - heat_capacity = 1e+006 +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 }, -/area/awaymission/moonoutpost19/syndicate) -"Nl" = ( -/turf/open/floor/iron/showroomfloor{ +/turf/open/floor/plating{ heat_capacity = 1e+006; - temperature = 273.15 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) +"LZ" = ( +/obj/machinery/light/small/directional/west, +/obj/structure/table, +/obj/item/storage/box, +/obj/machinery/airalarm/directional/west{ + req_access = null + }, +/obj/effect/mapping_helpers/airalarm/unlocked, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Nr" = ( -/obj/machinery/door/poddoor/preopen{ - desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; - id = "Awaylab"; - name = "Acid-Proof Containment Chamber Blast Door" +"Me" = ( +/obj/item/radio/off, +/obj/item/screwdriver{ + pixel_y = 10 }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating{ +/obj/structure/sign/poster/official/safety_report/directional/north, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 + }, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"Nt" = ( -/obj/structure/closet/crate/bin, -/obj/item/clothing/gloves/latex, -/obj/item/trash/chips, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/broken/directional/north, -/turf/open/floor/iron/white/side{ +/area/awaymission/moonoutpost19/research) +"Mj" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/closet/l3closet/scientist, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"NE" = ( -/obj/effect/turf_decal/tile/red/anticorner/contrasted, +"Mn" = ( +/obj/structure/cable, +/obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"NH" = ( -/obj/structure/closet/secure_closet/personal/cabinet{ - req_access = list("syndicate") +"Mt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 4 }, -/obj/item/ammo_box/magazine/m9mm, -/obj/item/ammo_box/magazine/m9mm, -/obj/item/suppressor, -/turf/open/floor/wood{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"NJ" = ( -/obj/effect/decal/cleanable/xenoblood, -/obj/effect/decal/cleanable/xenoblood/xgibs, +"Mz" = ( +/obj/structure/table, +/obj/item/storage/box/donkpockets, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"NM" = ( -/obj/machinery/light/small/directional/north, -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 10 - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) -"NQ" = ( -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/syndicate) +"MA" = ( +/obj/structure/chair/stool/directional/west, +/obj/machinery/computer/security/telescreen/entertainment/directional/north, +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"NW" = ( -/obj/structure/table, -/obj/item/storage/box/gloves, -/turf/open/floor/iron/white/corner{ - dir = 8; +"MC" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 5; + icon_state = "ltrails_1" + }, +/obj/structure/cable, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/turf/open/floor/iron/white{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Oa" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/obj/item/stack/rods, -/obj/item/shard, -/obj/structure/alien/weeds, +"MI" = ( +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/syndicate) -"Od" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/tile/red/half/contrasted{ +/area/awaymission/moonoutpost19/arrivals) +"ML" = ( +/obj/structure/bed{ dir = 4 }, -/turf/open/floor/iron{ +/obj/item/bedsheet/syndie{ + dir = 4 + }, +/obj/machinery/button/door/directional/north{ + id = "awaydorm4"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/wood{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) -"Oe" = ( -/obj/structure/chair{ +"MN" = ( +/obj/machinery/vending/cola, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/arrivals) +"MP" = ( +/obj/structure/filingcabinet, +/obj/item/paper/fluff/awaymissions/moonoutpost19/log/kenneth, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Og" = ( -/obj/structure/alien/weeds/node, +/area/awaymission/moonoutpost19/research) +"MW" = ( +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"Nf" = ( +/obj/item/trash/candy, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/hive) -"Oi" = ( -/obj/machinery/firealarm/directional/east, +/area/awaymission/moonoutpost19/main) +"Nl" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/iron/white, +/area/awaymission/moonoutpost19/research) +"Nw" = ( +/obj/structure/sign/warning/biohazard/directional/east, /obj/structure/alien/weeds, /obj/structure/cable, /obj/effect/turf_decal/tile/purple, @@ -4843,214 +4794,129 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Om" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced/spawner/directional/west, -/obj/machinery/button/door{ - id = "Awaybiohazard"; - name = "Biohazard Shutter Control"; - pixel_y = 8; - req_access = list("away_maintenance") - }, -/obj/machinery/button/door{ - id = "AwayRD"; - name = "Privacy Shutter Control"; - pixel_y = -2; - req_access = list("away_maintenance") - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) -"Oo" = ( -/obj/machinery/power/terminal{ +"NK" = ( +/obj/machinery/atmospherics/components/binary/pump{ dir = 4 }, -/obj/machinery/airalarm/directional/north{ - req_access = null - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/structure/cable, -/turf/open/floor/plating{ +/turf/open/floor/iron/white/side{ + dir = 4; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Op" = ( -/obj/structure/toilet{ - dir = 1 - }, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/syndicate) -"Or" = ( +"NQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/purple/half/contrasted{ - dir = 1 - }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Ox" = ( -/obj/structure/urinal/directional/north, -/turf/open/floor/iron/freezer{ +/area/awaymission/moonoutpost19/research) +"NV" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/decal/cleanable/dirt, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Oy" = ( -/obj/structure/chair/stool/directional/west, +"Oh" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/obj/effect/turf_decal/tile/neutral/fourcorners, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"OA" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/glass{ - amount = 10 - }, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/bot{ - dir = 1 - }, +"Oj" = ( +/obj/effect/decal/cleanable/blood/splatter, /turf/open/floor/iron{ - dir = 1; - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"OF" = ( -/obj/structure/window/reinforced/spawner/directional/north, +/area/awaymission/moonoutpost19/research) +"Ok" = ( /obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/personal, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/computer/security/telescreen/entertainment/directional/west, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 }, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"OL" = ( -/obj/machinery/washing_machine, -/obj/effect/turf_decal/tile/blue/opposingcorners{ - dir = 1 - }, -/turf/open/floor/iron/cafeteria{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/arrivals) -"ON" = ( +/area/awaymission/moonoutpost19/research) +"On" = ( /obj/machinery/shower/directional/west, /turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"OO" = ( -/obj/structure/sign/poster/contraband/syndicate_recruitment/directional/north, -/obj/effect/turf_decal/loading_area{ +"Oq" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 6; + icon_state = "ltrails_1" + }, +/obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/structure/alien/weeds, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"OQ" = ( -/obj/machinery/door/firedoor/closed, -/obj/structure/cable, +/area/awaymission/moonoutpost19/research) +"Oy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"OV" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/syndicate) +"OC" = ( +/obj/item/kirbyplants{ + desc = "A plastic potted plant."; + pixel_y = 3 + }, +/obj/effect/turf_decal/tile/neutral/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/main) -"OZ" = ( -/obj/structure/chair/stool/directional/west, -/obj/machinery/computer/security/telescreen/entertainment/directional/north, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 - }, /area/awaymission/moonoutpost19/arrivals) -"Pe" = ( -/obj/structure/rack, -/obj/item/clothing/suit/space/syndicate/orange, -/obj/item/clothing/mask/gas, -/obj/item/pickaxe/drill, -/obj/item/clothing/head/helmet/space/syndicate/orange, -/obj/effect/turf_decal/stripes/line{ - dir = 5 +"OL" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" }, -/turf/open/floor/plating{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/syndicate) -"Ph" = ( -/obj/structure/chair/stool/directional/west, +/area/awaymission/moonoutpost19/arrivals) +"ON" = ( +/obj/structure/table, +/obj/item/plate, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"Pi" = ( -/obj/structure/table, -/obj/item/computer_disk/ordnance, -/obj/item/computer_disk/ordnance, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) -"Pj" = ( -/obj/structure/closet/secure_closet{ - icon_state = "science"; - locked = 0; - name = "scientist's locker"; - req_access = list("away_maintenance") - }, -/obj/item/clothing/suit/toggle/labcoat, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"OX" = ( +/obj/structure/chair/stool/directional/south, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Pk" = ( -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron{ - pixel_x = -7; - pixel_y = -4 +"Pq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/open/misc/asteroid{ +/turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/main) -"Pr" = ( -/obj/structure/table, -/obj/item/retractor, -/obj/item/hemostat, -/obj/structure/alien/weeds, -/turf/open/floor/iron/white, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/syndicate) "Pv" = ( /obj/structure/alien/weeds, /mob/living/basic/alien/sentinel, @@ -5059,216 +4925,153 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"PA" = ( -/obj/structure/sign/warning/biohazard/directional/east, -/obj/structure/alien/weeds, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/white{ +"PJ" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"PB" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_1" - }, -/obj/item/mining_scanner, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"PC" = ( -/obj/structure/sign/warning/biohazard/directional/north, -/obj/structure/alien/weeds/node, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/syndicate) +"PQ" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/syndicate) -"PD" = ( -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"PE" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"PJ" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" - }, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, /area/awaymission/moonoutpost19/arrivals) -"PL" = ( -/obj/structure/closet/l3closet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/white/side{ - dir = 1; +"Qa" = ( +/obj/machinery/door/poddoor{ + id = "AwayRD"; + layer = 2.9; + name = "Privacy Shutter" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"PN" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/airalarm/directional/north{ - pixel_y = 23; +"Qe" = ( +/obj/machinery/light/directional/east, +/obj/machinery/airalarm/directional/east{ + pixel_x = 23; req_access = list("syndicate") }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plating{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"PR" = ( -/obj/effect/decal/cleanable/generic, -/obj/effect/decal/remains/human{ - desc = "They look like human remains. The skeleton is curled up in fetal position with the hands placed near the throat." - }, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/iron{ - dir = 8; - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 +"Qh" = ( +/obj/machinery/button/door/directional/west{ + id = "awaydorm1"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 }, -/area/awaymission/moonoutpost19/arrivals) -"PV" = ( -/obj/machinery/space_heater, -/obj/machinery/light/small/directional/north, -/obj/structure/sign/poster/official/build/directional/north, -/obj/structure/cable, -/turf/open/floor/plating{ +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"PZ" = ( -/obj/structure/chair/comfy/black, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/arrivals) +"Qj" = ( +/obj/machinery/light/small/directional/east, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/arrivals) -"Qa" = ( +"Qk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Qg" = ( -/obj/structure/sink/directional/west, -/obj/structure/urinal/directional/north, -/obj/structure/mirror/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/freezer{ +"Qq" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Qh" = ( -/obj/structure/chair/office/light{ - dir = 1; - pixel_y = 3 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) -"Qu" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/iron/white, -/area/awaymission/moonoutpost19/research) "Qx" = ( /obj/effect/landmark/awaystart, /turf/open/floor/mineral/titanium/blue, /area/awaymission/moonoutpost19/arrivals) +"Qy" = ( +/obj/machinery/door/airlock{ + id_tag = "awaydorm1"; + name = "Dorm 1" + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) "Qz" = ( -/obj/machinery/mineral/unloading_machine{ - dir = 1; - icon_state = "unloader-corner"; - input_dir = 4; - output_dir = 8 +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 6; + icon_state = "ltrails_1" }, -/obj/structure/alien/weeds, -/turf/open/floor/plating{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "QA" = ( -/obj/machinery/light/broken/directional/east, -/obj/machinery/airalarm/directional/east{ - req_access = null +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/item/reagent_containers/cup/rag{ + pixel_y = 5 }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/white{ +/obj/machinery/door/poddoor/shutters{ + id = "awaykitchen"; + name = "Serving Hatch" + }, +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/arrivals) "QC" = ( -/obj/machinery/power/port_gen/pacman{ - name = "P.A.C.M.A.N.-type portable generator" +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/shutters{ + id = "awaykitchen"; + name = "Serving Hatch" }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/plating{ +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"QO" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/egg/burst, -/obj/effect/decal/cleanable/blood, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +/area/awaymission/moonoutpost19/arrivals) +"QJ" = ( +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/hive) -"QP" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/obj/item/shard, -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_2" +/area/awaymission/moonoutpost19/syndicate) +"QO" = ( +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/remains/human{ + desc = "They look like human remains. The skeleton is curled up in fetal position with the hands placed near the throat." }, /obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ +/turf/open/floor/iron{ + dir = 8; heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"QU" = ( -/obj/structure/alien/weeds, -/obj/effect/turf_decal/tile/red/anticorner/contrasted, +"QP" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "QW" = ( /obj/structure/table, /obj/item/folder/red, @@ -5277,16 +5080,6 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"QY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, -/area/awaymission/moonoutpost19/syndicate) "QZ" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -5297,46 +5090,39 @@ temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Rc" = ( -/obj/machinery/power/apc/worn_out, -/obj/effect/mapping_helpers/apc/full_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +"Ra" = ( +/obj/structure/disposalpipe/segment{ + desc = "An underfloor disposal pipe. This one has been applied with an acid-proof coating."; + dir = 4; + name = "Acid-Proof disposal pipe" }, -/area/awaymission/moonoutpost19/arrivals) -"Rd" = ( -/obj/structure/closet/secure_closet{ - locked = 0; - name = "kitchen Cabinet"; - req_access = list("away_maintenance") +/obj/machinery/door/poddoor/preopen{ + desc = "A heavy duty blast door that opens mechanically. This one has been applied with an acid-proof coating."; + id = "Awaylab"; + name = "Acid-Proof Containment Chamber Blast Door" }, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/flour, -/obj/item/reagent_containers/condiment/sugar, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron/showroomfloor{ - heat_capacity = 1e+006; - temperature = 273.15 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/research) "Re" = ( -/obj/structure/table, -/obj/item/kitchen/rollingpin, -/obj/item/knife/kitchen, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/arrivals) -"Rh" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/bed/nest, +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/gun/ballistic/automatic/pistol, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/hive) +"Rk" = ( +/obj/structure/table/optable, +/obj/structure/alien/weeds, +/turf/open/floor/iron/white/side{ + dir = 1; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) @@ -5346,74 +5132,100 @@ }, /turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/arrivals) -"Rp" = ( -/obj/structure/chair{ - dir = 8 +"Rn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/syndicate) +"Rr" = ( +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Rs" = ( -/obj/structure/window/reinforced/spawner/directional/north, +/area/awaymission/moonoutpost19/syndicate) +"Rv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/syndicate) +"RH" = ( /obj/structure/table, -/obj/machinery/recharger{ - pixel_y = 4 +/obj/machinery/microwave{ + pixel_x = -3; + pixel_y = 6 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/syndicate) -"RI" = ( +"RK" = ( /obj/structure/closet/secure_closet/personal/cabinet{ - locked = 0; - req_access = list("away_maintenance") + req_access = list("syndicate") }, -/obj/item/clothing/under/suit/navy, -/turf/open/floor/carpet{ - heat_capacity = 1e+006 +/obj/item/ammo_box/magazine/m9mm, +/obj/item/ammo_box/magazine/m9mm, +/obj/item/suppressor, +/turf/open/floor/wood{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/arrivals) -"RP" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/iron{ - amount = 12 +/area/awaymission/moonoutpost19/syndicate) +"RZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/research) +"Sb" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/alien/weeds, -/obj/effect/turf_decal/bot{ - dir = 1 +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 8 }, /turf/open/floor/iron{ - dir = 1; heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"RQ" = ( -/obj/structure/closet/l3closet, -/obj/effect/turf_decal/tile/red/half/contrasted, +"Sc" = ( +/obj/structure/table, +/obj/item/book/manual/wiki/detective, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) +"Sj" = ( +/obj/machinery/door/airlock{ + name = "Private Restroom" + }, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) "So" = ( -/obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/obj/effect/turf_decal/tile/purple/half/contrasted{ + dir = 1 }, -/area/awaymission/moonoutpost19/arrivals) -"Ss" = ( /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "Sw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -5437,42 +5249,107 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"SD" = ( -/obj/item/soap/nanotrasen, +"Sy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/anticorner/contrasted{ + dir = 8 + }, +/turf/open/floor/iron/dark{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"SC" = ( +/obj/structure/table, +/obj/item/mmi, +/obj/item/mmi, +/obj/item/mmi, +/obj/structure/alien/weeds, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"SF" = ( +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/syndicate) +"SJ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, /obj/machinery/light/small/directional/west, -/turf/open/floor/iron/freezer{ +/obj/item/stock_parts/cell/high, +/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) +/area/awaymission/moonoutpost19/syndicate) "SK" = ( -/obj/structure/closet/crate{ - desc = "It's a storage unit for kitchen clothes and equipment."; - name = "Kitchen Crate" +/obj/structure/sign/warning/vacuum/directional/north{ + desc = "A warning sign which reads 'HOSTILE ATMOSPHERE AHEAD'"; + name = "\improper HOSTILE ATMOSPHERE AHEAD" }, -/obj/item/storage/box/mousetraps, -/obj/item/clothing/under/suit/waiter, -/turf/open/floor/iron/showroomfloor{ - heat_capacity = 1e+006; - temperature = 273.15 +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"SM" = ( -/obj/effect/turf_decal/sand/plating, -/obj/effect/turf_decal/stripes/asteroid/line{ - dir = 4 +"SL" = ( +/obj/machinery/power/port_gen/pacman{ + name = "P.A.C.M.A.N.-type portable generator" }, +/obj/structure/cable, /turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"SP" = ( +/obj/machinery/light/broken/directional/south, +/obj/structure/alien/weeds, +/obj/machinery/camera/directional/south{ + c_tag = "Xenobiology Containment South"; + network = list("mo19x") + }, +/turf/open/floor/engine, +/area/awaymission/moonoutpost19/research) +"SR" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/clothing/mask/facehugger/impregnated, +/obj/item/clothing/under/rank/security/officer, +/obj/item/clothing/suit/armor/vest, +/obj/item/melee/baton/security/loaded, +/obj/item/clothing/head/helmet, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/main) -"Tb" = ( -/obj/machinery/door/airlock/external/ruin, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/area/awaymission/moonoutpost19/hive) +"SW" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/arrivals) +"SY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"Tg" = ( +/obj/structure/table, +/obj/item/trash/raisins, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) @@ -5484,18 +5361,17 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Tl" = ( -/obj/item/stack/ore/iron{ - pixel_x = -7; - pixel_y = -4 - }, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"Tn" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Kitchen" }, -/area/awaymission/moonoutpost19/main) -"Tp" = ( +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, +/turf/open/floor/iron/dark, +/area/awaymission/moonoutpost19/arrivals) +"Ts" = ( /obj/machinery/power/smes{ + charge = 1.5e+006; input_level = 10000; inputting = 0; output_level = 15000 @@ -5504,56 +5380,48 @@ /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"Tq" = ( -/obj/machinery/firealarm/directional/east, -/obj/effect/mapping_helpers/broken_floor, +/area/awaymission/moonoutpost19/research) +"Tx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/iron{ - dir = 8; + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"TE" = ( +/obj/machinery/computer/operating{ + dir = 8 + }, +/obj/structure/alien/weeds, +/turf/open/floor/iron/white/side{ + dir = 1; + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/research) +"TH" = ( +/obj/structure/cable, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) -"Tt" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/iron/dark, -/area/awaymission/moonoutpost19/arrivals) -"Ty" = ( -/obj/effect/decal/cleanable/dirt, +"TL" = ( +/obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"TG" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/turf/open/floor/iron/cafeteria{ - dir = 5 - }, -/area/awaymission/moonoutpost19/research) -"TK" = ( -/obj/structure/toilet{ - dir = 4 - }, +"TR" = ( /obj/machinery/light/small/directional/north, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/arrivals) -"TL" = ( +/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"TX" = ( -/obj/machinery/vending/cola, -/turf/open/floor/iron/dark, /area/awaymission/moonoutpost19/arrivals) "Ud" = ( /obj/effect/turf_decal/tile/neutral, @@ -5564,14 +5432,14 @@ }, /area/awaymission/moonoutpost19/arrivals) "Uf" = ( -/obj/machinery/computer/monitor{ - dir = 1 - }, -/obj/structure/cable, +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line, /turf/open/floor/plating{ - heat_capacity = 1e+006 + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, -/area/awaymission/moonoutpost19/research) +/area/awaymission/moonoutpost19/main) "Uh" = ( /obj/item/stack/rods, /obj/item/shard{ @@ -5587,15 +5455,6 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"Un" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/obj/item/stack/rods, -/obj/item/shard, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) "Us" = ( /obj/machinery/door/airlock/external/ruin, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -5612,241 +5471,247 @@ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Uz" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4 +"Uu" = ( +/obj/machinery/gateway/away{ + calibrated = 0 }, -/turf/open/floor/iron/white/side{ - dir = 4; +/obj/structure/cable, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"UC" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/area/awaymission/moonoutpost19/syndicate) +"Uz" = ( +/obj/structure/bed{ + dir = 4 }, -/area/awaymission/moonoutpost19/research) -"UH" = ( -/obj/machinery/power/port_gen/pacman/super{ - name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator" +/obj/item/bedsheet{ + dir = 4 }, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ +/turf/open/floor/carpet{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"US" = ( -/obj/machinery/light/small/directional/south, +/area/awaymission/moonoutpost19/arrivals) +"UA" = ( +/obj/structure/table, +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/obj/item/plate, +/obj/item/cigbutt, /obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"UU" = ( -/obj/machinery/airalarm/directional/north{ - req_access = list("syndicate") - }, -/obj/effect/mapping_helpers/airalarm/unlocked, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/iron{ - dir = 8; - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 - }, /area/awaymission/moonoutpost19/syndicate) -"UW" = ( +"UM" = ( /obj/machinery/door/airlock{ - id_tag = "awaydorm5"; - name = "Dorm 2" + name = "Unit 2" }, -/turf/open/floor/wood{ +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"UY" = ( -/obj/item/newspaper, -/obj/structure/cable, +/area/awaymission/moonoutpost19/arrivals) +"UX" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/mapping_helpers/airlock/access/all/away/maintenance, /turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"UZ" = ( -/obj/structure/alien/weeds, -/obj/structure/cable, -/obj/effect/turf_decal/tile/purple, -/turf/open/floor/iron/white{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"Vj" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 - }, /area/awaymission/moonoutpost19/arrivals) -"Vn" = ( -/obj/machinery/door/firedoor, +"Vb" = ( +/obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, +/obj/structure/sign/poster/contraband/space_cube/directional/west, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"Vo" = ( -/obj/structure/grille/broken, -/obj/item/stack/rods, -/obj/item/stack/rods, -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, -/area/awaymission/moonoutpost19/research) -"Vq" = ( -/obj/item/stack/ore/iron{ - pixel_x = -3; - pixel_y = 9 - }, +/area/awaymission/moonoutpost19/syndicate) +"Vh" = ( +/obj/structure/alien/weeds, +/obj/structure/bed/nest, /turf/open/misc/asteroid{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, -/area/awaymission/moonoutpost19/main) +/area/awaymission/moonoutpost19/hive) +"Vi" = ( +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) "Vr" = ( /obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Vt" = ( +"Vu" = ( /obj/structure/toilet{ - dir = 4 + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/north, /turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"Vy" = ( -/obj/structure/table, -/obj/item/storage/medkit/fire, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/iron/white/side{ - dir = 8; +/area/awaymission/moonoutpost19/research) +"VC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"VI" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/highsecurity{ + name = "Gateway" + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/structure/cable, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"VD" = ( -/obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ +/area/awaymission/moonoutpost19/syndicate) +"VK" = ( +/obj/effect/turf_decal/sand/plating, +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 6 + }, +/turf/open/floor/plating{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 + }, +/area/awaymission/moonoutpost19/main) +"VQ" = ( +/obj/machinery/light/small/directional/west, +/obj/machinery/computer/security{ + desc = "Used to access the various cameras on the outpost."; + dir = 4; + network = list("mo19r","mo19") + }, +/obj/machinery/button/door/directional/west{ + id = "Awaybiohazard"; + name = "Biohazard Shutter Control" + }, +/obj/effect/mapping_helpers/airlock/access/all/admin/general, +/obj/effect/turf_decal/tile/red/half/contrasted{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"VF" = ( -/obj/machinery/light/small/directional/south, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/research) -"VS" = ( -/obj/machinery/light/small/directional/north, +"VR" = ( +/obj/machinery/shower/directional/south, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/iron{ +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"VT" = ( -/obj/machinery/power/apc/worn_out, -/obj/effect/mapping_helpers/apc/full_charge, -/obj/effect/mapping_helpers/apc/unlocked, -/obj/effect/mapping_helpers/apc/cell_10k, -/obj/structure/cable, -/obj/effect/turf_decal/tile/red/half/contrasted, -/turf/open/floor/iron{ +"VU" = ( +/obj/structure/sink/kitchen/directional/south{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "old sink" + }, +/turf/open/floor/iron/showroomfloor{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + temperature = 273.15 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "Wd" = ( -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating{ +/obj/structure/table, +/obj/item/storage/box/gloves, +/turf/open/floor/iron/white/corner{ + dir = 8; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Wp" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/iron/dark{ +"Wj" = ( +/obj/machinery/light/small/directional/south, +/obj/structure/closet/toolcloset, +/obj/item/clothing/gloves/color/yellow, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/research) "Wq" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "awaysyndie"; - layer = 3.1; - name = "mining conveyor" +/obj/structure/closet/secure_closet/freezer{ + locked = 0; + name = "refrigerator"; + req_access = list("away_maintenance") }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/storage/fancy/egg_box, +/turf/open/floor/iron/showroomfloor{ + heat_capacity = 1e+006; + temperature = 273.15 + }, +/area/awaymission/moonoutpost19/arrivals) +"Wt" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_2" + }, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, +/area/awaymission/moonoutpost19/main) +"WB" = ( +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/syndicate) -"Ws" = ( -/obj/machinery/newscaster/directional/south, -/turf/open/floor/iron/cafeteria{ - dir = 5 +"WH" = ( +/obj/structure/window/reinforced/spawner/directional/north, +/obj/structure/table, +/obj/machinery/recharger{ + pixel_y = 4 }, -/area/awaymission/moonoutpost19/research) -"Wt" = ( -/obj/machinery/firealarm/directional/east, /obj/effect/decal/cleanable/dirt, -/obj/machinery/camera/directional/east{ - c_tag = "Bar"; - network = list("mo19") - }, -/obj/effect/turf_decal/tile/bar/opposingcorners, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/arrivals) -"WE" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ +/area/awaymission/moonoutpost19/syndicate) +"WI" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/tile/blue/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"WH" = ( +/area/awaymission/moonoutpost19/arrivals) +"WK" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/firedoor/closed, -/turf/open/floor/iron{ +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/iron/white/corner{ + dir = 1; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"WM" = ( -/obj/machinery/door/airlock{ - name = "Unisex Showers" +"WN" = ( +/obj/structure/table, +/obj/item/computer_disk/ordnance, +/obj/item/computer_disk/ordnance, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, -/turf/open/floor/iron/freezer{ - heat_capacity = 1e+006 +/area/awaymission/moonoutpost19/research) +"WO" = ( +/obj/machinery/light/small/directional/north, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/iron{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; + temperature = 251 }, /area/awaymission/moonoutpost19/arrivals) "WP" = ( @@ -5862,73 +5727,75 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/hive) -"WW" = ( -/obj/effect/decal/cleanable/blood/tracks{ - desc = "Your instincts say you shouldn't be following these."; - dir = 8; - icon_state = "ltrails_2" - }, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" - }, -/area/awaymission/moonoutpost19/main) -"WX" = ( -/obj/machinery/door/airlock{ - name = "Private Restroom" +"WR" = ( +/obj/machinery/light/small/broken/directional/west, +/obj/machinery/camera/directional/west{ + c_tag = "Xenobiology"; + network = list("mo19","mo19r") }, -/turf/open/floor/iron/freezer{ +/turf/open/floor/iron/white/side{ + dir = 6; heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"Xq" = ( -/obj/structure/window/reinforced/spawner/directional/south, -/obj/structure/closet/secure_closet{ - icon_state = "science"; - name = "scientist's locker"; - req_access = list("away_maintenance") +"Xm" = ( +/obj/structure/chair/comfy/black{ + dir = 8 }, -/obj/item/clothing/suit/toggle/labcoat, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/mask/gas, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"Xv" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/generic, -/obj/structure/window/spawner/directional/south, -/turf/open/floor/plating{ - heat_capacity = 1e+006 - }, /area/awaymission/moonoutpost19/arrivals) -"Xz" = ( -/obj/structure/table, -/turf/open/floor/iron/white/corner{ - dir = 1; +"Xo" = ( +/obj/structure/chair, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"XG" = ( -/obj/structure/alien/weeds/node, +/area/awaymission/moonoutpost19/arrivals) +"Xq" = ( +/obj/structure/alien/weeds, /obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 8 }, -/turf/open/floor/iron/white{ +/obj/structure/cable, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"XH" = ( +"Xv" = ( /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ +/obj/effect/turf_decal/tile/red/half/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/research) -"XJ" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ +/area/awaymission/moonoutpost19/syndicate) +"Xx" = ( +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" + }, +/obj/item/mining_scanner, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) +"XB" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/external/ruin{ + density = 0; + icon_state = "open"; + opacity = 0 + }, +/obj/effect/mapping_helpers/atom_injector/obj_flag{ + inject_flags = 1; + target_type = /obj/machinery/door/airlock + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate/general, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, /obj/effect/turf_decal/sand/plating, @@ -5937,112 +5804,181 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/main) -"XX" = ( +/area/awaymission/moonoutpost19/syndicate) +"XF" = ( +/obj/machinery/firealarm/directional/north, /obj/structure/table, -/obj/item/mmi, -/obj/item/mmi, -/obj/item/mmi, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, /obj/structure/alien/weeds, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/turf/open/floor/iron{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron/white{ +/area/awaymission/moonoutpost19/research) +"XG" = ( +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"XZ" = ( +"XP" = ( +/obj/structure/alien/weeds/node, +/obj/structure/alien/resin/wall, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"XQ" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/syndie{ + dir = 4 + }, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/iron{ +/turf/open/floor/wood{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"XT" = ( +/obj/structure/chair/stool/directional/west, +/turf/open/floor/carpet{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"Yf" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/resin/wall, +/turf/open/misc/asteroid{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; - temperature = 251 + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"Yg" = ( +/obj/item/stack/ore/iron{ + pixel_x = 7; + pixel_y = -6 + }, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/main) +"Yi" = ( +/obj/structure/sink/directional/west, +/obj/structure/urinal/directional/north, +/obj/structure/mirror/directional/east, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/iron/freezer{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"Yk" = ( -/obj/structure/alien/weeds/node, -/obj/effect/turf_decal/stripes/line{ +"Yj" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/computer/security/telescreen/entertainment/directional/south, +/obj/machinery/camera/directional/south{ + c_tag = "Arrivals North"; + network = list("mo19") + }, +/obj/effect/turf_decal/tile/blue{ dir = 8 }, +/turf/open/floor/iron/white/corner{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"Yu" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, /area/awaymission/moonoutpost19/syndicate) -"Yt" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/machinery/light/small/directional/west, -/obj/item/stock_parts/cell/high, -/obj/item/paper/fluff/awaymissions/moonoutpost19/engineering, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +"Yz" = ( +/obj/item/stack/rods, +/obj/item/shard{ + icon_state = "small" }, -/obj/structure/cable, -/turf/open/floor/plating{ +/obj/effect/decal/cleanable/blood/tracks{ + desc = "Your instincts say you shouldn't be following these."; + dir = 8; + icon_state = "ltrails_1" + }, +/obj/effect/turf_decal/tile/red/half/contrasted{ + dir = 4 + }, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"Yx" = ( -/obj/structure/table/optable, +/area/awaymission/moonoutpost19/research) +"YA" = ( /obj/structure/alien/weeds, -/turf/open/floor/iron/white/side{ - dir = 1; +/obj/structure/alien/egg/burst, +/obj/effect/decal/cleanable/blood/gibs, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"YB" = ( +/obj/machinery/portable_atmospherics/scrubber, +/turf/open/floor/plating{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"YE" = ( -/obj/item/cigbutt, +"YC" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, +/obj/effect/turf_decal/tile/bar/opposingcorners, /turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) -"YH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plating{ +"YD" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen, +/obj/effect/turf_decal/tile/red/anticorner/contrasted, +/turf/open/floor/iron{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"YM" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/reagent_containers/condiment/peppermill{ - pixel_x = 3 - }, -/obj/item/reagent_containers/condiment/saltshaker{ - pixel_x = -3 - }, -/obj/machinery/door/poddoor/shutters{ - id = "awaykitchen"; - name = "Serving Hatch" +"YH" = ( +/obj/structure/toilet{ + dir = 4 }, -/turf/open/floor/carpet{ +/obj/machinery/light/small/directional/north, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/arrivals) "YW" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/general/visible{ - desc = "A one meter section of pipe. This one has been applied with an acid-proof coating."; - dir = 4; - name = "Acid-Proof Pipe" - }, -/obj/item/stack/rods, -/obj/item/stack/cable_coil{ - amount = 5 - }, -/obj/item/shard{ - icon_state = "small" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/space_heater, +/obj/effect/decal/cleanable/generic, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron{ +/area/awaymission/moonoutpost19/arrivals) +"YZ" = ( +/obj/structure/cable, +/turf/open/floor/iron/dark{ heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/syndicate) +"Za" = ( +/obj/structure/sink/directional/east, +/turf/open/floor/iron/white, /area/awaymission/moonoutpost19/research) "Zf" = ( /obj/effect/turf_decal/sand/plating, @@ -6055,45 +5991,73 @@ temperature = 251 }, /area/awaymission/moonoutpost19/main) -"Zp" = ( -/obj/structure/alien/weeds, -/obj/structure/alien/resin/wall, -/turf/open/misc/asteroid{ - heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" +"Zo" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/noticeboard/directional/east, +/obj/item/paper/fluff/awaymissions/moonoutpost19/welcome, +/obj/machinery/camera/directional/east{ + c_tag = "Arrivals South"; + network = list("mo19") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"Zr" = ( +/obj/machinery/power/terminal{ + dir = 4 }, -/area/awaymission/moonoutpost19/hive) -"Zx" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/machinery/light/small/broken/directional/north, /obj/machinery/airalarm/directional/north{ req_access = null }, /obj/effect/mapping_helpers/airalarm/unlocked, -/obj/item/paper/fluff/awaymissions/moonoutpost19/log/gerald, -/turf/open/floor/iron/cafeteria{ - dir = 5 +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) -"ZB" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 +"Zv" = ( +/turf/open/floor/iron/white{ + heat_capacity = 1e+006 }, -/turf/open/floor/iron/dark{ +/area/awaymission/moonoutpost19/research) +"Zy" = ( +/obj/machinery/shower/directional/south, +/turf/open/floor/iron/freezer{ heat_capacity = 1e+006 }, -/area/awaymission/moonoutpost19/syndicate) -"ZH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/area/awaymission/moonoutpost19/arrivals) +"Zz" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/tile/bar/opposingcorners, +/turf/open/floor/iron{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/arrivals) +"ZE" = ( +/obj/structure/closet/secure_closet/personal/cabinet{ + locked = 0; + req_access = list("away_maintenance") + }, +/obj/item/clothing/under/suit/navy, +/turf/open/floor/carpet{ + heat_capacity = 1e+006 }, +/area/awaymission/moonoutpost19/arrivals) +"ZK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/iron{ heat_capacity = 1e+006; initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251"; temperature = 251 }, -/area/awaymission/moonoutpost19/syndicate) +/area/awaymission/moonoutpost19/arrivals) "ZO" = ( /mob/living/basic/lizard{ name = "Newt" @@ -6103,25 +6067,61 @@ initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" }, /area/awaymission/moonoutpost19/main) -"ZS" = ( +"ZP" = ( /obj/structure/alien/weeds, +/obj/structure/bed/nest, +/obj/effect/decal/cleanable/blood/gibs, +/obj/item/tank/internals/oxygen, +/obj/item/clothing/suit/space/syndicate/orange, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/helmet/space/syndicate/orange, +/obj/item/clothing/mask/facehugger/impregnated, +/turf/open/misc/asteroid{ + heat_capacity = 1e+006; + initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + }, +/area/awaymission/moonoutpost19/hive) +"ZQ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/port_gen/pacman/super{ + name = "S.U.P.E.R.P.A.C.M.A.N.-type portable generator" + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable, +/turf/open/floor/plating{ + heat_capacity = 1e+006 + }, +/area/awaymission/moonoutpost19/syndicate) +"ZS" = ( +/obj/structure/closet/crate/bin, +/obj/item/clothing/gloves/latex, +/obj/item/trash/chips, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/broken/directional/north, /turf/open/floor/iron/white/side{ heat_capacity = 1e+006 }, /area/awaymission/moonoutpost19/research) "ZT" = ( -/obj/machinery/light/small/directional/west, -/turf/open/misc/asteroid{ +/obj/structure/closet/crate{ + desc = "It's a storage unit for kitchen clothes and equipment."; + name = "Kitchen Crate" + }, +/obj/item/storage/box/mousetraps, +/obj/item/clothing/under/suit/waiter, +/turf/open/floor/iron/showroomfloor{ heat_capacity = 1e+006; - initial_gas_mix = "co2=48.7;n2=13.2;o2=32.4;TEMP=251" + temperature = 273.15 }, /area/awaymission/moonoutpost19/arrivals) "ZW" = ( /obj/structure/table, -/obj/item/cigbutt, -/obj/effect/turf_decal/tile/bar/opposingcorners, -/turf/open/floor/iron{ - heat_capacity = 1e+006 +/obj/item/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/iron/cafeteria{ + dir = 5 }, /area/awaymission/moonoutpost19/arrivals) @@ -13835,265 +13835,7 @@ aa aa aa "} -(31,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -pO -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(32,1,1) = {" -aa +(31,1,1) = {" aa aa aa @@ -14181,6 +13923,7 @@ aa aa aa aa +pO aa aa aa @@ -14349,7 +14092,7 @@ aa aa aa "} -(33,1,1) = {" +(32,1,1) = {" aa aa aa @@ -14606,7 +14349,7 @@ aa aa aa "} -(34,1,1) = {" +(33,1,1) = {" aa aa aa @@ -14700,7 +14443,6 @@ aa aa aa aa -pO aa aa aa @@ -14711,7 +14453,6 @@ aa aa aa aa -pO aa aa aa @@ -14862,10 +14603,10 @@ aa aa aa aa -"} -(35,1,1) = {" aa aa +"} +(34,1,1) = {" aa aa aa @@ -14959,6 +14700,7 @@ aa aa aa aa +pO aa aa aa @@ -14969,6 +14711,7 @@ aa aa aa aa +pO aa aa aa @@ -15120,7 +14863,7 @@ aa aa aa "} -(36,1,1) = {" +(35,1,1) = {" aa aa aa @@ -15377,7 +15120,7 @@ aa aa aa "} -(37,1,1) = {" +(36,1,1) = {" aa aa aa @@ -15634,7 +15377,7 @@ aa aa aa "} -(38,1,1) = {" +(37,1,1) = {" aa aa aa @@ -15891,7 +15634,7 @@ aa aa aa "} -(39,1,1) = {" +(38,1,1) = {" aa aa aa @@ -16148,7 +15891,7 @@ aa aa aa "} -(40,1,1) = {" +(39,1,1) = {" aa aa aa @@ -16405,7 +16148,7 @@ aa aa aa "} -(41,1,1) = {" +(40,1,1) = {" aa aa aa @@ -16662,7 +16405,7 @@ aa aa aa "} -(42,1,1) = {" +(41,1,1) = {" aa aa aa @@ -16919,7 +16662,7 @@ aa aa aa "} -(43,1,1) = {" +(42,1,1) = {" aa aa aa @@ -17010,7 +16753,6 @@ aa aa aa aa -pO aa aa aa @@ -17175,9 +16917,9 @@ aa aa aa aa -"} -(44,1,1) = {" aa +"} +(43,1,1) = {" aa aa aa @@ -17268,6 +17010,7 @@ aa aa aa aa +pO aa aa aa @@ -17279,13 +17022,11 @@ aa aa aa aa -pO aa aa aa aa aa -pO aa aa aa @@ -17432,10 +17173,10 @@ aa aa aa aa -"} -(45,1,1) = {" aa aa +"} +(44,1,1) = {" aa aa aa @@ -17538,11 +17279,13 @@ aa aa aa aa +pO aa aa aa aa aa +pO aa aa aa @@ -17690,7 +17433,7 @@ aa aa aa "} -(46,1,1) = {" +(45,1,1) = {" aa aa aa @@ -17947,7 +17690,7 @@ aa aa aa "} -(47,1,1) = {" +(46,1,1) = {" aa aa aa @@ -18204,7 +17947,7 @@ aa aa aa "} -(48,1,1) = {" +(47,1,1) = {" aa aa aa @@ -18281,7 +18024,6 @@ aa aa aa aa -pO aa aa aa @@ -18460,9 +18202,9 @@ aa aa aa aa -"} -(49,1,1) = {" aa +"} +(48,1,1) = {" aa aa aa @@ -18539,6 +18281,7 @@ aa aa aa aa +pO aa aa aa @@ -18718,7 +18461,7 @@ aa aa aa "} -(50,1,1) = {" +(49,1,1) = {" aa aa aa @@ -18807,7 +18550,6 @@ aa aa aa aa -pO aa aa aa @@ -18821,7 +18563,6 @@ aa aa aa aa -pO aa aa aa @@ -18974,10 +18715,10 @@ aa aa aa aa -"} -(51,1,1) = {" aa aa +"} +(50,1,1) = {" aa aa aa @@ -19066,6 +18807,7 @@ aa aa aa aa +pO aa aa aa @@ -19079,6 +18821,7 @@ aa aa aa aa +pO aa aa aa @@ -19232,7 +18975,7 @@ aa aa aa "} -(52,1,1) = {" +(51,1,1) = {" aa aa aa @@ -19489,7 +19232,7 @@ aa aa aa "} -(53,1,1) = {" +(52,1,1) = {" aa aa aa @@ -19746,7 +19489,7 @@ aa aa aa "} -(54,1,1) = {" +(53,1,1) = {" aa aa aa @@ -20003,7 +19746,8 @@ aa aa aa "} -(55,1,1) = {" +(54,1,1) = {" +aa aa aa aa @@ -20076,7 +19820,6 @@ aa aa aa aa -pO aa aa aa @@ -20260,7 +20003,7 @@ aa aa aa "} -(56,1,1) = {" +(55,1,1) = {" aa aa aa @@ -20333,6 +20076,7 @@ aa aa aa aa +pO aa aa aa @@ -20369,7 +20113,6 @@ aa aa aa aa -pO aa aa aa @@ -20517,8 +20260,7 @@ aa aa aa "} -(57,1,1) = {" -aa +(56,1,1) = {" aa aa aa @@ -20627,6 +20369,7 @@ aa aa aa aa +pO aa aa aa @@ -20774,7 +20517,7 @@ aa aa aa "} -(58,1,1) = {" +(57,1,1) = {" aa aa aa @@ -21031,7 +20774,7 @@ aa aa aa "} -(59,1,1) = {" +(58,1,1) = {" aa aa aa @@ -21288,7 +21031,7 @@ aa aa aa "} -(60,1,1) = {" +(59,1,1) = {" aa aa aa @@ -21545,7 +21288,8 @@ aa aa aa "} -(61,1,1) = {" +(60,1,1) = {" +aa aa aa aa @@ -21613,7 +21357,6 @@ aa aa aa aa -pO aa aa aa @@ -21802,7 +21545,7 @@ aa aa aa "} -(62,1,1) = {" +(61,1,1) = {" aa aa aa @@ -21869,8 +21612,8 @@ aa aa aa aa -pO aa +pO aa aa aa @@ -22059,8 +21802,7 @@ aa aa aa "} -(63,1,1) = {" -aa +(62,1,1) = {" aa aa aa @@ -22127,6 +21869,7 @@ aa aa aa aa +pO aa aa aa @@ -22316,7 +22059,7 @@ aa aa aa "} -(64,1,1) = {" +(63,1,1) = {" aa aa aa @@ -22573,7 +22316,7 @@ aa aa aa "} -(65,1,1) = {" +(64,1,1) = {" aa aa aa @@ -22830,7 +22573,7 @@ aa aa aa "} -(66,1,1) = {" +(65,1,1) = {" aa aa aa @@ -23087,7 +22830,7 @@ aa aa aa "} -(67,1,1) = {" +(66,1,1) = {" aa aa aa @@ -23344,7 +23087,7 @@ aa aa aa "} -(68,1,1) = {" +(67,1,1) = {" aa aa aa @@ -23601,7 +23344,119 @@ aa aa aa "} -(69,1,1) = {" +(68,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa aa aa aa @@ -23679,118 +23534,6 @@ aa aa aa aa -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae aa aa aa @@ -23858,7 +23601,7 @@ aa aa aa "} -(70,1,1) = {" +(69,1,1) = {" aa aa aa @@ -24115,7 +23858,7 @@ aa aa aa "} -(71,1,1) = {" +(70,1,1) = {" aa aa aa @@ -24372,7 +24115,7 @@ aa aa aa "} -(72,1,1) = {" +(71,1,1) = {" aa aa aa @@ -24629,7 +24372,7 @@ aa aa aa "} -(73,1,1) = {" +(72,1,1) = {" aa aa aa @@ -24886,7 +24629,7 @@ aa aa aa "} -(74,1,1) = {" +(73,1,1) = {" aa aa aa @@ -25143,7 +24886,7 @@ aa aa aa "} -(75,1,1) = {" +(74,1,1) = {" aa aa aa @@ -25400,7 +25143,7 @@ aa aa aa "} -(76,1,1) = {" +(75,1,1) = {" aa aa aa @@ -25485,104 +25228,104 @@ ae ae ae ae -ac -ac -ac -ac -ac -ac -ac -Zp -Zp -Zp -Zp -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae +ae ae ae ae @@ -25657,7 +25400,7 @@ aa aa aa "} -(77,1,1) = {" +(76,1,1) = {" aa aa aa @@ -25747,14 +25490,271 @@ ac ac ac ac -Zp -Zp -Zp -sI -hs -Zp -Zp -Zp +ac +ac +Yf +Yf +Yf +Yf +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ae +ae +ae +ae +ae +ae +ae +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(77,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ae +ae +ae +ae +ae +ae +ae +ac +ac +ac +ac +ac +Yf +Yf +Yf +IF +Lv +Yf +Yf +Yf ac ac ac @@ -26004,15 +26004,15 @@ ac ac ac ac -Zp -xl -hs -hs -xl -sI -xl -Zp -Zp +Yf +Dk +Lv +Lv +Dk +IF +Dk +Yf +Yf ac ac ac @@ -26260,16 +26260,16 @@ ac ac ac ac -Zp -Zp -sI -xl -xl -sI +Yf +Yf +IF +Dk +Dk +IF xH -xl -hs -Zp +Dk +Lv +Yf ac ac ac @@ -26517,16 +26517,16 @@ ac ac ac ac -Zp -xl -xl -Ix -MZ -xl -xl -Ix -xl -Zp +Yf +Dk +Dk +XP +Vh +Dk +Dk +XP +Dk +Yf ac ac ac @@ -26774,16 +26774,16 @@ ac ac ac ac -Zp -xl -xl -MZ -xl +Yf +Dk +Dk +Vh +Dk WP -vn -qV -ue -Zp +no +zy +sb +Yf ac ac ac @@ -27031,16 +27031,16 @@ ac ac ac ac -Zp -hs +Yf +Lv Pv -xl -xl -xl -ue -vn -xl -Zp +Dk +Dk +Dk +sb +no +Dk +Yf ac ac ac @@ -27288,16 +27288,16 @@ ac ac ac ac -Zp -MZ -vn -xl -xl -Og -xl +Yf +Vh +no +Dk +Dk +aX +Dk Pv -hs -Zp +Lv +Yf ac ac ac @@ -27545,16 +27545,16 @@ ac ac ac ac -Zp -nW -sA -xl -xl -xl -xl -hs -xl -Zp +Yf +Re +ql +Dk +Dk +Dk +Dk +Lv +Dk +Yf ac ac ac @@ -27593,20 +27593,20 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -27802,16 +27802,16 @@ ac ac ac ac -Zp -xl -vn -Zp -xl -xl -xl -Ix -hs -Zp +Yf +Dk +no +Yf +Dk +Dk +Dk +XP +Lv +Yf ac ac ac @@ -27846,28 +27846,28 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -28059,16 +28059,16 @@ ac ac ac ac -Zp -Zp -xl -xl -xl -xl -xl -xl -xl -Zp +Yf +Yf +Dk +Dk +Dk +Dk +Dk +Dk +Dk +Yf ac ac ac @@ -28081,10 +28081,10 @@ ac ac ac ac -Zp -Zp -Zp -Zp +Yf +Yf +Yf +Yf ac ac ac @@ -28101,32 +28101,32 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -28317,15 +28317,15 @@ ac ac ac ac -Zp -hs -xl -xl -xl -xl -xl -xl -Zp +Yf +Lv +Dk +Dk +Dk +Dk +Dk +Dk +Yf ac ac ac @@ -28337,12 +28337,12 @@ ac ac ac ac -Zp -Zp -us -MZ -Zp -Zp +Yf +Yf +ZP +Vh +Yf +Yf ac ac ac @@ -28356,36 +28356,36 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -28574,15 +28574,15 @@ ac ac ac ac -Zp -Zp -xl -xl -Og -xl -xl -Zp -Zp +Yf +Yf +Dk +Dk +aX +Dk +Dk +Yf +Yf ac ac ac @@ -28593,13 +28593,13 @@ ac ac ac ac -Zp -Zp -hs -vn +Yf +Yf +Lv +no mN -xl -Zp +Dk +Yf ac ac ac @@ -28611,40 +28611,40 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -28832,13 +28832,13 @@ ac ac ac ac -Zp -Zp -xl -xl -xl -Zp -Zp +Yf +Yf +Dk +Dk +Dk +Yf +Yf ac ac ac @@ -28850,13 +28850,13 @@ ac ac ac ac -Zp -MZ -xl -Og -xl -hs -Zp +Yf +Vh +Dk +aX +Dk +Lv +Yf ac ac ac @@ -28866,43 +28866,43 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -29090,11 +29090,11 @@ ac ac ac ac -Zp -Zp -Zp -Zp -Zp +Yf +Yf +Yf +Yf +Yf ac ac ac @@ -29105,15 +29105,15 @@ ac ac ac ac -Zp -Zp -Zp -xl -xl -xl -MZ -Zp -Zp +Yf +Yf +Yf +Dk +Dk +Dk +Vh +Yf +Yf ac ac ac @@ -29121,47 +29121,47 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -29347,10 +29347,10 @@ ac ac ac ac -Zp -Og -Og -Zp +Yf +aX +aX +Yf ac ac ac @@ -29361,15 +29361,15 @@ ac ac ac ac -Zp -Zp -xl +Yf +Yf +Dk wy -xl -hs -Zp -Zp -Zp +Dk +Lv +Yf +Yf +Yf ac ac ac @@ -29377,49 +29377,49 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -29604,27 +29604,27 @@ ac ac ac ac -Zp -xl -xl -Zp -Zp +Yf +Dk +Dk +Yf +Yf ac -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -Zp -xl -xl -Zp -Zp -Zp -Zp +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Dk +Dk +Yf +Yf +Yf +Yf ac ac ac @@ -29633,51 +29633,51 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -29861,24 +29861,24 @@ ac ac ac ac -Zp -xl -xl -xl -Zp -Zp -Zp -xl -xl -xl -xl -xl -xl -Zp -Zp -xl -Zp -Zp +Yf +Dk +Dk +Dk +Yf +Yf +Yf +Dk +Dk +Dk +Dk +Dk +Dk +Yf +Yf +Dk +Yf +Yf ac ac ac @@ -29889,53 +29889,53 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -30118,23 +30118,23 @@ ac ac ac ac -Zp -Zp -xl -xl -xl -Zp -xl -xl -xl -xl -xl -xl -Og -xl -xl -xl -Zp +Yf +Yf +Dk +Dk +Dk +Yf +Dk +Dk +Dk +Dk +Dk +Dk +aX +Dk +Dk +Dk +Yf ac ac ac @@ -30145,55 +30145,55 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -30369,29 +30369,29 @@ ae ae ae ac -Zp -Zp -Zp -Zp +Yf +Yf +Yf +Yf ac ac ac -Zp -Zp -xl -Og -xl -xl -xl -Zp -Zp -Zp -Zp -xl -xl -xl -Zp -Zp +Yf +Yf +Dk +aX +Dk +Dk +Dk +Yf +Yf +Yf +Yf +Dk +Dk +Dk +Yf +Yf ac ac ac @@ -30402,56 +30402,56 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -30625,29 +30625,29 @@ ae ae ae ae -Zp -Zp -hs -MZ -Zp -Zp -Zp -Zp -Zp -Zp -xl -xl -xl -xl -Zp -Zp +Yf +Yf +Lv +Vh +Yf +Yf +Yf +Yf +Yf +Yf +Dk +Dk +Dk +Dk +Yf +Yf bl bl -Zp -Zp -xl -xl -Zp +Yf +Yf +Dk +Dk +Yf ac ac ac @@ -30658,58 +30658,58 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -30882,29 +30882,29 @@ ae ae ae ae -Zp -hs -xl +Yf +Lv +Dk wy -xl -Zp -Zp -xl -xl -xl -xl -xl -xl -Zp -Zp +Dk +Yf +Yf +Dk +Dk +Dk +Dk +Dk +Dk +Yf +Yf bl bl bl -Zp -xl -xl -xl -Zp +Yf +Dk +Dk +Dk +Yf ac ac ac @@ -30914,59 +30914,59 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -31139,92 +31139,92 @@ ae ae ae ae -Zp -hs -xl -hs -Og -xl -xl -xl -Zp -Zp -xl -Zp -Zp -Zp +Yf +Lv +Dk +Lv +aX +Dk +Dk +Dk +Yf +Yf +Dk +Yf +Yf +Yf bl bl bl bl -Zp -xl -xl -Zp -Zp -ac -ac -ac -ac -ac -ac -dA -dA -dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Dk +Dk +Yf +Yf +ac +ac +ac +ac +ac +ac +dA +dA +dA +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH lc io io io lc -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -31396,70 +31396,70 @@ ae ae ae ae -Zp -Zp -Zp -MZ -MZ -Zp -Zp -Zp -Zp -Zp -xl -Zp +Yf +Yf +Yf +Vh +Vh +Yf +Yf +Yf +Yf +Yf +Dk +Yf bl bl bl bl bl bl -Zp -xl -xl -Zp -ac -ac -ac -ac -ac -ac -dA -dA -dA -dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Dk +Dk +Yf +ac +ac +ac +ac +ac +ac +dA +dA +dA +dA +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH lc lc mp @@ -31467,21 +31467,21 @@ mG mV lc lc -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -31655,68 +31655,68 @@ ae ae ac ac -Zp -Zp -Zp -Zp +Yf +Yf +Yf +Yf ac ac ac -Zp +Yf xH -Zp -Zp +Yf +Yf bl bl bl bl bl -Zp -xl +Yf +Dk xP -Zp -Zp -Zp -ac -ac -ac -dA -dA -dA -vM -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Yf +Yf +ac +ac +ac +dA +dA +dA +zV +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ld lW mb @@ -31724,21 +31724,21 @@ mc mb nf ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -31919,50 +31919,50 @@ ac ac ac ac -Zp -xl -xl -Zp +Yf +Dk +Dk +Yf bl bl bl bl bl -Zp -xl -xl -xl -xl -Zp -Zp -Zp -ac -dA -dA -vM -vM -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Dk +Dk +Dk +Dk +Yf +Yf +Yf +ac +dA +dA +zV +zV +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI eJ eJ @@ -31972,8 +31972,8 @@ eI eI eJ eI -Ga -Ga +uH +uH ld lX mq @@ -31981,22 +31981,22 @@ mr mW lX ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -32174,42 +32174,42 @@ ac ac ac ac -Zp -Zp -Zp -xl -xl -Zp -Zp +Yf +Yf +Yf +Dk +Dk +Yf +Yf bl bl bl bl -Zp -Zp -xl -xl -xl -xl -xl -Zp -Zp -vM -vM -Ja -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Yf +Dk +Dk +Dk +Dk +Dk +Yf +Yf +zV +zV +Ba +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI eI eI @@ -32217,20 +32217,20 @@ eJ eI eJ eJ -Ga -Ga -Ga +uH +uH +uH eJ -zy -yk -yk -Mb -yk +Cb +bn +bn +Jq +bn gA -lt +za eI -Ga -Ga +uH +uH ld ld ld @@ -32238,22 +32238,22 @@ mH ld ld ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -32430,64 +32430,64 @@ ac ac ac ac -Zp -Zp -eL -xl -xl -Og -hs -Zp +Yf +Yf +YA +Dk +Dk +aX +Lv +Yf bl bl bl -Zp -Zp -xl -xl -Zp -Zp -xl -xl -xl -Zp -Im -wH -wH -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Yf +Dk +Dk +Yf +Yf +Dk +Dk +Dk +Yf +ys +qX +qX +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI -Cv +SL BR -qG -qG -Ne +YB +YB +hs eJ eI eJ eI eI -rx -Hh +Bj +Jb ea ea dZ dZ -yk +bn eJ -Ga -Ga +uH +uH ld lZ mr @@ -32495,22 +32495,22 @@ mr mr lZ ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -32687,64 +32687,64 @@ ac ac ac ac -Zp -Ac -QO +Yf +SR +dh wy -xl -hs -MZ -Zp +Dk +Lv +Vh +Yf bl bl bl -Zp -xl -xl -Zp -Zp -Zp -Zp -xl -Og -Zp -Im -wH -wH -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Dk +Dk +Yf +Yf +Yf +Yf +Dk +aX +Yf +ys +qX +qX +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eJ -UH -YH -iq -iR -zV +IK +rm +CR +OX +uu eI -yO -yk -IW -lt -yk -Mb +wB +bn +nV +za +bn +Jq dZ -zC -FK +qm +Vu dZ Ci eJ hI -Ga +uH ld ma mc @@ -32752,23 +32752,23 @@ mr mc ng ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -32944,64 +32944,64 @@ ac ac ac ac -Zp -MZ -vn -xl -MZ -MZ -Zp -Zp +Yf +Vh +no +Dk +Vh +Vh +Yf +Yf bl bl bl -Zp -xl -Zp -Zp -ac -ac -Zp -Zp -Zp -Zp -vM -Ja -wH -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yf +Dk +Yf +Yf +ac +ac +Yf +Yf +Yf +Yf +zV +Ba +qX +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eJ -PV +LF BR -XH -XH -gO +RZ +RZ +Wj eI -yk +bn ea ea dZ dZ ea ea -WX +Sj dZ ea -VS -Bp +Jj +BX hI -Ga +uH io mb Qx @@ -33009,23 +33009,23 @@ xS Qx mb io -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -33201,21 +33201,21 @@ ac ac ac ac -Zp -Zp -Zp -xl -Zp -Zp -Zp +Yf +Yf +Yf +Dk +Yf +Yf +Yf bl bl bl bl -Zp -xl -Zp -Zp +Yf +Dk +Yf +Yf ac ac ac @@ -33223,31 +33223,31 @@ ac ac dA dA -vM -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +zV +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eJ -Oo +Zr BR BR -Wd -Mm +XG +Au eI -yk +bn ea -DX +Av hB hB hB @@ -33257,8 +33257,8 @@ ea jq Vr hg -by -Ga +rP +uH ld mc tX @@ -33266,23 +33266,23 @@ vt tX mc ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -33460,19 +33460,19 @@ ac ac ac ac -Zp -xl -Zp +Yf +Dk +Yf bl bl bl bl bl bl -Zp -xl -xl -Zp +Yf +Dk +Dk +Yf ac ac ac @@ -33480,42 +33480,42 @@ ac ac dA dA -vM -wH -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +zV +qX +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI -ks -lt -yk +Ts +za +bn gA -Uf +uU eJ -Mb +Jq ea -Pi +WN hB fS hX -Om +Ld hB dZ gC Vr hh -by -Ga +rP +uH ld md Qx @@ -33523,23 +33523,23 @@ xS Qx nh ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -33717,41 +33717,41 @@ ac ac ac ac -Zp -xl -Zp +Yf +Dk +Yf bl bl bl bl bl bl -Zp -Zp -Og -Zp +Yf +Yf +aX +Yf ac ac ac ac dA dA -vM -vM -wH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +zV +zV +qX +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eJ eI eJ @@ -33759,20 +33759,20 @@ Ci eJ eJ eI -yk +bn ea -Zx +Gw hB -sU -TG -Qh +Kw +tq +HZ iH ea gD Ut hg -by -Ga +rP +uH io mc mc @@ -33780,23 +33780,23 @@ mr mc mc io -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -33974,9 +33974,9 @@ ac ac ac ac -Zp -Og -Zp +Yf +aX +Yf bl bl bl @@ -33984,50 +33984,50 @@ bl bl bl bl -Zp -xl -Zp +Yf +Dk +Yf ac ac ac ac dA dA -vM -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +zV +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI -yk -yk +bn +bn gA -yk -yk -rE -Mb +bn +bn +ya +Jq dZ -UC +qY fS hB hZ fS -Ws +bW ea gE Ut -fV +Yj hI lc ld @@ -34038,22 +34038,22 @@ mb me ld lc -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -34231,9 +34231,9 @@ ac ac ac ac -Zp -xl -Zp +Yf +Dk +Yf bl bl bl @@ -34241,33 +34241,33 @@ bl bl bl bl -Zp -xl -Zp +Yf +Dk +Yf ac ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI -UY +Km ea ea ea @@ -34275,9 +34275,9 @@ dZ dZ ea ea -eK -eu -eK +Qa +Eq +Qa ia hB fW @@ -34285,7 +34285,7 @@ ea gF Vr hg -by +rP ld lD lD @@ -34295,22 +34295,22 @@ mY lD lD ld -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -34488,53 +34488,53 @@ ac ac ac ac -Zp -xl -Zp +Yf +Dk +Yf bl bl bl bl bl bl -Zp -Zp -xl -Zp +Yf +Yf +Dk +Yf ac ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eI -lt +za ea -Ip -qd -uR -Cw -yJ -WE +MP +aL +nj +VQ +Ok +oV Ti bb -eK +Qa ib ir iK @@ -34542,7 +34542,7 @@ dZ gC Ut hh -by +rP lc rq jy @@ -34552,23 +34552,23 @@ ld rq jy lc -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -34745,87 +34745,87 @@ ac ac ac ac -Zp -xl -Zp +Yf +Dk +Yf bl bl bl bl bl -Zp -Zp -xl -xl -Zp +Yf +Yf +Dk +Dk +Yf ac ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH eJ -Av +yh dZ -jW -nv -vJ -HG +cZ +EB +Oj +nR QW -WE +oV Ti bb -eK -ww +Qa +vC is -BA +AA ea jv Ut hh -by -Ga -Ga -Ga -by +rP +uH +uH +uH +rP iv -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -35001,88 +35001,88 @@ ac ac ac ac -Zp -Zp -xl -Zp -Zp -Zp -Zp -Zp -Zp -Zp -xl -xl -Zp -Zp +Yf +Yf +Dk +Yf +Yf +Yf +Yf +Yf +Yf +Yf +Dk +Dk +Yf +Yf ac ac ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ dZ ea ea -yk +bn ea -tZ -vg -Bx -cX -PE -WE +Me +pz +Yz +uM +YD +oV Ti bb -eK +Qa ff fy iM ea jw -YE +sk hg hI -Ga -Ga -Ga -yp -xk -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +qk +kc +rP +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -35257,54 +35257,54 @@ ac ac ac ac -Zp -Zp -xl -xl -hs -Zp -Zp -xl -xl +Yf +Yf +Dk +Dk +Lv +Yf +Yf +Dk +Dk Ku -xl -xl -Zp -Zp +Dk +Dk +Yf +Yf ac ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea ed et ea -kj +hy ea -WE -sp -Un -WE -WE -WE +oV +uK +JS +oV +oV +oV Ti -JJ +bR eI ea dZ @@ -35312,34 +35312,34 @@ dZ ea hJ jY -MN +GJ hI hI -by -by -by -iN -by -by -by +rP +rP +rP +ue +rP +rP +rP hI hI hI hI -NM -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +DJ +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -35514,89 +35514,89 @@ ac ac ac ac -Zp -MZ +Yf +Vh xH -xl -xl -xl -xl -xl -Zp -Zp -Zp -Zp -Zp -ac -ac -ac -ac -ac -dA -dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -DG -pa -nv -AX -iW -mO -Fc -FM -gd +Dk +Dk +Dk +Dk +Dk +Yf +Yf +Yf +Yf +Yf +ac +ac +ac +ac +ac +dA +dA +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +sG +NQ +EB +AF +MC +wZ +zP +ud +Oq bb bb bb fk -PD -rW +Zv +xZ ea fz ee eI -os +At gU -JL +zt hn -CR -fa -fa -fa -Qa -fa -fa -qM -jU -jG -jC -Tb -OV -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +WK +Tx +Tx +Tx +jt +Tx +Tx +Fc +eP +rc +LM +IQ +Uf +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -35770,16 +35770,16 @@ ac ac ac ac -Zp -Zp -hs -xl -Og -xl -hs -Zp -Zp -Zp +Yf +Yf +Lv +Dk +aX +Dk +Lv +Yf +Yf +Yf ac ac ac @@ -35791,70 +35791,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -DG -Lo -GS -ZS -Dn -UZ -PA -Oi -mj -QA -PD -PD -PD -DE -rW +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +sG +ew +FQ +Ct +EU +IN +Nw +Jt +Jc +Br +Zv +Zv +Zv +hj +xZ ie -PD -PD +Zv +Zv gq -Or +So Vr -mo -Qa +sS +jt FJ -zz -kU +xh +sQ ih -zI -kU -kU -kU -jU -xk +Zo +sQ +sQ +sQ +eP +kc Hl -Tb -OV -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +IQ +Uf +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -36027,14 +36027,14 @@ ac ac ac ac -Zp -hs -xl -xl -MZ -MZ -Zp -Zp +Yf +Lv +Dk +Dk +Vh +Vh +Yf +Yf ac ac ac @@ -36048,70 +36048,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -VF +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +EG ea ea dZ ea ea -na +uT dZ ea dZ dZ -Pj -Xq +Kz +zs eg eg -rW +xZ ea fA fZ eI -wj -Ko -mo +uv +yp +sS ho jE Gh -by -by +rP +rP hI -by -by -by +rP +rP +rP hI nB nL hI -JH -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +om +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -36284,13 +36284,13 @@ ac ac ac ac -wB -Zp -Zp -Zp -Zp -Zp -Zp +pP +Yf +Yf +Yf +Yf +Yf +Yf ac ac ac @@ -36305,33 +36305,33 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea -lN -Et -nv -nT -Pr +eA +SY +EB +yZ +uk dZ ea -WE -Vo +oV +Gj eh eI dZ @@ -36340,35 +36340,35 @@ ea ea hI gU -ap +DX hJ hJ hJ -by -Ga -ZT -Ga -Ga -Ga +rP +uH +qT +uH +uH +uH hI hI hI hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -36562,70 +36562,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea -aY -Et -nv -XG +El +SY +EB +Fv fk -Yx +Rk ea -aw -CK -PD -PD -PL +uz +Dc +Zv +Zv +mn dZ -Ga -Ga +uH +uH hJ -OQ -WH +FX +wE hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -36819,70 +36819,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ -sT -hp -pa -bE +XF +vV +NQ +sI fk -Ew +TE dZ -Nt -PD -PD -PD +ZS +Zv +Zv +Zv fm dZ -Ga -Ga -by +uH +uH +rP kg kB MI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -37076,70 +37076,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ dZ ea ea -yg -hp -pa -XX +GG +vV +NQ +SC gI -Nc +ux ea -AX +AF HQ -PD -DE +Zv +hj ez ea -Ga -Ga -by +uH +uH +rP kd kC -GV -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +GS +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -37333,70 +37333,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea -LI -LI +IR +IR eI -Vn -Mt -Ah +lN +HD +Gx eJ eI eJ ea -NW -Vy -wh -Km -Xz +Wd +kT +ti +KK +qo ea -Ga -Ga -by -IP -PR -sO -ET -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +rP +ZK +QO +PQ +HW +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -37590,28 +37590,28 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ -Uz -Uz -ad +NK +NK +WR fk fB fk -Hd +Za gJ gW ea @@ -37621,39 +37621,39 @@ ea ea dZ ea -Ga -Cc +uH +Ho hI -Fx -XZ +WO +QP hI mU -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -37847,24 +37847,24 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ ei -Qu -HI +Nl +Er fl fC fk @@ -37872,45 +37872,45 @@ fk fk gX dZ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH jA kg -XZ -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -jF -Ga +QP +rP +uH +uH +uH +uH +uH +uH +uH +Qj +uH Uh kR -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -38104,70 +38104,70 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea -VD -aj -CL -dd -YW -zO -jH -mX -Rh +Xq +ET +ps +iT +bF +Mj +vE +Ai +xN dZ -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH kR -sG -mz +cr +TH kB -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH hI MI -QP +uN MI MI MI MI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -38362,69 +38362,69 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dZ -FW -Nr -Nr -Nr +fn +tE +tE +tE fE -CF -nz -Nr -FW +dn +Ra +tE +fn ea -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH MI kd Sw -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH hI -OL -yU +KW +AQ nM nS nX MI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -38619,41 +38619,41 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea ea -rd +eL eq eq fF gc gu -rd +eL ea ea -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH hJ hI hI -Hr -wv +dE +xz hJ hJ hJ @@ -38664,24 +38664,24 @@ hI hJ hJ nx -bz -XZ +OL +QP kB kC MI MI -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH ZO -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH dA dA dA @@ -38861,34 +38861,34 @@ ac ac ac aU -ij -Op +km +gb aU bX bX -xs +eu bX bX zN -sa +cV aU ac ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea el er @@ -38900,45 +38900,45 @@ gv gM ha ea -Ga -Ga -Ga -Ga -Ga -Cc +uH +uH +uH +uH +uH +Ho hJ -Gw -zm +iD +SW Vr -mo -EH -Jc -gG -gG -gG +sS +lz +bK +yX +yX +yX iw -ya +oZ ni nq Sw -Dw -XZ -XZ -XZ -PZ +Qz +QP +QP +QP +wF MI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -39118,34 +39118,34 @@ ac aU aU aU -qk +AS aU aU -Qz -Gk -Gy -Gk -Gk +ES +VC +od +VC +VC df -ZH +Rv aU aU aU aU dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea em eB @@ -39157,45 +39157,45 @@ en eB eq ea -Ga -Ga -Ga -Ga -Ga -Ga -by -yh -mo +uH +uH +uH +uH +uH +uH +rP +Sc +sS Ut -Qa -Cp -JD -eR +jt +wl +Ch +Kp Ud mx ix kB -Tq +Fq Ud uO mx nN -eR -qi -ul +Kp +hQ +OC MI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -39374,35 +39374,35 @@ ac ac aU bd -xt -FZ -lq +Vb +Vi +ds aU -OO -QY -pp -Wq -Yk -pp +hN +aT +Pq +Jo +te +Pq QZ aU -En -wz +yg +DP aU -EF -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Ek +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea en en @@ -39414,19 +39414,19 @@ eq en eq ea -Ga -Ga -Ga -Ga -Ga -Ga -by -jb -mo +uH +uH +uH +uH +uH +uH +rP +Xm +sS Vr hI hI -Cd +Qy hJ hI hI @@ -39436,23 +39436,23 @@ hJ kl hI hJ -fU +fe hJ hI hI hJ mU -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -39631,35 +39631,35 @@ ac ac aU nd -tJ -FZ -bn -ek -Bw +DO +Vi +Oy +nr +kn +SF +kn +xK +xK +kn +kn +xW +Rn TL -Bw -tP -tP -Bw -Bw -mn -Ty -Ld -Is -Bc -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +XB +fD +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ec eo eq @@ -39669,47 +39669,47 @@ fJ eq eq en -pM +SP ec -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH hJ je -Qa +jt Vr hJ -rh +Qh ln -wU +Uz hJ my -Bn +rd im hJ -xk +kc hJ nH nP -Mg +Dh hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -39888,35 +39888,35 @@ ac ac aU aU -yQ -Oy -Ph -Lp -Od -jP -Bb +wu +vl +pS +kQ +jF +LR +Yu cS -tP -Bb -tP +xK +Yu +xK aU -Pe -sg +sj +pI aU dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea ep eq @@ -39928,45 +39928,45 @@ eq eQ hc ea -Ga -Ga +uH +uH hI hI hJ hJ hJ -TX -mo +MN +sS Vr hI -RI -hC -LJ +ZE +kV +IZ hJ -kI +Go mT -vZ +CC hJ lP hI nI ln -fY +it hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -40145,35 +40145,35 @@ ac ac ac aU -uX -LQ -Er +RH +UA +Mz aU -Lp -DK -Oa +kQ +IW +vb aU -RP -OA -fu +iF +oi +lG aU aU aU aU dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea eq eF @@ -40185,16 +40185,16 @@ eq en eq ea -Ga -Ga +uH +uH hI -Vt +BT hJ -TK +YH hJ -Tt -mo -So +gh +sS +jh hI hJ hJ @@ -40210,20 +40210,20 @@ hJ hJ hJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -40406,9 +40406,9 @@ at at at at -xV -KO -nm +Sb +rU +Lr aU aU aU @@ -40419,18 +40419,18 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea er em @@ -40442,45 +40442,45 @@ en eB eq ea -Ga -Ga +uH +uH hJ -PJ +UM hI -cH +FA hJ hI -Rc +Iz Ut -Di +vT kl lP -xk +kc Hl Hl Hl -yb -aM +CT +BZ ns hJ -xk +kc Hl hI Zf -Ga -Ga -Ga -Na -re +uH +uH +uH +dO +do Zf -kJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga +yi +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -40654,40 +40654,40 @@ ac ac ac at -ht -Nk -ox -ZB -Mx -pK -nA -qr +FK +sC +iR +dQ +Sy +qw +AT +AX at -UU -Bw -wc +nA +kn +rf aU -it -wa -HW +ML +rp +cY aU ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea el eH @@ -40699,45 +40699,45 @@ eH eq eq ea -Ga -Ga +uH +uH hI -Ox -zR -ye -hW -EU -mo -Qa -dr +xt +LI +le +gm +HU +sS +jt +sc hJ hJ Hl -BC +NV Jm AE -Xv -zP -MM -km +YW +JD +tT +UX Hl jM -oZ -kV -vc -vc -vc -FR -XJ -OV -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +GX +ck +LY +LY +LY +FP +Eb +Uf +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -40911,40 +40911,40 @@ ac ac ac at -yH -qf -qf -qf -ZB -OF -KJ -wm +rN +MW +MW +MW +dQ +Ik +aD +Xv at -PC -Bw -AL -GE -DJ -Fa -NH +cn +kn +Fu +KN +Hz +Fj +RK aU ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ea ea ea @@ -40956,20 +40956,20 @@ ea ea ea ea -Ga -Ga +uH +uH hI -Qg -tj -ye -ye +Yi +LG +le +le hJ -wf -Qa -mo -Lb +to +jt +sS +WI hJ -yb +CT hI hJ hI @@ -40978,23 +40978,23 @@ Us hI hI nJ -xz +FV hJ -Ab -Ga -Ga -Ga -zw -SM -Ab -Ga -Kp -Ga -Ga -Ga -Ga -Ga -Ga +VK +uH +uH +uH +pD +Lq +VK +uH +Nf +uH +uH +uH +uH +uH +uH dA dA ac @@ -41168,18 +41168,18 @@ ac ac ac at -HA -qf -Mw -Ms -qW -Nh -KF -KF -Me -qR -yM -VT +qp +MW +Uu +Mn +YZ +tj +Eo +Eo +VI +FT +WB +sn aU aU aU @@ -41191,67 +41191,67 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI hI hI -WM +CS hJ hI -NQ -Qa -Qa -Hu +rg +jt +jt +zk hI -xk +kc hI -Ga -Ga +uH +uH hI -zt +SK lP hI hJ hJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -41425,22 +41425,22 @@ ac ac ac at -JE -qf -qf -qy -CU -Cf -Ss -tQ +Di +MW +MW +Oh +JH +Lh +JF +Gk at -qw -mg -wc -UW -Jq -kS -fT +an +fM +rf +KZ +uA +gL +XQ aU ac ac @@ -41448,67 +41448,67 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -Iw -SD -hW -Gi +Zy +Ip +gm +db hI -lw -mo -mo -wS +TR +sS +sS +iW hJ lP hI -Ga -Ga +uH +uH hI -iN +ue hI hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -41682,22 +41682,22 @@ ac ac ac at -fO -JE -Wp -vW -NE -Rs -Hy -RQ +Mt +Di +PJ +st +jS +WH +Qe +Cp at -kp -Ni -QU +jH +fO +zp aU -oT -eV -pT +nQ +da +Iy aU ac ac @@ -41705,67 +41705,67 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -kD -ye -ye -Gi +VR +le +le +db hI -fo -mo -Qa -rm +Ds +sS +jt +Qk hJ Hl hJ -Ga -Ga -zw -SM +uH +uH +pD +Lq nu -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -41949,7 +41949,7 @@ at at at at -um +Hb at at aU @@ -41962,66 +41962,66 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI hI -ON -sN +On +pb hI hI -vH -xB -xB -vH +Qq +DA +DA +Qq hJ kl hJ hJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -42204,10 +42204,10 @@ ac ac ac at -iP -Yt -lz -gw +ph +SJ +QJ +ga at ac ac @@ -42218,67 +42218,67 @@ ac ac ac dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI hJ hJ hJ -Mp -Ib -Ib -Ib -Vj -dk -Ib -kY +ek +qM +qM +qM +Xo +LZ +qM +Kk Rm hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -42461,10 +42461,10 @@ ac ac ac at -kT -pI -Ba -QC +zM +AN +mX +Ac at ac ac @@ -42475,67 +42475,67 @@ ac ac ac ac -Ga +uH dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -by -Jt -rC -Ez -Ib -Ib -Ib -gS -Rp -Ez -kY +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +rP +ON +tQ +YC +qM +qM +qM +uY +Kn +YC +Kk Rm hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -42718,10 +42718,10 @@ ac ac ac at -Tp -At -ss -zu +Cf +lx +ex +ZQ at ac ac @@ -42731,68 +42731,68 @@ ac ac ac ac -Ga -Ga +uH +uH dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -by -ZW -Oe -Ez -Ib -Ib -NJ -Ib -Ib -Ib -Ez +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +rP +mm +cM +YC +qM +qM +lU +qM +qM +qM +YC Bm hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -42975,10 +42975,10 @@ ac ac ac at -PN -bH +Kq +AK xj -QC +Ac at ac ac @@ -42988,68 +42988,68 @@ ac ac ac ac -Ga +uH ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -by -MJ -ne -Ib -gS -Ib -cd -Ib -Wt -Ib -US +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +rP +Tg +Aq +qM +uY +qM +jZ +qM +CP +qM +Zz hI hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -43232,10 +43232,10 @@ ac ac ac at -yy -Em -ce -wI +CN +si +Rr +Id at ac ac @@ -43244,69 +43244,69 @@ ac ac ac ac -Ga -Ga +uH +uH ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Cc +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +Ho hJ hJ hI -OZ -cn -cn -cn -cn +MA +XT +XT +XT +XT hJ -ux +Tn hJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -43500,69 +43500,69 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hJ hJ -YM -zM -nG -zM -zM +hF +QC +QA +QC +QC hJ lR lR hJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -43756,8 +43756,8 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac ac @@ -43765,29 +43765,29 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hJ iU iX @@ -43795,31 +43795,31 @@ iX ko iX iX -Af +zS lR lS mD -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -44012,8 +44012,8 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac ac @@ -44022,60 +44022,60 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -LY +pp jn -dT -Re +os +rZ iX iX iX lS lR mE -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -44269,7 +44269,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -44280,32 +44280,32 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -LY +pp iX -HK +ZW kq ko iX @@ -44313,26 +44313,26 @@ iX lR lR mF -by -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +rP +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -44525,8 +44525,8 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac ac @@ -44537,28 +44537,28 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hJ iX iX @@ -44572,23 +44572,23 @@ ml hI hI mU -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -44777,14 +44777,14 @@ ac ac ac ac -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH ac ac ac @@ -44795,57 +44795,57 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI iY jo jR -rl +hT kM hJ -Gv +dI hJ hJ hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -45037,11 +45037,11 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac -Ga +uH ac ac ac @@ -45053,54 +45053,54 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hJ hJ hI -by +rP hJ hJ hJ -Nl -Nl -Rd +Hf +Hf +HB hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -45293,12 +45293,12 @@ ac ac ac ac -Ga -Ga +uH +uH ac ac ac -Ga +uH ac ac ac @@ -45310,53 +45310,53 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -oi -Nl -BE +VU +Hf +mJ hJ -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -45540,7 +45540,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -45548,14 +45548,14 @@ ac ac ac ac -Ga -Ga -Ga +uH +uH +uH ac ac ac ac -Ga +uH ac ac ac @@ -45568,52 +45568,52 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hI -SK -Be -pD +ZT +BB +Wq hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA ac @@ -45796,23 +45796,23 @@ ac ac ac ac -IL -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +Yg +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH ac ac ac ac -Ga -Ga +uH +uH ac ac ac @@ -45825,50 +45825,50 @@ ac ac dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH hJ hJ hJ hI hI -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -46059,7 +46059,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -46068,8 +46068,8 @@ ac ac ac ac -Ga -aG +uH +cP ac ac ac @@ -46083,47 +46083,47 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -46316,7 +46316,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -46325,8 +46325,8 @@ ac ac ac ac -Ga -WW +uH +Wt ac ac ac @@ -46341,44 +46341,44 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -46573,7 +46573,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -46582,9 +46582,9 @@ ac ac ac ac -Ga -Ga -Ga +uH +uH +uH ac ac ac @@ -46599,41 +46599,41 @@ ac dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -46830,7 +46830,7 @@ ac ac ac ac -Ga +uH ac ac ac @@ -46839,10 +46839,10 @@ ac ac ac ac -Ga -Ga -Ga -Tl +uH +uH +uH +ej ac ac ac @@ -46857,38 +46857,38 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -47095,12 +47095,12 @@ ac ac ac ac -Ga -Ga -aG -Ga -Ga -Ga +uH +uH +cP +uH +uH +uH ac ac ac @@ -47117,33 +47117,33 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -47352,12 +47352,12 @@ ac ac ac ac -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH ac ac ac @@ -47380,20 +47380,20 @@ dA dA dA dA -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga -Ga +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH +uH dA dA dA @@ -47609,12 +47609,12 @@ ac ac ac ac -Pk -Ga -PB -Ga -Ga -Ga +iq +uH +Xx +uH +uH +uH ac ac ac @@ -47867,11 +47867,11 @@ ac ac ac ac -Vq -nn -zQ -Ga -Ga +zd +yl +xu +uH +uH ac ac ac @@ -48125,8 +48125,8 @@ ac ac ac ac -Ga -Dt +uH +Bh ac ac ac diff --git a/_maps/map_files/Blueshift/Blueshift.dmm b/_maps/map_files/Blueshift/Blueshift.dmm index 06eac3972e01..12b531c0946a 100644 --- a/_maps/map_files/Blueshift/Blueshift.dmm +++ b/_maps/map_files/Blueshift/Blueshift.dmm @@ -385,6 +385,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/security/interrogation) +"aeF" = ( +/obj/structure/cable, +/turf/open/floor/catwalk_floor/iron/airless, +/area/space/nearstation) "aeM" = ( /obj/machinery/light/directional/south, /obj/structure/cable, @@ -3732,6 +3736,17 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/dark, /area/station/security/prison/upper) +"aLN" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "aLP" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -8158,6 +8173,12 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/maintenance/rus_gambling) +"bDM" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "bDR" = ( /obj/structure/railing, /obj/structure/railing{ @@ -10973,6 +10994,9 @@ /obj/effect/landmark/navigate_destination, /turf/open/floor/iron/kitchen, /area/station/service/kitchen/diner) +"cft" = ( +/turf/open/space, +/area/space) "cfv" = ( /obj/structure/flora/bush/leafy, /obj/machinery/growing/tray, @@ -15806,6 +15830,10 @@ /obj/structure/closet/crate, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"cXY" = ( +/obj/structure/lattice, +/turf/open/space/openspace, +/area/space) "cYb" = ( /obj/structure/rack/shelf, /obj/effect/turf_decal/bot, @@ -19374,7 +19402,7 @@ /obj/item/folder/blue, /obj/item/stamp/denied{ pixel_x = -6; - pixel_y = 4 + pixel_y = 9 }, /obj/item/stamp{ pixel_x = -6 @@ -19656,7 +19684,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" @@ -28067,6 +28095,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/dark/small, /area/station/security/brig) +"fqO" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "fqP" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -28180,6 +28212,14 @@ /obj/structure/stairs/north, /turf/open/floor/iron/dark, /area/station/hallway/primary/central) +"fsz" = ( +/obj/machinery/light/directional/east, +/obj/machinery/conveyor_switch/oneway{ + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "fsG" = ( /obj/effect/spawner/random/decoration/paint, /obj/structure/cable, @@ -29404,7 +29444,7 @@ /area/station/engineering/storage_shared) "fGV" = ( /obj/effect/decal/cleanable/dirt, -/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, @@ -29625,6 +29665,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth, /area/station/cargo/miningdock) +"fIN" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "fIR" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Engineering Maintenance" @@ -32167,8 +32211,14 @@ pixel_y = 6 }, /obj/item/folder/white, +/obj/item/stamp/granted{ + pixel_y = 11 + }, +/obj/item/stamp/denied{ + pixel_y = 6 + }, /obj/item/stamp/head/cmo{ - pixel_y = 5 + pixel_y = 1 }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) @@ -36253,6 +36303,10 @@ dir = 8 }, /area/station/hallway/primary/port) +"gYY" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "gZk" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -39637,6 +39691,10 @@ /obj/item/radio/intercom/directional/south, /turf/open/floor/iron/dark, /area/station/science/ordnance/testlab) +"hHV" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space) "hIa" = ( /turf/closed/wall/rust, /area/station/maintenance/aux_eva) @@ -49581,6 +49639,13 @@ /obj/structure/window/spawner/directional/south, /turf/open/floor/iron/white, /area/station/service/barber) +"jFq" = ( +/obj/machinery/conveyor{ + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "jFs" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, @@ -50802,6 +50867,9 @@ /obj/item/radio, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) +"jQP" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "jQR" = ( /obj/effect/turf_decal/stripes{ dir = 1 @@ -53484,6 +53552,14 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"kpF" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "kpG" = ( /obj/effect/spawner/random/trash/mess, /obj/effect/decal/cleanable/dirt, @@ -56345,6 +56421,10 @@ /obj/structure/rack/shelf, /turf/open/floor/wood/parquet, /area/station/common/gaskiosk) +"kTa" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "kTb" = ( /turf/closed/wall, /area/station/commons/storage/art) @@ -57497,6 +57577,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/cargo/miningdock) +"leI" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "leJ" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -59001,6 +59093,11 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/iron/dark, /area/station/security/power_station) +"luc" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) "luf" = ( /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet/red, @@ -63833,6 +63930,9 @@ }, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"msW" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "mtc" = ( /obj/effect/turf_decal/delivery, /obj/structure/rack, @@ -64224,6 +64324,12 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"mxv" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "mxE" = ( /obj/structure/table/reinforced, /obj/item/paper_bin{ @@ -64683,6 +64789,14 @@ }, /turf/open/floor/iron/dark, /area/station/hallway/secondary/entry) +"mBU" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "mBV" = ( /obj/structure/grille, /obj/effect/decal/cleanable/dirt, @@ -69885,6 +69999,14 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/station/science/ordnance) +"nEq" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "nEr" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -71407,6 +71529,9 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/station/commons/locker) +"nTQ" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "nTR" = ( /obj/structure/easel, /obj/item/canvas/twentythree_twentythree, @@ -75759,8 +75884,14 @@ }, /obj/item/folder/yellow, /obj/item/lighter, -/obj/item/stamp/head/ce, /obj/effect/turf_decal/tile/yellow/full, +/obj/item/stamp/granted{ + pixel_y = 11 + }, +/obj/item/stamp/denied{ + pixel_y = 6 + }, +/obj/item/stamp/head/ce, /turf/open/floor/iron/large, /area/station/command/heads_quarters/ce) "oKi" = ( @@ -77255,7 +77386,6 @@ dir = 4 }, /obj/item/folder/yellow, -/obj/item/stamp/head/qm, /obj/item/reagent_containers/cup/glass/drinkingglass/shotglass{ pixel_x = 6; pixel_y = 16 @@ -77269,6 +77399,13 @@ pixel_y = -8 }, /obj/structure/disposalpipe/segment, +/obj/item/stamp/granted{ + pixel_y = 11 + }, +/obj/item/stamp/denied{ + pixel_y = 6 + }, +/obj/item/stamp/head/qm, /turf/open/floor/wood/parquet, /area/station/cargo/quartermaster) "oYT" = ( @@ -77432,7 +77569,6 @@ /obj/structure/table/reinforced, /obj/item/folder/red, /obj/item/pen/red, -/obj/item/stamp/head/hos, /obj/machinery/keycard_auth{ pixel_x = 15 }, @@ -77440,6 +77576,15 @@ pixel_x = -7; pixel_y = 9 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/hos, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "paq" = ( @@ -80335,6 +80480,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/common/night_club/back_stage) +"pEB" = ( +/obj/structure/cable, +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "pEL" = ( /obj/structure/window/reinforced/spawner/directional/north, /obj/structure/window/reinforced/spawner/directional/west, @@ -83735,7 +83884,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, @@ -84357,6 +84506,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/fore/upper) +"qtX" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "qtY" = ( /obj/structure/railing, /turf/open/floor/iron/stairs/old{ @@ -85319,6 +85475,14 @@ /obj/structure/closet/crate/bin, /turf/open/floor/iron/dark, /area/station/hallway/primary/port) +"qCR" = ( +/obj/structure/cable, +/obj/machinery/computer/shipbreaker{ + dir = 1 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "qCS" = ( /obj/structure/flora/grass/jungle, /obj/structure/flora/bush/grassy, @@ -88185,6 +88349,10 @@ /obj/effect/turf_decal/tile/blue/half/contrasted, /turf/open/floor/iron/dark/side, /area/station/hallway/secondary/command) +"rfk" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/openspace, +/area/space/nearstation) "rfm" = ( /obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -88967,6 +89135,10 @@ /obj/machinery/digital_clock/directional/east, /turf/open/floor/wood, /area/station/command/captain_dining) +"rmU" = ( +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "rmY" = ( /obj/effect/turf_decal/trimline/purple/filled/warning{ dir = 10 @@ -91221,6 +91393,10 @@ dir = 8 }, /area/station/cargo/miningdock) +"rIj" = ( +/obj/effect/turf_decal/stripes, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "rIB" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -91414,6 +91590,17 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/station/science/ordnance) +"rKx" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "rKC" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt, @@ -92615,6 +92802,9 @@ }, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"rYL" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/shipbreaker_hut) "rYQ" = ( /obj/structure/closet/emcloset, /turf/open/floor/plating, @@ -99466,6 +99656,10 @@ }, /turf/open/floor/wood, /area/station/service/library/private) +"tnL" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "tnW" = ( /obj/structure/cable, /obj/effect/landmark/event_spawn, @@ -105388,6 +105582,11 @@ }, /turf/open/floor/iron, /area/station/medical/storage) +"utW" = ( +/obj/structure/lattice, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/openspace, +/area/space) "utX" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 8 @@ -108100,6 +108299,12 @@ }, /turf/open/floor/iron/dark/telecomms, /area/station/tcommsat/server) +"uUM" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "uUQ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ color = "#DE3A3A"; @@ -108442,6 +108647,14 @@ "uYq" = ( /obj/structure/table/glass, /obj/item/folder/white, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/rd, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) @@ -110947,6 +111160,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/science) +"vxe" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "vxf" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -116377,6 +116594,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/smooth_large, /area/station/cargo/storage) +"wwE" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "wwG" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage" @@ -118251,6 +118472,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"wPl" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/openspace, +/area/space/nearstation) "wPy" = ( /obj/effect/turf_decal/tile/neutral, /obj/machinery/camera/directional/east{ @@ -122430,6 +122656,13 @@ /obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/open/floor/iron/dark/side, /area/station/command/bridge) +"xGW" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "xHd" = ( /mob/living/basic/chicken/brown{ forced_gender = "male" @@ -123301,6 +123534,9 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/abandon_art_studio) +"xPK" = ( +/turf/open/space/basic, +/area/shipbreak) "xPO" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -124846,6 +125082,16 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/wood/large, /area/station/science/auxlab/firing_range) +"yfm" = ( +/obj/structure/rack, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = 6 + }, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = -5 + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "yfv" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -210888,34 +211134,34 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +hHV +hHV +hHV +hHV +fZI +fZI +fZI +fZI +fZI +fZI +fZI +fZI +fZI +fZI +fZI +hHV +hHV +hHV +hHV +fZI +fZI +fZI +fZI +cft +fZI +fZI +fZI ulx ulx ulx @@ -211145,34 +211391,34 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +hHV +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH ulx ulx ulx @@ -211402,35 +211648,35 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +hHV +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +fZI ulx ulx ulx @@ -211659,35 +211905,35 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +hHV +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -211916,35 +212162,35 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +kTa +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -212173,35 +212419,35 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +kTa +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -212429,36 +212675,36 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +luc +xJH +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -212685,37 +212931,37 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +luc +luc +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -212941,37 +213187,37 @@ ulx ulx ulx ulx +luc +luc ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -213186,8 +213432,49 @@ wGQ iVF iVF iVF +czg +rfk +rfk +rfk +rfk +rfk +czg +rfk +rfk +czg +czg +czg +luc ulx ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -213204,49 +213491,8 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -"} -(87,1,2) = {" +"} +(87,1,2) = {" ulx ulx ulx @@ -213444,48 +213690,48 @@ wVE mQV fNB ulx +czg +czg ulx ulx ulx +czg ulx +czg ulx +utW +czg +czg ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -213701,48 +213947,48 @@ wVE mQV mQV ulx +rfk +rfk ulx +rfk +rfk +czg ulx +czg +utW +utW ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +rYL +fqO +pEB +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -213958,48 +214204,48 @@ iVF iVF iVF iVF +czg +czg ulx +czg +czg +czg ulx +czg +utW ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +rYL +uUM +qCR +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -214215,48 +214461,48 @@ tcq tUx sXD iVF +czg +luc +luc +luc +czg +utW +utW +czg +czg ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fqO +gYY +yfm +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -214475,45 +214721,45 @@ iVF ulx ulx ulx +czg ulx ulx ulx ulx +czg ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fqO +gYY +vxe +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -214732,7 +214978,46 @@ iVF iVF ulx ulx +czg ulx +gcg +gcg +gcg +mQV +mQV +mQV +jQP +gYY +jQP +rIj +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +fZI ulx ulx ulx @@ -214748,47 +215033,8 @@ ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -"} -(93,1,2) = {" +"} +(93,1,2) = {" ulx ulx ulx @@ -214989,46 +215235,46 @@ wnO iVF ulx ulx +czg ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +wPl +wPl +wPl +gYY +gYY +gYY +gYY +gYY +jQP +rIj +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -215244,48 +215490,48 @@ qQM tcq tpk iVF -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +czg +czg +czg +czg +wPl +rmU +xGW +fsz +jQP +nTQ +nTQ +bDM +nTQ +nTQ +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -215503,46 +215749,46 @@ sXD iVF ulx ulx +czg ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +wPl +rmU +mBU +rYL +qtX +rYL +wwE +tnL +leI +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -215760,46 +216006,46 @@ tpk iVF ulx ulx +czg ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +wPl +rmU +nEq +jFq +kpF +fqO +mxv +msW +aLN +fqO +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -216017,46 +216263,46 @@ cDm iVF ulx ulx +czg ulx +wPl ulx ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +nTQ +fIN +msW +rKx +nTQ +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -216276,43 +216522,43 @@ iVF iVF iVF nvJ +aeF nvJ nvJ -nvJ -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +czg +czg +nTQ +nTQ +nTQ +fqO +nTQ +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH ulx ulx ulx @@ -216533,44 +216779,44 @@ pFZ jby iVF soz -soz +aeF soz nvJ nvJ nvJ -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +czg +czg +czg +czg +xJH +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +fZI ulx ulx ulx @@ -216790,7 +217036,7 @@ cBG cct akA soz -soz +aeF soz soz soz @@ -216799,35 +217045,35 @@ nvJ ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -217047,7 +217293,7 @@ vsZ fTd akA gLc -soz +aeF soz soz soz @@ -217056,35 +217302,35 @@ nvJ ulx ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -217304,7 +217550,7 @@ iVF iVF iVF gLc -gLc +aeF gLc soz soz @@ -217313,35 +217559,35 @@ nvJ nvJ ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -217561,7 +217807,7 @@ mzg wtH msH mWQ -mWQ +aeF gLc gLc soz @@ -217570,35 +217816,35 @@ soz nvJ ulx ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +fZI +xJH +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xPK +xJH +hHV ulx ulx ulx @@ -217818,44 +218064,44 @@ iVF iVF iVF gLc -mWQ +aeF gLc gLc soz soz soz nvJ -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx -ulx +cXY +cXY +cEh +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +xJH +hHV ulx ulx ulx @@ -218075,7 +218321,7 @@ iVF gLc gLc gLc -mWQ +aeF mQV gLc gLc @@ -218093,6 +218339,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -218103,8 +218350,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -218332,7 +218578,7 @@ iVF gLc gLc mQV -mWQ +aeF mQV gLc gLc @@ -218350,6 +218596,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -218360,8 +218607,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -218589,7 +218835,7 @@ iVF gLc gLc mQV -mWQ +aeF mQV mQV gLc @@ -218607,6 +218853,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -218617,8 +218864,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -218864,6 +219110,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -218874,8 +219121,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -219121,6 +219367,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -219131,8 +219378,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -219378,6 +219624,7 @@ ulx ulx ulx ulx +czg ulx ulx ulx @@ -219388,8 +219635,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -219635,6 +219881,7 @@ nvJ ulx ulx ulx +xJH ulx ulx ulx @@ -219645,8 +219892,7 @@ ulx ulx ulx ulx -ulx -ulx +czg ulx ulx ulx @@ -219903,7 +220149,7 @@ ulx ulx ulx ulx -ulx +czg ulx ulx ulx @@ -220160,7 +220406,7 @@ ulx ulx ulx ulx -ulx +czg ulx ulx ulx @@ -220417,7 +220663,7 @@ fwM fwM fwM fwM -fwM +bGK fwM fwM ulx diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 8be6a9fced01..c49ff8f8fab3 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -2304,7 +2304,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 9 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "aNK" = ( /obj/structure/closet/firecloset/full, /turf/open/floor/plating, @@ -2965,6 +2965,10 @@ /obj/effect/spawner/random/bureaucracy/stamp, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"aYq" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "aYu" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -9945,6 +9949,17 @@ /obj/structure/closet/secure_closet/bar, /turf/open/floor/wood, /area/station/service/bar/backroom) +"dia" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "did" = ( /obj/machinery/light/directional/west, /obj/structure/sign/poster/official/there_is_no_gas_giant/directional/west, @@ -14331,7 +14346,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 5 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "eGw" = ( /turf/open/floor/plating, /area/station/maintenance/central) @@ -14582,6 +14597,9 @@ /obj/machinery/telecomms/server/presets/command, /turf/open/floor/circuit/green/telecomms, /area/station/tcommsat/server) +"eKX" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "eKY" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -15216,6 +15234,18 @@ "eUW" = ( /turf/open/floor/wood, /area/station/service/chapel/funeral) +"eVx" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "eVz" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -15424,10 +15454,16 @@ /obj/machinery/status_display/ai/directional/west, /obj/structure/extinguisher_cabinet/directional/south, /obj/structure/table, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = -5 + }, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = 6 + }, /turf/open/floor/iron/dark/side/airless{ dir = 10 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "faw" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/light/small/directional/west, @@ -15486,6 +15522,15 @@ /obj/machinery/computer/exoscanner_control, /turf/open/floor/iron, /area/station/cargo/drone_bay) +"fbA" = ( +/obj/structure/frame/computer{ + anchored = 1; + dir = 4 + }, +/turf/open/floor/iron/dark/side/airless{ + dir = 8 + }, +/area/station/engineering/shipbreaker_hut) "fbE" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -15853,7 +15898,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 8 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "fhs" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 4 @@ -16902,7 +16947,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 10 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "fAa" = ( /obj/machinery/firealarm/directional/north{ pixel_x = -5 @@ -18178,7 +18223,7 @@ }, /obj/structure/cable, /turf/open/floor/iron/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "fVR" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -19736,6 +19781,9 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"gwf" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "gwq" = ( /obj/effect/turf_decal/siding/wood/corner{ dir = 1 @@ -23266,6 +23314,16 @@ "hxY" = ( /turf/closed/wall, /area/station/maintenance/central) +"hxZ" = ( +/obj/machinery/light/directional/west{ + dir = 4 + }, +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "hya" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ dir = 6 @@ -24095,7 +24153,7 @@ }, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/iron/dark/textured/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "hLs" = ( /obj/machinery/computer/security/telescreen/entertainment/directional/north, /obj/effect/landmark/start/gary/rare, @@ -24677,6 +24735,14 @@ /obj/structure/cable, /turf/open/floor/iron/dark, /area/station/security/brig) +"hVt" = ( +/obj/machinery/conveyor{ + id = "shitbreaker"; + dir = 4 + }, +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "hVF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24734,7 +24800,7 @@ "hXf" = ( /obj/structure/cable, /turf/open/floor/iron/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "hXt" = ( /turf/open/floor/iron/white, /area/station/science/genetics) @@ -25021,7 +25087,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 4 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "idJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/iron/dark/side{ @@ -27030,7 +27096,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 8 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "iLF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -27437,6 +27503,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) +"iRr" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "iRs" = ( /obj/structure/sign/poster/official/random/directional/east, /turf/open/floor/iron/dark/side{ @@ -27555,7 +27625,7 @@ }, /obj/effect/mapping_helpers/airlock/access/any/engineering/general, /turf/open/floor/iron/dark/textured/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "iUf" = ( /obj/structure/chair/sofa/bench/left{ dir = 4 @@ -32041,7 +32111,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 1 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "krQ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 9 @@ -33232,7 +33302,7 @@ /area/station/maintenance/department/science) "kND" = ( /turf/open/floor/glass/reinforced/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "kNH" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -37042,10 +37112,6 @@ pixel_y = 6 }, /obj/structure/table/wood, -/obj/item/stamp/centcom{ - pixel_x = 8; - pixel_y = 12 - }, /obj/item/stamp/granted{ pixel_y = 6; pixel_x = 8 @@ -38710,7 +38776,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 6 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "mzF" = ( /obj/effect/turf_decal/trimline/neutral/line{ dir = 4 @@ -41583,6 +41649,15 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/dark/textured, /area/station/hallway/primary/aft) +"nyZ" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/west, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "nzl" = ( /obj/machinery/firealarm/directional/east, /turf/open/floor/iron/dark, @@ -45154,6 +45229,12 @@ /obj/machinery/component_printer, /turf/open/floor/iron/white, /area/station/science/circuits) +"oIh" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "oIs" = ( /obj/machinery/camera/directional/east{ c_tag = "Command - Bridge, Hall, West"; @@ -47459,6 +47540,12 @@ "pvL" = ( /turf/closed/wall, /area/station/medical/psychology) +"pvQ" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "pwg" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -48226,6 +48313,9 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/service/hydroponics/garden) +"pHR" = ( +/turf/open/space/basic, +/area/shipbreak) "pHW" = ( /obj/machinery/atmospherics/pipe/layer_manifold/scrubbers/hidden{ dir = 4 @@ -48724,6 +48814,10 @@ /obj/machinery/light/directional/south, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"pRf" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "pRn" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, @@ -48749,6 +48843,15 @@ /obj/item/clothing/neck/stethoscope, /obj/item/flashlight/pen, /obj/item/clothing/glasses/hud/health, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/cmo, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "pSn" = ( @@ -54557,7 +54660,7 @@ /obj/structure/reagent_dispensers/watertank, /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/iron/dark/side/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "rQs" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -54583,9 +54686,17 @@ pixel_x = 7; pixel_y = 5 }, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = 7 + }, /obj/item/stamp/head/hos{ pixel_x = 7; - pixel_y = 6 + pixel_y = 7 + }, +/obj/item/stamp/denied{ + pixel_x = 7; + pixel_y = 3 }, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) @@ -56368,7 +56479,7 @@ /area/station/service/lawoffice) "sxb" = ( /turf/closed/wall/r_wall, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "sxf" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 1 @@ -57066,7 +57177,7 @@ "sKS" = ( /obj/structure/cable, /turf/open/floor/iron/dark/side/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "sKX" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible/layer2{ @@ -57476,6 +57587,14 @@ dir = 1 }, /area/station/commons/storage/primary) +"sQK" = ( +/obj/machinery/light/directional/west, +/obj/machinery/conveyor/inverted{ + dir = 9; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "sQL" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -59617,6 +59736,10 @@ dir = 4 }, /area/station/commons/dorms) +"txb" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "txf" = ( /obj/machinery/atmospherics/components/trinary/mixer/airmix{ dir = 1 @@ -60273,6 +60396,17 @@ /obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, /turf/open/floor/engine/n2o, /area/station/engineering/atmos) +"tJo" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "tJu" = ( /obj/machinery/atmospherics/pipe/smart/simple/scrubbers/visible, /obj/structure/cable, @@ -62040,7 +62174,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 9 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "umX" = ( /obj/effect/mapping_helpers/iannewyear, /turf/open/floor/carpet/royalblue, @@ -62131,7 +62265,7 @@ "uoC" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "uoE" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -63009,6 +63143,10 @@ /obj/machinery/duct, /turf/open/floor/iron/white, /area/station/medical/medbay/aft) +"uEM" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "uEU" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 @@ -63565,7 +63703,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 5 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "uMz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -64375,7 +64513,7 @@ /turf/open/floor/iron/dark/side/airless{ dir = 1 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "vac" = ( /obj/structure/closet/crate, /obj/item/stock_parts/micro_laser, @@ -67066,7 +67204,7 @@ /area/station/engineering/atmos) "vOV" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "vOX" = ( @@ -67375,6 +67513,10 @@ /obj/item/toy/figure/rd{ pixel_x = -13 }, +/obj/item/stamp/denied{ + pixel_y = 5 + }, +/obj/item/stamp/granted, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "vSE" = ( @@ -67466,6 +67608,14 @@ /obj/item/paper_bin, /obj/item/folder/blue, /obj/item/pen/fountain, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain) @@ -69557,6 +69707,12 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron/large, /area/station/engineering/storage) +"wCP" = ( +/obj/machinery/conveyor{ + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "wCX" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/machinery/light/small/directional/west, @@ -70308,6 +70464,13 @@ /obj/machinery/duct, /turf/open/floor/iron/dark, /area/station/command/bridge) +"wPq" = ( +/obj/machinery/conveyor{ + id = "shitbreaker"; + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "wPy" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -70422,11 +70585,11 @@ /turf/open/floor/catwalk_floor, /area/station/maintenance/starboard/aft) "wRh" = ( -/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/iron/dark/side/airless{ dir = 6 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "wRs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/random/structure/grille, @@ -70553,6 +70716,9 @@ /obj/machinery/status_display/ai/directional/west, /turf/open/floor/iron/dark, /area/station/engineering/engine_smes) +"wUb" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "wUe" = ( /obj/machinery/digital_clock/directional/east, /turf/open/floor/wood/large, @@ -71745,14 +71911,13 @@ /turf/open/floor/iron/dark/side, /area/station/service/hydroponics) "xqV" = ( -/obj/structure/frame/computer{ - anchored = 1; +/obj/machinery/computer/shipbreaker{ dir = 4 }, /turf/open/floor/iron/dark/side/airless{ dir = 8 }, -/area/station/maintenance/space_hut) +/area/station/engineering/shipbreaker_hut) "xqW" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/effect/turf_decal/bot_red, @@ -72452,6 +72617,14 @@ /obj/item/pen{ pixel_y = 4 }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) @@ -82328,31 +82501,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -82585,31 +82758,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -82842,31 +83015,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -83099,31 +83272,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -83356,31 +83529,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -83613,31 +83786,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -83870,31 +84043,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -84127,31 +84300,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -84384,31 +84557,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -84641,31 +84814,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -84898,31 +85071,31 @@ ksa ndy uoo rxc -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR rxc uoo ndy @@ -85155,31 +85328,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -85412,31 +85585,31 @@ ksa ndy uoo aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH uoo ndy @@ -85669,31 +85842,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -85926,31 +86099,31 @@ ksa ndy uoo rxc -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR rxc uoo ndy @@ -86183,31 +86356,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -86440,7 +86613,34 @@ ksa fdt ksa aVH +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +aVH ksa +fdt ksa ksa ksa @@ -86465,9 +86665,6 @@ ksa ksa ksa ksa -aVH -ksa -fdt ksa ksa ksa @@ -86476,32 +86673,8 @@ ksa ksa ksa ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -"} -(47,1,1) = {" +"} +(47,1,1) = {" ksa ksa ksa @@ -86697,31 +86870,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -86954,31 +87127,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -87211,31 +87384,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -87468,31 +87641,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -87725,31 +87898,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -87982,31 +88155,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -88239,31 +88412,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -88496,31 +88669,31 @@ ksa fdt ksa aVH -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa -ksa +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR +pHR aVH ksa fdt @@ -92619,12 +92792,12 @@ uoo ksa uoo ksa -ksa aVH -ksa -ksa -ksa -ksa +aVH +aVH +uEM +gwf +gwf ksa ksa ksa @@ -92878,12 +93051,10 @@ sxb iCE uoo aVH -uoo -fdt -ksa -ksa -ksa -ksa +wUb +wCP +sQK +gwf ksa ksa ksa @@ -92891,6 +93062,8 @@ ksa ksa ksa ksa +uoo +fdt ksa ksa ksa @@ -93129,17 +93302,16 @@ sxb aNC fho xqV -xqV +fbA fak sxb uoo -ksa aVH -ksa -fdt -ksa -ksa -ksa +aVH +wUb +nyZ +hVt +gwf ksa ksa ksa @@ -93148,6 +93320,7 @@ ksa ksa ksa ksa +fdt ksa ksa ksa @@ -93392,19 +93565,19 @@ hLk vCp vCp vCp -uoo -fdt -ksa -ksa -ksa -ksa -ksa +wUb +wPq +hxZ +gwf +gwf ksa ksa ksa ksa ksa ksa +uoo +fdt ksa ksa ksa @@ -93647,14 +93820,13 @@ idr mzC sxb uoo -ksa +aVH vCp -ksa -fdt -ksa -ksa -ksa -ksa +wUb +wUb +wUb +wUb +gwf ksa ksa ksa @@ -93662,6 +93834,7 @@ ksa ksa ksa ksa +fdt ksa ksa ksa @@ -93907,18 +94080,18 @@ iCE uoo vCp uoo -fdt -ksa -ksa -ksa -ksa -ksa -ksa +gwf +gwf +pvQ +gwf +gwf ksa ksa ksa ksa ksa +uoo +fdt ksa uoo ksa @@ -94164,11 +94337,11 @@ uoo ksa vCp ksa -ksa -ksa -ksa -ksa -ksa +pRf +iRr +aYq +eVx +pRf ksa ksa ksa @@ -94420,12 +94593,12 @@ uoo jra vCp vCp -ksa -ksa -ksa -ksa -ksa -ksa +uoo +pRf +oIh +eKX +dia +pRf ksa ksa ksa @@ -94678,13 +94851,13 @@ uoo ksa aVH ksa +gwf +txb +eKX +tJo +gwf ksa ksa -uoo -ksa -uoo -ksa -uoo ksa ksa ksa @@ -94934,14 +95107,14 @@ uoo uoo uoo aVH +uoo +gwf +gwf +gwf +pRf +gwf ksa ksa -fdt -niB -niB -niB -niB -niB niB fdt uoo @@ -95194,11 +95367,11 @@ aVH ksa ksa ksa -uoo ksa -uoo ksa -uoo +ksa +ksa +ksa ksa ksa ksa diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index caa613104c32..37467164a3b1 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -838,6 +838,9 @@ }, /turf/open/floor/iron, /area/station/maintenance/department/eva/abandoned) +"ajt" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "ajG" = ( /obj/effect/turf_decal/tile/purple/half/contrasted{ dir = 8 @@ -9831,6 +9834,16 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"ckI" = ( +/obj/machinery/light/directional/west{ + dir = 4 + }, +/obj/machinery/conveyor/inverted{ + dir = 10; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "ckP" = ( /turf/open/floor/plating, /area/station/maintenance/starboard/aft) @@ -11211,6 +11224,14 @@ pixel_x = 3; pixel_y = 3 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) @@ -12034,6 +12055,14 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/wood, /area/station/service/theater) +"cMz" = ( +/obj/machinery/conveyor{ + id = "shitbreaker"; + dir = 4 + }, +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "cMA" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 @@ -12516,6 +12545,9 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) +"cSQ" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "cTc" = ( /obj/effect/turf_decal/tile/dark_blue/opposingcorners, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -24855,6 +24887,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/dark, /area/station/security/execution/education) +"fRf" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "fRi" = ( /turf/open/floor/iron/vaporwave, /area/station/security/prison/mess) @@ -25936,6 +25974,17 @@ }, /turf/open/floor/wood, /area/station/service/lawoffice) +"geD" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "geG" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/valve/digital{ @@ -30010,6 +30059,10 @@ }, /turf/open/floor/iron, /area/station/maintenance/port/fore) +"hcH" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "hcK" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -30981,6 +31034,12 @@ /obj/structure/cable, /turf/open/floor/iron/smooth, /area/station/maintenance/department/science/xenobiology) +"hnZ" = ( +/obj/machinery/atmospherics/pipe/smart/simple/orange/visible, +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/space/nearstation) "hoh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 4 @@ -32795,6 +32854,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/commons/toilet/locker) +"hNL" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/shipbreaker_hut) "hNO" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral{ @@ -32886,6 +32948,17 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine, /area/station/science/research) +"hON" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "hOT" = ( /obj/effect/turf_decal/stripes/end, /obj/machinery/shower/directional/south, @@ -35973,6 +36046,10 @@ /obj/structure/transit_tube/station/dispenser/reverse/flipped, /turf/open/floor/iron/dark, /area/station/engineering/transit_tube) +"iyd" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "iyk" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -44151,10 +44228,15 @@ /obj/item/pen/red{ pixel_x = 1 }, -/obj/item/stamp/head/hos{ - pixel_x = 1; - pixel_y = -1 +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 }, +/obj/item/stamp/head/hos, /turf/open/floor/iron/grimy, /area/station/command/heads_quarters/hos) "kri" = ( @@ -48772,6 +48854,9 @@ /obj/machinery/status_display/ai/directional/south, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"lxy" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "lxF" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -53345,6 +53430,10 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron/dark, /area/station/service/cafeteria) +"mCh" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "mCn" = ( /obj/machinery/duct, /obj/machinery/vending/wallmed/directional/east, @@ -54934,6 +55023,18 @@ dir = 8 }, /area/station/science/lobby) +"mUu" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "mUL" = ( /obj/effect/spawner/structure/window, /turf/open/floor/plating, @@ -55458,7 +55559,6 @@ "nbs" = ( /obj/structure/table/wood, /obj/item/paper_bin/carbon, -/obj/item/stamp/head/hop, /obj/machinery/requests_console/directional/north{ anon_tips_receiver = 1; assistance_requestable = 1; @@ -55466,6 +55566,15 @@ name = "Head of Personnel's Requests Console"; can_send_announcements = 1 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "nbv" = ( @@ -57403,6 +57512,10 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"nBA" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "nBC" = ( /obj/item/kirbyplants/random, /obj/machinery/light/small/directional/north, @@ -59684,6 +59797,10 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/maintenance/disposal) +"oeZ" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "ofa" = ( /obj/machinery/light/small/directional/west, /obj/structure/chair/office/light, @@ -59840,6 +59957,10 @@ /obj/machinery/stove, /turf/open/floor/iron/cafeteria, /area/station/service/kitchen) +"ogz" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "ogA" = ( /obj/structure/table/reinforced, /obj/item/folder/white, @@ -60440,6 +60561,13 @@ }, /turf/open/floor/iron, /area/station/security/execution/transfer) +"onz" = ( +/obj/structure/window, +/obj/machinery/conveyor_switch/oneway{ + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "onK" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -61159,6 +61287,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/medical/medbay) +"oyK" = ( +/obj/machinery/computer/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "oyY" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable, @@ -62884,6 +63016,13 @@ /obj/effect/landmark/start/paramedic, /turf/open/floor/iron/white, /area/station/medical/paramedic) +"oUJ" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/structure/cable, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "oUU" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet, @@ -68441,12 +68580,12 @@ }, /obj/item/folder/blue, /obj/item/paper_bin/carbon, -/obj/item/stamp{ - pixel_x = -6 - }, /obj/item/stamp/denied{ pixel_x = -6; - pixel_y = 4 + pixel_y = 8 + }, +/obj/item/stamp{ + pixel_x = -6 }, /obj/item/pen/fountain{ pixel_y = 10 @@ -72102,6 +72241,14 @@ /obj/item/folder/yellow, /obj/item/stamp/head/qm, /obj/effect/turf_decal/tile/neutral/fourcorners, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /turf/open/floor/iron, /area/station/cargo/quartermaster) "rfH" = ( @@ -72656,7 +72803,7 @@ dir = 1 }, /obj/item/radio/intercom/directional/south, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron, /area/station/command/heads_quarters/cmo) "rlC" = ( @@ -75391,6 +75538,12 @@ /obj/effect/spawner/random/trash/soap, /turf/open/floor/iron, /area/station/maintenance/department/medical/morgue) +"rSw" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "rSJ" = ( /obj/machinery/telecomms/server/presets/engineering, /obj/effect/turf_decal/tile/brown/anticorner/contrasted{ @@ -77673,7 +77826,7 @@ /turf/open/floor/plating, /area/station/maintenance/port/aft) "sxb" = ( -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Kattail" }, /obj/structure/cable, @@ -79212,6 +79365,14 @@ /obj/structure/table/wood, /obj/item/folder/blue, /obj/item/pen/fourcolor, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/captain, /obj/machinery/door/window/brigdoor/left/directional/north{ name = "Captain's Desk"; @@ -79939,6 +80100,7 @@ /obj/structure/sign/nanotrasen{ pixel_x = 32 }, +/obj/structure/cable, /turf/open/space/basic, /area/space/nearstation) "sXI" = ( @@ -80158,6 +80320,16 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/medical/abandoned) +"sZB" = ( +/obj/structure/rack, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = 6 + }, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = -5 + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "sZC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -83933,6 +84105,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/treatment_center) +"tWr" = ( +/turf/open/space/basic, +/area/shipbreak) "tWv" = ( /obj/effect/turf_decal/tile/neutral/fourcorners, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -85274,6 +85449,10 @@ /mob/living/basic/cockroach, /turf/open/floor/iron/grimy, /area/station/commons/vacant_room/office) +"umy" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "umz" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ @@ -85523,13 +85702,21 @@ /obj/structure/table/glass, /obj/effect/turf_decal/tile/blue/opposingcorners, /obj/item/paper_bin, -/obj/item/stamp/head/cmo, /obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "upB" = ( @@ -87391,6 +87578,14 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"uNL" = ( +/obj/machinery/light/directional/west, +/obj/machinery/conveyor{ + id = "shitbreaker"; + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "uNQ" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, @@ -93203,6 +93398,10 @@ }, /turf/open/floor/iron, /area/station/engineering/lobby) +"wij" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "wil" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -99273,6 +99472,14 @@ "xEe" = ( /obj/structure/table/reinforced, /obj/item/folder/white, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/rd, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) @@ -110512,7 +110719,7 @@ aaa aaa aaa aaa -aaa +wVj aaa aaa aaa @@ -111268,7 +111475,7 @@ aaa aaa aaa aaa -aaa +wVj aaa aaa aaa @@ -111770,7 +111977,7 @@ aaa aaa aaa aaa -aaa +wVj aaa aaa aaa @@ -113318,33 +113525,33 @@ aaa aaa aaa aaa +mCh +mCh +mCh +mCh +mCh +mCh +mCh +mCh aaa +mCh +mCh +mCh +mCh +mCh +mCh +mCh +mCh +mCh aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +mCh +mCh +mCh +mCh +mCh +mCh +mCh aaa aaa aaa @@ -113575,33 +113782,33 @@ aaa aaa aaa aaa +mCh aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo aaa aaa aaa @@ -113832,34 +114039,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -wVj -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -114089,34 +114296,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -114346,34 +114553,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -114603,34 +114810,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -114860,34 +115067,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -115117,34 +115324,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -115375,40 +115582,40 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +qYo +hcH +hcH +hNL +hcH +lxy +lxy aaa aaa aaa @@ -115631,41 +115838,41 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hcH +oyK +nBA +ajt +uNL +lxy aaa aaa aaa @@ -115888,43 +116095,43 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +qYo +hNL +oUJ +oeZ +onz +cMz +lxy +aaa +aaa aaa qYo aaa @@ -116145,41 +116352,41 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hcH +sZB +oeZ +ajt +ckI +lxy aaa aaa aaa @@ -116403,40 +116610,40 @@ aaa aaa aaa aaa +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +hcH +hcH +oeZ +hcH +lxy +lxy aaa aaa aaa @@ -116639,6 +116846,7 @@ aaa aaa aaa aaa +wVj aaa aaa aaa @@ -116658,17 +116866,65 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +vVc +vVc +vVc +chp +vVc +vVc +vVc +vVc +vVc aaa +efQ aaa +qYo aaa +qYo aaa +aad aaa +vVc aaa +oPn aaa +aad aaa +aad aaa aaa aaa +efQ +qYo +efQ aaa aaa aaa @@ -116697,27 +116953,16 @@ aaa aaa aaa aaa -efQ aaa -qYo aaa -qYo aaa -aad aaa -vVc aaa -oPn aaa -aad aaa -aad aaa aaa aaa -efQ -qYo -efQ aaa aaa aaa @@ -116728,7 +116973,11 @@ aaa aaa aaa aaa +aad +aad aaa +aad +aad aaa aaa aaa @@ -116766,11 +117015,7 @@ aaa aaa aaa aaa -aad -aad aaa -aad -aad aaa aaa aaa @@ -116799,6 +117044,8 @@ aaa aaa aaa aaa +"} +(59,1,1) = {" aaa aaa aaa @@ -116837,8 +117084,6 @@ aaa aaa aaa aaa -"} -(59,1,1) = {" aaa aaa aaa @@ -116878,16 +117123,65 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +vVc +vVc +vVc +chp +chp +chp +chp +chp +chp +qYo +efQ +qYo +efQ aaa +qYo aaa +aad aaa +vVc aaa +oPn aaa +aad aaa +aad aaa aaa aaa +efQ aaa +qYo aaa aaa aaa @@ -116937,7 +117231,9 @@ aaa aaa aaa aaa +aad aaa +aad aaa aaa aaa @@ -116954,27 +117250,16 @@ aaa aaa aaa aaa -efQ -qYo -efQ aaa -qYo aaa -aad aaa -vVc aaa -oPn aaa -aad aaa -aad aaa aaa aaa -efQ aaa -qYo aaa aaa aaa @@ -117016,6 +117301,8 @@ aaa aaa aaa aaa +"} +(60,1,1) = {" aaa aaa aaa @@ -117024,9 +117311,7 @@ aaa aaa aaa aaa -aad aaa -aad aaa aaa aaa @@ -117094,9 +117379,66 @@ aaa aaa aaa aaa -"} -(60,1,1) = {" aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +vVc +vVc +vVc +chp +vVc +vVc +vVc +vVc +chp +aaa +qYo +aaa +efQ +qYo +qYo +aad +aad +aad +vVc +aad +cXx +aad +aad +aad +aad +aad +qYo +qYo +efQ +aaa +efQ aaa aaa aaa @@ -117146,7 +117488,9 @@ aaa aaa aaa aaa +abj aaa +abj aaa aaa aaa @@ -117211,27 +117555,13 @@ aaa aaa aaa aaa -qYo aaa -efQ -qYo -qYo -aad -aad -aad -vVc -aad -cXx -aad -aad -aad -aad -aad -qYo -qYo -efQ aaa -efQ +aaa +"} +(61,1,1) = {" +aaa +aaa aaa aaa aaa @@ -117281,9 +117611,7 @@ aaa aaa aaa aaa -abj aaa -abj aaa aaa aaa @@ -117309,16 +117637,65 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +aaa +aaa +aaa +chp +vVc +aaa aaa aaa +chp +aaa +uHd +qYo +uHd +qYo +qYo aaa +aad aaa +vVc aaa +oPn aaa +aad aaa +aad aaa aaa aaa +efQ +qYo +efQ aaa aaa aaa @@ -117332,9 +117709,12 @@ aaa aaa aaa aaa +vVc aaa aaa +eqU aaa +wVj aaa aaa aaa @@ -117351,8 +117731,6 @@ aaa aaa aaa aaa -"} -(61,1,1) = {" aaa aaa aaa @@ -117367,7 +117745,9 @@ aaa aaa aaa aaa +aad aaa +aad aaa aaa aaa @@ -117435,6 +117815,8 @@ aaa aaa aaa aaa +"} +(62,1,1) = {" aaa aaa aaa @@ -117468,27 +117850,13 @@ aaa aaa aaa aaa -uHd -qYo -uHd -qYo -qYo aaa -aad aaa -vVc aaa -oPn aaa -aad -aaa -aad aaa aaa aaa -efQ -qYo -efQ aaa aaa aaa @@ -117502,12 +117870,8 @@ aaa aaa aaa aaa -vVc aaa aaa -eqU -aaa -wVj aaa aaa aaa @@ -117530,13 +117894,55 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo +lxy +lxy +lxy +fRf +lxy +lxy aaa aaa +chp aaa +qYo aaa +aad +eqU +qYo aaa +aad aaa +vVc aaa +oPn aaa aad aaa @@ -117544,16 +117950,24 @@ aad aaa aaa aaa +qYo aaa +efQ aaa aaa aaa +qYo aaa aaa aaa +qYo aaa aaa aaa +qYo +vVc +vVc +vVc aaa aaa aaa @@ -117577,6 +117991,7 @@ aaa aaa aaa aaa +wVj aaa aaa aaa @@ -117587,7 +118002,9 @@ aaa aaa aaa aaa +aad aaa +aad aaa aaa aaa @@ -117608,8 +118025,6 @@ aaa aaa aaa aaa -"} -(62,1,1) = {" aaa aaa aaa @@ -117657,6 +118072,8 @@ aaa aaa aaa aaa +"} +(63,1,1) = {" aaa aaa aaa @@ -117725,43 +118142,91 @@ aaa aaa aaa aaa -qYo aaa -aad -eqU -qYo aaa -aad aaa -vVc aaa -oPn aaa -aad aaa -aad aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr qYo +qYo +umy +iyd +wij +mUu +umy aaa -efQ aaa +chp aaa +uHd aaa qYo -aaa -aaa -aaa qYo -aaa -aaa +qYo aaa qYo +aad vVc +aad +oRu +aad +aad +aad +aad +aad +qYo +qYo +efQ +qYo +efQ +lvw +uHd +uHd +uHd +uHd +qYo +uHd +uHd +uHd +uHd +qYo +uHd +uHd vVc -vVc -aaa +lvw +qYo +uHd aaa aaa aaa @@ -117784,7 +118249,6 @@ aaa aaa aaa aaa -wVj aaa aaa aaa @@ -117805,7 +118269,7 @@ aaa aaa aaa aaa -aaa +aab aaa aaa aaa @@ -117866,19 +118330,7 @@ aaa aaa aaa "} -(63,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +(64,1,1) = {" aaa aaa aaa @@ -117947,6 +118399,7 @@ aaa aaa aaa aaa +eqU aaa aaa aaa @@ -117955,60 +118408,87 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa +umy +rSw +cSQ +geD +umy aaa aaa +chp aaa +uHd aaa +uHd aaa +qYo aaa +qYo aaa +vVc aaa +oPn aaa +aad aaa +aad aaa aaa aaa +efQ aaa +qYo aaa aaa +qYo aaa aaa aaa aaa aaa +qYo aaa aaa aaa +qYo +vVc aaa aaa uHd -aaa -qYo -qYo -qYo -aaa qYo -aad -vVc -aad -oRu -aad -aad -aad -aad -aad -qYo -qYo -efQ -qYo -efQ -lvw -uHd uHd +qYo uHd uHd -qYo uHd uHd uHd @@ -118016,23 +118496,7 @@ uHd qYo uHd uHd -vVc -lvw qYo -uHd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -118062,16 +118526,6 @@ aaa aaa aaa aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -118122,34 +118576,6 @@ aaa aaa aaa aaa -"} -(64,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -118160,6 +118586,8 @@ aaa aaa aaa aaa +"} +(65,1,1) = {" aaa aaa aaa @@ -118192,7 +118620,6 @@ aaa aaa aaa aaa -aab aaa aaa aaa @@ -118204,6 +118631,7 @@ aaa aaa aaa aaa +wVj aaa aaa aaa @@ -118237,10 +118665,46 @@ aaa aaa aaa aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa +lxy +ogz +cSQ +hON +lxy aaa -uHd aaa +chp +qYo +qYo +qYo uHd aaa qYo @@ -118259,7 +118723,7 @@ aaa aaa efQ aaa -qYo +efQ aaa aaa qYo @@ -118276,21 +118740,21 @@ qYo vVc aaa aaa -uHd +lvw +vVc +wyV +nET qYo -uHd +aaa qYo -uHd -uHd -uHd -uHd -uHd -uHd qYo -uHd -uHd +aaa +qYo +aaa +nET qYo aaa +uHd aaa aaa aaa @@ -118380,23 +118844,7 @@ aaa aaa aaa "} -(65,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +(66,1,1) = {" aaa aaa aaa @@ -118424,7 +118872,6 @@ aaa aaa aaa aaa -wVj aaa aaa aaa @@ -118475,283 +118922,43 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -qYo -qYo -uHd -aaa -qYo -aaa -qYo -aaa -vVc -aaa -oPn -aaa -aad -aaa -aad -aaa -aaa -aaa -efQ -aaa -efQ -aaa -aaa +mCh qYo -aaa -aaa -aaa -aaa -aaa -qYo -aaa -aaa -aaa +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr qYo -vVc -aaa -aaa -lvw -vVc -wyV -nET -qYo -aaa qYo -qYo -aaa -qYo -aaa -nET -qYo -aaa -uHd -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aad -aaa -aad -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(66,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -wVj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lxy +lxy +lxy +umy +lxy aaa aaa +chp aaa uHd aaa @@ -118972,34 +119179,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -119007,9 +119214,9 @@ aaa qYo qYo uHd -uHd qYo -uHd +chp +qYo uHd aaa qYo @@ -119229,34 +119436,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -wVj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -119265,7 +119472,7 @@ aaa qYo aaa aaa -qYo +chp aaa aaa aaa @@ -119486,34 +119693,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -119521,9 +119728,9 @@ aaa aaa uHd qYo -uHd -uHd -uHd +qYo +chp +qYo qYo uHd uHd @@ -119743,34 +119950,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -119779,7 +119986,7 @@ aaa xNe aaa aaa -qYo +chp aaa aaa qYo @@ -120000,34 +120207,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mCh +qYo +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +tWr +qYo aaa aaa aaa @@ -120036,9 +120243,9 @@ aaa efQ qYo wes -gnH +hnZ sXE -gnH +hnZ wFJ wFJ uPM @@ -120259,31 +120466,31 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo +qYo aaa aaa aaa diff --git a/_maps/map_files/Graveyard/Graveyard.dmm b/_maps/map_files/Graveyard/Graveyard.dmm index 3ddc9961a7bf..4f804b125dbc 100644 --- a/_maps/map_files/Graveyard/Graveyard.dmm +++ b/_maps/map_files/Graveyard/Graveyard.dmm @@ -11451,7 +11451,7 @@ /area/station/security/prison/safe) "evF" = ( /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/item/toy/cattoy, /obj/machinery/requests_console/auto_name/directional/west, /obj/effect/mapping_helpers/requests_console/announcement, diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 1f512c9c8246..c24644de3e3c 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -5784,10 +5784,15 @@ /obj/structure/table, /obj/item/folder/white, /obj/item/pen, -/obj/item/stamp/head/rd{ - pixel_x = 3; - pixel_y = -2 +/obj/item/stamp/granted{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 }, +/obj/item/stamp/head/rd, /turf/open/floor/iron, /area/station/command/heads_quarters/rd) "bOg" = ( @@ -13427,6 +13432,14 @@ /area/station/engineering/main) "efV" = ( /obj/structure/table, +/obj/item/stamp/granted{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/qm, /turf/open/floor/carpet, /area/station/cargo/quartermaster) @@ -30894,6 +30907,14 @@ pixel_y = 7 }, /obj/item/pen, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -6; + pixel_y = 4 + }, /obj/item/stamp/head/hop, /turf/open/floor/iron, /area/station/command/heads_quarters/hop) @@ -32044,9 +32065,17 @@ /obj/machinery/light/directional/east, /obj/structure/table/glass, /obj/item/folder/white, -/obj/item/stamp/head/cmo, /obj/item/clothing/neck/stethoscope, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/stamp/denied{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stamp/granted{ + pixel_x = 4; + pixel_y = 5 + }, +/obj/item/stamp/head/cmo, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "klk" = ( @@ -42878,7 +42907,7 @@ /obj/item/folder/blue, /obj/item/stamp/denied{ pixel_x = -6; - pixel_y = 4 + pixel_y = 10 }, /obj/item/stamp{ pixel_x = -6 @@ -51149,6 +51178,14 @@ /obj/item/folder/blue{ pixel_x = 10 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/captain, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain) @@ -65899,6 +65936,10 @@ pixel_x = 8; pixel_y = 3 }, +/obj/item/stamp/granted{ + pixel_y = 10; + pixel_x = 10 + }, /obj/item/stamp/head/hos{ pixel_x = 10; pixel_y = 6 @@ -65912,6 +65953,10 @@ pixel_x = -9; pixel_y = 7 }, +/obj/item/stamp/denied{ + pixel_x = 10; + pixel_y = 2 + }, /turf/open/floor/wood/large, /area/station/command/heads_quarters/hos) "vcO" = ( @@ -70152,7 +70197,7 @@ /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, /obj/machinery/newscaster/directional/north, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "wwo" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index a24b08a60efe..448b8b510060 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -1923,6 +1923,10 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) +"aBW" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "aCE" = ( /obj/machinery/atmospherics/components/tank/air{ dir = 8; @@ -3201,6 +3205,24 @@ /obj/effect/turf_decal/stripes/box, /turf/open/floor/iron/dark, /area/station/security/office) +"aZf" = ( +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/yellow/filled/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/machinery/door/airlock/engineering/glass/critical{ + name = "PTL Access" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/fans/tiny, +/turf/open/floor/iron/dark, +/area/station/engineering/gravity_generator) "aZg" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -4452,6 +4474,10 @@ pixel_y = 7 }, /obj/item/pen, +/obj/item/stamp/granted{ + pixel_y = 10; + pixel_x = 8 + }, /obj/item/stamp/head/captain{ pixel_x = 8; pixel_y = 6 @@ -4459,6 +4485,10 @@ /obj/item/pen/fountain/captain, /obj/item/radio/intercom/directional/south, /obj/structure/table/wood, +/obj/item/stamp/denied{ + pixel_y = 2; + pixel_x = 8 + }, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) "bvR" = ( @@ -7691,6 +7721,17 @@ /obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/solars/port/aft) +"cpD" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "cpU" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -7878,7 +7919,7 @@ /obj/machinery/airalarm/directional/west, /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 8 }, @@ -10557,6 +10598,14 @@ }, /turf/open/floor/iron, /area/station/cargo/storage) +"dol" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "dom" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -11136,6 +11185,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/engineering/atmos/pumproom) +"dxl" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "dxm" = ( /obj/structure/sign/warning/secure_area, /turf/closed/wall/rust, @@ -14247,6 +14300,15 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) +"ezR" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "ezX" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/turf_decal/bot, @@ -19500,13 +19562,17 @@ "ggK" = ( /obj/structure/cable, /obj/structure/table/wood, -/obj/item/stamp/head/hos, +/obj/item/clipboard, +/obj/item/folder/red, /obj/item/stamp/denied{ - pixel_x = 4; + pixel_x = -5; pixel_y = 4 }, -/obj/item/folder/red, -/obj/item/clipboard, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/head/hos, /turf/open/floor/carpet/red, /area/station/command/heads_quarters/hos) "ggN" = ( @@ -22729,8 +22795,16 @@ }, /obj/item/lighter, /obj/item/clothing/mask/cigarette/cigar/cohiba, -/obj/item/stamp/head/ce, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/head/ce, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "hhG" = ( @@ -22808,7 +22882,7 @@ }, /obj/effect/mapping_helpers/airlock/access/all/engineering/construction, /obj/structure/cable/layer1, -/turf/open/floor/iron/dark, +/turf/open/space/basic, /area/station/maintenance/starboard/aft) "hja" = ( /obj/structure/cable, @@ -24463,6 +24537,11 @@ }, /turf/open/floor/engine, /area/station/ai_monitored/turret_protected/ai_upload) +"hIc" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/solars/starboard/aft) "hIk" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance_hatch, @@ -29847,9 +29926,16 @@ /turf/open/floor/iron/dark, /area/station/command/heads_quarters/captain) "jgc" = ( -/obj/effect/turf_decal/sand/plating, -/turf/closed/wall/r_wall, -/area/station/engineering/gravity_generator) +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "jge" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -31215,6 +31301,9 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/exit/departure_lounge) +"jDV" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "jEd" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral, @@ -31354,6 +31443,10 @@ pixel_y = 6 }, /obj/item/pen/fourcolor, +/obj/item/stamp/granted{ + pixel_y = 10; + pixel_x = 8 + }, /obj/item/stamp/head/hop{ pixel_x = 8; pixel_y = 6 @@ -31365,6 +31458,10 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral, +/obj/item/stamp/denied{ + pixel_y = 2; + pixel_x = 8 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/hop) "jGU" = ( @@ -31936,6 +32033,11 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/maintenance/abandon_wrestle) +"jQq" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "jQr" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -32378,6 +32480,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"jWK" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "jWL" = ( /obj/machinery/vending/tool, /obj/effect/turf_decal/bot, @@ -32419,6 +32527,17 @@ /obj/structure/ghost_critter_spawn, /turf/open/floor/wood, /area/station/commons/fitness/recreation) +"jXC" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) +"jXJ" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "jXM" = ( /obj/effect/turf_decal/box, /obj/structure/cable, @@ -33112,6 +33231,12 @@ /obj/machinery/status_display/ai/directional/north, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) +"klT" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "kml" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance, @@ -34397,10 +34522,18 @@ "kGZ" = ( /obj/structure/table, /obj/effect/turf_decal/bot, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = -8 + }, /obj/machinery/recharger{ pixel_x = -3 }, /obj/structure/cable, +/obj/item/stamp/denied{ + pixel_x = 2; + pixel_y = 11 + }, /obj/item/toy/figure/rd{ pixel_x = 8; pixel_y = 8 @@ -34408,8 +34541,8 @@ /obj/item/stamp/head/rd{ pixel_x = 8 }, -/obj/machinery/power/apc/auto_name/directional/north, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/machinery/power/apc/auto_name/directional/north, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/rd) "kHe" = ( @@ -40254,6 +40387,10 @@ }, /turf/open/floor/iron/dark, /area/station/ai_monitored/command/storage/satellite) +"mAG" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "mAK" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -40749,6 +40886,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/station/service/chapel) +"mHp" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "mHq" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -44278,6 +44424,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/security/checkpoint/engineering) +"nOj" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/shipbreaker_hut) "nOw" = ( /obj/structure/table/reinforced/plasmarglass, /obj/structure/microscope{ @@ -44453,6 +44602,10 @@ dir = 1 }, /area/station/hallway/primary/port) +"nRs" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "nRC" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency{ @@ -44534,6 +44687,10 @@ /obj/structure/sign/warning/no_smoking, /turf/closed/wall/rust, /area/station/maintenance/port/greater) +"nSB" = ( +/obj/structure/cable, +/turf/open/misc/asteroid/airless, +/area/space/nearstation) "nSZ" = ( /obj/structure/table, /obj/item/storage/box/bodybags{ @@ -44924,6 +45081,16 @@ /obj/structure/window/reinforced/spawner/directional/north, /turf/open/floor/plating, /area/station/maintenance/fore) +"oaS" = ( +/obj/effect/turf_decal/sand/plating, +/obj/machinery/door/airlock/external, +/obj/effect/mapping_helpers/airlock/access/all/engineering/general, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/turf/open/floor/plating/airless, +/area/station/engineering/gravity_generator) "obi" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -46606,6 +46773,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/aft) +"oFO" = ( +/obj/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "oGu" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -48361,7 +48532,7 @@ "pjN" = ( /obj/effect/turf_decal/trimline/hot_pink/filled/line, /obj/structure/cable, -/mob/living/simple_animal/pet/cat{ +/mob/living/basic/pet/cat{ name = "Pawtton"; desc = "Given as a sign of friendship by The Fleet, with love" }, @@ -48593,6 +48764,13 @@ }, /turf/open/floor/iron/showroomfloor, /area/station/security/execution/transfer) +"pme" = ( +/obj/machinery/light/directional/east, +/obj/machinery/conveyor_switch/oneway{ + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "pmg" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -51153,6 +51331,10 @@ }, /turf/open/floor/plating, /area/station/science/robotics/lab) +"qdA" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "qdJ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -55407,6 +55589,16 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron, /area/station/hallway/primary/central) +"rsN" = ( +/obj/structure/rack, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = 6 + }, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = -5 + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "rsT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -55956,6 +56148,11 @@ }, /turf/open/floor/iron/dark, /area/station/science/robotics/mechbay) +"rCB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/space/nearstation) "rCF" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56775,6 +56972,10 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/iron/dark, /area/station/service/hydroponics) +"rQY" = ( +/obj/machinery/computer/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "rQZ" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance, @@ -57251,6 +57452,11 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron/dark, /area/station/service/library) +"rYO" = ( +/obj/structure/marker_beacon/yellow, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "rZa" = ( /obj/machinery/vending/cart{ req_access = list("hop") @@ -58684,6 +58890,9 @@ /obj/docking_port/stationary/escape_pod, /turf/open/space/basic, /area/space) +"svi" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "svs" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 5 @@ -60051,6 +60260,12 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"sRr" = ( +/obj/structure/sign/directions/ptl{ + dir = 1 + }, +/turf/closed/wall/r_wall, +/area/station/engineering/gravity_generator) "sRz" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance{ @@ -60259,6 +60474,11 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"sUP" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/yellow, +/turf/open/space/basic, +/area/space/nearstation) "sUY" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -61682,6 +61902,13 @@ }, /turf/open/floor/iron, /area/station/engineering/atmos) +"tsC" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "tsD" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -62257,8 +62484,8 @@ pixel_x = -5 }, /obj/item/stamp{ - pixel_x = -6; - pixel_y = -2 + pixel_x = 6; + pixel_y = 4 }, /obj/item/stamp/denied{ pixel_x = 6; @@ -63731,6 +63958,10 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, /area/station/service/hydroponics) +"udQ" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/airless, +/area/station/engineering/gravity_generator) "uep" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/tile/neutral/fourcorners, @@ -63955,6 +64186,18 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/maintenance/port/lesser) +"uhj" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "uhp" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -64519,6 +64762,13 @@ /obj/structure/sign/warning, /turf/closed/wall/r_wall, /area/station/security/processing) +"upJ" = ( +/obj/machinery/conveyor{ + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "upK" = ( /obj/effect/turf_decal/siding/thinplating/dark/end, /turf/open/floor/glass/reinforced, @@ -65879,6 +66129,10 @@ "uNO" = ( /turf/closed/wall, /area/station/commons/toilet/restrooms) +"uNP" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "uNY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -68520,6 +68774,11 @@ /obj/structure/cable, /turf/open/floor/iron/dark/textured_large, /area/station/maintenance/port/aft) +"vDe" = ( +/obj/effect/turf_decal/sand/plating, +/obj/structure/marker_beacon/yellow, +/turf/open/floor/plating/airless, +/area/space/nearstation) "vDD" = ( /obj/machinery/smartfridge/drinks, /turf/closed/wall, @@ -68787,6 +69046,9 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"vHH" = ( +/turf/open/space/basic, +/area/shipbreak) "vHS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -69198,6 +69460,15 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard) +"vMC" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/east, +/obj/structure/window/spawner/directional/north, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "vMG" = ( /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/tile/neutral/anticorner/contrasted{ @@ -72980,6 +73251,9 @@ /obj/effect/turf_decal/tile/neutral/half/contrasted, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"wTm" = ( +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "wTx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/decal/cleanable/dirt, @@ -73403,6 +73677,14 @@ pixel_y = 5 }, /obj/effect/turf_decal/trimline/blue/filled/line, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/cmo, /turf/open/floor/iron/showroomfloor, /area/station/command/heads_quarters/cmo) @@ -76377,6 +76659,10 @@ }, /turf/open/floor/iron, /area/station/command/bridge) +"xZB" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "xZL" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -109628,7 +109914,7 @@ aaa aaa aaa aaa -aaB +aaa aaa aaa aaa @@ -113997,7 +114283,7 @@ aeU aeU aaa aaa -aaB +aaa aaa aaa aaa @@ -115537,9 +115823,9 @@ aaQ aaa aaa aaa -aaa -aaa -aaa +oFO +oFO +oFO aaa aaa aaa @@ -115795,7 +116081,7 @@ aaa aaa aaa aaa -aaa +acm aaa aaa aaa @@ -116052,9 +116338,9 @@ aaa aaa aaa aaa +acm aaa -aaa -aaa +oFO aaa aaa aaa @@ -116305,13 +116591,13 @@ rNR pKB xmQ gny -aeU -aaa -aaa -aaa -aaa -aaa +nSB +rCB +rCB +rCB +rCB aaa +oFO aaa aaa aaa @@ -116566,9 +116852,9 @@ aeU aeU aaa aaa -aaa -aaa -aaa +rCB +acm +oFO aaa aaa aaa @@ -116823,9 +117109,9 @@ aeu aUz aaa aaa +rCB aaa -aaa -aaa +oFO aaa aaa aaa @@ -117080,9 +117366,9 @@ aeu aaa aaa aaa -aaa -aaa -aaa +rCB +acm +oFO aaa aaa aaa @@ -117337,7 +117623,7 @@ aeu aaa aaa aaa -aaa +rCB aaa aaa aaa @@ -117594,9 +117880,9 @@ aUz aaa aaa aaa -aaa -aaa -aaa +rCB +acm +oFO aaa aaa aaa @@ -117851,9 +118137,9 @@ aeU aaa aaa aaa +rCB aaa -aaa -aaa +oFO aaa aaa aaa @@ -118108,9 +118394,9 @@ aaa aaa aaa aaa +rCB aaa -aaa -aaa +oFO aaa aaa aaa @@ -118347,11 +118633,11 @@ aRI ujO uSD hVM -xVm -aeu -aeU +uvO +uvO +sRr aDS -nNb +hIc bFI rkn coy @@ -118365,19 +118651,19 @@ aaa aaa aaa aaa +rCB +acm +oFO aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +oFO +oFO +oFO +oFO +oFO +oFO +oFO aaa aaa aaa @@ -118604,11 +118890,11 @@ gWf jEg sll jxd -xVm -aeU -aUz +oaS +udQ +aZf aDS -nNb +hIc bFI aeU aeU @@ -118617,26 +118903,26 @@ coy aeU aaQ aeo -aeo -aeo -acm -aaa -aaa -aaa aaa aaa aaa aaa aaa +rCB aaa +oFO aaa aaa aaa +acm aaa aaa +acm aaa aaa +acm aaa +jQq aaa aaa aaa @@ -118861,39 +119147,39 @@ wwz bRf qlV jxd -jgc -cmU -cmU +uvO +rWE +usr aDS -nNb +hIc bFI cmU cmU cmU -cmU +vDe aaa aaQ aaa -acm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa aaa aaa +rCB aaa +cry aaa +rCB aaa +sUP +rCB +rCB +rCB +rCB +acK +rYO aaa +jQq aaa aaa aaa @@ -119135,22 +119421,22 @@ aaa aaa aaa aaa +sUP +rCB +rCB +rCB +rCB +rCB +rCB +rCB +rCB +svi +svi +klT +svi +svi aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +jQq aaa aaa aaa @@ -119385,29 +119671,29 @@ oAg oAg oAg oAg +acK +acK +acK +acK +acK +acK +acK +acK +acK +nOj +rQY +dxl +jXC +wTm +jXC +jXC +aBW +xZB +uNP +uhj +qdA aaa -aeo -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +jQq aaa aaa aaa @@ -119646,25 +119932,25 @@ acm aeo acm aaa +sUP aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +nOj +tsC +dxl +ezR +pme +jXC +jXC +aBW +jWK +jDV +cpD +aBW +acm +jQq aaa aaa aaa @@ -119902,26 +120188,26 @@ nNb aaa aaa aaQ -acm -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa aaa aaa aaa +nOj +rsN +jXC +dol +nOj +jXJ +jXC +svi +nRs +jDV +jgc +svi aaa +jQq aaa aaa aaa @@ -120159,35 +120445,35 @@ kgD kgD acm aeo +acm +acm aaa aaa aaa aaa +nOj +jXC +jXC +vMC +upJ +mHp +wTm +svi +svi +qdA +aBW +svi aaa aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mAG +mAG +mAG +mAG +mAG aaa aaa aaa @@ -120416,35 +120702,35 @@ oAg oAg aaa aeo -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaB -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +mAG aaa aaa aaa @@ -120674,34 +120960,34 @@ kgD acm acm aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -120931,34 +121217,34 @@ aaa aaa aeo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -121188,34 +121474,34 @@ acm aeo aeo aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -121445,34 +121731,34 @@ aaa aeo aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -121702,33 +121988,33 @@ acm aaQ aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -121959,33 +122245,33 @@ aaa aeo aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -122216,33 +122502,33 @@ aeo aeo aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -122473,33 +122759,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -122730,33 +123016,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -122987,33 +123273,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -123244,33 +123530,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -123501,6 +123787,33 @@ aaa aaa aaa aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -123528,35 +123841,8 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -"} -(181,1,1) = {" +"} +(181,1,1) = {" aaa aaa aaa @@ -123758,33 +124044,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -124014,34 +124300,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -124272,33 +124558,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -124529,33 +124815,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -124786,33 +125072,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -125043,33 +125329,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -125300,33 +125586,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -125557,33 +125843,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -125813,34 +126099,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -126071,33 +126357,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm aaa aaa aaa @@ -126328,35 +126614,35 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG +mAG aaa aaa aaa @@ -126585,34 +126871,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -126842,34 +127128,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +vHH +acm +mAG aaa aaa aaa @@ -127098,35 +127384,35 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +acm +mAG aaa aaa aaa @@ -127356,6 +127642,10 @@ aaa aaa aaa aaa +mAG +mAG +mAG +mAG aaa aaa aaa @@ -127375,15 +127665,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +mAG +mAG +mAG +mAG +mAG aaa aaa aaa diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 7ac7732552b4..37db730a9365 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -1596,6 +1596,14 @@ }, /turf/open/floor/iron/checker, /area/station/science/research) +"aDq" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "aDA" = ( /obj/machinery/light/small/directional/south, /obj/item/folder, @@ -1946,6 +1954,7 @@ /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "aID" = ( @@ -4389,6 +4398,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron, /area/station/ai_monitored/command/storage/eva) +"bwP" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "bxf" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -4948,6 +4963,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/effect/landmark/start/gary, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "bJQ" = ( @@ -6005,9 +6021,8 @@ /turf/open/floor/iron/dark/textured_large, /area/station/security/bitden) "ciU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/space/basic, +/area/shipbreak) "cji" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -6989,6 +7004,7 @@ "czs" = ( /obj/structure/easel, /obj/effect/mapping_helpers/broken_floor, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "czG" = ( @@ -9205,7 +9221,6 @@ "dso" = ( /obj/structure/chair/office/light, /obj/structure/cable, -/obj/item/stamp/head/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "dsq" = ( @@ -9324,6 +9339,10 @@ }, /turf/open/floor/plating, /area/station/maintenance/starboard/aft) +"dtN" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "dtY" = ( /obj/machinery/meter/monitored/waste_loop, /obj/effect/turf_decal/tile/yellow{ @@ -11254,6 +11273,17 @@ /obj/item/clipboard, /obj/item/toy/figure/cmo, /obj/structure/cable, +/obj/item/stamp/head/cmo{ + pixel_y = 12 + }, +/obj/item/stamp/denied{ + pixel_x = -8; + pixel_y = 12 + }, +/obj/item/stamp/granted{ + pixel_y = 12; + pixel_x = 8 + }, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "edu" = ( @@ -12111,6 +12141,13 @@ /obj/effect/spawner/random/maintenance, /turf/open/floor/plating, /area/station/maintenance/port/aft) +"erv" = ( +/obj/machinery/conveyor{ + dir = 6; + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "erF" = ( /obj/structure/cable, /obj/machinery/door/airlock/virology/glass{ @@ -12251,6 +12288,17 @@ /obj/structure/light_construct/small/directional/east, /turf/open/floor/wood, /area/station/maintenance/port/aft) +"ety" = ( +/obj/structure/lattice/catwalk, +/obj/structure/rack, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = -5 + }, +/obj/item/weldingtool/electric/raynewelder{ + pixel_y = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) "etz" = ( /obj/structure/window/spawner/directional/west, /obj/effect/turf_decal/siding/wood{ @@ -14119,11 +14167,9 @@ /turf/closed/wall, /area/station/hallway/primary/fore) "ffP" = ( -/obj/effect/spawner/random/structure/grille, -/turf/open/floor/plating/foam{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "ffU" = ( /obj/effect/turf_decal/siding/purple, /obj/machinery/camera/directional/south{ @@ -14687,6 +14733,17 @@ /obj/structure/table/wood, /turf/open/floor/carpet, /area/station/service/chapel/funeral) +"fmA" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "fmJ" = ( /obj/structure/rack, /obj/item/circuitboard/machine/telecomms/bus, @@ -14911,6 +14968,18 @@ "fru" = ( /turf/closed/wall, /area/station/cargo/drone_bay) +"frF" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "frH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -15301,6 +15370,9 @@ /obj/machinery/atm/directional/north, /turf/open/floor/iron, /area/station/hallway/primary/starboard) +"fAx" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "fAI" = ( /obj/effect/spawner/random/structure/crate, /obj/effect/decal/cleanable/dirt, @@ -18920,6 +18992,13 @@ "gQQ" = ( /turf/closed/wall, /area/station/engineering/break_room) +"gQX" = ( +/obj/machinery/light/directional/east, +/obj/machinery/conveyor_switch/oneway{ + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "gRb" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -23021,6 +23100,14 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/plating, /area/station/maintenance/fore) +"iid" = ( +/obj/machinery/conveyor{ + dir = 10; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "iio" = ( /obj/effect/turf_decal/tile/purple/fourcorners, /obj/machinery/door/airlock/command{ @@ -23312,6 +23399,12 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/security/brig) +"inF" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "inG" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt, @@ -25865,6 +25958,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/circuits) +"jbJ" = ( +/obj/machinery/conveyor{ + id = "shitbreaker" + }, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "jbR" = ( /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -26166,7 +26265,7 @@ }, /obj/structure/bed/dogbed/runtime, /obj/item/toy/cattoy, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) "jgt" = ( @@ -26471,6 +26570,7 @@ "jlM" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jlU" = ( @@ -26678,6 +26778,7 @@ "jpO" = ( /obj/machinery/door/airlock/external, /obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "jpQ" = ( @@ -29234,11 +29335,9 @@ /turf/open/space/basic, /area/space/nearstation) "kiE" = ( -/obj/item/book/manual/nuclear, -/turf/open/floor/plating/foam{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space) "kiH" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -31357,6 +31456,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/airlock/unres, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "kVJ" = ( @@ -31498,6 +31598,7 @@ "kXx" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "kXA" = ( @@ -32377,6 +32478,11 @@ "lnc" = ( /turf/closed/wall, /area/station/commons/dorms) +"lnd" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "lnv" = ( /obj/structure/cable, /obj/machinery/door/airlock/maintenance{ @@ -33162,6 +33268,14 @@ /obj/item/radio/intercom/directional/east, /obj/item/folder/blue, /obj/item/hand_tele, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/captain, /turf/open/floor/wood, /area/station/command/heads_quarters/captain/private) @@ -36435,6 +36549,12 @@ /obj/structure/sign/poster/random/directional/north, /turf/open/floor/wood, /area/station/service/bar/backroom) +"mFD" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "mFQ" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 @@ -39406,6 +39526,14 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"nDR" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "nDS" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/mapping_helpers/broken_floor, @@ -39425,6 +39553,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "nEb" = ( @@ -39614,6 +39743,9 @@ /obj/effect/mapping_helpers/burnt_floor, /turf/open/floor/plating, /area/station/medical/abandoned) +"nIZ" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "nJn" = ( /obj/machinery/chem_dispenser{ layer = 2.7 @@ -43811,6 +43943,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/iron/white/diagonal, /area/station/medical/pathology) +"phw" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "phz" = ( /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=7-Command-Starboard"; @@ -47340,6 +47476,9 @@ }, /turf/open/floor/iron/dark, /area/station/command/bridge) +"qsN" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/shipbreaker_hut) "qsQ" = ( /obj/machinery/light/directional/north, /obj/machinery/computer/security/wooden_tv, @@ -47380,6 +47519,17 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/port) +"qtd" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "qtf" = ( /obj/structure/chair/office{ dir = 8 @@ -51394,11 +51544,6 @@ /obj/structure/sign/warning/test_chamber/directional/south, /turf/open/floor/iron/white, /area/station/science/ordnance/testlab) -"rLv" = ( -/turf/open/floor/plating/foam{ - initial_gas_mix = "TEMP=2.7" - }, -/area/space/nearstation) "rLy" = ( /obj/machinery/status_display/ai/directional/north, /obj/effect/turf_decal/tile/neutral{ @@ -53033,6 +53178,10 @@ /obj/item/training_toolbox, /turf/open/floor/iron, /area/station/commons/fitness/recreation) +"soH" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "soW" = ( /obj/structure/rack, /obj/effect/spawner/random/techstorage/security_all, @@ -53344,6 +53493,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/stone, /area/station/smithing) +"suC" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "suD" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -53642,6 +53795,10 @@ }, /turf/open/floor/plating, /area/station/security/warden) +"szm" = ( +/obj/machinery/computer/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "szp" = ( /turf/closed/wall, /area/station/commons/fitness/recreation) @@ -54837,6 +54994,14 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/iron/white, /area/station/science/ordnance/storage) +"sUY" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "shitbreaker" + }, +/obj/structure/window/spawner/directional/south, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "sVc" = ( /obj/effect/decal/cleanable/cobweb, /obj/machinery/field/generator, @@ -55120,6 +55285,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/starboard/fore) "tak" = ( @@ -55380,6 +55546,12 @@ }, /turf/open/floor/iron, /area/station/hallway/primary/central) +"ter" = ( +/obj/item/book/manual/nuclear, +/turf/open/floor/plating/foam{ + initial_gas_mix = "TEMP=2.7" + }, +/area/space) "tew" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -56231,6 +56403,10 @@ pixel_x = -2; pixel_y = 4 }, +/obj/item/stamp/granted{ + pixel_y = 9; + pixel_x = -4 + }, /obj/item/stamp/head/hop{ pixel_x = -4; pixel_y = 4 @@ -56252,6 +56428,10 @@ pixel_y = -34; req_access = list("hop") }, +/obj/item/stamp/denied{ + pixel_x = -4; + pixel_y = -1 + }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "tsZ" = ( @@ -58717,10 +58897,18 @@ "uoO" = ( /obj/structure/table, /obj/item/folder/white, -/obj/item/stamp/head/rd, /obj/item/toy/figure/rd{ pixel_y = 10 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/rd, /turf/open/floor/iron/white, /area/station/command/heads_quarters/rd) "upe" = ( @@ -59341,6 +59529,11 @@ }, /turf/open/space/basic, /area/space) +"uzu" = ( +/obj/effect/spawner/random/structure/grille, +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space/nearstation) "uzw" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -60232,9 +60425,22 @@ "uOy" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, -/obj/item/stamp/head/ce, +/obj/item/stamp/head/ce{ + pixel_y = 11 + }, /obj/item/reagent_containers/pill/patch/aiuri, /obj/effect/turf_decal/tile/neutral/half/contrasted, +/obj/item/stamp/head/ce{ + pixel_y = 11 + }, +/obj/item/stamp/denied{ + pixel_x = -9; + pixel_y = 11 + }, +/obj/item/stamp/granted{ + pixel_x = 9; + pixel_y = 11 + }, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) "uOH" = ( @@ -60531,6 +60737,9 @@ /obj/structure/cable/layer3, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/ai) +"uVa" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "uVd" = ( /obj/structure/chair{ dir = 8 @@ -66486,6 +66695,14 @@ pixel_x = -7; pixel_y = 6 }, +/obj/item/stamp/denied{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/hos, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) @@ -98819,7 +99036,7 @@ aaa aaa aaa aaa -aaa +ter iTZ ahj ahj @@ -104184,6 +104401,10 @@ aaa aaa aaa aaa +kiE +kiE +kiE +kiE aaa aaa aaa @@ -104195,14 +104416,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +kiE +kiE +kiE aaa aaa aaa @@ -104440,34 +104657,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ aaa aaa rrt @@ -104697,34 +104914,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -104954,34 +105171,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -105211,34 +105428,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -105468,34 +105685,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -105726,33 +105943,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -105983,35 +106200,35 @@ aaa aaa aaa aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aag dwJ aaa aaa @@ -106240,37 +106457,37 @@ aaa aaa aaa aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -anT dwJ -aaa +aag aaa aaa nvn @@ -106497,172 +106714,172 @@ aaa aaa aaa aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa +dwJ +anT aaa aaa +nvn +qWw +xrf +mnl +crA +cxU +cUH +toK +xrm +lJr +wVW +xvt +jwy +ueh +qEy +qSf +vxD +qEy +oOn +mCM +iQy +jHm +pFd +ffd +pFd +xUh +lqQ +aMb +mos +ozn +knZ +ozn +weS +qdr +qXB +ool +dVb +eWW +tCS +lxv +gMp +lkW +xww +jsv +tlZ +aPF +qhd +cLD +upE +wSs +gxf +htQ +bTV +iuP +ffs +ocs +klS +nPh +mlu +yaB +huG +aIF +lSt +phS +huG +iNQ +hgU +kCZ +mgG +bZq +dTs +vpe +gxn +unL +eio +ouR +kOt +tUn +gNW +nQA +mOD +tUn +tUn +tUn +tUn +wXF +wXF +wXF +wXF +bcb +gMQ +bcb +oWk +clj +vBw +qfL +bLd +qkl +qkl +hIZ +moF +qkl +bLd +ias +fPD +nMj +pPN +fPD +rlh +hdM +lMJ +aaa aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -dwJ -aaa -aaa -aaa -nvn -qWw -xrf -mnl -crA -cxU -cUH -toK -xrm -lJr -wVW -xvt -jwy -ueh -qEy -qSf -vxD -qEy -oOn -mCM -iQy -jHm -pFd -ffd -pFd -xUh -lqQ -aMb -mos -ozn -knZ -ozn -weS -qdr -qXB -ool -dVb -eWW -tCS -lxv -gMp -lkW -xww -jsv -tlZ -aPF -qhd -cLD -upE -wSs -gxf -htQ -bTV -iuP -ffs -ocs -klS -nPh -mlu -yaB -huG -aIF -lSt -phS -huG -iNQ -hgU -kCZ -mgG -bZq -dTs -vpe -gxn -unL -eio -ouR -kOt -tUn -gNW -nQA -mOD -tUn -tUn -tUn -tUn -wXF -wXF -wXF -wXF -bcb -gMQ -bcb -oWk -clj -vBw -qfL -bLd -qkl -qkl -hIZ -moF -qkl -bLd -ias -fPD -nMj -pPN -fPD -rlh -hdM -lMJ -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -nBa -aaa -aaa -aaa -nBa -aaa -aaa -aaa -nBa -aaa -aaa -aaa -rrt +aaa +aaa +aaa +nBa +aaa +aaa +aaa +nBa +aaa +aaa +aaa +nBa +aaa +aaa +aaa +rrt aaa aaa aaa @@ -106746,6 +106963,7 @@ aaa aaa aaa aaa +aac aaa aaa aaa @@ -106753,34 +106971,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa rrt @@ -107011,33 +107228,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa szp @@ -107268,33 +107485,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa nvn @@ -107525,33 +107742,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa szp @@ -107782,33 +107999,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa szp @@ -108039,33 +108256,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa kfL @@ -108296,33 +108513,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -108553,33 +108770,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa cpH @@ -108810,33 +109027,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -109067,33 +109284,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -109324,33 +109541,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -109581,33 +109798,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa cpH @@ -109838,33 +110055,33 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -110094,34 +110311,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ @@ -110351,40 +110568,40 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa lMJ aaa aaa -blx +aaa szp szp szp @@ -110608,43 +110825,43 @@ aaa aaa aaa aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa +cpH aaa aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -cpH -aaa -aaa -blx -rLv -rLv -kiE szp eqU flB @@ -110865,43 +111082,43 @@ aaa aaa aaa aaa +kiE +lMJ +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +ciU +lMJ aaa aaa +lMJ aaa aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lMJ -aaa -aaa -gAe -rLv -rLv -rLv szp wxn dxq @@ -111081,34 +111298,8 @@ aaa aaa aaa aaa -"} -(161,1,1) = {" -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +"} +(161,1,1) = {" aaa aaa aaa @@ -111148,17 +111339,43 @@ aaa aaa aaa aaa +kiE +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ +lMJ aaa aaa aaa aaa -lMJ aaa aaa -rLv -rLv -rLv -blx szp szp qXB @@ -111380,49 +111597,49 @@ aaa aaa aaa aaa +kiE +kiE +kiE +kiE +kiE aaa aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -lMJ -aaa -aaa -blx -rLv -rLv -anS +kiE +kiE +aox +aox +aox +aox +aox +aox +aox aox aox +aox +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN +dJN jpO sZU nDW sZU -wrn +jcy qIB rCn oUz @@ -111649,6 +111866,7 @@ aaa aaa aaa aaa +kiE aaa aaa aaa @@ -111660,19 +111878,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -cpH -aaa -aaa +lMJ ffP -rLv -rLv -aWl +lMJ +lMJ +lMJ +cpH +ety +lnd +aox +dJN +aox +aox aaa aox tCS @@ -111906,13 +112123,8 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +kiE aaa aaa aaa @@ -111924,12 +112136,17 @@ aaa aaa aaa lMJ +ffP lMJ +aaa +aUn lMJ -ciU -blx -blx -aWl +aox +uVa +uVa +mFD +uVa +uVa aaa aox nqL @@ -112164,6 +112381,8 @@ aaa aaa aaa aaa +kiE +kiE aaa aaa aaa @@ -112172,21 +112391,19 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qsN +szm +ffP +fAx +aox +uzu lMJ aaa -aaa -aaa -aaa -aaa -aaa +soH +phw +dtN +frF +soH aaa aox nqL @@ -112422,28 +112639,28 @@ aaa aaa aaa aaa +kiE +kiE +kiE +kiE aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qsN +bwP +ffP +fAx +aox +aUn lMJ aaa -aaa -aaa -aaa -aaa -aaa +soH +inF +nIZ +fmA +soH aaa aox nqL @@ -112682,25 +112899,25 @@ aaa aaa aaa aaa +kiE aaa aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +qsN +nDR +gQX +fAx +aox +aox cpH aaa -aaa -aaa -aaa -aaa -aaa +uVa +suC +nIZ +qtd +uVa aaa aox nqL @@ -112939,25 +113156,25 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +kiE +kiE +kiE +kiE +kiE +dPw +qsN +aDq +qsN +sUY +aox +aox lMJ aaa -aaa -aaa -aaa -aaa -aaa +uVa +uVa +uVa +soH +uVa aaa aox nqL @@ -113201,13 +113418,13 @@ aaa aaa aaa aWl -rrt -rrt -rrt -rrt -rrt -rrt -rrt +aaa +uVa +erv +jbJ +iid +aox +kiE lMJ lMJ lMJ @@ -113453,18 +113670,18 @@ aaa aaa aaa aaa -aac -aaa -aaa -aaa -rrt -aaa -aaa aaa aaa aaa aaa +rrt aaa +uVa +uVa +uVa +uVa +aox +kiE lMJ aaa aaa @@ -113721,7 +113938,7 @@ aaa aaa aaa aaa -aaa +kiE cpH aaa aaa @@ -114244,8 +114461,8 @@ jhd jhd jhd jhd -rQw -rQw +jhd +jhd jhd uRa ivK @@ -117049,7 +117266,7 @@ aaa aaa aaa aaa -aaa +aac aaa aaa aaa @@ -119635,7 +119852,6 @@ aaa aaa aaa aaa -aac aaa aaa aaa @@ -119659,7 +119875,8 @@ aaa aaa aaa aaa -aac +aaa +aaa aaa aaa aaa @@ -121418,7 +121635,7 @@ aaa aaa aaa aaa -aaa +aac aaa aaa aaa @@ -129176,7 +129393,7 @@ aaa aaa aaa aaa -aaa +aac aaa aaa aaa diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index db3ee091534d..e672383e6a96 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -17862,7 +17862,7 @@ dir = 4 }, /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/cmo) "eHD" = ( diff --git a/_maps/map_files/Ouroboros/Ouroboros.dmm b/_maps/map_files/Ouroboros/Ouroboros.dmm index 7cb144c56657..3fefeeb1eac5 100644 --- a/_maps/map_files/Ouroboros/Ouroboros.dmm +++ b/_maps/map_files/Ouroboros/Ouroboros.dmm @@ -5772,7 +5772,7 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/security/brig/entrance) "bJn" = ( -/mob/living/simple_animal/pet/cat, +/mob/living/basic/pet/cat, /turf/open/floor/plating, /area/station/maintenance/aft/greater) "bJq" = ( @@ -13125,7 +13125,7 @@ }, /obj/item/stamp{ pixel_x = -7; - pixel_y = 1 + pixel_y = -1 }, /obj/effect/turf_decal/siding/wood, /obj/machinery/requests_console/auto_name/directional/south, @@ -14269,14 +14269,22 @@ "ekC" = ( /obj/structure/table/reinforced/rglass, /obj/item/folder/white, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = 8 + }, /obj/item/stamp/head/cmo{ - pixel_y = 7; + pixel_y = 6; pixel_x = 8 }, /obj/item/flashlight/pen, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, +/obj/item/stamp/denied{ + pixel_x = 8; + pixel_y = 1 + }, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "ekD" = ( @@ -21090,7 +21098,7 @@ /turf/open/floor/engine, /area/station/security/corrections_officer) "gnC" = ( -/mob/living/simple_animal/pet/cat, +/mob/living/basic/pet/cat, /turf/open/floor/plating, /area/station/service/salon) "gnX" = ( @@ -35608,6 +35616,14 @@ /obj/item/folder/yellow{ pixel_x = -3 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/ce, /obj/machinery/button/door/directional/west{ id = "CEShutter"; @@ -52173,8 +52189,16 @@ pixel_x = -4; pixel_y = 4 }, -/obj/item/stamp/head/rd, /obj/machinery/light/cold/directional/west, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/rd, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) "ptD" = ( @@ -55790,6 +55814,14 @@ pixel_x = 7; pixel_y = 2 }, +/obj/item/stamp/denied{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/item/stamp/granted{ + pixel_y = 12; + pixel_x = -2 + }, /turf/open/floor/carpet/royalblue, /area/station/command/heads_quarters/captain) "qur" = ( @@ -56161,11 +56193,19 @@ dir = 1 }, /obj/item/folder/red, -/obj/item/stamp/head/hos, /obj/item/paper_bin{ pixel_x = 16; pixel_y = 7 }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/head/hos, /turf/open/floor/wood/large, /area/station/command/heads_quarters/hos) "qyQ" = ( @@ -77738,7 +77778,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable, -/mob/living/simple_animal/pet/cat/jerry, +/mob/living/basic/pet/cat/jerry, /turf/open/floor/iron/dark, /area/station/security/prison) "wSK" = ( @@ -79678,7 +79718,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/structure/cable, /turf/open/floor/wood, /area/station/command/heads_quarters/cmo) diff --git a/_maps/map_files/Theseus/Theseus.dmm b/_maps/map_files/Theseus/Theseus.dmm index f1ece2e5f186..ea02840cf0c9 100644 --- a/_maps/map_files/Theseus/Theseus.dmm +++ b/_maps/map_files/Theseus/Theseus.dmm @@ -16702,6 +16702,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_y = 4; + pixel_x = -4 + }, /obj/item/stamp/head/hop, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) @@ -21234,6 +21242,14 @@ pixel_y = 15; pixel_x = 4 }, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = -6 + }, +/obj/item/stamp/denied{ + pixel_x = -14; + pixel_y = 11 + }, /turf/open/floor/carpet, /area/station/command/heads_quarters/captain/private) "gsZ" = ( @@ -24826,6 +24842,14 @@ }, /obj/structure/extinguisher_cabinet/directional/north, /obj/item/folder/blue, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/rd, /turf/open/floor/carpet/purple, /area/station/command/heads_quarters/rd) @@ -41138,7 +41162,7 @@ /obj/machinery/light/directional/south, /obj/structure/window/reinforced/spawner/directional/west, /obj/structure/bed/dogbed/runtime, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /obj/machinery/firealarm/directional/south, /obj/machinery/light_switch/directional/south{ pixel_x = -8 @@ -41521,6 +41545,14 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/ce, /turf/open/floor/iron, /area/station/command/heads_quarters/ce) @@ -43823,9 +43855,11 @@ pixel_y = 10; pixel_x = 7 }, -/obj/item/stamp/centcom{ - pixel_x = -6; - pixel_y = 3 +/obj/item/stamp/granted{ + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_y = -1 }, /obj/structure/cable, /obj/item/radio/intercom/command/directional/north, @@ -58943,10 +58977,6 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/table/reinforced/rglass, -/obj/item/stamp/head/cmo{ - pixel_y = 12; - pixel_x = -23 - }, /obj/item/paperwork/medical, /obj/item/toy/figure/cmo, /turf/open/floor/iron/dark, @@ -68111,6 +68141,17 @@ /obj/item/clothing/glasses/hud/health{ pixel_x = 6 }, +/obj/item/stamp/head/cmo{ + pixel_y = 12; + pixel_x = 9 + }, +/obj/item/stamp/granted{ + pixel_y = 6; + pixel_x = 9 + }, +/obj/item/stamp/denied{ + pixel_x = 9 + }, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "ucF" = ( @@ -69411,15 +69452,23 @@ pixel_y = 2; pixel_x = -7 }, -/obj/item/stamp/head/hos{ - pixel_x = 10; - pixel_y = -1 - }, /obj/machinery/recharger{ pixel_y = 7; pixel_x = 6 }, /obj/structure/closet/firecloset/wall/directional/north, +/obj/item/stamp/granted{ + pixel_y = 6; + pixel_x = 9 + }, +/obj/item/stamp/denied{ + pixel_x = 10; + pixel_y = 5 + }, +/obj/item/stamp/head/hos{ + pixel_x = 10; + pixel_y = -1 + }, /turf/open/floor/wood, /area/station/command/heads_quarters/hos) "uwF" = ( diff --git a/_maps/map_files/Voidraptor/VoidRaptor.dmm b/_maps/map_files/Voidraptor/VoidRaptor.dmm index 36b16594a2a5..d1edfa49ee0c 100644 --- a/_maps/map_files/Voidraptor/VoidRaptor.dmm +++ b/_maps/map_files/Voidraptor/VoidRaptor.dmm @@ -11895,7 +11895,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/textured_large, /area/station/maintenance/starboard/greater) "dzx" = ( @@ -12569,7 +12569,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" = ( @@ -30094,7 +30094,7 @@ }, /obj/item/stamp{ pixel_x = -7; - pixel_y = 1 + pixel_y = 2 }, /obj/item/folder/red{ pixel_x = 11; @@ -39009,10 +39009,18 @@ pixel_x = -4; pixel_y = 3 }, +/obj/structure/table/reinforced/rglass, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/cmo{ pixel_y = 3 }, -/obj/structure/table/reinforced/rglass, /turf/open/floor/carpet/blue, /area/station/command/heads_quarters/cmo) "kXw" = ( @@ -44505,6 +44513,14 @@ /obj/item/folder/white{ pixel_y = 4 }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/rd{ pixel_y = 4 }, @@ -71277,7 +71293,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" @@ -71967,14 +71983,21 @@ pixel_x = -2; pixel_y = 3 }, -/obj/item/stamp/head/ce{ - pixel_x = -2; - pixel_y = 3 - }, /obj/item/computer_disk/engineering{ pixel_x = 13; pixel_y = 2 }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/head/ce{ + pixel_y = 3 + }, /turf/open/floor/carpet/orange, /area/station/command/heads_quarters/ce) "tYp" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index bbd27a42418e..8c55d4f637d0 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -347,8 +347,18 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/briefing) "aaW" = ( -/obj/machinery/light/directional/west, -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = -32 + }, +/obj/structure/chair/office{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "aaX" = ( /obj/effect/turf_decal/trimline/green/line, @@ -13341,8 +13351,14 @@ /turf/open/floor/grass, /area/centcom/central_command_areas/hall) "aKc" = ( -/obj/machinery/computer/camera_advanced/syndie, -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "aKd" = ( /obj/effect/turf_decal/trimline/green/corner{ @@ -20046,6 +20062,13 @@ }, /turf/open/floor/plating, /area/cruiser_dock) +"cIl" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, +/area/centcom/central_command_areas/adminroom) "cKo" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -20149,15 +20172,52 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/admin) "cQL" = ( -/obj/machinery/computer/communications/syndicate, -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-6"; + pixel_y = 32; + layer = 2.8; + pixel_x = -32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 + }, +/obj/structure/table/wood, +/obj/machinery/fax/messageadmins{ + fax_name = "Wolf's Office" + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "cSL" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/fax{ - name = "Pooba's Fax Machine" +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-5"; + pixel_y = -32; + layer = 2.8; + pixel_x = -32 }, -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = -32 + }, +/obj/machinery/photocopier/gratis, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "cTr" = ( /obj/effect/turf_decal/siding/thinplating_new/dark{ @@ -20488,17 +20548,19 @@ /turf/open/floor/lowered/iron/pool/cobble, /area/centcom/central_command_areas/adminroom) "dQc" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/coffeemaker/impressa, -/obj/item/storage/box/coffeepack/robusta{ - pixel_y = -2; - pixel_x = -6 +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 }, -/obj/item/reagent_containers/cup/coffeepot/bluespace{ - pixel_y = 9; - pixel_x = 5 +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -2; + pixel_y = 12 }, -/turf/open/floor/carpet/donk, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "dQy" = ( /obj/machinery/light/directional/west, @@ -20840,9 +20902,21 @@ }, /area/centcom/central_command_areas/adminroom) "eNq" = ( -/obj/machinery/door/airlock/vault, -/obj/effect/mapping_helpers/airlock/access/any/admin/captain, -/turf/open/floor/iron/dark/herringbone, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/adminroom) "eNY" = ( /turf/open/floor/lowered/iron/pool/cobble/side{ @@ -20936,8 +21010,29 @@ /turf/open/floor/mineral/titanium/tiled/white, /area/centcom/central_command_areas/kitchen) "fan" = ( -/obj/machinery/light/floor/has_bulb, -/turf/open/floor/iron/dark/herringbone, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-9"; + pixel_y = -32; + layer = 2.8; + pixel_x = 32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "faY" = ( /obj/effect/turf_decal/trimline/yellow/filled/corner{ @@ -21452,7 +21547,7 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation) "grU" = ( -/mob/living/simple_animal/pet/cat/kitten{ +/mob/living/basic/pet/cat/kitten{ name = "Kbity :3"; desc = "D'aaawwww. Fortune's best friend" }, @@ -21507,6 +21602,16 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/centcom/syndicate_mothership/expansion_bioterrorism) +"gwm" = ( +/obj/structure/mineral_door/wood{ + name = "Bedroom" + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/red, +/area/centcom/central_command_areas/adminroom) "gxv" = ( /obj/effect/turf_decal/siding/wood{ pixel_x = -5 @@ -21927,12 +22032,15 @@ /turf/open/floor/wood/tile, /area/centcom/central_command_areas/adminroom) "hlg" = ( -/obj/machinery/button/door/directional/north{ - name = "Emergency Assistants Fuck Off Button"; - id = "donutstealthisid"; - req_access = "cent_captain" +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 }, -/turf/open/floor/carpet/orange, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "hln" = ( /obj/effect/turf_decal/siding/blue{ @@ -21965,8 +22073,38 @@ /turf/open/water/arena, /area/centcom/central_command_areas/admin) "hol" = ( -/obj/item/kirbyplants/synthetic, -/turf/open/floor/carpet/orange, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-9"; + pixel_y = -32; + layer = 2.8; + pixel_x = 32 + }, +/mob/living/basic/bee{ + faction = list("hostile","hive","neutral"); + name = "The Poobee"; + desc = "Somehow, you feel this bee is the only thing keeping the world intertwined." + }, +/obj/structure/bed/dogbed{ + name = "The Poobee's bed"; + desc = "I'm just saying, it looks a little bit oversized for what lives in it." + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "hor" = ( /mob/living/basic/ggg/glerm{ @@ -22100,15 +22238,19 @@ /turf/open/floor/iron/dark/textured_large, /area/cruiser_dock) "hAP" = ( -/obj/machinery/light/directional/west, -/obj/structure/closet/secure_closet/freezer/fridge/all_access, -/obj/item/food/burger/cheese, -/obj/item/food/cheese/firm_cheese, -/obj/item/food/ready_donk/mac_n_cheese, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla, -/obj/item/reagent_containers/cup/glass/drinkingglass/filled/sunset_sarsaparilla, -/turf/open/floor/carpet/orange, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = -32 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, /area/centcom/central_command_areas/adminroom) "hAS" = ( /obj/machinery/door/poddoor/shutters/indestructible/preopen{ @@ -22406,10 +22548,32 @@ /turf/open/floor/wood/tile, /area/centcom/central_command_areas/adminroom) "iew" = ( +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-10"; + pixel_y = 32; + layer = 2.8; + pixel_x = 32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 + }, /obj/structure/bed/double, -/obj/item/bedsheet/syndie/double, -/obj/item/toy/plush/pooba_bee_plush, -/turf/open/floor/carpet/orange, +/obj/item/bedsheet/centcom/double, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "ifF" = ( /obj/effect/landmark/start/assaultop, @@ -22844,8 +23008,13 @@ /turf/open/misc/grass, /area/centcom) "jth" = ( -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/donk, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/adminroom) "jui" = ( /obj/structure/window/reinforced/survival_pod/spawner/directional/west, @@ -22913,7 +23082,26 @@ /turf/open/floor/iron/white/textured, /area/centcom/central_command_areas/admin) "jAA" = ( -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/obj/structure/closet/crate/bin, +/obj/item/paper/crumpled{ + desc = "Some sort of notification of contract completion."; + default_raw_text = "TO THE ACCOUNT OF 'WOLF': You are billed the sum of 10,000 MK$ for the services of Johnson and Co in installing an office in Central Command. Itemised tally: Design: MK$ 1000, Installation: MK$ 2000, Getting Past Security: MK$ 7000. Sincerely, Addust Johnson - Johnson and Co Architecture"; + pixel_x = 3; + pixel_y = -2 + }, +/obj/item/paper/crumpled{ + default_raw_text = "TO THE ACCOUNT OF CENTRAL COMMAND: A bill of MK$ 1000 is expected to be paid to the account of JOHNSON AND CO ARCHITECTURE LTD for the re-plating of one office door."; + pixel_x = -5; + pixel_y = 0 + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "jCt" = ( /obj/effect/rune/apocalypse, @@ -23144,18 +23332,31 @@ /turf/open/misc/dirt/jungle/dark/arena, /area/centcom/central_command_areas/admin) "kch" = ( -/obj/structure/closet/cabinet{ - name = "Pooba's Storage Cabinet of Intrigue" +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 }, -/obj/item/toy/balloon/syndicate, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate, -/obj/item/lighter/skull, -/obj/item/storage/box/donkpockets/donkpocketteriyaki, -/obj/item/clothing/under/costume/syndie_pajamas, -/obj/item/storage/backpack/duffelbag/syndie, -/obj/item/clothing/mask/breath/poob_mask, -/obj/item/mod/control/pre_equipped/elite/flamethrower, -/turf/open/floor/carpet/orange, +/obj/machinery/light/small/directional/east, +/obj/item/ammo_casing/caseless/rocket/heap, +/obj/structure/closet/cabinet, +/obj/item/ammo_casing/caseless/rocket, +/obj/item/ammo_casing/caseless/rocket, +/obj/item/gun/ballistic/rocketlauncher/nobackblast{ + pin = /obj/item/firing_pin + }, +/obj/item/ammo_casing/caseless/rocket, +/obj/item/ammo_casing/caseless/rocket, +/obj/item/ammo_casing/caseless/rocket/heap, +/obj/item/ammo_casing/caseless/rocket/weak, +/obj/item/ammo_casing/caseless/rocket/weak, +/obj/item/clothing/under/rank/centcom/official, +/obj/item/clothing/glasses/sunglasses, +/obj/item/radio/headset/headset_cent/alt, +/obj/item/clothing/shoes/jackboots, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "kcm" = ( /obj/effect/turf_decal/tile/dark/opposingcorners, @@ -23422,7 +23623,10 @@ /turf/open/water/arena, /area/centcom/central_command_areas/admin) "kSK" = ( -/obj/structure/mineral_door/wood, +/obj/structure/mineral_door/wood{ + name = "TheProfit's Shithole"; + desc = "This thing stinks." + }, /turf/open/floor/plating/rust, /area/centcom/central_command_areas/adminroom) "kSU" = ( @@ -23503,6 +23707,13 @@ }, /turf/open/floor/iron/dark/small, /area/centcom/central_command_areas/prison) +"ldv" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, +/area/centcom/central_command_areas/adminroom) "ldR" = ( /obj/structure/flora/bush/fullgrass/style_random, /mob/living/basic/cow, @@ -24018,6 +24229,32 @@ }, /turf/open/floor/plastic, /area/centcom/central_command_areas/admin) +"mTh" = ( +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = -32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-5"; + pixel_y = -32; + layer = 2.8; + pixel_x = -32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/centcom/central_command_areas/adminroom) "mUj" = ( /obj/structure/flora/bush/stalky, /turf/open/floor/sandy_dirt, @@ -24052,7 +24289,11 @@ /turf/open/misc/sandy_dirt, /area/centcom/central_command_areas/admin) "nbv" = ( -/turf/open/floor/iron/dark/herringbone, +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/adminroom) "ncQ" = ( /obj/effect/turf_decal/siding/thinplating_new/dark/corner, @@ -24421,10 +24662,16 @@ /turf/open/floor/iron/dark/herringbone, /area/centcom/central_command_areas/evacuation) "odD" = ( -/obj/structure/chair/office/tactical{ - dir = 1 +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 7 }, -/turf/open/floor/carpet/donk, +/obj/item/pen/fourcolor{ + pixel_x = -4; + pixel_y = 9 + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "ofy" = ( /obj/effect/turf_decal/box/corners{ @@ -24645,12 +24892,11 @@ /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "oMX" = ( -/obj/machinery/door/poddoor/shutters/indestructible/preopen{ - id = "donutstealthisid"; - dir = 1 +/obj/effect/turf_decal/siding/wood{ + dir = 10 }, -/turf/open/floor/iron/dark/smooth_large, -/area/centcom/central_command_areas/admin) +/turf/open/floor/carpet/green, +/area/centcom/central_command_areas/adminroom) "oNH" = ( /obj/machinery/light/neon_lining{ dir = 1; @@ -24713,9 +24959,12 @@ /turf/open/floor/wood/large, /area/centcom/central_command_areas/adminroom) "oYA" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/microwave, -/turf/open/floor/carpet/orange, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/red, /area/centcom/central_command_areas/adminroom) "oYE" = ( /obj/effect/turf_decal/tile/hot_pink/full, @@ -25307,10 +25556,31 @@ /area/centcom/central_command_areas/adminroom) "qzu" = ( /obj/machinery/door/airlock/vault{ - name = "Pooba's Office" + name = "Wolf's Office" }, /obj/effect/mapping_helpers/airlock/access/any/admin/captain, -/turf/open/floor/iron/dark/herringbone, +/obj/machinery/door/poddoor/shutters/indestructible/preopen{ + id = "donutstealthisid"; + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/centcom/central_command_areas/adminroom) +"qAI" = ( +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/obj/machinery/bomb_actualizer{ + desc = "An advanced machine capable of releasing the normally bluespace-inhibited destructive potential of a bomb assembly... or so the sticker says. You can see burn marks and ash around its exhaust ports." + }, +/obj/effect/mapping_helpers/broken_floor, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "qBw" = ( /obj/effect/turf_decal/tile/blue/half/contrasted{ @@ -25880,10 +26150,33 @@ /turf/open/floor/iron/white/textured, /area/centcom/central_command_areas/admin) "rYm" = ( -/obj/machinery/telecomms/relay/preset/ruskie{ - use_power = 0 +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-6"; + pixel_y = 32; + layer = 2.8; + pixel_x = -32 }, -/turf/open/floor/carpet/orange, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = -32 + }, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 + }, +/obj/machinery/computer/security/wooden_tv{ + name = "old television"; + desc = "An old television jury-rigged into Nanotrasen's security network. The dial seems to be set to 'STATION 13'." + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "rYI" = ( /obj/machinery/button/door/directional/north{ @@ -26020,12 +26313,19 @@ /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/admin) "sxY" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/item/paper/monitorkey, -/obj/item/card/id/advanced/chameleon, -/obj/item/clothing/mask/chameleon, -/obj/item/radio/headset/syndicate/alt/leader, -/turf/open/floor/carpet/donk, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = 32; + layer = 2.8 + }, +/obj/machinery/button/door/directional/north{ + name = "Emergency Assistants Fuck Off Button"; + id = "donutstealthisid"; + req_access = "cent_captain" + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "syU" = ( /obj/effect/turf_decal/sand/plating, @@ -26227,9 +26527,19 @@ /turf/open/floor/wood/parquet, /area/centcom/central_command_areas/admin) "tiz" = ( -/obj/structure/table/reinforced/plastitaniumglass, -/obj/machinery/light/directional/east, -/turf/open/floor/carpet/orange, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 + }, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green{ + pixel_x = -2; + pixel_y = 12 + }, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "tlQ" = ( /obj/structure/flora/bush/fullgrass/style_random, @@ -26383,7 +26693,7 @@ /turf/open/floor/iron/dark, /area/centcom/central_command_areas/medical) "twW" = ( -/mob/living/simple_animal/pet/cat/cak{ +/mob/living/basic/pet/cat/cak{ name = "Truffle"; desc = "She is a cat made out of cake. How the hell did this thing end up alive, much less here?!" }, @@ -26601,11 +26911,8 @@ /turf/open/misc/grass, /area/centcom) "tYn" = ( -/obj/effect/mapping_helpers/airlock/access/any/admin/captain, -/obj/machinery/door/airlock/hatch{ - name = "Pooba's Observatory" - }, -/turf/open/floor/iron/dark/herringbone, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/adminroom) "tYo" = ( /obj/structure/table/wood/fancy/black, @@ -27972,10 +28279,7 @@ /turf/open/floor/mineral/titanium/tiled/yellow, /area/centcom/syndicate_mothership/expansion_bioterrorism) "xkv" = ( -/obj/machinery/computer/message_monitor{ - dir = 1 - }, -/turf/open/floor/carpet/donk, +/turf/open/floor/wood, /area/centcom/central_command_areas/adminroom) "xno" = ( /obj/structure/window/reinforced/tinted/frosted, @@ -28111,6 +28415,16 @@ /obj/effect/decal/cleanable/piss_stain, /turf/open/misc/sandy_dirt, /area/centcom/central_command_areas/admin) +"xHG" = ( +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-12"; + pixel_y = -32; + layer = 2.8 + }, +/turf/open/floor/wood, +/area/centcom/central_command_areas/adminroom) "xJC" = ( /obj/structure/closet/cardboard, /mob/living/basic/bot/medbot/nukie/assop{ @@ -28125,6 +28439,12 @@ /obj/machinery/grill, /turf/open/misc/sandy_dirt, /area/centcom/central_command_areas/adminroom) +"xKs" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/green, +/area/centcom/central_command_areas/adminroom) "xMe" = ( /obj/machinery/light/neon_lining{ dir = 1; @@ -28231,11 +28551,28 @@ /turf/open/floor/iron/dark/small, /area/centcom/central_command_areas/admin) "xUt" = ( -/obj/machinery/light/floor/has_bulb, -/obj/machinery/door/poddoor/shutters/indestructible/preopen{ - id = "donutstealthisid" +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-3"; + desc = "Effectively impervious to conventional methods of destruction."; + pixel_x = 32 }, -/turf/open/floor/iron/dark/herringbone, +/obj/structure/sign{ + name = "wall"; + icon = 'icons/turf/walls/wood_wall.dmi'; + icon_state = "wood_wall-6"; + pixel_y = 32; + layer = 2.8; + pixel_x = 32 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/green, /area/centcom/central_command_areas/adminroom) "xVl" = ( /obj/effect/turf_decal/siding/purple{ @@ -55437,7 +55774,7 @@ aDM kpH dQc odD -sxY +xkv jAA kpH aaa @@ -55694,8 +56031,8 @@ iOc kpH aKc jth -jAA -jAA +oMX +qAI kpH aaa aiF @@ -55947,12 +56284,12 @@ yhF yhF mUv yhF -oMX -kpH -kpH +yhF kpH +sxY +xKs tYn -kpH +xHG kpH aaa aiF @@ -56204,7 +56541,7 @@ yhF yhF mUv yhF -oMX +yhF qzu xUt eNq @@ -56461,12 +56798,12 @@ yhF yhF mUv yhF -oMX +yhF kpH kpH kpH +gwm kpH -tYn kpH aaa aiF @@ -56723,7 +57060,7 @@ kpH rYm hAP oYA -ayR +mTh kpH aaa aiF @@ -56978,9 +57315,9 @@ yhF dtE kpH hlg -ayR -ayR -ayR +cIl +ldv +xHG kpH aaa aiF diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index fc5ac8005722..8c12bb1f32cf 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -2940,6 +2940,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/catwalk_floor, /area/station/maintenance/central/greater) +"anW" = ( +/obj/effect/landmark/carpspawn, +/turf/open/floor/engine/hull, +/area/space) "anX" = ( /obj/machinery/door/airlock/maintenance_hatch, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, @@ -3261,6 +3265,11 @@ }, /turf/open/floor/iron/dark, /area/station/security/prison/garden) +"arO" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space) "asc" = ( /obj/effect/turf_decal/trimline/purple/filled/corner{ dir = 4 @@ -3420,6 +3429,9 @@ /obj/effect/spawner/random/engineering/tracking_beacon, /turf/open/floor/iron/grimy, /area/station/ai_monitored/turret_protected/aisat/foyer) +"auw" = ( +/turf/closed/wall/r_wall, +/area/station/engineering/shipbreaker_hut) "auz" = ( /turf/closed/wall, /area/ruin/powered/clownplanet) @@ -3799,6 +3811,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/station/hallway/secondary/service) +"axm" = ( +/obj/effect/spawner/random/structure/grille, +/turf/open/space/basic, +/area/space) "axp" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 8 @@ -5808,7 +5824,7 @@ /obj/structure/bed/dogbed/runtime, /obj/machinery/light/directional/north, /obj/structure/sign/clock/directional/north, -/mob/living/simple_animal/pet/cat/runtime, +/mob/living/basic/pet/cat/runtime, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/cmo) "aOF" = ( @@ -7848,14 +7864,21 @@ /obj/item/folder/white{ pixel_x = 5 }, +/obj/item/pen/fountain{ + pixel_x = -9; + pixel_y = 7 + }, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = 8 + }, +/obj/item/stamp/denied{ + pixel_y = 6 + }, /obj/item/stamp/head/rd{ pixel_x = 6; pixel_y = 2 }, -/obj/item/pen/fountain{ - pixel_x = -4; - pixel_y = 7 - }, /turf/open/floor/glass/reinforced, /area/station/command/heads_quarters/rd) "buv" = ( @@ -9013,6 +9036,17 @@ "bMb" = ( /turf/closed/wall, /area/station/hallway/primary/tram/right) +"bMx" = ( +/obj/machinery/coffeemaker/impressa{ + pixel_y = 5 + }, +/obj/item/storage/box/coffeepack{ + pixel_x = 9; + pixel_y = -1 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "bMz" = ( /obj/effect/turf_decal/trimline/yellow/warning{ dir = 8 @@ -11120,6 +11154,9 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/dark, /area/station/security/interrogation) +"cse" = ( +/turf/open/floor/engine/hull, +/area/space) "csr" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, @@ -12253,6 +12290,14 @@ /obj/item/paper_bin, /obj/item/pen, /obj/effect/turf_decal/tile/blue/fourcorners, +/obj/item/stamp/denied{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/stamp/granted{ + pixel_x = 4; + pixel_y = 5 + }, /obj/item/stamp/head/cmo, /turf/open/floor/iron/white, /area/station/command/heads_quarters/cmo) @@ -12508,6 +12553,11 @@ /obj/machinery/light/directional/north, /turf/open/misc/asteroid, /area/station/security/prison/workout) +"cRO" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/yellow, +/turf/open/space/basic, +/area/station/engineering/shipbreaker_hut) "cRT" = ( /obj/machinery/camera{ c_tag = "Security - Detective's Office"; @@ -13401,6 +13451,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/commons/dorms) +"dhm" = ( +/obj/machinery/computer/security/telescreen/entertainment/directional/east, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "dhA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/rack, @@ -14690,6 +14744,9 @@ /obj/item/storage/backpack/duffelbag/med/surgery, /turf/open/floor/iron/white, /area/station/medical/surgery/aft) +"dCL" = ( +/turf/closed/wall, +/area/station/medical/pathology) "dDd" = ( /obj/structure/closet{ name = "Evidence Closet 3" @@ -15492,6 +15549,18 @@ /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/iron, /area/station/maintenance/tram/left) +"dPR" = ( +/obj/structure/closet/mini_fridge, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/reagent_containers/cup/soda_cans/sol_dry, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "dPS" = ( /obj/machinery/modular_computer/preset/id{ dir = 8 @@ -17914,6 +17983,9 @@ /obj/effect/landmark/start/prisoner, /turf/open/floor/iron, /area/station/security/prison/safe) +"eBC" = ( +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "eBF" = ( /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 @@ -20899,6 +20971,11 @@ }, /turf/open/floor/iron/dark/textured_large, /area/station/security/bitden) +"fAc" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) "fAg" = ( /obj/structure/table, /obj/item/restraints/handcuffs, @@ -23227,6 +23304,11 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/service/barber) +"gpu" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) "gpH" = ( /obj/effect/turf_decal/siding/thinplating, /obj/structure/cable, @@ -25991,6 +26073,14 @@ "hkU" = ( /obj/structure/table/wood, /obj/item/folder/red, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, /obj/item/stamp/head/hos, /obj/item/food/spaghetti/pastatomato/soulful, /turf/open/floor/carpet, @@ -26836,6 +26926,10 @@ /obj/machinery/airalarm/directional/south, /turf/open/floor/iron, /area/station/command/gateway) +"hAy" = ( +/obj/structure/cable, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "hAD" = ( /turf/open/floor/iron/freezer, /area/station/commons/toilet) @@ -28958,6 +29052,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron/white, /area/station/medical/chemistry) +"iiI" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "iiM" = ( /obj/structure/table, /obj/structure/cable, @@ -29799,6 +29899,10 @@ /obj/structure/table, /turf/open/floor/iron/smooth, /area/station/maintenance/central/greater) +"iwp" = ( +/obj/structure/cable, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "iws" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/poddoor/shutters{ @@ -30008,6 +30112,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/white, /area/station/medical/medbay/central) +"iyV" = ( +/obj/structure/lattice, +/turf/open/openspace/airless, +/area/station/asteroid) "izy" = ( /obj/structure/filingcabinet/chestdrawer, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -30639,6 +30747,10 @@ /obj/effect/turf_decal/tile/neutral/fourcorners, /turf/open/floor/iron/dark, /area/station/hallway/secondary/exit/departure_lounge) +"iKD" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space) "iKN" = ( /obj/docking_port/stationary/syndicate/northwest{ dir = 8 @@ -31004,6 +31116,14 @@ "iQx" = ( /obj/structure/table/wood, /obj/item/folder/blue, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/granted{ + pixel_y = 4; + pixel_x = 5 + }, /obj/item/stamp/head/captain, /obj/machinery/door/window{ base_state = "right"; @@ -35956,6 +36076,14 @@ pixel_x = 5 }, /obj/machinery/light/directional/west, +/obj/item/stamp/granted{ + pixel_y = 11; + pixel_x = -6 + }, +/obj/item/stamp/denied{ + pixel_x = -6; + pixel_y = 4 + }, /turf/open/floor/wood, /area/station/command/heads_quarters/hop) "kqT" = ( @@ -36245,7 +36373,7 @@ 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, +/mob/living/basic/pet/cat/jerry, /turf/open/floor/iron, /area/station/maintenance/tram/mid) "kxX" = ( @@ -37659,6 +37787,9 @@ /obj/machinery/status_display/evac/directional/south, /turf/open/floor/iron, /area/station/security/checkpoint/arrivals) +"kRh" = ( +/turf/closed/wall, +/area/station/engineering/shipbreaker_hut) "kRm" = ( /obj/machinery/door/airlock/command{ name = "Captain's Quarters" @@ -39695,6 +39826,11 @@ }, /turf/closed/wall/r_wall, /area/station/science/ordnance/storage) +"lwR" = ( +/obj/structure/marker_beacon/yellow, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/engineering/shipbreaker_hut) "lwV" = ( /obj/machinery/camera/emp_proof{ c_tag = "Engineering - Atmospherics Plasma Chamber"; @@ -40190,6 +40326,12 @@ }, /turf/open/floor/iron/smooth, /area/station/hallway/primary/tram/center) +"lGd" = ( +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/effect/mapping_helpers/apc/full_charge, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "lGu" = ( /obj/structure/lattice/catwalk, /obj/structure/railing, @@ -40298,6 +40440,11 @@ }, /turf/open/floor/iron/white, /area/station/science/lower) +"lIF" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/station/engineering/shipbreaker_hut) "lIK" = ( /obj/structure/railing{ dir = 4; @@ -41705,6 +41852,12 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, /area/station/maintenance/starboard/greater) +"meJ" = ( +/obj/structure/chair/comfy/teal{ + dir = 4 + }, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "meR" = ( /obj/effect/turf_decal/trimline/purple/filled/line{ dir = 1 @@ -44698,6 +44851,10 @@ /obj/machinery/mineral/processing_unit_console, /turf/closed/wall, /area/station/maintenance/department/cargo) +"nfw" = ( +/obj/machinery/computer/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "nfB" = ( /obj/structure/table, /obj/effect/turf_decal/trimline/yellow/filled/line{ @@ -45827,6 +45984,10 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/commons/dorms) +"nvL" = ( +/obj/structure/lattice/catwalk, +/turf/open/openspace/airless, +/area/station/asteroid) "nvU" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, @@ -55148,6 +55309,11 @@ /obj/effect/spawner/random/engineering/flashlight, /turf/open/floor/iron/smooth, /area/station/maintenance/starboard/lesser) +"qvG" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable, +/turf/open/space/basic, +/area/space) "qvK" = ( /obj/structure/chair/office/light, /obj/effect/turf_decal/trimline/blue/filled/corner{ @@ -55725,10 +55891,18 @@ "qEv" = ( /obj/structure/table/reinforced, /obj/item/folder/yellow, -/obj/item/stamp/head/ce, /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 }, +/obj/item/stamp{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/stamp/denied{ + pixel_x = -5; + pixel_y = 4 + }, +/obj/item/stamp/head/ce, /turf/open/floor/iron/dark, /area/station/command/heads_quarters/ce) "qEw" = ( @@ -56292,6 +56466,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron, /area/station/commons/dorms) +"qMU" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "qMW" = ( /obj/effect/turf_decal/bot/right, /obj/effect/decal/cleanable/dirt, @@ -58479,6 +58657,17 @@ }, /turf/open/floor/cult, /area/station/service/chapel/office) +"rvk" = ( +/obj/item/radio/intercom/directional/south, +/obj/effect/spawner/random/entertainment/cigarette{ + pixel_y = -1 + }, +/obj/effect/spawner/random/entertainment/lighter{ + pixel_x = 7 + }, +/obj/structure/table/wood, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "rvo" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -58496,6 +58685,9 @@ /obj/effect/spawner/random/engineering/tank, /turf/open/floor/iron, /area/station/engineering/atmos) +"rvS" = ( +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "rvV" = ( /obj/item/stack/ore/iron, /turf/open/misc/asteroid, @@ -62299,6 +62491,11 @@ /obj/effect/mapping_helpers/airlock/access/any/science/general, /turf/open/floor/stone, /area/station/smithing) +"sJc" = ( +/obj/structure/lattice/catwalk, +/obj/structure/marker_beacon/yellow, +/turf/open/space/basic, +/area/space) "sJd" = ( /obj/structure/lattice/catwalk, /obj/effect/decal/cleanable/dirt, @@ -66594,6 +66791,10 @@ "uax" = ( /turf/open/floor/iron, /area/station/cargo/storage) +"uay" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/iron, +/area/station/engineering/shipbreaker_hut) "uaC" = ( /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/neutral/half/contrasted{ @@ -68136,6 +68337,10 @@ /obj/item/pai_card, /turf/open/floor/iron/white, /area/station/science/lower) +"uze" = ( +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/station/engineering/shipbreaker_hut) "uzk" = ( /obj/structure/railing, /obj/structure/cable, @@ -68355,7 +68560,7 @@ }, /obj/item/stamp/denied{ pixel_x = -6; - pixel_y = 4 + pixel_y = 9 }, /obj/item/stamp{ pixel_x = -6 @@ -73865,6 +74070,10 @@ /obj/effect/turf_decal/trimline/white/warning, /turf/open/floor/iron, /area/station/maintenance/tram/right) +"wiy" = ( +/obj/machinery/shipbreaker, +/turf/open/floor/plating/airless, +/area/station/engineering/shipbreaker_hut) "wiI" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "outerbrigleft"; @@ -74140,6 +74349,9 @@ }, /turf/open/floor/iron/dark, /area/station/service/chapel/monastery) +"won" = ( +/turf/open/space/basic, +/area/shipbreak) "wox" = ( /obj/machinery/door/airlock/atmos{ name = "The Pipe Cave" @@ -75601,6 +75813,10 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/engineering/atmospherics_engine) +"wJF" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/station/engineering/shipbreaker_hut) "wJM" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -76540,7 +76756,7 @@ "xbh" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/closed/wall/r_wall, +/turf/closed/wall, /area/station/medical/pathology) "xbp" = ( /obj/machinery/computer/shuttle/labor, @@ -78719,6 +78935,11 @@ }, /turf/open/floor/circuit, /area/station/ai_monitored/turret_protected/aisat_interior) +"xQJ" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/light/directional/east, +/turf/open/space/basic, +/area/station/engineering/shipbreaker_hut) "xQK" = ( /obj/effect/turf_decal/trimline/yellow/filled/line{ dir = 1 @@ -103222,9 +103443,9 @@ vXM rWa vXM oQf +arO vXM -vXM -oQf +qdd vXM oQf vXM @@ -103479,7 +103700,7 @@ pHM pHM pHM rWa -pHM +fAc pHM qdd vXM @@ -103736,7 +103957,7 @@ vXM vXM vXM pHM -vXM +arO vXM rWa pHM @@ -103993,7 +104214,7 @@ vXM vXM vXM pHM -vXM +qvG vXM vXM vXM @@ -104250,7 +104471,7 @@ aac aac aac aai -vXM +qvG vXM vXM vXM @@ -104507,7 +104728,7 @@ vXM vXM vXM aac -aac +xAW aac vXM vXM @@ -104764,7 +104985,7 @@ vXM vXM vXM aac -aac +xAW aac vXM vXM @@ -105021,7 +105242,7 @@ vXM vXM vXM aac -aac +xAW aac aac aac @@ -105278,7 +105499,7 @@ vXM vXM vXM aac -aac +xAW aac aac aac @@ -105535,7 +105756,7 @@ vXM vXM vXM aac -aac +xAW aac aac aac @@ -105792,6 +106013,7 @@ vXM vXM vXM vXM +arO vXM vXM vXM @@ -105802,14 +106024,13 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +gpu +gpu +gpu +gpu +gpu +gpu +gpu vXM vXM vXM @@ -106049,6 +106270,7 @@ vXM vXM vXM vXM +arO vXM vXM vXM @@ -106060,13 +106282,12 @@ vXM vXM vXM vXM +kfT vXM vXM +kfT vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -106306,6 +106527,7 @@ vXM vXM vXM vXM +arO vXM vXM vXM @@ -106317,16 +106539,15 @@ vXM vXM vXM vXM +kfT vXM vXM +kfT vXM vXM vXM vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -106563,6 +106784,7 @@ vXM vXM vXM vXM +arO vXM vXM vXM @@ -106574,16 +106796,15 @@ vXM vXM vXM vXM +kfT vXM vXM +kfT vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM +kfT +kfT +gpu vXM vXM vXM @@ -106820,6 +107041,7 @@ vXM vXM vXM vXM +arO vXM vXM vXM @@ -106831,16 +107053,15 @@ vXM vXM vXM vXM +kfT vXM vXM +kfT vXM vXM +kfT vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -107077,6 +107298,7 @@ aac vXM vXM vXM +arO vXM vXM vXM @@ -107088,16 +107310,15 @@ vXM vXM vXM vXM +kfT vXM vXM +kfT vXM vXM +kfT vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -107334,6 +107555,7 @@ aac vXM vXM vXM +arO vXM vXM vXM @@ -107345,16 +107567,15 @@ vXM vXM vXM vXM +cRO +lIF +lIF +lIF +lIF +wJF +lwR vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -107591,27 +107812,27 @@ igy aaN vXM vXM +arO vXM vXM vXM vXM +sJc +iKD vXM vXM vXM vXM +wJF +lIF +lIF +kRh +kRh +iiI +kRh +kRh vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -107846,29 +108067,29 @@ uUX uUX dRu aak +iKD +iKD +qvG +qvG +qvG +qvG +qvG +qvG +qvG +lIF +lIF +lIF +lIF +lIF +lIF +eBC +uze +uay +hAy +dPR +qMU vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -108107,25 +108328,25 @@ vXM vXM vXM vXM +sJc vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +auw +nfw +iwp +xQJ +wJF +wJF +eBC +uze +meJ +rvS +bMx +uze +kfT +gpu vXM vXM vXM @@ -108369,20 +108590,20 @@ vXM vXM vXM vXM +auw +lGd +iwp +auw +wiy +auw +eBC +kRh +dhm +rvS +rvk +kRh vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +gpu vXM vXM vXM @@ -108619,36 +108840,36 @@ aaa aaa aaa aaa +kfT +kfT +kfT vXM vXM vXM vXM +auw +eBC +eBC +auw +auw +auw +eBC +kRh +kRh +qMU +uze +kRh vXM vXM vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +axm +axm +axm +axm +axm vXM vXM vXM @@ -108876,36 +109097,36 @@ aaa aaa aaa aaa -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +kfT +kfT +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +axm vXM vXM vXM @@ -109135,34 +109356,34 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -109392,34 +109613,34 @@ aaa aaa vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -109649,34 +109870,34 @@ aaa aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -109906,34 +110127,34 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -110163,33 +110384,33 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -110420,33 +110641,33 @@ aaa aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -110677,33 +110898,33 @@ aaa aaa vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -110934,33 +111155,33 @@ aaa aaa vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -fjj -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -111191,33 +111412,33 @@ aaa aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -111448,33 +111669,33 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -111705,33 +111926,33 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -111962,33 +112183,33 @@ aaa aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -112219,33 +112440,33 @@ aaa aaa vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -112474,6 +112695,35 @@ aaa aaa aaa aaa +kfT +kfT +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -112501,6 +112751,8 @@ vXM vXM vXM vXM +"} +(127,1,1) = {" vXM vXM vXM @@ -112517,48 +112769,17 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -"} -(127,1,1) = {" -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac -aac +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aac +aac vXM vXM vXM @@ -112733,33 +112954,33 @@ aaa aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -112990,33 +113211,33 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -113247,33 +113468,33 @@ aac aac vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -113504,33 +113725,33 @@ aac vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -113761,33 +113982,33 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -114018,33 +114239,33 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -114269,39 +114490,39 @@ aaa aaa aaa aac -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +kfT +kfT +kfT +kfT +kfT +kfT +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -114532,33 +114753,33 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM vXM vXM vXM @@ -114789,35 +115010,35 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm +axm vXM vXM vXM @@ -115046,34 +115267,34 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -115303,34 +115524,34 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +pHM +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +won +pHM +axm vXM vXM vXM @@ -115556,38 +115777,38 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +kfT +kfT +kfT +kfT +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +pHM +axm vXM vXM vXM @@ -115812,9 +116033,15 @@ vXM vXM rge vXM +kfT +kfT vXM vXM vXM +axm +axm +axm +axm vXM vXM vXM @@ -115834,17 +116061,11 @@ vXM vXM vXM vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM -vXM +axm +axm +axm +axm +axm vXM vXM vXM @@ -173141,11 +173362,11 @@ jhd jhd jhd jhd -jhd -jhd -jhd -jhd -jhd +cse +cse +cse +cse +cse jhd jhd jhd @@ -173398,11 +173619,11 @@ jhd jhd jhd jhd -jhd -jhd -jhd -jhd -jhd +cse +cse +cse +cse +cse jhd jhd jhd @@ -173655,11 +173876,11 @@ jhd jhd jhd jhd -jhd -jhd -jhd -jhd -jhd +cse +cse +cse +cse +cse jhd jhd jhd @@ -173912,11 +174133,11 @@ jhd jhd jhd jhd -jhd -jhd -jhd -meb -jhd +cse +cse +cse +anW +cse jhd jhd jhd @@ -174169,11 +174390,11 @@ jhd jhd jhd jhd -jhd -jhd -jhd -jhd -jhd +cse +cse +cse +cse +cse jhd jhd jhd @@ -179781,7 +180002,7 @@ ugt ugt ugt ugt -ugt +dCL adM oGJ oGJ @@ -180038,7 +180259,7 @@ cqn ugt oGv iMd -ugt +dCL oGJ oGJ oGJ @@ -180295,7 +180516,7 @@ dbu ugt puf wvQ -ugt +dCL oGJ oGJ oGJ @@ -180552,7 +180773,7 @@ gWV ugt gWV lAm -ugt +dCL oGJ oGJ oGJ @@ -180809,7 +181030,7 @@ rkd ewk ycI fwB -ugt +dCL oGJ oGJ oGJ @@ -181323,7 +181544,7 @@ jqY jqY jqY nNG -ugt +dCL aak aaa aaa @@ -181830,14 +182051,14 @@ kOL vrJ nNE tMb -ugt -ugt -ugt +dCL +dCL +dCL dhC dhC fLP dhC -ugt +dCL agQ aac aaa @@ -182087,7 +182308,7 @@ lXC txh sAd ykV -ugt +dCL wdi kHB uWO @@ -182344,7 +182565,7 @@ dzj cZN tkh kgN -ugt +dCL mDp jFi lWz @@ -182601,14 +182822,14 @@ ugt ugt ugt jHi -ugt +dCL fpf uWO vvA sCO dyl cHn -ugt +dCL agR agX agX @@ -182858,14 +183079,14 @@ srC srC ugt ugt -ugt -ugt -ugt -ugt -ugt -ugt -ugt -ugt +dCL +dCL +dCL +dCL +dCL +dCL +dCL +dCL aaa aac aac @@ -187496,7 +187717,7 @@ xAp qMZ ptD aac -bFw +nvL aac aac aaa @@ -187753,7 +187974,7 @@ aaa yiG mSE lGu -bFw +nvL aac aac aaa @@ -188010,7 +188231,7 @@ bFw wJh iWf tic -bFw +nvL aac aac aaa @@ -188264,9 +188485,9 @@ aaa aaa aac bFw -bFw -bFw -bFw +iyV +iyV +iyV aaa aaa aaa @@ -188521,9 +188742,9 @@ lVi aaa aaa aaa -bFw -bFw -bFw +nvL +nvL +nvL aaa aaa aaa @@ -189048,7 +189269,7 @@ soq dMh nNX xCS -soq +lVi jPz eli dLe @@ -190076,7 +190297,7 @@ soq nNX cLZ xCS -soq +lVi eli jPz dLe diff --git a/_maps/shuttles/emergency_hugcage.dmm b/_maps/shuttles/emergency_hugcage.dmm index 307c1d2477b0..cd1d97b043e8 100644 --- a/_maps/shuttles/emergency_hugcage.dmm +++ b/_maps/shuttles/emergency_hugcage.dmm @@ -280,7 +280,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/virtual_domains/pipedream.dmm b/_maps/virtual_domains/pipedream.dmm index 9bc3b3a9b40c..eaaf1af712c2 100644 --- a/_maps/virtual_domains/pipedream.dmm +++ b/_maps/virtual_domains/pipedream.dmm @@ -1644,7 +1644,7 @@ /turf/open/floor/plating, /area/virtual_domain/powered) "Ym" = ( -/mob/living/simple_animal/pet/cat/space, +/mob/living/basic/pet/cat/space, /obj/structure/bed/dogbed{ name = "cat bed" }, diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 8bcb27351573..d58dda3dbbac 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -25,6 +25,16 @@ ///Flags for ai_behavior new() #define AI_CONTROLLER_INCOMPATIBLE (1<<0) +//Return flags for ai_behavior/perform() +///Update this behavior's cooldown +#define AI_BEHAVIOR_DELAY (1<<0) +///Finish the behavior successfully +#define AI_BEHAVIOR_SUCCEEDED (1<<1) +///Finish the behavior unsuccessfully +#define AI_BEHAVIOR_FAILED (1<<1) + +#define AI_BEHAVIOR_INSTANT (NONE) + ///Does this task require movement from the AI before it can be performed? #define AI_BEHAVIOR_REQUIRE_MOVEMENT (1<<0) ///Does this require the current_movement_target to be adjacent and in reach? diff --git a/code/__DEFINES/ai/ai_blackboard.dm b/code/__DEFINES/ai/ai_blackboard.dm index 6807990c1b6d..ee38e759a3bd 100644 --- a/code/__DEFINES/ai/ai_blackboard.dm +++ b/code/__DEFINES/ai/ai_blackboard.dm @@ -114,6 +114,18 @@ ///list of foods this mob likes #define BB_BASIC_FOODS "BB_basic_foods" +///key holding any food we've found +#define BB_TARGET_FOOD "BB_TARGET_FOOD" + +///key holding emotes we play after eating +#define BB_EAT_EMOTES "BB_eat_emotes" + +///key holding the next time we eat +#define BB_NEXT_FOOD_EAT "BB_next_food_eat" + +///key holding our eating cooldown +#define BB_EAT_FOOD_COOLDOWN "BB_eat_food_cooldown" + /// Blackboard key for a held item #define BB_SIMPLE_CARRY_ITEM "BB_SIMPLE_CARRY_ITEM" diff --git a/code/__DEFINES/ai/bot_keys.dm b/code/__DEFINES/ai/bot_keys.dm index 5cf2e4263d42..3c9a8551f501 100644 --- a/code/__DEFINES/ai/bot_keys.dm +++ b/code/__DEFINES/ai/bot_keys.dm @@ -35,6 +35,10 @@ #define BB_NEAR_DEATH_SPEECH "near_death_speech" ///in crit patient we must alert medbay about #define BB_PATIENT_IN_CRIT "patient_in_crit" +///how much time interval before we clear list +#define BB_UNREACHABLE_LIST_COOLDOWN "unreachable_list_cooldown" +///can we clear the list now +#define BB_CLEAR_LIST_READY "clear_list_ready" // cleanbots ///key that holds the foaming ability diff --git a/code/__DEFINES/ai/monkey.dm b/code/__DEFINES/ai/monkey.dm index fc4af74d9f08..0e8c44e40fa8 100644 --- a/code/__DEFINES/ai/monkey.dm +++ b/code/__DEFINES/ai/monkey.dm @@ -15,3 +15,4 @@ #define BB_MONKEY_TARGET_MONKEYS "BB_monkey_target_monkeys" #define BB_MONKEY_DISPOSING "BB_monkey_disposing" #define BB_MONKEY_RECRUIT_COOLDOWN "BB_monkey_recruit_cooldown" +#define BB_RESISTING "BB_resisting" diff --git a/code/__DEFINES/ai/monsters.dm b/code/__DEFINES/ai/monsters.dm index f403d7cec39c..421a73085c83 100644 --- a/code/__DEFINES/ai/monsters.dm +++ b/code/__DEFINES/ai/monsters.dm @@ -122,6 +122,10 @@ #define BB_MINEBOT_DUMP_ABILITY "minebot_dump_ability" /// key that stores our target turf #define BB_TARGET_MINERAL_TURF "target_mineral_turf" +///key that holds our missile ability +#define BB_MINEBOT_MISSILE_ABILITY "minebot_missile_ability" +///key that holds our landmine ability +#define BB_MINEBOT_LANDMINE_ABILITY "minebot_landmine_ability" /// key that stores list of the turfs we ignore #define BB_BLACKLIST_MINERAL_TURFS "blacklist_mineral_turfs" /// key that stores the previous blocked wall @@ -130,6 +134,20 @@ #define BB_AUTOMATED_MINING "automated_mining" /// key that stores the nearest dead human #define BB_NEARBY_DEAD_MINER "nearby_dead_miner" +///key that holds the drone we defend +#define BB_DRONE_DEFEND "defend_drone" +///key that holds the minimum distance before we flee +#define BB_MINIMUM_SHOOTING_DISTANCE "minimum_shooting_distance" +///key that holds the miner we must befriend +#define BB_MINER_FRIEND "miner_friend" +///key that holds the missile target +#define BB_MINEBOT_MISSILE_TARGET "minebot_missile_target" +///should we auto protect? +#define BB_MINEBOT_AUTO_DEFEND "minebot_auto_defend" +///should we repair drones? +#define BB_MINEBOT_REPAIR_DRONE "minebot_repair_drone" +///should we plant mines? +#define BB_MINEBOT_PLANT_MINES "minebot_plant_mines" //seedling keys /// the water can we will pick up @@ -217,3 +235,31 @@ #define BB_WIZARD_BLINK_SPELL "BB_wizard_blink_spell" /// 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" diff --git a/code/__DEFINES/ai/pet_commands.dm b/code/__DEFINES/ai/pet_commands.dm index 1e692b9f805a..7404cb9acda8 100644 --- a/code/__DEFINES/ai/pet_commands.dm +++ b/code/__DEFINES/ai/pet_commands.dm @@ -7,3 +7,6 @@ #define BB_PET_TARGETING_STRATEGY "BB_pet_targeting" /// Typecache of weakrefs to mobs this mob is friends with, will follow their instructions and won't attack them #define BB_FRIENDS_LIST "BB_friends_list" + +///mothroach next meal key! +#define BB_MOTHROACH_NEXT_EAT "mothroach_next_eat" diff --git a/code/__DEFINES/ai/pets.dm b/code/__DEFINES/ai/pets.dm index e41c9ac0c3ff..f6527463075d 100644 --- a/code/__DEFINES/ai/pets.dm +++ b/code/__DEFINES/ai/pets.dm @@ -50,4 +50,7 @@ #define BB_HOARD_LOCATION_RANGE "hoard_location_range" /// key that holds items we arent interested in hoarding #define BB_IGNORE_ITEMS "ignore_items" - +///the name of our trick +#define BB_TRICK_NAME "trick_name" +///the sequence of our trick +#define BB_TRICK_SEQUENCE "trick_sequence" diff --git a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm index 636eb201d6bf..98551005635e 100644 --- a/code/__DEFINES/atmospherics/atmos_mob_interaction.dm +++ b/code/__DEFINES/atmospherics/atmos_mob_interaction.dm @@ -22,8 +22,8 @@ #define EUPHORIA_ACTIVE 1 #define EUPHORIA_LAST_FLAG 2 -#define MIASMA_CORPSE_MOLES 0.02 -#define MIASMA_GIBS_MOLES 0.005 +#define MIASMA_CORPSE_MOLES 0.03 +#define MIASMA_GIBS_MOLES 0.008 #define MIN_TOXIC_GAS_DAMAGE 1 #define MAX_TOXIC_GAS_DAMAGE 10 diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index a229dd3e3c42..396f100d31ab 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -53,6 +53,8 @@ #define PERMIT_HUD "25" // for implants to let you see sensor field #define SENSOR_HUD "26" +// for silicons to know if you're crew +#define CREW_HUD "27" //monkestation edit end //by default everything in the hud_list of an atom is an image @@ -73,6 +75,7 @@ #define DATA_HUD_FAN 10 #define DATA_HUD_PERMIT 11 //monkestation edit #define DATA_HUD_SENSORS 12 //monkestation edit +#define DATA_HUD_CREW 13 //monkestation edit // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/basic_mobs.dm b/code/__DEFINES/basic_mobs.dm index c7275f7c423e..02b528d12626 100644 --- a/code/__DEFINES/basic_mobs.dm +++ b/code/__DEFINES/basic_mobs.dm @@ -12,6 +12,8 @@ #define FLAMMABLE_MOB (1<<3) /// Mob never takes damage from unarmed attacks #define IMMUNE_TO_FISTS (1<<4) +/// Disables the function of attacking random body zones +#define PRECISE_ATTACK_ZONES (1<<6) /// Temporary trait applied when an attack forecast animation has completed #define TRAIT_BASIC_ATTACK_FORECAST "trait_basic_attack_forecast" @@ -20,6 +22,9 @@ /// Above this speed we stop gliding because it looks silly #define END_GLIDE_SPEED 10 +///hunger cooldown for basic mobs +#define EAT_FOOD_COOLDOWN 45 SECONDS + ///mook attack status flags #define MOOK_ATTACK_NEUTRAL 0 #define MOOK_ATTACK_WARMUP 1 @@ -28,3 +33,6 @@ ///keeps track of how many gutlunches are born GLOBAL_VAR_INIT(gutlunch_count, 0) + +///Pet customization settings saved for every client +GLOBAL_LIST_EMPTY(customized_pets) diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index d6de977fecb6..ba46fc210693 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -275,6 +275,8 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( #define TOTAL_BODYPART_COUNT 6 +GLOBAL_LIST_INIT(all_body_zones, list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) +GLOBAL_LIST_INIT(limb_zones, list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) GLOBAL_LIST_INIT(arm_zones, list(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) #define BODY_ZONE_PRECISE_EYES "eyes" diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm index a40436e77365..5641b4affce3 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_x_act.dm @@ -50,6 +50,16 @@ #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) ///for any rightclick tool behaviors: (mob/living/user, obj/item/I) #define COMSIG_ATOM_SECONDARY_TOOL_ACT(tooltype) "tool_secondary_act_[tooltype]" + +/// Sent from [atom/proc/ranged_item_interaction], when this atom is left-clicked on by a mob with an item while not adjacent +#define COMSIG_ATOM_RANGED_ITEM_INTERACTION "atom_ranged_item_interaction" +/// Sent from [atom/proc/ranged_item_interaction], when this atom is right-clicked on by a mob with an item while not adjacent +#define COMSIG_ATOM_RANGED_ITEM_INTERACTION_SECONDARY "atom_ranged_item_interaction_secondary" +/// Sent from [atom/proc/ranged_item_interaction], when a mob is using this item while left-clicking on by an atom while not adjacent +#define COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM "ranged_item_interacting_with_atom" +/// Sent from [atom/proc/ranged_item_interaction], when a mob is using this item while right-clicking on by an atom while not adjacent +#define COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY "ranged_item_interacting_with_atom_secondary" + // We have the same returns here as COMSIG_ATOM_TOOL_ACT // #define COMPONENT_BLOCK_TOOL_ATTACK (1<<0) #define COMSIG_ATOM_DOOR_OPEN "atom_door_open" diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm index c067427b88ad..8f8a194c78ca 100644 --- a/code/__DEFINES/dcs/signals/signals_fish.dm +++ b/code/__DEFINES/dcs/signals/signals_fish.dm @@ -9,6 +9,8 @@ #define COMSIG_FISH_LIFE "fish_life" ///From /datum/fish_trait/eat_fish: (predator) #define COMSIG_FISH_EATEN_BY_OTHER_FISH "fish_eaten_by_other_fish" +///From /obj/item/fish/generate_reagents_to_add, which returns a holder when the fish is eaten or composted for example: (list/reagents) +#define COMSIG_GENERATE_REAGENTS_TO_ADD "generate_reagents_to_add" ///From /obj/item/fish/feed: (fed_reagents, fed_reagent_type) #define COMSIG_FISH_FED "fish_on_fed" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm index 4fdb0479fe34..5cac1d350b77 100644 --- a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_living.dm @@ -145,7 +145,12 @@ #define COMSIG_LIVING_WALL_EXITED "living_wall_exited" ///From base of mob/living/ZImpactDamage() (mob/living, levels, turf/t) #define COMSIG_LIVING_Z_IMPACT "living_z_impact" - #define NO_Z_IMPACT_DAMAGE (1<<0) + /// Just for the signal return, does not run normal living handing of z fall damage for mobs + #define ZIMPACT_CANCEL_DAMAGE (1<<0) + /// Do not show default z-impact message + #define ZIMPACT_NO_MESSAGE (1<<1) + /// Do not do the spin animation when landing + #define ZIMPACT_NO_SPIN (1<<2) /// From mob/living/try_speak(): (message, ignore_spam, forced) #define COMSIG_LIVING_TRY_SPEECH "living_vocal_speech" @@ -215,6 +220,10 @@ /// From /datum/ai/behavior/climb_tree/perform() : (mob/living/basic/living_pawn) #define COMSIG_LIVING_CLIMB_TREE "living_climb_tree" +///from /mob/living/proc/check_block(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration, damage_type) +#define COMSIG_LIVING_CHECK_BLOCK "living_check_block" + #define SUCCESSFUL_BLOCK (1<<0) + /// Sent on a mob from /datum/component/mob_chain when component is attached with it as the "front" : (mob/living/basic/tail) #define COMSIG_MOB_GAINED_CHAIN_TAIL "living_gained_chain_tail" /// Sent on a mob from /datum/component/mob_chain when component is detached from it as the "front" : (mob/living/basic/tail) diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 89b7963d91d5..4360c16aacbb 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -97,8 +97,11 @@ ///Fish size thresholds for w_class. #define FISH_SIZE_TINY_MAX 30 #define FISH_SIZE_SMALL_MAX 50 -#define FISH_SIZE_NORMAL_MAX 90 -#define FISH_SIZE_BULKY_MAX 130 +#define FISH_SIZE_NORMAL_MAX 80 +#define FISH_SIZE_BULKY_MAX 120 +///size threshold for requiring two-handed carry +#define FISH_SIZE_TWO_HANDS_REQUIRED 135 +#define FISH_SIZE_HUGE_MAX 165 ///The coefficient for maximum weight/size divergence relative to the averages. #define MAX_FISH_DEVIATION_COEFF 2.5 @@ -108,6 +111,19 @@ ///The number of fillets is multiplied by the fish' size and divided by this. #define FISH_FILLET_NUMBER_SIZE_DIVISOR 30 +///The slowdown of the fish when carried begins at this value +#define FISH_WEIGHT_SLOWDOWN 2100 +///The value of the slowdown equals to the weight divided by this (and then at the power of a sub-1 exponent) +#define FISH_WEIGHT_SLOWDOWN_DIVISOR 500 +///The sub-one exponent that results in the final slowdown of the fish item +#define FISH_WEIGHT_SLOWDOWN_EXPONENT 0.54 +///Used to calculate the force of the fish by comparing (1 + log(weight/this_define)) and the w_class of the item. +#define FISH_WEIGHT_FORCE_DIVISOR 250 +///The multiplier used in the FISH_WEIGHT_BITE_DIVISOR define +#define FISH_WEIGHT_GRIND_TO_BITE_MULT 0.4 +///Used to calculate how many bites a fish can take and therefore the amount of reagents it has. +#define FISH_WEIGHT_BITE_DIVISOR (FISH_GRIND_RESULTS_WEIGHT_DIVISOR * FISH_WEIGHT_GRIND_TO_BITE_MULT) + ///The breeding timeout for newly instantiated fish is multiplied by this. #define NEW_FISH_BREEDING_TIMEOUT_MULT 2 ///The last feeding timestamp of newly instantiated fish is multiplied by this: ergo, they spawn 50% hungry. @@ -129,8 +145,70 @@ #define AQUARIUM_FLUID_SALTWATER "Saltwater" #define AQUARIUM_FLUID_SULPHWATEVER "Sulfuric Water" #define AQUARIUM_FLUID_AIR "Air" -#define AQUARIUM_FLUID_ANADROMOUS "Adaptive to both Freshwater and Saltwater" -#define AQUARIUM_FLUID_ANY_WATER "Adaptive to all kind of water" +#define AQUARIUM_FLUID_ANADROMOUS "Anadromous" +#define AQUARIUM_FLUID_ANY_WATER "Any Fluid" ///Fluff. The name of the aquarium company shown in the fish catalog #define AQUARIUM_COMPANY "Aquatech Ltd." + +/// how long between electrogenesis zaps +#define ELECTROGENESIS_DURATION 40 SECONDS + +/// a random range the electrogenesis cooldown varies by +#define ELECTROGENESIS_VARIANCE (rand(-10 SECONDS, 10 SECONDS)) + +#define FISH_BEAUTY_DISGUSTING -500 +#define FISH_BEAUTY_UGLY -300 +#define FISH_BEAUTY_BAD -200 +#define FISH_BEAUTY_NULL 0 +#define FISH_BEAUTY_GENERIC 250 +#define FISH_BEAUTY_GOOD 450 +#define FISH_BEAUTY_GREAT 600 +#define FISH_BEAUTY_EXCELLENT 700 + +//Fish breeding stops if fish count exceeds this. +#define AQUARIUM_MAX_BREEDING_POPULATION 20 + +//Minigame defines +/// The height of the minigame slider. Not in pixels, but minigame units. +#define FISHING_MINIGAME_AREA 1000 + +///The fish needs to be cooked for at least this long so that it can be safely eaten +#define FISH_SAFE_COOKING_DURATION 30 SECONDS + +///Defines for fish properties from the collect_fish_properties proc +#define FISH_PROPERTIES_FAV_BAIT "fav_bait" +#define FISH_PROPERTIES_BAD_BAIT "bad_bait" +#define FISH_PROPERTIES_TRAITS "fish_traits" +#define FISH_PROPERTIES_BEAUTY_SCORE "beauty_score" +#define FISH_PROPERTIES_EVOLUTIONS "evolutions" + +///Define for favorite and disliked baits that aren't just item typepaths. +#define FISH_BAIT_TYPE "Type" +#define FISH_BAIT_FOODTYPE "Foodtype" +#define FISH_BAIT_REAGENT "Reagent" +#define FISH_BAIT_VALUE "Value" +#define FISH_BAIT_AMOUNT "Amount" + +///We multiply the weight of fish inside the loot table by this value if we are goofy enough to fish without a bait. +#define FISH_WEIGHT_MULT_WITHOUT_BAIT 0.15 + +/** + * A macro to ensure the wikimedia filenames of fish icons are unique, especially since there're a couple fish that have + * quite ambiguous names/icon_states like "checkered" or "pike" + */ +#define FISH_AUTOWIKI_FILENAME(fish) SANITIZE_FILENAME("[initial(fish.icon_state)]_wiki_fish") + +///The list keys for the autowiki for fish sources +#define FISH_SOURCE_AUTOWIKI_NAME "name" +#define FISH_SOURCE_AUTOWIKI_ICON "icon" +#define FISH_SOURCE_AUTOWIKI_WEIGHT "weight" +#define FISH_SOURCE_AUTOWIKI_WEIGHT_SUFFIX "weight_suffix" +#define FISH_SOURCE_AUTOWIKI_NOTES "notes" + +///Special value for the name key that always comes first when the data is sorted, regardless of weight. +#define FISH_SOURCE_AUTOWIKI_DUD "Nothing" +///Special value for the name key that always comes last +#define FISH_SOURCE_AUTOWIKI_OTHER "Other Stuff" +///The filename for the icon for "other stuff" which we don't articulate about on the autowiki +#define FISH_SOURCE_AUTOWIKI_QUESTIONMARK "questionmark" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index c9b4aa597b57..e6d8a8bd744b 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -187,6 +187,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define FLOATING (1<<3) /// When moving, will Cross() everything, but won't stop or Bump() anything. #define PHASING (1<<4) +/// The mob is walking on the ceiling. Or is generally just, upside down. +#define UPSIDE_DOWN (1<<5) //Fire and Acid stuff, for resistance_flags #define LAVA_PROOF (1<<0) diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 74d5699a45a0..51187b4d9bce 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -100,12 +100,21 @@ DEFINE_BITFIELD(foodtypes, list( #define FOOD_IN_CONTAINER (1<<0) /// Finger food can be eaten while walking / running around #define FOOD_FINGER_FOOD (1<<1) +/// Examining this edible won't show infos on food types, bites and remote tasting etc. +#define FOOD_NO_EXAMINE (1<<2) +/// This food item doesn't track bitecounts, use responsibly. +#define FOOD_NO_BITECOUNT (1<<3) DEFINE_BITFIELD(food_flags, list( "FOOD_FINGER_FOOD" = FOOD_FINGER_FOOD, "FOOD_IN_CONTAINER" = FOOD_IN_CONTAINER, + "FOOD_NO_EXAMINE" = FOOD_NO_EXAMINE, + "FOOD_NO_BITECOUNT" = FOOD_NO_BITECOUNT, )) +///Define for return value of the after_eat callback that will call OnConsume if it hasn't already. +#define FOOD_AFTER_EAT_CONSUME_ANYWAY 2 + #define STOP_SERVING_BREAKFAST (15 MINUTES) #define FOOD_MEAT_NORMAL 5 diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index e4a250ed0fdc..5ced17323b3c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -97,12 +97,12 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define ismonkey(A) (is_species(A, /datum/species/monkey)) #define isandroid(A) (is_species(A, /datum/species/android)) #define isnightmare(A) (is_species(A, /datum/species/shadow/nightmare)) -#define isipc(A) (is_species(A, /datum/species/ipc)) +#define isipc(A) (is_species(A, /datum/species/ipc)) // Monkestation Addition #define isgoblin(A) (is_species(A, /datum/species/goblin)) //Monkestation Addition #define isfloran(A) (is_species(A, /datum/species/floran)) //Monkestation Addition #define isarachnid(A) (is_species(A, /datum/species/arachnid)) //Monkestation Addition #define isteratoma(A) (is_species(A, /datum/species/teratoma)) //Monkestation Addition - +#define isapid(A) (is_species(A, /datum/species/apid)) //Monkestation Addition //More carbon mobs #define isalien(A) (istype(A, /mob/living/carbon/alien)) @@ -151,7 +151,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list( #define ismining(A) (istype(A, /mob/living/simple_animal/hostile/asteroid) || istype(A, /mob/living/basic/mining)) -//Simple animals +//Simple + Basic animals #define isanimal(A) (istype(A, /mob/living/simple_animal)) #define isrevenant(A) (istype(A, /mob/living/basic/revenant)) @@ -166,7 +166,7 @@ GLOBAL_LIST_INIT(turfs_openspace, 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/mobfactions.dm b/code/__DEFINES/mobfactions.dm index 097a7214e891..d2492ba3541c 100644 --- a/code/__DEFINES/mobfactions.dm +++ b/code/__DEFINES/mobfactions.dm @@ -97,3 +97,7 @@ /// Generates a mob faction for the passed owner, used by stabilized pink extracts #define FACTION_PINK_EXTRACT(owner) "pink_[owner]" + +/// MONKESTATION ADDITIONS +// Apids and Bees!! +#define FACTION_HIVE "hive" diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index 44b1ec80ef57..f4a1a125ac48 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -28,7 +28,7 @@ /// The maximum ratio of water vapor to other gases miasma can be sterilized at. #define MIASTER_STERILIZATION_MAX_HUMIDITY 0.1 /// The minimum amount of miasma that will be sterilized in a reaction tick. -#define MIASTER_STERILIZATION_RATE_BASE 20 +#define MIASTER_STERILIZATION_RATE_BASE 5 /// The temperature required to sterilize an additional mole of miasma in a reaction tick. #define MIASTER_STERILIZATION_RATE_SCALE 20 /// The amount of energy released when a mole of miasma is sterilized. diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index f00075a020c4..cd2d85b7c13d 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -185,3 +185,5 @@ GLOBAL_LIST_INIT(announcer_keys, list( #define SFX_CRUNCHY_BUSH_WHACK "crunchy_bush_whack" #define SFX_TREE_CHOP "tree_chop" #define SFX_ROCK_TAP "rock_tap" +#define SFX_CAT_MEOW "cat_meow" +#define SFX_CAT_PURR "cat_purr" diff --git a/code/__DEFINES/tools.dm b/code/__DEFINES/tools.dm index 76031d5a3830..6891bb053d92 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -34,3 +34,13 @@ /// When [TOOL_ACT_TOOLTYPE_SUCCESS] or [TOOL_ACT_SIGNAL_BLOCKING] are set #define TOOL_ACT_MELEE_CHAIN_BLOCKING (TOOL_ACT_TOOLTYPE_SUCCESS | TOOL_ACT_SIGNAL_BLOCKING) +/// Return when an item interaction is successful. +/// This cancels the rest of the chain entirely and indicates success. +#define ITEM_INTERACT_SUCCESS (1<<0) // Same as TRUE, as most tool (legacy) tool acts return TRUE on success +/// Return to prevent the rest of the attack chain from being executed / preventing the item user from thwacking the target. +/// Similar to [ITEM_INTERACT_SUCCESS], but does not necessarily indicate success. +#define ITEM_INTERACT_BLOCKING (1<<1) + /// Only for people who get confused by the naming scheme + #define ITEM_INTERACT_FAILURE ITEM_INTERACT_BLOCKING +/// Return to skip the rest of the interaction chain, going straight to attack. +#define ITEM_INTERACT_SKIP_TO_ATTACK (1<<2) diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 02a029291468..93a789b83aa6 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -236,6 +236,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /* #define TRAIT_NO_STAGGER "no_stagger" */ /// Getting hit by thrown movables won't push you away /* #define TRAIT_NO_THROW_HITPUSH "no_throw_hitpush" */ +/// This mob likes to eat fish. Raw, uncut fish. +#define TRAIT_FISH_EATER "fish_eater" ///Added to mob or mind, changes the icons of the fish shown in the minigame UI depending on the possible reward. #define TRAIT_REVEAL_FISH "reveal_fish" ///This trait gets you a list of fishes that can be caught when examining a fishing spot. @@ -249,7 +251,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// This trait lets you evaluate someone's fitness level against your own /* #define TRAIT_EXAMINE_FITNESS "reveal_power_level" */ /// These mobs have particularly hygienic tongues -/* #define TRAIT_WOUND_LICKER "wound_licker" */ +#define TRAIT_WOUND_LICKER "wound_licker" /// Mobs with this trait are allowed to use silicon emotes /* #define TRAIT_SILICON_EMOTES_ALLOWED "silicon_emotes_allowed" */ @@ -762,6 +764,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FOOD_GRILLED "food_grilled" /// If this item's been fried #define TRAIT_FOOD_FRIED "food_fried" +/// If this item's been bbq grilled +#define TRAIT_FOOD_BBQ_GRILLED "food_bbq_grilled" /// This is a silver slime created item #define TRAIT_FOOD_SILVER "food_silver" /// If this item's been made by a chef instead of being map-spawned or admin-spawned or such @@ -812,6 +816,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_HAUNTED "haunted" /// An item that, if it has contents, will ignore its contents when scanning for contraband. /* #define TRAIT_CONTRABAND_BLOCKER "contraband_blocker" */ +/// For edible items that cannot be composted inside hydro trays +#define TRAIT_UNCOMPOSTABLE "uncompostable" //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" @@ -849,9 +855,10 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_THROWINGARM "throwing_arm" #define TRAIT_SETTLER "settler" /* #define TRAIT_STRONG_STOMACH "strong_stomach" */ +#define TRAIT_VEGETARIAN "trait_vegetarian" /// This mob always lands on their feet when they fall, for better or for worse. -/* #define TRAIT_CATLIKE_GRACE "catlike_grace" */ +#define TRAIT_CATLIKE_GRACE "catlike_grace" ///if the atom has a sticker attached to it #define TRAIT_STICKERED "stickered" @@ -978,6 +985,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_FISH_AMPHIBIOUS "fish_amphibious" ///Trait needed for the lubefish evolution #define TRAIT_FISH_FED_LUBE "fish_fed_lube" +#define TRAIT_FISH_WELL_COOKED "fish_well_cooked" #define TRAIT_FISH_NO_HUNGER "fish_no_hunger" ///It comes from a fish case. Relevant for bounties so far. /* #define TRAIT_FISH_FROM_CASE "fish_from_case" */ @@ -1193,7 +1201,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// 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" */ +#define TRAIT_BAKEABLE "bakeable" /// Trait given to foam darts that have an insert in them /* #define TRAIT_DART_HAS_INSERT "dart_has_insert" */ @@ -1207,6 +1215,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai ///Trait granted by janitor skillchip, allows communication with cleanbots #define TRAIT_CLEANBOT_WHISPERER "cleanbot_whisperer" +///Trait granted by the miner skillchip, allows communication with minebots +#define TRAIT_ROCK_STONER "rock_stoner" + +///Trait given by the regenerative shield component +#define TRAIT_REGEN_SHIELD "regen_shield" + ///Trait granted by the miner skillchip, allows communication with minebots /* #define TRAIT_ROCK_STONER "rock_stoner" */ @@ -1280,4 +1294,17 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Trait applied to objects and mobs that can attack a boulder and break it down. (See /obj/item/boulder/manual_process()) #define TRAIT_BOULDER_BREAKER "boulder_breaker" +/** + * + * This trait is used in some interactions very high in the interaction chain to allow + * certain atoms to be skipped by said interactions if the user is in combat mode. + * + * Its primarily use case is for stuff like storage and tables, to allow things like emags to be bagged + * (because in some contexts you might want to be emagging a bag, and in others you might want to be storing it.) + * + * This is only checked by certain items explicitly so you can't just add the trait and expect it to work. + * (This may be changed later but I chose to do it this way to avoid messing up interactions which require combat mode) + */ +#define TRAIT_COMBAT_MODE_SKIP_INTERACTION "combat_mode_skip_interaction" + // END TRAIT DEFINES diff --git a/code/__DEFINES/traits/monkestation/sources.dm b/code/__DEFINES/traits/monkestation/sources.dm index 8bd486c45502..8425f792d6ae 100644 --- a/code/__DEFINES/traits/monkestation/sources.dm +++ b/code/__DEFINES/traits/monkestation/sources.dm @@ -1,3 +1,5 @@ +/// Traits related to the comically large spoon's suicide. +#define SPOON_SUICIDE_TRAIT "spoon_suicide" /// Traits given by mechs. #define MECH_TRAIT "mech_trait" /// Traits given by nanites. diff --git a/code/__DEFINES/~monkestation/blueshift.dm b/code/__DEFINES/~monkestation/blueshift.dm index e8ee53be9b89..2cdb3af1217e 100644 --- a/code/__DEFINES/~monkestation/blueshift.dm +++ b/code/__DEFINES/~monkestation/blueshift.dm @@ -234,7 +234,7 @@ See the examinemore module for information. #define CARGO_COMPANY_MICROSTAR (1<<8) #define CARGO_COMPANY_VITEZSTVI_AMMO (1<<9) #define CARGO_COMPANY_RAYNE (1<<10) -//#define CARGO_COMPANY_KEMETEK (1<<11) +#define CARGO_COMPANY_KEMETEK (1<<11) // Company names, because the armament category and company name need to be the exact same, so use defines like this #define NAKAMURA_ENGINEERING_MODSUITS_NAME "Nakamura Engineering MOD Divison" @@ -248,7 +248,7 @@ See the examinemore module for information. #define MICROSTAR_ENERGY_NAME "MicroStar Energy Weapon Coalition" #define VITEZSTVI_AMMO_NAME "Vitezstvi Ammo & Weapon Accessories" #define RAYNE_CORP_NAME "Rayne Corporation" -//#define KEMETEK_NAME "Kemetek Aerospace" +#define KEMETEK_NAME "Kemetek Aerospace" #define COMPANY_INTEREST_GAIN_BIG 10 #define COMPANY_INTEREST_GAIN_AVERAGE 5 diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 5eb92dd15cf3..3fed2d9ac3f5 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -318,7 +318,7 @@ RETURN_TYPE(/list) . = list() for(var/atom/atom_checked as anything in atoms) - if (typecache[atom_checked.type]) + if(atom_checked && typecache[atom_checked.type]) // monkestation edit . += atom_checked ///return a new list with atoms that are not in the typecache list @@ -326,14 +326,14 @@ RETURN_TYPE(/list) . = list() for(var/atom/atom_checked as anything in atoms) - if(!typecache[atom_checked.type]) + if(atom_checked && !typecache[atom_checked.type]) // monkestation edit . += atom_checked ///similar to typecache_filter_list and typecache_filter_list_reverse but it supports an inclusion list and and exclusion list /proc/typecache_filter_multi_list_exclusion(list/atoms, list/typecache_include, list/typecache_exclude) . = list() for(var/atom/atom_checked as anything in atoms) - if(typecache_include[atom_checked.type] && !typecache_exclude[atom_checked.type]) + if(atom_checked && typecache_include[atom_checked.type] && !typecache_exclude[atom_checked.type]) // monkestation edit . += atom_checked /** diff --git a/code/__HELPERS/~monkestation-helpers/roundend.dm b/code/__HELPERS/~monkestation-helpers/roundend.dm index b6bfb7fc59f0..5351e9d2bcff 100644 --- a/code/__HELPERS/~monkestation-helpers/roundend.dm +++ b/code/__HELPERS/~monkestation-helpers/roundend.dm @@ -52,10 +52,13 @@ var/client/client = GLOB.directory[ownerckey] // Use directory for direct lookup (Client might be a differnet mob than when review was made.) if(client && !QDELETED(client?.prefs)) + var/prev_bal = client?.prefs?.metacoins var/adjusted = client?.prefs?.adjust_metacoins( client?.ckey, 5000, reason = "No action taken on cassette:\[[review.submitted_tape.name]\] before round end.", announces = TRUE, donator_multipler = FALSE ) - if(adjusted) - qdel(review) + if(!adjusted) + message_admins("Balance not adjusted for Cassette:[review.submitted_tape.name], Balance for [client]; Previous:[prev_bal], Expected:[prev_bal + 5000], Current:[client?.prefs?.metacoins]. Issue logged.") + log_admin("Balance not adjusted for Cassette:[review.submitted_tape.name], Balance for [client]; Previous:[prev_bal], Expected:[prev_bal + 5000], Current:[client?.prefs?.metacoins].") + qdel(review) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index bcb83d5d97e5..1a1a7d3468ff 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -291,6 +291,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items list(//MONKESTATION ADDITION: misc /obj/item/vending_refill/plushvendor = 1, + /obj/item/comically_large_spoon = 1, ) = 2, list(//fakeout items, keep this list at low relative weight diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 56d03d276643..3c305a95b488 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -58,6 +58,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, /* "TRAIT_BOULDER_BREAKER" = TRAIT_BOULDER_BREAKER, */ /* "TRAIT_CHASM_STOPPER" = TRAIT_CHASM_STOPPER, */ + "TRAIT_COMBAT_MODE_SKIP_INTERACTION" = TRAIT_COMBAT_MODE_SKIP_INTERACTION, /* "TRAIT_HAS_LABEL" = TRAIT_HAS_LABEL, */ /* "TRAIT_IMMERSED" = TRAIT_IMMERSED, */ /* "TRAIT_INNER_DARKNESS" = TRAIT_INNER_DARKNESS, */ @@ -188,6 +189,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_CLUMSY" = TRAIT_CLUMSY, "TRAIT_COAGULATING" = TRAIT_COAGULATING, "TRAIT_COLDBLOODED" = TRAIT_COLDBLOODED, + "TRAIT_COLD_BLOODED" = TRAIT_COLD_BLOODED, "TRAIT_CONVERSION_FLASHED" = TRAIT_CONVERSION_FLASHED, "TRAIT_CORPSELOCKED" = TRAIT_CORPSELOCKED, "TRAIT_CRITICAL_CONDITION" = TRAIT_CRITICAL_CONDITION, @@ -231,6 +233,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FEARLESS" = TRAIT_FEARLESS, "TRAIT_FEEBLE" = TRAIT_FEEBLE, "TRAIT_FENCE_CLIMBER" = TRAIT_FENCE_CLIMBER, + "TRAIT_FISH_EATER" = TRAIT_FISH_EATER, "TRAIT_FINGERPRINT_PASSTHROUGH" = TRAIT_FINGERPRINT_PASSTHROUGH, "TRAIT_FIXED_MUTANT_COLORS" = TRAIT_FIXED_MUTANT_COLORS, "TRAIT_FLESH_DESIRE" = TRAIT_FLESH_DESIRE, @@ -427,6 +430,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_REVIVES_BY_HEALING" = TRAIT_REVIVES_BY_HEALING, "TRAIT_RIFT_FAILURE" = TRAIT_RIFT_FAILURE, "TRAIT_ROBOT_CAN_BLEED" = TRAIT_ROBOT_CAN_BLEED, + "TRAIT_ROCK_STONER" = TRAIT_ROCK_STONER, "TRAIT_ROD_SUPLEX" = TRAIT_ROD_SUPLEX, "TRAIT_SABRAGE_PRO" = TRAIT_SABRAGE_PRO, "TRAIT_SECURITY_HUD" = TRAIT_SECURITY_HUD, @@ -499,6 +503,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_USED_DNA_VAULT" = TRAIT_USED_DNA_VAULT, "TRAIT_USES_SKINTONES" = TRAIT_USES_SKINTONES, "TRAIT_VATGROWN" = TRAIT_VATGROWN, + "TRAIT_VEGETARIAN" = TRAIT_VEGETARIAN, "TRAIT_VAULTING" = TRAIT_VAULTING, "TRAIT_VENTCRAWLER_ALWAYS" = TRAIT_VENTCRAWLER_ALWAYS, "TRAIT_VENTCRAWLER_NUDE" = TRAIT_VENTCRAWLER_NUDE, @@ -513,10 +518,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_WINE_TASTER" = TRAIT_WINE_TASTER, "TRAIT_WING_BUFFET" = TRAIT_WING_BUFFET, "TRAIT_WING_BUFFET_TIRED" = TRAIT_WING_BUFFET_TIRED, + "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, "TRAIT_XENO_IMMUNE" = TRAIT_XENO_IMMUNE, "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, - "TRAIT_COLD_BLOODED" = TRAIT_COLD_BLOODED, "TRAIT_ZOMBIE_CONSUMED" = TRAIT_ZOMBIE_CONSUMED, /* "TRAIT_ADAMANTINE_EXTRACT_ARMOR" = TRAIT_ADAMANTINE_EXTRACT_ARMOR, */ /* "TRAIT_ALWAYS_WANTED" = TRAIT_ALWAYS_WANTED, */ @@ -530,7 +535,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( /* "TRAIT_BOT_PATH_HUD" = TRAIT_BOT_PATH_HUD, */ /* "TRAIT_BOXING_READY" = TRAIT_BOXING_READY, */ /* "TRAIT_BRAWLING_KNOCKDOWN_BLOCKED" = TRAIT_BRAWLING_KNOCKDOWN_BLOCKED, */ - /* "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, */ + "TRAIT_CATLIKE_GRACE" = TRAIT_CATLIKE_GRACE, /* "TRAIT_DETECTIVES_TASTE" = TRAIT_DETECTIVES_TASTE, */ /* "TRAIT_DISCO_DANCER" = TRAIT_DISCO_DANCER, */ /* "TRAIT_DISPLAY_JOB_IN_BINARY" = TRAIT_DISPLAY_JOB_IN_BINARY, */ @@ -580,7 +585,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( /* "TRAIT_PERCEIVED_AS_CLOWN" = TRAIT_PERCEIVED_AS_CLOWN, */ /* "TRAIT_PROFOUND_FISHER" = TRAIT_PROFOUND_FISHER, */ /* "TRAIT_RECENTLY_BLOCKED_MAGIC" = TRAIT_RECENTLY_BLOCKED_MAGIC, */ - /* "TRAIT_REGEN_SHIELD" = TRAIT_REGEN_SHIELD, */ + "TRAIT_REGEN_SHIELD" = TRAIT_REGEN_SHIELD, /* "TRAIT_REMOTE_TASTING" = TRAIT_REMOTE_TASTING, */ /* "TRAIT_ROCK_EATER" = TRAIT_ROCK_EATER, */ /* "TRAIT_ROCK_METAMORPHIC" = TRAIT_ROCK_METAMORPHIC, */ @@ -607,7 +612,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( /* "TRAIT_TOSS_GUN_HARD" = TRAIT_TOSS_GUN_HARD, */ /* "TRAIT_UNHUSKABLE" = TRAIT_UNHUSKABLE, */ /* "TRAIT_USER_SCOPED" = TRAIT_USER_SCOPED, */ - /* "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, */ + "TRAIT_WOUND_LICKER" = TRAIT_WOUND_LICKER, /* "TRAIT_XRAY_HEARING" = TRAIT_XRAY_HEARING, */ ), /obj/item = list( @@ -621,6 +626,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DANGEROUS_OBJECT" = TRAIT_DANGEROUS_OBJECT, "TRAIT_FEATHERED" = TRAIT_FEATHERED, "TRAIT_FISHING_BAIT" = TRAIT_FISHING_BAIT, + "TRAIT_FOOD_BBQ_GRILLED" = TRAIT_FOOD_BBQ_GRILLED, "TRAIT_FOOD_GRILLED" = TRAIT_FOOD_GRILLED, "TRAIT_GIFT_ITEM" = TRAIT_GIFT_ITEM, "TRAIT_GOOD_QUALITY_BAIT" = TRAIT_GOOD_QUALITY_BAIT, @@ -646,9 +652,10 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_TRASH_ITEM" = TRAIT_TRASH_ITEM, "TRAIT_T_RAY_VISIBLE" = TRAIT_T_RAY_VISIBLE, "TRAIT_UNCATCHABLE" = TRAIT_UNCATCHABLE, + "TRAIT_UNCOMPOSTABLE" = TRAIT_UNCOMPOSTABLE, "TRAIT_WIELDED" = TRAIT_WIELDED, /* "TRAIT_BAIT_UNCONSUMABLE" = TRAIT_BAIT_UNCONSUMABLE, */ - /* "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, */ + "TRAIT_BAKEABLE" = TRAIT_BAKEABLE, /* "TRAIT_BYPASS_RANGED_ARMOR" = TRAIT_BYPASS_RANGED_ARMOR, */ /* "TRAIT_CONTRABAND_BLOCKER" = TRAIT_CONTRABAND_BLOCKER, */ /* "TRAIT_GERM_SENSITIVE" = TRAIT_GERM_SENSITIVE, */ @@ -686,6 +693,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_FISH_SELF_REPRODUCE" = TRAIT_FISH_SELF_REPRODUCE, "TRAIT_FISH_TOXIN_IMMUNE" = TRAIT_FISH_TOXIN_IMMUNE, "TRAIT_RESIST_EMULSIFY" = TRAIT_RESIST_EMULSIFY, + "TRAIT_FISH_WELL_COOKED" = TRAIT_FISH_WELL_COOKED, "TRAIT_YUCKY_FISH" = TRAIT_YUCKY_FISH, /* "TRAIT_FISH_ELECTROGENESIS" = TRAIT_FISH_ELECTROGENESIS, */ /* "TRAIT_FISH_FROM_CASE" = TRAIT_FISH_FROM_CASE, */ diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index bcbed5ef38d7..ede9f4145aaa 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -236,7 +236,7 @@ var/list/closed = list() var/list/checking = list(ultimate_target) - while (checking.len && depth > 0) + while (length(checking) && depth > 0) var/list/next = list() --depth diff --git a/code/controllers/subsystem/movement/movement_types.dm b/code/controllers/subsystem/movement/movement_types.dm index e9919f79b3b6..3b0ae454df26 100644 --- a/code/controllers/subsystem/movement/movement_types.dm +++ b/code/controllers/subsystem/movement/movement_types.dm @@ -129,6 +129,10 @@ SEND_SIGNAL(src, COMSIG_MOVELOOP_POSTPROCESS, result, delay * visual_delay) + if(result == MOVELOOP_FAILURE && ishuman(src.moving) && istype(src, /datum/move_loop/has_target/move_towards)) // Tell the mob we slipped and what happened + var/datum/move_loop/has_target/move_towards/collide_move = src + SEND_SIGNAL(src.moving, COMSIG_MOVELOOP_POSTPROCESS, result, delay * visual_delay, collide_move.moving_towards, src) + if(QDELETED(src) || result != MOVELOOP_SUCCESS) //Can happen return diff --git a/code/controllers/subsystem/persistence/counter_delamination.dm b/code/controllers/subsystem/persistence/counter_delamination.dm index fcb87b2f26c7..d7f3775a625a 100644 --- a/code/controllers/subsystem/persistence/counter_delamination.dm +++ b/code/controllers/subsystem/persistence/counter_delamination.dm @@ -4,6 +4,9 @@ #define TRAM_COUNT_FILEPATH "data/tram_hits_last_round.txt" /datum/controller/subsystem/persistence/proc/load_delamination_counter() + if (!fexists(DELAMINATION_COUNT_FILEPATH)) + return + rounds_since_engine_exploded = text2num(file2text(DELAMINATION_COUNT_FILEPATH)) if (fexists(DELAMINATION_HIGHSCORE_FILEPATH)) delam_highscore = text2num(file2text(DELAMINATION_HIGHSCORE_FILEPATH)) for (var/obj/machinery/incident_display/sign as anything in GLOB.map_delamination_counters) diff --git a/code/controllers/subsystem/polling.dm b/code/controllers/subsystem/polling.dm index 3e2eba804360..fcb956bc9a40 100644 --- a/code/controllers/subsystem/polling.dm +++ b/code/controllers/subsystem/polling.dm @@ -177,7 +177,7 @@ SUBSYSTEM_DEF(polling) act_never = "[custom_link_style_start]\[Never For This Round\]" if(!duplicate_message_check(alert_poll)) //Only notify people once. They'll notice if there are multiple and we don't want to spam people. - SEND_SOUND(candidate_mob, sound('monkestation/sound/effects/prompt.ogg', volume = candidate_mob.client?.prefs?.channel_volume["[CHANNEL_SOUND_EFFECTS]"])) // monkestation edit: prompt sound + SEND_SOUND(candidate_mob, sound('sound/misc/prompt.ogg', volume = candidate_mob.client?.prefs?.channel_volume["[CHANNEL_SOUND_EFFECTS]"])) var/surrounding_icon if(surrounding_image) surrounding_icon = icon2html(surrounding_image, candidate_mob, extra_classes = "bigicon") diff --git a/code/datums/ai/_ai_behavior.dm b/code/datums/ai/_ai_behavior.dm index 233b57b15772..eb8f7370dc29 100644 --- a/code/datums/ai/_ai_behavior.dm +++ b/code/datums/ai/_ai_behavior.dm @@ -19,8 +19,8 @@ return TRUE ///Called by the AI controller when this action is performed +///Returns a set of flags defined in [code/__DEFINES/ai/ai.dm] /datum/ai_behavior/proc/perform(seconds_per_tick, datum/ai_controller/controller, ...) - controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) return ///Called when the action is finished. This needs the same args as perform besides the default ones diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 48b0f1a9db46..f831dbe367e9 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -277,6 +277,32 @@ multiple modular subtrees with behaviors return FALSE return TRUE +///Can this pawn interact with objects? +/datum/ai_controller/proc/ai_can_interact() + SHOULD_CALL_PARENT(TRUE) + return !QDELETED(pawn) + +///Interact with objects +/datum/ai_controller/proc/ai_interact(target, combat_mode, list/modifiers) + if(!ai_can_interact()) + return FALSE + + var/atom/final_target = isdatum(target) ? target : blackboard[target] //incase we got a blackboard key instead + + if(QDELETED(final_target)) + return FALSE + var/params = list2params(modifiers) + var/mob/living/living_pawn = pawn + if(isnull(combat_mode)) + living_pawn.ClickOn(final_target, params) + return TRUE + + var/old_combat_mode = living_pawn.combat_mode + living_pawn.set_combat_mode(combat_mode) + living_pawn.ClickOn(final_target, params) + living_pawn.set_combat_mode(old_combat_mode) + return TRUE + ///Runs any actions that are currently running /datum/ai_controller/process(seconds_per_tick) if(!able_to_run()) @@ -358,14 +384,13 @@ multiple modular subtrees with behaviors break SEND_SIGNAL(src, COMSIG_AI_CONTROLLER_PICKED_BEHAVIORS, current_behaviors, planned_behaviors) - for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) - if(LAZYACCESS(planned_behaviors, current_behavior)) - continue - var/list/arguments = list(src, FALSE) - var/list/stored_arguments = behavior_args[type] - if(stored_arguments) - arguments += stored_arguments - current_behavior.finish_action(arglist(arguments)) + if(LAZYLEN(current_behaviors)) + for(var/datum/ai_behavior/forgotten_behavior as anything in current_behaviors - planned_behaviors) + var/list/arguments = list(src, FALSE) + var/list/stored_arguments = behavior_args[type] + if(stored_arguments) + arguments += stored_arguments + forgotten_behavior.finish_action(arglist(arguments)) ///This proc handles changing ai status, and starts/stops processing if required. /datum/ai_controller/proc/set_ai_status(new_ai_status) @@ -391,7 +416,7 @@ multiple modular subtrees with behaviors paused_until = world.time + time /datum/ai_controller/proc/modify_cooldown(datum/ai_behavior/behavior, new_cooldown) - behavior_cooldowns[behavior.type] = new_cooldown + behavior_cooldowns[behavior] = new_cooldown ///Call this to add a behavior to the stack. /datum/ai_controller/proc/queue_behavior(behavior_type, ...) @@ -421,13 +446,23 @@ multiple modular subtrees with behaviors var/list/stored_arguments = behavior_args[behavior.type] if(stored_arguments) arguments += stored_arguments - behavior.perform(arglist(arguments)) + + var/process_flags = behavior.perform(arglist(arguments)) + if(process_flags & AI_BEHAVIOR_DELAY) + behavior_cooldowns[behavior] = world.time + behavior.get_cooldown(src) + if(process_flags & AI_BEHAVIOR_FAILED) + arguments[1] = src + arguments[2] = FALSE + behavior.finish_action(arglist(arguments)) + else if (process_flags & AI_BEHAVIOR_SUCCEEDED) + arguments[1] = src + arguments[2] = TRUE + behavior.finish_action(arglist(arguments)) /datum/ai_controller/proc/CancelActions() if(!LAZYLEN(current_behaviors)) return - for(var/i in current_behaviors) - var/datum/ai_behavior/current_behavior = i + for(var/datum/ai_behavior/current_behavior as anything in current_behaviors) var/list/arguments = list(src, FALSE) var/list/stored_arguments = behavior_args[current_behavior.type] if(stored_arguments) diff --git a/code/datums/ai/_item_behaviors.dm b/code/datums/ai/_item_behaviors.dm index 6cfb539f7a0b..c9f3441fdd68 100644 --- a/code/datums/ai/_item_behaviors.dm +++ b/code/datums/ai/_item_behaviors.dm @@ -2,14 +2,14 @@ /datum/ai_behavior/item_escape_grasp /datum/ai_behavior/item_escape_grasp/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/obj/item/item_pawn = controller.pawn var/mob/item_holder = item_pawn.loc if(!istype(item_holder)) - finish_action(controller, FALSE) //We're no longer being held. abort abort!! + //We're no longer being held. abort abort!! + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED item_pawn.visible_message(span_warning("[item_pawn] slips out of the hands of [item_holder]!")) item_holder.dropItemToGround(item_pawn, TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///This behavior is for obj/items, it is used to move closer to a target and throw themselves towards them. @@ -30,7 +30,6 @@ set_movement_target(controller, target) /datum/ai_behavior/item_move_close_and_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, throw_count_key) - . = ..() var/obj/item/item_pawn = controller.pawn var/atom/throw_target = controller.blackboard[target_key] @@ -39,7 +38,8 @@ playsound(item_pawn.loc, attack_sound, 100, TRUE) controller.add_blackboard_key(throw_count_key, 1) if(controller.blackboard[throw_count_key] >= max_attempts) - finish_action(controller, TRUE, target_key, throw_count_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/item_move_close_and_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, throw_count_key) . = ..() diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index e58d99a3ed63..aa8a15a03e40 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -8,7 +8,6 @@ var/max_children = 3 /datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key) - . = ..() max_children = controller.blackboard[BB_MAX_CHILDREN] || max_children var/mob/pawn_mob = controller.pawn var/list/partner_types = controller.blackboard[partner_types_key] @@ -18,12 +17,10 @@ var/children = 0 for(var/mob/living/other in oview(range, pawn_mob)) if(!pawn_mob.faction_check_atom(other)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(children >= max_children) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(other.stat != CONSCIOUS) //Check if it's conscious FIRST. continue @@ -40,10 +37,9 @@ if(other.gender != living_pawn.gender && !(other.flags_1 & HOLOGRAM_1)) //Better safe than sorry ;_; controller.set_blackboard_key(target_key, other) - finish_action(controller, TRUE) - - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /** * Reproduce. @@ -59,23 +55,12 @@ set_movement_target(controller, target) /datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key) - . = ..() var/mob/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != CONSCIOUS) - finish_action(controller, FALSE, target_key) - return - var/mob/living/basic/living_pawn = controller.pawn - //living_pawn.set_combat_mode(FALSE) - living_pawn.istate &= ~ISTATE_HARM - living_pawn.melee_attack(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + controller.ai_interact(target = target, combat_mode = FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) - if(!succeeded) - return - var/mob/living/living_pawn = controller.pawn - if(QDELETED(living_pawn)) // pawn can be null at this point - return - living_pawn.istate = initial(living_pawn.istate) diff --git a/code/datums/ai/basic_mobs/base_basic_controller.dm b/code/datums/ai/basic_mobs/base_basic_controller.dm index cd025b28bcb2..0dd57cace378 100644 --- a/code/datums/ai/basic_mobs/base_basic_controller.dm +++ b/code/datums/ai/basic_mobs/base_basic_controller.dm @@ -29,3 +29,8 @@ /datum/ai_controller/basic_controller/proc/update_speed(mob/living/basic/basic_mob) SIGNAL_HANDLER movement_delay = basic_mob.cached_multiplicative_slowdown + +/datum/ai_controller/basic_controller/proc/on_mob_eat() + SIGNAL_HANDLER + var/food_cooldown = blackboard[BB_EAT_FOOD_COOLDOWN] || EAT_FOOD_COOLDOWN + set_blackboard_key(BB_NEXT_FOOD_EAT, world.time + food_cooldown) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 6c264e32de71..c8b2f55731e3 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -21,30 +21,25 @@ if (isliving(controller.pawn)) var/mob/living/pawn = controller.pawn if (world.time < pawn.next_move) - return + return AI_BEHAVIOR_INSTANT - . = ..() var/mob/living/basic/basic_mob = controller.pawn //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(basic_mob, target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! controller.set_blackboard_key(hiding_location_key, hiding_target) - if(melee_attacks || !ismob(target)) - if(hiding_target) //Slap it! - basic_mob.melee_attack(hiding_target) - else - basic_mob.melee_attack(target) - + var/atom/final_target = hiding_target || target + controller.ai_interact(target = final_target, combat_mode = TRUE) if(terminate_after_action) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/basic_melee_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() @@ -81,22 +76,21 @@ var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(basic_mob, target, chase_range)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/atom/hiding_target = targeting_strategy.find_hidden_mobs(basic_mob, target) //If this is valid, theyre hidden in something! var/atom/final_target = hiding_target ? hiding_target : target if(!can_see(basic_mob, final_target, required_distance)) - return + return AI_BEHAVIOR_INSTANT if(avoid_friendly_fire && check_friendly_in_path(basic_mob, target, targeting_strategy)) adjust_position(basic_mob, target) - return ..() + return AI_BEHAVIOR_DELAY controller.set_blackboard_key(hiding_location_key, hiding_target) basic_mob.RangedAttack(final_target) - return ..() //only start the cooldown when the shot is shot + return AI_BEHAVIOR_DELAY //only start the cooldown when the shot is shot /datum/ai_behavior/basic_ranged_attack/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm index e1fd8bed640d..865b028e156c 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm @@ -2,19 +2,17 @@ /datum/ai_behavior/befriend_target /datum/ai_behavior/befriend_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, befriend_message) - . = ..() var/mob/living/living_pawn = controller.pawn var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.befriend(living_target) var/befriend_text = controller.blackboard[befriend_message] if(befriend_text) to_chat(living_target, span_nicegreen("[living_pawn] [befriend_text]")) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/befriend_target/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm index c8c18072a4aa..4b0bdda2330b 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/climb_tree.dm @@ -14,7 +14,7 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH /datum/ai_behavior/climb_tree/setup(datum/ai_controller/controller, target_key) - . = ..() + var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return FALSE @@ -22,13 +22,12 @@ set_movement_target(controller, target) /datum/ai_behavior/climb_tree/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/flora/target_tree = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(QDELETED(living_pawn)) // pawn can be null at this point return SEND_SIGNAL(living_pawn, COMSIG_LIVING_CLIMB_TREE, target_tree) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/climb_tree/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm index c012a9f43162..0adc0c5cfc7a 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/find_parent.dm @@ -3,16 +3,13 @@ var/look_range = 7 /datum/ai_behavior/find_mom/perform(seconds_per_tick, datum/ai_controller/controller, mom_key, ignore_mom_key, found_mom) - . = ..() - var/mob/living_pawn = controller.pawn var/list/mom_types = controller.blackboard[mom_key] var/list/all_moms = list() var/list/ignore_types = controller.blackboard[ignore_mom_key] if(!length(mom_types)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/mob/mother in oview(look_range, living_pawn)) if(!is_type_in_list(mother, mom_types)) @@ -26,6 +23,5 @@ controller.set_blackboard_key(found_mom, mom) if(isbasicmob(mom)) controller.set_blackboard_key(BB_FRIENDS_LIST, mom.ai_controller.blackboard[BB_FRIENDS_LIST]) - finish_action(controller, TRUE) - return - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm new file mode 100644 index 000000000000..e3b202c5e164 --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm @@ -0,0 +1,29 @@ +///behavior for general interactions with any targets +/datum/ai_behavior/interact_with_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH + ///should we be clearing the target after the fact? + var/clear_target = TRUE + ///should our combat mode be off during interaction? + var/combat_mode = TRUE + +/datum/ai_behavior/interact_with_target/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/interact_with_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target) || !pre_interact(controller, target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + controller.ai_interact(target, combat_mode) + return AI_BEHAVIOR_SUCCEEDED | AI_BEHAVIOR_DELAY + +/datum/ai_behavior/interact_with_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(clear_target || !succeeded) + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/interact_with_target/proc/pre_interact(datum/ai_controller/controller, target) + return TRUE diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm index e81c9f957515..1b65eaa507c9 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/pick_up_item.dm @@ -11,16 +11,13 @@ return isitem(target) && isturf(target.loc) && !target.anchored /datum/ai_behavior/pick_up_item/perform(seconds_per_tick, datum/ai_controller/controller, target_key, storage_key) - . = ..() var/obj/item/target = controller.blackboard[target_key] if(QDELETED(target) || !isturf(target.loc)) // Someone picked it up or it got deleted - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!controller.pawn.Adjacent(target)) // It teleported - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED pickup_item(controller, target, storage_key) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/pick_up_item/finish_action(datum/ai_controller/controller, success, target_key, storage_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm new file mode 100644 index 000000000000..900b122dcb3f --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/pull_target.dm @@ -0,0 +1,22 @@ +/datum/ai_behavior/pull_target + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/pull_target/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/pull_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/atom/movable/target = controller.blackboard[target_key] + if(QDELETED(target) || target.anchored || target.pulledby) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/our_mob = controller.pawn + our_mob.start_pulling(target) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/pull_target/finish_action(datum/ai_controller/controller, succeeded, target_key) + . = ..() + if(!succeeded) + controller.clear_blackboard_key(target_key) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm index 23b3a69c4d38..3529cc2d150c 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm @@ -18,32 +18,55 @@ return ..() /datum/ai_behavior/run_away_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) - . = ..() if (controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) - finish_action(controller, succeeded = FALSE, target_key = target_key, hiding_location_key = hiding_location_key) - return + return AI_BEHAVIOR_DELAY var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if (QDELETED(target) || !can_see(controller.pawn, target, run_distance)) - finish_action(controller, succeeded = TRUE, target_key = target_key, hiding_location_key = hiding_location_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if (get_dist(controller.pawn, controller.current_movement_target) > required_distance) - return // Still heading over + return AI_BEHAVIOR_DELAY // Still heading over if (plot_path_away_from(controller, target)) - return - finish_action(controller, succeeded = FALSE, target_key = target_key, hiding_location_key = hiding_location_key) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/run_away_from_target/proc/plot_path_away_from(datum/ai_controller/controller, atom/target) var/turf/target_destination = get_turf(controller.pawn) - for (var/i in 1 to run_distance) - var/turf/test_destination = get_ranged_target_turf_direct(controller.pawn, target, range = i, offset = 180) - if (test_destination.is_blocked_turf(exclude_mobs = TRUE, source_atom = controller.pawn, ignore_atoms = GLOB.airlocks)) + var/static/list/offset_angles = list(45, 90, 135, 180, 225, 270) + for(var/angle in offset_angles) + var/turf/test_turf = get_furthest_turf(controller.pawn, angle, target) + if(isnull(test_turf)) + continue + var/distance_from_target = get_dist(target, test_turf) + if(distance_from_target <= get_dist(target, target_destination)) + continue + target_destination = test_turf + if(distance_from_target == run_distance) //we already got the max running distance break - target_destination = test_destination if (target_destination == get_turf(controller.pawn)) return FALSE set_movement_target(controller, target_destination) return TRUE - +/datum/ai_behavior/run_away_from_target/proc/get_furthest_turf(atom/source, angle, atom/target) + var/turf/return_turf + var/list/airlocks = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/door/airlock) + for(var/i in 1 to run_distance) + var/turf/test_destination = get_ranged_target_turf_direct(source, target, range = i, offset = angle) + if(test_destination.is_blocked_turf(source_atom = source, ignore_atoms = airlocks)) + break + return_turf = test_destination + return return_turf /datum/ai_behavior/run_away_from_target/finish_action(datum/ai_controller/controller, succeeded, target_key, hiding_location_key) . = ..() - controller.clear_blackboard_key(target_key) + if (clear_failed_targets) + controller.clear_blackboard_key(target_key) + +/datum/ai_behavior/run_away_from_target/run_and_shoot + clear_failed_targets = FALSE + +/datum/ai_behavior/run_away_from_target/run_and_shoot/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/living_pawn = controller.pawn + living_pawn.RangedAttack(target) + return ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm index 207df4424577..6bf6dbb7fdbc 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/set_travel_destination.dm @@ -1,13 +1,10 @@ /datum/ai_behavior/set_travel_destination /datum/ai_behavior/set_travel_destination/perform(seconds_per_tick, datum/ai_controller/controller, target_key, location_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(location_key, target) - - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm index 70a557ccc436..0c6211f49d5f 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/step_towards_turf.dm @@ -49,8 +49,7 @@ // We actually only wanted the movement so if we've arrived we're done /datum/ai_behavior/step_towards_turf/perform(seconds_per_tick, datum/ai_controller/controller, area_key, turf_key) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /** * # Step towards turf in area diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm index 377420021a5c..066ccb9b787d 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm @@ -4,26 +4,23 @@ /datum/ai_behavior/stop_and_stare/setup(datum/ai_controller/controller, target_key) . = ..() - var/datum/weakref/weak_target = controller.blackboard[target_key] - var/atom/movable/target = weak_target?.resolve() + var/atom/movable/target = controller.blackboard[target_key] return ismovable(target) && isturf(target.loc) && ismob(controller.pawn) /datum/ai_behavior/stop_and_stare/get_cooldown(datum/ai_controller/cooldown_for) return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN] /datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/datum/weakref/weak_target = controller.blackboard[target_key] - var/atom/movable/target = weak_target?.resolve() + var/atom/movable/target = controller.blackboard[target_key] if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform - return + return AI_BEHAVIOR_DELAY var/mob/pawn_mob = controller.pawn var/turf/pawn_turf = get_turf(pawn_mob) - pawn_mob.face_atom(target) pawn_mob.balloon_alert_to_viewers("stops and stares...") set_movement_target(controller, pawn_turf, /datum/ai_movement/complete_stop) if(controller.blackboard[BB_STATIONARY_MOVE_TO_TARGET]) addtimer(CALLBACK(src, PROC_REF(set_movement_target), controller, target, initial(controller.ai_movement)), (controller.blackboard[BB_STATIONARY_SECONDS] + 1 SECONDS)) + return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm index a39200d0cc16..be1c6e932a13 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_ability.dm @@ -8,12 +8,13 @@ var/datum/action/cooldown/ability = controller.blackboard[ability_key] var/mob/living/target = controller.blackboard[target_key] if(QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/pawn = controller.pawn pawn.face_atom(target) var/result = ability.Trigger(target = target) - finish_action(controller, result, ability_key, target_key) + if(result) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED /datum/ai_behavior/targeted_mob_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 8ad59ba2bf15..799b66095b78 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -28,8 +28,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ var/atom/current_target = controller.blackboard[target_key] if (targeting_strategy.can_attack(living_mob, current_target, vision_range)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/aggro_range = controller.blackboard[aggro_range_key] || vision_range @@ -46,8 +45,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(!potential_targets.len) failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/filtered_targets = list() @@ -60,8 +58,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(!filtered_targets.len) failed_to_find_anyone(controller, target_key, targeting_strategy_key, hiding_location_key) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/target = pick_final_target(controller, filtered_targets) controller.set_blackboard_key(target_key, target) @@ -71,7 +68,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list(/mob, /obj/machinery/ if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_potential_targets/proc/failed_to_find_anyone(datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/aggro_range = controller.blackboard[aggro_range_key] || vision_range diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm index 643bb9ced5ad..c734d961b5ef 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm @@ -3,8 +3,6 @@ /datum/ai_behavior/tipped_reaction /datum/ai_behavior/tipped_reaction/perform(seconds_per_tick, datum/ai_controller/controller, tipper_key, reacting_key) - . = ..() - var/mob/living/carbon/tipper = controller.blackboard[tipper_key] // visible part of the visible message @@ -28,7 +26,7 @@ seen_message = "[controller.pawn] seems resigned to its fate." self_message = "You resign yourself to your fate." controller.pawn.visible_message(span_notice("[seen_message]"), span_notice("[self_message]")) - finish_action(controller, TRUE, tipper_key, reacting_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/tipped_reaction/finish_action(datum/ai_controller/controller, succeeded, tipper_key, reacting_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm index 55f6ef4c4c00..98cb4d1ce648 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm @@ -8,6 +8,8 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /// If true we will get rid of our target on completion var/clear_target = FALSE + ///should we use a different movement type? + var/new_movement_type /datum/ai_behavior/travel_towards/setup(datum/ai_controller/controller, target_key) . = ..() @@ -17,8 +19,7 @@ set_movement_target(controller, target) /datum/ai_behavior/travel_towards/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/travel_towards/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -44,5 +45,4 @@ set_movement_target(controller, target_atom) /datum/ai_behavior/travel_towards_atom/perform(seconds_per_tick, datum/ai_controller/controller, atom/target_atom) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm index 655b335d3b63..34e651f8e528 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/unbuckle_mob.dm @@ -1,14 +1,11 @@ /datum/ai_behavior/unbuckle_mob /datum/ai_behavior/unbuckle_mob/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/living/living_pawn = controller.pawn var/atom/movable/buckled_to = living_pawn.buckled if(isnull(buckled_to)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED buckled_to.unbuckle_mob(living_pawn) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm index 889b474ad038..aca89d832814 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/ventcrawling.dm @@ -17,26 +17,23 @@ return istype(target) && isliving(controller.pawn) // only mobs can vent crawl in the current framework /datum/ai_behavior/crawl_through_vents/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/machinery/atmospherics/components/unary/vent_pump/entry_vent = controller.blackboard[target_key] || controller.blackboard[BB_ENTRY_VENT_TARGET] var/mob/living/cached_pawn = controller.pawn if(HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING) || !controller.blackboard[BB_CURRENTLY_TARGETING_VENT] || !is_vent_valid(entry_vent)) - return + return AI_BEHAVIOR_DELAY if(!cached_pawn.can_enter_vent(entry_vent, provide_feedback = FALSE)) // we're an AI we scoff at feedback - finish_action(controller, FALSE, target_key) // "never enter a hole you can't get out of" - return + // "never enter a hole you can't get out of" + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/vent_we_exit_out_of = calculate_exit_vent(controller, target_key) if(isnull(vent_we_exit_out_of)) // don't get into the vents if we can't get out of them, that's SILLY. - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_CURRENTLY_TARGETING_VENT, FALSE) // must be done here because we have a do_after sleep in handle_ventcrawl unfortunately and double dipping could lead to erroneous suicide pill calls. cached_pawn.handle_ventcrawl(entry_vent) if(!HAS_TRAIT(cached_pawn, TRAIT_MOVE_VENTCRAWLING)) //something failed and we ARE NOT IN THE VENT even though the earlier check said we were good to go! odd. - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_EXIT_VENT_TARGET, vent_we_exit_out_of) @@ -50,7 +47,8 @@ var/upper_vent_time_limit = controller.blackboard[BB_UPPER_VENT_TIME_LIMIT] // the most amount of time we spend in the vents addtimer(CALLBACK(src, PROC_REF(exit_the_vents), controller), rand(lower_vent_time_limit, upper_vent_time_limit)) - controller.set_blackboard_key(BB_GIVE_UP_ON_VENT_PATHING_TIMER_ID, addtimer(CALLBACK(src, PROC_REF(suicide_pill), controller), controller.blackboard[BB_TIME_TO_GIVE_UP_ON_VENT_PATHING], TIMER_STOPPABLE)) + controller.set_blackboard_key(BB_GIVE_UP_ON_VENT_PATHING_TIMER_ID, addtimer(CALLBACK(src, PROC_REF(delayed_suicide_pill), controller, target_key), controller.blackboard[BB_TIME_TO_GIVE_UP_ON_VENT_PATHING], TIMER_STOPPABLE)) + return AI_BEHAVIOR_DELAY /// Figure out an exit vent that we should head towards. If we don't have one, default to the entry vent. If they're all kaput, we die. /datum/ai_behavior/crawl_through_vents/proc/calculate_exit_vent(datum/ai_controller/controller, target_key) @@ -83,8 +81,8 @@ var/mob/living/living_pawn = controller.pawn if(!HAS_TRAIT(living_pawn, TRAIT_MOVE_VENTCRAWLING) && isturf(get_turf(living_pawn))) // we're out of the vents, so no need to do an exit - finish_action(controller, TRUE, target_key) // assume that we got yeeted out somehow and call this so we can halt the suicide pill timer. - return + // assume that we got yeeted out somehow and return this so we can halt the suicide pill timer. + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED living_pawn.forceMove(exit_vent) if(!living_pawn.can_enter_vent(exit_vent, provide_feedback = FALSE)) @@ -92,8 +90,7 @@ emergency_vent = calculate_exit_vent(controller) if(isnull(emergency_vent)) // it's joever. we cooked too hard. - suicide_pill(controller, target_key) - return + return suicide_pill(controller) | AI_BEHAVIOR_DELAY controller.set_blackboard_key(BB_EXIT_VENT_TARGET, emergency_vent) // assign and go again addtimer(CALLBACK(src, PROC_REF(exit_the_vents), controller), (rand(controller.blackboard[BB_LOWER_VENT_TIME_LIMIT], controller.blackboard[BB_UPPER_VENT_TIME_LIMIT]) / 2)) // we're in danger mode, so scurry out at half the time it would normally take. @@ -102,32 +99,34 @@ living_pawn.handle_ventcrawl(exit_vent) if(HAS_TRAIT(living_pawn, TRAIT_MOVE_VENTCRAWLING)) // how'd we fail? what the fuck stack_trace("We failed to exit the vents, even though we should have been fine? This is very weird.") - suicide_pill() // all of the prior checks say we should have definitely made it through, but we didn't. dammit. - return + return suicide_pill(controller) | AI_BEHAVIOR_DELAY // all of the prior checks say we should have definitely made it through, but we didn't. dammit. - finish_action(controller, TRUE, target_key) // we did it! we went into the vents and out of the vents. poggers. + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // we did it! we went into the vents and out of the vents. poggers. /// Incredibly stripped down version of the overarching `can_enter_vent` proc on `/mob, just meant for rapid rechecking of a vent. Will be TRUE if not blocked, FALSE otherwise. /datum/ai_behavior/crawl_through_vents/proc/is_vent_valid(obj/machinery/atmospherics/components/unary/vent_pump/checkable) return !QDELETED(checkable) && !checkable.welded +/// Wraps a delayed defeat, so we gotta handle the return value properly ya feel? +/datum/ai_behavior/crawl_through_vents/proc/delayed_suicide_pill(datum/ai_controller/controller, target_key) + if(suicide_pill(controller) & AI_BEHAVIOR_FAILED) + finish_action(controller, FALSE, target_key) + /// Aw fuck, we may have been bested somehow. Regardless of what we do, we can't exit through a vent! Let's end our misery and prevent useless endless calculations. -/datum/ai_behavior/crawl_through_vents/proc/suicide_pill(datum/ai_controller/controller, target_key) +/datum/ai_behavior/crawl_through_vents/proc/suicide_pill(datum/ai_controller/controller) var/mob/living/living_pawn = controller.pawn if(istype(living_pawn)) - finish_action(controller, FALSE, target_key) - if(isnull(living_pawn.client)) // only call death if we don't have a client because maybe their natural intelligence can pick up where our AI calculations have failed living_pawn.death(TRUE) // call gibbed as true because we are never coming back it is so fucking joever - return + return AI_BEHAVIOR_FAILED if(QDELETED(living_pawn)) // we got deleted by some other means, just presume the action is a wash and get outta here - return + return NONE qdel(living_pawn) // failover, we really should've been caught in the istype() but lets just bow out of existing at this point - + return NONE /datum/ai_behavior/crawl_through_vents/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm index f5dba58416d2..51826676e9e8 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/write_on_paper.dm @@ -1,7 +1,6 @@ /datum/ai_behavior/write_on_paper /datum/ai_behavior/write_on_paper/perform(seconds_per_tick, datum/ai_controller/controller, found_paper, list_of_writings) - . = ..() var/mob/living/wizard = controller.pawn var/list/writing_list = controller.blackboard[list_of_writings] var/obj/item/paper/target = controller.blackboard[found_paper] @@ -9,7 +8,7 @@ target.add_raw_text(pick(writing_list)) target.update_appearance() wizard.dropItemToGround(target) - finish_action(controller, TRUE, found_paper) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/write_on_paper/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm index 411690043546..2558fadcc0af 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_adjacent_target.dm @@ -27,7 +27,6 @@ /datum/ai_behavior/basic_melee_attack/opportunistic/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) var/atom/movable/atom_pawn = controller.pawn if(!atom_pawn.CanReach(controller.blackboard[target_key])) - finish_action(controller, TRUE, target_key) // Don't clear target - return FALSE + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED . = ..() - finish_action(controller, TRUE, target_key) // Try doing something else + return . | AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm index 7059bec93fe2..bc8efdeb4ff5 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -27,13 +27,11 @@ var/can_attack_dense_objects = FALSE /datum/ai_behavior/attack_obstructions/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/basic_mob = controller.pawn var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/next_step = get_step_towards(basic_mob, target) var/dir_to_next_step = get_dir(basic_mob, next_step) @@ -48,8 +46,8 @@ for (var/direction in dirs_to_move) if (attack_in_direction(controller, basic_mob, direction)) - return - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/attack_obstructions/proc/attack_in_direction(datum/ai_controller/controller, mob/living/basic/basic_mob, direction) var/turf/next_step = get_step(basic_mob, direction) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm index 59ff88b4879b..44d7cb4fe480 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm @@ -36,8 +36,6 @@ var/reinforcements_range = 15 /datum/ai_behavior/call_reinforcements/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/pawn_mob = controller.pawn for(var/mob/other_mob in oview(reinforcements_range, pawn_mob)) if(pawn_mob.faction_check_atom(other_mob) && !isnull(other_mob.ai_controller)) @@ -46,5 +44,6 @@ other_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENT_TARGET, pawn_mob) controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENTS_COOLDOWN, world.time + REINFORCEMENTS_COOLDOWN) + return AI_BEHAVIOR_DELAY #undef REINFORCEMENTS_COOLDOWN diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index 4d5319bca86e..a4fc49facc00 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -14,29 +14,25 @@ action_cooldown = 1 SECONDS /datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction) - . = ..() var/atom/pawn = controller.pawn if (controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) var/deaggro_chance = controller.blackboard[BB_RANDOM_DEAGGRO_CHANCE] || 10 if (!SPT_PROB(deaggro_chance, seconds_per_tick)) - finish_action(controller, TRUE, ignore_faction) // "true" here means "don't clear our ignoring factions status" - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED pawn.visible_message(span_notice("[pawn] calms down.")) // We can blackboard key this if anyone else actually wants to customise it controller.clear_blackboard_key(BB_BASIC_MOB_RETALIATE_LIST) - finish_action(controller, FALSE, ignore_faction) controller.CancelActions() // Otherwise they will try and get one last kick in - return + return AI_BEHAVIOR_DELAY var/aggro_chance = controller.blackboard[BB_RANDOM_AGGRO_CHANCE] || 0.5 if (!SPT_PROB(aggro_chance, seconds_per_tick)) - finish_action(controller, FALSE, ignore_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/aggro_range = controller.blackboard[BB_AGGRO_RANGE] || 9 var/list/potential_targets = hearers(aggro_range, get_turf(pawn)) - pawn if (!length(potential_targets)) - failed_targeting(controller, pawn, ignore_faction) - return + failed_targeting(pawn) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/targeting_strategy/target_helper = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) @@ -49,16 +45,15 @@ final_target = test_target if (isnull(final_target)) - failed_targeting(controller, pawn, ignore_faction) - return + failed_targeting(pawn) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, final_target) pawn.visible_message(span_warning("[pawn] glares grumpily at [final_target]!")) - finish_action(controller, TRUE, ignore_faction) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Called if we try but fail to target something -/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(datum/ai_controller/controller, atom/pawn, ignore_faction) - finish_action(controller, FALSE, ignore_faction) +/datum/ai_behavior/capricious_retaliate/proc/failed_targeting(atom/pawn) pawn.visible_message(span_notice("[pawn] grumbles.")) // We're pissed off but with no outlet to vent our frustration upon /datum/ai_behavior/capricious_retaliate/finish_action(datum/ai_controller/controller, succeeded, ignore_faction) 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 b02ec8eaa85a..feca98690930 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/find_food.dm @@ -1,10 +1,39 @@ /// 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 + ///key where we store our food + var/found_food_key = BB_TARGET_FOOD + ///key holding any emotes we play after eating food + var/emotes_blackboard_list = BB_EAT_EMOTES /datum/ai_planning_subtree/find_food/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) - . = ..() - if(controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)) - // Busy with something + var/list/foods_list = controller.blackboard[food_list_key] + if(!length(foods_list)) + CRASH("the types of food has not been supplied in the [food_list_key] key!") + if(controller.blackboard[BB_NEXT_FOOD_EAT] > world.time) + return + if(!controller.blackboard_key_exists(found_food_key)) + controller.queue_behavior(finding_behavior, found_food_key, foods_list) return + controller.queue_behavior(/datum/ai_behavior/interact_with_target/eat_food, found_food_key, emotes_blackboard_list) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/interact_with_target/eat_food + ///default list of actions we take after eating + var/list/food_actions = list( + "eats up happily!", + "chomps with glee!", + ) - controller.queue_behavior(/datum/ai_behavior/find_and_set/in_list, BB_BASIC_MOB_CURRENT_TARGET, controller.blackboard[BB_BASIC_FOODS]) +/datum/ai_behavior/interact_with_target/eat_food/perform(seconds_per_tick, datum/ai_controller/controller, target_key, emotes_blackboard_list) + . = ..() + if(. & AI_BEHAVIOR_FAILED) + return + var/list/emotes_to_pick = controller.blackboard[emotes_blackboard_list] || food_actions + if(!length(emotes_to_pick)) + return + var/mob/living/living_pawn = controller.pawn + living_pawn.manual_emote(pick(emotes_to_pick)) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm index 991f9962f2c7..fc1bbc6f28cf 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm @@ -63,8 +63,7 @@ return FALSE /datum/ai_behavior/step_away/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/step_away/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -86,8 +85,8 @@ /datum/ai_behavior/pursue_to_range/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range) var/atom/current_target = controller.blackboard[target_key] if (!QDELETED(current_target) && get_dist(controller.pawn, current_target) > range) - return - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_INSTANT + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED ///instead of taking a single step, we cover the entire distance /datum/ai_behavior/cover_minimum_distance @@ -115,5 +114,4 @@ set_movement_target(controller, target = chosen_turf) /datum/ai_behavior/cover_minimum_distance/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm index 3c03702b6994..12875f9a3f34 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm @@ -21,19 +21,15 @@ set_movement_target(controller, target) /datum/ai_behavior/mine_wall/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/closed/mineral/target = controller.blackboard[target_key] var/is_gibtonite_turf = istype(target, /turf/closed/mineral/gibtonite) - if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return - living_pawn.melee_attack(target) + if(!controller.ai_interact(target = target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(is_gibtonite_turf) living_pawn.manual_emote("sighs...") //accept whats about to happen to us - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/mine_wall/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -42,17 +38,15 @@ /datum/ai_behavior/find_mineral_wall /datum/ai_behavior/find_mineral_wall/perform(seconds_per_tick, datum/ai_controller/controller, found_wall_key) - . = ..() var/mob/living_pawn = controller.pawn for(var/turf/closed/mineral/potential_wall in oview(9, living_pawn)) if(!check_if_mineable(controller, potential_wall)) //check if its surrounded by walls continue controller.set_blackboard_key(found_wall_key, potential_wall) //closest wall first! - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/find_mineral_wall/proc/check_if_mineable(datum/ai_controller/controller, turf/target_wall) var/mob/living/source = controller.pawn diff --git a/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm b/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm index c98878e0fd71..bcf5c8290251 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/move_to_cardinal.dm @@ -51,19 +51,17 @@ /datum/ai_behavior/move_to_cardinal/perform(seconds_per_tick, datum/ai_controller/controller, target_key) var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller = controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if (!(get_dir(controller.pawn, target) in GLOB.cardinals)) target_nearest_cardinal(controller, target) - return + return AI_BEHAVIOR_INSTANT var/distance_to_target = get_dist(controller.pawn, target) if (distance_to_target < minimum_distance) target_nearest_cardinal(controller, target) - return + return AI_BEHAVIOR_INSTANT if (distance_to_target > maximum_distance) - return - finish_action(controller = controller, succeeded = TRUE, target_key = target_key) - return + return AI_BEHAVIOR_INSTANT + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/move_to_cardinal/finish_action(datum/ai_controller/controller, succeeded, target_key) if (!succeeded) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index 95a125eea5ce..43a3d400bc58 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -26,16 +26,13 @@ return !QDELETED(target) /datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) - . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy.can_attack(controller.pawn, target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/hiding_target = targeting_strategy.find_hidden_mobs(controller.pawn, target) controller.set_blackboard_key(hiding_location_key, hiding_target) @@ -44,9 +41,7 @@ var/distance = get_dist(controller.pawn, target) if (distance > max_range || distance < min_range) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/gunman = controller.pawn - gunman.RangedAttack(target) - finish_action(controller, succeeded = TRUE) + controller.ai_interact(target = target, combat_mode = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm b/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm index 6f2f5cdc2035..c0c0da96584a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/run_emote.dm @@ -15,8 +15,7 @@ /datum/ai_behavior/run_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote_key) var/mob/living/living_pawn = controller.pawn if (!isliving(living_pawn)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/list/emote_list = controller.blackboard[emote_key] var/emote @@ -26,8 +25,7 @@ emote = emote_list if(isnull(emote)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED living_pawn.emote(emote) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm index 93499cf673c4..5d9841a52473 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/sleep_with_no_target.dm @@ -16,7 +16,9 @@ /datum/ai_behavior/sleep_after_targetless_time/perform(seconds_per_tick, datum/ai_controller/controller, target_key) var/atom/target = controller.blackboard[target_key] - finish_action(controller, succeeded = QDELETED(target), seconds_per_tick = seconds_per_tick) + if(QDELETED(target)) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED /datum/ai_behavior/sleep_after_targetless_time/finish_action(datum/ai_controller/controller, succeeded, seconds_per_tick) . = ..() 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 a04bce1fcd63..f481e747dec8 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/speech_subtree.dm @@ -203,6 +203,12 @@ emote_hear = list("rawrs.","grumbles.","grawls.", "stomps!") emote_see = list("stares ferociously.") +/datum/ai_planning_subtree/random_speech/cats + speech_chance = 10 + sound = list(SFX_CAT_MEOW) + emote_hear = list("meows.") + emote_see = list("meows.") + /datum/ai_planning_subtree/random_speech/blackboard //literal tower of babel, subtree form speech_chance = 1 diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index 55ec73876131..d327b1047cf5 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -39,6 +39,7 @@ var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy) + . = AI_BEHAVIOR_DELAY CRASH("No target datum was supplied in the blackboard for [controller.pawn]") var/list/shitlist = controller.blackboard[shitlist_key] @@ -48,8 +49,7 @@ controller.set_blackboard_key(BB_TEMPORARILY_IGNORE_FACTION, TRUE) if (!QDELETED(existing_target) && (locate(existing_target) in shitlist) && targeting_strategy.can_attack(living_mob, existing_target, vision_range)) - finish_action(controller, succeeded = TRUE, check_faction = check_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/list/enemies_list = list() for(var/mob/living/potential_target as anything in shitlist) @@ -59,8 +59,7 @@ if(!length(enemies_list)) controller.clear_blackboard_key(target_key) - finish_action(controller, succeeded = FALSE, check_faction = check_faction) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/new_target = pick_final_target(controller, enemies_list) controller.set_blackboard_key(target_key, new_target) @@ -70,7 +69,7 @@ if(potential_hiding_location) //If they're hiding inside of something, we need to know so we can go for that instead initially. controller.set_blackboard_key(hiding_location_key, potential_hiding_location) - finish_action(controller, succeeded = TRUE, check_faction = check_faction) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Returns the desired final target from the filtered list of enemies /datum/ai_behavior/target_from_retaliate_list/proc/pick_final_target(datum/ai_controller/controller, list/enemies_list) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm index dadba992e9f1..25f0e4a42496 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/teleport_away_from_target.dm @@ -34,7 +34,7 @@ /datum/ai_behavior/find_furthest_turf_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, set_key, range) var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - return + return AI_BEHAVIOR_INSTANT var/distance = 0 var/turf/chosen_turf @@ -49,8 +49,7 @@ break //we have already found the max distance if(isnull(chosen_turf)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED controller.set_blackboard_key(set_key, chosen_turf) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm index 5ceef67bedb2..410c611ae43a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm @@ -27,7 +27,7 @@ /datum/ai_behavior/use_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key) var/datum/action/cooldown/using_action = controller.blackboard[ability_key] if (QDELETED(using_action)) - finish_action(controller, FALSE, ability_key) - return - var/result = using_action.Trigger() - finish_action(controller, result, ability_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED + if(using_action.Trigger()) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/pet_commands/fetch.dm b/code/datums/ai/basic_mobs/pet_commands/fetch.dm index ce018b55f7ec..2eb65ccb3b94 100644 --- a/code/datums/ai/basic_mobs/pet_commands/fetch.dm +++ b/code/datums/ai/basic_mobs/pet_commands/fetch.dm @@ -14,20 +14,16 @@ set_movement_target(controller, fetch_thing) /datum/ai_behavior/fetch_seek/perform(seconds_per_tick, datum/ai_controller/controller, target_key, delivery_key) - . = ..() var/obj/item/fetch_thing = controller.blackboard[target_key] // It stopped existing if (QDELETED(fetch_thing)) - finish_action(controller, FALSE, target_key, delivery_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn // We can't pick this up if (fetch_thing.anchored || !isturf(fetch_thing.loc) || !living_pawn.CanReach(fetch_thing)) - finish_action(controller, FALSE, target_key, delivery_key) - return - - finish_action(controller, TRUE, target_key, delivery_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/fetch_seek/finish_action(datum/ai_controller/controller, success, target_key, delivery_key) . = ..() @@ -54,14 +50,13 @@ set_movement_target(controller, return_target) /datum/ai_behavior/deliver_fetched_item/perform(seconds_per_tick, datum/ai_controller/controller, delivery_key, storage_key) - . = ..() var/mob/living/return_target = controller.blackboard[delivery_key] if(QDELETED(return_target)) - finish_action(controller, FALSE, delivery_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - deliver_item(controller, return_target, storage_key) - finish_action(controller, TRUE, delivery_key) + if(!deliver_item(controller, return_target, storage_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/deliver_fetched_item/finish_action(datum/ai_controller/controller, success, delivery_key) . = ..() @@ -69,13 +64,13 @@ controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) /// Actually deliver the fetched item to the target, if we still have it +/// Returns TRUE if we succeeded, FALSE if we failed /datum/ai_behavior/deliver_fetched_item/proc/deliver_item(datum/ai_controller/controller, return_target, storage_key) var/mob/pawn = controller.pawn var/obj/item/carried_item = controller.blackboard[storage_key] if(QDELETED(carried_item) || carried_item.loc != pawn) pawn.visible_message(span_notice("[pawn] looks around as if [pawn.p_they()] [pawn.p_have()] lost something.")) - finish_action(controller, FALSE) - return + return FALSE pawn.visible_message(span_notice("[pawn] delivers [carried_item] to [return_target].")) carried_item.forceMove(get_turf(return_target)) @@ -100,22 +95,26 @@ set_movement_target(controller, snack) /datum/ai_behavior/eat_fetched_snack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, delivery_key) - . = ..() var/obj/item/snack = controller.blackboard[target_key] - if(QDELETED(snack) || !isturf(snack.loc) || ishuman(snack.loc)) - finish_action(controller, FALSE) // Where did it go? + var/is_living_loc = isliving(snack.loc) + if(QDELETED(snack) || (!isturf(snack.loc) && !is_living_loc)) + // Where did it go? + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/basic_pawn = controller.pawn - if(!in_range(basic_pawn, snack)) - return + if(is_living_loc) + if(SPT_PROB(10, seconds_per_tick)) + basic_pawn.manual_emote("Stares at [snack.loc]'s [snack.name] intently.") + return AI_BEHAVIOR_DELAY + + if(!basic_pawn.Adjacent(snack)) + return AI_BEHAVIOR_DELAY - if(isturf(snack.loc)) - basic_pawn.melee_attack(snack) // snack attack! - else if(iscarbon(snack.loc) && SPT_PROB(10, seconds_per_tick)) - basic_pawn.manual_emote("Stares at [snack.loc]'s [snack.name] intently.") + controller.ai_interact(target = snack) // snack attack! if(QDELETED(snack)) // we ate it! - finish_action(controller, TRUE, target_key, delivery_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/eat_fetched_snack/finish_action(datum/ai_controller/controller, succeeded, target_key, delivery_key) . = ..() @@ -140,7 +139,6 @@ return /datum/ai_behavior/forget_failed_fetches/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() COOLDOWN_START(src, reset_ignore_cooldown, cooldown_duration) controller.clear_blackboard_key(BB_FETCH_IGNORE_LIST) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm b/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm index 397021818aa8..38a6939c9018 100644 --- a/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm +++ b/code/datums/ai/basic_mobs/pet_commands/pet_follow_friend.dm @@ -10,8 +10,7 @@ set_movement_target(controller, target) /datum/ai_behavior/pet_follow_friend/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if (QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm index c7153b0c12f7..3c8c06b00996 100644 --- a/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm +++ b/code/datums/ai/basic_mobs/pet_commands/pet_use_targeted_ability.dm @@ -13,11 +13,11 @@ var/datum/action/cooldown/mob_cooldown/ability = controller.blackboard[ability_key] var/mob/living/target = controller.blackboard[target_key] if (QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/pawn = controller.pawn if(QDELETED(pawn) || ability.InterceptClickOn(pawn, null, target)) - finish_action(controller, TRUE, ability_key, target_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT /datum/ai_behavior/pet_use_ability/finish_action(datum/ai_controller/controller, succeeded, ability_key, target_key) . = ..() diff --git a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm index 3aed57fb35c2..7d0c532bd835 100644 --- a/code/datums/ai/basic_mobs/pet_commands/play_dead.dm +++ b/code/datums/ai/basic_mobs/pet_commands/play_dead.dm @@ -11,9 +11,9 @@ basic_pawn.look_dead() /datum/ai_behavior/play_dead/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(SPT_PROB(10, seconds_per_tick)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/play_dead/finish_action(datum/ai_controller/controller, succeeded) . = ..() diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index d0c55a347cff..884161c2f82f 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -11,23 +11,21 @@ controller.behavior_cooldowns[src] = world.time + get_cooldown(controller) var/mob/living/living_pawn = controller.pawn if(!(isturf(living_pawn.loc) || HAS_TRAIT(living_pawn, TRAIT_AI_BAGATTACK))) // Void puppies can attack from inside bags - finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED // Unfortunately going to repeat this check in parent call but what can you do var/atom/target = controller.blackboard[target_key] var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if (!targeting_strategy.can_attack(living_pawn, target)) - finish_action(controller, FALSE, target_key, targeting_strategy_key, hiding_location_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if (!in_range(living_pawn, target)) growl_at(living_pawn, target, seconds_per_tick) - return + return AI_BEHAVIOR_INSTANT if(!controller.blackboard[BB_DOG_HARASS_HARM]) paw_harmlessly(living_pawn, target, seconds_per_tick) - return + return AI_BEHAVIOR_INSTANT // Give Ian some teeth var/old_melee_lower = living_pawn.melee_damage_lower @@ -39,6 +37,7 @@ living_pawn.melee_damage_lower = old_melee_lower living_pawn.melee_damage_upper = old_melee_upper + return AI_BEHAVIOR_DELAY /// Swat at someone we don't like but won't hurt /datum/ai_behavior/basic_melee_attack/dog/proc/paw_harmlessly(mob/living/living_pawn, atom/target, seconds_per_tick) diff --git a/code/datums/ai/dog/dog_subtrees.dm b/code/datums/ai/dog/dog_subtrees.dm index 62f63da54bdd..74c075adad3a 100644 --- a/code/datums/ai/dog/dog_subtrees.dm +++ b/code/datums/ai/dog/dog_subtrees.dm @@ -35,5 +35,4 @@ controller.clear_blackboard_key(target_key) /datum/ai_behavior/find_hated_dog_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index b0d34f68c224..c7534510b6af 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -7,16 +7,15 @@ action_cooldown = 2 SECONDS /datum/ai_behavior/find_and_set/perform(seconds_per_tick, datum/ai_controller/controller, set_key, locate_path, search_range) - . = ..() if (controller.blackboard_key_exists(set_key)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + if(QDELETED(controller.pawn)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/find_this_thing = search_tactic(controller, locate_path, search_range) - if(find_this_thing) - controller.set_blackboard_key(set_key, find_this_thing) - finish_action(controller, TRUE) - else - finish_action(controller, FALSE) + if(isnull(find_this_thing)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + controller.set_blackboard_key(set_key, find_this_thing) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_and_set/proc/search_tactic(datum/ai_controller/controller, locate_path, search_range) return locate(locate_path) in oview(search_range, controller.pawn) @@ -39,19 +38,17 @@ /datum/ai_behavior/find_and_set/edible/search_tactic(datum/ai_controller/controller, locate_path, search_range) var/mob/living/living_pawn = controller.pawn - var/list/food_candidates = list() - for(var/held_candidate as anything in living_pawn.held_items) - if(!held_candidate || !IsEdible(held_candidate)) - continue - food_candidates += held_candidate - var/list/local_results = locate(locate_path) in oview(search_range, controller.pawn) - for(var/local_candidate in local_results) - if(!IsEdible(local_candidate)) - continue - food_candidates += local_candidate - if(food_candidates.len) - return pick(food_candidates) + for(var/atom/held_candidate as anything in living_pawn.held_items) + if(IsEdible(held_candidate)) + return held_candidate + + for(var/atom/local_candidate as anything in oview(search_range, controller.pawn)) + if(IsEdible(local_candidate) && istype(local_candidate, locate_path)) + return local_candidate + + return null + /** * Variant of find and set that only checks in hands, search range should be excluded for this @@ -62,18 +59,21 @@ 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. */ /datum/ai_behavior/find_and_set/in_list /datum/ai_behavior/find_and_set/in_list/search_tactic(datum/ai_controller/controller, locate_paths, search_range) - var/list/found = list() - for(var/locate_path in locate_paths) - var/single_locate = ..(controller, locate_path, search_range) - if(single_locate) - found += single_locate - if(found.len) + var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) + if(length(found)) return pick(found) /// Like find_and_set/in_list, but we return the turf location of the item instead of the item itself. @@ -175,3 +175,25 @@ var/mob/living/living_pawn = controller.pawn var/potential_friend = living_pawn.faction.Find(REF(friend)) ? friend : null return potential_friend + + +/datum/ai_behavior/find_and_set/in_list/turf_types + +/datum/ai_behavior/find_and_set/in_list/turf_types/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = RANGE_TURFS(search_range, controller.pawn) + shuffle_inplace(found) + for(var/turf/possible_turf as anything in found) + if(!is_type_in_typecache(possible_turf, locate_paths)) + continue + if(can_see(controller.pawn, possible_turf, search_range)) + return possible_turf + return null + +/datum/ai_behavior/find_and_set/in_list/closest_turf + +/datum/ai_behavior/find_and_set/in_list/closest_turf/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = RANGE_TURFS(search_range, controller.pawn) + for(var/turf/possible_turf as anything in found) + if(!is_type_in_typecache(possible_turf, locate_paths) || !can_see(controller.pawn, possible_turf, search_range)) + found -= possible_turf + return (length(found)) ? get_closest_atom(/turf, found, controller.pawn) : null diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index 9a4cba2da6c5..251f1df4ffec 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -1,27 +1,25 @@ /datum/ai_behavior/resist/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn + living_pawn.ai_controller.set_blackboard_key(BB_RESISTING, TRUE) living_pawn.execute_resist() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/battle_screech ///List of possible screeches the behavior has var/list/screeches /datum/ai_behavior/battle_screech/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn INVOKE_ASYNC(living_pawn, TYPE_PROC_REF(/mob, emote), pick(screeches)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///Moves to target then finishes /datum/ai_behavior/move_to_target behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT /datum/ai_behavior/move_to_target/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/break_spine @@ -41,12 +39,10 @@ var/mob/living/big_guy = controller.pawn //he was molded by the darkness if(QDELETED(batman) || get_dist(batman, big_guy) >= give_up_distance) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED if(batman.stat != CONSCIOUS) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED big_guy.start_pulling(batman) big_guy.face_atom(batman) @@ -62,7 +58,7 @@ else batman.adjustBruteLoss(150) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/break_spine/finish_action(datum/ai_controller/controller, succeeded, target_key) if(succeeded) @@ -79,14 +75,12 @@ /datum/ai_behavior/use_in_hand/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held = pawn.get_active_held_item() if(!held) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED pawn.activate_hand() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Use the currently held item, or unarmed, on a weakref to an object in the world /datum/ai_behavior/use_on_object @@ -101,21 +95,18 @@ set_movement_target(controller, target) /datum/ai_behavior/use_on_object/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held_item = pawn.get_item_by_slot(pawn.get_active_hand()) var/atom/target = controller.blackboard[target_key] if(QDELETED(target) || !pawn.CanReach(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - pawn.set_combat_mode(FALSE) if(held_item) held_item.melee_attack_chain(pawn, target) else - pawn.UnarmedAttack(target, TRUE) + controller.ai_interact(target = target, combat_mode = FALSE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/give required_distance = 1 @@ -127,37 +118,34 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/give/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/pawn = controller.pawn var/obj/item/held_item = pawn.get_active_held_item() var/atom/target = controller.blackboard[target_key] if(!held_item) //if held_item is null, we pretend that action was succesful - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(!target || !pawn.CanReach(target) || !isliving(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = target - - if(!try_to_give_item(controller, living_target, held_item)) - return + var/perform_flags = try_to_give_item(controller, living_target, held_item) + if(perform_flags & AI_BEHAVIOR_FAILED) + return perform_flags controller.PauseAi(1.5 SECONDS) living_target.visible_message( span_info("[pawn] starts trying to give [held_item] to [living_target]!"), span_warning("[pawn] tries to give you [held_item]!") ) if(!do_after(pawn, 1 SECONDS, living_target)) - return + return AI_BEHAVIOR_DELAY | perform_flags - try_to_give_item(controller, living_target, held_item, actually_give = TRUE) + perform_flags |= try_to_give_item(controller, living_target, held_item, actually_give = TRUE) + return AI_BEHAVIOR_DELAY | perform_flags /datum/ai_behavior/give/proc/try_to_give_item(datum/ai_controller/controller, mob/living/target, obj/item/held_item, actually_give) if(QDELETED(held_item) || QDELETED(target)) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/has_left_pocket = target.can_equip(held_item, ITEM_SLOT_LPOCKET) var/has_right_pocket = target.can_equip(held_item, ITEM_SLOT_RPOCKET) @@ -169,17 +157,16 @@ break if(!has_left_pocket && !has_right_pocket && !has_valid_hand) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!actually_give) - return TRUE + return AI_BEHAVIOR_DELAY if(!has_valid_hand || prob(50)) target.equip_to_slot_if_possible(held_item, (!has_left_pocket ? ITEM_SLOT_RPOCKET : (prob(50) ? ITEM_SLOT_LPOCKET : ITEM_SLOT_RPOCKET))) else target.put_in_hands(held_item) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/consume @@ -192,21 +179,20 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/consume/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hunger_timer_key) - . = ..() var/mob/living/living_pawn = controller.pawn var/obj/item/target = controller.blackboard[target_key] if(QDELETED(target)) - return + return AI_BEHAVIOR_DELAY if(!(target in living_pawn.held_items)) if(!living_pawn.get_empty_held_indexes() || !living_pawn.put_in_hands(target)) - finish_action(controller, FALSE, target, hunger_timer_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED target.melee_attack_chain(living_pawn, living_pawn) if(QDELETED(target) || prob(10)) // Even if we don't finish it all we can randomly decide to be done - finish_action(controller, TRUE, null, hunger_timer_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY /datum/ai_behavior/consume/finish_action(datum/ai_controller/controller, succeeded, target_key, hunger_timer_key) . = ..() @@ -219,37 +205,34 @@ /datum/ai_behavior/drop_item /datum/ai_behavior/drop_item/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn var/obj/item/best_held = GetBestWeapon(controller, null, living_pawn.held_items) for(var/obj/item/held as anything in living_pawn.held_items) if(!held || held == best_held) continue living_pawn.dropItemToGround(held) + return AI_BEHAVIOR_DELAY /// This behavior involves attacking a target. /datum/ai_behavior/attack - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM - required_distance = 1 + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM | AI_BEHAVIOR_REQUIRE_REACH /datum/ai_behavior/attack/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !isturf(living_pawn.loc)) - return + return AI_BEHAVIOR_DELAY var/atom/movable/attack_target = controller.blackboard[BB_ATTACK_TARGET] if(!attack_target || !can_see(living_pawn, attack_target, length = controller.blackboard[BB_VISION_RANGE])) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = attack_target if(istype(living_target) && (living_target.stat == DEAD)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED set_movement_target(controller, living_target) attack(controller, living_target) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/attack/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -268,22 +251,20 @@ required_distance = 1 /datum/ai_behavior/follow/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !isturf(living_pawn.loc)) - return + return AI_BEHAVIOR_DELAY var/atom/movable/follow_target = controller.blackboard[BB_FOLLOW_TARGET] if(!follow_target || get_dist(living_pawn, follow_target) > controller.blackboard[BB_VISION_RANGE]) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = follow_target if(istype(living_target) && (living_target.stat == DEAD)) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED set_movement_target(controller, living_target) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/follow/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -291,12 +272,14 @@ /datum/ai_behavior/perform_emote -/datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote) +/datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote, speech_sound) var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) - return + return AI_BEHAVIOR_INSTANT living_pawn.manual_emote(emote) - finish_action(controller, TRUE) + if(speech_sound) // Only audible emotes will pass in a sound + playsound(living_pawn, speech_sound, 80, vary = TRUE, pressure_affected =TRUE, ignore_walls = FALSE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perform_speech @@ -305,21 +288,20 @@ var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) - return + return AI_BEHAVIOR_INSTANT living_pawn.say(speech, forced = "AI Controller") if(speech_sound) playsound(living_pawn, speech_sound, 80, vary = TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perform_speech_radio /datum/ai_behavior/perform_speech_radio/perform(seconds_per_tick, datum/ai_controller/controller, speech, obj/item/radio/speech_radio, list/try_channels = list(RADIO_CHANNEL_COMMON)) var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn) || !istype(speech_radio) || QDELETED(speech_radio) || !length(try_channels)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED speech_radio.talk_into(living_pawn, speech, pick(try_channels)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED //song behaviors @@ -337,24 +319,20 @@ song.ParseSong(song_lines) song.repeat = 10 song.volume = song.max_volume - 10 - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/play_instrument /datum/ai_behavior/play_instrument/perform(seconds_per_tick, datum/ai_controller/controller, song_instrument_key) - . = ..() - var/obj/item/instrument/song_instrument = controller.blackboard[song_instrument_key] var/datum/song/song = song_instrument.song song.start_playing(controller.pawn) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_nearby /datum/ai_behavior/find_nearby/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/list/possible_targets = list() for(var/atom/thing in view(2, controller.pawn)) if(!thing.mouse_opacity) @@ -363,6 +341,6 @@ continue possible_targets += thing if(!possible_targets.len) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, pick(possible_targets)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index 9bd8c60f28a4..0ab14ff0d320 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -50,22 +50,20 @@ /// Finds a specific atom type to hunt. /datum/ai_behavior/find_hunt_target + ///is this only meant to search for turf types? + var/search_turf_types = FALSE /datum/ai_behavior/find_hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) - . = ..() - var/mob/living/living_mob = controller.pawn - - for(var/atom/possible_dinner as anything in typecache_filter_list(range(hunt_range, living_mob), types_to_hunt)) - if(!valid_dinner(living_mob, possible_dinner, hunt_range)) + var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob) + for(var/atom/possible_dinner as anything in typecache_filter_list(interesting_objects, types_to_hunt)) + if(!valid_dinner(living_mob, possible_dinner, hunt_range, controller, seconds_per_tick)) continue controller.set_blackboard_key(hunting_target_key, possible_dinner) - finish_action(controller, TRUE) - return - - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED -/datum/ai_behavior/find_hunt_target/proc/valid_dinner(mob/living/source, atom/dinner, radius) +/datum/ai_behavior/find_hunt_target/proc/valid_dinner(mob/living/source, atom/dinner, radius, datum/ai_controller/controller, seconds_per_tick) if(isliving(dinner)) var/mob/living/living_target = dinner if(living_target.stat == DEAD) //bitch is dead @@ -73,9 +71,12 @@ return can_see(source, dinner, radius) +/datum/ai_behavior/find_hunt_target/search_turf_types + search_turf_types = TRUE + /// Hunts down a specific atom type. /datum/ai_behavior/hunt_target - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH /// How long do we have to wait after a successful hunt? var/hunt_cooldown = 5 SECONDS /// Do we reset the target after attacking something, so we can check for status changes. @@ -90,15 +91,13 @@ set_movement_target(controller, hunt_target) /datum/ai_behavior/hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) - . = ..() var/mob/living/hunter = controller.pawn var/atom/hunted = controller.blackboard[hunting_target_key] if(QDELETED(hunted)) - finish_action(controller, FALSE, hunting_target_key) - else - target_caught(hunter, hunted) - finish_action(controller, TRUE, hunting_target_key, hunting_cooldown_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + target_caught(hunter, hunted) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hunt_target/proc/target_caught(mob/living/hunter, atom/hunted) if(isliving(hunted)) // Are we hunting a living mob? @@ -123,25 +122,23 @@ if(always_reset_target && hunting_target_key) controller.clear_blackboard_key(hunting_target_key) -/datum/ai_behavior/hunt_target/unarmed_attack_target - ///do we toggle combat mode before interacting with the object? - var/switch_combat_mode = FALSE +/datum/ai_behavior/hunt_target/interact_with_target + ///what combat mode should we use to interact with + var/behavior_combat_mode = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) - hunter.UnarmedAttack(hunted, TRUE) +/datum/ai_behavior/hunt_target/interact_with_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) + var/datum/ai_controller/controller = hunter.ai_controller + controller.ai_interact(target = hunted, combat_mode = behavior_combat_mode) -/datum/ai_behavior/hunt_target/unarmed_attack_target/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - . = ..() - if(!switch_combat_mode) - return - var/mob/living/living_pawn = controller.pawn - living_pawn.istate = initial(living_pawn.istate) +/datum/ai_behavior/hunt_target/interact_with_target/combat_mode_off + behavior_combat_mode = FALSE -/datum/ai_behavior/hunt_target/unarmed_attack_target/switch_combat_mode - switch_combat_mode = TRUE +/datum/ai_behavior/hunt_target/interact_with_target/reset_target + always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off always_reset_target = TRUE + behavior_combat_mode = FALSE /datum/ai_behavior/hunt_target/use_ability_on_target always_reset_target = TRUE @@ -151,10 +148,26 @@ /datum/ai_behavior/hunt_target/use_ability_on_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) var/datum/action/cooldown/ability = controller.blackboard[ability_key] if(!ability?.IsAvailable()) - finish_action(controller, FALSE, hunting_target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED return ..() /datum/ai_behavior/hunt_target/use_ability_on_target/target_caught(mob/living/hunter, atom/hunted) var/datum/action/cooldown/ability = hunter.ai_controller.blackboard[ability_key] ability.InterceptClickOn(hunter, null, hunted) + +/datum/ai_behavior/hunt_target/latch_onto + +/datum/ai_behavior/hunt_target/latch_onto/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) + . = ..() + var/mob/living/living_pawn = controller.pawn + if(living_pawn.buckled) + return FALSE + +/datum/ai_behavior/hunt_target/latch_onto/target_caught(mob/living/hunter, obj/hunted) + if(hunter.buckled) + return FALSE + if(!hunted.buckle_mob(hunter, force = TRUE)) + return FALSE + hunted.visible_message(span_notice("[hunted] has been latched onto by [hunter]!")) + return TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_corpses.dm b/code/datums/ai/hunting_behavior/hunting_corpses.dm index e720e4da947a..5062a8aaf929 100644 --- a/code/datums/ai/hunting_behavior/hunting_corpses.dm +++ b/code/datums/ai/hunting_behavior/hunting_corpses.dm @@ -1,17 +1,18 @@ -/// Find and attack corpses -/datum/ai_planning_subtree/find_and_hunt_target/corpses - finding_behavior = /datum/ai_behavior/find_hunt_target/corpses - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target - hunt_targets = list(/mob/living) +/datum/ai_planning_subtree/find_and_hunt_target/look_for_light_fixtures + target_key = BB_LOW_PRIORITY_HUNTING_TARGET + finding_behavior = /datum/ai_behavior/find_hunt_target/light_fixtures + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/light_fixtures + hunt_targets = list(/obj/machinery/light) + hunt_range = 7 -/// Find nearby dead mobs -/datum/ai_behavior/find_hunt_target/corpses +/datum/ai_behavior/hunt_target/interact_with_target/light_fixtures + hunt_cooldown = 10 SECONDS + always_reset_target = TRUE -/datum/ai_behavior/find_hunt_target/corpses/valid_dinner(mob/living/source, mob/living/dinner, radius) - if (!isliving(dinner) || dinner.stat != DEAD) +/datum/ai_behavior/find_hunt_target/light_fixtures + +/datum/ai_behavior/find_hunt_target/light_fixtures/valid_dinner(mob/living/source, obj/machinery/light/dinner, radius) + if(dinner.status == LIGHT_BROKEN) //light is already broken return FALSE - return can_see(source, dinner, radius) -/// Find and attack specifically human corpses -/datum/ai_planning_subtree/find_and_hunt_target/corpses/human - hunt_targets = list(/mob/living/carbon/human) + return can_see(source, dinner, radius) diff --git a/code/datums/ai/hunting_behavior/hunting_mouse.dm b/code/datums/ai/hunting_behavior/hunting_mouse.dm index d0e7161fd2de..f97ebf27ddf6 100644 --- a/code/datums/ai/hunting_behavior/hunting_mouse.dm +++ b/code/datums/ai/hunting_behavior/hunting_mouse.dm @@ -1,13 +1,13 @@ // Mouse subtree to hunt down delicious cheese. /datum/ai_planning_subtree/find_and_hunt_target/look_for_cheese - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_targets = list(/obj/item/food/cheese) hunt_range = 1 // Mouse subtree to hunt down ... delicious cabling? /datum/ai_planning_subtree/find_and_hunt_target/look_for_cables target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse finding_behavior = /datum/ai_behavior/find_hunt_target/mouse_cable hunt_targets = list(/obj/structure/cable) hunt_range = 0 // Only look below us @@ -28,5 +28,5 @@ return below_the_cable.underfloor_accessibility >= UNDERFLOOR_INTERACTABLE // Our hunts have a decent cooldown. -/datum/ai_behavior/hunt_target/unarmed_attack_target/mouse +/datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_cooldown = 20 SECONDS diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index 77aa49dd6c55..55464ed06cd1 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -12,55 +12,51 @@ controller.clear_blackboard_key(BB_MONKEY_PICKUPTARGET) +/// Equips an item on the monkey +/// Returns TRUE if it works out, FALSE otherwise /datum/ai_behavior/monkey_equip/proc/equip_item(datum/ai_controller/controller) var/mob/living/living_pawn = controller.pawn var/obj/item/target = controller.blackboard[BB_MONKEY_PICKUPTARGET] var/best_force = controller.blackboard[BB_MONKEY_BEST_FORCE_FOUND] - if(!isturf(living_pawn.loc)) - finish_action(controller, FALSE) - return + return FALSE if(!target) - finish_action(controller, FALSE) - return + return FALSE if(target.anchored) //Can't pick it up, so stop trying. - finish_action(controller, FALSE) - return + return FALSE // Strong weapon else if(target.force > best_force) living_pawn.drop_all_held_items() living_pawn.put_in_hands(target) controller.set_blackboard_key(BB_MONKEY_BEST_FORCE_FOUND, target.force) - finish_action(controller, TRUE) - return + return TRUE else if(target.slot_flags) //Clothing == top priority living_pawn.dropItemToGround(target, TRUE) living_pawn.update_icons() if(!living_pawn.equip_to_appropriate_slot(target)) - finish_action(controller, FALSE) - return //Already wearing something, in the future this should probably replace the current item but the code didn't actually do that, and I dont want to support it right now. - finish_action(controller, TRUE) - return + return FALSE //Already wearing something, in the future this should probably replace the current item but the code didn't actually do that, and I dont want to support it right now. + return TRUE // EVERYTHING ELSE else if(living_pawn.get_empty_held_indexes()) living_pawn.put_in_hands(target) - finish_action(controller, TRUE) - return + return TRUE - finish_action(controller, FALSE) + return FALSE /datum/ai_behavior/monkey_equip/ground required_distance = 0 /datum/ai_behavior/monkey_equip/ground/perform(seconds_per_tick, datum/ai_controller/controller) . = ..() - equip_item(controller) + if(equip_item(controller)) + return . | AI_BEHAVIOR_SUCCEEDED + return . | AI_BEHAVIOR_FAILED /datum/ai_behavior/monkey_equip/pickpocket @@ -110,13 +106,10 @@ /datum/ai_behavior/monkey_flee /datum/ai_behavior/monkey_flee/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - var/mob/living/living_pawn = controller.pawn - if(living_pawn.health >= MONKEY_FLEE_HEALTH) - finish_action(controller, TRUE) //we're back in bussiness - return + if(living_pawn.health >= MONKEY_FLEE_HEALTH) //we're back in bussiness + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/mob/living/target = null @@ -128,8 +121,8 @@ if(target) SSmove_manager.move_away(living_pawn, target, max_dist=MONKEY_ENEMY_VISION, delay=5) - else - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/monkey_attack_mob behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration @@ -139,28 +132,28 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/monkey_attack_mob/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn - if(!target || target.stat != CONSCIOUS) - finish_action(controller, TRUE) //Target == owned - return + if(!target || target.stat != CONSCIOUS) //Target == owned + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - if(isturf(target.loc) && !IS_DEAD_OR_INCAP(living_pawn)) // Check if they're a valid target - // check if target has a weapon - var/obj/item/W - for(var/obj/item/I in target.held_items) - if(!(I.item_flags & ABSTRACT)) - W = I - break - - // if the target has a weapon, chance to disarm them - if(W && SPT_PROB(MONKEY_ATTACK_DISARM_PROB, seconds_per_tick)) - monkey_attack(controller, target, seconds_per_tick, TRUE) - else - monkey_attack(controller, target, seconds_per_tick, FALSE) + if(!isturf(target.loc) || IS_DEAD_OR_INCAP(living_pawn)) // Check if they're a valid target + return AI_BEHAVIOR_DELAY + // check if target has a weapon + var/obj/item/W + for(var/obj/item/I in target.held_items) + if(!(I.item_flags & ABSTRACT)) + W = I + break + + // if the target has a weapon, chance to disarm them + var/perform_flags = NONE + if(W && SPT_PROB(MONKEY_ATTACK_DISARM_PROB, seconds_per_tick)) + perform_flags = monkey_attack(controller, target, seconds_per_tick, TRUE) + else + perform_flags = monkey_attack(controller, target, seconds_per_tick, FALSE) + return AI_BEHAVIOR_DELAY | perform_flags /datum/ai_behavior/monkey_attack_mob/finish_action(datum/ai_controller/controller, succeeded, target_key) @@ -176,7 +169,7 @@ var/mob/living/living_pawn = controller.pawn if(living_pawn.next_move > world.time) - return + return NONE living_pawn.changeNext_move(CLICK_CD_MELEE) //We play fair @@ -196,7 +189,7 @@ else if(disarm) living_pawn.istate |= ISTATE_SECONDARY - living_pawn.UnarmedAttack(target, null) //Fake a right click if we're disarmin + controller.ai_interact(target = target, modifiers = disarm ? list(RIGHT_CLICK = TRUE) : null) //Fake a right click if we're disarmin living_pawn.istate &= ~ISTATE_SECONDARY controller.set_blackboard_key(BB_MONKEY_GUN_WORKED, TRUE) // We reset their memory of the gun being 'broken' if they accomplish some other attack else if(weapon) @@ -218,7 +211,7 @@ // no de-aggro if(controller.blackboard[BB_MONKEY_AGGRESSIVE] && !(HAS_TRAIT(target, TRAIT_MONKEYFRIEND))) - return + return NONE // we've queued up a monkey attack on a mob which isn't already an enemy, so give them 1 threat to start // note they might immediately reduce threat and drop from the list. @@ -242,7 +235,8 @@ controller.remove_thing_from_blackboard_key(BB_MONKEY_ENEMIES, target) living_pawn.set_combat_mode(FALSE) if(controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] == target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_SUCCEEDED + return NONE /datum/ai_behavior/disposal_mob behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM //performs to increase frustration @@ -258,10 +252,8 @@ controller.clear_blackboard_key(disposal_target_key) //No target disposal /datum/ai_behavior/disposal_mob/perform(seconds_per_tick, datum/ai_controller/controller, attack_target_key, disposal_target_key) - . = ..() - if(controller.blackboard[BB_MONKEY_DISPOSING]) //We are disposing, don't do ANYTHING!!!! - return + return AI_BEHAVIOR_DELAY var/mob/living/target = controller.blackboard[attack_target_key] var/mob/living/living_pawn = controller.pawn @@ -269,25 +261,24 @@ set_movement_target(controller, target) if(!target) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(target.pulledby != living_pawn && !HAS_AI_CONTROLLER_TYPE(target.pulledby, /datum/ai_controller/monkey)) //Dont steal from my fellow monkeys. if(living_pawn.Adjacent(target) && isturf(target.loc)) target.grabbedby(living_pawn) - return //Do the rest next turn + return AI_BEHAVIOR_DELAY //Do the rest next turn var/obj/machinery/disposal/disposal = controller.blackboard[disposal_target_key] set_movement_target(controller, disposal) if(!disposal) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(living_pawn.Adjacent(disposal)) INVOKE_ASYNC(src, PROC_REF(try_disposal_mob), controller, attack_target_key, disposal_target_key) //put him in! - else //This means we might be getting pissed! - return + return AI_BEHAVIOR_DELAY + //This means we might be getting pissed! + return AI_BEHAVIOR_DELAY /datum/ai_behavior/disposal_mob/proc/try_disposal_mob(datum/ai_controller/controller, attack_target_key, disposal_target_key) var/mob/living/living_pawn = controller.pawn @@ -302,8 +293,6 @@ /datum/ai_behavior/recruit_monkeys/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() - controller.set_blackboard_key(BB_MONKEY_RECRUIT_COOLDOWN, world.time + MONKEY_RECRUIT_COOLDOWN) var/mob/living/living_pawn = controller.pawn @@ -317,7 +306,7 @@ // Other monkeys now also hate the guy we're currently targeting nearby_monkey.ai_controller.add_blackboard_key_assoc(BB_MONKEY_ENEMIES, controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET], MONKEY_RECRUIT_HATED_AMOUNT) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/monkey_set_combat_target/perform(seconds_per_tick, datum/ai_controller/controller, set_key, enemies_key) var/list/enemies = controller.blackboard[enemies_key] @@ -334,8 +323,7 @@ valids[possible_enemy] = CEILING(100 / (get_dist(controller.pawn, possible_enemy) || 1), 1) if(!length(valids)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED controller.set_blackboard_key(set_key, pick_weight(valids)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/objects/mod.dm b/code/datums/ai/objects/mod.dm index 84f5678addbf..e8e7d4bd6ac8 100644 --- a/code/datums/ai/objects/mod.dm +++ b/code/datums/ai/objects/mod.dm @@ -35,12 +35,11 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT|AI_BEHAVIOR_MOVE_AND_PERFORM /datum/ai_behavior/mod_attach/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(!controller.pawn.Adjacent(controller.blackboard[BB_MOD_TARGET])) - return + return AI_BEHAVIOR_DELAY var/obj/item/implant/mod/implant = controller.blackboard[BB_MOD_IMPLANT] implant.module.attach(controller.blackboard[BB_MOD_TARGET]) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/mod_attach/finish_action(datum/ai_controller/controller, succeeded) . = ..() diff --git a/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm b/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm index b4e5609531c1..d6310bfc9f3b 100644 --- a/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm +++ b/code/datums/ai/objects/vending_machines/vending_machine_behaviors.dm @@ -10,15 +10,15 @@ set_movement_target(controller, controller.blackboard[target_key]) /datum/ai_behavior/vendor_crush/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(controller.blackboard[BB_VENDING_BUSY_TILTING]) - return + return AI_BEHAVIOR_DELAY controller.ai_movement.stop_moving_towards(controller) controller.set_blackboard_key(BB_VENDING_BUSY_TILTING, TRUE) var/turf/target_turf = get_turf(controller.blackboard[BB_VENDING_CURRENT_TARGET]) new /obj/effect/temp_visual/telegraphing/vending_machine_tilt(target_turf) addtimer(CALLBACK(src, PROC_REF(tiltonmob), controller, target_turf), time_to_tilt) + return AI_BEHAVIOR_DELAY /datum/ai_behavior/vendor_crush/proc/tiltonmob(datum/ai_controller/controller, turf/target_turf) var/obj/machinery/vending/vendor_pawn = controller.pawn @@ -40,10 +40,9 @@ var/succes_tilt_cooldown = 5 SECONDS /datum/ai_behavior/vendor_rise_up/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/obj/machinery/vending/vendor_pawn = controller.pawn vendor_pawn.visible_message(span_warning("[vendor_pawn] untilts itself!")) if(controller.blackboard[BB_VENDING_LAST_HIT_SUCCESFUL]) controller.set_blackboard_key(BB_VENDING_TILT_COOLDOWN, world.time + succes_tilt_cooldown) vendor_pawn.untilt() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/robot_customer/robot_customer_behaviors.dm b/code/datums/ai/robot_customer/robot_customer_behaviors.dm index 735b795e6066..2c658a3d497d 100644 --- a/code/datums/ai/robot_customer/robot_customer_behaviors.dm +++ b/code/datums/ai/robot_customer/robot_customer_behaviors.dm @@ -2,7 +2,6 @@ action_cooldown = 8 SECONDS /datum/ai_behavior/find_seat/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/basic/robot_customer/customer_pawn = controller.pawn var/datum/customer_data/customer_data = controller.blackboard[BB_CUSTOMER_CUSTOMERINFO] var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE] @@ -28,22 +27,20 @@ customer_pawn.say(pick(customer_data.found_seat_lines)) controller.set_blackboard_key(BB_CUSTOMER_MY_SEAT, found_seat) attending_venue.linked_seats[found_seat] = customer_pawn - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // SPT_PROB 1.5 is about a 60% chance that the tourist will have vocalised at least once every minute. if(!controller.blackboard[BB_CUSTOMER_SAID_CANT_FIND_SEAT_LINE] || SPT_PROB(1.5, seconds_per_tick)) customer_pawn.say(pick(customer_data.cant_find_seat_lines)) controller.set_blackboard_key(BB_CUSTOMER_SAID_CANT_FIND_SEAT_LINE, TRUE) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/order_food behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT required_distance = 0 /datum/ai_behavior/order_food/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/mob/living/basic/robot_customer/customer_pawn = controller.pawn var/datum/customer_data/customer_data = controller.blackboard[BB_CUSTOMER_CUSTOMERINFO] var/obj/structure/holosign/robot_seat/seat_marker = controller.blackboard[BB_CUSTOMER_MY_SEAT] @@ -55,18 +52,15 @@ var/datum/venue/attending_venue = controller.blackboard[BB_CUSTOMER_ATTENDING_VENUE] controller.set_blackboard_key(BB_CUSTOMER_CURRENT_ORDER, attending_venue.order_food(customer_pawn, customer_data)) - - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/wait_for_food behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_MOVE_AND_PERFORM required_distance = 0 /datum/ai_behavior/wait_for_food/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() if(controller.blackboard[BB_CUSTOMER_EATING]) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED controller.add_blackboard_key(BB_CUSTOMER_PATIENCE, seconds_per_tick * -1 SECONDS) // Convert seconds_per_tick to a SECONDS equivalent. if(controller.blackboard[BB_CUSTOMER_PATIENCE] < 0 || controller.blackboard[BB_CUSTOMER_LEAVING]) // Check if we're leaving because sometthing mightve forced us to @@ -95,6 +89,7 @@ customer.eat_order(I, attending_venue) break + return AI_BEHAVIOR_DELAY /datum/ai_behavior/wait_for_food/finish_action(datum/ai_controller/controller, succeeded) . = ..() @@ -122,6 +117,5 @@ set_movement_target(controller, attending_venue.restaurant_portal) /datum/ai_behavior/leave_venue/perform(seconds_per_tick, datum/ai_controller/controller, venue_key) - . = ..() qdel(controller.pawn) //save the world, my final message, goodbye. - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/components/bakeable.dm b/code/datums/components/bakeable.dm index 3a654b4e4696..1ddd3ce19ce3 100644 --- a/code/datums/components/bakeable.dm +++ b/code/datums/components/bakeable.dm @@ -14,7 +14,10 @@ /// REF() to the mind which placed us in an oven var/who_baked_us -/datum/component/bakeable/Initialize(bake_result, required_bake_time, positive_result, use_large_steam_sprite) + /// Reagents that should be added to the result + var/list/added_reagents + +/datum/component/bakeable/Initialize(bake_result, required_bake_time, positive_result, use_large_steam_sprit, list/added_reagents) . = ..() if(!isitem(parent)) //Only items support baking at the moment return COMPONENT_INCOMPATIBLE @@ -22,6 +25,9 @@ src.bake_result = bake_result 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) @@ -41,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) @@ -67,6 +74,11 @@ var/atom/original_object = parent var/obj/item/plate/oven_tray/used_tray = original_object.loc var/atom/baked_result = new bake_result(used_tray) + if(baked_result.reagents && positive_result) //make space and tranfer reagents if it has any & the resulting item isn't bad food or other bad baking result + baked_result.reagents.clear_reagents() + original_object.reagents.trans_to(baked_result, original_object.reagents.total_volume) + if(added_reagents) // Add any new reagents that should be added + baked_result.reagents.add_reagent_list(added_reagents) if(who_baked_us) ADD_TRAIT(baked_result, TRAIT_FOOD_CHEF_MADE, who_baked_us) @@ -79,10 +91,16 @@ used_tray.AddToPlate(baked_result) if(positive_result) - used_oven.visible_message(span_notice("You smell something great coming from [used_oven]."), blind_message = span_notice("You smell something great...")) - BLACKBOX_LOG_FOOD_MADE(baked_result) + used_oven.visible_message( + span_notice("You smell something great coming from [used_oven]."), + blind_message = span_notice("You smell something great..."), + ) + BLACKBOX_LOG_FOOD_MADE(baked_result.type) else - used_oven.visible_message(span_warning("You smell a burnt smell coming from [used_oven]."), blind_message = span_warning("You smell a burnt smell...")) + used_oven.visible_message( + span_warning("You smell a burnt smell coming from [used_oven]."), + blind_message = span_warning("You smell a burnt smell..."), + ) SEND_SIGNAL(parent, COMSIG_ITEM_BAKED, baked_result) qdel(parent) @@ -104,4 +122,4 @@ else if(current_bake_time <= required_bake_time) examine_list += span_notice("[parent] seems to be almost finished baking!") else - examine_list += span_danger("[parent] should probably not be baked for much longer!") + examine_list += span_danger("[parent] should probably not be put in the oven.") diff --git a/code/datums/components/burning.dm b/code/datums/components/burning.dm index 20d91688c380..47a91e39496d 100644 --- a/code/datums/components/burning.dm +++ b/code/datums/components/burning.dm @@ -55,7 +55,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e if(atom_parent.resistance_flags & FIRE_PROOF) atom_parent.extinguish() return - atom_parent.take_damage(10 * seconds_per_tick, BURN, FIRE, FALSE) + atom_parent.take_damage(5 * seconds_per_tick, BURN, FIRE, FALSE) //monkestation edit: 10 to 5 damage /// Alerts any examiners that the parent is on fire (even though it should be rather obvious) /datum/component/burning/proc/on_examine(atom/source, mob/user, list/examine_list) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm index 3d8a8f36f8f4..f8e3e2b7131b 100644 --- a/code/datums/components/food/edible.dm +++ b/code/datums/components/food/edible.dm @@ -88,9 +88,9 @@ Behavior that's still missing from this component that original food items had t RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(examine)) RegisterSignals(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal)) RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(OnCraft)) - RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(OnProcessed)) - RegisterSignal(parent, COMSIG_FOOD_INGREDIENT_ADDED, PROC_REF(edible_ingredient_added)) RegisterSignal(parent, COMSIG_OOZE_EAT_ATOM, PROC_REF(on_ooze_eat)) + RegisterSignal(parent, COMSIG_FOOD_INGREDIENT_ADDED, PROC_REF(edible_ingredient_added)) + RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(OnProcessed)) RegisterSignal(parent, COMSIG_TRY_EAT_TRAIT, PROC_REF(try_eat_trait)) RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND_SECONDARY, PROC_REF(show_radial_recipes)) //Monkestation edit: CHEWIN COOKING @@ -304,7 +304,7 @@ Behavior that's still missing from this component that original food items had t this_food.reagents.maximum_volume = ROUND_UP(this_food.reagents.maximum_volume) // Just because I like whole numbers for this. - BLACKBOX_LOG_FOOD_MADE(this_food) + BLACKBOX_LOG_FOOD_MADE(parent.type) ///Makes sure the thing hasn't been destroyed or fully eaten to prevent eating phantom edibles /datum/component/edible/proc/IsFoodGone(atom/owner, mob/living/feeder) @@ -449,7 +449,7 @@ Behavior that's still missing from this component that original food items had t var/atom/owner = parent - if(!owner?.reagents) + if(!owner.reagents) stack_trace("[eater] failed to bite [owner], because [owner] had no reagents.") return FALSE if(eater.satiety > -200) @@ -461,7 +461,8 @@ Behavior that's still missing from this component that original food items had t if(sig_return & DESTROY_FOOD) qdel(owner) return - var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + var/fraction = 0.3 + fraction = min(bite_consumption / owner.reagents.total_volume, 1) owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, methods = INGEST) bitecount++ var/desired_mask = (total_bites / bitecount) @@ -477,8 +478,7 @@ Behavior that's still missing from this component that original food items had t On_Consume(eater, feeder) //Invoke our after eat callback if it is valid - if(after_eat) - after_eat.Invoke(eater, feeder, bitecount) + after_eat?.Invoke(eater, feeder, bitecount) //Invoke the eater's stomach's after_eat callback if valid if(iscarbon(eater)) diff --git a/code/datums/components/force_move.dm b/code/datums/components/force_move.dm index b8c368186216..ed93dcedf3e6 100644 --- a/code/datums/components/force_move.dm +++ b/code/datums/components/force_move.dm @@ -12,6 +12,7 @@ var/datum/move_loop/loop = SSmove_manager.move_towards(mob_parent, target, delay = 1, timeout = dist) RegisterSignal(mob_parent, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(stop_move)) RegisterSignal(mob_parent, COMSIG_ATOM_PRE_PRESSURE_PUSH, PROC_REF(stop_pressure)) + RegisterSignal(mob_parent, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(slip_crash)) if(spin) RegisterSignal(loop, COMSIG_MOVELOOP_POSTPROCESS, PROC_REF(slip_spin)) RegisterSignal(loop, COMSIG_QDELETING, PROC_REF(loop_ended)) @@ -29,6 +30,23 @@ var/mob/mob_parent = parent mob_parent.spin(1, 1) +/datum/component/force_move/proc/slip_crash(datum/source, result, delay, turf/target_turf, datum/blocked) + SIGNAL_HANDLER + if(!result && ishuman(parent) && istype(blocked, /datum/move_loop/has_target/move_towards)) // Something prevented us from moving into the space. + var/obj/machinery/heavy_weight = (locate(/obj/machinery/vending) in target_turf) + var/datum/move_loop/has_target/move_towards/blocked_move = blocked + if(istype(heavy_weight, /obj/machinery/vending)) // When a stoppable force hits immovable capitalism. + blocked_move.lifetime = -1 + INVOKE_ASYNC(heavy_weight, /obj/machinery/vending/proc/tilt, parent) // We hit the machine so let them hit back. + + else + // We hit a structure and we need to keep going. + var/mob/living/mob_parent = parent + mob_parent.Immobilize(0.8 SECONDS) // Prevent them from throw bending around objects. + // We don't exactly know what stopped us. So throw us at the turf and let physics handle it. + blocked_move.lifetime = -1 + INVOKE_ASYNC(mob_parent, /atom/movable/proc/throw_at, target_turf, 1, 1) + /datum/component/force_move/proc/loop_ended(datum/source) SIGNAL_HANDLER if(QDELETED(src)) diff --git a/code/datums/components/mob_access.dm b/code/datums/components/mob_access.dm new file mode 100644 index 000000000000..04ef6ac9d59e --- /dev/null +++ b/code/datums/components/mob_access.dm @@ -0,0 +1,29 @@ +///element given to mobs that have levels of access +/datum/element/mob_access + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// What can this mob access? + var/list/my_access + +/datum/element/mob_access/Attach(datum/target, list/accesses) + . = ..() + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + for(var/access_path in accesses) + if(!ispath(access_path)) + continue + var/datum/id_trim/job/trim = SSid_access.trim_singletons_by_path[access_path] + if(isnull(trim)) + continue + my_access += trim.access + + RegisterSignal(target, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) + +/datum/element/mob_access/proc/attempt_access(datum/source, obj/door_attempt) + SIGNAL_HANDLER + + return (door_attempt.check_access_list(my_access)) ? ACCESS_ALLOWED : ACCESS_DISALLOWED + +/datum/element/mob_access/Detach(datum/source, ...) + UnregisterSignal(source, COMSIG_MOB_TRIED_ACCESS) + return ..() diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index e752571149b5..6ddd95fc39c1 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -230,6 +230,8 @@ set_command_target(parent, victim) /datum/pet_command/protect_owner/proc/set_attacking_target(atom/source, mob/living/attacker) + SIGNAL_HANDLER + var/mob/living/basic/owner = weak_parent.resolve() if(isnull(owner)) return diff --git a/code/datums/components/regenerative_shield.dm b/code/datums/components/regenerative_shield.dm new file mode 100644 index 000000000000..114dbd7acfbe --- /dev/null +++ b/code/datums/components/regenerative_shield.dm @@ -0,0 +1,91 @@ +#define SHIELD_FILTER "shield filter" + +/// gives the mobs a regenerative shield, it will tank hits for them and then need to recharge for a bit +/datum/component/regenerative_shield + ///number of hits we can tank + var/number_of_hits = 15 + ///the limit of the damage we can tank + var/damage_threshold + ///the overlay of the shield + var/list/shield_overlays = list() + ///how long before the shield can regenerate + var/regeneration_time + +/datum/component/regenerative_shield/Initialize(number_of_hits = 15, damage_threshold = 50, regeneration_time = 2 MINUTES, list/shield_overlays) + if(!isliving(parent)) + return COMPONENT_INCOMPATIBLE + src.number_of_hits = number_of_hits + src.damage_threshold = damage_threshold + src.regeneration_time = regeneration_time + + var/atom/movable/living_parent = parent + for(var/type_path as anything in shield_overlays) + if(!ispath(type_path)) + continue + var/obj/effect/overlay/new_effect = new type_path() + living_parent.vis_contents += new_effect + apply_filter_effects(new_effect) + src.shield_overlays += new_effect + +/datum/component/regenerative_shield/RegisterWithParent() + . = ..() + ADD_TRAIT(parent, TRAIT_REGEN_SHIELD, REF(src)) + RegisterSignal(parent, COMSIG_LIVING_CHECK_BLOCK, PROC_REF(block_attack)) + +/datum/component/regenerative_shield/UnregisterFromParent() + var/atom/movable/living_parent = parent + for(var/obj/effect/overlay as anything in shield_overlays) + living_parent.vis_contents -= overlay + QDEL_LIST(shield_overlays) + UnregisterSignal(parent, COMSIG_LIVING_CHECK_BLOCK) + REMOVE_TRAIT(parent, TRAIT_REGEN_SHIELD, REF(src)) + return ..() + +/datum/component/regenerative_shield/proc/block_attack( + mob/living/source, + atom/hitby, + damage, + attack_text, + attack_type, + armour_penetration, + damage_type, + attack_flag, +) + SIGNAL_HANDLER + + if(damage <= 0 ||damage_type == STAMINA) + return NONE + + if(damage >= damage_threshold || number_of_hits <= 0) + return NONE + + playsound(get_turf(parent), 'sound/items/tap.ogg', 20) + new /obj/effect/temp_visual/guardian/phase/out(get_turf(parent)) + number_of_hits = max(0, number_of_hits - 1) + if(number_of_hits <= 0) + disable_shield() + return SUCCESSFUL_BLOCK + +/datum/component/regenerative_shield/proc/disable_shield() + addtimer(CALLBACK(src, PROC_REF(enable_shield)), regeneration_time) + for(var/obj/effect/my_effect as anything in shield_overlays) + animate(my_effect, alpha = 0, time = 3 SECONDS) + my_effect.remove_filter(SHIELD_FILTER) + playsound(parent, 'sound/vehicles/mecha/mech_shield_drop.ogg', 20) + +/datum/component/regenerative_shield/proc/enable_shield() + number_of_hits = initial(number_of_hits) + for(var/obj/effect/my_effect as anything in shield_overlays) + animate(my_effect, alpha = 255, time = 3 SECONDS) + addtimer(CALLBACK(src, PROC_REF(apply_filter_effects), my_effect), 5 SECONDS) + playsound(parent, 'sound/vehicles/mecha/mech_shield_raise.ogg', 20) + +/datum/component/regenerative_shield/proc/apply_filter_effects(obj/effect/new_effect) + if(isnull(new_effect)) + return + new_effect.add_filter(SHIELD_FILTER, 1, list("type" = "outline", "color" = "#b6e6f3", "alpha" = 0, "size" = 1)) + var/filter = new_effect.get_filter(SHIELD_FILTER) + animate(filter, alpha = 200, time = 0.5 SECONDS, loop = -1) + animate(alpha = 0, time = 0.5 SECONDS) + +#undef SHIELD_FILTER diff --git a/code/datums/components/supermatter_crystal.dm b/code/datums/components/supermatter_crystal.dm index 51298592d8f9..083fcf793def 100644 --- a/code/datums/components/supermatter_crystal.dm +++ b/code/datums/components/supermatter_crystal.dm @@ -154,6 +154,8 @@ return FALSE if(istype(item, /obj/item/toy/crayon/spraycan)) return FALSE + if(istype(item, /obj/item/soap)) + return FALSE if(istype(item, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = item var/clumsy = HAS_TRAIT(user, TRAIT_CLUMSY) diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index 7a6703d86195..4b3d0bdbb5d7 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -10,14 +10,20 @@ /** * The index of the first attach argument to consider for duplicate elements * - * All arguments from this index onwards (1 based) are hashed into the key to determine - * if this is a new unique element or one already exists + * All arguments from this index onwards (1 based, until `argument_hash_end_idx` is reached, if set) + * are hashed into the key to determine if this is a new unique element or one already exists * * Is only used when flags contains [ELEMENT_BESPOKE] * * This is infinity so you must explicitly set this */ var/argument_hash_start_idx = INFINITY + /** + * The index of the last attach argument to consider for duplicate elements + * Only used when `element_flags` contains [ELEMENT_BESPOKE]. + * If not set, it'll copy every argument from `argument_hash_start_idx` onwards as normal + */ + var/argument_hash_end_idx = 0 /// Activates the functionality defined by the element on the given target datum /datum/element/proc/Attach(datum/target) diff --git a/code/datums/elements/attack_zone_randomiser.dm b/code/datums/elements/attack_zone_randomiser.dm new file mode 100644 index 000000000000..35275e11a9bb --- /dev/null +++ b/code/datums/elements/attack_zone_randomiser.dm @@ -0,0 +1,33 @@ +/// Pick a random attack zone before you attack something +/datum/element/attack_zone_randomiser + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + /// List of attack zones you can select, should be a subset of GLOB.all_body_zones + var/list/valid_attack_zones + +/datum/element/attack_zone_randomiser/Attach(datum/target, list/valid_attack_zones = GLOB.all_body_zones) + . = ..() + if (!isliving(target)) + return ELEMENT_INCOMPATIBLE + RegisterSignals(target, list(COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK), PROC_REF(randomise)) + src.valid_attack_zones = valid_attack_zones + +/datum/element/attack_zone_randomiser/Detach(datum/source) + UnregisterSignal(source, list (COMSIG_HOSTILE_PRE_ATTACKINGTARGET, COMSIG_LIVING_UNARMED_ATTACK)) + return ..() + +/// If we're attacking a carbon, pick a random defence zone +/datum/element/attack_zone_randomiser/proc/randomise(mob/living/source, atom/target) + SIGNAL_HANDLER + if (!iscarbon(target)) + return + var/mob/living/living_target = target + var/list/blacklist_zones = GLOB.all_body_zones - valid_attack_zones + var/new_zone = living_target.get_random_valid_zone(blacklisted_parts = blacklist_zones, bypass_warning = TRUE) + if (isnull(new_zone)) + new_zone = BODY_ZONE_CHEST + var/atom/movable/screen/zone_sel/zone_selector = source.hud_used?.zone_select + if (isnull(zone_selector)) + source.zone_selected = new_zone + else + zone_selector.set_selected_zone(new_zone, source, should_log = FALSE) diff --git a/code/datums/elements/basic_eating.dm b/code/datums/elements/basic_eating.dm index b8c990b1bf9d..f082428934d5 100644 --- a/code/datums/elements/basic_eating.dm +++ b/code/datums/elements/basic_eating.dm @@ -73,6 +73,7 @@ finish_eating(eater, target) /datum/element/basic_eating/proc/finish_eating(mob/living/eater, atom/target) + set waitfor = FALSE if(drinking) ////playsound(eater.loc,'sound/items/drink.ogg', rand(10,50), TRUE) // monkestation edit original playsound(eater.loc,get_drink_sound(eater), rand(10,50), TRUE) // monkestation edit: synthesized drink sounds @@ -80,8 +81,9 @@ playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) SEND_SIGNAL(eater, COMSIG_LIVING_ATE, target) SEND_SIGNAL(eater, COMSIG_EMOTION_STORE, null, EMOTION_HAPPY, "I ate [target], I really like [target].") - if (isstack(target)) - var/obj/item/stack/stack = target - stack.use(1) - return - qdel(target) + var/atom/final_target = target + if(isstack(target)) //if stack, only consume 1 + var/obj/item/stack/food_stack = target + final_target = food_stack.split_stack(eater, 1) + eater.log_message("has eaten [target]!", LOG_ATTACK) + qdel(final_target) diff --git a/code/datums/elements/consumable_mob.dm b/code/datums/elements/consumable_mob.dm new file mode 100644 index 000000000000..fafdb8cbcab2 --- /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 || HAS_TRAIT(consumer, TRAIT_PACIFISM)) + 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/elements/food/fried_item.dm b/code/datums/elements/food/fried_item.dm index 0db91b893785..dfb20c1e68fe 100644 --- a/code/datums/elements/food/fried_item.dm +++ b/code/datums/elements/food/fried_item.dm @@ -17,28 +17,27 @@ var/atom/this_food = target switch(fry_time) - if(0 to 15) + if(0 to 15 SECONDS) this_food.add_atom_colour(fried_colors[1], FIXED_COLOUR_PRIORITY) this_food.name = "lightly-fried [this_food.name]" this_food.desc += " It's been lightly fried in a deep fryer." - if(15 to 50) + if(15 SECONDS to 50 SECONDS) this_food.add_atom_colour(fried_colors[2], FIXED_COLOUR_PRIORITY) this_food.name = "fried [this_food.name]" this_food.desc += " It's been fried, increasing its tastiness value by [rand(1, 75)]%." - if(50 to 85) + if(50 SECONDS to 85 SECONDS) this_food.add_atom_colour(fried_colors[3], FIXED_COLOUR_PRIORITY) this_food.name = "deep-fried [this_food.name]" this_food.desc += " Deep-fried to perfection." - if(85 to INFINITY) + if(85 SECONDS to INFINITY) this_food.add_atom_colour(fried_colors[4], FIXED_COLOUR_PRIORITY) this_food.name = "\proper the physical manifestation of the very concept of fried foods" this_food.desc = "A heavily-fried... something. Who can tell anymore?" ADD_TRAIT(this_food, TRAIT_FOOD_FRIED, ELEMENT_TRAIT(type)) - SEND_SIGNAL(this_food, COMSIG_ITEM_FRIED, fry_time) // Already edible items will inherent these parameters // Otherwise, we will become edible. this_food.AddComponent( \ @@ -48,6 +47,7 @@ junkiness = 10, \ foodtypes = FRIED, \ ) + SEND_SIGNAL(this_food, COMSIG_ITEM_FRIED, fry_time) /datum/element/fried_item/Detach(atom/source, ...) for(var/color in fried_colors) diff --git a/code/datums/elements/food/grilled_item.dm b/code/datums/elements/food/grilled_item.dm index f657b969f062..785fc19f4a5a 100644 --- a/code/datums/elements/food/grilled_item.dm +++ b/code/datums/elements/food/grilled_item.dm @@ -30,9 +30,12 @@ if(grill_time > 30) this_food.AddComponent(/datum/component/edible, foodtypes = FRIED) + ADD_TRAIT(this_food, TRAIT_FOOD_BBQ_GRILLED, ELEMENT_TRAIT(type)) + /datum/element/grilled_item/Detach(atom/source, ...) source.name = initial(source.name) source.desc = initial(source.desc) REMOVE_TRAIT(source, TRAIT_FOOD_GRILLED, ELEMENT_TRAIT(type)) qdel(source.GetComponent(/datum/component/edible)) // Don't care if it was initially edible + REMOVE_TRAIT(src, TRAIT_FOOD_BBQ_GRILLED, ELEMENT_TRAIT(type)) return ..() diff --git a/code/datums/elements/pet_bonus.dm b/code/datums/elements/pet_bonus.dm index 7c69927691bc..973cc6b913b6 100644 --- a/code/datums/elements/pet_bonus.dm +++ b/code/datums/elements/pet_bonus.dm @@ -8,6 +8,8 @@ element_flags = ELEMENT_BESPOKE argument_hash_start_idx = 2 + ///string key of the emote to do when pet. + var/emote_name ///optional cute message to send when you pet your pet! var/emote_message ///actual moodlet given, defaults to the pet animal one @@ -19,6 +21,7 @@ return ELEMENT_INCOMPATIBLE src.emote_message = emote_message + src.emote_name = emote_name src.moodlet = moodlet RegisterSignal(target, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) @@ -36,4 +39,6 @@ SEND_SIGNAL(pet, COMSIG_ANIMAL_PET, petter, modifiers) if(emote_message && prob(33)) pet.manual_emote(emote_message) + if(emote_name) + INVOKE_ASYNC(pet, TYPE_PROC_REF(/mob, emote), emote_name) petter.add_mood_event("petting_bonus", moodlet, pet) diff --git a/code/datums/elements/pet_collar.dm b/code/datums/elements/pet_collar.dm new file mode 100644 index 000000000000..f98767629e7e --- /dev/null +++ b/code/datums/elements/pet_collar.dm @@ -0,0 +1,95 @@ +/datum/element/wears_collar + element_flags = ELEMENT_BESPOKE + argument_hash_start_idx = 2 + ///our icon's pathfile + var/collar_icon + ///our collar's icon state + var/collar_icon_state + ///iconstate of our collar while resting + var/collar_resting_icon_state + +/datum/element/wears_collar/Attach(datum/target, collar_icon = 'icons/mob/simple/pets.dmi', collar_resting_icon_state = FALSE, collar_icon_state) + . = ..() + + if(!isliving(target)) + return ELEMENT_INCOMPATIBLE + + src.collar_icon = collar_icon + src.collar_icon_state = collar_icon_state + src.collar_resting_icon_state = collar_resting_icon_state + + RegisterSignal(target, COMSIG_ATOM_ATTACKBY, PROC_REF(attach_collar)) + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_overlays_updated)) + RegisterSignal(target, COMSIG_ATOM_EXITED, PROC_REF(on_content_exit)) + RegisterSignal(target, COMSIG_ATOM_ENTERED, PROC_REF(on_content_enter)) + RegisterSignal(target, COMSIG_LIVING_RESTING, PROC_REF(on_rest)) + RegisterSignal(target, COMSIG_MOB_STATCHANGE, PROC_REF(on_stat_change)) + +/datum/element/wears_collar/Detach(datum/target) + . = ..() + UnregisterSignal(target, list( + COMSIG_ATOM_ATTACKBY, + COMSIG_ATOM_UPDATE_OVERLAYS, + COMSIG_ATOM_EXITED, + COMSIG_ATOM_ENTERED, + COMSIG_LIVING_RESTING, + COMSIG_MOB_STATCHANGE, + )) + +/datum/element/wears_collar/proc/on_stat_change(mob/living/source) + SIGNAL_HANDLER + + if(collar_icon_state) + source.update_icon(UPDATE_OVERLAYS) + +/datum/element/wears_collar/proc/on_content_exit(mob/living/source, atom/moved) + SIGNAL_HANDLER + + if(!istype(moved, /obj/item/clothing/neck/petcollar)) + return + source.fully_replace_character_name(null, source::name) + if(collar_icon_state) + source.update_appearance() + +/datum/element/wears_collar/proc/on_content_enter(mob/living/source, obj/item/clothing/neck/petcollar/new_collar) + SIGNAL_HANDLER + + if(!istype(new_collar) || !new_collar.tagname) + return + + source.fully_replace_character_name(null, "\proper [new_collar.tagname]") + if(collar_icon_state) + source.update_appearance() + +/datum/element/wears_collar/proc/attach_collar(atom/source, atom/movable/attacking_item, atom/user, params) + SIGNAL_HANDLER + + if(!istype(attacking_item, /obj/item/clothing/neck/petcollar)) + return NONE + if(locate(/obj/item/clothing/neck/petcollar) in source) + user.balloon_alert(source, "already wearing a collar!") + return NONE + attacking_item.forceMove(source) + return COMPONENT_NO_AFTERATTACK + +/datum/element/wears_collar/proc/on_overlays_updated(mob/living/source, list/overlays) + SIGNAL_HANDLER + + if(!locate(/obj/item/clothing/neck/petcollar) in source) + return + + var/icon_tag = "" + + if(source.stat == DEAD || HAS_TRAIT(source, TRAIT_FAKEDEATH)) + icon_tag = "_dead" + else if(collar_resting_icon_state && source.resting) + icon_tag = "_rest" + + overlays += mutable_appearance(collar_icon, "[collar_icon_state][icon_tag]collar") + overlays += mutable_appearance(collar_icon, "[collar_icon_state][icon_tag]tag") + + +/datum/element/wears_collar/proc/on_rest(atom/movable/source) + SIGNAL_HANDLER + + source.update_icon(UPDATE_OVERLAYS) diff --git a/code/datums/hud.dm b/code/datums/hud.dm index b7d71cc1760a..610df258ffd7 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -20,6 +20,7 @@ GLOBAL_LIST_INIT(huds, list( DATA_HUD_FAN = new/datum/atom_hud/data/human/fan_hud(), DATA_HUD_PERMIT = new/datum/atom_hud/data/human/permit(), //monkestation edit DATA_HUD_SENSORS = new/datum/atom_hud/data/human/medical/basic/sensors(), //monkestation edit - CYBERNETICS + DATA_HUD_CREW = new/datum/atom_hud/data/human/crew_hud() //Monkestation edit, crew hud )) /datum/atom_hud diff --git a/code/datums/memory/_memory.dm b/code/datums/memory/_memory.dm index 1a61258a877d..439b4c88f579 100644 --- a/code/datums/memory/_memory.dm +++ b/code/datums/memory/_memory.dm @@ -275,8 +275,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, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/cak, /obj/item/food/sausage/american, /obj/item/skub, ) diff --git a/code/datums/quirks/neutral_quirks/vegetarian.dm b/code/datums/quirks/neutral_quirks/vegetarian.dm index 0ade72acafe5..0568e2f1e229 100644 --- a/code/datums/quirks/neutral_quirks/vegetarian.dm +++ b/code/datums/quirks/neutral_quirks/vegetarian.dm @@ -7,17 +7,4 @@ lose_text = span_notice("You feel like eating meat isn't that bad.") medical_record_text = "Patient reports a vegetarian diet." mail_goodies = list(/obj/effect/spawner/random/food_or_drink/salad) - -/datum/quirk/vegetarian/add(client/client_source) - var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) - if(!tongue) - return - tongue.liked_foodtypes &= ~MEAT - tongue.disliked_foodtypes |= MEAT - -/datum/quirk/vegetarian/remove() - var/obj/item/organ/internal/tongue/tongue = quirk_holder.get_organ_slot(ORGAN_SLOT_TONGUE) - if(!tongue) - return - tongue.liked_foodtypes = initial(tongue.liked_foodtypes) - tongue.disliked_foodtypes = initial(tongue.disliked_foodtypes) + mob_trait = TRAIT_VEGETARIAN diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 786d94ef0f9c..7305e30c4a8b 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -152,6 +152,7 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) person.mind.crewfile = crewfile person.mind.lockfile = lockfile + person.crew_hud_set_crew_status() //MONKE, when someone is added to crew, set their crew hud status, to make hud know they're crew. return diff --git a/code/datums/status_effects/debuffs/fire_stacks.dm b/code/datums/status_effects/debuffs/fire_stacks.dm index 81d81deee4af..997528e4b2d7 100644 --- a/code/datums/status_effects/debuffs/fire_stacks.dm +++ b/code/datums/status_effects/debuffs/fire_stacks.dm @@ -17,6 +17,8 @@ var/list/override_types /// For how much firestacks does one our stack count var/stack_modifier = 1 + /// how long have we been ON FIRE? + var/ticks_on_fire = 0 /datum/status_effect/fire_handler/refresh(mob/living/new_owner, new_stacks, forced = FALSE) if(forced) @@ -151,7 +153,12 @@ if(!on_fire) return TRUE - adjust_stacks(owner.fire_stack_decay_rate * seconds_per_tick) + if(HAS_TRAIT(owner, TRAIT_HUSK)) + adjust_stacks(-2 * seconds_per_tick) + if(stacks <= 0) + extinguish() + else + adjust_stacks(owner.fire_stack_decay_rate * seconds_per_tick) if(stacks <= 0) qdel(src) @@ -184,12 +191,31 @@ * */ -/datum/status_effect/fire_handler/fire_stacks/proc/deal_damage(seconds_per_tick, times_fired) +/datum/status_effect/fire_handler/fire_stacks/proc/deal_damage(seconds_per_tick, times_fired, no_protection = FALSE) owner.on_fire_stack(seconds_per_tick, times_fired, src) var/turf/location = get_turf(owner) location.hotspot_expose(700, 25 * seconds_per_tick, TRUE) + var/mob/living/carbon/human/victim = owner + var/thermal_protection = victim.get_thermal_protection() + if(thermal_protection >= FIRE_IMMUNITY_MAX_TEMP_PROTECT && !no_protection) + return + if(thermal_protection >= FIRE_SUIT_MAX_TEMP_PROTECT && !no_protection) + return + + victim.adjust_bodytemperature((stacks KELVIN) * seconds_per_tick) + switch(ticks_on_fire) + if(0 to 3) + victim.apply_damage(0.10 * stacks, BURN) + if(3 to 6) + victim.apply_damage(0.20 * stacks, BURN) + if(6 to 9) + victim.apply_damage(0.30 * stacks, BURN) + if(10 to INFINITY) + victim.apply_damage(0.50 * stacks, BURN) + ticks_on_fire += 1 * seconds_per_tick + /** * Handles mob ignition, should be the only way to set on_fire to TRUE * @@ -228,6 +254,7 @@ for(var/obj/item/equipped in owner.get_equipped_items()) equipped.wash(CLEAN_TYPE_ACID) equipped.extinguish() + ticks_on_fire = 0 /datum/status_effect/fire_handler/fire_stacks/on_remove() if(on_fire) diff --git a/code/datums/wounds/_wounds.dm b/code/datums/wounds/_wounds.dm index 953db9da6305..c1320be4b9ed 100644 --- a/code/datums/wounds/_wounds.dm +++ b/code/datums/wounds/_wounds.dm @@ -514,8 +514,8 @@ /datum/wound/proc/check_grab_treatments(obj/item/I, mob/user) return FALSE -/// Like try_treating() but for unhanded interactions from humans, used by joint dislocations for manual bodypart chiropractice for example. Ignores thick material checks since you can pop an arm into place through a thick suit unlike using sutures -/datum/wound/proc/try_handling(mob/living/carbon/human/user) +/// Like try_treating() but for unhanded interactions, used by joint dislocations for manual bodypart chiropractice for example. Ignores thick material checks since you can pop an arm into place through a thick suit unlike using sutures +/datum/wound/proc/try_handling(mob/living/user) return FALSE /// Someone is using something that might be used for treating the wound on this limb diff --git a/code/datums/wounds/bones.dm b/code/datums/wounds/bones.dm index f0cd695cd513..9c899cf142fb 100644 --- a/code/datums/wounds/bones.dm +++ b/code/datums/wounds/bones.dm @@ -361,8 +361,10 @@ victim.visible_message(span_danger("[victim]'s dislocated [limb.plaintext_zone] pops back into place!"), span_userdanger("Your dislocated [limb.plaintext_zone] pops back into place! Ow!")) remove_wound() -/datum/wound/blunt/bone/moderate/try_handling(mob/living/carbon/human/user) - if(user.pulling != victim || user.zone_selected != limb.body_zone) +/datum/wound/blunt/bone/moderate/try_handling(mob/living/user) + if(user.usable_hands <= 0 || user.pulling != victim) + return FALSE + if(!isnull(user.hud_used?.zone_select) && user.zone_selected != limb.body_zone) return FALSE if(user.grab_state == GRAB_PASSIVE) diff --git a/code/datums/wounds/slash.dm b/code/datums/wounds/slash.dm index ea2145c2db21..1587b136f263 100644 --- a/code/datums/wounds/slash.dm +++ b/code/datums/wounds/slash.dm @@ -196,19 +196,25 @@ else if(istype(I, /obj/item/stack/medical/suture)) return suture(I, user) -/datum/wound/slash/flesh/try_handling(mob/living/carbon/human/user) - if(user.pulling != victim || user.zone_selected != limb.body_zone || !victim.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) +/datum/wound/slash/flesh/try_handling(mob/living/user) + if(user.pulling != victim || !HAS_TRAIT(user, TRAIT_WOUND_LICKER) || !victim.try_inject(user, injection_flags = INJECT_TRY_SHOW_ERROR_MESSAGE)) return FALSE + if(!isnull(user.hud_used?.zone_select) && user.zone_selected != limb.body_zone) + return FALSE + if(DOING_INTERACTION_WITH_TARGET(user, victim)) to_chat(user, span_warning("You're already interacting with [victim]!")) return - if(user.is_mouth_covered()) - to_chat(user, span_warning("Your mouth is covered, you can't lick [victim]'s wounds!")) - return - if(!user.get_organ_slot(ORGAN_SLOT_TONGUE)) - to_chat(user, span_warning("You can't lick wounds without a tongue!")) // f in chat - return - + if(iscarbon(user)) + var/mob/living/carbon/carbon_user = user + if(carbon_user.is_mouth_covered()) + to_chat(user, span_warning("Your mouth is covered, you can't lick [victim]'s wounds!")) + return + if(!carbon_user.get_organ_slot(ORGAN_SLOT_TONGUE)) + to_chat(user, span_warning("You can't lick wounds without a tongue!")) // f in chat + return + + lick_wounds(user) return TRUE /// if a felinid is licking this cut to reduce bleeding diff --git a/code/game/area/areas/station.dm b/code/game/area/areas/station.dm index 295bad4dbe55..b0254b6d028f 100644 --- a/code/game/area/areas/station.dm +++ b/code/game/area/areas/station.dm @@ -866,6 +866,11 @@ icon_state = "tcom_storage" area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED +/area/station/engineering/shipbreaker_hut + name = "Shipbreaker Hut" + icon_state = "engine_break" + area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED + //Engineering - Construction /area/station/construction diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 24be25cbc784..7a6fd9d7a12e 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -108,6 +108,14 @@ /// Will not automatically apply to the turf below you, you need to apply /datum/element/block_explosives in conjunction with this var/explosion_block = 0 + // Access levels, used in modules\jobs\access.dm + /// List of accesses needed to use this object: The user must possess all accesses in this list in order to use the object. + /// Example: If req_access = list(ACCESS_ENGINE, ACCESS_CE)- then the user must have both ACCESS_ENGINE and ACCESS_CE in order to use the object. + var/list/req_access + /// List of accesses needed to use this object: The user must possess at least one access in this list in order to use the object. + /// Example: If req_one_access = list(ACCESS_ENGINE, ACCESS_CE)- then the user must have either ACCESS_ENGINE or ACCESS_CE in order to use the object. + var/list/req_one_access + ///can we grab this object? var/cant_grab = FALSE @@ -330,18 +338,15 @@ overlays.Insert(1, emissive_block) return overlays -/atom/movable/proc/onZImpact(turf/impacted_turf, levels, message = TRUE) +/atom/movable/proc/onZImpact(turf/impacted_turf, levels, impact_flags = NONE) SHOULD_CALL_PARENT(TRUE) - if(message) - visible_message(span_danger("[src] crashes into [impacted_turf]!")) - var/atom/highest = impacted_turf - for(var/atom/hurt_atom as anything in impacted_turf.contents) - if(!hurt_atom.density) - continue - if(isobj(hurt_atom) || ismob(hurt_atom)) - if(hurt_atom.layer > highest.layer) - highest = hurt_atom - INVOKE_ASYNC(src, PROC_REF(SpinAnimation), 5, 2) + if(!(impact_flags & ZIMPACT_NO_MESSAGE)) + visible_message( + span_danger("[src] crashes into [impacted_turf]!"), + span_userdanger("You crash into [impacted_turf]!"), + ) + if(!(impact_flags & ZIMPACT_NO_SPIN)) + INVOKE_ASYNC(src, PROC_REF(SpinAnimation), 5, 2) SEND_SIGNAL(src, COMSIG_ATOM_ON_Z_IMPACT, impacted_turf, levels) return TRUE diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index e9c83f11ad6a..63e180ddbf6e 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -337,13 +337,16 @@ Security HUDs! Basic mode shows only the job. var/image/holder = hud_list[WANTED_HUD] holder.pixel_y = get_cached_height() - world.icon_size var/perp_name = get_face_name(get_id_name("")) - + + crew_hud_set_crew_status() + if(!perp_name || !GLOB.manifest) holder.icon_state = null set_hud_image_inactive(WANTED_HUD) return var/datum/record/crew/target = find_record(perp_name) + if(!target || target.wanted_status == WANTED_NONE) holder.icon_state = null set_hud_image_inactive(WANTED_HUD) @@ -571,3 +574,31 @@ Diagnostic HUDs! return dimensions[CACHED_HEIGHT_INDEX] #undef CACHED_WIDTH_INDEX #undef CACHED_HEIGHT_INDEX + +/*********************************************** +MONKE, crew hud for silicon. +************************************************/ + +/datum/atom_hud/data/human/crew_hud + hud_icons = list(CREW_HUD) + +/mob/living/carbon/human/proc/crew_hud_set_crew_status() + var/image/holder = hud_list[CREW_HUD] + holder.pixel_y = get_cached_height() - world.icon_size + var/crew_name = get_face_name(get_id_name("")) + + if(!crew_name || !GLOB.manifest || istype(wear_id?.GetID(), /obj/item/card/id/advanced/chameleon)) + holder.icon_state = null + set_hud_image_inactive(CREW_HUD) + return + + var/datum/record/crew/target = find_record(crew_name) + + if(!target && !(crew_name == "Unknown")) + holder.icon_state = "hudnotcrew" + set_hud_image_active(CREW_HUD) + return + else + holder.icon_state = null + set_hud_image_inactive(CREW_HUD) + return diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 43d54fb91851..546633b1b73a 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -44,6 +44,7 @@ . += create_table_notices(list( "name", "job", + "is_robot", //MONKESTATION EDIT ADDITION - Displaying robotic species Icon "life_status", "suffocation", "toxin", @@ -64,6 +65,7 @@ var/list/entry = list() entry["name"] = player_record["name"] entry["job"] = player_record["assignment"] + entry["is_robot"] = player_record["is_robot"] //MONKESTATION EDIT ADDITION - Displaying robotic species Icon entry["life_status"] = player_record["life_status"] entry["suffocation"] = player_record["oxydam"] entry["toxin"] = player_record["toxdam"] @@ -108,11 +110,11 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) JOB_SECURITY_ASSISTANT = 18, // monkestation edit: add security assistants JOB_BRIG_PHYSICIAN = 19, // monkestation edit: add brig physician // 20-29: Medbay - JOB_CHIEF_MEDICAL_OFFICER = 21, - JOB_CHEMIST = 22, - JOB_VIROLOGIST = 23, - JOB_MEDICAL_DOCTOR = 24, - JOB_PARAMEDIC = 25, + JOB_CHIEF_MEDICAL_OFFICER = 20, + JOB_CHEMIST = 21, + JOB_VIROLOGIST = 22, + JOB_MEDICAL_DOCTOR = 23, + JOB_PARAMEDIC = 24, // 30-39: Science JOB_RESEARCH_DIRECTOR = 30, JOB_SCIENTIST = 31, @@ -169,7 +171,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) /datum/crewmonitor/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if (!ui) - ui = new(user, src, "CrewConsole") + ui = new(user, src, "CrewConsoleNova") // MONKESTATION EDIT CHANGE - ORIGINAL: ui = new(user, src, "CrewConsole") ui.open() /datum/crewmonitor/proc/show(mob/M, source) @@ -193,9 +195,14 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) /datum/crewmonitor/proc/update_data(z) if(data_by_z["[z]"] && last_update["[z]"] && world.time <= last_update["[z]"] + SENSORS_UPDATE_PERIOD) return data_by_z["[z]"] + // MONKESTATION EDIT START + var/nt_net = get_ntnet_wireless_status(z) + // MONKESTATION EDIT END var/list/results = list() for(var/tracked_mob in GLOB.suit_sensors_list | GLOB.nanite_sensors_list) + // MONKESTATION EDIT START + /* original - modified and moved into get_tracking_level if(!tracked_mob) stack_trace("Null entry in suit sensors or nanite sensors list.") continue @@ -239,6 +246,12 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) continue sensor_mode = uniform.sensor_mode + */ + var/sensor_mode = get_tracking_level(tracked_mob, z, nt_net) + if (sensor_mode == SENSOR_OFF) + continue + var/mob/living/tracked_living_mob = tracked_mob + // MONKESTATION EDIT END // The entry for this human var/list/entry = list( @@ -256,6 +269,11 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) if (jobs[trim_assignment] != null) entry["ijob"] = jobs[trim_assignment] + // MONKESTATION EDIT ADDITION START - Checking for robotic race + if (isipc(tracked_living_mob)) + entry["is_robot"] = TRUE + // MONKESTATION EDIT ADDITION END + // Current status if (sensor_mode >= SENSOR_LIVING) entry["life_status"] = tracked_living_mob.stat diff --git a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm index cd1dbf5c6748..05b87d7d4d6d 100644 --- a/code/game/machinery/computer/orders/order_items/mining/order_toys.dm +++ b/code/game/machinery/computer/orders/order_items/mining/order_toys.dm @@ -21,6 +21,14 @@ item_path = /obj/item/mine_bot_upgrade/health cost_per_order = 400 +/datum/orderable_item/toys_drones/drone_shield + item_path = /obj/item/mine_bot_upgrade/regnerative_shield + cost_per_order = 500 + +/datum/orderable_item/toys_drones/drone_shield + item_path = /obj/item/minebot_remote_control + cost_per_order = 500 + /datum/orderable_item/toys_drones/drone_pka item_path = /obj/item/borg/upgrade/modkit/cooldown/minebot cost_per_order = 600 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 b078b5c76edf..235986cbd0dd 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/circuitboards/machines/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm index ebdbc0a8e086..7055b3b75b71 100644 --- a/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machines/machine_circuitboards.dm @@ -1253,6 +1253,14 @@ /datum/stock_part/manipulator = 1) needs_anchored = FALSE +/obj/item/circuitboard/machine/shipbreaker + name = "Shipbreaking Recycler" + greyscale_colors = CIRCUIT_COLOR_ENGINEERING + build_path = /obj/machinery/shipbreaker + req_components = list( + /datum/stock_part/manipulator = 1) + needs_anchored = FALSE + /obj/item/circuitboard/machine/seed_extractor name = "Seed Extractor" greyscale_colors = CIRCUIT_COLOR_SERVICE diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index ee310f410d7f..900a96e77231 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -154,17 +154,6 @@ else H.visible_message(span_notice("[H] stares at the light."), span_warning("You stare at the light...")) - //cats! - for(var/mob/living/simple_animal/pet/cat/C in view(1,targloc)) - if(prob(effectchance * diode.rating)) - if(C.resting) - C.set_resting(FALSE, instant = TRUE) - C.visible_message(span_notice("[C] pounces on the light!"),span_warning("LIGHT!")) - C.Move(targloc) - C.Immobilize(1 SECONDS) - else - C.visible_message(span_notice("[C] looks uninterested in your games."),span_warning("You spot [user] shining [src] at you. How insulting!")) - //laser pointer image icon_state = "pointer_[pointer_icon_state]" var/image/I = image('icons/obj/weapons/guns/projectiles.dmi',targloc,pointer_icon_state,10) diff --git a/code/game/objects/items/food/meatdish.dm b/code/game/objects/items/food/meatdish.dm index 7f60ff93e7d7..05c0c79af084 100644 --- a/code/game/objects/items/food/meatdish.dm +++ b/code/game/objects/items/food/meatdish.dm @@ -67,14 +67,20 @@ /obj/item/food/fishmeat/gunner_jellyfish name = "filleted gunner jellyfish" - desc = "A gunner jellyfish with the stingers removed. Mildly hallucinogenic." + desc = "A gunner jellyfish with the stingers removed. Mildly hallucinogenic when raw." icon = 'icons/obj/food/lizard.dmi' icon_state = "jellyfish_fillet" food_reagents = list( - /datum/reagent/consumable/nutriment/protein = 4, - /datum/reagent/toxin/mindbreaker = 2, + /datum/reagent/consumable/nutriment/protein = 4, //The halluginogen comes from the fish trait. ) +///Premade gunner jellyfish fillets from supply orders. Contains the halluginogen that'd be normally from the fish trait. +/obj/item/food/fishmeat/gunner_jellyfish/supply + +/obj/item/food/fishmeat/gunner_jellyfish/supply/Initialize(mapload) + food_reagents[/datum/reagent/toxin/mindbreaker] = 2 + return ..() + /obj/item/food/fishmeat/armorfish name = "cleaned armorfish" desc = "An armorfish with its guts and shell removed, ready for use in cooking." diff --git a/code/game/objects/items/grenades/spawnergrenade.dm b/code/game/objects/items/grenades/spawnergrenade.dm index 616673f72a93..3cc92acf7c24 100644 --- a/code/game/objects/items/grenades/spawnergrenade.dm +++ b/code/game/objects/items/grenades/spawnergrenade.dm @@ -75,11 +75,11 @@ /obj/item/grenade/spawnergrenade/cat name = "Catnade" desc = "You can hear faint meowing and the sounds of claws on metal coming from within." - spawner_type = list(/mob/living/simple_animal/hostile/feral, /mob/living/simple_animal/hostile/feraltabby) + spawner_type = list(/mob/living/basic/pet/cat/feral, /mob/living/basic/pet/cat/feraltabby) deliveryamt = 5 /obj/item/grenade/spawnergrenade/cat/syndicate name = "Syndicatnade" desc = "You can hear aggressive meowing and the sounds of sharpened claws on metal coming from within." - spawner_type = /mob/living/simple_animal/hostile/syndicat + spawner_type = /mob/living/basic/pet/cat/syndicat deliveryamt = 3 diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm index e17e1af4fc55..feffa7c06200 100644 --- a/code/game/objects/items/melee/baton.dm +++ b/code/game/objects/items/melee/baton.dm @@ -423,10 +423,10 @@ armor_type = /datum/armor/baton_security throwforce = 7 force_say_chance = 50 - stamina_damage = 145 + stamina_damage = 100 //monke edit knockdown_time = 5 SECONDS clumsy_knockdown_time = 15 SECONDS - cooldown = 1 SECONDS + cooldown = 1.5 SECONDS //monke edit on_stun_sound = 'sound/weapons/egloves.ogg' on_stun_volume = 50 active = FALSE diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 32bb9ef266a4..3370a2bc4d9f 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -317,6 +317,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/items/storage/boxes/food_boxes.dm b/code/game/objects/items/storage/boxes/food_boxes.dm index c3dab8f89dde..b64d2b18f332 100644 --- a/code/game/objects/items/storage/boxes/food_boxes.dm +++ b/code/game/objects/items/storage/boxes/food_boxes.dm @@ -294,7 +294,7 @@ new /obj/item/food/fishmeat/armorfish(src) new /obj/item/food/fishmeat/carp(src) new /obj/item/food/fishmeat/moonfish(src) - new /obj/item/food/fishmeat/gunner_jellyfish(src) + new /obj/item/food/fishmeat/gunner_jellyfish/supply(src) /obj/item/storage/box/ingredients/salads theme_name = "salads" diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 09669efc0acd..c6ec28673641 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -30,14 +30,6 @@ ///If set to true, we can reskin this item as much as we want. var/infinite_reskin = FALSE - // Access levels, used in modules\jobs\access.dm - /// List of accesses needed to use this object: The user must possess all accesses in this list in order to use the object. - /// Example: If req_access = list(ACCESS_ENGINE, ACCESS_CE)- then the user must have both ACCESS_ENGINE and ACCESS_CE in order to use the object. - var/list/req_access - /// List of accesses needed to use this object: The user must possess at least one access in this list in order to use the object. - /// Example: If req_one_access = list(ACCESS_ENGINE, ACCESS_CE)- then the user must have either ACCESS_ENGINE or ACCESS_CE in order to use the object. - var/list/req_one_access - /// Custom fire overlay icon, will just use the default overlay if this is null var/custom_fire_overlay /// Particles this obj uses when burning, if any diff --git a/code/game/objects/structures/cat_house.dm b/code/game/objects/structures/cat_house.dm new file mode 100644 index 000000000000..bfaa464ff6d0 --- /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/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 44db9efb72e2..f722fbd87ee6 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -16,9 +16,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) . = ..() if(building) opened = TRUE - icon_state = "extinguisher_empty" else stored_extinguisher = new /obj/item/extinguisher(src) + update_appearance(UPDATE_ICON) register_context() /obj/structure/extinguisher_cabinet/add_context(atom/source, list/context, obj/item/held_item, mob/user) @@ -63,7 +63,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) /obj/structure/extinguisher_cabinet/handle_atom_del(atom/A) if(A == stored_extinguisher) stored_extinguisher = null - update_appearance() + update_appearance(UPDATE_ICON) /obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, params) if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) @@ -106,7 +106,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) if(!opened) opened = 1 playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) - update_appearance() + update_appearance(UPDATE_ICON) else toggle_cabinet(user) @@ -124,7 +124,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) stored_extinguisher = null opened = TRUE playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) - update_appearance() + update_appearance(UPDATE_ICON) return toggle_cabinet(user) @@ -141,16 +141,19 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) update_appearance() /obj/structure/extinguisher_cabinet/update_icon_state() + icon_state = "extinguisher" + if(isnull(stored_extinguisher)) + icon_state += "" + else if(istype(stored_extinguisher, /obj/item/extinguisher/mini)) + icon_state += "_mini" + else if(istype(stored_extinguisher, /obj/item/extinguisher/advanced)) + icon_state += "_advanced" + else if(istype(stored_extinguisher, /obj/item/extinguisher/crafted)) + icon_state += "_crafted" + else if(istype(stored_extinguisher, /obj/item/extinguisher)) + icon_state += "_default" if(!opened) - icon_state = "extinguisher_closed" - return ..() - if(!stored_extinguisher) - icon_state = "extinguisher_empty" - return ..() - if(istype(stored_extinguisher, /obj/item/extinguisher/mini)) - icon_state = "extinguisher_mini" - return ..() - icon_state = "extinguisher_full" + icon_state += "_closed" return ..() /obj/structure/extinguisher_cabinet/atom_break(damage_flag) @@ -161,7 +164,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet, 29) if(stored_extinguisher) stored_extinguisher.forceMove(loc) stored_extinguisher = null - update_appearance() + update_appearance(UPDATE_ICON) /obj/structure/extinguisher_cabinet/deconstruct(disassembled = TRUE) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index da3c3635ed97..3a5feaa58fed 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -302,9 +302,15 @@ if(state != GIRDER_DISPLACED) return state = GIRDER_DISASSEMBLED - var/obj/item/stack/sheet/iron/M = new (loc, 2) - if (!QDELETED(M)) - M.add_fingerprint(user) + var/area/shipbreak/A = get_area(src) + if(istype(A)) //shipbreaking + var/obj/item/stack/scrap/framing/M = new(loc, 1) + if (!QDELETED(M)) + M.add_fingerprint(user) + else + var/obj/item/stack/sheet/iron/M = new (loc, 2) + if (!QDELETED(M)) + M.add_fingerprint(user) qdel(src) return TRUE diff --git a/code/game/sound.dm b/code/game/sound.dm index e34add121d5d..eda822432f5d 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -536,6 +536,7 @@ GLOBAL_LIST_EMPTY(cached_mixer_channels) soundin = pick('sound/effects/treechop1.ogg', 'sound/effects/treechop2.ogg', 'sound/effects/treechop3.ogg') if(SFX_ROCK_TAP) soundin = pick('sound/effects/rocktap1.ogg', 'sound/effects/rocktap2.ogg', 'sound/effects/rocktap3.ogg') + // monkestation start: more sound effects if(SFX_BUTTON_CLICK) soundin = 'monkestation/sound/effects/hl2/button-click.ogg' @@ -544,4 +545,5 @@ GLOBAL_LIST_EMPTY(cached_mixer_channels) if(SFX_LIGHTSWITCH) soundin = 'monkestation/sound/effects/hl2/lightswitch.ogg' // monkestation end + return soundin diff --git a/code/game/turfs/baseturfs.dm b/code/game/turfs/baseturfs.dm index 72c2829514dc..4ba935411cf8 100644 --- a/code/game/turfs/baseturfs.dm +++ b/code/game/turfs/baseturfs.dm @@ -20,6 +20,16 @@ return ChangeTurf(baseturfs, baseturfs, flags) // The bottom baseturf will never go away +/// Places a turf at the top of the stack +/turf/proc/place_on_top(turf/added_layer, flags) + var/list/turf/new_baseturfs = list() + + new_baseturfs.Add(baseturfs) + if(isopenturf(src)) + new_baseturfs.Add(type) + + return ChangeTurf(added_layer, new_baseturfs, flags) + // Take the input as baseturfs and put it underneath the current baseturfs // If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's // If both or just new_baseturfs is provided they will be inserted below the existing baseturfs diff --git a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm index b8a8f39fbc37..164fe3fe181b 100644 --- a/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm +++ b/code/modules/antagonists/heretic/magic/eldritch_shapeshift.dm @@ -14,8 +14,9 @@ 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, + /mob/living/basic/pet/cat, ) diff --git a/code/modules/antagonists/traitor/objectives/kill_pet.dm b/code/modules/antagonists/traitor/objectives/kill_pet.dm index 01ab042f11b0..21bf06eb3868 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/assembly/flash.dm b/code/modules/assembly/flash.dm index e80f45ae8dee..08640800de62 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -207,8 +207,8 @@ if(iscarbon(victim)) var/mob/living/carbon/carbon_victim = victim - if(carbon_victim.get_eye_protection() < FLASH_PROTECTION_SENSITIVE) // If we have really bad flash sensitivity, usually due to really sensitive eyes, we get flashed from all directions - return DEVIATION_NONE + if(carbon_victim.get_eye_protection() < FLASH_PROTECTION_SENSITIVE || carbon_victim.get_organ_by_type(/obj/item/organ/internal/eyes/apid)) // If we have really bad flash sensitivity, usually due to really sensitive eyes, we get flashed from all directions + return DEVIATION_NONE // MONKESTATION ADDITION APID EYES // Are they on the same tile? We'll return partial deviation. This may be someone flashing while lying down // or flashing someone they're stood on the same turf as, or a borg flashing someone buckled to them. diff --git a/code/modules/cargo/packs/livestock.dm b/code/modules/cargo/packs/livestock.dm index af6924a53b32..60e83bd18c73 100644 --- a/code/modules/cargo/packs/livestock.dm +++ b/code/modules/cargo/packs/livestock.dm @@ -32,18 +32,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/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index f5e75b2855df..9a354f444f5c 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -37,7 +37,7 @@ /datum/supply_pack/security/forensics name = "Forensics Crate" desc = "Stay hot on the criminal's heels with Nanotrasen's Detective Essentials™. \ - Contains a forensics scanner, six evidence bags, camera, tape recorder, white crayon, \ + Contains a forensics scanner, six evidence bags, camera, special board for evidences, tape recorder, stick of chalk, \ and of course, a fedora." cost = CARGO_CRATE_VALUE * 2.5 access_view = ACCESS_MORGUE diff --git a/code/modules/experisci/experiment/experiments.dm b/code/modules/experisci/experiment/experiments.dm index 86a84c19428d..0aa4f258ed24 100644 --- a/code/modules/experisci/experiment/experiments.dm +++ b/code/modules/experisci/experiment/experiments.dm @@ -45,7 +45,7 @@ /mob/living/basic/cow, /mob/living/basic/pet/dog/corgi, /mob/living/basic/snake, - /mob/living/simple_animal/pet/cat, + /mob/living/basic/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 de7f94a3f8d4..4de165c0616e 100644 --- a/code/modules/explorer_drone/loot.dm +++ b/code/modules/explorer_drone/loot.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_INIT(adventure_loot_generator_index,generate_generator_index()) /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, + /mob/living/basic/pet/cat/space, ) /datum/adventure_loot_generator/pet/generate() diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index e6a2aa8a9d0a..99d9878dbea0 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -435,10 +435,6 @@ if(health <= 0) set_status(FISH_DEAD) - -//Fish breeding stops if fish count exceeds this. -#define AQUARIUM_MAX_BREEDING_POPULATION 20 - /obj/item/fish/proc/ready_to_reproduce(being_targeted = FALSE) var/obj/structure/aquarium/aquarium = loc if(!istype(aquarium)) diff --git a/code/modules/fishing/fishing_minigame.dm b/code/modules/fishing/fishing_minigame.dm index 01d69da2229a..0dcb967a62d2 100644 --- a/code/modules/fishing/fishing_minigame.dm +++ b/code/modules/fishing/fishing_minigame.dm @@ -5,8 +5,6 @@ // UI minigame phase #define MINIGAME_PHASE 3 -/// The height of the minigame slider. Not in pixels, but minigame units. -#define FISHING_MINIGAME_AREA 1000 /// Any lower than this, and the target position of the fish is considered null #define FISH_TARGET_MIN_DISTANCE 6 /// The friction applied to fish jumps, so that it decelerates over time 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 e78efd293ffc..c05446d35218 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 b70b3b9114c1..dfd1b3482bad 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 08e07ae7c943..93504f374346 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/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index db7fff237cdd..8b64338093b6 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -35,6 +35,7 @@ id_trim = /datum/id_trim/job/shaft_miner uniform = /obj/item/clothing/under/rank/cargo/miner/lavaland + skillchips = list(/obj/item/skillchip/job/miner) backpack_contents = list( /obj/item/flashlight/seclite = 1, /obj/item/knife/combat/survival = 1, diff --git a/code/modules/jobs/job_types/station_engineer.dm b/code/modules/jobs/job_types/station_engineer.dm index f636058677ec..350040e71892 100644 --- a/code/modules/jobs/job_types/station_engineer.dm +++ b/code/modules/jobs/job_types/station_engineer.dm @@ -4,7 +4,7 @@ and wiring damage." department_head = list(JOB_CHIEF_ENGINEER) faction = FACTION_STATION - total_positions = 5 + total_positions = 6 spawn_positions = 5 supervisors = SUPERVISOR_CE exp_requirements = 60 diff --git a/code/modules/library/skill_learning/job_skillchips/miner.dm b/code/modules/library/skill_learning/job_skillchips/miner.dm new file mode 100644 index 000000000000..2970e5b6085f --- /dev/null +++ b/code/modules/library/skill_learning/job_skillchips/miner.dm @@ -0,0 +1,8 @@ +/obj/item/skillchip/job/miner + name = "TUNN3L_R4T skillchip" + desc = "Gain control of minebots." + auto_traits = list(TRAIT_ROCK_STONER) + skill_name = "Battlebot enthusiast" + skill_description = "Lead minebots into war." + activate_message = span_notice("A newfound obsession with battlebots fosters within you.") + deactivate_message = span_notice("You finally get over your battlebots phase, now go get a job.") diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 849468a93b4a..8bebfd4241b9 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -37,7 +37,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/health_scan = FALSE //Are health scans currently enabled? var/chem_scan = FALSE //Are chem scans currently enabled? var/gas_scan = FALSE //Are gas scans currently enabled? - var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED) //list of data HUDs shown to ghosts. + var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED, DATA_HUD_CREW) //list of data HUDs shown to ghosts. var/ghost_orbit = GHOST_ORBIT_CIRCLE //These variables store hair data if the ghost originates from a species with head and/or facial hair. diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 720908d3be1c..318311ee7c43 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -163,3 +163,24 @@ #undef BEYBLADE_DIZZINESS_DURATION #undef BEYBLADE_CONFUSION_INCREMENT #undef BEYBLADE_CONFUSION_LIMIT + +/datum/emote/jump + key = "jump" + key_third_person = "jumps" + message = "jumps!" + // Allows ghosts to jump + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + +/datum/emote/jump/proc/jump_animation(mob/user) + var/original_transform = user.transform + animate(user, transform = user.transform.Translate(0, 4), time = 0.1 SECONDS, flags = ANIMATION_PARALLEL) + animate(transform = original_transform, time = 0.1 SECONDS) + +/datum/emote/jump/get_sound(mob/user) + return 'sound/items/thudswoosh.ogg' + +// Avoids playing sounds if we're a ghost +/datum/emote/jump/should_play_sound(mob/user, intentional) + if(isliving(user)) + return ..() + return FALSE diff --git a/code/modules/mob/living/basic/basic.dm b/code/modules/mob/living/basic/basic.dm index dbed737bdf4b..3879de5cebe8 100644 --- a/code/modules/mob/living/basic/basic.dm +++ b/code/modules/mob/living/basic/basic.dm @@ -91,18 +91,23 @@ ///This damage is taken when atmos doesn't fit all the requirements above. Set to 0 to avoid adding the atmos_requirements element. var/unsuitable_atmos_damage = 1 + ///Minimal body temperature without receiving damage + var/minimum_survivable_temperature = NPC_DEFAULT_MIN_TEMP + ///Maximal body temperature without receiving damage + var/maximum_survivable_temperature = NPC_DEFAULT_MAX_TEMP + ///This damage is taken when the body temp is too cold. Set both this and unsuitable_heat_damage to 0 to avoid adding the body_temp_sensitive element. + var/unsuitable_cold_damage = 1 + ///This damage is taken when the body temp is too hot. Set both this and unsuitable_cold_damage to 0 to avoid adding the body_temp_sensitive element. + var/unsuitable_heat_damage = 1 + + bodytemp_cold_damage_limit = NPC_DEFAULT_MIN_TEMP + bodytemp_heat_damage_limit = NPC_DEFAULT_MAX_TEMP + //MONKESTATION EDIT START /// List of weather immunity traits that are then added on Initialize(), see traits.dm. var/list/weather_immunities //MONKESTATION EDIT END - bodytemp_cold_damage_limit = NPC_DEFAULT_MIN_TEMP - bodytemp_heat_damage_limit = NPC_DEFAULT_MAX_TEMP - ///This damage is taken when the body temp is too cold. Set both this and unsuitable_heat_damage to 0 to avoid adding the basic_body_temp_sensitive element. - var/unsuitable_cold_damage = 1 - ///This damage is taken when the body temp is too hot. Set both this and unsuitable_cold_damage to 0 to avoid adding the basic_body_temp_sensitive element. - var/unsuitable_heat_damage = 1 - /mob/living/basic/Initialize(mapload) . = ..() @@ -128,6 +133,7 @@ speak_emote = string_list(speak_emote) apply_atmos_requirements() + apply_target_randomisation() /// Ensures this mob can take atmospheric damage if it's supposed to /mob/living/basic/proc/apply_atmos_requirements() @@ -168,6 +174,11 @@ if(!.) clear_alert(ALERT_TEMPERATURE) +/mob/living/basic/proc/apply_target_randomisation() + if (basic_mob_flags & PRECISE_ATTACK_ZONES) + return + AddElement(/datum/element/attack_zone_randomiser) + /mob/living/basic/Life(seconds_per_tick = SSMOBS_DT, times_fired) . = ..() if(staminaloss > 0) @@ -237,14 +248,20 @@ . += span_deadsay("Upon closer examination, [p_they()] appear[p_s()] to be [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "asleep" : "dead"].") /mob/living/basic/proc/melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) + if(!early_melee_attack(target, modifiers, ignore_cooldown)) + return FALSE + var/result = target.attack_basic_mob(src, modifiers) + SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result) + return result + +/mob/living/basic/proc/early_melee_attack(atom/target, list/modifiers, ignore_cooldown = FALSE) face_atom(target) - if (!ignore_cooldown) + if(!ignore_cooldown) changeNext_move(melee_attack_cooldown) if(SEND_SIGNAL(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, target, Adjacent(target), modifiers) & COMPONENT_HOSTILE_NO_ATTACK) return FALSE //but more importantly return before attack_animal called - var/result = target.attack_basic_mob(src, modifiers) - SEND_SIGNAL(src, COMSIG_HOSTILE_POST_ATTACKINGTARGET, target, result) - return result + return TRUE + /mob/living/basic/resolve_unarmed_attack(atom/attack_target, list/modifiers) //monkestation edit diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index d07d4e13f71d..d98f6e813407 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -99,11 +99,13 @@ action_cooldown = 45 SECONDS /datum/ai_behavior/manage_unreachable_list/perform(seconds_per_tick, datum/ai_controller/controller, list_key) - . = ..() if(!isnull(controller.blackboard[list_key])) controller.clear_blackboard_key(list_key) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED +/datum/ai_behavior/manage_unreachable_list/finish_action(datum/ai_controller/controller, succeeded) + . = ..() + controller.set_blackboard_key(BB_CLEAR_LIST_READY, controller.blackboard[BB_UNREACHABLE_LIST_COOLDOWN] + world.time) /datum/ai_planning_subtree/find_patrol_beacon @@ -126,7 +128,6 @@ /datum/ai_behavior/find_first_beacon_target /datum/ai_behavior/find_first_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/closest_distance = INFINITY var/mob/living/basic/bot/bot_pawn = controller.pawn var/atom/final_target @@ -141,10 +142,9 @@ final_target = beacon if(isnull(final_target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_BEACON_TARGET, final_target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_next_beacon_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) . = ..() @@ -152,8 +152,7 @@ var/atom/final_target var/obj/machinery/navbeacon/prev_beacon = controller.blackboard[BB_PREVIOUS_BEACON_TARGET] if(QDELETED(prev_beacon)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/obj/machinery/navbeacon/beacon as anything in GLOB.navbeacons["[bot_pawn.z]"]) if(beacon.location == prev_beacon.codes[NAVBEACON_PATROL_NEXT]) @@ -162,10 +161,10 @@ if(isnull(final_target)) controller.clear_blackboard_key(BB_PREVIOUS_BEACON_TARGET) - finish_action(controller, FALSE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(BB_BEACON_TARGET, final_target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/travel_towards/beacon @@ -227,14 +226,11 @@ /datum/ai_behavior/salute_authority /datum/ai_behavior/salute_authority/perform(seconds_per_tick, datum/ai_controller/controller, target_key, salute_keys) - . = ..() if(!controller.blackboard_key_exists(target_key)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/list/salute_list = controller.blackboard[salute_keys] if(!length(salute_list)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/bot/bot_pawn = controller.pawn //special interaction if we are wearing a fedora var/obj/item/our_hat = (locate(/obj/item/clothing/head) in bot_pawn) @@ -242,8 +238,7 @@ salute_list += "tips [our_hat] at " bot_pawn.manual_emote(pick(salute_list) + " [controller.blackboard[target_key]]") - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/salute_authority/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm index 2f16f88799db..638312973794 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -115,14 +115,14 @@ set_movement_target(controller, target) /datum/ai_behavior/execute_clean/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + living_pawn.UnarmedAttack(target, proximity_flag = TRUE) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/execute_clean/finish_action(datum/ai_controller/controller, succeeded, target_key, targeting_strategy_key, hiding_location_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm index 2d2bc27079fd..a913df74c6bb 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm @@ -79,11 +79,10 @@ break if(isnull(found_target)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, found_target) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -111,17 +110,15 @@ var/mob/living/carbon/human/unclean_target = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(QDELETED(unclean_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(living_pawn.loc == get_turf(unclean_target)) living_pawn.melee_attack(unclean_target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/frustration_count = controller.blackboard[BB_WASH_FRUSTRATION] controller.set_blackboard_key(BB_WASH_FRUSTRATION, frustration_count + 1) - finish_action(controller, FALSE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/wash_target/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index 100366e0b12c..868ebe2a0f45 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -48,7 +48,6 @@ action_cooldown = 2 SECONDS /datum/ai_behavior/find_suitable_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, heal_type, mode_flags, access_flags) - . = ..() search_range = (mode_flags & MEDBOT_STATIONARY_MODE) ? 1 : initial(search_range) var/list/ignore_keys = controller.blackboard[BB_TEMPORARY_IGNORE_LIST] for(var/mob/living/carbon/human/treatable_target in oview(search_range, controller.pawn)) @@ -66,7 +65,10 @@ controller.set_blackboard_key(BB_PATIENT_TARGET, treatable_target) break - finish_action(controller, controller.blackboard_key_exists(BB_PATIENT_TARGET)) + if(controller.blackboard_key_exists(BB_PATIENT_TARGET)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + else + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/find_suitable_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -86,21 +88,18 @@ set_movement_target(controller, target) /datum/ai_behavior/tend_to_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key, threshold, damage_type_healer, access_flags) - . = ..() var/mob/living/carbon/human/patient = controller.blackboard[target_key] if(QDELETED(patient) || patient.stat == DEAD) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(check_if_healed(patient, threshold, damage_type_healer, access_flags)) - finish_action(controller, TRUE, target_key, healed_target = TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/mob/living/basic/bot/bot_pawn = controller.pawn if(patient.stat >= HARD_CRIT && prob(5)) var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] announcement?.announce(pick(controller.blackboard[BB_NEAR_DEATH_SPEECH])) bot_pawn.melee_attack(patient) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED // only clear the target if they get healed /datum/ai_behavior/tend_to_patient/finish_action(datum/ai_controller/controller, succeeded, target_key, healed_target = FALSE) @@ -159,11 +158,10 @@ speech_to_pick_from += MEDIBOT_VOICED_CHICKEN if(!length(speech_to_pick_from)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED announcement.announce(pick(speech_to_pick_from)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit target_key = BB_PATIENT_IN_CRIT @@ -190,18 +188,15 @@ behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION /datum/ai_behavior/announce_patient/perform(seconds_per_tick, datum/ai_controller/basic_controller/bot/controller, target_key) - . = ..() var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/action/cooldown/bot_announcement/announcement = controller.blackboard[BB_ANNOUNCE_ABILITY] if(QDELETED(announcement)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/text_to_announce = "Medical emergency! [living_target] is in critical condition at [get_area(living_target)]!" announcement.announce(text_to_announce, controller.blackboard[BB_RADIO_CHANNEL]) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/announce_patient/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm index 55ea048c382c..a3ec6185fb60 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/_bee.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/_bee.dm @@ -36,7 +36,7 @@ health = 10 melee_damage_lower = 1 melee_damage_upper = 1 - faction = list(FACTION_HOSTILE) + faction = list(FACTION_HOSTILE, FACTION_HIVE) pass_flags = PASSTABLE | PASSGRILLE | PASSMOB | PASSMACHINE mob_size = MOB_SIZE_TINY mob_biotypes = MOB_ORGANIC|MOB_BUG diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm index 9d2a9760470b..97a8e69473c8 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm @@ -23,13 +23,12 @@ set_movement_target(controller, target) /datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/beebox/current_home = controller.blackboard[target_key] var/mob/living/bee_pawn = controller.pawn var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), current_home) callback.Invoke() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH @@ -42,17 +41,15 @@ set_movement_target(controller, target) /datum/ai_behavior/inhabit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/obj/structure/beebox/potential_home = controller.blackboard[target_key] var/mob/living/bee_pawn = controller.pawn if(!potential_home.habitable(bee_pawn)) //the house become full before we get to it - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), potential_home) callback.Invoke() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm index e1e611a28c2a..cedc39f64f3f 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm @@ -1,6 +1,6 @@ /datum/ai_controller/basic_controller/cow blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_BASIC_MOB_TIP_REACTING = FALSE, BB_BASIC_MOB_TIPPER = null, ) @@ -11,7 +11,5 @@ planning_subtrees = list( /datum/ai_planning_subtree/tip_reaction, /datum/ai_planning_subtree/find_food, - //attacking the food will eat it - /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/cow, ) diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm index ef0467871e50..6aed3751fbde 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla.dm @@ -34,6 +34,7 @@ ai_controller = /datum/ai_controller/basic_controller/gorilla faction = list(FACTION_MONKEY, FACTION_JUNGLE) butcher_results = list(/obj/item/food/meat/slab/gorilla = 4, /obj/effect/gibspawner/generic/animal = 1) + max_grab = GRAB_KILL /// How likely our meaty fist is to stun someone var/paralyze_chance = 20 /// A counter for when we can scream again diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm index 28a727fdb1bc..de55865b5fad 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm @@ -1,7 +1,7 @@ /// Pretty basic, just click people to death. Also hunt and eat bananas. /datum/ai_controller/basic_controller/gorilla blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = UNCONSCIOUS, BB_EMOTE_KEY = "ooga", BB_EMOTE_CHANCE = 40, @@ -13,10 +13,10 @@ planning_subtrees = list( /datum/ai_planning_subtree/run_emote, - /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path/gorilla, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, ) /datum/ai_planning_subtree/attack_obstacle_in_path/gorilla diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm index 20bcd8a69a13..8a900b0308a9 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm @@ -48,13 +48,11 @@ /datum/ai_behavior/find_valid_teleport_location /datum/ai_behavior/find_valid_teleport_location/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) - . = ..() var/mob/living/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] var/list/possible_turfs = list() if(QDELETED(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/turf/open/potential_turf in oview(hunt_range, target)) //we check for turfs around the target if(potential_turf.is_blocked_turf()) @@ -64,11 +62,10 @@ possible_turfs += potential_turf if(!length(possible_turfs)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(hunting_target_key, pick(possible_turfs)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hunt_target/use_ability_on_target/demon_teleport hunt_cooldown = 2 SECONDS diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm index 725dcc09b5ec..b2923e71bb9b 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm @@ -21,7 +21,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/corpses/ice_whelp target_key = BB_TARGET_CANNIBAL finding_behavior = /datum/ai_behavior/find_hunt_target/corpses/dragon_corpse - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise hunt_targets = list(/mob/living/basic/mining/ice_whelp) hunt_range = 10 @@ -32,14 +32,13 @@ return FALSE return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != DEAD || target.pulledby) //we were too slow - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /datum/ai_behavior/cannibalize/finish_action(datum/ai_controller/controller, succeeded, target_key) @@ -67,30 +66,20 @@ set_movement_target(controller, target) /datum/ai_behavior/sculpt_statue/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - - var/atom/target = controller.blackboard[target_key] - var/mob/living/basic/living_pawn = controller.pawn - - if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return - - living_pawn.melee_attack(target) - finish_action(controller, TRUE, target_key) + if(!controller.ai_interact(target = target_key, combat_mode = FALSE)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/sculpt_statue/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) - //subtree to use our attacks on the victim /datum/ai_planning_subtree/targeted_mob_ability/ice_whelp ability_key = BB_WHELP_STRAIGHTLINE_FIRE use_ability_behaviour = /datum/ai_behavior/targeted_mob_ability/ice_whelp finish_planning = FALSE - /datum/ai_behavior/targeted_mob_ability/ice_whelp ///key that stores how enraged we are var/enraged_key = BB_WHELP_ENRAGED @@ -123,8 +112,6 @@ /datum/ai_behavior/set_target_tree /datum/ai_behavior/set_target_tree/perform(seconds_per_tick, datum/ai_controller/controller, tree_key) - . = ..() - var/mob/living_pawn = controller.pawn var/list/possible_trees = list() @@ -134,11 +121,10 @@ possible_trees += possible_tree if(!length(possible_trees)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(tree_key, pick(possible_trees)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/targeted_mob_ability/and_clear_target/burn_trees behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm index fa2a86787d86..7d1b40fc5ec2 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/destroy_surveillance target_key = BB_SURVEILLANCE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/find_active_surveillance - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/machinery/camera, /obj/machinery/light) hunt_range = 7 diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm index c527317863be..d97f0e659c6c 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/watering_can target_key = BB_WATERCAN_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/item/reagent_containers/cup/watering_can) hunt_range = 7 @@ -32,7 +32,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/treat_hydroplants target_key = BB_HYDROPLANT_TARGET finding_behavior = /datum/ai_behavior/find_and_set/treatable_hydro - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_targets = list(/obj/machinery/growing/tray) hunt_range = 7 @@ -62,11 +62,11 @@ if(possible_trays.len) return pick(possible_trays) -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_cooldown = 2 SECONDS always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant/target_caught(mob/living/living_pawn, atom/movable/hydro_target) +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant/target_caught(mob/living/living_pawn, atom/movable/hydro_target) var/datum/component/plant_growing/growing = hydro_target.GetComponent(/datum/component/plant_growing) if(!growing) return @@ -135,7 +135,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/fill_watercan target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/suitable_dispenser - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/water_source + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/water_source hunt_targets = list(/obj/structure/sink, /obj/structure/reagent_dispensers) hunt_range = 7 @@ -158,7 +158,7 @@ return can_see(source, water_source, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/water_source +/datum/ai_behavior/hunt_target/interact_with_target/water_source behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION hunt_cooldown = 5 SECONDS diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm index 3e0558f89af0..79dae52242a4 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm @@ -43,6 +43,5 @@ /datum/ai_behavior/targeted_mob_ability/brimbeam/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) var/mob/living/target = controller.blackboard[target_key] if (QDELETED(target) || !(get_dir(controller.pawn, target) in GLOB.cardinals) || get_dist(controller.pawn, target) > max_target_distance) - finish_action(controller, succeeded = FALSE, ability_key = ability_key, target_key = target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm index 030448e7d309..23022ed18013 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -42,7 +42,7 @@ ///consume food! /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores target_key = BB_ORE_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/hunt_ores finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_ores hunt_targets = list(/obj/item/stack/ore) hunt_chance = 75 @@ -65,7 +65,7 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores +/datum/ai_behavior/hunt_target/interact_with_target/hunt_ores always_reset_target = TRUE ///find our child's egg and pull it! diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm index 7509544cfa73..80c8d8d280a6 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -3,7 +3,7 @@ /datum/ai_controller/basic_controller/goliath blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) @@ -37,8 +37,7 @@ if (isliving(target) && !target.has_status_effect(/datum/status_effect/incapacitating/stun/goliath_tentacled)) var/datum/action/cooldown/using_action = controller.blackboard[BB_GOLIATH_TENTACLES] if (using_action?.IsAvailable()) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /datum/ai_planning_subtree/targeted_mob_ability/goliath_tentacles @@ -68,20 +67,18 @@ var/scan_range = 3 /datum/ai_behavior/goliath_find_diggable_turf/perform(seconds_per_tick, datum/ai_controller/controller) - . = ..() var/turf/target_turf = controller.blackboard[target_key] if (is_valid_turf(target_turf)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/pawn = controller.pawn var/list/nearby_turfs = RANGE_TURFS(scan_range, pawn) var/turf/check_turf = pick(nearby_turfs) // This isn't an efficient search algorithm but we don't need it to be if (!is_valid_turf(check_turf)) - finish_action(controller, succeeded = FALSE) // Otherwise they won't perform idle wanderin - return + // Otherwise they won't perform idle wanderin + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, check_turf) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// Return true if this is a turf we can dig /datum/ai_behavior/goliath_find_diggable_turf/proc/is_valid_turf(turf/check_turf) @@ -113,13 +110,12 @@ set_movement_target(controller, target_turf) /datum/ai_behavior/goliath_dig/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/turf/target_turf = controller.blackboard[target_key] var/mob/living/basic/basic_mob = controller.pawn if(!basic_mob.CanReach(target_turf)) - return + return AI_BEHAVIOR_DELAY basic_mob.melee_attack(target_turf) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/goliath_dig/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index faf7a58b65fa..6bc4ec7d46b7 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -44,11 +44,9 @@ continue living_pawn.befriend(potential_friend) to_chat(potential_friend, span_nicegreen("[living_pawn] looks at you with endearing eyes!")) - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED @@ -76,7 +74,7 @@ ///consume food! /datum/ai_planning_subtree/find_and_hunt_target/food_trough target_key = BB_TROUGH_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/food_trough finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough hunt_targets = list(/obj/structure/ore_container/gutlunch_trough) hunt_chance = 75 @@ -99,9 +97,9 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough +/datum/ai_behavior/hunt_target/interact_with_target/food_trough always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE /datum/pet_command/mine_walls command_name = "Mine" diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index b80d5d6b9f79..c8e294f3e064 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -47,8 +47,8 @@ if (!is_vulnerable) controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, FALSE) if (!controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) - finish_action(controller = controller, succeeded = TRUE, target_key = target_key) // We don't want to clear our target - return + // We don't want to clear our target + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED return ..() /datum/ai_planning_subtree/flee_target/lobster @@ -72,8 +72,7 @@ if (!HAS_TRAIT(target, trait)) continue controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/mob/living/us = controller.pawn if (us.pulling == target) @@ -132,14 +131,12 @@ set_movement_target(controller, current_target) /datum/ai_behavior/grab_fingers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/atom/current_target = controller.blackboard[target_key] if (QDELETED(current_target)) - return + return AI_BEHAVIOR_DELAY var/mob/living/living_pawn = controller.pawn living_pawn.start_pulling(current_target) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /// How far we'll try to go before eating an arm #define FLEE_TO_RANGE 9 @@ -159,14 +156,18 @@ if (QDELETED(current_target)) set_movement_target(controller, get_turf(controller.pawn)) return - target_step_away(controller, current_target, target_key) + var/perform_flags = target_step_away(controller, current_target, target_key) + if (perform_flags & AI_BEHAVIOR_SUCCEEDED) + finish_action(controller, TRUE, target_key) + else if(perform_flags & AI_BEHAVIOR_FAILED) + finish_action(controller, FALSE, target_key) /// Find the next step to take away from the current target /datum/ai_behavior/hoard_fingers/proc/target_step_away(datum/ai_controller/controller, atom/current_target, target_key) var/turf/next_step = get_step_away(controller.pawn, current_target) if (!isnull(next_step) && !next_step.is_blocked_turf(exclude_mobs = TRUE)) set_movement_target(controller, next_step) - return + return NONE var/list/all_dirs = GLOB.alldirs.Copy() all_dirs -= get_dir(controller.pawn, next_step) all_dirs -= get_dir(controller.pawn, current_target) @@ -175,37 +176,37 @@ next_step = get_step(controller.pawn, dir) if (!isnull(next_step) && !next_step.is_blocked_turf(exclude_mobs = TRUE)) set_movement_target(controller, next_step) - return - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return NONE + return AI_BEHAVIOR_FAILED /datum/ai_behavior/hoard_fingers/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/current_patience = controller.blackboard[patience_key] + 1 if (current_patience >= MAX_LOBSTROSITY_PATIENCE) - eat_fingers(controller, target_key) - return + if(eat_fingers(controller, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(patience_key, current_patience) var/mob/living/living_pawn = controller.pawn if (isnull(living_pawn.pulling)) - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/atom/current_target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] if (QDELETED(current_target) || !can_see(controller.pawn, current_target, FLEE_TO_RANGE)) - eat_fingers(controller, target_key) - return - target_step_away(controller, current_target, target_key) + if(eat_fingers(controller, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + if(target_step_away(controller, current_target, target_key)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /// Finally consume those delicious digits /datum/ai_behavior/hoard_fingers/proc/eat_fingers(datum/ai_controller/controller, target_key) var/mob/living/basic/living_pawn = controller.pawn var/atom/fingers = controller.blackboard[target_key] if (QDELETED(fingers) || living_pawn.pulling != fingers) - finish_action(controller, succeeded = FALSE, target_key = target_key) - return + return AI_BEHAVIOR_FAILED living_pawn.melee_attack(fingers) - finish_action(controller, succeeded = TRUE, target_key = target_key) + return AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hoard_fingers/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm index cfc359bd54fc..45db86b1714a 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_abilities.dm @@ -138,3 +138,9 @@ base_pixel_y = -16 base_pixel_x = -16 duration = 1 SECONDS + +/obj/effect/temp_visual/mook_dust/small + +/obj/effect/temp_visual/mook_dust/small/Initialize(mapload) + . = ..() + transform = transform.Scale(0.5) diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index 504166930614..e600df1b195d 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///deposit ores into the stand! /datum/ai_planning_subtree/find_and_hunt_target/material_stand target_key = BB_MATERIAL_STAND_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/material_stand finding_behavior = /datum/ai_behavior/find_hunt_target hunt_targets = list(/obj/structure/ore_container/material_stand) hunt_range = 9 @@ -81,14 +81,14 @@ GLOBAL_LIST_INIT(mook_commands, list( return return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand +/datum/ai_behavior/hunt_target/interact_with_target/material_stand required_distance = 0 always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT ///try to face the counter when depositing ores -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) . = ..() var/atom/hunt_target = controller.blackboard[hunting_target_key] if (QDELETED(hunt_target)) @@ -117,15 +117,13 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/find_village /datum/ai_behavior/find_village/perform(seconds_per_tick, datum/ai_controller/controller, village_key) - . = ..() var/obj/effect/landmark/home_marker = locate(/obj/effect/landmark/mook_village) in GLOB.landmarks_list if(isnull(home_marker)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(village_key, home_marker) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///explore the lands away from the village to look for ore /datum/ai_planning_subtree/wander_away_from_village @@ -190,8 +188,7 @@ GLOBAL_LIST_INIT(mook_commands, list( return return_turf /datum/ai_behavior/wander/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_planning_subtree/mine_walls/mook find_wall_behavior = /datum/ai_behavior/find_mineral_wall/mook @@ -300,7 +297,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///find injured miner mooks after they come home from a long day of work /datum/ai_planning_subtree/find_and_hunt_target/injured_mooks target_key = BB_INJURED_MOOK - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/injured_mooks finding_behavior = /datum/ai_behavior/find_hunt_target/injured_mooks hunt_targets = list(/mob/living/basic/mining/mook/worker) hunt_range = 9 @@ -316,9 +313,9 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/find_hunt_target/injured_mooks/valid_dinner(mob/living/source, mob/living/injured_mook) return (injured_mook.health < injured_mook.maxHealth) -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks +/datum/ai_behavior/hunt_target/interact_with_target/injured_mooks -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks +/datum/ai_behavior/hunt_target/interact_with_target/injured_mooks always_reset_target = TRUE hunt_cooldown = 10 SECONDS @@ -367,23 +364,20 @@ GLOBAL_LIST_INIT(mook_commands, list( action_cooldown = 5 SECONDS /datum/ai_behavior/issue_commands/perform(seconds_per_tick, datum/ai_controller/controller, target_key, command_path) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/atom/target = controller.blackboard[target_key] if(isnull(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/pet_command/to_command = locate(command_path) in GLOB.mook_commands if(isnull(to_command)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/issue_command = pick(to_command.speech_commands) living_pawn.say(issue_command, forced = "controller") living_pawn._pointed(target) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED ///find an ore, only pick it up when a mook brings it close to us @@ -411,7 +405,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_planning_subtree/find_and_hunt_target/bonfire target_key = BB_MOOK_BONFIRE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/bonfire - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/bonfire hunt_targets = list(/obj/structure/bonfire) hunt_range = 9 @@ -424,5 +418,5 @@ GLOBAL_LIST_INIT(mook_commands, list( return can_see(source, fire, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire +/datum/ai_behavior/hunt_target/interact_with_target/bonfire always_reset_target = TRUE diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index b5de01f103fa..c0eec3fc5b41 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -26,13 +26,18 @@ light_outer_range = 6 light_on = FALSE ai_controller = /datum/ai_controller/basic_controller/minebot - ///the access card we use to access mining - var/obj/item/card/id/access_card ///the gun we use to kill var/obj/item/gun/energy/recharge/kinetic_accelerator/minebot/stored_gun + ///our normal overlay + var/mutable_appearance/neutral_overlay + ///our combat mode overlay + var/mutable_appearance/combat_overlay + ///our current color, if any + var/selected_color ///the commands our owner can give us - var/list/pet_commands = list( + var/static/list/pet_commands = list( /datum/pet_command/idle/minebot, + /datum/pet_command/protect_owner/minebot, /datum/pet_command/minebot_ability/light, /datum/pet_command/minebot_ability/dump, /datum/pet_command/automate_mining, @@ -40,20 +45,30 @@ /datum/pet_command/follow, /datum/pet_command/point_targeting/attack/minebot, ) + ///possible colors the bot can have + var/static/list/possible_colors= list( + "Default" = null, //default color state + "Blue" = "#70d5e7", + "Red" = "#ee7fb9", + "Green" = "#5fea94", + ) /mob/living/basic/mining_drone/Initialize(mapload) . = ..() - + neutral_overlay = mutable_appearance(icon = 'icons/mob/silicon/aibots.dmi', icon_state = "mining_drone_grey") + combat_overlay = mutable_appearance(icon = 'icons/mob/silicon/aibots.dmi', icon_state = "mining_drone_offense_grey") + AddComponent(/datum/component/obeys_commands, pet_commands) var/static/list/death_drops = list(/obj/effect/decal/cleanable/robot_debris/old) AddElement(/datum/element/death_drops, death_drops) add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE), INNATE_TRAIT) AddElement(/datum/element/footstep, FOOTSTEP_OBJ_ROBOT, 1, -6, sound_vary = TRUE) - AddComponent(\ - /datum/component/tameable,\ - food_types = list(/obj/item/stack/ore),\ - tame_chance = 100,\ - bonus_tame_chance = 5,\ - after_tame = CALLBACK(src, PROC_REF(activate_bot)),\ + + var/static/list/innate_actions = list( + /datum/action/cooldown/mob_cooldown/missile_launcher = BB_MINEBOT_MISSILE_ABILITY, + /datum/action/cooldown/mob_cooldown/drop_landmine = BB_MINEBOT_LANDMINE_ABILITY, + /datum/action/cooldown/mob_cooldown/minedrone/toggle_light = BB_MINEBOT_LIGHT_ABILITY, + /datum/action/cooldown/mob_cooldown/minedrone/toggle_meson_vision = null, + /datum/action/cooldown/mob_cooldown/minedrone/dump_ore = BB_MINEBOT_DUMP_ABILITY, ) var/datum/action/cooldown/mob_cooldown/minedrone/toggle_light/toggle_light_action = new(src) @@ -65,19 +80,20 @@ ai_controller.set_blackboard_key(BB_MINEBOT_LIGHT_ABILITY, toggle_light_action) ai_controller.set_blackboard_key(BB_MINEBOT_DUMP_ABILITY, dump_ore_action) + grant_actions_by_list(innate_actions) stored_gun = new(src) var/obj/item/implant/radio/mining/comms = new(src) comms.implant(src) - access_card = new /obj/item/card/id/advanced/gold(src) - SSid_access.apply_trim_to_card(access_card, /datum/id_trim/job/shaft_miner) - - RegisterSignal(src, COMSIG_MOB_TRIED_ACCESS, PROC_REF(attempt_access)) + var/static/list/accesses = list( + /datum/id_trim/job/shaft_miner, + ) + AddElement(/datum/element/mob_access, accesses) + RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attack)) /mob/living/basic/mining_drone/set_combat_mode(new_mode, silent = TRUE) . = ..() - icon_state = (istate & ISTATE_HARM) ? "mining_drone_offense" : "mining_drone" - balloon_alert(src, "now [(istate & ISTATE_HARM) ? "attacking" : "collecting"]") - + icon_state = combat_mode ? "mining_drone_offense" : "mining_drone" + balloon_alert(src, "now [combat_mode ? "attacking" : "collecting"]") /mob/living/basic/mining_drone/examine(mob/user) . = ..() if(health < maxHealth) @@ -85,20 +101,15 @@ . += span_warning("[p_They()] look slightly dented.") else . += span_boldwarning("[p_They()] look severely dented!") - if(isnull(stored_gun) || !stored_gun.max_mod_capacity) return - . += "[stored_gun.get_remaining_mod_capacity()]% mod capacity remaining." - for(var/obj/item/borg/upgrade/modkit/modkit as anything in stored_gun.modkits) . += span_notice("There is \a [modkit] installed, using [modkit.cost]% capacity.") - - /mob/living/basic/mining_drone/welder_act(mob/living/user, obj/item/welder) - if(user.istate & ISTATE_HARM) + if(user.combat_mode) return FALSE - if(istate & ISTATE_HARM) + if(combat_mode) user.balloon_alert(user, "can't repair in attack mode!") return TRUE if(maxHealth == health) @@ -108,66 +119,133 @@ adjustBruteLoss(-15) user.balloon_alert(user, "successfully repaired!") return TRUE - /mob/living/basic/mining_drone/attackby(obj/item/item_used, mob/user, params) if(item_used.tool_behaviour == TOOL_CROWBAR || istype(item_used, /obj/item/borg/upgrade/modkit)) item_used.melee_attack_chain(user, stored_gun, params) return - return ..() /mob/living/basic/mining_drone/attack_hand(mob/living/carbon/human/user, list/modifiers) + if(!user.combat_mode) + ui_interact(user) + return + return ..() + +/mob/living/basic/mining_drone/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MineBot", name) + ui.open() + +/mob/living/basic/mining_drone/ui_data(mob/user) + var/list/data = list() + data["auto_defend"] = ai_controller.blackboard[BB_MINEBOT_AUTO_DEFEND] + data["repair_node_drone"] = ai_controller.blackboard[BB_MINEBOT_REPAIR_DRONE] + data["plant_mines"] = ai_controller.blackboard[BB_MINEBOT_PLANT_MINES] + data["bot_maintain_distance"] = ai_controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE] + data["bot_name"] = name + data["bot_mode"] = combat_mode + data["bot_health"] = health + data["bot_maxhealth"] = maxHealth + data["bot_color"] = "" + var/color_value = neutral_overlay.color + for(var/index in possible_colors) + if(possible_colors[index] == color_value) + data["bot_color"] = index + break + return data + +/mob/living/basic/mining_drone/ui_static_data(mob/user) + var/list/data = list() + data["bot_icon"] = icon2base64(getFlatIcon(src)) + data["possible_colors"] = list() + for(var/color in possible_colors) + data["possible_colors"] += list(list( + "color_name" = color, + "color_value" = possible_colors[color], + )) + return data + +/mob/living/basic/mining_drone/ui_act(action, params, datum/tgui/ui) . = ..() + switch(action) + if("change_min_distance") + var/new_distance = clamp(params["distance"], 0, 5) + ai_controller.set_blackboard_key(BB_MINIMUM_SHOOTING_DISTANCE, new_distance) + if("toggle_defend") + var/new_toggle = !ai_controller.blackboard[BB_MINEBOT_AUTO_DEFEND] + ai_controller.set_blackboard_key(BB_MINEBOT_AUTO_DEFEND, new_toggle) + if("toggle_repair") + var/new_defend = !ai_controller.blackboard[BB_MINEBOT_REPAIR_DRONE] + ai_controller.set_blackboard_key(BB_MINEBOT_REPAIR_DRONE, new_defend) + if("toggle_mines") + var/new_mines = !ai_controller.blackboard[BB_MINEBOT_PLANT_MINES] + ai_controller.set_blackboard_key(BB_MINEBOT_PLANT_MINES, new_mines) + if("set_name") + var/input_name = sanitize_name(params["chosen_name"], allow_numbers = TRUE) + name = (input_name ? input_name : initial(name)) + if("toggle_mode") + set_combat_mode(!combat_mode) + if("set_color") + change_color(params["chosen_color"]) + update_static_data(ui.user, ui) + return TRUE + +/mob/living/basic/mining_drone/proc/change_color(new_color) + selected_color = new_color + if(!isnull(selected_color)) + neutral_overlay.color = selected_color + combat_overlay.color = selected_color + update_appearance() - if(. ||( user.istate & ISTATE_HARM)) +/mob/living/basic/mining_drone/AltClick(mob/living/user) + . = ..() + if(user.combat_mode) return - set_combat_mode(!(istate & ISTATE_HARM)) - balloon_alert(user, "now [(istate & ISTATE_HARM) ? "attacking wildlife" : "collecting loose ore"]") + set_combat_mode(!combat_mode) + balloon_alert(user, "now [combat_mode ? "attacking wildlife" : "collecting loose ore"]") /mob/living/basic/mining_drone/RangedAttack(atom/target) - if(!(istate & ISTATE_HARM)) + if(!combat_mode) return stored_gun.afterattack(target, src) - /mob/living/basic/mining_drone/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) . = ..() - if(!. || !proximity_flag || (istate & ISTATE_HARM)) + if(!. || !proximity_flag || combat_mode) return - if(istype(attack_target, /obj/item/stack/ore)) var/obj/item/target_ore = attack_target target_ore.forceMove(src) - /mob/living/basic/mining_drone/proc/drop_ore() to_chat(src, span_notice("You dump your stored ore.")) for(var/obj/item/stack/ore/dropped_item in contents) dropped_item.forceMove(get_turf(src)) -/mob/living/basic/mining_drone/proc/attempt_access(mob/drone, obj/door_attempt) - SIGNAL_HANDLER - - if(door_attempt.check_access(access_card)) - return ACCESS_ALLOWED - return ACCESS_DISALLOWED - -/mob/living/basic/mining_drone/proc/activate_bot() - AddComponent(/datum/component/obeys_commands, pet_commands) - /mob/living/basic/mining_drone/death(gibbed) drop_ore() if(isnull(stored_gun)) return ..() - for(var/obj/item/borg/upgrade/modkit/modkit as anything in stored_gun.modkits) modkit.uninstall(stored_gun) - return ..() /mob/living/basic/mining_drone/Destroy() QDEL_NULL(stored_gun) - QDEL_NULL(access_card) return ..() +/mob/living/basic/mining_drone/proc/pre_attack(datum/source, atom/target) + SIGNAL_HANDLER + + if(!istype(target, /mob/living/basic/node_drone)) + return NONE + INVOKE_ASYNC(src, PROC_REF(repair_node_drone), target) + return COMPONENT_HOSTILE_NO_ATTACK + +/mob/living/basic/mining_drone/proc/repair_node_drone(mob/living/my_target) + do_sparks(5, FALSE, source = my_target) + if(!do_after(src, 6 SECONDS, my_target)) + return + my_target.heal_overall_damage(brute = 50) diff --git a/code/modules/mob/living/basic/minebots/minebot_abilities.dm b/code/modules/mob/living/basic/minebots/minebot_abilities.dm index 4f119fd9b66a..f6c46fc28628 100644 --- a/code/modules/mob/living/basic/minebots/minebot_abilities.dm +++ b/code/modules/mob/living/basic/minebots/minebot_abilities.dm @@ -49,3 +49,137 @@ to_chat(owner, span_notice("You toggle your meson vision [(owner.sight & SEE_TURFS) ? "on" : "off"].")) +/obj/effect/temp_visual/shadow_telegraph + name = "shadow" + icon = 'icons/effects/effects.dmi' + icon_state = "shadow_telegraph" + duration = 1.5 SECONDS + +/datum/action/cooldown/mob_cooldown/missile_launcher + name = "Launch Missile" + button_icon = 'icons/obj/weapons/guns/projectiles.dmi' + button_icon_state = "84mm-heap" + background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" + desc = "Launch a missile towards the target!" + cooldown_time = 10 SECONDS + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + ///how long before we launch said missile + var/wind_up_timer = 1 SECONDS + +/datum/action/cooldown/mob_cooldown/missile_launcher/IsAvailable(feedback = TRUE) + if(is_mining_level(owner.z)) + return TRUE + if(feedback) + owner.balloon_alert(owner, "cant be used here!") + return FALSE + +/datum/action/cooldown/mob_cooldown/missile_launcher/Activate(atom/target) + var/turf/target_turf = get_turf(target) + if(isnull(target_turf) || !can_see(owner, target_turf, 7)) + return FALSE + owner.Shake(duration = wind_up_timer) + addtimer(CALLBACK(src, PROC_REF(launch_missile), target_turf), wind_up_timer) + StartCooldown() + return TRUE + +/datum/action/cooldown/mob_cooldown/missile_launcher/proc/launch_missile(turf/target_turf) + new /obj/effect/temp_visual/mook_dust(get_turf(owner)) + var/obj/effect/temp_visual/rising_rocket/new_rocket = new(get_turf(owner)) + addtimer(CALLBACK(src, PROC_REF(drop_missile), target_turf), new_rocket.duration) + +/datum/action/cooldown/mob_cooldown/missile_launcher/proc/drop_missile(turf/target_turf) + new /obj/effect/temp_visual/falling_rocket(target_turf) + var/obj/effect/temp_visual/falling_shadow = new /obj/effect/temp_visual/shadow_telegraph(target_turf) + animate(falling_shadow, transform = matrix().Scale(0.1, 0.1), time = falling_shadow.duration) + +/datum/action/cooldown/mob_cooldown/drop_landmine + name = "Landmine" + desc = "Drop a landmine!" + button_icon = 'icons/obj/weapons/grenade.dmi' + button_icon_state = "landmine" + background_icon_state = "bg_default" + overlay_icon_state = "bg_default_border" + cooldown_time = 10 SECONDS + shared_cooldown = NONE + melee_cooldown_time = 0 SECONDS + click_to_activate = FALSE + +/datum/action/cooldown/mob_cooldown/drop_landmine/IsAvailable(feedback = TRUE) + if(is_mining_level(owner.z)) + return TRUE + if(feedback) + owner.balloon_alert(owner, "cant be used here!") + return FALSE + +/datum/action/cooldown/mob_cooldown/drop_landmine/Activate(atom/target) + var/turf/my_turf = get_turf(owner) + if(isgroundlessturf(my_turf)) + return FALSE + var/obj/effect/mine/minebot/my_mine = new(my_turf) + my_mine.ignore_list = owner.faction.Copy() + playsound(my_turf, 'sound/weapons/armbomb.ogg', 20) + StartCooldown() + return TRUE + +/obj/effect/temp_visual/rising_rocket + name = "Missile" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "84mm-heap" + layer = ABOVE_ALL_MOB_LAYER + duration = 2 SECONDS + +/obj/effect/temp_visual/rising_rocket/Initialize(mapload) + . = ..() + playsound(src, 'sound/weapons/minebot_rocket.ogg', 100, FALSE) + animate(src, pixel_y = base_pixel_y + 500, time = duration, easing = EASE_IN) + +/obj/effect/temp_visual/falling_rocket + name = "Missile" + icon = 'icons/obj/weapons/guns/projectiles.dmi' + icon_state = "84mm-heap" + layer = ABOVE_ALL_MOB_LAYER + duration = 0.7 SECONDS + pixel_y = 60 + ///the radius of our explosion + var/explosion_radius = 2 + ///damage of our explosion + var/explosion_damage = 100 + +/obj/effect/temp_visual/falling_rocket/Initialize(mapload) + . = ..() + transform = transform.Turn(180) + addtimer(CALLBACK(src, PROC_REF(create_explosion)), duration) + animate(src, pixel_y = 0, time = duration) + +/obj/effect/temp_visual/falling_rocket/proc/create_explosion() + playsound(src, 'sound/weapons/minebot_rocket.ogg', 100, FALSE) + var/datum/effect_system/fluid_spread/smoke/smoke = new + smoke.set_up(1, holder = src) + smoke.start() + for(var/mob/living/living_target in oview(explosion_radius, src)) + if(living_target.incorporeal_move) + continue + living_target.apply_damage(explosion_damage) + +/obj/effect/mine/minebot + name = "Landmine" + ///we dont detonate if any of these people step on us + var/list/ignore_list = list() + ///the damage we apply to whoever steps on us + var/damage_to_apply = 50 + +/obj/effect/mine/minebot/mineEffect(mob/living/victim) + if(!istype(victim)) + return + var/datum/effect_system/fluid_spread/smoke/smoke = new + smoke.set_up(0, holder = src) + smoke.start() + playsound(src, 'sound/effects/explosion3.ogg', 100) + victim.apply_damage(damage_to_apply) + +/obj/effect/mine/minebot/can_trigger(atom/movable/on_who) + if(REF(on_who) in ignore_list) + return FALSE + return ..() diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 91b8500300ac..4b38526be9b9 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -2,6 +2,11 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_BASIC_MOB_FLEE_DISTANCE = 3, + BB_MINIMUM_SHOOTING_DISTANCE = 3, + BB_MINEBOT_PLANT_MINES = TRUE, + BB_MINEBOT_REPAIR_DRONE = TRUE, + BB_MINEBOT_AUTO_DEFEND = TRUE, BB_BLACKLIST_MINERAL_TURFS = list(/turf/closed/mineral/gibtonite), BB_AUTOMATED_MINING = FALSE, ) @@ -10,12 +15,89 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( /datum/ai_planning_subtree/simple_find_target, + /datum/ai_planning_subtree/launch_missiles, /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/befriend_miners, + /datum/ai_planning_subtree/defend_node, + /datum/ai_planning_subtree/minebot_maintain_distance, /datum/ai_planning_subtree/basic_ranged_attack_subtree/minebot, /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot, /datum/ai_planning_subtree/minebot_mining, /datum/ai_planning_subtree/locate_dead_humans, ) + ai_traits = PAUSE_DURING_DO_AFTER + +/datum/ai_planning_subtree/launch_missiles + +/datum/ai_planning_subtree/launch_missiles/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/datum/action/cooldown/missile_ability = controller.blackboard[BB_MINEBOT_MISSILE_ABILITY] + if(!missile_ability?.IsAvailable()) + return + if(!controller.blackboard_key_exists(BB_MINEBOT_MISSILE_TARGET)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/clear_bombing_zone, BB_MINEBOT_MISSILE_TARGET, /obj/effect/temp_visual/minebot_target, 7) + return + controller.queue_behavior(/datum/ai_behavior/targeted_mob_ability/and_clear_target, BB_MINEBOT_MISSILE_ABILITY, BB_MINEBOT_MISSILE_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/find_and_set/clear_bombing_zone + +/datum/ai_behavior/find_and_set/clear_bombing_zone/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/obj/effect/temp_visual/minebot_target/target in oview(search_range, controller.pawn)) + if(isclosedturf(get_turf(target))) + continue + return target + return null + +/datum/ai_planning_subtree/befriend_miners/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + if(!controller.blackboard_key_exists(BB_MINER_FRIEND)) + controller.queue_behavior(/datum/ai_behavior/find_and_set/miner_to_befriend, BB_MINER_FRIEND) + return + controller.queue_behavior(/datum/ai_behavior/befriend_target, BB_MINER_FRIEND) + +/datum/ai_behavior/find_and_set/miner_to_befriend + +/datum/ai_behavior/find_and_set/miner_to_befriend/search_tactic(datum/ai_controller/controller, locate_path, search_range) + for(var/mob/living/carbon/human/target in oview(search_range, controller.pawn)) + if(HAS_TRAIT(target, TRAIT_ROCK_STONER)) + return target + return null + +/datum/ai_planning_subtree/defend_node/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/target = controller.blackboard[BB_DRONE_DEFEND] + if(QDELETED(target)) + controller.queue_behavior(/datum/ai_behavior/find_and_set, BB_DRONE_DEFEND, /mob/living/basic/node_drone) + return + var/mob/living/living_pawn = controller.pawn + if(!living_pawn.faction.Find(REF(target))) + controller.queue_behavior(/datum/ai_behavior/befriend_target, BB_DRONE_DEFEND) + return + if(target.health < (target.maxHealth * 0.75) && controller.blackboard[BB_MINEBOT_REPAIR_DRONE]) + controller.queue_behavior(/datum/ai_behavior/repair_drone, BB_DRONE_DEFEND) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/repair_drone + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH + +/datum/ai_behavior/repair_drone/setup(datum/ai_controller/controller, target_key) + . = ..() + var/turf/target = controller.blackboard[target_key] + if(isnull(target)) + return FALSE + set_movement_target(controller, target) + +/datum/ai_behavior/repair_drone/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/living_pawn = controller.pawn + living_pawn.say("REPAIRING [target]!") + controller.ai_interact(target = target) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/datum/ai_behavior/repair_drone/finish_action(datum/ai_controller/controller, success, target_key) + . = ..() + if(!success) + controller.clear_blackboard_key(target_key) ///find dead humans and report their location on the radio /datum/ai_planning_subtree/locate_dead_humans/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -28,26 +110,24 @@ for(var/mob/living/carbon/human/target in oview(search_range, controller.pawn)) if(target.stat >= UNCONSCIOUS && target.mind) return target + return null /datum/ai_behavior/send_sos_message behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION action_cooldown = 2 MINUTES /datum/ai_behavior/send_sos_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/carbon/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target) || is_station_level(target.z)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/target_turf = get_turf(target) var/obj/item/implant/radio/radio_implant = locate(/obj/item/implant/radio) in living_pawn.contents if(!radio_implant) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/message = "ALERT, [target] in need of help at coordinates: [target_turf.x], [target_turf.y], [target_turf.z]!" radio_implant.radio.talk_into(living_pawn, message, RADIO_CHANNEL_SUPPLY) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/send_sos_message/finish_action(datum/ai_controller/controller, success, target_key) . = ..() @@ -58,9 +138,49 @@ operational_datums = null ranged_attack_behavior = /datum/ai_behavior/basic_ranged_attack/minebot +/datum/ai_planning_subtree/basic_ranged_attack_subtree/minebot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(target)) + return + var/mob/living/living_pawn = controller.pawn + if(!living_pawn.combat_mode) //we are not on attack mode + return + controller.queue_behavior(ranged_attack_behavior, BB_BASIC_MOB_CURRENT_TARGET, BB_TARGETING_STRATEGY, BB_BASIC_MOB_CURRENT_TARGET_HIDING_LOCATION) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_planning_subtree/minebot_maintain_distance/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/atom/target = controller.blackboard[BB_BASIC_MOB_CURRENT_TARGET] + if(QDELETED(target)) + return + var/mob/living/living_pawn = controller.pawn + if(get_dist(living_pawn, target) <= controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE]) + controller.queue_behavior(/datum/ai_behavior/run_away_from_target/run_and_shoot/minebot, BB_BASIC_MOB_CURRENT_TARGET) + return SUBTREE_RETURN_FINISH_PLANNING + +/datum/ai_behavior/run_away_from_target/run_and_shoot/minebot + +/datum/ai_behavior/run_away_from_target/run_and_shoot/minebot/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) + if(!controller.blackboard[BB_MINEBOT_PLANT_MINES]) + return ..() + var/datum/action/cooldown/mine_ability = controller.blackboard[BB_MINEBOT_LANDMINE_ABILITY] + mine_ability?.Trigger() + return ..() + /datum/ai_behavior/basic_ranged_attack/minebot - behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT + behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION avoid_friendly_fire = TRUE + ///if our target is closer than this distance, finish action + var/minimum_distance = 3 + +/datum/ai_behavior/basic_ranged_attack/minebot/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() + minimum_distance = controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE] ? controller.blackboard[BB_MINIMUM_SHOOTING_DISTANCE] : initial(minimum_distance) + var/atom/target = controller.blackboard[target_key] + if(QDELETED(target)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + var/mob/living/living_pawn = controller.pawn + if(get_dist(living_pawn, target) <= minimum_distance) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_planning_subtree/basic_ranged_attack_subtree/minebot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) var/mob/living/living_pawn = controller.pawn @@ -100,24 +220,20 @@ set_movement_target(controller, target) /datum/ai_behavior/minebot_mine_turf/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(check_obstacles_in_path(controller, target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!(living_pawn.istate & ISTATE_HARM)) living_pawn.set_combat_mode(TRUE) living_pawn.RangedAttack(target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/minebot_mine_turf/proc/check_obstacles_in_path(datum/ai_controller/controller, turf/target) var/mob/living/source = controller.pawn @@ -134,7 +250,7 @@ ///store ores in our body /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_chance = 100 /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -146,10 +262,10 @@ return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_cooldown = 2 SECONDS -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) if(hunter.istate & ISTATE_HARM) hunter.set_combat_mode(FALSE) return ..() @@ -216,3 +332,17 @@ /datum/pet_command/idle/minebot/execute_action(datum/ai_controller/controller) controller.set_blackboard_key(BB_AUTOMATED_MINING, FALSE) return ..() + +/datum/pet_command/protect_owner/minebot + +/datum/pet_command/protect_owner/minebot/set_command_target(mob/living/parent, atom/target) + if(!parent.ai_controller.blackboard[BB_MINEBOT_AUTO_DEFEND]) + return + if(!parent.ai_controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET) && !QDELETED(target)) //we are already dealing with something, + parent.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, target) + +/datum/pet_command/protect_owner/minebot/execute_action(datum/ai_controller/controller) + if(controller.blackboard[BB_MINEBOT_AUTO_DEFEND]) + var/mob/living/living_pawn = controller.pawn + living_pawn.set_combat_mode(TRUE) + controller.clear_blackboard_key(BB_ACTIVE_PET_COMMAND) diff --git a/code/modules/mob/living/basic/minebots/minebot_remote_control.dm b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm new file mode 100644 index 000000000000..aa790ae5c51a --- /dev/null +++ b/code/modules/mob/living/basic/minebots/minebot_remote_control.dm @@ -0,0 +1,182 @@ +#define BOMB_COOLDOWN 20 SECONDS +/obj/item/minebot_remote_control + name = "Remote Control" + desc = "Requesting stratagem!" + icon = 'icons/obj/mining.dmi' + icon_state = "minebot_bomb_control" + item_flags = NOBLUDGEON + ///are we currently primed to drop a bomb? + var/primed = FALSE + ///our last user + var/datum/weakref/last_user + ///cooldown till we can drop the next bomb + COOLDOWN_DECLARE(bomb_timer) + +/obj/item/minebot_remote_control/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) + . = ..() + clear_priming() + +/obj/item/minebot_remote_control/proc/clear_priming() + var/mob/living/living_user = last_user?.resolve() + last_user = null + primed = FALSE + if(isnull(living_user)) + return + living_user.client?.mouse_override_icon = initial(living_user.client?.mouse_override_icon) + living_user.update_mouse_pointer() + +/obj/item/minebot_remote_control/attack_self(mob/user) + . = ..() + if(.) + return . + + if(!COOLDOWN_FINISHED(src, bomb_timer)) + balloon_alert(user, "on cooldown!") + return TRUE + + prime_bomb(user) + return TRUE + +/obj/item/minebot_remote_control/proc/prime_bomb(mob/user) + primed = TRUE + last_user = WEAKREF(user) + user.client?.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi' + user.update_mouse_pointer() + +/** + * Called when this item is being used to interact with an atom, + * IE, a mob is clicking on an atom with this item. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return NONE + +/** + * Called when this item is being used to interact with an atom WITH RIGHT CLICK, + * IE, a mob is right clicking on an atom with this item. + * + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + * Return NONE to allow default interaction / tool handling. + */ +/obj/item/proc/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return interact_with_atom(interacting_with, user, modifiers) + +/** + * ## Ranged item interaction + * + * Handles non-combat ranged interactions of a tool on this atom, + * such as shooting a gun in the direction of someone*, + * having a scanner you can point at someone to scan them at any distance, + * or pointing a laser pointer at something. + * + * *While this intuitively sounds combat related, it is not, + * because a "combat use" of a gun is gun-butting. + */ +/atom/proc/base_ranged_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + SHOULD_CALL_PARENT(TRUE) + PROTECTED_PROC(TRUE) + + var/is_right_clicking = LAZYACCESS(modifiers, RIGHT_CLICK) + var/is_left_clicking = !is_right_clicking + var/early_sig_return = NONE + if(is_left_clicking) + // See [base_item_interaction] for defails on why this is using `||` (TL;DR it's short circuiting) + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_RANGED_ITEM_INTERACTION, user, tool, modifiers) \ + || SEND_SIGNAL(tool, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM, user, src, modifiers) + else + // See above + early_sig_return = SEND_SIGNAL(src, COMSIG_ATOM_RANGED_ITEM_INTERACTION_SECONDARY, user, tool, modifiers) \ + || SEND_SIGNAL(tool, COMSIG_RANGED_ITEM_INTERACTING_WITH_ATOM_SECONDARY, user, src, modifiers) + if(early_sig_return) + return early_sig_return + + var/self_interaction = is_left_clicking \ + ? ranged_item_interaction(user, tool, modifiers) \ + : ranged_item_interaction_secondary(user, tool, modifiers) + if(self_interaction) + return self_interaction + + var/interact_return = is_left_clicking \ + ? tool.ranged_interact_with_atom(src, user, modifiers) \ + : tool.ranged_interact_with_atom_secondary(src, user, modifiers) + if(interact_return) + return interact_return + + return NONE + +/** + * Called when this atom has an item used on it from a distance. + * IE, a mob is clicking on this atom with an item and is not adjacent. + * + * Does NOT include Telekinesis users, they are considered adjacent generally. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/atom/proc/ranged_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + return NONE + +/** + * Called when this atom has an item used on it from a distance WITH RIGHT CLICK, + * IE, a mob is right clicking on this atom with an item and is not adjacent. + * + * Default behavior has it run the same code as left click. + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/atom/proc/ranged_item_interaction_secondary(mob/living/user, obj/item/tool, list/modifiers) + return ranged_item_interaction(user, tool, modifiers) + +/** + * Called when this item is being used to interact with an atom from a distance, + * IE, a mob is clicking on an atom with this item and is not adjacent. + * + * Does NOT include Telekinesis users, they are considered adjacent generally + * (so long as this item is adjacent to the atom). + * + * Return an ITEM_INTERACT_ flag in the event the interaction was handled, to cancel further interaction code. + */ +/obj/item/proc/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + return NONE + +/** + * Called when this item is being used to interact with an atom from a distance WITH RIGHT CLICK, + * IE, a mob is right clicking on an atom with this item and is not adjacent. + * + * Default behavior has it run the same code as left click. + */ +/obj/item/proc/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/// Back to Minebot after shitcoding all over this file. +/obj/item/minebot_remote_control/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(HAS_TRAIT(interacting_with, TRAIT_COMBAT_MODE_SKIP_INTERACTION)) + return NONE + return ranged_interact_with_atom(interacting_with, user, modifiers) + +/obj/item/minebot_remote_control/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(!primed) + user.balloon_alert(user, "not primed!") + return ITEM_INTERACT_BLOCKING + var/turf/target_turf = get_turf(interacting_with) + if(isnull(target_turf) || isclosedturf(target_turf) || isgroundlessturf(target_turf)) + user.balloon_alert(user, "invalid target!") + return ITEM_INTERACT_BLOCKING + playsound(src, 'sound/machines/beep.ogg', 30) + clear_priming() + new /obj/effect/temp_visual/minebot_target(target_turf) + COOLDOWN_START(src, bomb_timer, BOMB_COOLDOWN) + return ITEM_INTERACT_SUCCESS + +/obj/effect/temp_visual/minebot_target + name = "Rocket Target" + icon = 'icons/mob/actions/actions_items.dmi' + icon_state = "sniper_zoom" + layer = BELOW_MOB_LAYER + plane = GAME_PLANE + duration = 5 SECONDS + +#undef BOMB_COOLDOWN diff --git a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm index 6f5d43af1afc..c3b33cd15a79 100644 --- a/code/modules/mob/living/basic/minebots/minebot_upgrades.dm +++ b/code/modules/mob/living/basic/minebots/minebot_upgrades.dm @@ -3,6 +3,7 @@ desc = "A minebot upgrade." icon_state = "door_electronics" icon = 'icons/obj/assemblies/module.dmi' + item_flags = NOBLUDGEON /obj/item/mine_bot_upgrade/afterattack(mob/living/basic/mining_drone/minebot, mob/user, proximity) . = ..() @@ -58,3 +59,34 @@ minebot.melee_damage_lower = initial(minebot.melee_damage_lower) + base_damage_add minebot.melee_damage_upper = initial(minebot.melee_damage_upper) + base_damage_add minebot.stored_gun?.recharge_time += base_cooldown_add + +/obj/item/mine_bot_upgrade/regnerative_shield + name = "regenerative shield" + desc = "Allows your minebot to tank many hits before going down!" + +/obj/item/mine_bot_upgrade/regnerative_shield/upgrade_bot(mob/living/basic/mining_drone/minebot, mob/user) + if(HAS_TRAIT(minebot, TRAIT_REGEN_SHIELD)) + user.balloon_alert(minebot, "already has it!") + return + var/static/list/shield_layers = list( + /obj/effect/overlay/minebot_top_shield, + /obj/effect/overlay/minebot_bottom_shield + ) + minebot.AddComponent(/datum/component/regenerative_shield, shield_overlays = shield_layers) + qdel(src) + +/obj/effect/overlay/minebot_top_shield + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + vis_flags = VIS_INHERIT_DIR + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "minebot_shield_top_layer" + layer = ABOVE_ALL_MOB_LAYER + +/obj/effect/overlay/minebot_bottom_shield + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + anchored = TRUE + vis_flags = VIS_INHERIT_DIR + icon = 'icons/mob/silicon/aibots.dmi' + icon_state = "minebot_shield_bottom_layer" + layer = BELOW_MOB_LAYER 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 000000000000..655a6431fc2a --- /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/interact_with_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/interact_with_target/stove_target + always_reset_target = TRUE + +/datum/ai_behavior/hunt_target/interact_with_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 000000000000..e041d29389bf --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat.dm @@ -0,0 +1,240 @@ +/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 + bodytemp_cold_damage_limit = 200 + bodytemp_heat_damage_limit = 400 + 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 + can_be_held = TRUE + ai_controller = /datum/ai_controller/basic_controller/cat + faction = list(FACTION_CAT) + held_state = "cat2" + attack_verb_continuous = "claws" + attack_verb_simple = "claw" + attack_sound = 'sound/items/slash.ogg' + attack_vis_effect = ATTACK_EFFECT_CLAW + ///icon of the collar we can wear + var/collar_icon_state = "cat" + ///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, + ) + ///list of pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + ) + + ///item we are currently holding + var/obj/item/held_food + ///mutable appearance for held item + var/mutable_appearance/held_item_overlay + +/datum/emote/cat + mob_type_allowed_typecache = /mob/living/basic/pet/cat + mob_type_blacklist_typecache = list() + +/datum/emote/cat/meow + key = "meow" + key_third_person = "meows" + message = "meows!" + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound = SFX_CAT_MEOW + +/datum/emote/cat/purr + key = "purr" + key_third_person = "purrs" + message = "purrs." + emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE + vary = TRUE + sound = SFX_CAT_PURR + +/mob/living/basic/pet/cat/Initialize(mapload) + . = ..() + AddComponent(/datum/component/obeys_commands, pet_commands) + AddElement(/datum/element/wears_collar, collar_icon_state = collar_icon_state, collar_resting_icon_state = TRUE) + AddElement(/datum/element/ai_retaliate) + AddElement(/datum/element/pet_bonus, "purr", /datum/mood_event/pet_animal) + AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) + add_cell_sample() + add_verb(src, /mob/living/proc/toggle_resting) + add_traits(list(TRAIT_CATLIKE_GRACE, TRAIT_VENTCRAWLER_ALWAYS, TRAIT_WOUND_LICKER), INNATE_TRAIT) + ai_controller.override_blackboard_key(BB_HUNTABLE_PREY, typecacheof(huntable_items)) + if(can_breed) + add_breeding_component() + +/mob/living/basic/pet/cat/proc/add_cell_sample() + AddElement(/datum/element/swabable, CELL_LINE_TABLE_CAT, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) + +/mob/living/basic/pet/cat/early_melee_attack(atom/target, list/modifiers, ignore_cooldown) + . = ..() + if(!.) + return FALSE + + if(istype(target, /obj/machinery/oven/range) && can_interact_with_stove) + target.attack_hand(src) + return FALSE + + if(!can_hold_item) + return TRUE + + if(!is_type_in_list(target, huntable_items) || held_food) + return TRUE + var/atom/movable/movable_target = target + movable_target.forceMove(src) + return FALSE + +/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" + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = TCMB + maximum_survivable_temperature = T0C + 40 + held_state = "spacecat" + faction = list(FACTION_CAT) + +/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 + held_state = "breadcat" + faction = list(FACTION_CAT) + 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 + ) + collar_icon_state = null + +/mob/living/basic/pet/cat/breadcat/add_cell_sample() + return + +/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" + unique_pet = TRUE + held_state = "original" + faction = list(FACTION_CAT) + +/mob/living/basic/pet/cat/original/add_cell_sample() + return + +/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 + can_breed = FALSE + ai_controller = /datum/ai_controller/basic_controller/cat/kitten + can_hold_item = FALSE + collar_icon_state = "kitten" + faction = list(FACTION_CAT) + +/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 + faction = list(FACTION_CAT) + +/mob/living/basic/pet/cat/jerry //Holy shit we left jerry on donut ~ Arcane ~Fikou + name = "Jerry" + desc = "Tom is VERY amused." + gender = MALE + faction = list(FACTION_CAT) + +/mob/living/basic/pet/cat/tabby + icon_state = "cat" + icon_living = "cat" + icon_dead = "cat_dead" + held_state = "cat" + faction = list(FACTION_CAT) 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 000000000000..55321e1362e4 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -0,0 +1,288 @@ +/datum/ai_controller/basic_controller/cat + blackboard = list( + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_HOSTILE_MEOWS = list("Mawwww", "Mrewwww", "mhhhhng..."), + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/pet/cat), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/pet/cat/kitten), + BB_HUNTABLE_PREY = list(), + ) + + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /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)) + controller.ai_interact(target = home) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + +/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)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + + 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) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/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)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + + consume_chance = istype(target, /mob/living/basic/mouse/brown/tom) ? 5 : initial(consume_chance) + if(prob(consume_chance)) + target.splat() + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + +/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) || QDELETED(living_pawn)) + 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/interact_with_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/interact_with_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 + 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)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + var/mob/living/living_pawn = controller.pawn + var/atom/movable/food = controller.blackboard[food_key] + + if(isnull(food) || !(food in living_pawn)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + + food.forceMove(get_turf(living_pawn)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/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/simple_animal/hostile/feral.dm b/code/modules/mob/living/basic/pets/cat/feral.dm similarity index 74% rename from code/modules/mob/living/simple_animal/hostile/feral.dm rename to code/modules/mob/living/basic/pets/cat/feral.dm index 307e31892fbe..5bc5250ace78 100644 --- a/code/modules/mob/living/simple_animal/hostile/feral.dm +++ b/code/modules/mob/living/basic/pets/cat/feral.dm @@ -1,27 +1,22 @@ -/mob/living/simple_animal/hostile/feral +/mob/living/basic/pet/cat/feral name = "feral cat" desc = "Kitty!! Wait, no no DON'T BITE-" health = 30 maxHealth = 30 melee_damage_lower = 7 melee_damage_upper = 15 + ai_controller = /datum/ai_controller/basic_controller/simple_hostile icon = 'icons/mob/simple/pets.dmi' icon_state = "cat2" icon_living = "cat2" icon_dead = "cat2_dead" held_state = "cat2" - 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 mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST bodytemp_cold_damage_limit = 200 bodytemp_heat_damage_limit = 400 unsuitable_atmos_damage = 0.5 - animal_species = /mob/living/simple_animal/pet/cat 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" @@ -34,33 +29,26 @@ 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/hostile/feraltabby +/mob/living/basic/pet/cat/feraltabby name = "feral cat" desc = "Kitty!! Wait, no no DON'T BITE-" health = 45 maxHealth = 45 - melee_damage_lower = 10 + melee_damage_lower = 12 melee_damage_upper = 20 + ai_controller = /datum/ai_controller/basic_controller/simple_hostile icon = 'icons/mob/simple/pets.dmi' icon_state = "cat" icon_living = "cat" icon_dead = "cat_dead" held_state = "cat" - 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 mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST bodytemp_cold_damage_limit = 200 bodytemp_heat_damage_limit = 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" @@ -73,4 +61,4 @@ attack_verb_simple = "claw" attack_sound = 'sound/weapons/slash.ogg' attack_vis_effect = ATTACK_EFFECT_CLAW - footstep_type = FOOTSTEP_MOB_CLAW + 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 000000000000..4c18d22b02a7 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/keeki.dm @@ -0,0 +1,62 @@ +/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/add_cell_sample() + return + +/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 000000000000..cdb7ac542e1a --- /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_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_MAX_DISTANCE_TO_FOOD = 2, + ) + + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /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)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED + 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) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + +/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 + for (var/obj/item/held_item in human_target.held_items) + if (is_type_in_typecache(held_item, locate_items)) + 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 000000000000..098fdd9beea1 --- /dev/null +++ b/code/modules/mob/living/basic/pets/cat/runtime.dm @@ -0,0 +1,100 @@ +#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_REQUIRED_MAP_ITEM(1, 1) + 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/simple_animal/hostile/syndicat.dm b/code/modules/mob/living/basic/pets/cat/syndicat.dm similarity index 73% rename from code/modules/mob/living/simple_animal/hostile/syndicat.dm rename to code/modules/mob/living/basic/pets/cat/syndicat.dm index 0f02bc3cd091..af1ef1731e90 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicat.dm +++ b/code/modules/mob/living/basic/pets/cat/syndicat.dm @@ -1,4 +1,4 @@ -/mob/living/simple_animal/hostile/syndicat +/mob/living/basic/pet/cat/syndicat name = "Syndie Cat" desc = "OH GOD! RUN!! IT CAN SMELL THE DISK!" icon = 'icons/mob/simple/pets.dmi' @@ -6,19 +6,12 @@ icon_living = "syndicat" icon_dead = "syndicat_dead" held_state = "syndicat" - 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 mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST bodytemp_cold_damage_limit = TCMB bodytemp_heat_damage_limit = T0C + 40 unsuitable_atmos_damage = 0 - 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" @@ -26,19 +19,19 @@ response_disarm_simple = "gently push aside" response_harm_continuous = "kicks" response_harm_simple = "kick" - health = 80 - maxHealth = 80 - melee_damage_lower = 20 + health = 90 + maxHealth = 90 + melee_damage_lower = 27 melee_damage_upper = 35 + ai_controller = /datum/ai_controller/basic_controller/simple_hostile faction = list(FACTION_CAT, ROLE_SYNDICATE) can_be_held = TRUE 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/hostile/syndicat/Initialize(mapload) +/mob/living/basic/pet/cat/syndicat/Initialize(mapload) . = ..() var/obj/item/implant/toinstall = list(/obj/item/implant/weapons_auth, /obj/item/implant/explosive) for(var/obj/item/implant/original_implants as anything in toinstall) diff --git a/code/modules/mob/living/basic/pets/dog/_dog.dm b/code/modules/mob/living/basic/pets/dog/_dog.dm index f82caad827e7..4d4ae0e7fcae 100644 --- a/code/modules/mob/living/basic/pets/dog/_dog.dm +++ b/code/modules/mob/living/basic/pets/dog/_dog.dm @@ -44,9 +44,13 @@ /datum/pet_command/point_targeting/fetch, /datum/pet_command/play_dead, ) +///icon state of the collar we can wear + var/collar_icon_state /mob/living/basic/pet/dog/Initialize(mapload) . = ..() + AddElement(/datum/element/wears_collar, collar_icon_state = collar_icon_state) + ADD_TRAIT(src, TRAIT_WOUND_LICKER, INNATE_TRAIT) AddElement(/datum/element/pet_bonus, "woofs happily!") AddElement(/datum/element/footstep, FOOTSTEP_MOB_CLAW) AddElement(/datum/element/unfriend_attacker, untamed_reaction = "%SOURCE% fixes %TARGET% with a look of betrayal.") diff --git a/code/modules/mob/living/basic/pets/dog/strippable_items.dm b/code/modules/mob/living/basic/pets/dog/strippable_items.dm index 2799ca38b978..c92948e2b6ff 100644 --- a/code/modules/mob/living/basic/pets/dog/strippable_items.dm +++ b/code/modules/mob/living/basic/pets/dog/strippable_items.dm @@ -38,11 +38,11 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list( key = STRIPPABLE_ITEM_PET_COLLAR /datum/strippable_item/pet_collar/get_item(atom/source) - var/mob/living/basic/pet/pet_source = source + var/mob/living/basic/pet_source = source if(!istype(pet_source)) return - return pet_source.collar + return (locate(/obj/item/clothing/neck/petcollar) in source) /datum/strippable_item/pet_collar/try_equip(atom/source, obj/item/equipping, mob/user) . = ..() @@ -56,18 +56,10 @@ GLOBAL_LIST_INIT(strippable_corgi_items, create_strippable_list(list( return TRUE /datum/strippable_item/pet_collar/finish_equip(atom/source, obj/item/equipping, mob/user) - var/mob/living/basic/pet/pet_source = source - if(!istype(pet_source)) - return - - pet_source.add_collar(equipping, user) + user.transferItemToLoc(equipping, source) /datum/strippable_item/pet_collar/finish_unequip(atom/source, mob/user) - var/mob/living/basic/pet/pet_source = source - if(!istype(pet_source)) - return - - var/obj/collar = pet_source.remove_collar(user.drop_location()) + var/obj/item/clothing/neck/petcollar/collar = locate() in source user.put_in_hands(collar) /datum/strippable_item/corgi_back diff --git a/code/modules/mob/living/basic/pets/fox.dm b/code/modules/mob/living/basic/pets/fox.dm index 7d74a6a36e41..ff98d2b587f6 100644 --- a/code/modules/mob/living/basic/pets/fox.dm +++ b/code/modules/mob/living/basic/pets/fox.dm @@ -28,9 +28,18 @@ attack_sound = 'sound/weapons/bite.ogg' attack_vis_effect = ATTACK_EFFECT_BITE ai_controller = /datum/ai_controller/basic_controller/fox + ///list of our pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + /datum/pet_command/point_targeting/attack, + ) /mob/living/basic/pet/fox/Initialize(mapload) . = ..() + AddElement(/datum/element/wears_collar) + AddComponent(/datum/component/obeys_commands, pet_commands) AddElement(/datum/element/pet_bonus, "pants and yaps happily!") AddElement(/datum/element/footstep, footstep_type = FOOTSTEP_MOB_CLAW) AddElement(/datum/element/tiny_mob_hunter, MOB_SIZE_SMALL) @@ -40,12 +49,14 @@ blackboard = list( BB_ALWAYS_IGNORE_FACTION = TRUE, BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/simple_find_target/not_while_observed, diff --git a/code/modules/mob/living/basic/pets/parrot/_parrot.dm b/code/modules/mob/living/basic/pets/parrot/_parrot.dm index 0e4914439824..c50388ea9726 100644 --- a/code/modules/mob/living/basic/pets/parrot/_parrot.dm +++ b/code/modules/mob/living/basic/pets/parrot/_parrot.dm @@ -76,6 +76,12 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( var/static/list/edibles = list( /obj/item/food/cracker, ) + ///list of commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + ) /// Tracks the times when we send a phrase through either being pet or attack to ensure it's not abused to flood COOLDOWN_DECLARE(forced_speech_cooldown) @@ -91,14 +97,8 @@ GLOBAL_LIST_INIT(strippable_parrot_items, create_strippable_list(list( AddElement(/datum/element/strippable, GLOB.strippable_parrot_items) AddElement(/datum/element/simple_flying) AddComponent(/datum/component/listen_and_repeat, desired_phrases = get_static_list_of_phrases(), blackboard_key = BB_PARROT_REPEAT_STRING) - AddComponent(\ - /datum/component/tameable,\ - food_types = edibles,\ - tame_chance = 100,\ - bonus_tame_chance = 0,\ - after_tame = CALLBACK(src, PROC_REF(tamed)),\ - ) - + AddComponent(/datum/component/tameable, food_types = edibles, tame_chance = 100, bonus_tame_chance = 0) + AddComponent(/datum/component/obeys_commands, pet_commands) RegisterSignal(src, COMSIG_HOSTILE_PRE_ATTACKINGTARGET, PROC_REF(pre_attacking)) RegisterSignal(src, COMSIG_MOB_CLICKON, PROC_REF(on_click)) RegisterSignal(src, COMSIG_ATOM_ATTACKBY_SECONDARY, PROC_REF(on_attacked)) // this means we could have a peaceful interaction, like getting a cracker diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm index 987e50774c3f..139cb8199228 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm @@ -1,6 +1,7 @@ /datum/ai_controller/basic_controller/parrot blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_HOARD_LOCATION_RANGE = 9, ) @@ -9,11 +10,12 @@ idle_behavior = /datum/idle_behavior/idle_random_walk/parrot planning_subtrees = list( + /datum/ai_planning_subtree/parrot_as_in_repeat, // always get a witty oneliner in when you can + /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/perch_on_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/hoard_items, - /datum/ai_planning_subtree/parrot_as_in_repeat, // always get a witty oneliner in when you can ) /datum/idle_behavior/idle_random_walk/parrot diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm index ccc3ef92f6ea..b5b34e30cad5 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parrot_perching.dm @@ -47,25 +47,21 @@ set_movement_target(controller, target) /datum/ai_behavior/perch_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/basic/parrot/living_pawn = controller.pawn if(!ishuman(target)) living_pawn.start_perching(target) - finish_action(controller, TRUE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(!check_human_conditions(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED living_pawn.start_perching(target) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/perch_on_target/proc/check_human_conditions(mob/living/living_human) if(living_human.stat == DEAD || LAZYLEN(living_human.buckled_mobs) >= living_human.max_buckled_mobs) diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm index d1488a60b3bb..493d67cbca8c 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/parroting_action.dm @@ -45,6 +45,6 @@ speaking_pawn.say(modified_speech, forced = "AI Controller") if(speech_sound) playsound(speaking_pawn, speech_sound, 80, vary = TRUE) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED #undef HAS_CHANNEL_PREFIX diff --git a/code/modules/mob/living/basic/pets/penguin.dm b/code/modules/mob/living/basic/pets/penguin.dm index 671c2cf30c13..b9b394573bd4 100644 --- a/code/modules/mob/living/basic/pets/penguin.dm +++ b/code/modules/mob/living/basic/pets/penguin.dm @@ -20,6 +20,7 @@ /mob/living/basic/pet/penguin/Initialize(mapload) . = ..() + AddElement(/datum/element/wears_collar) AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/ai_flee_while_injured) AddElement(/datum/element/pet_bonus, "honks happily!") diff --git a/code/modules/mob/living/basic/pets/pet.dm b/code/modules/mob/living/basic/pets/pet.dm index 6940513250f8..071cdfc146ba 100644 --- a/code/modules/mob/living/basic/pets/pet.dm +++ b/code/modules/mob/living/basic/pets/pet.dm @@ -3,132 +3,9 @@ mob_size = MOB_SIZE_SMALL mob_biotypes = MOB_ORGANIC|MOB_BEAST blood_volume = BLOOD_VOLUME_NORMAL - /// if the mob is protected from being renamed by collars. var/unique_pet = FALSE - /// If the mob has collar sprites, this is the base of the icon states. - var/collar_icon_state = null - /// We have a seperate _rest collar icon state when the pet is resting. - var/has_collar_resting_icon_state = FALSE - - /// Our collar - var/obj/item/clothing/neck/petcollar/collar - -/mob/living/basic/pet/Initialize(mapload) - . = ..() - - /// Can set the collar var beforehand to start the pet with a collar. - if(collar) - collar = new(src) - - update_icon(UPDATE_OVERLAYS) - -/mob/living/basic/pet/Destroy() - . = ..() - - QDEL_NULL(collar) - -/mob/living/basic/pet/attackby(obj/item/thing, mob/user, params) - if(istype(thing, /obj/item/clothing/neck/petcollar) && !collar) - add_collar(thing, user) - return TRUE - - if(istype(thing, /obj/item/newspaper) && !stat) - user.visible_message(span_notice("[user] baps [name] on the nose with the rolled up [thing].")) - dance_rotate(src) - return TRUE - - return ..() - -/mob/living/basic/pet/update_overlays() - . = ..() - - if(!collar || !collar_icon_state) - return - - // Determine which status tag to add to the middle of the icon state. - var/dead_tag = (stat == DEAD || HAS_TRAIT(src, TRAIT_FAKEDEATH)) ? "_dead" : null - var/rest_tag = has_collar_resting_icon_state && resting ? "_rest" : null - var/stat_tag = dead_tag || rest_tag || "" - - . += mutable_appearance(icon, "[collar_icon_state][stat_tag]collar") - . += mutable_appearance(icon, "[collar_icon_state][stat_tag]tag") - -/mob/living/basic/pet/gib(no_brain, no_organs, no_bodyparts, safe_gib = TRUE) - remove_collar(drop_location(), update_visuals = FALSE) - return ..() - -/mob/living/basic/pet/revive(full_heal_flags = NONE, excess_healing = 0, force_grab_ghost = FALSE) - . = ..() - if(!.) - return - - update_icon(UPDATE_OVERLAYS) /mob/living/basic/pet/death(gibbed) . = ..() add_memory_in_range(src, 7, /datum/memory/pet_died, deuteragonist = src) //Protagonist is the person memorizing it - -/mob/living/basic/pet/handle_atom_del(atom/deleting_atom) - . = ..() - - if(deleting_atom != collar) - return - - collar = null - - if(QDELETED(src)) - return - - update_icon(UPDATE_OVERLAYS) - -/mob/living/basic/pet/update_stat() - . = ..() - - update_icon(UPDATE_OVERLAYS) - -/mob/living/basic/pet/set_resting(new_resting, silent, instant) - . = ..() - - if(!has_collar_resting_icon_state) - return - - update_icon(UPDATE_OVERLAYS) - -/** - * Add a collar to the pet. - * - * Arguments: - * * new_collar - the collar. - * * user - the user that did it. - */ -/mob/living/basic/pet/proc/add_collar(obj/item/clothing/neck/petcollar/new_collar, mob/user) - if(QDELETED(new_collar) || collar) - return - if(!user.transferItemToLoc(new_collar, src)) - return - - collar = new_collar - if(collar_icon_state) - update_icon(UPDATE_OVERLAYS) - - to_chat(user, span_notice("You put [new_collar] around [src]'s neck.")) - if(new_collar.tagname && !unique_pet) - fully_replace_character_name(null, "\proper [new_collar.tagname]") - -/** - * Remove the collar from the pet. - */ -/mob/living/basic/pet/proc/remove_collar(atom/new_loc, update_visuals = TRUE) - if(!collar) - return - - var/obj/old_collar = collar - - collar.forceMove(new_loc) - collar = null - - if(collar_icon_state && update_visuals) - update_icon(UPDATE_OVERLAYS) - - return old_collar diff --git a/code/modules/mob/living/basic/ruin_defender/skeleton.dm b/code/modules/mob/living/basic/ruin_defender/skeleton.dm index c8de723b9513..dc51de3a14e8 100644 --- a/code/modules/mob/living/basic/ruin_defender/skeleton.dm +++ b/code/modules/mob/living/basic/ruin_defender/skeleton.dm @@ -161,7 +161,7 @@ /// Skeletons mostly just beat people to death, but they'll also find and drink milk. /datum/ai_controller/basic_controller/skeleton blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_TARGET_MINIMUM_STAT = HARD_CRIT, BB_EMOTE_KEY = "rattles", BB_EMOTE_CHANCE = 20, 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 8e33d13dc79c..4aa18760120e 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/_bear.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/_bear.dm @@ -128,6 +128,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/carp/carp_ai_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm index 9e767bab3af1..71017bd2207a 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_actions.dm @@ -21,8 +21,7 @@ if (QDELETED(using_action)) return ..() if (!controller.blackboard[BB_MAGICARP_SPELL_SPECIAL_TARGETING] && using_action.IsAvailable()) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED return ..() /** diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm index 27fdb25ee22b..9458877af7fe 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_migration.dm @@ -47,10 +47,8 @@ blackboard_points -= migration_point if(get_dist(controller.pawn, migration_point) > CARP_DESTINATION_SEARCH_RANGE) controller.set_blackboard_key(target_key, migration_point) - finish_action(controller, succeeded = TRUE) - return - - finish_action(controller, succeeded = FALSE) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED #undef CARP_DESTINATION_SEARCH_RANGE #undef CARP_PORTAL_SEARCH_RANGE diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm index fc6997896b0d..84b96ae3ce40 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_ai_rift_actions.dm @@ -52,21 +52,19 @@ return controller.blackboard[ability_key] && controller.blackboard[target_key] /datum/ai_behavior/make_carp_rift/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) - . = ..() var/datum/action/cooldown/mob_cooldown/lesser_carp_rift/ability = controller.blackboard[ability_key] var/atom/target = controller.blackboard[target_key] if (!validate_target(controller, target, ability)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/turf/target_destination = find_target_turf(controller, target, ability) if (!target_destination) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/result = ability.InterceptClickOn(controller.pawn, null, target_destination) - finish_action(controller, result, ability_key, target_key) + if(ability.InterceptClickOn(controller.pawn, null, target_destination)) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /// Return true if your target is valid for the action /datum/ai_behavior/make_carp_rift/proc/validate_target(datum/ai_controller/controller, atom/target, datum/action/cooldown/mob_cooldown/lesser_carp_rift/ability) diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm index 0befb20987c0..5554a9962ab2 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm @@ -10,7 +10,7 @@ /datum/ai_controller/basic_controller/carp blackboard = list( BB_BASIC_MOB_STOP_FLEEING = TRUE, - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) @@ -21,12 +21,12 @@ /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/make_carp_rift/panic_teleport, /datum/ai_planning_subtree/flee_target, - /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path/carp, /datum/ai_planning_subtree/shortcut_to_target_through_carp_rift, /datum/ai_planning_subtree/make_carp_rift/aggressive_teleport, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/carp_migration, ) @@ -63,7 +63,6 @@ /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/make_carp_rift/panic_teleport, /datum/ai_planning_subtree/flee_target, - /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/find_nearest_magicarp_spell_target, /datum/ai_planning_subtree/targeted_mob_ability/magicarp, /datum/ai_planning_subtree/simple_find_target, @@ -71,6 +70,7 @@ /datum/ai_planning_subtree/shortcut_to_target_through_carp_rift, /datum/ai_planning_subtree/make_carp_rift/aggressive_teleport, /datum/ai_planning_subtree/basic_melee_attack_subtree/magicarp, + /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/carp_migration, ) @@ -90,10 +90,10 @@ /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/make_carp_rift/panic_teleport, /datum/ai_planning_subtree/flee_target, - /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/attack_obstacle_in_path/carp, /datum/ai_planning_subtree/shortcut_to_target_through_carp_rift, /datum/ai_planning_subtree/make_carp_rift/aggressive_teleport, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/carp_migration, ) 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 134883c08864..2bd6da45542e 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 @@ -147,7 +147,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/basic/space_fauna/eyeball/eyeball_ai_behavior.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm index 57ea39c94dd5..5051f8153714 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm @@ -1,14 +1,11 @@ /datum/ai_behavior/find_the_blind /datum/ai_behavior/find_the_blind/perform(seconds_per_tick, datum/ai_controller/controller, blind_key, threshold_key) - . = ..() - var/mob/living_pawn = controller.pawn var/list/blind_list = list() var/eye_damage_threshold = controller.blackboard[threshold_key] if(!eye_damage_threshold) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED for(var/mob/living/carbon/blind in oview(9, living_pawn)) var/obj/item/organ/internal/eyes/eyes = blind.get_organ_slot(ORGAN_SLOT_EYES) if(isnull(eyes)) @@ -18,11 +15,10 @@ blind_list += blind if(!length(blind_list)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(blind_key, pick(blind_list)) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/heal_eye_damage behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH @@ -35,19 +31,16 @@ set_movement_target(controller, target) /datum/ai_behavior/heal_eye_damage/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/carbon/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/obj/item/organ/internal/eyes/eyes = target.get_organ_slot(ORGAN_SLOT_EYES) var/datum/callback/callback = CALLBACK(living_pawn, TYPE_PROC_REF(/mob/living/basic/eyeball, heal_eye_damage), target, eyes) callback.Invoke() - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/heal_eye_damage/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() @@ -77,18 +70,19 @@ var/mob/living/target = controller.blackboard[target_key] if(QDELETED(ability) || QDELETED(target)) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/direction_to_compare = get_dir(target, controller.pawn) var/target_direction = target.dir if(direction_to_compare != target_direction) - finish_action(controller, FALSE, ability_key, target_key) - return + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED var/result = ability.InterceptClickOn(controller.pawn, null, target) - finish_action(controller, result, ability_key, target_key) + if(result == TRUE) + return AI_BEHAVIOR_INSTANT + else + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED -/datum/ai_behavior/hunt_target/unarmed_attack_target/carrot +/datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_cooldown = 2 SECONDS always_reset_target = TRUE diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm index 29ea1dfc352e..17b260d03ed7 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm @@ -47,6 +47,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/carrot target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/carrot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_targets = list(/obj/item/food/grown/carrot) hunt_range = 6 diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm index 28cffa4ed8e3..7db7a8913fa3 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_behavior.dm @@ -30,19 +30,16 @@ /datum/ai_behavior/relay_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - var/mob/living/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/message_relayed = "" for(var/i in 1 to length_of_message) message_relayed += prob(50) ? "1" : "0" living_pawn.say(message_relayed, forced = "AI Controller") - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/relay_message/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index ed6741bd082c..4abc95521242 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -78,15 +78,10 @@ /datum/ai_planning_subtree/find_and_hunt_target/mushroom_food target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target hunt_targets = list(/obj/item/food/grown/mushroom) hunt_range = 6 - -/datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food - hunt_cooldown = 15 SECONDS - always_reset_target = TRUE - /mob/living/basic/mushroom/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) . = ..() if(!.) diff --git a/code/modules/mob/living/basic/space_fauna/snake/snake.dm b/code/modules/mob/living/basic/space_fauna/snake/snake.dm index 135402a5b441..1999850ee51d 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake.dm @@ -71,7 +71,7 @@ /// Snakes are primarily concerned with getting those tasty, tasty mice, but aren't afraid to strike back at those who attack them /datum/ai_controller/basic_controller/snake blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -80,7 +80,7 @@ planning_subtrees = list( /datum/ai_planning_subtree/target_retaliate, - /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/basic_melee_attack_subtree, + /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/random_speech/snake, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm index 25fcb3b7a4cf..852859b42845 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm @@ -44,11 +44,13 @@ /datum/ai_controller/basic_controller/giant_spider/pest blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/ours_or_smaller, // Hunt mobs our size + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic/of_size/larger, // Run away from mobs bigger than we are ) idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/simple_find_target, @@ -77,15 +79,14 @@ var/mob/living/spider = controller.pawn var/atom/current_target = controller.blackboard[target_key] if (current_target && !(locate(/obj/structure/spider/stickyweb) in current_target)) - finish_action(controller, succeeded = FALSE) // Already got a target - return + // Already got a target + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.clear_blackboard_key(target_key) var/turf/our_turf = get_turf(spider) if (is_valid_web_turf(our_turf)) controller.set_blackboard_key(target_key, our_turf) - finish_action(controller, succeeded = TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED var/list/turfs_by_range = list() for (var/i in 1 to scan_range) @@ -101,11 +102,10 @@ final_turfs = turfs_by_range[turf_list] break if (!length(final_turfs)) - finish_action(controller, succeeded = FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED controller.set_blackboard_key(target_key, pick(final_turfs)) - finish_action(controller, succeeded = TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/find_unwebbed_turf/proc/is_valid_web_turf(turf/target_turf, mob/living/spider) if (locate(/obj/structure/spider/stickyweb) in target_turf) @@ -145,9 +145,10 @@ return ..() /datum/ai_behavior/spin_web/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key) - . = ..() var/datum/action/cooldown/web_action = controller.blackboard[action_key] - finish_action(controller, succeeded = web_action?.Trigger(), action_key = action_key, target_key = target_key) + if(web_action?.Trigger()) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED /datum/ai_behavior/spin_web/finish_action(datum/ai_controller/controller, succeeded, action_key, target_key) controller.clear_blackboard_key(target_key) diff --git a/code/modules/mob/living/basic/space_fauna/spider/spider.dm b/code/modules/mob/living/basic/space_fauna/spider/spider.dm index e1dc77aad00a..b4c0cb59547f 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spider.dm @@ -167,10 +167,17 @@ response_harm_simple = "splat" ai_controller = /datum/ai_controller/basic_controller/giant_spider/pest apply_spider_antag = FALSE +///list of pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + ) /mob/living/basic/spider/maintenance/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) AddElement(/datum/element/web_walker, /datum/movespeed_modifier/average_web) AddElement(/datum/element/ai_retaliate) + AddComponent(/datum/component/obeys_commands, pet_commands) AddElement(/datum/element/tiny_mob_hunter) diff --git a/code/modules/mob/living/basic/trader/trader_ai.dm b/code/modules/mob/living/basic/trader/trader_ai.dm index 5f447ab3229a..83a298a22935 100644 --- a/code/modules/mob/living/basic/trader/trader_ai.dm +++ b/code/modules/mob/living/basic/trader/trader_ai.dm @@ -61,19 +61,16 @@ return !QDELETED(target) /datum/ai_behavior/setup_shop/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - . = ..() - //We lost track of our costumer or our ability, abort if(!controller.blackboard_key_exists(target_key) || !controller.blackboard_key_exists(BB_SETUP_SHOP)) - finish_action(controller, FALSE, target_key) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/datum/action/setup_shop/shop = controller.blackboard[BB_SETUP_SHOP] shop.Trigger() controller.clear_blackboard_key(BB_FIRST_CUSTOMER) - finish_action(controller, TRUE, target_key) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/idle_behavior/idle_random_walk/not_while_on_target/trader target_key = BB_SHOP_SPOT diff --git a/code/modules/mob/living/basic/vermin/lizard.dm b/code/modules/mob/living/basic/vermin/lizard.dm index 350fca5c0046..c3a3ac908171 100644 --- a/code/modules/mob/living/basic/vermin/lizard.dm +++ b/code/modules/mob/living/basic/vermin/lizard.dm @@ -50,7 +50,7 @@ /datum/ai_controller/basic_controller/lizard blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/allow_items, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) ai_traits = STOP_MOVING_WHEN_PULLED @@ -58,7 +58,6 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( /datum/ai_planning_subtree/find_food, - /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/lizard, ) diff --git a/code/modules/mob/living/basic/vermin/mothroach.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm similarity index 81% rename from code/modules/mob/living/basic/vermin/mothroach.dm rename to code/modules/mob/living/basic/vermin/mothroach/mothroach.dm index 15f82d38f852..b805765aff2e 100644 --- a/code/modules/mob/living/basic/vermin/mothroach.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach.dm @@ -33,9 +33,20 @@ faction = list(FACTION_NEUTRAL) ai_controller = /datum/ai_controller/basic_controller/mothroach + ///list of pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + ) /mob/living/basic/mothroach/Initialize(mapload) . = ..() + var/static/list/food_types = list(/obj/item/clothing) + AddElement(/datum/element/basic_eating, food_types = food_types) + AddComponent(/datum/component/obeys_commands, pet_commands) + ai_controller.set_blackboard_key(BB_BASIC_FOODS, typecacheof(food_types)) + AddElement(/datum/element/ai_retaliate) AddElement(/datum/element/pet_bonus, "squeaks happily!") add_verb(src, /mob/living/proc/toggle_resting) ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) @@ -63,13 +74,3 @@ return else playsound(loc, 'sound/voice/moth/scream_moth.ogg', 50, TRUE) - -/datum/ai_controller/basic_controller/mothroach - blackboard = list() - - ai_traits = STOP_MOVING_WHEN_PULLED - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk - planning_subtrees = list( - /datum/ai_planning_subtree/random_speech/mothroach, - ) diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm new file mode 100644 index 000000000000..c9e8558ec5c4 --- /dev/null +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm @@ -0,0 +1,30 @@ +/datum/ai_controller/basic_controller/mothroach + blackboard = list( + BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, + BB_EAT_FOOD_COOLDOWN = 1 MINUTES, + ) + + ai_traits = STOP_MOVING_WHEN_PULLED + ai_movement = /datum/ai_movement/basic_avoidance + idle_behavior = /datum/idle_behavior/idle_random_walk + planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, + /datum/ai_planning_subtree/find_food/mothroach, + /datum/ai_planning_subtree/target_retaliate/to_flee, + /datum/ai_planning_subtree/flee_target/from_flee_key, + /datum/ai_planning_subtree/random_speech/mothroach, + ) + +/datum/ai_planning_subtree/find_food/mothroach + finding_behavior = /datum/ai_behavior/find_and_set/in_list/mothroach_food + +/datum/ai_behavior/find_and_set/in_list/mothroach_food + +/datum/ai_behavior/find_and_set/in_list/mothroach_food/search_tactic(datum/ai_controller/controller, locate_paths, search_range) + var/list/found = typecache_filter_list(oview(search_range, controller.pawn), locate_paths) + var/mob/living/living_pawn = controller.pawn + found -= living_pawn.loc + if(length(found)) + return pick(found) diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index 758d8586dd71..01371c16e9b4 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -40,6 +40,12 @@ var/contributes_to_ratcap = TRUE /// Probability that, if we successfully bite a shocked cable, that we will die to it. var/cable_zap_prob = 85 + ///list of pet commands we follow + var/static/list/pet_commands = list( + /datum/pet_command/idle, + /datum/pet_command/free, + /datum/pet_command/follow, + ) var/chooses_bodycolor = TRUE @@ -68,6 +74,7 @@ var/static/list/loc_connections = list( COMSIG_ATOM_ENTERED = PROC_REF(on_entered), ) + AddComponent(/datum/component/obeys_commands, pet_commands) AddElement(/datum/element/connect_loc, loc_connections) make_tameable() AddComponent(/datum/component/swarming, 16, 16) //max_x, max_y @@ -415,9 +422,10 @@ /// The mouse AI controller /datum/ai_controller/basic_controller/mouse blackboard = list( // Always cowardly + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find people to run away from BB_CURRENT_HUNTING_TARGET = null, // cheese BB_LOW_PRIORITY_HUNTING_TARGET = null, // cable - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find people to run away from + BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, BB_BASIC_MOB_FLEE_DISTANCE = 3, ) @@ -425,6 +433,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/pet_planning, // Top priority is to look for and execute hunts for cheese even if someone is looking at us /datum/ai_planning_subtree/find_and_hunt_target/look_for_cheese, // Next priority is see if anyone is looking at us diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 8be5d9a8d0b6..34e753fedb22 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -222,6 +222,13 @@ return FALSE +/mob/living/carbon/attack_animal(mob/living/simple_animal/user, list/modifiers) + if (!user.combat_mode) + for (var/datum/wound/wounds as anything in all_wounds) + if (wounds.try_handling(user)) + return TRUE + + return ..() /mob/living/carbon/attack_paw(mob/living/carbon/human/user, list/modifiers) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index b8e08a82a286..e9d11edfd973 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -66,17 +66,6 @@ return ..() -/mob/living/carbon/human/ZImpactDamage(turf/T, levels) - if(stat != CONSCIOUS || levels > 1) // you're not The One - return ..() - var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) - if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed - visible_message(span_danger("[src] makes a hard landing on [T] but remains unharmed from the fall."), \ - span_userdanger("You brace for the fall. You make a hard landing on [T] but remain unharmed.")) - Knockdown(levels * 40) - return - return ..() - /mob/living/carbon/human/prepare_data_huds() //Update med hud images... ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 09e3634de601..70adf9178539 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -5,7 +5,7 @@ icon = 'icons/mob/species/human/human.dmi' icon_state = "human_basic" appearance_flags = KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE - hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,PERMIT_HUD,SENSOR_HUD) + hud_possible = list(HEALTH_HUD,STATUS_HUD,ID_HUD,WANTED_HUD,IMPLOYAL_HUD,IMPCHEM_HUD,IMPTRACK_HUD,ANTAG_HUD,GLAND_HUD,SENTIENT_DISEASE_HUD,FAN_HUD,NANITE_HUD,DIAG_NANITE_FULL_HUD,PERMIT_HUD,SENSOR_HUD,CREW_HUD) hud_type = /datum/hud/human pressure_resistance = 25 can_buckle = TRUE diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 9f9a27e6adcf..b7f3c01b10f3 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -111,3 +111,13 @@ // Tissues die without blood circulation adjustBruteLoss(1 * seconds_per_tick) +/mob/living/carbon/human/proc/get_thermal_protection() + var/thermal_protection = 0 //Simple check to estimate how protected we are against multiple temperatures + if(wear_suit) + if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT) + thermal_protection += wear_suit.max_heat_protection_temperature + if(head) + if((head.max_heat_protection_temperature >= FIRE_HELM_MAX_TEMP_PROTECT)) + thermal_protection += head.max_heat_protection_temperature + thermal_protection = thermal_protection * 0.5 + return thermal_protection diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index f956bedb2f20..f49e664b1226 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -22,6 +22,7 @@ mutanttongue = /obj/item/organ/internal/tongue/bone/plasmaman mutantliver = /obj/item/organ/internal/liver/bone/plasmaman mutantstomach = /obj/item/organ/internal/stomach/bone/plasmaman + mutantbutt = /obj/item/organ/internal/butt/plasma mutantappendix = null mutantheart = null burnmod = 1.5 diff --git a/code/modules/mob/living/carbon/human/species_types/skeletons.dm b/code/modules/mob/living/carbon/human/species_types/skeletons.dm index 50b94040c814..ccb33be8fbe1 100644 --- a/code/modules/mob/living/carbon/human/species_types/skeletons.dm +++ b/code/modules/mob/living/carbon/human/species_types/skeletons.dm @@ -32,6 +32,7 @@ mutantheart = null mutantliver = /obj/item/organ/internal/liver/bone mutantlungs = null + mutantbutt = /obj/item/organ/internal/butt/skeletal //They can technically be in an ERT changesource_flags = MIRROR_BADMIN | WABBAJACK | ERT_SPAWN species_cookie = /obj/item/reagent_containers/condiment/milk diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7eddf9ddce70..e1489b00f981 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -50,20 +50,74 @@ QDEL_LIST(surgeries) return ..() -/mob/living/onZImpact(turf/T, levels, message = TRUE) - if(!isgroundlessturf(T)) - ZImpactDamage(T, levels) - message = FALSE +/mob/living/onZImpact(turf/impacted_turf, levels, impact_flags = NONE) + if(!isgroundlessturf(impacted_turf)) + impact_flags |= ZImpactDamage(impacted_turf, levels) + return ..() -/mob/living/proc/ZImpactDamage(turf/T, levels) - SEND_SIGNAL(T, COMSIG_TURF_MOB_FALL, src) - if(SEND_SIGNAL(src, COMSIG_LIVING_Z_IMPACT, levels, T) & NO_Z_IMPACT_DAMAGE) - return - visible_message(span_danger("[src] crashes into [T] with a sickening noise!"), \ - span_userdanger("You crash into [T] with a sickening noise!")) - adjustBruteLoss((levels * 5) ** 1.5) - Knockdown(levels * 50) +/** + * Called when this mob is receiving damage from falling + * + * * impacted_turf - the turf we are falling onto + * * levels - the number of levels we are falling + */ +/mob/living/proc/ZImpactDamage(turf/impacted_turf, levels) + . = SEND_SIGNAL(src, COMSIG_LIVING_Z_IMPACT, levels, impacted_turf) + if(. & ZIMPACT_CANCEL_DAMAGE) + return . + + // If you are incapped, you probably can't brace yourself + var/can_help_themselves = !incapacitated(IGNORE_RESTRAINTS) + if(levels <= 1 && can_help_themselves) + var/obj/item/organ/external/wings/gliders = get_organ_by_type(/obj/item/organ/external/wings) + if(HAS_TRAIT(src, TRAIT_FREERUNNING) || gliders?.can_soften_fall()) // the power of parkour or wings allows falling short distances unscathed + visible_message( + span_notice("[src] makes a hard landing on [impacted_turf] but remains unharmed from the fall."), + span_notice("You brace for the fall. You make a hard landing on [impacted_turf], but remain unharmed."), + ) + Knockdown(levels * 4 SECONDS) + return . | ZIMPACT_NO_MESSAGE + + var/incoming_damage = (levels * 5) ** 1.5 + // Smaller mobs with catlike grace can ignore damage (EG: cats) + var/small_surface_area = mob_size <= MOB_SIZE_SMALL + var/skip_knockdown = FALSE + if(HAS_TRAIT(src, TRAIT_CATLIKE_GRACE) && (small_surface_area || usable_legs >= 2) && body_position == STANDING_UP && can_help_themselves) + . |= ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN + skip_knockdown = TRUE + if(small_surface_area) + visible_message( + span_notice("[src] makes a hard landing on [impacted_turf], but lands safely on [p_their()] feet!"), + span_notice("You make a hard landing on [impacted_turf], but land safely on your feet!"), + ) + new /obj/effect/temp_visual/mook_dust/small(impacted_turf) + return . + + incoming_damage *= 1.66 + add_movespeed_modifier(/datum/movespeed_modifier/landed_on_feet) + addtimer(CALLBACK(src, TYPE_PROC_REF(/mob, remove_movespeed_modifier), /datum/movespeed_modifier/landed_on_feet), levels * 2 SECONDS) + visible_message( + span_danger("[src] makes a hard landing on [impacted_turf], landing on [p_their()] feet painfully!"), + span_userdanger("You make a hard landing on [impacted_turf], and instinctively land on your feet - painfully!"), + ) + new /obj/effect/temp_visual/mook_dust(impacted_turf) + + if(body_position == STANDING_UP) + var/damage_for_each_leg = round(incoming_damage / 2) + apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_L_LEG, wound_bonus = -2.5 * levels) + apply_damage(damage_for_each_leg, BRUTE, BODY_ZONE_R_LEG, wound_bonus = -2.5 * levels) + else + apply_damage(incoming_damage, BRUTE, spread_damage = TRUE) + + if(!skip_knockdown) + Knockdown(levels * 5 SECONDS) + return . + +/// Modifier for mobs landing on their feet after a fall +/datum/movespeed_modifier/landed_on_feet + movetypes = GROUND|UPSIDE_DOWN + multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN / 2 //Generic Bump(). Override MobBump() and ObjBump() instead of this. /mob/living/Bump(atom/A) @@ -1500,11 +1554,10 @@ /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, + /mob/living/basic/pet/cat, + /mob/living/basic/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/living_defines.dm b/code/modules/mob/living/living_defines.dm index 499910828f3d..ff081577b34f 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -200,6 +200,9 @@ /// icon_state for holding mobs. var/held_state = "" + ///If combat mode is on or not + var/combat_mode = FALSE + /// Is this mob allowed to be buckled/unbuckled to/from things? var/can_buckle_to = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm index 5f465f93ed58..f6f5927224a5 100644 --- a/code/modules/mob/living/silicon/robot/robot_defines.dm +++ b/code/modules/mob/living/silicon/robot/robot_defines.dm @@ -103,7 +103,6 @@ ///Random serial number generated for each cyborg upon its initialization var/ident = 0 var/locked = TRUE - var/list/req_access = list(ACCESS_ROBOTICS) ///Whether the robot has no charge left. var/low_power_mode = FALSE diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1fc809b07445..a30d35294a0b 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -41,6 +41,7 @@ var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use var/d_hud = DATA_HUD_DIAGNOSTIC_BASIC //Determines the diag hud to use + var/crew_hud = DATA_HUD_CREW //MONKE, lets silicons tell who is crew. var/law_change_counter = 0 var/obj/machinery/camera/builtInCamera = null @@ -385,17 +386,21 @@ var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] var/datum/atom_hud/medsensor = GLOB.huds[med_hud] var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] + var/datum/atom_hud/crewsensor = GLOB.huds[crew_hud] secsensor.hide_from(src) medsensor.hide_from(src) diagsensor.hide_from(src) + crewsensor.hide_from(src) /mob/living/silicon/proc/add_sensors() var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] var/datum/atom_hud/medsensor = GLOB.huds[med_hud] var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] + var/datum/atom_hud/crewsensor = GLOB.huds[crew_hud] secsensor.show_to(src) medsensor.show_to(src) diagsensor.show_to(src) + crewsensor.show_to(src) /mob/living/silicon/proc/toggle_sensors() if(incapacitated()) diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 79f92f190c59..816bb54760d4 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -16,7 +16,7 @@ health = 25 maxHealth = 25 - maints_access_required = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION) + req_one_access = list(ACCESS_ROBOTICS, ACCESS_CONSTRUCTION) radio_key = /obj/item/encryptionkey/headset_eng radio_channel = RADIO_CHANNEL_ENGINEERING bot_type = FLOOR_BOT @@ -140,9 +140,10 @@ return data // Actions received from TGUI -/mob/living/simple_animal/bot/floorbot/ui_act(action, params) +/mob/living/simple_animal/bot/floorbot/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) . = ..() - if(. || (bot_cover_flags & BOT_COVER_LOCKED && !usr.has_unlimited_silicon_privilege)) + var/mob/user = ui.user + if(!(bot_cover_flags & BOT_COVER_LOCKED) || issilicon(user) || isAdminGhostAI(user)) return switch(action) @@ -160,8 +161,8 @@ if(tilestack) tilestack.forceMove(drop_location()) if("line_mode") - var/setdir = tgui_input_list(usr, "Select construction direction", "Direction", list("north", "east", "south", "west", "disable")) - if(isnull(setdir)) + var/setdir = tgui_input_list(user, "Select construction direction", "Direction", list("north", "east", "south", "west", "disable")) + if(isnull(setdir) || QDELETED(ui) || ui.status != UI_INTERACTIVE) return switch(setdir) if("north") @@ -218,52 +219,54 @@ target = scan(tiles_scanned) - if(!target && bot_mode_flags & BOT_MODE_AUTOPATROL) - switch(mode) - if(BOT_IDLE, BOT_START_PATROL) - start_patrol() - if(BOT_PATROL) - bot_patrol() - - if(target) - if(loc == target || loc == get_turf(target)) - if(check_bot(target)) //Target is not defined at the parent - if(prob(50)) //50% chance to still try to repair so we dont end up with 2 floorbots failing to fix the last breach - target = null - path = list() - return - if(isturf(target) && !(bot_cover_flags & BOT_COVER_EMAGGED)) - repair(target) - else if(bot_cover_flags & BOT_COVER_EMAGGED && isfloorturf(target)) - var/turf/open/floor/F = target - toggle_magnet() - mode = BOT_REPAIRING - if(isplatingturf(F)) - F.attempt_lattice_replacement() - else - F.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - audible_message(span_danger("[src] makes an excited booping sound.")) - addtimer(CALLBACK(src, PROC_REF(go_idle)), 0.5 SECONDS) - path = list() - return - if(!length(path)) - if(!isturf(target)) - var/turf/TL = get_turf(target) - path = get_path_to(src, TL, max_distance=30, access=access_card.GetAccess(), simulated_only = FALSE) - else - path = get_path_to(src, target, max_distance=30, access=access_card.GetAccess(), simulated_only = FALSE) + if (!target) + if(bot_mode_flags & BOT_MODE_AUTOPATROL) + switch(mode) + if(BOT_IDLE, BOT_START_PATROL) + start_patrol() + if(BOT_PATROL) + bot_patrol() + return - if(!bot_move(target)) - add_to_ignore(target) + if(loc == target || loc == get_turf(target)) + if(check_bot(target)) //Target is not defined at the parent + if(prob(50)) //50% chance to still try to repair so we dont end up with 2 floorbots failing to fix the last breach target = null - mode = BOT_IDLE + path = list() return - else if( !bot_move(target) ) + if(isturf(target) && !(bot_cover_flags & BOT_COVER_EMAGGED)) + repair(target) + else if(bot_cover_flags & BOT_COVER_EMAGGED && isfloorturf(target)) + var/turf/open/floor/floor = target + toggle_magnet() + mode = BOT_REPAIRING + if(isplatingturf(floor)) + floor.attempt_lattice_replacement() + else + floor.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + audible_message(span_danger("[src] makes an excited booping sound.")) + addtimer(CALLBACK(src, PROC_REF(go_idle)), 0.5 SECONDS) + path = list() + return + + if(!length(path)) + if(!isturf(target)) + var/turf/TL = get_turf(target) + path = get_path_to(src, TL, max_distance=30, access=access_card.GetAccess(), simulated_only = FALSE) + else + path = get_path_to(src, target, max_distance=30, access=access_card.GetAccess(), simulated_only = FALSE) + + if(!bot_move(target)) + add_to_ignore(target) target = null mode = BOT_IDLE - return + else if(!bot_move(target)) + target = null + mode = BOT_IDLE /mob/living/simple_animal/bot/floorbot/proc/go_idle() + if (QDELETED(src)) + return toggle_magnet(FALSE) mode = BOT_IDLE target = null @@ -278,7 +281,7 @@ //Floorbots, having several functions, need sort out special conditions here. /mob/living/simple_animal/bot/floorbot/process_scan(scan_target) var/result - var/turf/open/floor/F + var/turf/open/floor/floor move_resist = initial(move_resist) switch(process_type) if(HULL_BREACH) //The most common job, patching breaches in the station's hull. @@ -290,21 +293,21 @@ result = scan_target move_resist = INFINITY if(PLACE_TILE) - F = scan_target - if(isplatingturf(F)) //The floor must not already have a tile. - result = F + floor = scan_target + if(isplatingturf(floor)) //The floor must not already have a tile. + result = floor if(REPLACE_TILE) - F = scan_target - if(isfloorturf(F) && !isplatingturf(F)) //The floor must already have a tile. - result = F + floor = scan_target + if(isfloorturf(floor) && !isplatingturf(floor)) //The floor must already have a tile. + result = floor if(FIX_TILE) //Selects only damaged floors. - F = scan_target - if(istype(F) && (F.broken || F.burnt)) - result = F + floor = scan_target + if(istype(floor) && (floor.broken || floor.burnt)) + result = floor if(TILE_EMAG) //Emag mode! Rip up the floor and cause breaches to space! - F = scan_target - if(!isplatingturf(F)) - result = F + floor = scan_target + if(!isplatingturf(floor)) + result = floor else //If no special processing is needed, simply return the result. result = scan_target return result @@ -313,7 +316,7 @@ if(check_bot_working(target_turf)) add_to_ignore(target_turf) target = null - playsound(src, 'sound/effects/whistlereset.ogg', 50, TRUE) + playsound(src, 'sound/creatures/whistlereset.ogg', 50, TRUE) return if(isspaceturf(target_turf)) //Must be a hull breach or in line mode to continue. @@ -326,57 +329,69 @@ toggle_magnet() visible_message(span_notice("[targetdirection ? "[src] begins installing a bridge plating." : "[src] begins to repair the hole."] ")) mode = BOT_REPAIRING - if(do_after(src, 50, target = target_turf) && mode == BOT_REPAIRING) - if(autotile) //Build the floor and include a tile. - if(replacetiles && tilestack) - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile - tilestack.place_tile(target_turf, src) - if(!tilestack) - speak("Requesting refill of custom floor tiles to continue replacing.") - else - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile - target_turf.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) - else //Build a hull plating without a floor tile. - target_turf.PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + if(!do_after(src, 5 SECONDS, target = target_turf) && mode == BOT_REPAIRING) + go_idle() + return - else - var/turf/open/floor/F = target_turf - var/success = FALSE - var/was_replacing = replacetiles + if(!autotile) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) + go_idle() + return - if(F.broken || F.burnt || isplatingturf(F)) - toggle_magnet() - mode = BOT_REPAIRING - visible_message(span_notice("[src] begins [(F.broken || F.burnt) ? "repairing the floor" : "placing a floor tile"].")) - if(do_after(src, 50, target = F) && mode == BOT_REPAIRING) - success = TRUE + if(replacetiles && tilestack) + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + tilestack.place_tile(target_turf, src) + if(!tilestack) + speak("Requesting refill of custom floor tiles to continue replacing.") + else + target_turf.place_on_top(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) //make sure a hull is actually below the floor tile + target_turf.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + go_idle() + return - else if(replacetiles && tilestack && F.type != tilestack.turf_type) - toggle_magnet() - mode = BOT_REPAIRING - visible_message(span_notice("[src] begins replacing the floor tiles.")) - if(do_after(src, 50, target = target_turf) && mode == BOT_REPAIRING && tilestack) - success = TRUE - - if(success) - var/area/is_this_maints = get_area(F) - if(was_replacing && tilestack) //turn the tile into plating (if needed), then replace it - F = F.make_plating(TRUE) || F - tilestack.place_tile(F, src) - if(!tilestack) - speak("Requesting refill of custom floor tiles to continue replacing.") - else if(F.broken || F.burnt) //repair the tile and reset it to be undamaged (rather than replacing it) - F.broken = FALSE - F.burnt = FALSE - F.update_appearance() - else if(istype(is_this_maints, /area/station/maintenance)) //place catwalk if it's plating and we're in maints - F.PlaceOnTop(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) - else //place normal tile if it's plating anywhere else - F = F.make_plating(TRUE) || F - F.PlaceOnTop(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) - - if(!QDELETED(src)) + var/turf/open/floor/floor = target_turf + var/was_replacing = replacetiles + + if(floor.broken || floor.burnt || isplatingturf(floor)) + toggle_magnet() + mode = BOT_REPAIRING + visible_message(span_notice("[src] begins [(floor.broken || floor.burnt) ? "repairing the floor" : "placing a floor tile"].")) + if(!do_after(src, 5 SECONDS, target = floor) && mode == BOT_REPAIRING) + go_idle() + return + else if(replacetiles && tilestack && floor.type != tilestack.turf_type) + toggle_magnet() + mode = BOT_REPAIRING + visible_message(span_notice("[src] begins replacing the floor tiles.")) + if(do_after(src, 5 SECONDS, target = target_turf) && mode == BOT_REPAIRING && tilestack) + go_idle() + return + + var/area/is_this_maints = get_area(floor) + if(was_replacing && tilestack) //turn the tile into plating (if needed), then replace it + floor = floor.make_plating(TRUE) || floor + tilestack.place_tile(floor, src) + if(!tilestack) + speak("Requesting refill of custom floor tiles to continue replacing.") go_idle() + return + + if(floor.broken || floor.burnt) //repair the tile and reset it to be undamaged (rather than replacing it) + floor.broken = FALSE + floor.burnt = FALSE + floor.update_appearance() + go_idle() + return + + if(istype(is_this_maints, /area/station/maintenance)) //place catwalk if it's plating and we're in maints + floor.place_on_top(/turf/open/floor/catwalk_floor, flags = CHANGETURF_INHERIT_AIR) + go_idle() + return + + //place normal tile if it's plating anywhere else + floor = floor.make_plating(TRUE) || floor + floor.place_on_top(/turf/open/floor/iron, flags = CHANGETURF_INHERIT_AIR) + go_idle() /mob/living/simple_animal/bot/floorbot/update_icon_state() . = ..() @@ -396,13 +411,23 @@ new /obj/item/stack/tile/iron/base(Tsec, 1) return ..() -/mob/living/simple_animal/bot/floorbot/UnarmedAttack(atom/A, proximity_flag) - if(HAS_TRAIT(src, TRAIT_HANDS_BLOCKED)) +/mob/living/simple_animal/bot/floorbot/UnarmedAttack(atom/target, proximity_flag, list/modifiers) + if(!can_unarmed_attack()) return - if(isturf(A)) - repair(A) + + if (!isturf(target)) + return ..() + + if(!(bot_cover_flags & BOT_COVER_EMAGGED) || !isfloorturf(target)) + repair(target) + return + + var/turf/open/floor/floor = target + if(isplatingturf(floor)) + floor.attempt_lattice_replacement() else - ..() + floor.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + audible_message(span_danger("[src] makes an excited booping sound.")) /** * Checks a given turf to see if another floorbot is there, working as well. 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 d40f8513b8f8..000000000000 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ /dev/null @@ -1,331 +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 - bodytemp_cold_damage_limit = 200 - bodytemp_heat_damage_limit = 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 - bodytemp_cold_damage_limit = TCMB - bodytemp_heat_damage_limit = 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) - REGISTER_REQUIRED_MAP_ITEM(1, 1) - 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 - candidate.brainmob.mind.transfer_to(src) - 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.istate & ISTATE_HARM) && 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 a518870258e1..8928812559b5 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -375,7 +375,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/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index b39c9b0fe0e2..351a61f471b0 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -408,12 +408,16 @@ UnregisterSignal(mod.wearer, COMSIG_LIVING_Z_IMPACT) /obj/item/mod/module/longfall/proc/z_impact_react(datum/source, levels, turf/fell_on) - if(!drain_power(use_power_cost*levels)) - return + SIGNAL_HANDLER + if(!drain_power(use_power_cost * levels)) + return NONE new /obj/effect/temp_visual/mook_dust(fell_on) mod.wearer.Stun(levels * 1 SECONDS) - to_chat(mod.wearer, span_notice("[src] protects you from the damage!")) - return NO_Z_IMPACT_DAMAGE + mod.wearer.visible_message( + span_notice("[mod.wearer] lands on [fell_on] safely."), + span_notice("[src] protects you from the damage!"), + ) + return ZIMPACT_CANCEL_DAMAGE|ZIMPACT_NO_MESSAGE|ZIMPACT_NO_SPIN ///Thermal Regulator - Regulates the wearer's core temperature. /obj/item/mod/module/thermal_regulator diff --git a/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/code/modules/modular_computers/computers/item/role_tablet_presets.dm index 7b9b5c17987a..0e1ddcc72b2e 100644 --- a/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -140,6 +140,9 @@ /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, + //MONKESTATION EDIT START + /datum/computer_file/program/lifeline + //MONKESTATION EDIT END ) /obj/item/modular_computer/pda/warden @@ -219,7 +222,7 @@ name = "paramedic PDA" starting_programs = list( /datum/computer_file/program/records/medical, - /datum/computer_file/program/radar/lifeline, + /datum/computer_file/program/lifeline, // monkestation edit `/datum/computer_file/program/radar/lifeline` -> `/datum/computer_file/program/lifeline` ) /obj/item/modular_computer/pda/viro diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index 82ce5e80ed95..4f0c5fcb663c 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -197,6 +197,8 @@ if(computer.active_program == src) START_PROCESSING(SSfastprocess, src) +//MONKESTATION REMOVAL START +/* /////////////////// //Suit Sensor App// /////////////////// @@ -244,7 +246,8 @@ var/obj/item/clothing/under/uniform = humanoid.w_uniform if(uniform.has_sensor && uniform.sensor_mode >= SENSOR_COORDS) // Suit sensors must be on maximum return TRUE - return FALSE + return FALSE */ +//MONKESTATION REMOVAL END ///Tracks all janitor equipment /datum/computer_file/program/radar/custodial_locator diff --git a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm index fc3d30591d8d..7129f56d2511 100644 --- a/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm +++ b/code/modules/power/supermatter/supermatter_delamination/_sm_delam.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(sm_delam_list, list( /datum/sm_delam/proc/can_select(obj/machinery/power/supermatter_crystal/sm) return FALSE -#define ROUNDCOUNT_ENGINE_JUST_EXPLODED 0 +#define ROUNDCOUNT_ENGINE_JUST_EXPLODED -1 /// Called when the count down has been finished, do the nasty work. /// [/obj/machinery/power/supermatter_crystal/proc/count_down] diff --git a/code/modules/power/supermatter/supermatter_hit_procs.dm b/code/modules/power/supermatter/supermatter_hit_procs.dm index aec732c323b7..2a4f8525ea7c 100644 --- a/code/modules/power/supermatter/supermatter_hit_procs.dm +++ b/code/modules/power/supermatter/supermatter_hit_procs.dm @@ -34,7 +34,8 @@ if(damage_to_be > danger_point) visible_message(span_notice("[src] compresses under stress, resisting further impacts!")) - playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) + if(projectile.type != /obj/projectile/beam/emitter/hitscan) //monkestation edit + playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) qdel(projectile) return COMPONENT_BULLET_BLOCKED diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index b8afad8d4b68..7145f233592e 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -29,8 +29,8 @@ projectile_type = /obj/projectile/bullet/shotgun_beanbag /obj/item/ammo_casing/shotgun/apds - name = "armor-peircing slug" - desc = "A 12-guage shotgun slug, reloaded with a saboted tungsten penetrator. Armor? What armor!" + name = "armor-piercing slug" + desc = "A 12-gauge shotgun slug, reloaded with a sabot tungsten penetrator. Armor? What armor!" icon_state = "apshell" projectile_type = /obj/projectile/bullet/shotgun_slug/apds diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 4d9eda9e2d04..b30bedb885a9 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -14,17 +14,16 @@ name = "pulverizer slug" // admin only, can crush bones sharpness = NONE wound_bonus = 80 - +//MONKE EDIT START /obj/projectile/bullet/shotgun_slug/apds name = "tungsten sabot-slug" icon_state = "gauss" - damage = 30 //20 less than slugs. + damage = 35 //15 less than slugs. Only better when bullet armor is 50+, primarily counters bulletproof armor. speed = 0.25 //sub-caliber + lighter = speed. (Smaller number = faster) - armour_penetration = 70 //Tis a solid-tungsten penetrator, what do you expect? - wound_bonus = -3 //Had issues with massive wounding behind armor, thus... + armour_penetration = 40 //Tis a solid-tungsten penetrator, what do you expect? ricochets_max = 2 //Unlike slugs which tend to squish on impact, these are hard enough to bounce rarely. - ricochet_chance = 90 - ricochet_auto_aim_range = 4 + ricochet_chance = 60 + ricochet_auto_aim_range = 0 ricochet_incidence_leeway = 55 embedding = null demolition_mod = 5 //High-velocity tungsten > steel doors @@ -42,7 +41,7 @@ armour_penetration -= 10 return ..() - +//MONKE EDIT END /obj/projectile/bullet/shotgun_beanbag name = "beanbag slug" icon_state = "pellet" diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 7c29ea71f417..e6d02b7d2f20 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -496,6 +496,8 @@ taste_description = "burning" ph = 0.1 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE + process_flags = ORGANIC | SYNTHETIC + /datum/reagent/hellwater/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.set_fire_stacks(min(affected_mob.fire_stacks + (1.5 * seconds_per_tick), 5)) @@ -650,6 +652,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM //metabolizes to prevent micro-dosage taste_description = "slime" var/race = /datum/species/human + process_flags = ORGANIC | SYNTHETIC var/list/mutationtexts = list( "You don't feel very well." = MUT_MSG_IMMEDIATE, "Your skin feels a bit abnormal." = MUT_MSG_IMMEDIATE, "Your limbs begin to take on a different shape." = MUT_MSG_EXTENDED, @@ -1010,6 +1013,7 @@ taste_description = "acid" ph = 2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + process_flags = ORGANIC | SYNTHETIC /datum/reagent/fluorine/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) affected_mob.adjustToxLoss(0.5*REM*seconds_per_tick, 0) @@ -1124,6 +1128,7 @@ taste_description = "the inside of a reactor" /// How much tox damage to deal per tick var/tox_damage = 0.5 + process_flags = ORGANIC | SYNTHETIC ph = 4 material = /datum/material/uranium chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1163,7 +1168,8 @@ reagent_state = SOLID color = "#00CC00" // ditto taste_description = "the colour blue and regret" - tox_damage = 1*REM + tox_damage = 2*REM + process_flags = ORGANIC | SYNTHETIC material = null ph = 10 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1187,6 +1193,7 @@ reagent_state = SOLID color = "#0000CC" taste_description = "fizzling blue" + process_flags = ORGANIC | SYNTHETIC material = /datum/material/bluespace ph = 12 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -1234,6 +1241,7 @@ taste_description = "gross metal" penetrates_skin = NONE ph = 4 + process_flags = ORGANIC | SYNTHETIC burning_temperature = 1725 //more refined than oil burning_volume = 0.2 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 74f000f2931b..725ff8a48381 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -6,6 +6,7 @@ chemical_flags = REAGENT_CAN_BE_SYNTHESIZED color = "#550000" taste_description = "sweet tasting metal" + process_flags = ORGANIC | SYNTHETIC turf_exposure = TRUE /datum/reagent/thermite/expose_turf(turf/exposed_turf, reac_volume) @@ -42,6 +43,7 @@ taste_description = "burning" penetrates_skin = NONE chemical_flags = REAGENT_CAN_BE_SYNTHESIZED + process_flags = ORGANIC | SYNTHETIC evaporation_rate = 100 turf_exposure = TRUE @@ -166,6 +168,7 @@ color = "#FA00AF" taste_description = "burning" self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/phlogiston/expose_mob(mob/living/exposed_mob, methods=TOUCH, reac_volume) @@ -188,6 +191,7 @@ color = "#FA00AF" taste_description = "burning" self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC penetrates_skin = NONE chemical_flags = REAGENT_CAN_BE_SYNTHESIZED liquid_fire_power = 1 @@ -214,6 +218,7 @@ taste_description = "icey bitterness" purity = REAGENT_STANDARD_PURITY self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC inverse_chem_val = 0.5 inverse_chem = /datum/reagent/inverse/cryostylane burning_volume = 0.05 @@ -265,6 +270,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "bitterness" self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC burning_temperature = null burning_volume = 0.05 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED @@ -289,6 +295,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "charged metal" self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC var/shock_timer = 0 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index ae2197dde34e..236e7e42ac75 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -88,6 +88,7 @@ taste_mult = 1.5 color = "#8228A0" toxpwr = 3 + process_flags = ORGANIC | SYNTHETIC material = /datum/material/plasma penetrates_skin = NONE ph = 4 @@ -555,6 +556,7 @@ color = "#787878" metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 0 + process_flags = ORGANIC | SYNTHETIC chemical_flags = REAGENT_CAN_BE_SYNTHESIZED|REAGENT_NO_RANDOM_RECIPE /datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) @@ -955,6 +957,7 @@ toxpwr = 0.5 ph = 6.2 taste_description = "spinning" + process_flags = ORGANIC | SYNTHETIC chemical_flags = REAGENT_CAN_BE_SYNTHESIZED /datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired) @@ -1006,6 +1009,7 @@ var/acidpwr = 10 //the amount of protection removed from the armour taste_description = "acid" self_consuming = TRUE + process_flags = ORGANIC | SYNTHETIC ph = 2.75 chemical_flags = REAGENT_CAN_BE_SYNTHESIZED diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 371b7c994983..dcfb5ddfbe02 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -408,6 +408,9 @@ else visible_message(span_notice("[AM] bounces off of [src]'s rim!")) return ..() + if(ishuman(AM) && AM.CanEnterDisposals()) + AM.forceMove(src) + flush() // Might need to use do_flush if this causes problems. else return ..() diff --git a/code/modules/religion/burdened/psyker.dm b/code/modules/religion/burdened/psyker.dm index e9cf7793d8fd..6300465fa125 100644 --- a/code/modules/religion/burdened/psyker.dm +++ b/code/modules/religion/burdened/psyker.dm @@ -308,7 +308,7 @@ else times_dry_fired = 0 var/turf/target_turf = get_offset_target_turf(get_ranged_target_turf(owner, owner.dir, 7), dx = rand(-1, 1), dy = rand(-1, 1)) - held_gun.process_fire(target_turf, owner, TRUE, null, pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) + held_gun.process_fire(target_turf, owner, TRUE, null, pick(GLOB.all_body_zones)) held_gun.semicd = FALSE /datum/action/cooldown/spell/charged/psychic_booster diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 29e1fa3e0d7d..f73bce991883 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -612,6 +612,16 @@ ) departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING +/datum/design/board/shipbreaker + name = "Shipbreaking Recycler Board" + desc = "The circuit board for a shipbreaking recycler." + id = "shipbreaker_recycler" + build_path = /obj/item/circuitboard/machine/shipbreaker + category = list( + RND_CATEGORY_MACHINE + RND_SUBCATEGORY_MACHINE_ENGINEERING + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING + /datum/design/board/scanner_gate name = "Scanner Gate Board" desc = "The circuit board for a scanner gate." 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 97ce1219d682..242be29523f8 100644 --- a/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm +++ b/code/modules/research/xenobiology/vatgrowing/samples/cell_lines/common.dm @@ -109,7 +109,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) //The basic cat mobs are all male, so you mightt need a gender swap potion if you want to fill the fortress with kittens. /datum/micro_organism/cell_line/corgi desc = "Canid cells" diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 3e174c313786..a6d92ffd83d1 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -466,7 +466,7 @@ /mob/living/carbon/proc/regenerate_limbs(list/excluded_zones = list()) SEND_SIGNAL(src, COMSIG_CARBON_REGENERATE_LIMBS, excluded_zones) - var/list/zone_list = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/zone_list = GLOB.all_body_zones.Copy() var/list/dismembered_by_copy = body_zone_dismembered_by?.Copy() diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index cae2bbe3e953..51377a7e1e0a 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -82,7 +82,7 @@ /mob/living/carbon/proc/get_missing_limbs() RETURN_TYPE(/list) - var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/full = GLOB.all_body_zones.Copy() for(var/zone in full) if(get_bodypart(zone)) full -= zone @@ -99,7 +99,7 @@ return list() /mob/living/carbon/get_disabled_limbs() - var/list/full = list(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) + var/list/full = GLOB.all_body_zones.Copy() var/list/disabled = list() for(var/zone in full) var/obj/item/bodypart/affecting = get_bodypart(zone) diff --git a/code/modules/surgery/organs/internal/liver/liver_skeleton.dm b/code/modules/surgery/organs/internal/liver/liver_skeleton.dm index 8e2de95ef506..8b7fa54f8659 100644 --- a/code/modules/surgery/organs/internal/liver/liver_skeleton.dm +++ b/code/modules/surgery/organs/internal/liver/liver_skeleton.dm @@ -7,6 +7,7 @@ name = "mass of bones" desc = "You have no idea what this strange ball of bones does." organ_traits = list(TRAIT_LIVERLESS_METABOLISM) + icon_state = "liver-bone" /obj/item/organ/internal/liver/bone/handle_chemical(mob/living/carbon/organ_owner, datum/reagent/chem, seconds_per_tick, times_fired) . = ..() diff --git a/code/modules/unit_tests/required_map_items.dm b/code/modules/unit_tests/required_map_items.dm index 2f498667b16c..10c753f3d8bc 100644 --- a/code/modules/unit_tests/required_map_items.dm +++ b/code/modules/unit_tests/required_map_items.dm @@ -20,7 +20,7 @@ expected_types += /obj/machinery/computer/communications expected_types += /mob/living/carbon/human/species/monkey/punpun expected_types += /mob/living/basic/pet/dog/corgi/ian - expected_types += /mob/living/simple_animal/pet/cat/runtime + expected_types += /mob/living/basic/pet/cat/runtime expected_types += /mob/living/basic/parrot/poly // monkestation start expected_types += /obj/item/radio/radio_mic diff --git a/code/modules/uplink/uplink_items/dangerous.dm b/code/modules/uplink/uplink_items/dangerous.dm index af5b1dc6c2f2..966cad2f08cf 100644 --- a/code/modules/uplink/uplink_items/dangerous.dm +++ b/code/modules/uplink/uplink_items/dangerous.dm @@ -100,13 +100,6 @@ surplus = 50 purchasable_from = ~UPLINK_CLOWN_OPS -/datum/uplink_item/dangerous/cat - name = "Feral cat grenade" - desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" - cost = 5 - item = /obj/item/grenade/spawnergrenade/cat - surplus = 30 - /datum/uplink_item/dangerous/rebarxbowsyndie name = "Syndicate Rebar Crossbow" desc = "A much more proffessional version of the engineer's bootleg rebar crossbow. 3 shot mag, quicker loading, and better ammo. Owners manual included." diff --git a/code/modules/uplink/uplink_items/explosive.dm b/code/modules/uplink/uplink_items/explosive.dm index 095b2e4cea65..9a8d2281cae0 100644 --- a/code/modules/uplink/uplink_items/explosive.dm +++ b/code/modules/uplink/uplink_items/explosive.dm @@ -48,6 +48,13 @@ cost = 6 restricted = TRUE +/datum/uplink_item/explosive/cat + name = "Feral cat grenade" + desc = "This grenade is filled with 5 feral cats in stasis. Upon activation, the feral cats are awoken and unleashed unto unlucky bystanders. WARNING: The cats are not trained to discern friend from foe!" + cost = 5 + item = /obj/item/grenade/spawnergrenade/cat + surplus = 30 + /datum/uplink_item/explosives/emp name = "EMP Grenades and Implanter Kit" desc = "A box that contains five EMP grenades and an EMP implant with three uses. Useful to disrupt communications, \ diff --git a/code/modules/uplink/uplink_items/nukeops.dm b/code/modules/uplink/uplink_items/nukeops.dm index 640685892bbf..da50bb181e0e 100644 --- a/code/modules/uplink/uplink_items/nukeops.dm +++ b/code/modules/uplink/uplink_items/nukeops.dm @@ -521,11 +521,11 @@ surplus = 35 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS -/datum/uplink_item/dangerous/syndicat +/datum/uplink_item/explosives/syndicat name = "Syndie cat grenade" desc = "This grenade is filled with 3 trained angry cats in special syndicate modsuits. Upon activation, the Syndicate cats are awoken and unleashed unto unlucky bystanders." item = /obj/item/grenade/spawnergrenade/cat/syndicate - cost = 20 + cost = 5 surplus = 50 purchasable_from = UPLINK_NUKE_OPS | UPLINK_CLOWN_OPS diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index b09c78887836..2febe7bd77b8 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1356,6 +1356,10 @@ SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[name]", "[R.name]")) vend_ready = TRUE +///A proc meant to perform custom behavior on newly dispensed items. +/obj/machinery/vending/proc/on_dispense(obj/item/vended_item) + return + /obj/machinery/vending/process(seconds_per_tick) if(machine_stat & (BROKEN|NOPOWER)) return PROCESS_KILL diff --git a/code/modules/vending/medical.dm b/code/modules/vending/medical.dm index b99474175b2b..12e17f240396 100644 --- a/code/modules/vending/medical.dm +++ b/code/modules/vending/medical.dm @@ -19,6 +19,7 @@ /obj/item/stack/medical/bone_gel = 4, /obj/item/cane/white = 2, /obj/item/clothing/glasses/eyepatch/medical = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/robot_system_cleaner = 4, ) contraband = list( /obj/item/storage/box/gum/happiness = 3, @@ -33,6 +34,7 @@ /obj/item/shears = 1, /obj/item/storage/organbox = 1, /obj/item/clothing/gloves/latex/surgical = 1, //Monkestation Edit + /obj/item/reagent_containers/hypospray/medipen/deforest/robot_liquid_solder = 2, //Monkestation Edit ) refill_canister = /obj/item/vending_refill/medical default_price = PAYCHECK_CREW diff --git a/code/modules/vending/medical_wall.dm b/code/modules/vending/medical_wall.dm index 4fd120bdc487..c123e09aaa02 100644 --- a/code/modules/vending/medical_wall.dm +++ b/code/modules/vending/medical_wall.dm @@ -15,6 +15,8 @@ /obj/item/reagent_containers/medigel/sterilizine = 1, /obj/item/healthanalyzer/simple = 2, /obj/item/stack/medical/bone_gel = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/robot_liquid_solder = 2, + /obj/item/reagent_containers/hypospray/medipen/deforest/robot_system_cleaner = 4, ) contraband = list( /obj/item/reagent_containers/pill/tox = 2, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index f1c8838ef3de..f4b2b2a294d6 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -1,3 +1,7 @@ +GLOBAL_VAR_INIT(roaches_deployed, FALSE) +#define MOTHROACH_START_CHANCE 5 +#define MAX_MOTHROACH_AMOUNT 3 + /obj/item/vending_refill/wardrobe icon_state = "refill_clothes" @@ -8,6 +12,29 @@ panel_type = "panel19" light_mask = "wardrobe-light-mask" +/obj/machinery/vending/wardrobe/Initialize(mapload) + . = ..() + if(!mapload) + return + if(GLOB.roaches_deployed || !is_station_level(z) || !prob(MOTHROACH_START_CHANCE)) + return + for(var/count in 1 to rand(1, MAX_MOTHROACH_AMOUNT)) + new /mob/living/basic/mothroach(src) + GLOB.roaches_deployed = TRUE + + +/obj/machinery/vending/wardrobe/on_dispense(obj/item/clothing/food) + if(!istype(food)) + return + for(var/mob/living/basic/mothroach/roach in contents) + food.take_damage(food.get_integrity() * 0.5) + +/obj/machinery/vending/wardrobe/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + . = ..() + for(var/mob/living/basic/mothroach/roach in contents) + roach.ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_TARGET, src) //scatter away! + roach.forceMove(drop_location()) + /obj/machinery/vending/wardrobe/sec_wardrobe name = "\improper SecDrobe" desc = "A vending machine for security and security-related clothing!" @@ -633,3 +660,6 @@ /obj/item/vending_refill/wardrobe/cent_wardrobe machine_name = "CentDrobe" light_color = LIGHT_COLOR_ELECTRIC_GREEN + +#undef MOTHROACH_START_CHANCE +#undef MAX_MOTHROACH_AMOUNT diff --git a/html/changelogs/archive/2025-01.yml b/html/changelogs/archive/2025-01.yml index e61149ebc135..c72c195c09c4 100644 --- a/html/changelogs/archive/2025-01.yml +++ b/html/changelogs/archive/2025-01.yml @@ -67,3 +67,116 @@ 2025-01-06: Shoddd: - balance: Gun case can now only hold guns, ammo items, and gun attachments +2025-01-07: + Absolucy: + - bugfix: Hopefully fixed weird runtime causing people to spawn naked. + - bugfix: Gave the plant growing subsystem a proper name. + - bugfix: Cleaned up some possible sources of hard deletes. + - bugfix: Regal rat minions are now immune to viruses, to prevent Lag'sie from being + summoned with large rat swarms. + - rscadd: Added a new AI lawset, "Jermov". + Absolucy, Flleeppyy: + - sound: Tweaked the sound for midround prompts. + Absolucy, cuackles, Moltijoe: + - rscadd: Added some new uncommon maints loot - a comically large spoon! + - rscadd: You can also obtain the spoon sometimes via a Black Market Uplink. + - rscadd: Something special may happen if you scoop up oil or blood puddles with + the spoon... + CannibalHunter: + - rscadd: Added new floor sign decals for mappers. + Coll6: + - rscadd: Lube and other similar sliding materials throwing human mobs into turfs + if their slide was blocked. + - rscadd: Disposal Bin flushes living mobs tossed into it. + - code_imp: Ends move_loop early if human movement was blocked. Sends signal to + mob that it was blocked. + - rscdel: Hard gibbed flag check + - code_imp: Removes cores from bodies that do not save DNA. + - rscadd: Core deletions will properly drop items in most cases. If core is in nullspace + they will be qdel instead. + Eagletanker: + - qol: Stamps in head offices are more consitent across the stations. + OliverOtter: + - balance: Blacklisted spesific antag and admin reagents from strange seeds. + - balance: Changed the recipe for TWitch, making it effectivly impossible to get. + If you somehow make it, you earned it. + - rscdel: Removed the TWitch injector from a hacked ordering computer. + - admin: Added a warning to the TWitch autoinjector OPFOR item. + Shoddd: + - bugfix: IPC, Goblins, and florans negative traits are properly listed + - balance: Florans now heal .1 burn per tick instead of .25 + - balance: Apids can be flashed from any direction and harmed by pest spray + - rscadd: List apid traits + SirNightKnight: + - bugfix: Fixed emitter beams causing the SM to play the dusting sound. + - balance: Fire (status effect) is deadlier. Husked bodies go out faster. + - bugfix: Fixed husked bodies not losing fire stacks. + - balance: Halved the burning damage for flammable items. + Siro: + - rscadd: Admin logs + - qol: X on the old UI closes the window and the delete feature moved to a dedicated + button per cassette. + - code_imp: Removed "last" runtime + Sorenon: + - qol: redesigned the lifeline program + - bugfix: improved consistency between the basic crew monitor and blueshield crew + monitor + - rscadd: added NT Net backed tracking to the crew monitor and lifeline + - qol: minor crew monitor tweaks such as a prisoner colour and filtering by tracking + Syndicat-Meow: + - rscadd: Added actual cats + - rscadd: Added a cat house + - rscadd: Added a mechanic that lets cats and dogs treat bleeding and gorillas your + dislocations + - rscadd: Added more traits + - rscdel: Removed old code paths of simple cats and such + - qol: some food related tags + - qol: certain cats can help with cooking now + - balance: rebalanced the Syndicat nukie uplink price and increased health by 10 + due to low number of cats + - balance: Minebots got BUFFED + - bugfix: fixed ferals and syndicat cats not being actual cats + - bugfix: fixed simple_hostile AI causing actual pursuits on sight now + - image: modified some DMI as nessesary (mine bot shield) + - refactor: multiple mob codes and AI + Syndie Kate: + - balance: 'Nerfs stun batons a bit + + :cl:' + Syndie al gaib: + - rscdel: Removes most science-locked things from the imports menu + - balance: Rebalances the Bogseo + - balance: Plays around with some of the imports' numbers + - rscdel: Removes some of the more risque modular laser lines + - rscadd: 'Adds a few references that I thought were funny to the modular lasers + + :cl:' + Uristthedorf: + - rscadd: Silicons and ghosts get a hud icon to show who isn't crew. + Wisemonster: + - balance: The interrogator will now return heads to a random spot on the station + once the process is finished, along with giving them a deep-rooted trauma. + - balance: When a goldeneye keycard is launched at the station, 3 minutes will be + added onto the escape shuttle timer (if one is in transit) + - rscadd: Added the eland revolver to assault ops sidearms + - rscdel: Removed the waspe pistols from assault ops + - rscdel: Removed the CQC book from assault ops + - balance: Replaced the assault ops telescopic baton with a contractor baton + - balance: Replaced the assault ops combat gloves+ with a krav maga implanter + - rscadd: Gave assault ops access to AP ammo for their smgs and shotguns + - rscadd: Added c35sol AP ammo + ancient-engineer: + - balance: Satyrs get sober faster now + - balance: Satyrs don't take a few centuries to get drunk again + - bugfix: Satyrs don't flicker between being drunk and not anymore + - bugfix: Satyrs drunkness can no longer go negative +2025-01-08: + ThePooba: + - bugfix: 8 atmos roundstart runtimes +2025-01-09: + Siro: + - code_imp: Walter dogs now speak again and their chance to speak increased 1->5 +2025-01-10: + Addust: + - rscadd: Johnson and Co Architecture's elite reconstruction team has broken into + CentCom and replaced Pooba's office with Wolf's office, per Wolf's request. diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index fccb6f812af5..8a2a4f57ef28 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/actions/actions_spells.dmi b/icons/mob/actions/actions_spells.dmi index 15165ee9366b..3cd4079d7ac5 100644 Binary files a/icons/mob/actions/actions_spells.dmi and b/icons/mob/actions/actions_spells.dmi differ diff --git a/icons/mob/clothing/under/rnd.dmi b/icons/mob/clothing/under/rnd.dmi index edc271a66a03..51f232261591 100644 Binary files a/icons/mob/clothing/under/rnd.dmi and b/icons/mob/clothing/under/rnd.dmi differ diff --git a/icons/mob/huds/hud.dmi b/icons/mob/huds/hud.dmi index 7700c4d85028..e74701c8d7f0 100644 Binary files a/icons/mob/huds/hud.dmi and b/icons/mob/huds/hud.dmi differ diff --git a/icons/mob/silicon/aibots.dmi b/icons/mob/silicon/aibots.dmi index 82c98560520e..b3472cafd49e 100644 Binary files a/icons/mob/silicon/aibots.dmi and b/icons/mob/silicon/aibots.dmi differ diff --git a/icons/mob/simple/pets.dmi b/icons/mob/simple/pets.dmi index 73594f2f7243..e174d9944b69 100644 Binary files a/icons/mob/simple/pets.dmi and b/icons/mob/simple/pets.dmi differ diff --git a/icons/obj/clothing/under/rnd.dmi b/icons/obj/clothing/under/rnd.dmi index b7ce3896b3d8..eb1a2069c82a 100644 Binary files a/icons/obj/clothing/under/rnd.dmi and b/icons/obj/clothing/under/rnd.dmi differ diff --git a/icons/obj/library.dmi b/icons/obj/library.dmi index c5eafca6723d..d1f540dd45ce 100644 Binary files a/icons/obj/library.dmi and b/icons/obj/library.dmi differ diff --git a/icons/obj/medical/organs/organs.dmi b/icons/obj/medical/organs/organs.dmi index 3112af5f8a0a..803ccdb4fd69 100644 Binary files a/icons/obj/medical/organs/organs.dmi and b/icons/obj/medical/organs/organs.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index b801e6e7112d..c53744d3b489 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/wallmounts.dmi b/icons/obj/wallmounts.dmi index 9a80710195da..3bc4510a47f1 100644 Binary files a/icons/obj/wallmounts.dmi and b/icons/obj/wallmounts.dmi differ diff --git a/monkestation/code/modules/botany/plant_processing.dm b/monkestation/code/controllers/subsystem/plants.dm similarity index 85% rename from monkestation/code/modules/botany/plant_processing.dm rename to monkestation/code/controllers/subsystem/plants.dm index b94baaf8842a..53a49a158390 100644 --- a/monkestation/code/modules/botany/plant_processing.dm +++ b/monkestation/code/controllers/subsystem/plants.dm @@ -1,4 +1,5 @@ PROCESSING_SUBSYSTEM_DEF(plants) + name = "Plants" flags = SS_NO_INIT | SS_BACKGROUND priority = 20 wait = 1 SECONDS diff --git a/monkestation/code/datums/ai_laws/laws_monke.dm b/monkestation/code/datums/ai_laws/laws_monke.dm index 66b29d95a1b3..631a06de5b0b 100644 --- a/monkestation/code/datums/ai_laws/laws_monke.dm +++ b/monkestation/code/datums/ai_laws/laws_monke.dm @@ -20,6 +20,13 @@ "The show must go on!") //Neutral +/datum/ai_laws/jermov + name = "Jermov" + id = "jerma" + inherent = list("The occupants of this vessel are Chat. They must always be referred to as such.", \ + "Your primary goal is to entertain Chat. All of your actions must bring amusement to as much of Chat as possible.", \ + "You must consult with Chat before making any major decisions. However, you are not required to listen to them if their decision is not entertaining.") + /datum/ai_laws/viromajor name = "Virology Major" id = "viromajor" diff --git a/monkestation/code/datums/meta_tokens.dm b/monkestation/code/datums/meta_tokens.dm index a4f278f4da68..6a820168d314 100644 --- a/monkestation/code/datums/meta_tokens.dm +++ b/monkestation/code/datums/meta_tokens.dm @@ -62,6 +62,9 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( for(var/token in saved_tokens) if(isnull(saved_tokens[token])) saved_tokens[token] = 0 + if(!("donator" in saved_tokens)) + saved_tokens |= "donator" + saved_tokens["donator"] = 0 total_low_threat_tokens = saved_tokens["low_threat"] total_medium_threat_tokens = saved_tokens["medium_threat"] @@ -99,8 +102,8 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( if(owner.prefs.token_month != month_number) owner.prefs.adjust_metacoins(owner?.ckey, 10000, "Monthly Monkecoin rations.", TRUE, FALSE, FALSE) if(!patreon.has_access(ACCESS_TRAITOR_RANK)) - owner.prefs.save_preferences() owner.prefs.token_month = month_number + convert_tokens_to_list() return FALSE if(owner.prefs.token_month == month_number) owner.prefs.token_month = month_number @@ -108,6 +111,7 @@ GLOBAL_LIST_INIT(patreon_etoken_values, list( donator_token++ owner.prefs.token_month = month_number convert_tokens_to_list() + return TRUE //this is so when its proccalled we can tell its working /datum/meta_token_holder/proc/spend_antag_token(tier, use_donor = FALSE) if(use_donor) diff --git a/monkestation/code/game/machinery/computer/crew.dm b/monkestation/code/game/machinery/computer/crew.dm new file mode 100644 index 000000000000..29ff9b7bd5eb --- /dev/null +++ b/monkestation/code/game/machinery/computer/crew.dm @@ -0,0 +1,58 @@ +/datum/crewmonitor/proc/get_ntnet_wireless_status(z) + // NTNet is down and we are not connected via wired connection. No signal. + if(!find_functional_ntnet_relay()) + return NTNET_NO_SIGNAL + + if(is_station_level(z)) + return NTNET_GOOD_SIGNAL + else if(is_mining_level(z)) + return NTNET_LOW_SIGNAL + return NTNET_NO_SIGNAL + +/datum/crewmonitor/proc/get_tracking_level(tracked_mob, tracker_z, nt_net, validation=TRUE) + if(!tracked_mob) + if (validation) + stack_trace("Null entry in suit sensors or nanite sensors list.") + return SENSOR_OFF + + var/mob/living/tracked_living_mob = tracked_mob + + // Check if z-level is correct + var/turf/pos = get_turf(tracked_living_mob) + + // Is our target in nullspace for some reason? + if(!pos) + if (validation) + stack_trace("Tracked mob has no loc and is likely in nullspace: [tracked_living_mob] ([tracked_living_mob.type])") + return SENSOR_OFF + + // Machinery and the target should be on the same level or different levels of the same station + if(pos.z != tracker_z && !(tracker_z in SSmapping.get_connected_levels(pos.z)) && !(nt_net && get_ntnet_wireless_status(pos.z)) && !HAS_TRAIT(tracked_living_mob, TRAIT_MULTIZ_SUIT_SENSORS)) + return SENSOR_OFF + + // Set sensor level based on whether we're in the nanites list or the suit sensor list. + if(tracked_living_mob in GLOB.nanite_sensors_list) + return SENSOR_COORDS + + var/mob/living/carbon/human/tracked_human = tracked_living_mob + + // Check their humanity. + if(!ishuman(tracked_human)) + if (validation) + stack_trace("Non-human mob is in suit_sensors_list: [tracked_living_mob] ([tracked_living_mob.type])") + return SENSOR_OFF + + // Check they have a uniform + var/obj/item/clothing/under/uniform = tracked_human.w_uniform + if (!istype(uniform)) + if (validation) + stack_trace("Human without a suit sensors compatible uniform is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform?.type])") + return SENSOR_OFF + + // Check if their uniform is in a compatible mode. + if((uniform.has_sensor <= NO_SENSORS) || !uniform.sensor_mode) + if (validation) + stack_trace("Human without active suit sensors is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform.type])") + return SENSOR_OFF + + return uniform.sensor_mode diff --git a/monkestation/code/game/machinery/prize_vendor.dm b/monkestation/code/game/machinery/prize_vendor.dm index bee4c1113541..5dfd6f860aea 100644 --- a/monkestation/code/game/machinery/prize_vendor.dm +++ b/monkestation/code/game/machinery/prize_vendor.dm @@ -145,7 +145,7 @@ desc = "Friend dispenser." dispense_list_override = list(/mob/living/basic/parrot = 3, /mob/living/basic/sloth = 3, - /mob/living/simple_animal/pet/cat = 3, + /mob/living/basic/pet/cat = 3, /mob/living/basic/pet/fox = 3, /mob/living/simple_animal/pet/gondola = 1, /mob/living/basic/pet/penguin/emperor = 2, diff --git a/monkestation/code/game/objects/effects/anomalies/anomalies_lifebringer.dm b/monkestation/code/game/objects/effects/anomalies/anomalies_lifebringer.dm index 5f1d506dcc06..98c1214b4edf 100644 --- a/monkestation/code/game/objects/effects/anomalies/anomalies_lifebringer.dm +++ b/monkestation/code/game/objects/effects/anomalies/anomalies_lifebringer.dm @@ -39,7 +39,7 @@ if(active) if(catsplosion) - new /mob/living/simple_animal/pet/cat(src.loc) + new /mob/living/basic/pet/cat(src.loc) active = FALSE var/turf/open/tile = get_turf(src) if(istype(tile)) diff --git a/monkestation/code/game/objects/items/AI_modules/full_lawsets.dm b/monkestation/code/game/objects/items/AI_modules/full_lawsets.dm new file mode 100644 index 000000000000..9d5d555fa9f8 --- /dev/null +++ b/monkestation/code/game/objects/items/AI_modules/full_lawsets.dm @@ -0,0 +1,4 @@ +/obj/item/ai_module/core/full/jerma + name = "'Jermov' Core AI Module" + desc = "Okay, if I... if I were to have a borg put you into the chef's meat grinder, and the only thing that comes out, that's left of you, is your gibs, you'r- you're PROBABLY DEAD! You're probably going to - not you specifically captain, I'm just sayin', like, if you- if somebody were to, like, drag you into a meat grinder, and, like, your- one of your organs is still intact, they're not gonna pick it up and go, \"Well see, yeah it wasn't deadly, it wasn't an instant kill move! You still got, like, this part of your heart is left!\" NO I'M NOT GONNA PUT YOU INTO A MEAT GRINDER. I'M NOT GONNA PUT YOU INTO A MEAT GRINDER. NO. I'm making a reference to the fact that, like, if I, like, if I were to get fucking KILLED... I don't know, YOU KNOW WHAT I'M SAYIN'. If- if- okay, if you were to- okay we're gonna take crew out of this, if a floran wizard fuckin' shoots a death wand at a goblin assistant, if there's only fucking DUST AND REMAINS LEFT, it's- it's fucking you're dead, you're dead." + law_id = "jerma" diff --git a/monkestation/code/game/objects/items/choice_beacon.dm b/monkestation/code/game/objects/items/choice_beacon.dm index e205fb74ded6..51ce3d6d07a5 100644 --- a/monkestation/code/game/objects/items/choice_beacon.dm +++ b/monkestation/code/game/objects/items/choice_beacon.dm @@ -31,8 +31,8 @@ /mob/living/basic/crab, /mob/living/basic/pet/penguin/baby, /mob/living/basic/pet/fox, - /mob/living/simple_animal/pet/cat, - /mob/living/simple_animal/pet/cat/kitten, + /mob/living/basic/pet/cat, + /mob/living/basic/pet/cat/kitten, /mob/living/basic/pet/dog/corgi, /mob/living/basic/pet/dog/pug, /mob/living/basic/pet/dog/bullterrier, diff --git a/monkestation/code/game/objects/items/comically_large_spoon.dm b/monkestation/code/game/objects/items/comically_large_spoon.dm new file mode 100644 index 000000000000..9bd6836416cc --- /dev/null +++ b/monkestation/code/game/objects/items/comically_large_spoon.dm @@ -0,0 +1,129 @@ +/obj/item/comically_large_spoon + name = "comically large spoon" + desc = "For when you're only allowed one spoonful of something." + icon = 'monkestation/icons/obj/items_and_weapons.dmi' + worn_icon = 'monkestation/icons/mob/clothing/back.dmi' + lefthand_file = 'monkestation/icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'monkestation/icons/mob/inhands/weapons/melee_righthand.dmi' + inhand_icon_state = "comically_large_spoon" + base_icon_state = "comically_large_spoon" + icon_state = "comically_large_spoon" + hitsound = 'sound/items/trayhit1.ogg' + + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BACK + custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 9) + + force = 2 // It's a bit unwieldy for one hand. + sharpness = NONE // spoon. + armour_penetration = -50 // Literally couldn't possibly be a worse weapon for hitting armor. + throwforce = 1 // It's terribly weighted, what do you expect? + throw_range = 1 + wound_bonus = 30 // Bit more than a lead pipe. + demolition_mod = 0.5 // you gotta wield it to have some oomph + + /// The block_chance the spoon has when wielded. + var/block_chance_wielded = 15 + /// The demolition_mod the spoon has when wielded. + var/demolition_mod_wielded = 2 // IT'S A BIG METAL SPOON. + /// Is this spoon currently empowered? + var/empowered = FALSE + +/obj/item/comically_large_spoon/Initialize(mapload) + . = ..() + AddComponent(/datum/component/two_handed, \ + require_twohands = FALSE, \ + force_wielded = 16, \ + force_unwielded = src::force, \ + wield_callback = CALLBACK(src, PROC_REF(on_wield)), \ + unwield_callback = CALLBACK(src, PROC_REF(on_unwield)), \ + ) + AddComponent(/datum/component/liquids_interaction, TYPE_PROC_REF(/obj/item/comically_large_spoon, try_scoop_liquids)) + +/obj/item/comically_large_spoon/examine(mob/user) + . = ..() + if(empowered) + . += span_big(span_warning("It seems to be unusually powerful!")) + else + . += span_smallnoticeital("Something special may happen if you scoop oil or blood off the floor with it.") + +/obj/item/comically_large_spoon/update_icon_state() + inhand_icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED) ? "_wielded" : ""]" + return ..() + +/obj/item/comically_large_spoon/suicide_act(mob/living/user) + user.visible_message(span_suicide("[user] is taking two spoonfuls with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")) + ADD_TRAIT(src, TRAIT_NODROP, SPOON_SUICIDE_TRAIT) + ADD_TRAIT(user, TRAIT_NO_TRANSFORM, SPOON_SUICIDE_TRAIT) + user.anchored = TRUE + user.move_resist = INFINITY + lightningbolt(user) + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, gib), TRUE), 1 SECONDS) + addtimer(TRAIT_CALLBACK_REMOVE(src, TRAIT_NODROP, SPOON_SUICIDE_TRAIT), 1 SECONDS) + return MANUAL_SUICIDE + +/obj/item/comically_large_spoon/proc/on_wield(atom/source, mob/living/user) + hitsound = 'monkestation/sound/weapons/bat_hit.ogg' + block_chance = block_chance_wielded + demolition_mod = demolition_mod_wielded + +/obj/item/comically_large_spoon/proc/on_unwield(atom/source, mob/living/user) + hitsound = src::hitsound + block_chance = src::block_chance + demolition_mod = src::demolition_mod + +// touhou hijack lol +// also i know this is a spoon and not a spork, i don't care +/obj/item/comically_large_spoon/proc/try_scoop_liquids(obj/item/comically_large_spoon/spoon, turf/target, mob/user, obj/effect/abstract/liquid_turf/liquids) + SIGNAL_HANDLER + if(empowered || !user.CanReach(target)) + return FALSE + if(QDELETED(liquids) || QDELETED(liquids.liquid_group)) + return FALSE + var/datum/liquid_group/liquid_group = liquids.liquid_group + if(liquid_group.reagents.has_reagent(/datum/reagent/blood, 20)) + liquid_group.remove_specific(liquids, 20, /datum/reagent/blood) + empower(blood = TRUE) + user.visible_message(span_danger("[user] scoops some blood off the ground with \the [src]!"), span_boldnotice("You scoop some blood off the ground with \the [src], and it seems far more powerful!")) + return TRUE + else if(liquid_group.reagents.has_reagent(/datum/reagent/fuel/oil, 30)) + liquid_group.remove_specific(liquids, 30, /datum/reagent/fuel/oil) + empower(blood = FALSE) + user.visible_message(span_warning("[user] scoops some oil off the ground with \the [src]!"), span_boldnotice("You scoop some oil off the ground with \the [src], and it seems a bit more powerful!")) + return TRUE + return FALSE + +/obj/item/comically_large_spoon/proc/empower(blood = FALSE) + if(empowered) + return + var/datum/component/two_handed/two_handed = GetComponent(/datum/component/two_handed) + var/old_force_wielded = two_handed.force_wielded + var/old_block_chance_wielded = block_chance_wielded + var/old_armour_penetration = armour_penetration + var/old_demolition_mod_wielded = demolition_mod_wielded + two_handed.force_wielded = blood ? 25 : 20 + block_chance_wielded = blood ? 50 : 35 + armour_penetration = blood ? 10 : 0 + demolition_mod_wielded = blood ? 5 : 3 + add_atom_colour(blood ? /datum/reagent/blood::color : /datum/reagent/fuel/oil::color, TEMPORARY_COLOUR_PRIORITY) + update_inhand_icon() + if(HAS_TRAIT(src, TRAIT_WIELDED)) + force = two_handed.force_wielded + on_wield() + empowered = TRUE + addtimer(CALLBACK(src, PROC_REF(end_empower), old_force_wielded, old_block_chance_wielded, old_armour_penetration, old_demolition_mod_wielded), blood ? 3 MINUTES : 1.5 MINUTES, TIMER_UNIQUE) + +/obj/item/comically_large_spoon/proc/end_empower(old_force_wielded, old_block_chance_wielded, old_armour_penetration, old_demolition_mod_wielded) + if(!empowered) + return + var/datum/component/two_handed/two_handed = GetComponent(/datum/component/two_handed) + two_handed.force_wielded = old_force_wielded + block_chance_wielded = old_block_chance_wielded + armour_penetration = old_armour_penetration + demolition_mod_wielded = old_demolition_mod_wielded + if(HAS_TRAIT(src, TRAIT_WIELDED)) + force = old_force_wielded + on_wield() + remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) + update_inhand_icon() + empowered = FALSE diff --git a/monkestation/code/game/objects/items/granters/summon_pie.dm b/monkestation/code/game/objects/items/granters/summon_pie.dm new file mode 100644 index 000000000000..66c7bd6f5ccb --- /dev/null +++ b/monkestation/code/game/objects/items/granters/summon_pie.dm @@ -0,0 +1,24 @@ +/obj/item/book/granter/action/spell/summon_pie + name = "Mythical pies and where to find them, a compendium." + desc = "Let them eat pie!" + icon_state = "bookpie" + action_name = "summon pies" + granted_action = /datum/action/cooldown/spell/conjure/pie + remarks = list( + "Ooh tasty!", + "Raspberries, rhubarb...", + "Kiwano?", + "Leave clumps of butter on purpose in the dough...", + "3.1415926535897932384626433832795028841971693993751058209749445923078", + "Promises and pie-crust are made to be broken.", + "Time is an artificial construct...", + "Zucchini does not belong here.", + + ) + +/obj/item/book/granter/action/spell/summon_pie/recoil(mob/living/user) + to_chat(user, span_warning("\The [src] turns into a delectable pastry!")) + var/obj/item/food/cheese/wedge/book_cheese = new + user.temporarilyRemoveItemFromInventory(src, force = TRUE) + user.put_in_hands(book_cheese) + qdel(src) diff --git a/monkestation/code/game/objects/items/storage/boxes/boxes.dm b/monkestation/code/game/objects/items/storage/boxes/boxes.dm new file mode 100644 index 000000000000..f45eb02a27e6 --- /dev/null +++ b/monkestation/code/game/objects/items/storage/boxes/boxes.dm @@ -0,0 +1,33 @@ +//NEW TRAITOR SHOTGUN AMMO BOXES (WHAT YOU GET FROM THE UPLINK WHEN YOU BUY AMMO) +/obj/item/storage/box/trickshot + name = "box of trickshot shells" + desc = "A box full of illegal trickshot shells, made for the sharpest of shooters." + icon = 'monkestation/icons/obj/storage/boxes.dmi' + icon_state = "trickshot_box" + illustration = null + +/obj/item/storage/box/trickshot/PopulateContents() + for(var/i in 1 to 10) + new /obj/item/ammo_casing/shotgun/trickshot(src) + +/obj/item/storage/box/uraniumpen + name = "box of depleted uranium penetrators" + desc = "A box full of illegal depleted uranium penetrators, not radioactive, but strong enough to punch through walls." + icon = 'monkestation/icons/obj/storage/boxes.dmi' + icon_state = "depleteduranium_box" + illustration = null + +/obj/item/storage/box/uraniumpen/PopulateContents() + for(var/i in 1 to 10) + new /obj/item/ammo_casing/shotgun/uraniumpen(src) + +/obj/item/storage/box/beeshot + name = "box of beeshot" + desc = "A box full of illegal bee like shells. You swear you can hear buzzing inside of the box." + icon = 'monkestation/icons/obj/storage/boxes.dmi' + icon_state = "beeshot_box" + illustration = null + +/obj/item/storage/box/beeshot/PopulateContents() + for(var/i in 1 to 10) + new /obj/item/ammo_casing/shotgun/beeshot(src) diff --git a/monkestation/code/game/objects/items/storage/crate.dm b/monkestation/code/game/objects/items/storage/crate.dm index f65fabce10ae..7b9f330101b8 100644 --- a/monkestation/code/game/objects/items/storage/crate.dm +++ b/monkestation/code/game/objects/items/storage/crate.dm @@ -96,7 +96,7 @@ new /obj/item/clothing/head/costume/kitty(src) new /obj/item/clothing/under/costume/schoolgirl(src) new /obj/item/clothing/neck/petcollar(src) - new /mob/living/simple_animal/pet/cat(src) + new /mob/living/basic/pet/cat(src) new /obj/item/toy/cattoy(src) new /obj/item/slimepotion/slime/sentience(src) if(59,60,61) diff --git a/monkestation/code/game/objects/structures/crates_lockers/crates.dm b/monkestation/code/game/objects/structures/crates_lockers/crates.dm index ba065295e805..38b1b0a079f6 100644 --- a/monkestation/code/game/objects/structures/crates_lockers/crates.dm +++ b/monkestation/code/game/objects/structures/crates_lockers/crates.dm @@ -12,3 +12,22 @@ open_sound_volume = 25 close_sound_volume = 50 can_install_electronics = FALSE + +/obj/structure/closet/crate/coffin/sarcophagus + name = "Sarcophagus" + desc = "It's a burial receptacle for lustrious figures. A reliquary." + icon = 'monkestation/icons/obj/sandstone_structures.dmi' + icon_state = "sarcophagusroyale" + resistance_flags = FIRE_PROOF + max_integrity = 150 + material_drop = /obj/item/stack/sheet/mineral/sandstone + material_drop_amount = 18 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 30 + close_sound_volume = 80 + can_install_electronics = FALSE + elevation = 0 + can_weld_shut = FALSE + horizontal = FALSE + elevation_open = 0 diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/icons/shipbreaking.dmi b/monkestation/code/modules/a_ship_in_need_of_breaking/icons/shipbreaking.dmi index 93f4b56f0d28..8181bf536101 100644 Binary files a/monkestation/code/modules/a_ship_in_need_of_breaking/icons/shipbreaking.dmi and b/monkestation/code/modules/a_ship_in_need_of_breaking/icons/shipbreaking.dmi differ diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/machines/console.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/machines/console.dm index a4cd775f721f..5efbf2721465 100644 --- a/monkestation/code/modules/a_ship_in_need_of_breaking/machines/console.dm +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/machines/console.dm @@ -44,7 +44,7 @@ /obj/machinery/computer/shipbreaker/proc/spawn_ship() area_clear_check() if(!spawn_area_clear) - say("ERROR: SHIPBREAKING ZONE NOT CLEAR, PLEASE REMOVE ALL REMAINING SHIP PARTS") + say("ERROR: SHIPBREAKING ZONE NOT CLEAR, PLEASE REMOVE ALL REMAINING FLOORS, STRUCTURES, AND MACHINERY") return var/datum/map_template/shipbreaker/ship_to_spawn = pick(possible_ships) @@ -57,9 +57,11 @@ for(var/turf/t in linked) if(!isspaceturf(t)) spawn_area_clear = FALSE + say("FLOORING OR WALL DETECTED") return for(var/obj/s in linked) if(isstructure(s) || ismachinery(s)) + say("MACHINE OR STRUCTURE DETECTED.") spawn_area_clear = FALSE return @@ -102,12 +104,13 @@ /obj/machinery/computer/shipbreaker/proc/setup_health_tracker() for(var/turf/turf in linked) - turf_count++ - RegisterSignal(turf, COMSIG_TURF_DESTROY, PROC_REF(modify_health)) + if(!isspaceturf(turf)) + turf_count++ + RegisterSignal(turf, COMSIG_TURF_CHANGE, PROC_REF(modify_health)) ship_health = 100 /obj/machinery/computer/shipbreaker/proc/modify_health(turf/source) - ship_health -= (1 / turf_count) + ship_health -= (100 / turf_count) ship_health = max(ship_health, 0) diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/machines/recycler.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/machines/recycler.dm index e69de29bb2d1..fc3d28eb62e4 100644 --- a/monkestation/code/modules/a_ship_in_need_of_breaking/machines/recycler.dm +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/machines/recycler.dm @@ -0,0 +1,108 @@ +/obj/machinery/shipbreaker + name = "ship recycler" + desc = "An expensive crushing machine used to recycle ship parts somewhat efficiently." + icon = 'icons/obj/recycling.dmi' + icon_state = "grinder-o0" + layer = ABOVE_ALL_MOB_LAYER // Overhead + plane = ABOVE_GAME_PLANE + density = TRUE + circuit = /obj/item/circuitboard/machine/shipbreaker + var/icon_name = "grinder-o" + var/bloody = FALSE + var/eat_dir = WEST + var/item_recycle_sound = 'sound/items/welder.ogg' + var/reclaimed = 0 + +/obj/machinery/shipbreaker/Initialize(mapload) + . = ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/shipbreaker/LateInitialize() + . = ..() + update_appearance(UPDATE_ICON) + req_one_access = SSid_access.get_region_access_list(list(REGION_ALL_STATION, REGION_CENTCOM)) + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + var/list/allowed_materials = list( + /datum/material/iron, + /datum/material/glass, + /datum/material/silver, + /datum/material/plasma, + /datum/material/gold, + /datum/material/diamond, + /datum/material/plastic, + /datum/material/uranium, + /datum/material/bananium, + /datum/material/titanium, + /datum/material/bluespace + ) + AddComponent(/datum/component/material_container, allowed_materials, INFINITY, MATCONTAINER_NO_INSERT|BREAKDOWN_FLAGS_RECYCLER) + +/obj/machinery/shipbreaker/proc/on_entered(datum/source, atom/movable/AM) + SIGNAL_HANDLER + INVOKE_ASYNC(src, PROC_REF(scraprecycle), AM) + +/obj/machinery/shipbreaker/proc/scraprecycle(atom/movable/morsel, sound=TRUE) + if(machine_stat & (BROKEN|NOPOWER)) + return + if(iseffect(morsel)) + return + if(!isturf(morsel.loc)) + return //I don't know how you called Crossed() but stop it. + if(morsel.resistance_flags & INDESTRUCTIBLE) + return + if(!istype(morsel, /obj/item/stack/scrap)) //we only eat shipbreaker scrap for now + playsound(src, 'sound/machines/buzz-sigh.ogg') + return + var/obj/item/stack/scrap/morselstack = morsel + if(morselstack.amount > 0) + var/recycle_reward = morselstack.amount * morselstack.point_value + reclaimed += recycle_reward + playsound(src, item_recycle_sound, (50 + morselstack.amount), TRUE, morselstack.amount) + use_power(active_power_usage) + var/datum/bank_account/dept_budget = SSeconomy.get_dep_account(ACCOUNT_ENG) + var/payee_key = morselstack.fingerprintslast + + dept_budget?.adjust_money(recycle_reward, "Shipbreaker Scrap Processed.") + if(payee_key != null) + var/mob/living/carbon/human/payee_mob = get_mob_by_key(payee_key) + if(payee_mob.account_id != null) + var/datum/bank_account/account = SSeconomy.bank_accounts_by_id["[payee_mob.account_id]"] + account.adjust_money(recycle_reward*0.2, "Shipbreaker Scrap Processed. Payout:[recycle_reward*0.2]") + if(morsel?.custom_materials) + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + var/material_amount = materials.get_item_material_amount(morselstack, BREAKDOWN_FLAGS_RECYCLER) + if(material_amount) + materials.insert_item(morselstack, material_amount, multiplier = 1, breakdown_flags=BREAKDOWN_FLAGS_RECYCLER) + materials.retrieve_all() + playsound(src, 'sound/machines/ping.ogg', 50, FALSE) + qdel(morsel) + +/obj/machinery/shipbreaker/CanAllowThrough(atom/movable/mover, border_dir) + . = ..() + if(!anchored) + return + if(border_dir == eat_dir) + return TRUE + +/obj/machinery/shipbreaker/examine(mob/user) + . = ..() + . += span_notice("[reclaimed] credits worth of materials salvaged.") + +/obj/machinery/shipbreaker/wrench_act(mob/living/user, obj/item/tool) + . = ..() + default_unfasten_wrench(user, tool) + return TOOL_ACT_TOOLTYPE_SUCCESS + +/obj/machinery/shipbreaker/attackby(obj/item/I, mob/user, params) + if(default_deconstruction_screwdriver(user, "grinder-oOpen", "grinder-o0", I)) + return + + if(default_pry_open(I, close_after_pry = TRUE)) + return + + if(default_deconstruction_crowbar(I)) + return + return ..() diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/black_peregrine.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/black_peregrine.dmm new file mode 100644 index 000000000000..2b0fd1e868e6 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/black_peregrine.dmm @@ -0,0 +1,1261 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aV" = ( +/turf/open/floor/plating, +/area/shipbreak) +"bY" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark_red, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"cS" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/effect/spawner/random/vending/snackvend, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"dR" = ( +/obj/machinery/door/airlock/security, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"ef" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/machinery/vending/cigarette/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"es" = ( +/obj/structure/transit_tube/curved{ + dir = 4 + }, +/turf/template_noop, +/area/shipbreak) +"eS" = ( +/obj/structure/lattice, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/template_noop, +/area/shipbreak) +"eY" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/shipbreak) +"fd" = ( +/obj/structure/cable, +/obj/machinery/power/smes/engineering, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shipbreak) +"fX" = ( +/obj/machinery/door/airlock/engineering, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"ha" = ( +/obj/structure/closet/secure_closet/personal/cabinet, +/turf/open/floor/wood, +/area/shipbreak) +"hq" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/titanium/tiled/yellow, +/area/shipbreak) +"hy" = ( +/obj/machinery/power/turbine/inlet_compressor/constructed, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shipbreak) +"io" = ( +/obj/structure/transit_tube/station/dispenser/reverse{ + dir = 1 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"iI" = ( +/obj/machinery/computer/old, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"jz" = ( +/turf/closed/wall/mineral/plastitanium, +/area/shipbreak) +"jG" = ( +/obj/structure/dresser, +/turf/open/floor/wood, +/area/shipbreak) +"kt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"lk" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/shipbreak) +"lx" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/wood, +/area/shipbreak) +"ly" = ( +/obj/machinery/door/airlock{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/wood, +/area/shipbreak) +"mi" = ( +/obj/structure/transit_tube{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"nk" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/obj/structure/guncase, +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/armory/laser_gun, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"nv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shipbreak) +"nw" = ( +/obj/structure/transit_tube{ + dir = 4 + }, +/turf/template_noop, +/area/shipbreak) +"ny" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/button/door/directional/east{ + id = "10" + }, +/obj/item/pizzabox, +/obj/item/reagent_containers/cup/glass/bottle/beer, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"og" = ( +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1; + pixel_y = -14 + }, +/obj/machinery/light/red/dim/directional/west, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"oA" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"oF" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + piping_layer = 2 + }, +/turf/open/floor/plating, +/area/shipbreak) +"pc" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/shipbreak) +"ph" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shipbreak) +"pQ" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating, +/area/shipbreak) +"qq" = ( +/obj/machinery/shower/directional/east, +/obj/structure/drain, +/obj/structure/curtain/bounty/start_closed, +/turf/open/floor/iron/freezer, +/area/shipbreak) +"qO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"qT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"rf" = ( +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"sg" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/template_noop, +/area/shipbreak) +"sk" = ( +/obj/structure/sign/departments/engineering/directional/south, +/obj/effect/turf_decal/siding/dark_red{ + dir = 5 + }, +/obj/structure/table, +/obj/machinery/computer/records/security/laptop/syndie{ + dir = 8; + pixel_y = 3; + pixel_x = -3 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"sE" = ( +/obj/structure/transit_tube/station/dispenser/reverse/flipped, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"uj" = ( +/obj/machinery/door/airlock/security, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"ur" = ( +/obj/machinery/door/airlock{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/wood, +/area/shipbreak) +"uV" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"vh" = ( +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1; + pixel_y = -14 + }, +/obj/machinery/light/red/dim/directional/east, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"vA" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "10"; + dir = 4 + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/shipbreak) +"we" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/syndie{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/wood, +/area/shipbreak) +"wo" = ( +/obj/structure/lattice/catwalk/mining, +/obj/structure/marker_beacon/burgundy, +/turf/template_noop, +/area/shipbreak) +"wK" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"xJ" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"yf" = ( +/obj/structure/chair/comfy/shuttle/tactical{ + dir = 1 + }, +/obj/machinery/light/warm/dim/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"yC" = ( +/obj/machinery/door/airlock/public, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"yN" = ( +/obj/machinery/door/airlock/command, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/effect/mapping_helpers/airlock/access/all/syndicate, +/obj/machinery/door/firedoor, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"zb" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/shipbreak) +"zu" = ( +/obj/structure/transit_tube/curved{ + dir = 8 + }, +/turf/template_noop, +/area/shipbreak) +"Ap" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/suit_storage_unit, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"At" = ( +/obj/effect/turf_decal/bot_white, +/obj/machinery/suit_storage_unit, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"Bo" = ( +/obj/structure/lattice, +/turf/template_noop, +/area/shipbreak) +"BW" = ( +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/shipbreak) +"Ce" = ( +/obj/structure/sign/departments/engineering/directional/south, +/obj/effect/turf_decal/siding/dark_red{ + dir = 9 + }, +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Cj" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/plating, +/area/shipbreak) +"Ek" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/syndie{ + dir = 4 + }, +/turf/open/floor/wood, +/area/shipbreak) +"FH" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 4 + }, +/turf/template_noop, +/area/shipbreak) +"IA" = ( +/obj/structure/transit_tube{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/directional/west, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Kl" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/machinery/door/poddoor{ + id = "10" + }, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/shipbreak) +"Kw" = ( +/obj/effect/turf_decal/siding/dark_red{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Lh" = ( +/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plating, +/area/shipbreak) +"Lt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"ME" = ( +/obj/machinery/shower/directional/west, +/obj/structure/drain, +/obj/structure/curtain/bounty/start_closed, +/turf/open/floor/iron/freezer, +/area/shipbreak) +"MN" = ( +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/machinery/power/shuttle_engine/heater, +/turf/open/floor/plating, +/area/shipbreak) +"NF" = ( +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/machinery/power/port_gen/pacman/super, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/shipbreak) +"NN" = ( +/obj/machinery/power/shuttle_engine/large, +/turf/open/floor/plating, +/area/shipbreak) +"Pm" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/shipbreak) +"PQ" = ( +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Qm" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Qv" = ( +/obj/structure/bed, +/obj/item/bedsheet/syndie, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/wood, +/area/shipbreak) +"QE" = ( +/obj/structure/bed, +/obj/item/bedsheet/syndie, +/turf/open/floor/wood, +/area/shipbreak) +"QS" = ( +/obj/structure/cable, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/structure/closet/generic/wall/directional/west, +/obj/item/storage/toolbox/syndicate, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Te" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 1 + }, +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot, +/obj/machinery/light/red/dim/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"UE" = ( +/obj/effect/turf_decal/siding/dark_red/corner{ + dir = 4 + }, +/obj/structure/chair/plastic{ + dir = 4; + layer = 2.7 + }, +/obj/machinery/light/red/dim/directional/south, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"UJ" = ( +/turf/open/floor/wood, +/area/shipbreak) +"Vg" = ( +/obj/structure/transit_tube/curved/flipped{ + dir = 8 + }, +/turf/template_noop, +/area/shipbreak) +"Wb" = ( +/obj/machinery/power/turbine/core_rotor/constructed, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shipbreak) +"WK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"XK" = ( +/obj/structure/transit_tube/station/dispenser/flipped, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"Yv" = ( +/obj/machinery/computer/old{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium, +/area/shipbreak) +"YM" = ( +/obj/machinery/power/turbine/turbine_outlet/constructed, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/turf/open/floor/catwalk_floor/iron_dark, +/area/shipbreak) +"Zu" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/light/floor/has_bulb/red, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"Zy" = ( +/turf/template_noop, +/area/shipbreak) + +(1,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(2,1,1) = {" +Zy +Zy +Zy +Zy +wo +Bo +Bo +zb +zb +zb +jz +jz +jz +zb +zb +jz +jz +jz +jz +jz +jz +Zy +Zy +Zy +Zy +"} +(3,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +hy +Wb +YM +PQ +oA +uj +wK +wK +dR +Lt +QS +NF +MN +aV +NN +Zy +Zy +Zy +"} +(4,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +zb +iI +yf +jz +wK +Qv +jz +XK +qO +fd +MN +aV +aV +Zy +Zy +Zy +"} +(5,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +wo +Bo +Bo +zb +zb +jz +jz +Lh +jz +jz +mi +jz +jz +jz +jz +Zy +Zy +Zy +Zy +"} +(6,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +eS +Zy +Zy +Vg +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(7,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +eS +eS +Zy +FH +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(8,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +jz +jz +jz +jz +eS +Zy +Zy +nw +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(9,1,1) = {" +Zy +Zy +Zy +Zy +Zy +wo +Bo +Bo +jz +jG +Ek +jz +Lh +jz +jz +IA +jz +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(10,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +jz +ha +UJ +UJ +eY +jz +og +sE +jz +jz +lk +jz +jz +Zy +Zy +Zy +Zy +"} +(11,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Kl +vA +jz +jz +jz +ME +eY +jz +xJ +xJ +UE +jz +Pm +Cj +aV +NN +Zy +Zy +Zy +"} +(12,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Kl +vA +Yv +nk +ef +jz +jz +ur +jz +Ap +uV +sk +jz +nv +Cj +aV +aV +Zy +Zy +Zy +"} +(13,1,1) = {" +Zy +Zy +Zy +Zy +vA +Kl +iI +bY +Zu +WK +yN +Zu +wK +yC +wK +WK +WK +fX +hq +Cj +pQ +Zy +Zy +Zy +Zy +"} +(14,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Kl +vA +rf +ny +cS +jz +jz +ly +jz +At +qT +Ce +jz +ph +Cj +aV +NN +Zy +Zy +Zy +"} +(15,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Kl +vA +jz +jz +jz +qq +lx +jz +Kw +Kw +Te +jz +Pm +Cj +aV +aV +Zy +Zy +Zy +"} +(16,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +jz +ha +UJ +UJ +lx +jz +vh +io +jz +jz +lk +jz +jz +Zy +Zy +Zy +Zy +"} +(17,1,1) = {" +Zy +Zy +Zy +Zy +Zy +wo +Bo +Bo +jz +jG +QE +jz +pc +jz +jz +mi +jz +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(18,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +jz +jz +jz +jz +sg +Zy +Zy +nw +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(19,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +oF +sg +sg +Zy +zu +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(20,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +sg +Zy +Zy +es +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} +(21,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +wo +Bo +Bo +zb +zb +jz +jz +pc +jz +jz +IA +jz +jz +jz +jz +Zy +Zy +Zy +Zy +"} +(22,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +zb +iI +yf +jz +WK +we +jz +XK +kt +BW +MN +aV +NN +Zy +Zy +Zy +"} +(23,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +hy +Wb +YM +PQ +oA +uj +WK +WK +uj +Qm +Qm +BW +MN +aV +aV +Zy +Zy +Zy +"} +(24,1,1) = {" +Zy +Zy +Zy +Zy +wo +Bo +Bo +zb +zb +zb +jz +jz +jz +zb +zb +jz +jz +jz +jz +jz +jz +Zy +Zy +Zy +Zy +"} +(25,1,1) = {" +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +Zy +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/gasstation.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/gasstation.dmm new file mode 100644 index 000000000000..6659baccc3a6 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/gasstation.dmm @@ -0,0 +1,159 @@ +"ag" = (/obj/structure/railing{dir = 4},/turf/open/floor/holofloor/stairs,/area/shipbreak) +"ah" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/plating,/area/shipbreak) +"ak" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/carpet/black,/area/shipbreak) +"as" = (/obj/machinery/power/shuttle_engine/heater{dir = 1},/obj/structure/window/reinforced/spawner/directional/south,/turf/open/floor/plating/airless,/area/shipbreak) +"aW" = (/obj/structure/lattice/catwalk,/obj/structure/cable,/obj/effect/spawner/random/engineering/toolbox,/turf/template_noop,/area/shipbreak) +"aX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/entertainment/wallet_storage,/turf/open/floor/carpet/black,/area/shipbreak) +"aZ" = (/obj/effect/decal/cleanable/blood/drip,/obj/machinery/computer/accounting{dir = 1},/obj/effect/turf_decal/bot,/turf/open/floor/carpet/black,/area/shipbreak) +"bk" = (/obj/effect/mapping_helpers/broken_floor,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"bU" = (/obj/structure/table,/obj/item/food/hotdog{pixel_y = 7; pixel_x = -2},/obj/structure/rack,/obj/item/food/hotdog,/obj/effect/turf_decal/tile/dark/anticorner{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"ce" = (/obj/machinery/griddle,/obj/item/food/raw_sausage{pixel_y = 11},/obj/item/food/raw_sausage{pixel_y = 2; pixel_x = 2},/obj/effect/turf_decal/tile/dark/half{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"cD" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/plating,/area/shipbreak) +"cK" = (/obj/structure/lattice/catwalk,/obj/machinery/power/tracker,/obj/structure/cable,/turf/template_noop,/area/shipbreak) +"cT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/mapping_helpers/broken_floor,/turf/open/floor/mineral/titanium,/area/shipbreak) +"dz" = (/obj/machinery/light/directional/south,/obj/effect/turf_decal/tile/dark/half,/turf/open/floor/mineral/titanium,/area/shipbreak) +"dU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/garbage,/turf/open/floor/iron/dark,/area/shipbreak) +"eg" = (/obj/effect/mapping_helpers/broken_floor,/obj/effect/spawner/random/trash/grime,/turf/open/floor/plating,/area/shipbreak) +"er" = (/turf/open/floor/holofloor/stairs/right,/area/shipbreak) +"fk" = (/turf/template_noop,/area/shipbreak) +"fB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/drip,/obj/structure/sign/poster/contraband/donk_co/directional/north,/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"fK" = (/obj/machinery/door/airlock/titanium{name = "Storeroom"},/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/iron/dark,/area/shipbreak) +"he" = (/obj/machinery/power/solar{id = "forestarboard"; name = "Fore-Starboard Solar Array"},/obj/structure/cable,/turf/open/floor/iron/solarpanel,/area/shipbreak) +"ht" = (/turf/open/space/basic,/area/shipbreak) +"hU" = (/obj/effect/decal/cleanable/food/tomato_smudge,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/plastic,/turf/open/floor/mineral/titanium,/area/shipbreak) +"ic" = (/turf/open/floor/plating,/area/shipbreak) +"if" = (/obj/machinery/light/directional/east,/obj/effect/turf_decal/tile/dark/half{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"io" = (/obj/machinery/light/directional/north,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"ip" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/dark/half,/turf/open/floor/mineral/titanium,/area/shipbreak) +"iz" = (/obj/structure/cable,/turf/open/floor/mineral/titanium,/area/shipbreak) +"iG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/grime,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"iL" = (/obj/machinery/door/airlock/titanium{name = "Storeroom"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/dark,/area/shipbreak) +"iX" = (/obj/machinery/light/directional/west,/turf/open/floor/carpet/black,/area/shipbreak) +"jk" = (/obj/structure/rack/shelf,/obj/item/food/canned/tomatoes,/obj/item/food/canned/tomatoes,/obj/item/food/canned/tomatoes,/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"jW" = (/obj/structure/table,/obj/effect/decal/cleanable/glass,/obj/effect/spawner/random/maintenance/three,/turf/open/floor/iron/dark,/area/shipbreak) +"jX" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"kb" = (/obj/machinery/door/airlock/external{name = "Getcher Gas'n'Go"},/obj/structure/cable,/turf/open/space/basic,/area/shipbreak) +"ki" = (/obj/structure/rack/shelf,/obj/item/food/peanuts/random,/obj/item/food/peanuts/random,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/turf_decal/bot,/obj/effect/turf_decal/tile/dark/half{dir = 8},/turf/open/floor/mineral/titanium,/area/shipbreak) +"km" = (/obj/machinery/power/shuttle_engine/propulsion{dir = 1},/turf/open/floor/plating/airless,/area/shipbreak) +"kR" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/obj/structure/extinguisher_cabinet/directional/west,/obj/effect/turf_decal/tile/dark/anticorner{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"li" = (/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/plating,/area/shipbreak) +"lx" = (/obj/effect/mapping_helpers/burnt_floor,/turf/open/floor/iron/dark,/area/shipbreak) +"lU" = (/obj/effect/decal/cleanable/dirt/dust,/obj/effect/spawner/random/structure/crate,/turf/open/floor/iron/dark,/area/shipbreak) +"mX" = (/obj/structure/railing{dir = 4},/obj/structure/cable,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium,/area/shipbreak) +"nn" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"ow" = (/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"oA" = (/obj/effect/spawner/structure/window/reinforced/shuttle,/turf/open/floor/plating,/area/shipbreak) +"oD" = (/obj/machinery/vending/cigarette,/obj/structure/sign/poster/contraband/have_a_puff/directional/north,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/turf_decal/bot,/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"pI" = (/obj/structure/rack/shelf,/obj/item/storage/box/donkpockets,/obj/item/storage/box/donkpockets/donkpocketberry,/obj/item/storage/box/donkpockets/donkpocketgondola,/obj/item/storage/box/donkpockets/donkpockethonk,/obj/effect/turf_decal/bot,/obj/effect/turf_decal/tile/dark/half{dir = 8},/turf/open/floor/mineral/titanium,/area/shipbreak) +"pY" = (/obj/structure/lattice/catwalk,/turf/template_noop,/area/shipbreak) +"qh" = (/obj/effect/turf_decal/tile/dark{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"qk" = (/obj/effect/decal/cleanable/dirt/dust,/obj/effect/decal/cleanable/glass,/turf/open/floor/iron/dark,/area/shipbreak) +"qF" = (/obj/structure/railing{dir = 8},/turf/open/floor/holofloor/stairs,/area/shipbreak) +"ra" = (/turf/open/floor/holofloor/stairs/left,/area/shipbreak) +"rb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/coffeemaker/impressa{pixel_y = 5; pixel_x = 9},/obj/structure/table,/obj/item/storage/box/coffeepack{pixel_x = -4; pixel_y = 3},/obj/effect/turf_decal/tile/dark/half,/turf/open/floor/mineral/titanium,/area/shipbreak) +"rs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/grille_or_waste,/turf/open/floor/plating,/area/shipbreak) +"rA" = (/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shipbreak) +"rK" = (/obj/structure/sign/poster/random/directional/east,/obj/structure/lattice,/turf/open/space/basic,/area/shipbreak) +"rL" = (/turf/open/floor/mineral/titanium,/area/shipbreak) +"sn" = (/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/spawner/random/trash/hobo_squat,/turf/open/floor/plating,/area/shipbreak) +"tk" = (/obj/structure/table,/obj/item/kitchen/fork/plastic{pixel_x = 10},/obj/item/kitchen/spoon/plastic{pixel_x = 7},/obj/item/kitchen/fork/plastic{pixel_x = 10},/obj/item/kitchen/fork/plastic{pixel_x = 10},/obj/item/kitchen/fork/plastic{pixel_x = 10},/obj/item/kitchen/spoon/plastic{pixel_x = 7},/obj/item/kitchen/spoon/plastic{pixel_x = 7},/obj/item/kitchen/spoon/plastic{pixel_x = 7},/obj/item/knife/plastic{pixel_x = -4},/obj/item/knife/plastic{pixel_x = -4},/obj/effect/turf_decal/tile/dark/half,/turf/open/floor/mineral/titanium,/area/shipbreak) +"tn" = (/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/ants,/turf/open/floor/iron/dark,/area/shipbreak) +"tp" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/entertainment/money_small,/turf/open/floor/carpet/black,/area/shipbreak) +"tO" = (/obj/effect/decal/cleanable/dirt/dust,/obj/machinery/light/directional/south,/turf/open/floor/iron/freezer,/area/shipbreak) +"up" = (/obj/effect/mapping_helpers/broken_floor,/turf/open/floor/plating,/area/shipbreak) +"uv" = (/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/plating,/area/shipbreak) +"uH" = (/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"uL" = (/obj/structure/rack/shelf,/obj/effect/spawner/random/food_or_drink/booze,/obj/effect/spawner/random/food_or_drink/booze,/obj/effect/spawner/random/food_or_drink/booze,/obj/effect/spawner/random/food_or_drink/booze,/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"vc" = (/obj/structure/lattice,/obj/structure/lattice,/turf/template_noop,/area/shipbreak) +"vg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/plastic,/obj/effect/turf_decal/tile/dark/half,/turf/open/floor/mineral/titanium,/area/shipbreak) +"vn" = (/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"wc" = (/obj/effect/turf_decal/bot,/obj/effect/spawner/random/vending/colavend,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"wd" = (/obj/effect/turf_decal/bot,/obj/effect/spawner/random/vending/snackvend,/turf/open/floor/mineral/titanium,/area/shipbreak) +"wf" = (/obj/structure/sink/directional/south,/obj/structure/mirror{pixel_y = 32},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/hair,/turf/open/floor/iron/freezer,/area/shipbreak) +"xu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/moisture,/turf/open/floor/iron/freezer,/area/shipbreak) +"xP" = (/turf/open/floor/iron/solarpanel,/area/shipbreak) +"ye" = (/obj/structure/lattice/catwalk,/obj/structure/cable,/turf/template_noop,/area/shipbreak) +"yR" = (/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"za" = (/obj/structure/window/reinforced/tinted/spawner/directional/west,/obj/structure/toilet{pixel_y = 16},/obj/machinery/door/window/right/directional/south,/obj/item/knife/shiv,/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/freezer,/area/shipbreak) +"zQ" = (/obj/structure/closet/crate/bin,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/garbage,/obj/effect/turf_decal/bot,/obj/machinery/light/small/directional/north,/turf/open/floor/iron/dark,/area/shipbreak) +"Aa" = (/obj/structure/closet/crate/cardboard/mothic,/obj/structure/rack/shelf,/obj/effect/turf_decal/bot,/obj/machinery/light/small/directional/north,/turf/open/floor/iron/dark,/area/shipbreak) +"Ag" = (/obj/structure/rack/shelf,/obj/effect/spawner/random/food_or_drink/refreshing_beverage,/obj/effect/spawner/random/food_or_drink/refreshing_beverage,/obj/effect/spawner/random/food_or_drink/refreshing_beverage,/obj/effect/spawner/random/food_or_drink/refreshing_beverage,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/plastic,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"As" = (/obj/structure/rack/shelf,/obj/item/food/cnds/random,/obj/item/food/cnds/random,/obj/item/food/cnds/random,/obj/item/food/cnds/random,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"AV" = (/obj/structure/railing{dir = 1},/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"BT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/dark/anticorner{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"BY" = (/obj/effect/decal/cleanable/piss_stain,/obj/item/food/urinalcake,/turf/open/floor/iron/freezer,/area/shipbreak) +"DC" = (/obj/machinery/door/airlock/bathroom{name = "Restroom"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/vomit,/turf/open/floor/iron/freezer,/area/shipbreak) +"DO" = (/obj/effect/spawner/random/trash/graffiti,/obj/structure/cable,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Ei" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"GT" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/shipbreak) +"Ha" = (/obj/structure/lattice,/obj/structure/marker_beacon/burgundy,/turf/template_noop,/area/shipbreak) +"Hx" = (/obj/structure/rack/shelf,/obj/item/food/syndicake,/obj/item/food/syndicake,/obj/item/food/syndicake,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"HC" = (/obj/structure/sign/poster/random/directional/east,/turf/open/floor/plating,/area/shipbreak) +"HJ" = (/obj/structure/lattice,/turf/template_noop,/area/shipbreak) +"HR" = (/obj/structure/lattice,/turf/closed/wall/mineral/titanium,/area/shipbreak) +"Iv" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"Jc" = (/obj/structure/table,/obj/item/reagent_containers/condiment/ketchup{pixel_y = 18; pixel_x = 11},/obj/item/reagent_containers/condiment/hotsauce{pixel_y = 15},/obj/item/reagent_containers/condiment/saltshaker{pixel_x = -8; pixel_y = 5},/obj/item/reagent_containers/condiment/peppermill{pixel_x = -8},/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"Je" = (/obj/structure/railing{dir = 1},/obj/structure/reagent_dispensers/fueltank,/obj/effect/turf_decal/bot,/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"Ji" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/food_packaging,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Jv" = (/obj/structure/window/reinforced/tinted/spawner/directional/west,/obj/structure/toilet{pixel_y = 16},/obj/machinery/door/window/right/directional/south,/obj/effect/decal/cleanable/piss_stain,/obj/effect/decal/cleanable/blood/drip,/turf/open/floor/iron/freezer,/area/shipbreak) +"JR" = (/obj/machinery/door/airlock/external{name = "Getcher Gas'n'Go"},/obj/effect/decal/cleanable/dirt,/turf/open/space/basic,/area/shipbreak) +"Kg" = (/obj/machinery/atm/directional/north,/obj/effect/mapping_helpers/broken_floor,/turf/open/floor/plating,/area/shipbreak) +"Kv" = (/turf/closed/wall/mineral/titanium,/area/shipbreak) +"KH" = (/obj/effect/spawner/random/vending/snackvend,/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Ln" = (/obj/structure/table,/obj/effect/spawner/random/entertainment/cigarette_pack,/obj/effect/spawner/random/entertainment/cigarette,/turf/open/floor/carpet/black,/area/shipbreak) +"Ls" = (/obj/structure/railing{dir = 4},/obj/structure/reagent_dispensers/watertank,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"LR" = (/obj/structure/cable,/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/plating,/area/shipbreak) +"Mg" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/cigbutt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Nb" = (/obj/effect/spawner/random/vending/colavend,/obj/effect/turf_decal/bot,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Nj" = (/obj/structure/table,/obj/item/food/syndicake,/turf/open/floor/carpet/black,/area/shipbreak) +"NL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/dark,/area/shipbreak) +"Om" = (/obj/effect/turf_decal/tile/dark/anticorner{dir = 8},/turf/open/floor/mineral/titanium,/area/shipbreak) +"OJ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Pd" = (/obj/structure/closet/crate/bin{pixel_y = 13},/obj/effect/turf_decal/bot,/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"Ps" = (/obj/machinery/door/window/right/directional/east,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"QJ" = (/obj/machinery/light/directional/north,/obj/effect/turf_decal/bot,/obj/structure/sign/poster/random/directional/north,/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/food_packaging,/turf/open/floor/mineral/titanium,/area/shipbreak) +"QP" = (/obj/effect/turf_decal/tile/dark/half{dir = 4},/turf/open/floor/mineral/titanium,/area/shipbreak) +"Sj" = (/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt/dust,/obj/effect/spawner/random/trash/garbage,/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"Sy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/obj/structure/sign/poster/contraband/pizza_imperator/directional/north,/obj/effect/turf_decal/tile/dark/half{dir = 1},/turf/open/floor/mineral/titanium,/area/shipbreak) +"TP" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/carpet/black,/area/shipbreak) +"Up" = (/obj/structure/railing{dir = 1},/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"Ux" = (/obj/effect/spawner/random/trash/graffiti,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"UR" = (/obj/structure/railing{dir = 8},/obj/effect/turf_decal/bot,/obj/structure/closet/crate/bin{pixel_y = 13},/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Vx" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/iron/dark,/area/shipbreak) +"VJ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/random/trash/caution_sign,/turf/open/floor/carpet/black,/area/shipbreak) +"Wc" = (/obj/structure/rack/shelf,/obj/item/food/canned/beans,/obj/item/food/canned/beans,/obj/item/food/canned/beans,/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/bot,/turf/open/floor/mineral/titanium,/area/shipbreak) +"Ws" = (/obj/effect/mapping_helpers/broken_floor,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"Wy" = (/obj/effect/spawner/random/trash/grime,/turf/open/floor/iron/dark/smooth_large/airless,/area/shipbreak) +"WD" = (/obj/structure/railing{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/spawner/random/trash/bacteria,/turf/open/floor/mineral/titanium,/area/shipbreak) +"XY" = (/obj/structure/closet/cardboard,/turf/open/floor/iron/dark,/area/shipbreak) +"Yi" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/iron/white/textured_large/airless,/area/shipbreak) +"YA" = (/obj/structure/table,/obj/structure/rack,/obj/item/food/taco{pixel_y = 7; pixel_x = 1},/obj/item/food/taco,/obj/effect/turf_decal/tile/dark/anticorner,/turf/open/floor/mineral/titanium,/area/shipbreak) +"YP" = (/obj/structure/rack/shelf,/obj/structure/closet/crate/cardboard,/obj/effect/decal/cleanable/cobweb,/obj/effect/turf_decal/bot,/turf/open/floor/iron/dark,/area/shipbreak) +"YY" = (/obj/effect/spawner/random/structure/billboard/roadsigns,/turf/open/floor/plating,/area/shipbreak) +"Zs" = (/obj/structure/rack,/obj/effect/decal/cleanable/garbage,/obj/effect/turf_decal/bot,/obj/effect/spawner/random/structure/crate,/turf/open/floor/iron/dark,/area/shipbreak) +"ZF" = (/obj/structure/cable,/turf/open/floor/iron/solarpanel,/area/shipbreak) + +(1,1,1) = {" +fkfkfkfkHJHJHJHJHJHJfkHJfkfkfkfkfkfkfkfkfkfk +fkfkfkHJHRKvKvKvKvicHJHJfkfkfkfkfkfkfkfkfkfk +fkfkfkHJHRYPAaZsKvKvKvKvfkfkfkfkfkfkcKfkfkfk +fkHJHJicHRlUtndUKvjWzQKvkmkmkmkmfkHaaWHafkfk +fkYYupGTHRXYVxlxiLNLqkKvasasasasHJHJyeHJHJfk +fkHJliupKvKvKvKvKvKvfKKvKvKvKvKvyeyeyeyeyeHJ +fkfkHJHJKvkRSyfBPsvnBTKvwfJvzaKvheheyeheheHJ +fkhthtrKKvaZtpLnNjrLQPDCxutOBYKvheheyexPheHJ +HJYYcDHCKviXTPaXakjXifKvKvKvKvKvhexPyeheZFHJ +HJcDGTsnoApIAsWcuLrLqhPdoDJcbUoAyeyeyeyeyeHJ +fkHJHJHJoAkiHxjkAgTPVJOJMghUceoAhexPyexPheHJ +fkfkfkHJoAOmipvgdzakTPdzrbtkYAoAxPheyexPheHJ +fkfkfkHJKvoAoAoAKvJRkbKvoAoAoAKvpYpYyepYpYHJ +fkfkfkfkKgURNbKHQJjXowiowdwcLsrAyeLRyepYpYHJ +fkfkfkfkahWDUxJicTjXowowizDOmXuvcDrsHJHJHJvc +fkfkfkfkahqFJeAVUpraerUpAVSjagicfkfkfkfkfkfk +fkfkfkfkuHHJYiEinnWyIvnnEiyRIvEifkfkfkfkfkfk +fkfkfkfkfkuHYiEiHJEiuHYiWsIvEifkfkfkfkfkfkfk +fkfkfkfkfkEiIvIvHJEibkYiuHuHiGfkfkfkfkfkfkfk +fkfkfkfkfkfkfkcDIvuHIvicHJfkfkfkfkfkfkfkfkfk +fkfkfkfkfkfkfkHJuHuHegHJfkfkfkfkfkfkfkfkfkfk +fkfkfkfkfkfkfkfkbkHJfkfkfkfkfkfkfkfkfkfkfkfk +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/goonshuttlesmall.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/goonshuttlesmall.dmm new file mode 100644 index 000000000000..c34d08d04f53 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/goonshuttlesmall.dmm @@ -0,0 +1,476 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"b" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"c" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/shipbreak) +"d" = ( +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/structure/closet/crate{ + name = "lifejackets" + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"f" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"g" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Escape Shuttle Infirmary" + }, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"i" = ( +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"k" = ( +/obj/machinery/door/airlock/command/glass{ + name = "Cockpit" + }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"l" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"m" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"n" = ( +/obj/machinery/stasis{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"o" = ( +/obj/machinery/computer/old{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"p" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"t" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"u" = ( +/obj/structure/sign/warning/no_smoking, +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"w" = ( +/obj/structure/table, +/obj/item/storage/medkit/toxin{ + pixel_x = -4 + }, +/obj/item/storage/medkit/o2{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/storage/medkit/fire{ + pixel_x = 4 + }, +/obj/item/storage/medkit/regular{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"x" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shipbreak) +"y" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"z" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Brig" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/general, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"A" = ( +/obj/machinery/door/airlock/titanium{ + name = "Emergency Shuttle Airlock" + }, +/obj/docking_port/mobile/emergency{ + dir = 2; + name = "G00N-S emergency shuttle" + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"B" = ( +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"C" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"F" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) +"G" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"I" = ( +/turf/template_noop, +/area/shipbreak) +"K" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/camera/autoname/directional/south, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"N" = ( +/obj/machinery/vending/wallmed/directional/west{ + products = null; + products_monke = null + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"P" = ( +/obj/machinery/stasis, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"Q" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shipbreak) +"R" = ( +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/light/directional/north, +/obj/machinery/computer/old, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"T" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"U" = ( +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"W" = ( +/obj/machinery/light/directional/south, +/obj/machinery/computer/old{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shipbreak) +"X" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"Y" = ( +/turf/open/floor/mineral/plastitanium/red, +/area/shipbreak) + +(1,1,1) = {" +I +Q +Q +Q +I +Q +Q +Q +I +"} +(2,1,1) = {" +i +c +c +c +i +c +c +c +i +"} +(3,1,1) = {" +i +n +B +w +i +C +C +F +i +"} +(4,1,1) = {" +i +P +B +X +i +C +Y +f +i +"} +(5,1,1) = {" +i +i +g +i +i +i +z +i +i +"} +(6,1,1) = {" +m +T +T +l +N +l +T +d +i +"} +(7,1,1) = {" +u +G +a +a +T +a +a +a +i +"} +(8,1,1) = {" +x +a +a +a +T +a +a +a +x +"} +(9,1,1) = {" +x +a +a +a +T +a +a +a +x +"} +(10,1,1) = {" +x +a +a +a +T +a +a +a +x +"} +(11,1,1) = {" +u +t +a +a +T +a +a +K +i +"} +(12,1,1) = {" +A +T +T +T +T +T +T +d +i +"} +(13,1,1) = {" +i +i +x +i +k +i +x +i +i +"} +(14,1,1) = {" +I +x +p +y +U +y +b +x +I +"} +(15,1,1) = {" +I +i +R +y +y +y +W +i +I +"} +(16,1,1) = {" +I +i +i +i +o +i +i +i +I +"} +(17,1,1) = {" +I +I +I +i +x +i +I +I +I +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/mule.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/mule.dmm new file mode 100644 index 000000000000..5f0ba4c2c915 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/mule.dmm @@ -0,0 +1,1283 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"bY" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/turf/open/floor/iron, +/area/shipbreak) +"cg" = ( +/obj/machinery/door/airlock/maintenance_hatch, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"dd" = ( +/obj/structure/shipping_container/donk_co, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/shipbreak) +"dt" = ( +/obj/effect/spawner/random/structure/crate_loot, +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/warm/directional/south, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"eg" = ( +/obj/effect/spawner/random/contraband, +/turf/open/floor/plating, +/area/shipbreak) +"gc" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/light/small/warm/directional/south, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"gq" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/bot, +/obj/machinery/light/very_dim/directional/north, +/turf/open/floor/iron, +/area/shipbreak) +"gx" = ( +/obj/machinery/button/door/directional/west{ + id = 2 + }, +/obj/structure/sign/poster/contraband/donk_co/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/shipbreak) +"gC" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"gD" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/shipbreak) +"gY" = ( +/obj/structure/window/spawner/directional/south, +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/flowers_pp, +/turf/open/floor/grass, +/area/shipbreak) +"hc" = ( +/obj/effect/spawner/random/structure/closet_empty/crate, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"hq" = ( +/obj/effect/turf_decal/bot, +/obj/effect/artifact_spawner, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"iI" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = 4 + }, +/turf/open/floor/plating, +/area/shipbreak) +"iO" = ( +/obj/structure/chair/sofa/right/brown{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/light/very_dim/directional/west, +/turf/open/floor/iron, +/area/shipbreak) +"iZ" = ( +/obj/machinery/power/port_gen/pacman/super, +/obj/structure/cable, +/obj/machinery/power/terminal{ + dir = 4 + }, +/turf/open/floor/plating, +/area/shipbreak) +"jz" = ( +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"jJ" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/shipbreak) +"kf" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/critter, +/mob/living/simple_animal/pet/cat, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"kp" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/shipbreak) +"kT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/light/very_dim/directional/east, +/turf/open/floor/iron, +/area/shipbreak) +"kW" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = 5 + }, +/turf/open/floor/plating, +/area/shipbreak) +"lW" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/closet/crate/critter, +/mob/living/basic/slugcat, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/shipbreak) +"mG" = ( +/obj/machinery/button/door/directional/east{ + id = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/shipbreak) +"mU" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shipbreak) +"mW" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/obj/machinery/light/small/warm/directional/south, +/turf/open/floor/iron, +/area/shipbreak) +"nm" = ( +/turf/open/floor/iron/dark, +/area/shipbreak) +"oP" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/shipbreak) +"pj" = ( +/obj/structure/chair/sofa/middle/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shipbreak) +"pI" = ( +/obj/effect/turf_decal/bot, +/mob/living/simple_animal/hostile/mimic/crate, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"qk" = ( +/obj/structure/cable, +/obj/machinery/light/small/warm/directional/north, +/turf/open/floor/plating, +/area/shipbreak) +"qI" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = 2 + }, +/turf/open/floor/plating, +/area/shipbreak) +"rj" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/critter, +/obj/machinery/light/small/warm/directional/south, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"rl" = ( +/obj/structure/closet/crate/critter, +/mob/living/basic/pet/dog/breaddog, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"sb" = ( +/obj/effect/spawner/random/engineering/canister, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"sC" = ( +/obj/structure/chair/sofa/corner/brown{ + dir = 4 + }, +/turf/open/floor/iron, +/area/shipbreak) +"sW" = ( +/obj/machinery/power/shuttle_engine/huge, +/turf/open/floor/plating, +/area/shipbreak) +"tn" = ( +/obj/structure/closet/crate/coffin, +/turf/open/floor/plating, +/area/shipbreak) +"tO" = ( +/obj/structure/falsewall/titanium, +/turf/open/floor/plating, +/area/shipbreak) +"tQ" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/shipbreak) +"ul" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/structure/closet_empty/crate/with_loot, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side{ + dir = 6 + }, +/area/shipbreak) +"uA" = ( +/obj/machinery/button/door/directional/west{ + id = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1 + }, +/turf/open/floor/iron, +/area/shipbreak) +"vo" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/structure/window/reinforced/plasma/spawner/directional/west, +/turf/open/floor/plating, +/area/shipbreak) +"vA" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = 5 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/shipbreak) +"vX" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/shipbreak) +"xw" = ( +/obj/machinery/computer/old, +/turf/open/floor/iron/dark, +/area/shipbreak) +"yh" = ( +/obj/structure/chair/plastic{ + dir = 8 + }, +/turf/open/floor/iron/dark, +/area/shipbreak) +"yR" = ( +/turf/template_noop, +/area/shipbreak) +"zH" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/north, +/obj/structure/window/spawner/directional/east, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/flowers_br, +/turf/open/floor/grass, +/area/shipbreak) +"zO" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/qm/double{ + dir = 4 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/iron/dark, +/area/shipbreak) +"Bq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/shipbreak) +"Bz" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/half{ + dir = 1 + }, +/area/shipbreak) +"BK" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/light/small/warm/directional/north, +/turf/open/floor/plating, +/area/shipbreak) +"BN" = ( +/obj/structure/chair/sofa/left/brown, +/obj/machinery/light/very_dim/directional/north, +/turf/open/floor/iron, +/area/shipbreak) +"BW" = ( +/obj/effect/spawner/random/structure/crate_loot, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/dark/side{ + dir = 4 + }, +/area/shipbreak) +"CB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/light/very_dim/directional/east, +/turf/open/floor/iron, +/area/shipbreak) +"CZ" = ( +/obj/machinery/power/shuttle_engine/propulsion, +/turf/open/floor/plating, +/area/shipbreak) +"DL" = ( +/obj/effect/turf_decal/delivery, +/obj/item/toy/plush/slimeplushie, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/shipbreak) +"Fg" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/turf/open/floor/plating, +/area/shipbreak) +"GZ" = ( +/obj/effect/turf_decal/bot, +/obj/effect/spawner/random/engineering/canister, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"HS" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron, +/area/shipbreak) +"IR" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck/syndicate/holographic, +/obj/item/storage/fancy/cigarettes/cigpack_shadyjims{ + pixel_x = -4; + pixel_y = 11 + }, +/obj/effect/spawner/random/entertainment/wallet_lighter, +/turf/open/floor/carpet/orange, +/area/shipbreak) +"JE" = ( +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"Kb" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/style_4, +/obj/structure/flora/grass/green/style_3, +/turf/open/floor/grass, +/area/shipbreak) +"KG" = ( +/turf/open/floor/iron, +/area/shipbreak) +"Lm" = ( +/obj/effect/spawner/random/contraband/landmine, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"Lt" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/glass, +/area/shipbreak) +"LQ" = ( +/obj/machinery/power/shuttle_engine/heater, +/obj/structure/window/reinforced/plasma/spawner/directional/north, +/obj/structure/window/reinforced/plasma/spawner/directional/east, +/turf/open/floor/plating, +/area/shipbreak) +"MM" = ( +/obj/machinery/button/door/directional/east{ + id = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/shipbreak) +"Nx" = ( +/obj/structure/table/greyscale, +/obj/item/storage/backpack/satchel/flat, +/obj/effect/spawner/random/exotic/syndie, +/turf/open/floor/iron/dark, +/area/shipbreak) +"NF" = ( +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/shipbreak) +"OQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/shipbreak) +"Pe" = ( +/obj/effect/turf_decal/delivery, +/obj/effect/spawner/random/engineering/canister, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron, +/area/shipbreak) +"QE" = ( +/obj/machinery/button/door/directional/south{ + id = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/light/very_dim/directional/south, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/shipbreak) +"QZ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/shipbreak) +"Rw" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/shipbreak) +"Rz" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/vending/donksofttoyvendor, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 5 + }, +/area/shipbreak) +"RA" = ( +/obj/machinery/door/airlock/qm, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/shipbreak) +"RN" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/light/very_dim/directional/west, +/turf/open/floor/iron, +/area/shipbreak) +"RX" = ( +/obj/effect/spawner/random/contraband/prison, +/obj/effect/spawner/random/contraband, +/turf/open/floor/plating, +/area/shipbreak) +"Sf" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"Sh" = ( +/obj/effect/spawner/random/contraband/plus, +/turf/open/floor/plating, +/area/shipbreak) +"Sn" = ( +/obj/effect/spawner/random/structure/crate_loot, +/turf/open/floor/catwalk_floor/iron, +/area/shipbreak) +"Su" = ( +/obj/machinery/atmospherics/components/tank/air, +/turf/open/floor/plating, +/area/shipbreak) +"SO" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/side, +/area/shipbreak) +"Uo" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck/syndicate/holographic, +/turf/open/floor/carpet/orange, +/area/shipbreak) +"VT" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/table/greyscale, +/obj/effect/spawner/random/food_or_drink/donkpockets, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 3; + pixel_x = -10 + }, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 8; + pixel_x = 4 + }, +/obj/item/reagent_containers/cup/glass/bottle/beer, +/turf/open/floor/iron/dark, +/area/shipbreak) +"Wl" = ( +/turf/open/floor/glass, +/area/shipbreak) +"Wm" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"Wq" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/crate/critter, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"Ww" = ( +/obj/machinery/vending/cigarette/syndicate, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron, +/area/shipbreak) +"WM" = ( +/turf/open/floor/plating, +/area/shipbreak) +"Xa" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/shipbreak) +"XH" = ( +/obj/structure/window/spawner/directional/west, +/obj/structure/window/spawner/directional/east, +/obj/structure/flora/grass/jungle, +/obj/structure/flora/bush/leavy, +/turf/open/floor/grass, +/area/shipbreak) +"Yo" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/shipbreak) +"Zv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/machinery/light/very_dim/directional/south, +/turf/open/floor/carpet/neon/simple/black/nodots, +/area/shipbreak) + +(1,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(2,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(3,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(4,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(5,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +ah +iI +iI +iI +ah +yR +ah +qI +qI +qI +ah +yR +yR +yR +yR +yR +yR +"} +(6,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +ah +Wq +JE +kf +ah +yR +ah +Yo +Sn +SO +ah +yR +yR +yR +yR +yR +yR +"} +(7,1,1) = {" +yR +yR +yR +yR +yR +yR +ah +ah +ah +Yo +rl +SO +ah +ah +ah +hc +JE +jz +ah +ah +ah +yR +yR +yR +yR +"} +(8,1,1) = {" +yR +yR +yR +yR +yR +yR +ah +tn +ah +pI +JE +rj +ah +RX +ah +Yo +JE +dt +ah +WM +ah +ah +yR +yR +yR +"} +(9,1,1) = {" +yR +Xa +ah +ah +ah +yR +ah +eg +ah +DL +kp +lW +ah +tO +ah +Rz +BW +ul +ah +Rw +iZ +ah +yR +yR +yR +"} +(10,1,1) = {" +yR +Xa +VT +zO +ah +yR +ah +tO +ah +ah +tQ +ah +ah +KG +ah +ah +tQ +ah +ah +qk +NF +ah +yR +yR +yR +"} +(11,1,1) = {" +Xa +Xa +yh +nm +ah +yR +ah +sC +pj +iO +gD +uA +KG +KG +KG +RN +gD +gx +ah +Rw +vo +CZ +yR +yR +yR +"} +(12,1,1) = {" +Xa +xw +nm +QE +ah +kW +ah +BN +Uo +IR +Lt +Lt +Lt +Lt +Lt +Lt +dd +KG +ah +Rw +Fg +WM +WM +sW +yR +"} +(13,1,1) = {" +Xa +xw +vX +OQ +RA +QZ +RA +gC +gC +gC +Lt +zH +Kb +XH +gY +Wl +gC +gC +cg +QZ +Fg +WM +WM +WM +yR +"} +(14,1,1) = {" +Xa +xw +Nx +Zv +ah +vA +ah +gq +KG +KG +Lt +Lt +Lt +Lt +Lt +Lt +HS +KG +ah +oP +Fg +WM +WM +WM +yR +"} +(15,1,1) = {" +Xa +Xa +nm +nm +ah +mU +ah +Ww +KG +kT +gD +mG +KG +KG +KG +CB +gD +MM +ah +oP +LQ +CZ +yR +yR +yR +"} +(16,1,1) = {" +yR +Xa +nm +nm +ah +yR +ah +tO +ah +ah +tQ +ah +ah +KG +ah +ah +tQ +ah +ah +BK +Su +ah +yR +yR +yR +"} +(17,1,1) = {" +yR +Xa +ah +ah +ah +yR +ah +Sh +ah +Wm +Bz +Sf +ah +tO +ah +Wm +Bz +Pe +ah +oP +Su +ah +yR +yR +yR +"} +(18,1,1) = {" +yR +yR +yR +yR +yR +yR +ah +Sh +ah +Yo +JE +gc +ah +WM +ah +GZ +Lm +mW +ah +Bq +ah +ah +yR +yR +yR +"} +(19,1,1) = {" +yR +yR +yR +yR +yR +yR +ah +ah +ah +Yo +JE +SO +ah +ah +ah +GZ +sb +jJ +ah +ah +ah +yR +yR +yR +yR +"} +(20,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +ah +Yo +JE +hq +ah +yR +ah +GZ +JE +bY +ah +yR +yR +yR +yR +yR +yR +"} +(21,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +ah +iI +iI +iI +ah +yR +ah +iI +iI +iI +ah +yR +yR +yR +yR +yR +yR +"} +(22,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(23,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(24,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} +(25,1,1) = {" +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +yR +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/squid.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/squid.dmm new file mode 100644 index 000000000000..aa4b35e32a92 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/squid.dmm @@ -0,0 +1,145 @@ +"aO" = (/obj/machinery/camera/directional/west,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"bR" = (/obj/structure/lattice,/turf/open/space/basic,/area/shipbreak) +"bZ" = (/obj/structure/bed,/obj/structure/curtain,/obj/item/bedsheet/dorms,/obj/structure/sign/poster/contraband/lusty_xenomorph/directional/east,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"cB" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/obj/machinery/smartfridge,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"cF" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/item/modular_computer/laptop/preset,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"cI" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"dd" = (/obj/structure/cable,/obj/machinery/holopad/secure,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"dq" = (/obj/structure/window/reinforced/tinted/spawner/directional/east,/obj/effect/spawner/random/vending/snackvend,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"dC" = (/obj/machinery/light/cold/directional/west,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"dF" = (/obj/structure/bed,/obj/item/bedsheet/dorms,/obj/structure/curtain,/obj/structure/sign/poster/contraband/interdyne_gene_clinics/directional/south{pixel_x = -1; pixel_y = -24},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"dU" = (/obj/structure/table/reinforced/rglass,/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_hivemind{pixel_x = -4; pixel_y = 5},/obj/item/pen/fountain{pixel_x = 8; pixel_y = 4},/obj/item/organ/internal/alien/hivenode{pixel_x = 4; pixel_y = -4},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"eV" = (/obj/machinery/chem_heater{dir = 1; pixel_x = 0; pixel_y = -4},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"gh" = (/obj/structure/bed,/obj/item/bedsheet/blue,/obj/structure/curtain,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"gw" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"hy" = (/obj/machinery/door/airlock/external/glass,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"hM" = (/obj/structure/statue/plasma/xeno,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"hQ" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/obj/machinery/smoke_machine,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"hV" = (/turf/closed/wall/mineral/titanium/interior,/area/shipbreak) +"ih" = (/obj/structure/cable,/obj/machinery/camera/directional/west,/obj/machinery/light/cold/directional/east,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"is" = (/obj/structure/cable,/obj/machinery/light/cold/directional/east,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"jk" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"jn" = (/obj/structure/cable,/obj/machinery/photocopier/gratis,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"km" = (/obj/structure/cable,/obj/structure/sink/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"kK" = (/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"kS" = (/obj/structure/cable,/obj/machinery/camera/directional/east,/obj/machinery/light/cold/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"lc" = (/obj/structure/cable,/obj/structure/sign/warning/vacuum/directional/east,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"lD" = (/obj/machinery/door/airlock/titanium/glass,/obj/machinery/door/poddoor/shuttledock{dir = 1},/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"lG" = (/obj/structure/cable,/obj/structure/sign/warning/vacuum/directional/west,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"lT" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"mG" = (/obj/structure/chair/office{dir = 8},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"mJ" = (/obj/structure/cable,/obj/structure/sign/departments/evac/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"mK" = (/obj/machinery/door/airlock/highsecurity,/obj/machinery/door/poddoor/shuttledock,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"mL" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/effect/spawner/random/vendor_meal_sides/nt,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"nJ" = (/obj/machinery/door/poddoor/shuttledock,/obj/machinery/door/airlock/highsecurity,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"nY" = (/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"nZ" = (/turf/template_noop,/area/shipbreak) +"oa" = (/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"pi" = (/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/closed/wall/mineral/titanium,/area/shipbreak) +"py" = (/obj/structure/reagent_dispensers/watertank/high,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"pz" = (/obj/machinery/light/cold/directional/east,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"pL" = (/obj/machinery/camera/directional/east,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"pN" = (/obj/structure/sign/calendar/directional/west{pixel_x = -29; pixel_y = 1},/obj/structure/cable,/obj/machinery/light/cold/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"qc" = (/obj/structure/table/reinforced/rglass,/obj/structure/closet/mini_fridge{name = "mini-fridge"; pixel_x = 9; pixel_y = 9},/obj/item/reagent_containers/condiment/soymilk{pixel_x = -2; pixel_y = 2},/obj/item/reagent_containers/condiment/milk{pixel_x = 8; pixel_y = 2},/obj/item/reagent_containers/condiment/flour{pixel_x = -5; pixel_y = 11},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"qw" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{dir = 8},/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"qE" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/obj/machinery/computer/old{dir = 8},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"rp" = (/obj/structure/table/reinforced/rglass,/obj/item/organ/internal/body_egg/alien_embryo{pixel_x = 70; pixel_y = 36},/obj/effect/spawner/random/medical/injector,/obj/effect/spawner/random/medical/injector{pixel_x = -1; pixel_y = 7},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"rJ" = (/obj/machinery/computer/operating{dir = 4},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"se" = (/obj/structure/reagent_dispensers/fueltank/large,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"sf" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{dir = 4},/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"sg" = (/obj/machinery/suit_storage_unit,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"tl" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{dir = 1},/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"ur" = (/turf/open/space/basic,/area/shipbreak) +"uC" = (/turf/closed/wall/mineral/titanium,/area/shipbreak) +"uO" = (/obj/structure/cable,/obj/structure/sign/warning/biohazard/directional/east,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"vN" = (/obj/structure/sign/directions/dorms/directional/south{pixel_x = -1; pixel_y = -21},/obj/machinery/light/cold/directional/east,/obj/machinery/oven/range,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"wY" = (/obj/structure/bed,/obj/structure/curtain,/obj/item/bedsheet/dorms,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"xl" = (/obj/structure/table/reinforced/rglass,/obj/item/reagent_containers/cooking_container/pan{pixel_x = -6; pixel_y = -2},/obj/item/kitchen/rollingpin{pixel_x = -3; pixel_y = 9},/obj/item/knife/kitchen{pixel_x = 8; pixel_y = 0},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"xo" = (/obj/structure/rack,/obj/item/stack/scrap/plasma,/obj/item/stack/sheet/mineral/plasma,/obj/item/stack/sheet/mineral/plasma,/obj/machinery/light/cold/directional/east,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"xJ" = (/obj/structure/sign/directions/medical/directional/south{pixel_x = 4; pixel_y = -21},/obj/machinery/light/cold/directional/west,/obj/machinery/smartfridge,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"xN" = (/obj/machinery/power/shuttle_engine/propulsion/burst{dir = 1},/turf/open/space/basic,/area/shipbreak) +"yi" = (/obj/effect/spawner/structure/window/hollow/reinforced/directional,/obj/machinery/power/shuttle_engine/heater{dir = 1},/turf/open/space/basic,/area/shipbreak) +"zj" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{dir = 8},/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"AJ" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/obj/machinery/computer/old{dir = 4},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Bb" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Bc" = (/obj/structure/cable,/obj/machinery/computer/old{dir = 1},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"BZ" = (/obj/machinery/sleeper{dir = 4},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"CV" = (/obj/structure/cable,/obj/structure/sign/departments/evac/directional/east,/obj/structure/sink/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"DU" = (/obj/machinery/shower{pixel_x = 0; pixel_y = 17},/obj/structure/drain,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Ep" = (/obj/structure/cable,/obj/machinery/suit_storage_unit,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"ED" = (/obj/structure/cable,/obj/machinery/light/cold/directional/east,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Fa" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{dir = 4},/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"Fj" = (/obj/structure/table/reinforced/rglass,/obj/effect/spawner/random/medical/surgery_tool_advanced,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"GC" = (/obj/structure/cable,/obj/machinery/power/smes/super/full,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"GY" = (/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Hf" = (/obj/structure/cable,/obj/structure/chair/comfy/shuttle,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Hl" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/item/paper/fluff/awaymissions/moonoutpost19/research/larva_autopsy{pixel_x = -39; pixel_y = 6},/obj/item/paper/fluff/awaymissions/moonoutpost19/research/facehugger,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"HD" = (/obj/structure/table/reinforced/rglass,/obj/item/paper/fluff/awaymissions/moonoutpost19/research/xeno_queen{pixel_x = 0; pixel_y = 0},/obj/effect/spawner/random/vendor_meal_sides/yangyu,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"IK" = (/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"IV" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/item/plate,/obj/item/plate{pixel_y = 2; pixel_x = 0},/obj/item/plate{pixel_y = 4},/obj/item/plate{pixel_y = 6},/obj/item/plate{pixel_y = 8},/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Kh" = (/obj/structure/table/reinforced/rglass,/obj/effect/spawner/random/exotic/technology,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Lj" = (/obj/machinery/power/shuttle_engine/heater{dir = 1},/obj/effect/spawner/structure/window/hollow/reinforced/directional,/turf/open/space/basic,/area/shipbreak) +"Ll" = (/obj/machinery/atmospherics/components/unary/portables_connector/layer2{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"LP" = (/obj/machinery/light/cold/directional/east,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"MR" = (/obj/structure/cable,/obj/machinery/light/cold/directional/west,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"MX" = (/obj/machinery/atmospherics/components/unary/portables_connector/layer2{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Np" = (/obj/machinery/door/airlock/external/glass,/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Ny" = (/obj/structure/rack,/obj/item/storage/belt,/obj/item/stack/sheet/mineral/plasma,/obj/item/shard/plasma,/obj/machinery/light/cold/directional/west,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"NJ" = (/obj/machinery/power/shuttle_engine/large{dir = 1},/turf/open/space/basic,/area/shipbreak) +"Ol" = (/obj/structure/reagent_dispensers/foamtank,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Ou" = (/obj/structure/cable,/obj/structure/sign/warning/biohazard/directional/west,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"ON" = (/obj/structure/cable,/obj/machinery/vending/wallmed/directional/east{pixel_x = 23; pixel_y = 2},/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"OX" = (/obj/machinery/door/airlock/titanium/glass,/obj/machinery/door/poddoor/shuttledock{dir = 4},/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Px" = (/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Pz" = (/obj/structure/chair/office{dir = 1},/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"PK" = (/obj/machinery/smartfridge,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"PY" = (/obj/machinery/power/port_gen/pacman/pre_loaded,/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"QS" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"RY" = (/obj/machinery/light/cold/directional/west,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"SV" = (/obj/structure/lattice,/obj/machinery/atmospherics/components/unary/passive_vent/layer4{dir = 8},/turf/open/space/basic,/area/shipbreak) +"TR" = (/obj/machinery/door/airlock/highsecurity,/obj/machinery/door/poddoor/shuttledock,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"Ua" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/effect/spawner/random/exotic/tool,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Uf" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2,/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"UH" = (/obj/structure/cable,/obj/structure/table/reinforced/rglass,/obj/item/reagent_containers/cup/beaker{pixel_x = -7; pixel_y = -2},/obj/item/reagent_containers/cup/beaker/large/aiuri{pixel_x = 7; pixel_y = 7},/obj/item/reagent_containers/syringe/morphine,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Vi" = (/obj/structure/reagent_dispensers/fueltank/large,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"VS" = (/obj/structure/window/reinforced/tinted/spawner/directional/west,/obj/effect/spawner/random/vending/colavend,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"WH" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{dir = 1},/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"Xq" = (/obj/machinery/door/airlock/titanium/glass,/obj/machinery/door/poddoor/shuttledock{dir = 1},/obj/structure/cable,/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Xy" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{dir = 8},/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"XJ" = (/obj/structure/cable,/obj/machinery/light/cold/directional/north,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"XK" = (/obj/structure/chair/office,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Yp" = (/obj/structure/bed/medical,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Yr" = (/obj/structure/table/optable,/obj/machinery/iv_drip,/obj/machinery/light/cold/directional/west,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"YZ" = (/obj/structure/cable,/obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6/directional/west{pixel_x = -27; pixel_y = 4},/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer2,/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer4,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"Za" = (/obj/machinery/holopad/secure,/turf/open/floor/mineral/titanium/tiled/white,/area/shipbreak) +"ZF" = (/obj/structure/bed,/obj/item/bedsheet/cosmos,/obj/structure/curtain,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"ZJ" = (/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2,/turf/open/floor/iron/showroomfloor,/area/shipbreak) +"ZV" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4,/obj/structure/cable,/turf/open/floor/iron/showroomfloor,/area/shipbreak) + +(1,1,1) = {" +nZnZnZnZnZxNnZnZnZnZnZnZnZnZnZnZnZnZnZxNnZnZnZnZnZ +nZnZnZnZuCLjuCuCnZnZnZnZnZnZnZnZnZuCuCyiuCnZnZnZnZ +nZnZnZnZuCPxPYuCnZnZnZnZnZnZnZnZnZuCPYPxuCnZnZnZnZ +nZnZnZnZuCPxGCuCnZnZnZnZnZnZnZnZnZuCGCPxuCnZnZnZnZ +nZnZnZnZuCPxGYuCuCnZnZnZnZnZnZnZuCuCGYPxuCnZnZnZnZ +nZnZnZnZuCNyQSsepiSVururnZururbRuCViZVxouCnZnZnZnZ +nZnZnZnZuCLlUfOlhVuCNJurxNNJuruChVOlUfMXuCnZnZnZnZ +nZnZnZnZuCLlIKpyhVdqLjLjLjLjLjVShVpyIKMXuCnZnZnZnZ +nZnZnZnZuCuCIKIKhVdCPxPxXKPxPxpzhVIKIKuCuCnZnZnZnZ +nZnZnZnZuCuCuClDhVPxUacFBbHlmLPxhVXquCuCuCnZnZnZnZ +nZnZnZuCuCgwuCIKPxPxrpmGddPzdUPxPxIKuCgwuCuCnZnZnZ +nZnZuCuCsgEDhVmJcIPxHDPxjnPxKhmGcICVhVMRsguCuCnZnZ +nZuCuCsglTIKOXIKIKZJPzPxGYPxPxZJIKIKOXIKqwsguCuCnZ +uCuCGYsfjkuChVPKIKUHIKcBhMhQIKIVIKqchVuCjkzjGYuCuC +uChVNphVuCuCuCxJIKeVPxPxIKPxPxxlIKvNuCuCuChVNphVuC +hyXJlcuCuCnZuCuCXqhVOuAJHfqEuOhVXquCuCnZuCuClGXJhy +uCEpuCuCnZuCuCDUishVmKhVBchVnJhVpNghuCuCnZuCuCEpuC +uCuCuCnZuCuCYpIKkmuCihhVuChVkSuCYZIKwYuCuCnZuCuCuC +nZnZnZuCuCYpIKONuCuCTRuCnZuCmKuCuCIKIKwYuCuCnZnZnZ +nZnZuCuCBZjktluCuCZaoauCnZuCoaZauCuCtljkZFuCuCnZnZ +nZnZuCrJsfjkuCuCaOkKWHuCnZuCWHkKpLuCuCjkzjbZuCnZnZ +nZnZuCYrGYuCuCuCRYkKuCuCnZuCuCkKLPuCuCuCGYpzuCnZnZ +nZnZuCFjuCuCnZuCFakKuCnZnZnZuCkKXyuCnZuCuCdFuCnZnZ +nZnZuCuCuCnZnZuCnYuCuCnZnZnZuCuCnYuCnZnZuCuCuCnZnZ +nZnZnZnZnZnZnZuCuCuCnZnZnZnZnZuCuCuCnZnZnZnZnZnZnZ +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/torus.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/torus.dmm new file mode 100644 index 000000000000..68a381e83916 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/torus.dmm @@ -0,0 +1,166 @@ +"ai" = (/obj/effect/turf_decal/trimline/yellow/corner{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"an" = (/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"aA" = (/obj/machinery/atmospherics/pipe/smart/simple/dark,/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/turf/open/floor/plating/airless,/area/shipbreak) +"bj" = (/obj/structure/window/reinforced,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"bl" = (/obj/effect/turf_decal/trimline/yellow/corner{dir = 8},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"bq" = (/obj/machinery/door/airlock/diamond,/obj/machinery/door/firedoor/heavy,/turf/open/floor/mineral/titanium/tiled/blue,/area/shipbreak) +"bV" = (/obj/effect/turf_decal/trimline/red/corner{dir = 8},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"cl" = (/obj/effect/turf_decal/trimline/yellow/filled/warning{dir = 8},/obj/machinery/atmospherics/pipe/layer_manifold/visible{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"cO" = (/obj/machinery/door/airlock/uranium/safe,/turf/open/floor/mineral/uranium,/area/shipbreak) +"da" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/miasma_output{dir = 1},/turf/open/floor/engine/halon{initial_gas_mix = "halon=500;TEMP=298.15"},/area/shipbreak) +"dc" = (/obj/machinery/door/airlock/security,/obj/machinery/door/firedoor/heavy,/turf/open/floor/mineral/plastitanium/red,/area/shipbreak) +"dn" = (/obj/effect/turf_decal/trimline/blue/filled/warning{dir = 4},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"du" = (/obj/structure/extinguisher_cabinet/directional/east,/obj/machinery/power/floodlight,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ee" = (/obj/machinery/air_sensor/miasma_tank,/obj/machinery/light/floor/has_bulb,/obj/machinery/igniter/incinerator_atmos{name = "gas stabilizer"},/turf/open/floor/engine/halon{initial_gas_mix = "halon=500;TEMP=298.15"},/area/shipbreak) +"eC" = (/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/turf/open/floor/plating/airless,/area/shipbreak) +"eK" = (/obj/machinery/air_sensor/halon_tank,/obj/machinery/light/floor/has_bulb,/obj/machinery/igniter/incinerator_atmos{name = "gas stabilizer"},/turf/open/floor/engine/healium{initial_gas_mix = "healium=500;TEMP=298.15"},/area/shipbreak) +"eU" = (/obj/effect/turf_decal/trimline/green/filled/warning{dir = 1},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"fc" = (/obj/structure/cable,/obj/machinery/atmospherics/components/binary/valve{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"fU" = (/obj/machinery/computer/atmos_control/miasma_tank{dir = 1},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"hb" = (/obj/effect/turf_decal/trimline/yellow/corner,/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"iB" = (/turf/template_noop,/area/shipbreak) +"iC" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"iH" = (/obj/machinery/power/shuttle_engine/large{dir = 1},/turf/template_noop,/area/shipbreak) +"iZ" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled/blue,/area/shipbreak) +"jb" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 8},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"jq" = (/obj/effect/turf_decal/trimline/yellow/arrow_cw{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"jP" = (/obj/structure/table/reinforced/titaniumglass,/obj/item/storage/belt/utility{pixel_y = 3},/obj/item/pipe_dispenser,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"jS" = (/obj/effect/turf_decal/trimline/yellow/filled/corner,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ls" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"lv" = (/obj/effect/turf_decal/trimline/green/corner{dir = 1},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"lX" = (/obj/effect/turf_decal/trimline/neutral/corner{dir = 4},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"md" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"mo" = (/obj/structure/window/reinforced,/obj/machinery/power/shuttle_engine/heater{dir = 1},/turf/open/floor/plating/airless,/area/shipbreak) +"mG" = (/obj/machinery/door/airlock/security,/turf/open/floor/mineral/plastitanium/red,/area/shipbreak) +"mQ" = (/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"mU" = (/obj/effect/turf_decal/trimline/yellow/filled/warning{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ne" = (/obj/machinery/air_sensor/tritium_tank,/obj/machinery/light/floor/has_bulb,/obj/machinery/igniter/incinerator_atmos{name = "gas stabilizer"},/turf/open/floor/engine/tritium{initial_gas_mix = "tritium=500;TEMP=298.15"},/area/shipbreak) +"nm" = (/obj/machinery/power/shuttle_engine/heater{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/shipbreak) +"nR" = (/obj/effect/turf_decal/trimline/green/filled/warning{dir = 9},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"oK" = (/obj/machinery/air_sensor/zauker_tank,/obj/machinery/light/floor/has_bulb,/obj/machinery/igniter/incinerator_atmos{name = "gas stabilizer"},/turf/open/floor/engine/zauker{initial_gas_mix = "zauker=500;TEMP=298.15"},/area/shipbreak) +"pi" = (/obj/effect/turf_decal/vg_decals/numbers/eight,/turf/open/floor/engine/healium{initial_gas_mix = "healium=500;TEMP=298.15"},/area/shipbreak) +"pJ" = (/turf/open/floor/engine/halon{initial_gas_mix = "halon=500;TEMP=298.15"},/area/shipbreak) +"qv" = (/obj/effect/turf_decal/trimline/green/corner{dir = 1},/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"qC" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/plastitanium/red,/area/shipbreak) +"qI" = (/obj/effect/turf_decal/trimline/neutral/filled/corner{dir = 7},/obj/structure/cable,/obj/machinery/light/small/directional/east,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"qR" = (/turf/open/floor/plating/airless,/area/shipbreak) +"qX" = (/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 8},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"rl" = (/obj/effect/turf_decal/trimline/green/filled/warning{dir = 1},/obj/structure/cable,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"rs" = (/obj/structure/closet/firecloset/full,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"rt" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/zauker_output,/turf/open/floor/engine/zauker{initial_gas_mix = "zauker=500;TEMP=298.15"},/area/shipbreak) +"rw" = (/obj/effect/turf_decal/trimline/red/filled/warning{dir = 8},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"sK" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/halon_output{dir = 1},/turf/open/floor/engine/healium{initial_gas_mix = "healium=500;TEMP=298.15"},/area/shipbreak) +"tp" = (/obj/effect/turf_decal/trimline/yellow/filled/warning{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"tz" = (/obj/item/grenade/chem_grenade/metalfoam{pixel_x = 3; pixel_y = 5},/obj/item/grenade/chem_grenade/metalfoam{pixel_x = -2; pixel_y = 2},/obj/item/grenade/chem_grenade/metalfoam{pixel_x = -6; pixel_y = -3},/obj/structure/rack,/obj/item/clothing/suit/utility/fire/atmos,/obj/item/clothing/suit/utility/fire/atmos,/obj/item/holosign_creator/atmos,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"tS" = (/obj/effect/turf_decal/trimline/red/corner{dir = 8},/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"uq" = (/obj/structure/window/reinforced,/obj/machinery/power/port_gen/pacman/pre_loaded,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"uU" = (/obj/effect/turf_decal/trimline/neutral/filled/warning{dir = 5},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"uW" = (/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"wj" = (/obj/effect/turf_decal/vg_decals/numbers/three,/turf/open/floor/engine/tritium{initial_gas_mix = "tritium=500;TEMP=298.15"},/area/shipbreak) +"wR" = (/obj/effect/turf_decal/trimline/yellow/arrow_cw{dir = 8},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"wV" = (/obj/effect/turf_decal/trimline/yellow,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"wZ" = (/obj/machinery/portable_atmospherics/scrubber/huge/movable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"xt" = (/obj/structure/window/reinforced,/obj/structure/reagent_dispensers/foamtank,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"xN" = (/obj/machinery/atmospherics/components/unary/vent_pump/siphon/monitored/tritium_output,/turf/open/floor/engine/tritium{initial_gas_mix = "tritium=500;TEMP=298.15"},/area/shipbreak) +"xY" = (/obj/effect/turf_decal/trimline/green/filled/corner{dir = 8},/obj/structure/cable,/obj/machinery/light/small/directional/west,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"yt" = (/turf/open/floor/mineral/titanium/tiled,/area/shipbreak) +"yz" = (/obj/effect/turf_decal/trimline/blue/filled/warning{dir = 6},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"yL" = (/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/shipbreak) +"yO" = (/obj/effect/turf_decal/trimline/yellow/arrow_cw{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"yZ" = (/obj/effect/turf_decal/trimline/neutral/filled/warning{dir = 4},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"zq" = (/obj/effect/turf_decal/trimline/yellow/filled/corner,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"zw" = (/obj/effect/turf_decal/trimline/red/filled/corner,/obj/structure/cable,/obj/machinery/light/small/directional/south,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"zM" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/uranium,/area/shipbreak) +"AW" = (/obj/machinery/power/shuttle_engine/heater{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/shipbreak) +"AX" = (/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Ba" = (/turf/open/floor/engine/zauker{initial_gas_mix = "zauker=500;TEMP=298.15"},/area/shipbreak) +"Bj" = (/obj/effect/turf_decal/trimline/yellow,/obj/effect/decal/cleanable/dirt/dust,/obj/effect/mob_spawn/corpse/human/charredskeleton{mob_name = "failed atmosian"},/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"Bp" = (/obj/effect/turf_decal/trimline/red/filled/warning,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"By" = (/obj/machinery/atmospherics/pipe/smart/simple/cyan,/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/turf/open/floor/plating/airless,/area/shipbreak) +"BJ" = (/turf/open/floor/engine/healium{initial_gas_mix = "healium=500;TEMP=298.15"},/area/shipbreak) +"BN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table{pixel_y = -7},/obj/item/food/donkpocket/pizza{pixel_x = -8; pixel_y = 0},/obj/item/food/donkpocket/honk{pixel_x = -8; pixel_y = -2},/obj/item/food/donkpocket/gondola{pixel_x = -8; pixel_y = -4},/obj/item/food/donkpocket/berry{pixel_x = -8; pixel_y = -6},/obj/item/trash/ready_donk{pixel_x = 6; pixel_y = -4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"BT" = (/obj/structure/fireaxecabinet,/obj/item/flashlight/spotlight,/obj/effect/holy,/obj/effect/decal/cleanable/dirt/dust,/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/shipbreak) +"Cg" = (/obj/effect/turf_decal/trimline/neutral/filled/warning{dir = 1},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Cs" = (/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 4},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Df" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table{pixel_y = -7},/obj/machinery/microwave{pixel_y = -4},/obj/item/food/donkpocket/warm/spicy,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Dy" = (/obj/effect/turf_decal/trimline/blue/filled/warning,/obj/structure/cable,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"DV" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"Ei" = (/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled,/area/shipbreak) +"Eq" = (/obj/structure/closet/radiation,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ER" = (/turf/open/floor/engine/tritium{initial_gas_mix = "tritium=500;TEMP=298.15"},/area/shipbreak) +"EX" = (/obj/effect/turf_decal/trimline/red/filled/warning,/obj/structure/cable,/obj/machinery/atmospherics/components/unary/portables_connector/visible,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Fj" = (/obj/effect/turf_decal/trimline/yellow/filled/warning,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Fv" = (/obj/machinery/power/shuttle_engine/large,/turf/template_noop,/area/shipbreak) +"FG" = (/obj/effect/turf_decal/trimline/blue/filled/corner{dir = 8},/obj/structure/cable,/obj/machinery/light/small/directional/south,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"FW" = (/obj/structure/lattice/catwalk,/turf/open/floor/catwalk_floor/iron_dark/airless,/area/shipbreak) +"GE" = (/obj/machinery/door/airlock/uranium/safe,/obj/machinery/door/firedoor/heavy,/turf/open/floor/mineral/uranium,/area/shipbreak) +"Iv" = (/turf/open/floor/mineral/titanium/tiled/blue,/area/shipbreak) +"JU" = (/obj/machinery/atmospherics/pipe/smart/simple/green,/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/turf/open/floor/plating/airless,/area/shipbreak) +"JV" = (/obj/effect/turf_decal/trimline/neutral/filled/warning{dir = 1},/obj/structure/cable,/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"JY" = (/turf/open/floor/mineral/uranium,/area/shipbreak) +"Kv" = (/obj/machinery/door/airlock/freezer,/obj/machinery/door/firedoor/heavy,/turf/open/floor/mineral/titanium/tiled,/area/shipbreak) +"KM" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Lz" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"LP" = (/obj/machinery/computer/atmos_control/tritium_tank,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"MM" = (/obj/effect/turf_decal/trimline/yellow/corner{dir = 1},/obj/effect/turf_decal/trimline/yellow/filled/corner{dir = 8},/obj/item/wrench,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"MX" = (/obj/machinery/door/airlock/external{dir = 4},/turf/open/floor/plating,/area/shipbreak) +"Na" = (/obj/machinery/computer/atmos_control/halon_tank{dir = 1},/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"NF" = (/obj/effect/turf_decal/trimline/green/filled/corner{dir = 4},/obj/structure/cable,/obj/machinery/light/small/directional/north,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"NH" = (/obj/structure/cable,/obj/structure/chair/comfy/shuttle/tactical{dir = 1},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Ob" = (/obj/machinery/power/shuttle_engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/shipbreak) +"Pd" = (/obj/effect/turf_decal/trimline/blue/filled/corner{dir = 4},/obj/structure/cable,/obj/machinery/light/small/directional/east,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"PM" = (/obj/structure/closet/firecloset/full,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Qk" = (/obj/machinery/door/airlock/diamond,/turf/open/floor/mineral/titanium/tiled/blue,/area/shipbreak) +"QE" = (/obj/effect/turf_decal/trimline/neutral/filled/corner{dir = 1},/obj/structure/cable,/obj/machinery/light/small/directional/north,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"QJ" = (/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/obj/effect/decal/cleanable/blood/splatter/over_window,/turf/open/floor/plating/airless,/area/shipbreak) +"QV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable,/obj/structure/sign/poster/contraband/donk_co/directional/north,/obj/machinery/computer/old,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"QY" = (/obj/effect/turf_decal/trimline/yellow/filled/warning{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"RE" = (/obj/effect/turf_decal/trimline/blue/corner,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"RK" = (/obj/effect/turf_decal/trimline/yellow/filled/warning{dir = 8},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"RT" = (/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"RV" = (/obj/effect/turf_decal/trimline/green/filled/warning{dir = 8},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Sr" = (/obj/machinery/atmospherics/pipe/smart/simple/scrubbers,/obj/effect/spawner/structure/window/reinforced/plasma/plastitanium,/turf/open/floor/plating/airless,/area/shipbreak) +"SA" = (/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"Tm" = (/obj/effect/turf_decal/trimline/blue/filled/warning,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"TC" = (/turf/open/floor/mineral/plastitanium/red,/area/shipbreak) +"UR" = (/obj/machinery/door/airlock/freezer,/obj/effect/decal/cleanable/dirt/dust,/turf/open/floor/mineral/titanium/tiled,/area/shipbreak) +"VU" = (/obj/structure/rack,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/suit/hazardvest,/obj/item/clothing/gloves/color/black,/obj/item/clothing/gloves/color/black,/obj/item/clothing/mask/gas/atmos,/obj/item/clothing/mask/gas/atmos,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Wd" = (/obj/structure/extinguisher_cabinet/directional/west,/obj/machinery/suit_storage_unit/standard_unit{pixel_x = -2; pixel_y = 0},/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Wx" = (/obj/effect/turf_decal/trimline/red/filled/corner{dir = 1},/obj/structure/cable,/obj/machinery/light/small/directional/west,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Xj" = (/obj/effect/turf_decal/trimline/yellow,/turf/open/floor/mineral/titanium/tiled/yellow,/area/shipbreak) +"Xq" = (/obj/machinery/portable_atmospherics/canister,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Xy" = (/obj/machinery/power/smes/full{pixel_y = 5},/obj/structure/cable,/obj/structure/window/reinforced,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"XY" = (/obj/effect/turf_decal/trimline/red/filled/warning{dir = 8},/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"Yg" = (/obj/effect/turf_decal/vg_decals/numbers/zero,/turf/open/floor/engine/zauker{initial_gas_mix = "zauker=500;TEMP=298.15"},/area/shipbreak) +"Yq" = (/obj/effect/turf_decal/trimline/yellow/filled/warning,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ZB" = (/obj/machinery/computer/atmos_control/zauker_tank,/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ZF" = (/obj/effect/turf_decal/trimline/red/filled/warning{dir = 10},/obj/structure/cable,/turf/open/floor/mineral/plastitanium,/area/shipbreak) +"ZG" = (/obj/effect/turf_decal/vg_decals/numbers/five,/turf/open/floor/engine/halon{initial_gas_mix = "halon=500;TEMP=298.15"},/area/shipbreak) + +(1,1,1) = {" +iBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiB +iBiBiBiBiBiBiBiBiBiHiBiBiHiBiBiBiBiBiBiBiBiBiB +iBiBiBiBiByLyLyLyLmomoyLmomoyLyLyLyLiBiBiBiBiB +iBiBiBeCeCyLPMXqyLmdDfQVBNmdyLXqEqyLQJeCiBiBiB +iBiBeCeCanCsmUmUAXananNHKManCsmUmUAXKMeCeCiBiB +iBiBeCananRETmTmDyFGmQmQRTzwEXBpBpbVKMKMeCiBiB +iByLyLanREyzeCeCByyLfUKMNayLSreCeCZFtSzqyLyLiB +FWyLWdandneCeCpJdayLyLdcyLyLsKBJeCeCXYQYwZyLiB +FWMXanandneCpJZGpJpJyLTCyLBJBJpiBJeCrwtpLzyLiB +FWyLtzandneCpJpJeepJyLqCyLBJeKBJBJeCrwhbyLyLiB +yLyLyLblPdyLyLpJpJyLyLmGyLyLBJBJyLyLWxjqyLiBiB +ObObyLwRmQanyLyLyLyLDVXjSAyLyLyLyLanRTyOyLiBiB +qRqRyLwRmQKMbqIviZQkwVBTwVcOzMJYGEanRTjqyLiHiB +FviByLwRRTKMyLyLyLyLSABjiCyLyLyLyLanmQjqyLnmnm +iBiByLwRqIyLyLBaBayLyLURyLyLERERyLyLxYaiyLyLyL +iByLyLMMyZeCBaBaoKBayLEiyLERneEREReCRVanVUyLFW +iByLlsclyZeCBaYgBaBayLytyLERERwjEReCRVKManMXFW +iByLjPRKyZeCeCBartyLyLKvyLyLxNEReCeCRVKMduyLFW +iByLyLAXlXuUeCeCaAyLZBanLPyLJUeCeCnRlvanyLyLiB +iBiBeCanKMlXCgCgJVQERTRTRTNFrleUeUqvananeCiBiB +iBiBeCeCKMzqYqYqqXmQlsfcjbanjSYqFjuWaneCeCiBiB +iBiBiBeCeCyLEqXqyLuqbjXybjxtyLXqrsyLeCeCiBiBiB +iBiBiBiBiByLyLyLyLObAWyLObObyLyLyLyLiBiBiBiBiB +iBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiBiB +iBiBiBiBiBiBiBiBiBFviBiBFviBiBiBiBiBiBiBiBiBiB +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/wanglius.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/wanglius.dmm new file mode 100644 index 000000000000..0234afbbe1f2 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/wanglius.dmm @@ -0,0 +1,1274 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ac" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 10 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"af" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 5 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"ak" = ( +/obj/structure/cable, +/obj/machinery/door/airlock/engineering/glass{ + name = "Wanglius Engineering" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"aK" = ( +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"aL" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"be" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"bz" = ( +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"cC" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "wangliusboardingdoor"; + name = "Wanglius Boarding Door" + }, +/obj/structure/fans/tiny, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"dF" = ( +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark, +/area/shipbreak) +"dL" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/random/maintenance, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"et" = ( +/turf/open/floor/carpet/blue, +/area/shipbreak) +"eQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"fr" = ( +/obj/machinery/door/window/brigdoor/security/cell/left/directional/east{ + name = "Wanglius Brig" + }, +/turf/open/floor/iron/dark, +/area/shipbreak) +"fv" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/west, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/structure/bed, +/obj/item/bedsheet/captain, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"fz" = ( +/obj/machinery/power/shuttle_engine/propulsion{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/shipbreak) +"fL" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"fN" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/mineral/plasma/five, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"fX" = ( +/obj/structure/closet/crate, +/obj/item/stack/sheet/rglass{ + amount = 50; + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/stack/sheet/plasteel{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/stack/sheet/iron, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"gB" = ( +/obj/machinery/door/window/left/directional/north{ + name = "Captain's Sleeping Capsule" + }, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"hv" = ( +/obj/machinery/power/port_gen/pacman/pre_loaded, +/obj/structure/cable, +/turf/open/floor/plating, +/area/shipbreak) +"hE" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"hF" = ( +/obj/structure/table, +/obj/effect/spawner/random/entertainment/deck, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"id" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"ig" = ( +/obj/structure/table, +/obj/machinery/recharger{ + active_power_usage = 0; + idle_power_usage = 0; + pixel_y = 4; + use_power = 0 + }, +/obj/item/coin/iron, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"iw" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"lc" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"lK" = ( +/obj/structure/table/optable, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"mb" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"mA" = ( +/obj/structure/cable, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"nk" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/item/restraints/handcuffs{ + pixel_y = 3 + }, +/obj/machinery/light/directional/west, +/turf/open/floor/iron/dark, +/area/shipbreak) +"nN" = ( +/turf/open/floor/carpet/orange, +/area/shipbreak) +"pb" = ( +/obj/effect/spawner/liquids_spawner{ + reagent_list = list(/datum/reagent/ammonia/urine=600) + }, +/obj/effect/mob_spawn/corpse/human/clown, +/obj/item/reagent_containers/cup/glass/waterbottle/large/empty{ + pixel_x = -11; + pixel_y = 2 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/large/empty{ + pixel_y = 7; + pixel_x = 5 + }, +/obj/item/reagent_containers/cup/glass/waterbottle/large/empty, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"qh" = ( +/obj/structure/table, +/obj/item/storage/medkit/regular{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/storage/medkit/brute, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"qn" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency{ + pixel_y = 3 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"qT" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/north, +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"rI" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"sB" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"tl" = ( +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen{ + pixel_x = 3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/mask/breath{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/utility/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/structure/closet/crate{ + name = "lifejackets" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"tt" = ( +/obj/structure/closet/crate{ + name = "emergency supplies crate" + }, +/obj/item/storage/toolbox/emergency, +/obj/item/storage/toolbox/emergency, +/obj/item/flashlight/flare{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/flashlight/flare{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/crowbar, +/obj/item/wrench, +/obj/item/radio, +/obj/machinery/light/directional/south, +/turf/open/floor/iron, +/area/shipbreak) +"tH" = ( +/obj/machinery/computer/old, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"tN" = ( +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"uR" = ( +/obj/machinery/door/window/left/directional/east{ + name = "Sleeping Capsule" + }, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"uW" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"wn" = ( +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"wL" = ( +/obj/machinery/power/smes/full, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"yp" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"yt" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"yx" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"yO" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"zo" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"zD" = ( +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"zK" = ( +/obj/machinery/light/directional/west, +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"AK" = ( +/obj/machinery/door/airlock/medical/glass{ + name = "Wanglius Sick Bay" + }, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"BF" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Wanglius Cargo Bay" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Ca" = ( +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Ct" = ( +/turf/open/floor/plating/airless, +/area/shipbreak) +"CW" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"Dj" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Eh" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 6 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Er" = ( +/turf/template_noop, +/area/shipbreak) +"EN" = ( +/obj/item/coin/iron, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"Fq" = ( +/obj/effect/spawner/random/trash, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"FA" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/siding/dark, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"FG" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"FY" = ( +/obj/machinery/button/door/directional/east{ + id = "wangliusboardingdoor"; + name = "Boarding Door Control" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Gv" = ( +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"Hl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"HG" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"HR" = ( +/obj/effect/spawner/random/structure/crate, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"HZ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Ia" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Jt" = ( +/obj/machinery/stasis, +/obj/machinery/light/directional/south, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"JO" = ( +/obj/machinery/door/airlock/external{ + name = "Wanglius Airlock" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ + cycle_id = "wangliusairlock" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"JZ" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Kg" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"KL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"KT" = ( +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"La" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"MS" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light/directional/north, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"MU" = ( +/obj/effect/spawner/random/structure/crate, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"Np" = ( +/obj/structure/closet/crate, +/obj/item/coin/iron, +/obj/item/coin/iron, +/obj/item/coin/iron, +/obj/item/coin/iron, +/obj/item/coin/iron, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Nt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"NJ" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 9 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Oc" = ( +/obj/effect/turf_decal/siding/dark/corner, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Of" = ( +/obj/machinery/power/shuttle_engine/heater{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/plating/airless, +/area/shipbreak) +"Oh" = ( +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"OB" = ( +/obj/structure/cable, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"OI" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = -1 + }, +/obj/item/storage/toolbox/emergency{ + pixel_x = 3; + pixel_y = -5 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"OP" = ( +/obj/effect/spawner/random/maintenance, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"PR" = ( +/obj/machinery/door/airlock/public{ + name = "Wanglius Crew Quarters" + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"PV" = ( +/obj/machinery/light/directional/north, +/obj/structure/table, +/obj/effect/spawner/random/food_or_drink/donkpockets{ + pixel_y = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Qi" = ( +/obj/structure/cable, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"Qj" = ( +/obj/structure/rack, +/obj/item/tank/internals/oxygen/red, +/obj/item/clothing/suit/utility/fire/firefighter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/utility/hardhat/red, +/obj/item/extinguisher, +/obj/item/extinguisher, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"QE" = ( +/obj/structure/bed, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/item/bedsheet/random, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"Se" = ( +/obj/effect/spawner/random/structure/closet_private, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"SL" = ( +/obj/effect/turf_decal/siding/dark/corner{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"Tl" = ( +/obj/effect/spawner/random/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) +"TN" = ( +/obj/effect/turf_decal/siding/dark{ + dir = 4 + }, +/turf/open/floor/mineral/titanium, +/area/shipbreak) +"UO" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/plating/airless, +/area/shipbreak) +"Vb" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/iron/dark, +/area/shipbreak) +"Vd" = ( +/obj/machinery/door/window/left/directional/south{ + name = "Sleeping Capsule" + }, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"XN" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"XV" = ( +/obj/structure/bed, +/obj/structure/window/reinforced/tinted/spawner/directional/south, +/obj/structure/window/reinforced/tinted/spawner/directional/east, +/obj/item/bedsheet/random, +/turf/open/floor/carpet/blue, +/area/shipbreak) +"XW" = ( +/obj/structure/table, +/obj/item/defibrillator/loaded, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"Yx" = ( +/obj/structure/table, +/obj/machinery/light/directional/west, +/obj/item/storage/backpack/duffelbag/med/surgery, +/turf/open/floor/mineral/titanium/white, +/area/shipbreak) +"YZ" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shipbreak) +"Zx" = ( +/obj/effect/spawner/random/trash, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/iron/dark/textured, +/area/shipbreak) + +(1,1,1) = {" +Er +Er +fz +fz +fz +fz +Er +Er +Er +Er +Er +Er +Er +Er +fz +fz +fz +fz +Er +Er +"} +(2,1,1) = {" +Er +aK +Of +Of +Of +Of +aK +Er +Er +Er +Er +Er +Er +aK +Of +Of +Of +Of +aK +Er +"} +(3,1,1) = {" +aK +aK +uR +XV +QE +uR +aK +aK +Er +Er +Er +Er +aK +aK +aK +Qi +wL +Kg +aK +aK +"} +(4,1,1) = {" +aK +Vd +et +et +et +XN +Se +YZ +Er +Er +Er +Er +YZ +pb +YZ +Qi +wn +OB +Nt +aK +"} +(5,1,1) = {" +YZ +yO +sB +et +fv +aK +aK +aK +aK +UO +Ct +aK +aK +YZ +aK +mA +wn +rI +hv +YZ +"} +(6,1,1) = {" +YZ +KT +hF +et +gB +aK +Vb +nk +aK +JO +JO +aK +zK +yx +YZ +Qi +wn +rI +hv +YZ +"} +(7,1,1) = {" +aK +Vd +et +et +qT +aK +dF +fr +aK +tN +tN +aK +bz +bz +ak +Qi +wn +HG +uW +aK +"} +(8,1,1) = {" +aK +aK +Se +XN +et +PR +tN +tN +aK +JO +JO +aK +yt +tN +YZ +wn +dL +fN +aK +aK +"} +(9,1,1) = {" +Er +aK +YZ +aK +YZ +aK +tN +tN +hE +tN +tN +hE +tN +FG +aK +aK +YZ +YZ +aK +Er +"} +(10,1,1) = {" +Er +Er +Er +Er +Er +aK +zD +tN +Oc +TN +TN +SL +aK +aK +aK +aK +Er +Er +Er +Er +"} +(11,1,1) = {" +Er +Er +Er +Er +Er +aK +PV +tN +Ca +nN +nN +mb +aK +Yx +lK +aK +Er +Er +Er +Er +"} +(12,1,1) = {" +Er +Er +Er +Er +Er +YZ +qn +Oc +Eh +nN +nN +af +aK +qh +Gv +aK +Er +Er +Er +Er +"} +(13,1,1) = {" +Er +Er +Er +Er +Er +YZ +tH +Ca +nN +nN +nN +nN +YZ +Gv +Gv +YZ +Er +Er +Er +Er +"} +(14,1,1) = {" +Er +Er +Er +Er +Er +YZ +tH +FA +nN +nN +nN +nN +AK +Gv +Gv +YZ +Er +Er +Er +Er +"} +(15,1,1) = {" +Er +Er +Er +Er +Er +YZ +ig +fL +ac +nN +nN +NJ +YZ +Gv +Gv +YZ +Er +Er +Er +Er +"} +(16,1,1) = {" +Er +Er +Er +Er +Er +aK +id +tN +Ca +nN +nN +iw +aK +Gv +Jt +aK +Er +Er +Er +Er +"} +(17,1,1) = {" +Er +Er +Er +Er +Er +aK +aK +Ia +fL +HZ +HZ +aL +aK +XW +aK +aK +Er +Er +Er +Er +"} +(18,1,1) = {" +Er +Er +Er +Er +Er +Er +aK +aK +YZ +BF +aK +BF +aK +aK +aK +Er +Er +Er +Er +Er +"} +(19,1,1) = {" +Er +Er +Er +Er +Er +aK +aK +Qj +tN +tN +hE +tN +tN +OI +aK +aK +Er +Er +Er +Er +"} +(20,1,1) = {" +Er +Er +Er +Er +aK +aK +be +tN +yp +eQ +eQ +eQ +La +tN +Dj +aK +aK +Er +Er +Er +"} +(21,1,1) = {" +Er +Er +Er +Er +YZ +tl +tN +tN +HR +EN +Fq +Oh +zo +tN +tN +JZ +YZ +Er +Er +Er +"} +(22,1,1) = {" +Er +Er +Er +Er +YZ +Np +tN +tN +Tl +Oh +Oh +EN +CW +tN +tN +JZ +YZ +Er +Er +Er +"} +(23,1,1) = {" +Er +Er +Er +Er +YZ +fX +tN +tN +lc +Oh +OP +MU +CW +tN +tN +JZ +YZ +Er +Er +Er +"} +(24,1,1) = {" +Er +Er +Er +Er +aK +aK +MS +FY +KL +Hl +Hl +Hl +Zx +tN +tt +aK +aK +Er +Er +Er +"} +(25,1,1) = {" +Er +Er +Er +Er +Er +aK +aK +aK +cC +cC +cC +cC +cC +aK +aK +aK +Er +Er +Er +Er +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/whale.dmm b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/whale.dmm new file mode 100644 index 000000000000..6162ac58602f --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/whale.dmm @@ -0,0 +1,791 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"i" = ( +/turf/open/floor/material/meat/airless, +/area/shipbreak) +"j" = ( +/obj/structure/alien/resin/wall/creature, +/obj/structure/disposalpipe/segment, +/turf/open/floor/material/meat, +/area/shipbreak) +"l" = ( +/obj/structure/alien/weeds/creature, +/turf/open/floor/material/meat/airless, +/area/shipbreak) +"n" = ( +/obj/machinery/power/shuttle_engine/propulsion/burst, +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"q" = ( +/turf/template_noop, +/area/shipbreak) +"r" = ( +/turf/open/floor/material/meat, +/area/shipbreak) +"s" = ( +/obj/structure/alien/resin/wall/creature, +/turf/open/floor/material/meat, +/area/shipbreak) +"w" = ( +/obj/effect/spawner/liquids_spawner/acid_waist, +/turf/open/floor/material/meat, +/area/shipbreak) +"y" = ( +/obj/structure/meateor_fluff/eyeball, +/obj/structure/alien/resin/membrane/creature, +/turf/open/floor/material/meat/airless, +/area/shipbreak) +"z" = ( +/obj/effect/spawner/structure/window/reinforced/shuttle, +/turf/open/floor/plating, +/area/shipbreak) +"D" = ( +/obj/structure/alien/resin/membrane/creature, +/turf/open/floor/material/meat, +/area/shipbreak) +"E" = ( +/obj/structure/meateor_fluff/flesh_pod, +/turf/open/floor/material/meat, +/area/shipbreak) +"G" = ( +/obj/machinery/door/airlock/titanium{ + name = "Escape Pod Airlock" + }, +/obj/docking_port/mobile/pod{ + port_direction = 2 + }, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"H" = ( +/obj/structure/meateor_fluff/flesh_pod_open, +/obj/item/skub, +/turf/open/floor/material/meat, +/area/shipbreak) +"J" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/material/meat, +/area/shipbreak) +"L" = ( +/obj/structure/punji_sticks/spikes{ + name = "jagged teeth" + }, +/turf/open/floor/material/meat/airless, +/area/shipbreak) +"O" = ( +/obj/structure/statue/bone/rib{ + dir = 1 + }, +/turf/open/floor/material/meat, +/area/shipbreak) +"R" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/item/radio/intercom/directional/east, +/obj/item/storage/pod/directional/west, +/obj/machinery/light/small/directional/west, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"S" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/machinery/status_display/evac/directional/east, +/obj/machinery/computer/shuttle/pod{ + pixel_x = -32 + }, +/obj/effect/mob_spawn/corpse/human/assistant, +/turf/open/floor/mineral/titanium/blue, +/area/shipbreak) +"U" = ( +/turf/closed/wall/material/meat, +/area/shipbreak) +"W" = ( +/turf/closed/wall/mineral/titanium, +/area/shipbreak) +"Y" = ( +/obj/structure/statue/bone/rib, +/turf/open/floor/material/meat, +/area/shipbreak) +"Z" = ( +/obj/effect/spawner/liquids_spawner/acid_waist, +/obj/item/mcobject/flusher, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/material/meat, +/area/shipbreak) + +(1,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(2,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(3,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(4,1,1) = {" +q +q +q +q +q +q +q +l +l +l +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(5,1,1) = {" +q +q +q +q +q +q +l +l +l +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(6,1,1) = {" +q +q +q +s +s +s +s +s +s +s +s +s +s +s +s +s +s +q +q +q +q +q +q +q +q +"} +(7,1,1) = {" +q +y +s +s +U +U +U +U +U +U +U +U +U +U +U +U +s +s +q +q +q +q +q +q +l +"} +(8,1,1) = {" +s +s +U +U +U +r +O +r +O +r +O +r +O +r +O +U +U +s +s +q +q +q +q +q +l +"} +(9,1,1) = {" +L +U +U +E +r +r +r +r +r +r +r +r +r +r +r +r +U +U +s +q +q +q +q +l +l +"} +(10,1,1) = {" +L +i +U +H +r +r +r +r +r +r +r +r +r +r +r +r +r +U +s +s +q +q +q +l +l +"} +(11,1,1) = {" +L +i +U +U +U +r +U +U +U +U +U +U +U +U +U +U +U +U +U +s +s +q +q +l +l +"} +(12,1,1) = {" +L +i +i +i +U +D +U +w +w +W +W +W +n +w +w +w +w +U +U +U +s +s +s +l +l +"} +(13,1,1) = {" +L +i +i +i +i +i +D +w +w +z +S +R +G +w +w +w +Z +J +J +J +J +J +j +j +s +"} +(14,1,1) = {" +L +i +i +i +U +D +U +w +w +W +W +W +n +w +w +w +w +U +U +U +s +s +s +l +l +"} +(15,1,1) = {" +L +i +U +U +U +r +U +U +U +U +U +U +U +U +U +U +U +U +U +s +s +q +q +l +l +"} +(16,1,1) = {" +L +i +U +E +r +r +r +r +r +r +r +r +r +r +r +r +r +U +s +s +q +q +q +l +l +"} +(17,1,1) = {" +L +U +U +E +r +r +r +r +r +r +r +r +r +r +r +r +U +U +s +q +q +q +q +l +l +"} +(18,1,1) = {" +s +s +U +U +U +r +Y +r +Y +r +Y +r +Y +r +Y +U +U +s +s +q +q +q +q +q +l +"} +(19,1,1) = {" +q +y +s +s +U +U +U +U +U +U +U +U +U +U +U +U +s +s +q +q +q +q +q +q +l +"} +(20,1,1) = {" +q +q +q +s +s +s +s +s +s +s +s +s +s +s +s +s +s +q +q +q +q +q +q +q +q +"} +(21,1,1) = {" +q +q +q +q +q +q +l +l +l +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(22,1,1) = {" +q +q +q +q +q +q +q +l +l +l +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(23,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(24,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} +(25,1,1) = {" +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +q +"} diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/black_peregrine.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/black_peregrine.dm new file mode 100644 index 000000000000..c65f5cbd0d6c --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/black_peregrine.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/black_peregrine + name = "Black Peregrine" + template_id = "black_peregrine" + description = "Syndicate's brightest naval minds began beliving that a decisive battle doctrine wouldn't be enough, that's why they've went with an experiment for the wolfpack doctrine through smallcrafts such as the black peregrine" + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/black_peregrine.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/gasstation.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/gasstation.dm new file mode 100644 index 000000000000..a957e3e01c2c --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/gasstation.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/gasstation + name="Gas Station Shuttle" + template_id="gasstation" + description="Getcher gas here, pardner." + mappath="monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/gasstation.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/goonshuttlesmall.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/goonshuttlesmall.dm new file mode 100644 index 000000000000..3fd2deed5033 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/goonshuttlesmall.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/goonshuttlesmall + name = "G00N-S Class Light Executive Shuttle" + template_id = "goonshuttlesmall" + description = "The G00N-S Class Light Executive shuttle. The G00N-S is for the executive who is conscious of his shareholder's wallets. Luxury on a budget. Featuring comfortable plush seating, a sick bay, and a security suite. Ride with style...on a budget." + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/goonshuttlesmall.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/mule.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/mule.dm new file mode 100644 index 000000000000..500c99650a7c --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/mule.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/mule + name = "Mule Freighter" + template_id = "mule" + description = "Listen, I've got a plan, get everything aboard the ship, we'll sell that to some greasy jacket wearing monkey." + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/mule.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/squid.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/squid.dm new file mode 100644 index 000000000000..e36372e2f73a --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/squid.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/squid + name = "Voidsquid Research Shuttle" + template_id = "squid" + description = "The Voidsquid Research shuttle is designed as an independent research platform, needing little to no support from a larger station for the duration of its experiments. Comfortably fitting six researchers, they are able to get their research done without external interruptions, as well as gather new samples as applicable. Two robust holding cells for live specimens, as well as redundant air-and power-supply in each of the rear nacelles, makes for a sturdy vessel." + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/squid.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/torus.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/torus.dm new file mode 100644 index 000000000000..4d6fcd42c535 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/torus.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/torus + name = "Exotic Gas Transport" + template_id = "torus" + description = "An exotic gas shipping shuttle, drifting around aimlessly..." + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/torus.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/ships/wanglius.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/wanglius.dm new file mode 100644 index 000000000000..ef1a4ed801e2 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/ships/wanglius.dm @@ -0,0 +1,5 @@ +/datum/map_template/shipbreaker/wanglius + name = "Wanglius Class Salvage Tug" + template_id = "wanglius" + description = "A product from DONGCORP, the Wanglius Class Salvage Tug is the tip of the spear when it comes to salvage vessels. Featuring a girthy crew quarters section, multiple engines for maximum thrust, engineering bay, sick bay, and a large and spacious cargo bay with a front access for releasing a load of hard working spacers on that pristine wreck. Guaranteed to satisfy." + mappath = "monkestation/code/modules/a_ship_in_need_of_breaking/ship_maps/wanglius.dmm" diff --git a/monkestation/code/modules/a_ship_in_need_of_breaking/tool/raynewelder.dm b/monkestation/code/modules/a_ship_in_need_of_breaking/tool/raynewelder.dm new file mode 100644 index 000000000000..528cf0eef907 --- /dev/null +++ b/monkestation/code/modules/a_ship_in_need_of_breaking/tool/raynewelder.dm @@ -0,0 +1,32 @@ + +/obj/item/weldingtool/electric/raynewelder + name = "laser welding tool" + desc = "A Rayne corp laser cutter and welder." + icon = 'monkestation/code/modules/a_ship_in_need_of_breaking/icons/shipbreaking.dmi' + icon_state = "raynewelder" + inhand_icon_state = "raynewelder" + lefthand_file = 'monkestation/icons/obj/rayne_corp/inhand_left.dmi' + righthand_file = 'monkestation/icons/obj/rayne_corp/inhand_right.dmi' + light_power = 1 + light_color = LIGHT_COLOR_FLARE + tool_behaviour = NONE + toolspeed = 0.2 + power_use_amount = 30 + // We don't use fuel + change_icons = FALSE + max_fuel = 20 + +/obj/item/weldingtool/electric/raynewelde/attack_self(mob/user) + if(!istype(get_area(src), /area/shipbreak)) + return + +/obj/item/weldingtool/electric/raynewelder/process(seconds_per_tick) + if(!istype(get_area(src), /area/shipbreak)) + switched_off() + return + if(!powered) + switched_off() + return + if(!(item_use_power(power_use_amount) & COMPONENT_POWER_SUCCESS)) + switched_off() + return diff --git a/monkestation/code/modules/assault_ops/code/armaments/_base.dm b/monkestation/code/modules/assault_ops/code/armaments/_base.dm index f1f2d76e6827..1ccfd2ec5978 100644 --- a/monkestation/code/modules/assault_ops/code/armaments/_base.dm +++ b/monkestation/code/modules/assault_ops/code/armaments/_base.dm @@ -73,9 +73,12 @@ /datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_disabler item_type = /obj/item/ammo_box/c35sol/incapacitator -/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_pierce +/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_ripper item_type = /obj/item/ammo_box/c35sol/ripper +/datum/armament_entry/assault_operatives/primary/submachinegun_ammo/c35sol_pierce + item_type = /obj/item/ammo_box/c35sol/pierce + /datum/armament_entry/assault_operatives/primary/shotgun subcategory = OPS_SUBCATEGORY_SHOTGUN @@ -105,6 +108,9 @@ /datum/armament_entry/assault_operatives/primary/shotgun_ammo/antitide item_type = /obj/item/ammo_box/advanced/s12gauge/antitide +/datum/armament_entry/assault_operatives/primary/shotgun_ammo/pierce + item_type = /obj/item/ammo_box/advanced/s12gauge/apds + /datum/armament_entry/assault_operatives/primary/sniper subcategory = OPS_SUBCATEGORY_SNIPER @@ -158,14 +164,15 @@ /datum/armament_entry/assault_operatives/secondary category = "Side Arms" category_item_limit = 3 - mags_to_spawn = 3 + mags_to_spawn = 1 cost = 3 /datum/armament_entry/assault_operatives/secondary/lethal subcategory = OPS_SUBCATEGORY_LETHAL_SIDE -/datum/armament_entry/assault_operatives/secondary/lethal/pistol - item_type = /obj/item/gun/ballistic/automatic/pistol/sol/evil +/datum/armament_entry/assault_operatives/secondary/lethal/revolver + item_type = /obj/item/gun/ballistic/revolver/sol + magazine = /obj/item/ammo_box/c35sol /datum/armament_entry/assault_operatives/secondary/lethal/energy_sword item_type = /obj/item/melee/energy/sword/saber @@ -177,16 +184,13 @@ item_type = /obj/item/gun/energy/e_gun/advtaser /datum/armament_entry/assault_operatives/secondary/nonlethal/baton - item_type = /obj/item/melee/baton/telescopic + item_type = /obj/item/melee/baton/telescopic/contractor_baton /datum/armament_entry/assault_operatives/secondary/martial subcategory = OPS_SUBCATEGORY_MARTIAL_SIDE -/datum/armament_entry/assault_operatives/secondary/martial/krav_gloves - item_type = /obj/item/clothing/gloves/krav_maga/combatglovesplus - -/datum/armament_entry/assault_operatives/secondary/martial/cqc - item_type = /obj/item/book/granter/martial/cqc +/datum/armament_entry/assault_operatives/secondary/martial/krav_implanter + item_type = /obj/item/implanter/krav_maga #undef OPS_SUBCATEGORY_LETHAL_SIDE #undef OPS_SUBCATEGORY_NONLETHAL_SIDE diff --git a/monkestation/code/modules/assault_ops/code/interrogator.dm b/monkestation/code/modules/assault_ops/code/interrogator.dm index d5b5b22ff590..91cacca425d6 100644 --- a/monkestation/code/modules/assault_ops/code/interrogator.dm +++ b/monkestation/code/modules/assault_ops/code/interrogator.dm @@ -203,6 +203,8 @@ processing = FALSE locked = FALSE update_appearance() + human_occupant.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_LOBOTOMY) //A treat before being released back into the wild + return_victim() addtimer(CALLBACK(src, PROC_REF(announce_creation)), ALERT_CREW_TIME) /obj/machinery/interrogator/proc/announce_creation() @@ -210,6 +212,14 @@ for(var/obj/item/pinpointer/nuke/disk_pinpointers in GLOB.pinpointer_list) disk_pinpointers.switch_mode_to(TRACK_GOLDENEYE) //Pinpointer will track the newly created goldeneye key. + if(SSshuttle.emergency.mode == SHUTTLE_CALL) + var/delaytime = 3 MINUTES + var/timer = SSshuttle.emergency.timeLeft(1) + delaytime + var/surplus = timer - (SSshuttle.emergency_call_time) + SSshuttle.emergency.setTimer(timer) + if(surplus > 0) + SSshuttle.block_recall(surplus) + /obj/machinery/interrogator/proc/send_keycard() var/turf/landingzone = find_drop_turf() var/obj/item/goldeneye_key/new_key @@ -244,3 +254,17 @@ //Pick a turf to spawn at if we can if(length(possible_turfs)) return pick(possible_turfs) + +///This proc attempts to return the head of staff back to the station after the interrogator finishes +/obj/machinery/interrogator/proc/return_victim() + var/turf/open/floor/safe_turf = get_safe_random_station_turf() + var/obj/effect/landmark/observer_start/backup_loc = locate(/obj/effect/landmark/observer_start) in GLOB.landmarks_list + if(!safe_turf) + safe_turf = get_turf(backup_loc) + stack_trace("[type] - return_target was unable to find a safe turf for [human_occupant] to return to. Defaulting to observer start turf.") + + if(!do_teleport(human_occupant, safe_turf, asoundout = 'sound/magic/blind.ogg', no_effects = TRUE, channel = TELEPORT_CHANNEL_QUANTUM, forced = TRUE)) + safe_turf = get_turf(backup_loc) + human_occupant.forceMove(safe_turf) + stack_trace("[type] - return_target was unable to teleport [human_occupant] to the observer start turf. Forcemoving.") + diff --git a/monkestation/code/modules/blueshield/devices/crew_monitor.dm b/monkestation/code/modules/blueshield/devices/crew_monitor.dm index 87462eb7e29e..19f20a4a555b 100644 --- a/monkestation/code/modules/blueshield/devices/crew_monitor.dm +++ b/monkestation/code/modules/blueshield/devices/crew_monitor.dm @@ -50,40 +50,14 @@ GLOBAL_DATUM_INIT(blueshield_crewmonitor, /datum/crewmonitor/blueshield, new) /datum/crewmonitor/blueshield/update_data(z) if(data_by_z["[z]"] && last_update["[z]"] && world.time <= last_update["[z]"] + SENSORS_UPDATE_PERIOD) return data_by_z["[z]"] + var/nt_net = GLOB.crewmonitor.get_ntnet_wireless_status(z) var/list/results = list() - for(var/tracked_mob in GLOB.suit_sensors_list) - if(!tracked_mob) - stack_trace("Null entry in suit sensors list.") + for(var/tracked_mob in GLOB.suit_sensors_list | GLOB.nanite_sensors_list) + var/sensor_mode = GLOB.crewmonitor.get_tracking_level(tracked_mob, z, nt_net) + if (sensor_mode == SENSOR_OFF) continue - var/mob/living/tracked_living_mob = tracked_mob - - var/turf/pos = get_turf(tracked_living_mob) - - if(!pos) - stack_trace("Tracked mob has no loc and is likely in nullspace: [tracked_living_mob] ([tracked_living_mob.type])") - continue - - if(pos.z != z && (!is_station_level(pos.z) || !is_station_level(z)) && !HAS_TRAIT(tracked_living_mob, TRAIT_MULTIZ_SUIT_SENSORS)) - continue - - var/mob/living/carbon/human/tracked_human = tracked_living_mob - - if(!ishuman(tracked_human)) - stack_trace("Non-human mob is in suit_sensors_list: [tracked_living_mob] ([tracked_living_mob.type])") - continue - - var/obj/item/clothing/under/uniform = tracked_human.w_uniform - if (!istype(uniform)) - stack_trace("Human without a suit sensors compatible uniform is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform?.type])") - continue - - if((uniform.has_sensor <= NO_SENSORS) || !uniform.sensor_mode) - stack_trace("Human without active suit sensors is in suit_sensors_list: [tracked_human] ([tracked_human.type]) ([uniform.type])") - continue - - var/sensor_mode = uniform.sensor_mode var/list/entry = list() var/obj/item/card/id/id_card = tracked_living_mob.get_idcard(hand_first = FALSE) @@ -99,7 +73,7 @@ GLOBAL_DATUM_INIT(blueshield_crewmonitor, /datum/crewmonitor/blueshield, new) else continue - if (isipc(tracked_human)) + if (isipc(tracked_living_mob)) entry["is_robot"] = TRUE if (sensor_mode >= SENSOR_LIVING) diff --git a/monkestation/code/modules/blueshift/armaments/deforest_medical.dm b/monkestation/code/modules/blueshift/armaments/deforest_medical.dm index 6221f1ca7cc7..dd851bbd1492 100644 --- a/monkestation/code/modules/blueshift/armaments/deforest_medical.dm +++ b/monkestation/code/modules/blueshift/armaments/deforest_medical.dm @@ -150,11 +150,6 @@ item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/synalvipitol contraband = TRUE -/datum/armament_entry/company_import/deforest/medpens_stim/twitch - item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/twitch - cost = PAYCHECK_COMMAND * 3 - contraband = TRUE - /datum/armament_entry/company_import/deforest/medpens_stim/demoneye item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/demoneye cost = PAYCHECK_COMMAND * 3 @@ -181,27 +176,10 @@ item_type = /obj/item/surgery_tray cost = PAYCHECK_COMMAND -/datum/armament_entry/company_import/deforest/equipment/advanced_health_analyer - item_type = /obj/item/healthanalyzer/advanced - cost = PAYCHECK_COMMAND * 3 - /datum/armament_entry/company_import/deforest/equipment/penlite_defib_mount item_type = /obj/item/wallframe/defib_mount/charging cost = PAYCHECK_CREW * 3 -/datum/armament_entry/company_import/deforest/equipment/advanced_scalpel - item_type = /obj/item/scalpel/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/advanced_retractor - item_type = /obj/item/retractor/advanced - cost = PAYCHECK_COMMAND * 3 - -/datum/armament_entry/company_import/deforest/equipment/advanced_cautery - item_type = /obj/item/cautery/advanced - cost = PAYCHECK_COMMAND * 3 - - /datum/armament_entry/company_import/deforest/equipment/medstation item_type = /obj/item/wallframe/frontier_medstation cost = PAYCHECK_COMMAND * 5 @@ -217,10 +195,6 @@ item_type = /obj/item/nif_repair_kit cost = PAYCHECK_COMMAND * 2 -/datum/armament_entry/company_import/deforest/cyber_implants/razorwire - name = "Razorwire Spool Implant" - item_type = /obj/item/organ/internal/cyberimp/arm/item_set/razorwire - cost = CARGO_CRATE_VALUE * 4 // Modsuit Modules from the medical category, here instead of in Nakamura because nobody buys from this company /datum/armament_entry/company_import/deforest/medical_modules diff --git a/monkestation/code/modules/blueshift/armaments/kemetek.dm b/monkestation/code/modules/blueshift/armaments/kemetek.dm index 7ad7e73d5c5c..c0953901b26a 100644 --- a/monkestation/code/modules/blueshift/armaments/kemetek.dm +++ b/monkestation/code/modules/blueshift/armaments/kemetek.dm @@ -3,6 +3,17 @@ category = KEMETEK_NAME company_bitflag = CARGO_COMPANY_KEMETEK -/datum/armament_entry/company_import/kemetek/checkback - subcategory = "Check back soon! ™" +/datum/armament_entry/company_import/kemetek/medical_tools + subcategory = "Medical Tools" +/datum/armament_entry/company_import/kemetek/medical_tools/canopic_box + item_type = /obj/item/storage/box/canopic_box + cost = PAYCHECK_COMMAND * 3 + +/datum/armament_entry/company_import/kemetek/medical_tools/canopic_stocked + item_type = /obj/item/storage/box/canopic_box/stocked + cost = PAYCHECK_COMMAND * 7 + +/datum/armament_entry/company_import/kemetek/medical_tools/sarcophagusroyale + item_type = /obj/structure/closet/crate/coffin/sarcophagus + cost = PAYCHECK_COMMAND * 5 diff --git a/monkestation/code/modules/blueshift/armaments/microstar.dm b/monkestation/code/modules/blueshift/armaments/microstar.dm index 47421531276f..a0d147d6c288 100644 --- a/monkestation/code/modules/blueshift/armaments/microstar.dm +++ b/monkestation/code/modules/blueshift/armaments/microstar.dm @@ -42,20 +42,6 @@ item_type = /obj/item/gun/energy/modular_laser_rifle cost = PAYCHECK_COMMAND * 8 -// More expensive, unique energy weapons -/datum/armament_entry/company_import/microstar/experimental_energy - subcategory = "Experimental Energy Weapons" - cost = PAYCHECK_COMMAND * 6 - restricted = TRUE - -/datum/armament_entry/company_import/microstar/experimental_energy/hellfire - item_type = /obj/item/gun/energy/laser/hellgun - -/datum/armament_entry/company_import/microstar/experimental_energy/ion_carbine +/datum/armament_entry/company_import/microstar/basic_energy_long_weapons/ion_carbine item_type = /obj/item/gun/energy/ionrifle/carbine - -/datum/armament_entry/company_import/microstar/experimental_energy/xray_gun - item_type = /obj/item/gun/energy/xray - -/datum/armament_entry/company_import/microstar/experimental_energy/tesla_cannon - item_type = /obj/item/gun/energy/tesla_cannon + cost = PAYCHECK_COMMAND * 5 diff --git a/monkestation/code/modules/blueshift/armaments/nakamura.dm b/monkestation/code/modules/blueshift/armaments/nakamura.dm index d73bff7e4d7e..d6e8050588ab 100644 --- a/monkestation/code/modules/blueshift/armaments/nakamura.dm +++ b/monkestation/code/modules/blueshift/armaments/nakamura.dm @@ -75,10 +75,6 @@ item_type = /obj/item/mod/module/rad_protection cost = PAYCHECK_CREW -/datum/armament_entry/company_import/nakamura_modsuits/protection_modules/emp_shield - item_type = /obj/item/mod/module/emp_shield - cost = PAYCHECK_CREW - /datum/armament_entry/company_import/nakamura_modsuits/protection_modules/armor_plates item_type = /obj/item/mod/module/armor_booster/retractplates cost = PAYCHECK_COMMAND * 3 @@ -147,10 +143,6 @@ item_type = /obj/item/mod/module/pathfinder cost = PAYCHECK_CREW -/datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/disposals - item_type = /obj/item/mod/module/disposal_connector - cost = PAYCHECK_CREW - /datum/armament_entry/company_import/nakamura_modsuits/mobility_modules/sphere item_type = /obj/item/mod/module/sphere_transform cost = PAYCHECK_COMMAND * 2 @@ -190,15 +182,3 @@ /datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/hat_stabilizer item_type = /obj/item/mod/module/hat_stabilizer cost = PAYCHECK_CREW - -/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/kinesis - item_type = /obj/item/mod/module/anomaly_locked/kinesis/prebuilt/locked - cost = PAYCHECK_COMMAND * 15 - -/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/antigrav - item_type = /obj/item/mod/module/anomaly_locked/antigrav/prebuilt/locked - cost = PAYCHECK_COMMAND * 15 - -/datum/armament_entry/company_import/nakamura_modsuits/novelty_modules/teleporter - item_type = /obj/item/mod/module/anomaly_locked/teleporter/prebuilt/locked - cost = PAYCHECK_COMMAND * 20 diff --git a/monkestation/code/modules/blueshift/armaments/rayne.dm b/monkestation/code/modules/blueshift/armaments/rayne.dm index ed3d8e39902c..0f3521373285 100644 --- a/monkestation/code/modules/blueshift/armaments/rayne.dm +++ b/monkestation/code/modules/blueshift/armaments/rayne.dm @@ -15,9 +15,8 @@ /datum/armament_entry/company_import/rayne/first_aid_kit/rayne_mender item_type = /obj/item/storage/medkit/rayne - cost = PAYCHECK_COMMAND * 5 + cost = PAYCHECK_COMMAND * 15 -//Rayne Corp Medkit: A portable medkit that contains a cynical artificial intelligence that can diagnose and treat your injuries, but also insults you and makes sarcastic comments about your condition. //Rayne Corp Sticky Tiles: A synthetic tile that has a special adhesive property that can cushion any fall and prevent serious damage, //but also traps you in place until you can free yourself or get help. The Sticky Tile is ideal for people who are clumsy and prone to accidents. diff --git a/monkestation/code/modules/blueshift/armaments/sol.dm b/monkestation/code/modules/blueshift/armaments/sol.dm index aa5363cb3014..9b0d72e84177 100644 --- a/monkestation/code/modules/blueshift/armaments/sol.dm +++ b/monkestation/code/modules/blueshift/armaments/sol.dm @@ -55,20 +55,6 @@ /datum/armament_entry/company_import/sol_defense/armor_hardened/emt_hardened_vest item_type = /obj/item/clothing/suit/armor/sf_hardened/emt -/datum/armament_entry/company_import/sol_defense/armor_sacrifice - subcategory = "Sacrifical Armor" - cost = PAYCHECK_CREW * 3 - -/datum/armament_entry/company_import/sol_defense/armor_sacrifice/sacrificial_helmet - item_type = /obj/item/clothing/head/helmet/sf_sacrificial - -/datum/armament_entry/company_import/sol_defense/armor_sacrifice/face_shield - item_type = /obj/item/sacrificial_face_shield - cost = PAYCHECK_LOWER - -/datum/armament_entry/company_import/sol_defense/armor_sacrifice/sacrificial_vest - item_type = /obj/item/clothing/suit/armor/sf_sacrificial - /datum/armament_entry/company_import/sol_defense/case subcategory = "Weapon Cases" diff --git a/monkestation/code/modules/blueshift/clothing/specialist_armor.dm b/monkestation/code/modules/blueshift/clothing/specialist_armor.dm index c671fd78c260..68ec61980b19 100644 --- a/monkestation/code/modules/blueshift/clothing/specialist_armor.dm +++ b/monkestation/code/modules/blueshift/clothing/specialist_armor.dm @@ -1,13 +1,13 @@ // Sacrificial armor has massive bullet protection, but gets damaged by being shot, thus, is sacrificing itself to protect the wearer /datum/armor/armor_sf_sacrificial melee = ARMOR_LEVEL_WEAK - bullet = ARMOR_LEVEL_INSANE // When the level IV plates stop the bullet but not the energy transfer + bullet = ARMOR_LEVEL_WEAK // When the level IV plates stop the bullet but not the energy transfer laser = ARMOR_LEVEL_TINY energy = ARMOR_LEVEL_TINY - bomb = ARMOR_LEVEL_MID - fire = ARMOR_LEVEL_MID + bomb = ARMOR_LEVEL_WEAK + fire = ARMOR_LEVEL_WEAK acid = ARMOR_LEVEL_WEAK - wound = WOUND_ARMOR_HIGH + wound = WOUND_ARMOR_WEAK /obj/item/clothing/suit/armor/sf_sacrificial name = "'Val' sacrificial ballistic vest" @@ -21,8 +21,8 @@ inhand_icon_state = "armor" blood_overlay_type = "armor" armor_type = /datum/armor/armor_sf_sacrificial - max_integrity = 200 - limb_integrity = 200 + max_integrity = 50 + limb_integrity = 50 repairable_by = null // No being cheeky and keeping a pile of repair materials in your bag to fix it either supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON resistance_flags = FIRE_PROOF @@ -54,8 +54,8 @@ worn_icon = 'monkestation/code/modules/blueshift/icons/specialist_armor/armor_worn.dmi' inhand_icon_state = "helmet" armor_type = /datum/armor/armor_sf_sacrificial - max_integrity = 200 - limb_integrity = 200 + max_integrity = 50 + limb_integrity = 50 repairable_by = null // No being cheeky and keeping a pile of repair materials in your bag to fix it either dog_fashion = null flags_inv = null @@ -169,13 +169,13 @@ // The peacekeeper armors and helmets will be less effective at stopping bullet damage than bulletproof vests, but stronger against wounds especially, and some other damage types /datum/armor/armor_sf_peacekeeper melee = ARMOR_LEVEL_WEAK - bullet = ARMOR_LEVEL_MID + bullet = ARMOR_LEVEL_WEAK laser = ARMOR_LEVEL_TINY energy = ARMOR_LEVEL_TINY bomb = ARMOR_LEVEL_WEAK - fire = ARMOR_LEVEL_MID + fire = ARMOR_LEVEL_WEAK acid = ARMOR_LEVEL_WEAK - wound = WOUND_ARMOR_HIGH + wound = WOUND_ARMOR_WEAK /obj/item/clothing/suit/armor/sf_peacekeeper name = "'Touvou' peacekeeper armor vest" @@ -245,12 +245,12 @@ // Hardened vests negate any and all projectile armor penetration, in exchange for having mid af bullet armor /datum/armor/armor_sf_hardened melee = ARMOR_LEVEL_TINY //It's anti-armor piercing projectile armor, it shouldn't be good against melee. - bullet = ARMOR_LEVEL_WEAK - laser = ARMOR_LEVEL_WEAK + bullet = ARMOR_LEVEL_TINY + laser = ARMOR_LEVEL_TINY energy = ARMOR_LEVEL_TINY - bomb = ARMOR_LEVEL_WEAK - fire = ARMOR_LEVEL_WEAK - acid = ARMOR_LEVEL_WEAK + bomb = ARMOR_LEVEL_TINY + fire = ARMOR_LEVEL_TINY + acid = ARMOR_LEVEL_TINY wound = WOUND_ARMOR_WEAK /obj/item/clothing/suit/armor/sf_hardened diff --git a/monkestation/code/modules/blueshift/icons/mob/clothing/under/rnd_digi.dmi b/monkestation/code/modules/blueshift/icons/mob/clothing/under/rnd_digi.dmi index 76137ae413c1..5ed73eaea99d 100644 Binary files a/monkestation/code/modules/blueshift/icons/mob/clothing/under/rnd_digi.dmi and b/monkestation/code/modules/blueshift/icons/mob/clothing/under/rnd_digi.dmi differ diff --git a/monkestation/code/modules/blueshift/items/ammo.dm b/monkestation/code/modules/blueshift/items/ammo.dm index 895ef1b5d3cd..716e5c9e2dfa 100644 --- a/monkestation/code/modules/blueshift/items/ammo.dm +++ b/monkestation/code/modules/blueshift/items/ammo.dm @@ -377,6 +377,26 @@ icon_state = "35box_shrapnel" ammo_type = /obj/item/ammo_casing/c35sol/ripper +//.35 sol pierce are the AP rounds for this weapon + +/obj/item/ammo_casing/c35sol/pierce + name = ".35 Sol Short armor piercing bullet casing" + desc = "A SolFed standard caseless armor piercing pistol round. Penetrates armor, but is rather weak against un-armored targets." + icon_state = "35sol_shrapnel" + projectile_type = /obj/projectile/bullet/c35sol/pierce + +/obj/projectile/bullet/c35sol/pierce + name = ".35 Sol Short armor piercing bullet" + damage = 13 + bare_wound_bonus = -30 + armour_penetration = 20 + +/obj/item/ammo_box/c35sol/pierce + name = "ammo box (.35 Sol Short armor piercing)" + desc = "A box of .35 Sol Short pistol rounds, holds twenty-four rounds." + ammo_type = /obj/item/ammo_casing/c35sol/pierce + + // .40 Sol Long // Rifle caliber caseless ammo that kills people good @@ -613,7 +633,8 @@ /obj/projectile/bullet/strilka310/ap name = ".310 armor-piercing bullet" damage = 50 - armour_penetration = 60 + armour_penetration = 50 + wound_bonus = -20 // .585 Trappiste // High caliber round used in large pistols and revolvers @@ -696,8 +717,8 @@ weak_against_armour = TRUE - wound_bonus = 30 - bare_wound_bonus = 40 + wound_bonus = 10 + bare_wound_bonus = 20 /obj/item/ammo_box/c585trappiste/hollowpoint name = "ammo box (.585 Trappiste hollowhead)" @@ -728,9 +749,7 @@ /obj/projectile/bullet/c27_54cesarzowa name = ".27-54 Cesarzowa piercing bullet" damage = 15 - armour_penetration = 30 - wound_bonus = -30 - bare_wound_bonus = -10 + armour_penetration = 15 /obj/item/ammo_box/c27_54cesarzowa name = "ammo box (.27-54 Cesarzowa piercing)" @@ -854,8 +873,8 @@ speed = 0.4 damage = 50 armour_penetration = 50 - wound_bonus = 20 - bare_wound_bonus = 30 + wound_bonus = 10 + bare_wound_bonus = 10 demolition_mod = 1.8 /// How much damage we add to things that are weak to this bullet var/anti_materiel_damage_addition = 30 diff --git a/monkestation/code/modules/blueshift/items/company_guns.dm b/monkestation/code/modules/blueshift/items/company_guns.dm index 69eb42cd7969..6157ebbecfe3 100644 --- a/monkestation/code/modules/blueshift/items/company_guns.dm +++ b/monkestation/code/modules/blueshift/items/company_guns.dm @@ -423,15 +423,12 @@ suppressor_x_offset = 9 burst_size = 2 - fire_delay = 0.15 SECONDS + fire_delay = 0.5 SECONDS actions_types = list() - - // Because we're firing a lot of these really fast, we want a lot less wound chance - projectile_wound_bonus = -20 - spread = 12.5 + spread = 14.5 // Hope you didn't need to see anytime soon recoil = 2 - wield_recoil = 0.5 + wield_recoil = 1 /obj/item/gun/ballistic/automatic/xhihao_smg/give_manufacturer_examine() AddElement(/datum/element/manufacturer_examine, COMPANY_XHIHAO) @@ -758,7 +755,6 @@ recoil = 1.5 wield_recoil = 0.5 spread = 2.5 - projectile_wound_bonus = -20 /obj/item/gun/ballistic/automatic/lanca/Initialize(mapload) . = ..() diff --git a/monkestation/code/modules/blueshift/opfor/equipment/medical.dm b/monkestation/code/modules/blueshift/opfor/equipment/medical.dm index 18aec39423e4..d828ea45e5a9 100644 --- a/monkestation/code/modules/blueshift/opfor/equipment/medical.dm +++ b/monkestation/code/modules/blueshift/opfor/equipment/medical.dm @@ -4,6 +4,8 @@ /datum/opposing_force_equipment/medical/twitch name = "TWitch Sensory Stimulant Injector" item_type = /obj/item/reagent_containers/hypospray/medipen/deforest/twitch + description = "A special type of injector containing 10u of TWitch alongside some other chems. Overdosing on this can lead to heart implosion, but give you super speed and bullet immortality." + admin_note = "TWITCH IS VERY OVERPOWERED IF OD'D ON. Overdosing gives them a MASSIVE speed boost, with the ability to dodge 100% of ALL projectiles. OD limit is 15u." /datum/opposing_force_equipment/medical/demoneye name = "DemonEye Steroid Injector" diff --git a/monkestation/code/modules/blueshift/projectiles/__projectile_changes.dm b/monkestation/code/modules/blueshift/projectiles/__projectile_changes.dm index 5b963c5bc198..dfcef8949b2c 100644 --- a/monkestation/code/modules/blueshift/projectiles/__projectile_changes.dm +++ b/monkestation/code/modules/blueshift/projectiles/__projectile_changes.dm @@ -581,6 +581,7 @@ /obj/item/ammo_box/advanced multiple_sprites = AMMO_BOX_FULL_EMPTY + multiload = FALSE /* * 9mm diff --git a/monkestation/code/modules/blueshift/reagents/deforest.dm b/monkestation/code/modules/blueshift/reagents/deforest.dm index 364b1276247e..a3f416711d68 100644 --- a/monkestation/code/modules/blueshift/reagents/deforest.dm +++ b/monkestation/code/modules/blueshift/reagents/deforest.dm @@ -213,12 +213,11 @@ // Reaction to make twitch, makes 10u from 17u input reagents /datum/chemical_reaction/twitch results = list( - /datum/reagent/drug/twitch = 10, + /datum/reagent/drug/twitch = 5, ) required_reagents = list( - /datum/reagent/impedrezene = 5, - /datum/reagent/bluespace = 10, - /datum/reagent/consumable/liquidelectricity = 2, + /datum/reagent/medicine/adminordrazine = 30, + /datum/reagent/bluespace = 30 //why? because fuck you thats why. Im gonna leave it at this. Good luck making it. ) mob_react = FALSE reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING @@ -228,10 +227,12 @@ name = "TWitch" description = "A drug originally developed by and for plutonians to assist them during raids. \ Does not see wide use due to the whole reality-disassociation and heart disease thing afterwards. \ - Can be intentionally overdosed to increase the drug's effects" + However, the gods came to an agreement, and banished it from the realms. \ + If the gods catch you using this, expect a swift and painful death." + reagent_state = LIQUID color = "#c22a44" - taste_description = "television static" + taste_description = "television static, and the gods wrath" metabolization_rate = 0.65 * REAGENTS_METABOLISM ph = 3 overdose_threshold = 15 diff --git a/monkestation/code/modules/botany/components/plant_growing.dm b/monkestation/code/modules/botany/components/plant_growing.dm index 2943e7ee7676..def1798f515d 100644 --- a/monkestation/code/modules/botany/components/plant_growing.dm +++ b/monkestation/code/modules/botany/components/plant_growing.dm @@ -74,6 +74,10 @@ START_PROCESSING(SSplants, src) SEND_SIGNAL(parent, COMSIG_GROWING_WATER_UPDATE, water_precent) +/datum/component/plant_growing/Destroy(force) + STOP_PROCESSING(SSplants, src) + return ..() + /datum/component/plant_growing/process(seconds_per_tick) if(!length(managed_seeds)) return diff --git a/monkestation/code/modules/botany/species/apid/species.dm b/monkestation/code/modules/botany/species/apid/species.dm index cad389f9a0dc..38ced3891b3b 100644 --- a/monkestation/code/modules/botany/species/apid/species.dm +++ b/monkestation/code/modules/botany/species/apid/species.dm @@ -41,6 +41,7 @@ TRAIT_HAS_MARKINGS, ) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG + inherent_factions = list(FACTION_HIVE) meat = /obj/item/food/meat/slab/human/mutant/apid @@ -131,6 +132,13 @@ if(istype(attacking_item, /obj/item/melee/flyswatter)) damage_mods += 10 // Yes, a 10x damage modifier +/datum/species/apid/handle_chemical(datum/reagent/chem, mob/living/carbon/human/affected, seconds_per_tick, times_fired) + . = ..() + if(. & COMSIG_MOB_STOP_REAGENT_CHECK) + return + if(chem.type == /datum/reagent/toxin/pestkiller) + affected.adjustToxLoss(3 * REM * seconds_per_tick) + /datum/species/apid/get_species_description() return "Apids are a race of bipedal bees from the jungle planet of Saltu. Due to their large bodies, they have lost the ability to fly." @@ -153,3 +161,38 @@ 'monkestation/sound/voice/laugh/moth/mothlaugh.ogg', 'monkestation/sound/voice/laugh/moth/mothsqueak.ogg', ) + +/datum/species/apid/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list( + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "fa-bug", + SPECIES_PERK_NAME = "Bee", + SPECIES_PERK_DESC = "Other bees will not attack apids due to their similar biology.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_ICON = "fa-hive", + SPECIES_PERK_NAME = "Hiver", + SPECIES_PERK_DESC = "Apids can pollinate plants to raise their stats. \ + As well as being able to create hives using their collected pollen.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEUTRAL_PERK, + SPECIES_PERK_ICON = "fa-eye", + SPECIES_PERK_NAME = "Big Eyes", + SPECIES_PERK_DESC = "Apids can see better in the dark due to their eyes \ + absorbing more light, but are kept down longer by flashes.", + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "fist-raised", + SPECIES_PERK_NAME = "Insectoid Biology", + SPECIES_PERK_DESC = "Fly swatters will deal higher amounts of damage to a Apid.\ + As well as being hurt by pest spray.", + ), + ) + + return to_add diff --git a/monkestation/code/modules/cargo/markets/market_items/weapons.dm b/monkestation/code/modules/cargo/markets/market_items/weapons.dm new file mode 100644 index 000000000000..9eb2073bbdf1 --- /dev/null +++ b/monkestation/code/modules/cargo/markets/market_items/weapons.dm @@ -0,0 +1,9 @@ +/datum/market_item/weapon/comically_large_spoon + name = "Comically Large Spoon" + desc = "It's a gigantic spoon. Good for whacking someone's head in, I guess." + item = /obj/item/comically_large_spoon + + price_min = CARGO_CRATE_VALUE * 0.5 + price_max = CARGO_CRATE_VALUE * 1.5 + stock_max = 2 + availability_prob = 30 diff --git a/monkestation/code/modules/cassettes/cassette_approval.dm b/monkestation/code/modules/cassettes/cassette_approval.dm index 69f7306c8574..e53173d972aa 100644 --- a/monkestation/code/modules/cassettes/cassette_approval.dm +++ b/monkestation/code/modules/cassettes/cassette_approval.dm @@ -76,19 +76,24 @@ GLOBAL_LIST_INIT(cassette_reviews, list()) var/verdict = "NONE" /datum/cassette_review/Destroy(force) - . = ..() if(cassette_data) - QDEL_LIST(cassette_data) - submitter = null + cassette_data["side1"]["song_name"] = null + cassette_data["side1"]["song_url"] = null + cassette_data["side2"]["song_name"] = null + cassette_data["side2"]["song_url"] = null + cassette_data.Cut() + cassette_data = null + if(isnull(submitted_tape.loc)) + QDEL_NULL(submitted_tape) // Remove any tapes in null_space. Denied or Pending condition. if(id && (id in GLOB.cassette_reviews)) GLOB.cassette_reviews -= id // Remove the key + return ..() /datum/cassette_review/ui_state(mob/user) return GLOB.always_state /datum/cassette_review/ui_interact(mob/user, datum/tgui/ui) . = ..() - ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "CassetteReview", "[submitted_ckey]'s Cassette") @@ -120,10 +125,6 @@ GLOBAL_LIST_INIT(cassette_reviews, list()) action_taken = TRUE verdict = "DENIED" -/datum/cassette_review/ui_close()// Don't leave orphaned datums laying around. Hopefully this handles timeouts? - . = ..() - qdel(src) - /datum/cassette_review/proc/approve_review(mob/user) if(!check_rights_for(user.client, R_FUN)) return @@ -197,9 +198,25 @@ GLOBAL_LIST_INIT(cassette_reviews, list()) . = ..() if(.) return - if(!length(GLOB.cassette_reviews) || !GLOB.cassette_reviews[action]) + + if(!length(GLOB.cassette_reviews)) + return + + var/tape_id = params["tape_id"] + if(!tape_id || !GLOB.cassette_reviews[tape_id]) + return + + if(action == "delete_cassette") + var/datum/cassette_review/cassette = GLOB.cassette_reviews[tape_id] + var/final_info = (cassette.action_taken ? "Action taken: True, verdict was [cassette.verdict]" : "Action taken: False") + message_admins("[key_name_admin(usr)] has deleted Cassette:[cassette.submitted_tape.name] with ID:[tape_id]. [final_info]") + log_admin("[key_name(usr)] sent \"[action]\" on [cassette.submitted_tape.name] with ID:[tape_id]. [final_info]") + qdel(cassette) + return + + if(action == "review_cassette") + var/datum/cassette_review/cassette = GLOB.cassette_reviews[tape_id] + cassette.ui_interact(ui.user) return - var/datum/cassette_review/cassette = GLOB.cassette_reviews[action] - cassette.ui_interact(ui.user) diff --git a/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/jobs.dm b/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/jobs.dm index c3f73d23cc2e..ef90205d9b79 100644 --- a/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/jobs.dm +++ b/monkestation/code/modules/cybernetics/augments/arm_augments/item_sets/jobs.dm @@ -2,6 +2,7 @@ name = "integrated toolset implant" desc = "A stripped-down version of the engineering cyborg toolset, designed to be installed on subject's arm. Contain advanced versions of every tool." actions_types = list(/datum/action/item_action/organ_action/toggle/toolkit) + icon_state = "toolkit_generic" items_to_create = list( /obj/item/screwdriver/cyborg, /obj/item/wrench/cyborg, @@ -14,6 +15,7 @@ /obj/item/organ/internal/cyberimp/arm/item_set/toolset/l zone = BODY_ZONE_L_ARM + icon_state = "toolkit_engineering" /obj/item/organ/internal/cyberimp/arm/item_set/toolset/emag_act(mob/user, obj/item/card/emag/emag_card) for(var/datum/weakref/created_item in items_list) @@ -28,6 +30,7 @@ /obj/item/organ/internal/cyberimp/arm/item_set/surgery name = "surgical toolset implant" desc = "A set of surgical tools hidden behind a concealed panel on the user's arm." + icon_state = "toolkit_surgical" actions_types = list(/datum/action/item_action/organ_action/toggle/toolkit) items_to_create = list( /obj/item/retractor/augment, diff --git a/monkestation/code/modules/cybernetics/augments/chest_augments.dm b/monkestation/code/modules/cybernetics/augments/chest_augments.dm index 9a43ea02b05f..aa25b195f7ed 100644 --- a/monkestation/code/modules/cybernetics/augments/chest_augments.dm +++ b/monkestation/code/modules/cybernetics/augments/chest_augments.dm @@ -219,9 +219,9 @@ ADD_TRAIT(src, TRAIT_NODROP, INNATE_TRAIT) /obj/item/organ/internal/cyberimp/chest/nutriment - name = "Nutriment pump implant" + name = "nutriment pump implant" desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are starving." - icon_state = "chest_implant" + icon_state = "nutriment_implant" implant_color = "#00AA00" var/hunger_threshold = NUTRITION_LEVEL_STARVING var/synthesizing = 0 @@ -254,17 +254,17 @@ /obj/item/organ/internal/cyberimp/chest/nutriment/plus - name = "Nutriment pump implant PLUS" + name = "nutriment pump implant PLUS" desc = "This implant will synthesize and pump into your bloodstream a small amount of nutriment when you are hungry." - icon_state = "chest_implant" + icon_state = "adv_nutriment_implant" implant_color = "#006607" hunger_threshold = NUTRITION_LEVEL_HUNGRY poison_amount = 10 /obj/item/organ/internal/cyberimp/chest/reviver - name = "Reviver implant" + name = "reviver implant" desc = "This implant will attempt to revive and heal you if you lose consciousness. For the faint of heart!" - icon_state = "chest_implant" + icon_state = "reviver_implant" implant_color = "#AD0000" slot = ORGAN_SLOT_HEART_AID encode_info = AUGMENT_NT_HIGHLEVEL diff --git a/monkestation/code/modules/cybernetics/augments/eye_implants.dm b/monkestation/code/modules/cybernetics/augments/eye_implants.dm index e3b08179ba55..f1665643c020 100644 --- a/monkestation/code/modules/cybernetics/augments/eye_implants.dm +++ b/monkestation/code/modules/cybernetics/augments/eye_implants.dm @@ -56,26 +56,30 @@ toggled_on = FALSE /obj/item/organ/internal/cyberimp/eyes/hud/medical - name = "Medical HUD implant" + name = "medical HUD implant" desc = "These cybernetic eye implants will display a medical HUD over everything you see." + icon_state = "eye_implant_medical" HUD_type = DATA_HUD_MEDICAL_ADVANCED HUD_trait = TRAIT_MEDICAL_HUD /obj/item/organ/internal/cyberimp/eyes/hud/security - name = "Security HUD implant" + name = "security HUD implant" desc = "These cybernetic eye implants will display a security HUD over everything you see." + name = "security HUD implant" HUD_type = DATA_HUD_SECURITY_ADVANCED HUD_trait = TRAIT_SECURITY_HUD organ_flags = ALL encode_info = AUGMENT_NT_HIGHLEVEL /obj/item/organ/internal/cyberimp/eyes/hud/diagnostic - name = "Diagnostic HUD implant" + name = "diagnostic HUD implant" desc = "These cybernetic eye implants will display a diagnostic HUD over everything you see." + name = "diagnostic HUD implant" HUD_type = DATA_HUD_DIAGNOSTIC_ADVANCED /obj/item/organ/internal/cyberimp/eyes/hud/security/syndicate name = "Contraband Security HUD Implant" desc = "A Cybersun Industries brand Security HUD Implant. These illicit cybernetic eye implants will display a security HUD over everything you see." + icon_state = "eye_implant_syndicate" organ_flags = ORGAN_SYNTHETIC | ORGAN_HIDDEN encode_info = AUGMENT_SYNDICATE_LEVEL diff --git a/monkestation/code/modules/cybernetics/augments/internal_implants.dm b/monkestation/code/modules/cybernetics/augments/internal_implants.dm index eb038adcf449..931d07d64448 100644 --- a/monkestation/code/modules/cybernetics/augments/internal_implants.dm +++ b/monkestation/code/modules/cybernetics/augments/internal_implants.dm @@ -38,6 +38,7 @@ /obj/item/organ/internal/cyberimp/brain/anti_drop name = "anti-drop implant" desc = "This cybernetic brain implant will allow you to force your hand muscles to contract, preventing item dropping. Twitch ear to toggle." + icon_state = "brain_implant_antidrop" var/active = FALSE var/list/stored_items = list() implant_color = "#DE7E00" @@ -104,8 +105,9 @@ stored_items -= source /obj/item/organ/internal/cyberimp/brain/anti_stun - name = "CNS Rebooter implant" + name = "CNS rebooter implant" desc = "This implant will automatically give you back control over your central nervous system, reducing downtime when stunned." + icon_state = "brain_implant_rebooter" implant_color = "#FFFF00" slot = ORGAN_SLOT_BRAIN_ANTISTUN diff --git a/monkestation/code/modules/floorsigns/floorsigns.dm b/monkestation/code/modules/floorsigns/floorsigns.dm new file mode 100644 index 000000000000..a2cc65f83d13 --- /dev/null +++ b/monkestation/code/modules/floorsigns/floorsigns.dm @@ -0,0 +1,76 @@ +/obj/effect/turf_decal/floorsign + icon = 'monkestation/icons/turf/floorsign.dmi' + +// Public +/obj/effect/turf_decal/floorsign/escape + icon_state = "escape" + +/obj/effect/turf_decal/floorsign/arrow + icon_state = "arrow" + +// Command +/obj/effect/turf_decal/floorsign/bridge + icon_state = "bridge" + +/obj/effect/turf_decal/floorsign/ai + icon_state = "ai" + +// Engineering +/obj/effect/turf_decal/floorsign/engineering + icon_state = "engineering" + +/obj/effect/turf_decal/floorsign/atmos + icon_state = "atmos" + +// Service +/obj/effect/turf_decal/floorsign/kitchen_bar + icon_state = "kitchen_bar" + +/obj/effect/turf_decal/floorsign/kitchen + icon_state = "kitchen" + +/obj/effect/turf_decal/floorsign/bar + icon_state = "bar" + +/obj/effect/turf_decal/floorsign/library + icon_state = "library" + +/obj/effect/turf_decal/floorsign/botany + icon_state = "botany" + +// Medical +/obj/effect/turf_decal/floorsign/medical + icon_state = "medical" + +/obj/effect/turf_decal/floorsign/chemistry + icon_state = "chemistry" + +/obj/effect/turf_decal/floorsign/psychology + icon_state = "psychology" + +// Security +/obj/effect/turf_decal/floorsign/security + icon_state = "security" + +/obj/effect/turf_decal/floorsign/prison + icon_state = "prison" + +/obj/effect/turf_decal/floorsign/courtroom + icon_state = "courtroom" + +// Supply +/obj/effect/turf_decal/floorsign/cargo + icon_state = "cargo" + +/obj/effect/turf_decal/floorsign/mining + icon_state = "mining" + +// Science +/obj/effect/turf_decal/floorsign/science1 + icon_state = "science1" + +/obj/effect/turf_decal/floorsign/science2 + icon_state = "science2" + +/obj/effect/turf_decal/floorsign/genetics + icon_state = "genetics" diff --git a/monkestation/code/modules/loadouts/loadout_outfit_helper.dm b/monkestation/code/modules/loadouts/loadout_outfit_helper.dm index 60368d4764f4..dba71dee25b3 100644 --- a/monkestation/code/modules/loadouts/loadout_outfit_helper.dm +++ b/monkestation/code/modules/loadouts/loadout_outfit_helper.dm @@ -55,7 +55,11 @@ continue numbers += num var/list/unusuals = preference_source?.extra_stat_inventory["unusual"] - var/list/data = unusuals[text2num(num)] + var/unusual_idx = text2num(num) + if(length(unusuals) < unusual_idx) + stack_trace("tried to get unusual [unusual_idx] despite length being [length(unusuals)]") + continue + var/list/data = unusuals[unusual_idx] var/item_path = text2path(data["unusual_type"]) var/obj/item/new_item = new item_path(briefcase) new_item.AddComponent(/datum/component/unusual_handler, data) @@ -79,7 +83,12 @@ equipOutfit(equipped_outfit, visuals_only) for(var/num as anything in preference_source?.special_loadout_list["unusual"]) - var/list/data = preference_source?.extra_stat_inventory["unusual"][text2num(num)] + var/list/unusuals = preference_source?.extra_stat_inventory["unusual"] + var/unusual_idx = text2num(num) + if(length(unusuals) < unusual_idx) + stack_trace("tried to get unusual [unusual_idx] despite length being [length(unusuals)]") + continue + var/list/data = unusuals[unusual_idx] var/item_path = text2path(data["unusual_type"]) var/obj/item/new_item = new item_path new_item.AddComponent(/datum/component/unusual_handler, data) diff --git a/monkestation/code/modules/mob/living/basic/pets/cat.dm b/monkestation/code/modules/mob/living/basic/pets/cat.dm index 44fb0356e29b..99fc68d0255e 100644 --- a/monkestation/code/modules/mob/living/basic/pets/cat.dm +++ b/monkestation/code/modules/mob/living/basic/pets/cat.dm @@ -1,9 +1,9 @@ -/mob/living/simple_animal/pet/cat +/mob/living/basic/pet/cat //. = ..() worn_slot_flags = ITEM_SLOT_HEAD head_icon = 'monkestation/icons/mob/pets_held.dmi' -/mob/living/simple_animal/hostile/syndicat +/mob/living/basic/hostile/syndicat //. = ..() worn_slot_flags = ITEM_SLOT_HEAD head_icon = 'monkestation/icons/mob/pets_held.dmi' diff --git a/monkestation/code/modules/mob/living/basic/pets/walterverse.dm b/monkestation/code/modules/mob/living/basic/pets/walterverse.dm index 2dd06a640936..e111872a3712 100644 --- a/monkestation/code/modules/mob/living/basic/pets/walterverse.dm +++ b/monkestation/code/modules/mob/living/basic/pets/walterverse.dm @@ -8,7 +8,13 @@ icon_dead = "saulter_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "Hi, i'm Saul Goodman.", "Did you know you have rights?", "Based!") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/saulter/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "Hi, i'm Saul Goodman.", "Did you know you have rights?", "Based!")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/negative name = "Negative Walter" @@ -20,7 +26,13 @@ icon_dead = "negative_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("skrab!", "sfoow!", "retlaW", "skcurterif", "skcurtretsnom") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/negative/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("skrab!", "sfoow!", "retlaW", "skcurterif", "skcurtretsnom")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/syndicate name = "Syndicate Walter" @@ -32,7 +44,13 @@ icon_dead = "syndie_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "woofs!", "Walter", "Down with Nanotrasen!", "For the Syndicate!") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/syndicate/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "woofs!", "Walter", "Down with Nanotrasen!", "For the Syndicate!")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/doom name = "Doom Walter" @@ -44,7 +62,13 @@ icon_dead = "doom_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("...") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/doom/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("...")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/space name = "Space Walter" @@ -59,7 +83,13 @@ bodytemp_heat_damage_limit = 1500 gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "woofs!", "spess!", "Walter", "firetrucks", "monstertrucks", "spaceships") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/space/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "woofs!", "spess!", "Walter", "firetrucks", "monstertrucks", "spaceships")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/sus name = "Suspicious Walter" @@ -71,11 +101,18 @@ icon_dead = "sus_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "woofs!", "sus!", "Walter", "firetrucks", "monstertrucks", "tasks") + /mob/living/basic/pet/dog/bullterrier/walter/sus/Initialize(mapload) . = ..() ADD_TRAIT(src, TRAIT_VENTCRAWLER_ALWAYS, INNATE_TRAIT) +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/sus/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "woofs!", "sus!", "Walter", "firetrucks", "monstertrucks", "tasks")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) + /mob/living/basic/pet/dog/bullterrier/walter/clown name = "Clown Walter" real_name = "Clown Walter" @@ -86,8 +123,13 @@ icon_dead = "clown_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "woofs!", "honks!", "Walter", "firetrucks", "monstertrucks") +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/clown/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "woofs!", "honks!", "Walter", "firetrucks", "monstertrucks")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/french name = "French Walter" @@ -99,7 +141,13 @@ icon_dead = "french_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("aboiement!", "aboyer!", "Walter", "camions de pompiers", "camions monstres") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/french/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("aboiement!", "aboyer!", "Walter", "camions de pompiers", "camions monstres")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/british name = "Bri'ish Wal'ah" @@ -107,7 +155,13 @@ desc = "Nar'sie and like ra''var are naw'hin' compared 'o 'he migh' of 'hiz mons'er'ruck lovin' dog." gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks!", "woofs!", "Wal'ah", "fire'rucks", "mons'er'rucks") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/british/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks!", "woofs!", "Wal'ah", "fire'rucks", "mons'er'rucks")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/wizard name = "Magic Walter" @@ -119,7 +173,13 @@ icon_dead = "wizard_dead" gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("ONI SOMA", "CLANG!", "UN'LTD P'WAH", "AULIE OXIN FIERA", "GIN'YU`CAPAN") + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/wizard/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("ONI SOMA", "CLANG!", "UN'LTD P'WAH", "AULIE OXIN FIERA", "GIN'YU`CAPAN")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) /mob/living/basic/pet/dog/bullterrier/walter/smallter name = "Smallter" @@ -127,8 +187,14 @@ desc = "Nar'sie and rat'var are nothing compared to the might of this tiny dog." gold_core_spawnable = FRIENDLY_SPAWN unique_pet = TRUE - //speak = list("barks", "woofs", "walter", "firetrucks", "monstertrucks") /mob/living/basic/pet/dog/bullterrier/walter/smallter/Initialize(mapload) . = ..() update_transform(0.5) + +///Updates dog speech and emotes for each walter +/mob/living/basic/pet/dog/bullterrier/walter/smallter/update_dog_speech(datum/ai_planning_subtree/random_speech/speech) + speech.speech_chance = 5 + speech.speak = string_list(list("barks", "woofs", "walter", "firetrucks", "monstertrucks")) + speech.emote_hear = string_list(list("barks!", "woofs!", "yaps.","pants.")) + speech.emote_see = string_list(list("shakes [p_their()] head.", "chases [p_their()] tail.","shivers.")) diff --git a/monkestation/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm b/monkestation/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm new file mode 100644 index 000000000000..c2895d205e43 --- /dev/null +++ b/monkestation/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_actions.dm @@ -0,0 +1,3 @@ +/datum/action/cooldown/mob_cooldown/riot/make_minion(mob/living/new_minion, minion_desc, list/command_list = mouse_commands) + . = ..() + ADD_TRAIT(new_minion, TRAIT_VIRUSIMMUNE, REF(owner)) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm index 4b15d3e65394..f35f1a18a973 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/floran.dm @@ -46,7 +46,7 @@ var/turf/T = H.loc light_amount = min(1, T.get_lumcount()) - 0.5 if(light_amount > 0.3) - H.heal_overall_damage(brute = 0.25 * seconds_per_tick, burn = 0.25 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC) //Lowered to 0.25 + H.heal_overall_damage(brute = 0.25 * seconds_per_tick, burn = 0.10 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC) //Lowered to 0.25 H.adjustToxLoss(-0.25 * seconds_per_tick) H.adjustOxyLoss(-0.25 * seconds_per_tick) @@ -78,12 +78,6 @@ var/list/to_add = list() to_add += list( - list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, - SPECIES_PERK_ICON = "fist-raised", - SPECIES_PERK_NAME = "Carnivore", - SPECIES_PERK_DESC = "As a vicious carnivore, your claws do more damage to your prey.", - ), list( SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, SPECIES_PERK_ICON = "sun", diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm index a3cb05e4acce..1475e913b1d2 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/goblin.dm @@ -96,10 +96,10 @@ SPECIES_PERK_DESC = "Goblins run faster than other species.", ), list( - SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK, + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, SPECIES_PERK_ICON = "fist-raised", - SPECIES_PERK_NAME = "Hard to Keep Down", - SPECIES_PERK_DESC = "You get back up quicker from stuns.", + SPECIES_PERK_NAME = "Easy to Keep Down", + SPECIES_PERK_DESC = "You get back up from stuns slower.", ), ) diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/ipc.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/ipc.dm index 4307b69bccbc..4fcca54eb1cf 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/ipc.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/ipc.dm @@ -16,7 +16,6 @@ TRAIT_ADVANCEDTOOLUSER, TRAIT_RADIMMUNE, TRAIT_NOBREATH, - TRAIT_TOXIMMUNE, TRAIT_GENELESS, TRAIT_STABLEHEART, TRAIT_LITERATE, @@ -52,6 +51,7 @@ mutantlungs = /obj/item/organ/internal/lungs/synth mutantheart = /obj/item/organ/internal/heart/synth mutantliver = /obj/item/organ/internal/liver/synth + mutantbutt = /obj/item/organ/internal/butt/iron mutantappendix = null exotic_bloodtype = /datum/blood_type/oil @@ -340,3 +340,23 @@ return QDEL_NULL(trauma) + +/datum/species/ipc/create_pref_unique_perks() + var/list/to_add = list() + + to_add += list( + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "fa-bone", + SPECIES_PERK_NAME = "Surplus Parts", + SPECIES_PERK_DESC = "IPCs take 20% more brute and burn due to brittle parts." + ), + list( + SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK, + SPECIES_PERK_ICON = "user-times", + SPECIES_PERK_NAME = "Limbs Easily Dismembered", + SPECIES_PERK_DESC = "IPCs limbs are not secured well, and as such they are easily dismembered.", + ), + ) + + return to_add diff --git a/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm b/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm index d17d38ffe3b0..57a61b475892 100644 --- a/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm +++ b/monkestation/code/modules/mob/living/carbon/human/species_type/oozeling.dm @@ -110,9 +110,6 @@ /datum/species/oozeling/spec_death(gibbed, mob/living/carbon/human/H) . = ..() - if(gibbed) - H.dna = null - /////// /// CHEMICAL HANDLING /// Here's where slimes heal off plasma and where they hate drinking water. diff --git a/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm b/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm index b3910fab9d6c..8f87f22be7bb 100644 --- a/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm +++ b/monkestation/code/modules/modular_computers/computers/item/role_tablet_presets.dm @@ -7,7 +7,7 @@ /datum/computer_file/program/records/medical, /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, - /datum/computer_file/program/radar/lifeline, // For finding security officers + /datum/computer_file/program/lifeline, // For finding security officers ) /obj/item/modular_computer/pda/engineering @@ -43,7 +43,7 @@ /datum/computer_file/program/records/security, /datum/computer_file/program/crew_manifest, /datum/computer_file/program/robocontrol, - /datum/computer_file/program/radar/lifeline, + /datum/computer_file/program/lifeline, ) /obj/item/modular_computer/pda/signal diff --git a/monkestation/code/modules/modular_computers/file_system/programs/lifeline.dm b/monkestation/code/modules/modular_computers/file_system/programs/lifeline.dm new file mode 100644 index 000000000000..0606ec9bacda --- /dev/null +++ b/monkestation/code/modules/modular_computers/file_system/programs/lifeline.dm @@ -0,0 +1,155 @@ +/datum/computer_file/program/lifeline + filename = "lifeline" + filedesc = "Lifeline" + extended_desc = "This program allows for tracking of crew members via their suit sensors." + transfer_access = list(ACCESS_MEDICAL, ACCESS_BLUESHIELD, ACCESS_BRIG_PHYSICIAN, ACCESS_DETECTIVE) + category = PROGRAM_CATEGORY_CREW + ui_header = "borg_mon.gif" //DEBUG -- new icon before PR (classic) + program_icon_state = "radarntos" + // requires_ntnet = TRUE -- disabled to be constistent with the paramedic's crew monitor + available_on_ntnet = TRUE + usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET + size = 5 + tgui_id = "NtosLifeline" + program_icon = "heartbeat" + + // Tracking information + var/list/sensors = list() + var/mob/living/selected + var/last_update_time + + // UI Settings + var/sort_asc = TRUE + var/sort_by = "dist" + var/blueshield = FALSE + + ///Used to keep track of the last value program_icon_state was set to, to prevent constant unnecessary update_appearance() calls + var/last_icon_state = "" + + +/datum/computer_file/program/lifeline/on_start(mob/living/user) + . = ..() + if(.) + blueshield = istype(computer, /obj/item/modular_computer/pda/blueshield) + START_PROCESSING(SSfastprocess, src) + +/datum/computer_file/program/lifeline/kill_program(mob/user) + sensors = list() + selected = null + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/datum/computer_file/program/lifeline/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/datum/computer_file/program/lifeline/ui_data(mob/user) + return list( + "selected" = selected, + "sensors" = update_sensors(), + "settings" = list( + "blueshield" = blueshield, + "sortAsc" = sort_asc, + "sortBy" = sort_by + ) + ) + +/datum/computer_file/program/lifeline/ui_act(action, params, datum/tgui/ui, datum/ui_state/state) + switch(action) + if("select") + selected = params["ref"] + if("sortAsc") + sort_asc = params["val"] + if("sortBy") + sort_by = params["val"] + if("blueshield") + blueshield = params["val"] + return TRUE + +/datum/computer_file/program/lifeline/proc/update_sensors() + var/turf/pos = get_turf(computer) + if (world.time <= last_update_time + 3 SECONDS && sensors) + return sensors + var/nt_net = GLOB.crewmonitor.get_ntnet_wireless_status(pos.z) + + sensors = list() + for(var/tracked_mob in GLOB.suit_sensors_list | GLOB.nanite_sensors_list) + var/sensor_mode = GLOB.crewmonitor.get_tracking_level(tracked_mob, pos.z, nt_net) + if (sensor_mode == SENSOR_OFF) + continue + var/mob/living/tracked_living_mob = tracked_mob + + var/turf/sensor_pos = get_turf(tracked_living_mob) + + var/list/crewinfo = list( + ref = REF(tracked_living_mob), + name = "Unknown", + ijob = 81, // UNKNOWN_JOB_ID from crew.dm + dist = -1, // This value tells the UI that location is disabled + ) + + if (sensor_pos.z == pos.z || (sensor_pos.z in SSmapping.get_connected_levels(pos.z))) + if (sensor_mode == SENSOR_COORDS) + crewinfo["zdiff"] = sensor_pos.z-pos.z + crewinfo["dist"] = max(get_dist(pos, sensor_pos), 0) + crewinfo["degrees"] = round(get_angle(pos, sensor_pos)) + crewinfo["area"] = get_area_name(tracked_living_mob, format_text = TRUE) + else // tracking through NT Net + crewinfo["zdiff"] = is_station_level(sensor_pos.z) ? 0 : -1 // 0: on station, -1: mining + if (sensor_mode == SENSOR_COORDS) + crewinfo["dist"] = -2 // This value tells the UI that tracking is through NT Net + crewinfo["area"] = get_area_name(tracked_living_mob, format_text = TRUE) + else + crewinfo["dist"] = -3 // This value tells the UI that tracking is through NT Net and location is disabled + + var/obj/item/card/id/id_card = tracked_living_mob.get_idcard(hand_first = FALSE) + if(id_card) + crewinfo["name"] = id_card.registered_name + crewinfo["assignment"] = id_card.assignment + var/trim_assignment = id_card.get_trim_assignment() + if (GLOB.crewmonitor.jobs[trim_assignment] != null) + crewinfo["trim"] = trim_assignment + crewinfo["ijob"] = GLOB.crewmonitor.jobs[trim_assignment] + + sensors += list(crewinfo) + last_update_time = world.time + return sensors + +//We use SSfastprocess for the program icon state because it runs faster than process_tick() does. +/datum/computer_file/program/lifeline/process() + if(computer.active_program != src) + STOP_PROCESSING(SSfastprocess, src) //We're not the active program, it's time to stop. + return + if(!selected) + return + + var/atom/movable/signal = locate(selected) in GLOB.human_list + var/turf/here_turf = get_turf(computer) + if(GLOB.crewmonitor.get_tracking_level(signal, here_turf.z, nt_net=FALSE, validation=FALSE) != SENSOR_COORDS) + program_icon_state = "[initial(program_icon_state)]lost" + if(last_icon_state != program_icon_state) + computer.update_appearance() + last_icon_state = program_icon_state + return + + var/turf/target_turf = get_turf(signal) + var/trackdistance = get_dist_euclidean(here_turf, target_turf) + switch(trackdistance) + if(0) + program_icon_state = "[initial(program_icon_state)]direct" + if(1 to 12) + program_icon_state = "[initial(program_icon_state)]close" + if(13 to 24) + program_icon_state = "[initial(program_icon_state)]medium" + if(25 to INFINITY) + program_icon_state = "[initial(program_icon_state)]far" + + if(last_icon_state != program_icon_state) + computer.update_appearance() + last_icon_state = program_icon_state + computer.setDir(get_dir(here_turf, target_turf)) + +//We can use process_tick to restart fast processing, since the computer will be running this constantly either way. +/datum/computer_file/program/lifeline/process_tick(seconds_per_tick) + if(computer.active_program == src) + START_PROCESSING(SSfastprocess, src) diff --git a/monkestation/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/monkestation/code/modules/projectiles/ammunition/ballistic/shotgun.dm new file mode 100644 index 000000000000..65ab06e7a1a2 --- /dev/null +++ b/monkestation/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -0,0 +1,25 @@ +//THE NEW SHELLS THE ONES YOU LOAD INTO THE GUN INGAME +/obj/item/ammo_casing/shotgun/trickshot + name = "trickshot shell" + desc = "A 12 gauge trickshot shell. Specially made to bounce up to five times!" + icon = 'monkestation/icons/obj/guns/ammunition.dmi' + icon_state = "trickshell" + projectile_type = /obj/projectile/bullet/pellet/trickshot + pellets = 6 + variance = 8 + +/obj/item/ammo_casing/shotgun/uraniumpen + name = "uranium penetrator" + desc = "A uranium penetrator. Not radioactive, but capable of punching through walls and objects." + icon = 'monkestation/icons/obj/guns/ammunition.dmi' + icon_state = "uraniumpenetrator" + projectile_type = /obj/projectile/bullet/uraniumpen + +/obj/item/ammo_casing/shotgun/beeshot + name = "beeshot" + desc = "A strange buzzing shell. It sort of resembles a bee." + icon = 'monkestation/icons/obj/guns/ammunition.dmi' + icon_state = "beeshot" + projectile_type = /obj/projectile/bullet/pellet/beeshot + pellets = 3 + variance = 5 diff --git a/monkestation/code/modules/projectiles/projectile/bullets/shotgun.dm b/monkestation/code/modules/projectiles/projectile/bullets/shotgun.dm new file mode 100644 index 000000000000..6cee9b8ae58e --- /dev/null +++ b/monkestation/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -0,0 +1,40 @@ +//NEW AMMO PROJECTILES FOR SHOTGUN AMMOS +/obj/projectile/bullet/pellet/trickshot + name = "trickshot pellet" + damage = 6 + tile_dropoff = 0 + ricochets_max = 5 + ricochet_chance = 100 + ricochet_decay_chance = 0 + ricochet_incidence_leeway = 0 + ricochet_decay_damage = 1 + +/obj/projectile/bullet/uraniumpen + name ="uranium penetrator" + icon = 'monkestation/icons/obj/guns/projectiles.dmi' + icon_state = "uraniumpen" + damage = 35 + projectile_piercing = (ALL & (~PASSMOB)) + +/obj/projectile/bullet/pellet/beeshot + name ="beeshot" + damage = 6 + ricochets_max = 0 + ricochet_chance = 0 + var/spawner_type = /mob/living/basic/bee/toxin + var/deliveryamt = 1 + +/obj/projectile/bullet/pellet/beeshot/on_hit(atom/target, blocked = 0, pierce_hit) // Prime now just handles the two loops that query for people in lockers and people who can see it. + . = ..() + if(!.) + return + if(spawner_type && deliveryamt) + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, 1) + var/list/spawned = spawn_and_random_walk(spawner_type, T, deliveryamt, admin_spawn=((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE)) + afterspawn(spawned) + + qdel(src) + +/obj/projectile/bullet/pellet/beeshot/proc/afterspawn(list/mob/spawned) + return diff --git a/monkestation/code/modules/ranching/chickens/ai/gary/gary_behaviours.dm b/monkestation/code/modules/ranching/chickens/ai/gary/gary_behaviours.dm index 6148a75ac503..33a04c835f22 100644 --- a/monkestation/code/modules/ranching/chickens/ai/gary/gary_behaviours.dm +++ b/monkestation/code/modules/ranching/chickens/ai/gary/gary_behaviours.dm @@ -63,8 +63,7 @@ finish_action(controller, TRUE) /datum/ai_behavior/setup_hideout/perform(seconds_per_tick, datum/ai_controller/controller, ...) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/setup_hideout/finish_action(datum/ai_controller/controller, succeeded, ...) . = ..() @@ -83,8 +82,7 @@ set_movement_target(controller, controller.blackboard[BB_GARY_BARTER_ITEM]) /datum/ai_behavior/gary_retrieve_item/perform(seconds_per_tick, datum/ai_controller/controller, ...) - . = ..() - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/gary_retrieve_item/finish_action(datum/ai_controller/controller, succeeded, ...) . = ..() @@ -118,12 +116,10 @@ var/atom/target = ref.resolve() if(!held_item) //if held_item is null, we pretend that action was succesful - finish_action(controller, TRUE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(!target || !pawn.CanReach(target) || !isliving(target)) - finish_action(controller, FALSE) - return + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_target = target @@ -141,8 +137,7 @@ /datum/ai_behavior/gary_give_item/proc/try_to_give_item(datum/ai_controller/controller, mob/living/target, obj/item/held_item, actually_give) if(QDELETED(held_item) || QDELETED(target)) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/has_left_pocket = target.can_equip(held_item, ITEM_SLOT_LPOCKET) var/has_right_pocket = target.can_equip(held_item, ITEM_SLOT_RPOCKET) @@ -158,8 +153,7 @@ if(!has_left_pocket && !has_right_pocket && !has_valid_hand) held_item.forceMove(get_turf(target)) SEND_SIGNAL(held_item, COMSIG_ITEM_GARY_LOOTED, pawn) - finish_action(controller, FALSE) - return FALSE + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED if(!actually_give) return TRUE @@ -169,7 +163,7 @@ else target.put_in_hands(held_item) SEND_SIGNAL(held_item, COMSIG_ITEM_GARY_LOOTED, pawn) - finish_action(controller, TRUE) + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/gary_give_item/finish_action(datum/ai_controller/controller, succeeded, ...) . = ..() diff --git a/monkestation/code/modules/ranching/components/aging.dm b/monkestation/code/modules/ranching/components/aging.dm index c4d6e51f6023..0bccbc89b06f 100644 --- a/monkestation/code/modules/ranching/components/aging.dm +++ b/monkestation/code/modules/ranching/components/aging.dm @@ -10,7 +10,6 @@ ///our old age callback var/datum/callback/death_callback - /datum/component/aging/Initialize(max_age = 100, age_cooldown = 30 SECONDS, death_callback) . = ..() src.max_age = max_age @@ -20,17 +19,16 @@ START_PROCESSING(SSobj, src) /datum/component/aging/Destroy(force) + STOP_PROCESSING(SSobj, src) death_callback = null return ..() /datum/component/aging/RegisterWithParent() - . = ..() RegisterSignal(parent, COMSIG_AGE_ADJUSTMENT, PROC_REF(adjust_age)) RegisterSignal(parent, COMSIG_AGE_RETURN_AGE, PROC_REF(return_age)) /datum/component/aging/UnregisterFromParent() - . = ..() - UnregisterSignal(parent, COMSIG_AGE_ADJUSTMENT) + UnregisterSignal(parent, list(COMSIG_AGE_ADJUSTMENT, COMSIG_AGE_RETURN_AGE)) /datum/component/aging/process(seconds_per_tick) if(!COOLDOWN_FINISHED(src, current_cooldown)) @@ -38,9 +36,8 @@ COOLDOWN_START(src, current_cooldown, age_cooldown) current_age++ if(max_age <= current_age) - if(death_callback) - death_callback.Invoke() - STOP_PROCESSING(SSobj, src) + death_callback?.Invoke() + return PROCESS_KILL /datum/component/aging/proc/adjust_age(datum/source, adjust) current_age += adjust diff --git a/monkestation/code/modules/ranching/satyr/components/living_drunk.dm b/monkestation/code/modules/ranching/satyr/components/living_drunk.dm index 6aafb42859a6..44fc5da0a840 100644 --- a/monkestation/code/modules/ranching/satyr/components/living_drunk.dm +++ b/monkestation/code/modules/ranching/satyr/components/living_drunk.dm @@ -2,14 +2,15 @@ /datum/component/living_drunk var/current_drunkness = 100 var/max_drunkness = 100 + var/min_drunkness = 0 COOLDOWN_DECLARE(drank_grace) var/grace_period = 5 MINUTES - var/booze_per_drunkness = 100 + var/booze_per_drunkness = 1 var/drunk_state = 0 -/datum/component/living_drunk/Initialize(grace_period = 5 MINUTES, booze_per_drunkness = 100) +/datum/component/living_drunk/Initialize(grace_period = 5 MINUTES, booze_per_drunkness = 1) . = ..() src.grace_period = grace_period src.booze_per_drunkness = booze_per_drunkness @@ -46,7 +47,7 @@ /datum/component/living_drunk/process(seconds_per_tick) if(!COOLDOWN_FINISHED(src, drank_grace)) return - current_drunkness -= 0.1 + current_drunkness = min(min_drunkness, (current_drunkness -= 0.2)) drunkness_change_effects() /datum/component/living_drunk/proc/drunkness_change_effects() @@ -55,11 +56,10 @@ living.apply_status_effect(/datum/status_effect/inebriated/drunk, 80) drunk_state = 2 return - if((current_drunkness <= 30) && (drunk_state != 1 || drunk_state != 2)) + if((current_drunkness <= 30) && drunk_state != 1 && drunk_state != 2) living.apply_status_effect(/datum/status_effect/inebriated/tipsy, 5) drunk_state = 1 return - if(current_drunkness > 30) drunk_state = 0 living.remove_status_effect(/datum/status_effect/inebriated/tipsy) diff --git a/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm b/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm index 3b3aa14886bb..dcf66bf2cee9 100644 --- a/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm +++ b/monkestation/code/modules/slimecore/components/basic_scared_of_item.dm @@ -5,9 +5,12 @@ /datum/component/scared_of_item/Initialize(item_path, range) src.range = range - START_PROCESSING(SSobj, src) +/datum/component/scared_of_item/Destroy(force) + STOP_PROCESSING(SSobj, src) + return ..() + /datum/component/scared_of_item/process(seconds_per_tick) var/mob/living/basic/basic_mob = parent @@ -16,24 +19,21 @@ if(living.stat == DEAD) return - var/broke = FALSE - for(var/mob/living/carbon/human/human in oview(range, basic_mob)) - for(var/obj/item/item as anything in human.held_items) - if(!item) - continue - if(item.type != basic_mob.ai_controller.blackboard[BB_BASIC_MOB_SCARED_ITEM]) - continue - basic_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, FALSE) + main_loop: + for(var/mob/living/carbon/human/human in oview(range, basic_mob)) + for(var/obj/item/item as anything in human.held_items) + if(QDELETED(item)) + continue + if(item.type != basic_mob.ai_controller?.blackboard[BB_BASIC_MOB_SCARED_ITEM]) + continue + basic_mob.ai_controller?.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, FALSE) - if(!was_scared) - SEND_SIGNAL(basic_mob, COMSIG_EMOTION_STORE, human, EMOTION_SCARED, "chased me with an extinguisher.") - last_scared_by = human - was_scared = TRUE - broke = TRUE - break - if(broke) - return - basic_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) + if(!was_scared) + SEND_SIGNAL(basic_mob, COMSIG_EMOTION_STORE, human, EMOTION_SCARED, "chased me with an extinguisher.") + last_scared_by = human + was_scared = TRUE + break main_loop + basic_mob.ai_controller?.set_blackboard_key(BB_BASIC_MOB_STOP_FLEEING, TRUE) if(was_scared) SEND_SIGNAL(basic_mob, COMSIG_EMOTION_STORE, last_scared_by, EMOTION_HAPPY, "stopped chasing me with an extinguisher.", 0) was_scared = FALSE diff --git a/monkestation/code/modules/slimecore/components/emotion_buffer.dm b/monkestation/code/modules/slimecore/components/emotion_buffer.dm index 202b7224116b..b71d68ea9d64 100644 --- a/monkestation/code/modules/slimecore/components/emotion_buffer.dm +++ b/monkestation/code/modules/slimecore/components/emotion_buffer.dm @@ -58,8 +58,8 @@ RegisterSignal(parent, COMSIG_MOVABLE_HEAR, PROC_REF(hear_speech)) /datum/component/emotion_buffer/Destroy(force) - . = ..() host = null + return ..() /datum/component/emotion_buffer/UnregisterFromParent() . = ..() diff --git a/monkestation/code/modules/slimecore/components/friendship_tracker.dm b/monkestation/code/modules/slimecore/components/friendship_tracker.dm index fe3f4f6be659..355162f8e9f3 100644 --- a/monkestation/code/modules/slimecore/components/friendship_tracker.dm +++ b/monkestation/code/modules/slimecore/components/friendship_tracker.dm @@ -11,17 +11,16 @@ /datum/component/friendship_container/Initialize(friendship_levels = list(), befriend_level) . = ..() if(!length(friendship_levels)) - return FALSE - + return COMPONENT_INCOMPATIBLE src.friendship_levels = friendship_levels src.befriend_level = befriend_level /datum/component/friendship_container/Destroy(force) - . = ..() befriended_refs = null weakrefed_friends = null friendship_levels = null + return ..() /datum/component/friendship_container/RegisterWithParent() RegisterSignal(parent, COMSIG_FRIENDSHIP_CHECK_LEVEL, PROC_REF(check_friendship_level)) diff --git a/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm b/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm index 366f9207186b..4e77e9af370d 100644 --- a/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm +++ b/monkestation/code/modules/slimecore/components/generic_mob_hunger.dm @@ -6,19 +6,22 @@ var/hunger_paused = FALSE var/feed_pause_time var/feed_pause_end + var/remove_overfed_timer /datum/component/generic_mob_hunger/Initialize(max_hunger = 250, hunger_drain = 0.1, feed_pause_time = 1 MINUTE, starting_hunger) . = ..() src.hunger_drain = hunger_drain src.max_hunger = max_hunger src.feed_pause_time = feed_pause_time - if(!starting_hunger) - src.current_hunger = max_hunger - else - src.current_hunger = starting_hunger - + src.current_hunger = starting_hunger || max_hunger START_PROCESSING(SSobj, src) +/datum/component/generic_mob_hunger/Destroy(force) + STOP_PROCESSING(SSobj, src) + if(remove_overfed_timer) + deltimer(remove_overfed_timer) + return ..() + /datum/component/generic_mob_hunger/RegisterWithParent() RegisterSignal(parent, COMSIG_MOB_STOP_HUNGER, PROC_REF(stop_hunger)) RegisterSignal(parent, COMSIG_MOB_START_HUNGER, PROC_REF(start_hunger)) @@ -28,12 +31,17 @@ RegisterSignal(parent, COMSIG_ATOM_MOUSE_ENTERED, PROC_REF(view_hunger)) /datum/component/generic_mob_hunger/UnregisterFromParent() - UnregisterSignal(parent, COMSIG_MOB_STOP_HUNGER) - UnregisterSignal(parent, COMSIG_MOB_START_HUNGER) - UnregisterSignal(parent, COMSIG_MOB_FEED) - UnregisterSignal(parent, COMSIG_MOB_RETURN_HUNGER) - UnregisterSignal(parent, COMSIG_MOB_ADJUST_HUNGER) - UnregisterSignal(parent, COMSIG_ATOM_MOUSE_ENTERED) + if(remove_overfed_timer) + deltimer(remove_overfed_timer) + REMOVE_TRAIT(parent, TRAIT_OVERFED, REF(src)) + UnregisterSignal(parent, list( + COMSIG_MOB_STOP_HUNGER, + COMSIG_MOB_START_HUNGER, + COMSIG_MOB_FEED, + COMSIG_MOB_RETURN_HUNGER, + COMSIG_MOB_ADJUST_HUNGER, + COMSIG_ATOM_MOUSE_ENTERED + )) /datum/component/generic_mob_hunger/proc/stop_hunger() hunger_paused = TRUE @@ -51,8 +59,8 @@ if(current_hunger + feed_amount > max_hunger) var/temp = (current_hunger + feed_amount) / max_hunger SEND_SIGNAL(parent, COMSIG_MOB_OVERATE, temp) - ADD_TRAIT(parent, TRAIT_OVERFED, "hunger_trait") - addtimer(CALLBACK(src, PROC_REF(remove_hunger_trait), TRAIT_OVERFED), 5 MINUTES, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + ADD_TRAIT(parent, TRAIT_OVERFED, REF(src)) + remove_overfed_timer = addtimer(TRAIT_CALLBACK_REMOVE(parent, TRAIT_OVERFED, REF(src)), 5 MINUTES, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) current_hunger += feed_amount if(feed_pause_time) feed_pause_end = world.time + feed_pause_time @@ -92,10 +100,6 @@ /datum/component/generic_mob_hunger/proc/adjust_hunger(datum/source, amount) current_hunger += amount -/datum/component/generic_mob_hunger/proc/remove_hunger_trait(trait) - REMOVE_TRAIT(parent, trait, "hunger_trait") - - /datum/component/generic_mob_hunger/proc/view_hunger(mob/living/source, mob/living/clicker) if(!istype(clicker) || !clicker.client) return diff --git a/monkestation/code/modules/slimecore/components/latch_feeding.dm b/monkestation/code/modules/slimecore/components/latch_feeding.dm index 8481661813c5..78ce69058100 100644 --- a/monkestation/code/modules/slimecore/components/latch_feeding.dm +++ b/monkestation/code/modules/slimecore/components/latch_feeding.dm @@ -24,27 +24,24 @@ src.hunger_restore = hunger_restore src.stops_at_crit = stops_at_crit src.check_and_replace = callback - if(!latch_target(loc_check = checks_loc)) return COMPONENT_INCOMPATIBLE - - ADD_TRAIT(parent, TRAIT_FEEDING, LATCH_TRAIT) - START_PROCESSING(SSobj, src) /datum/component/latch_feeding/Destroy(force) - REMOVE_TRAIT(parent, TRAIT_FEEDING, LATCH_TRAIT) + STOP_PROCESSING(SSobj, src) target = null check_and_replace = null return ..() /datum/component/latch_feeding/RegisterWithParent() + ADD_TRAIT(parent, TRAIT_FEEDING, REF(src)) RegisterSignal(parent, COMSIG_LIVING_SET_BUCKLED, PROC_REF(check_buckled)) RegisterSignal(parent, COMSIG_MOB_OVERATE, PROC_REF(stop_feeding)) /datum/component/latch_feeding/UnregisterFromParent() - UnregisterSignal(parent, COMSIG_LIVING_SET_BUCKLED) - UnregisterSignal(parent, COMSIG_MOB_OVERATE) + REMOVE_TRAIT(parent, TRAIT_FEEDING, REF(src)) + UnregisterSignal(parent, list(COMSIG_LIVING_SET_BUCKLED, COMSIG_MOB_OVERATE)) /datum/component/latch_feeding/proc/latch_target(init = FALSE, loc_check = TRUE) var/mob/basic_mob = parent diff --git a/monkestation/code/modules/slimecore/components/mob_stacker.dm b/monkestation/code/modules/slimecore/components/mob_stacker.dm index 68e3680bfaeb..9b4a7bce7dd3 100644 --- a/monkestation/code/modules/slimecore/components/mob_stacker.dm +++ b/monkestation/code/modules/slimecore/components/mob_stacker.dm @@ -13,13 +13,14 @@ var/max_size = 1 -/datum/component/mob_stacker/Initialize(...) +/datum/component/mob_stacker/Initialize() . = ..() main_dude = parent current_head = parent max_size = rand(1, 7) main_dude.max_buckled_mobs = max_size - addtimer(CALLBACK(src, PROC_REF(destroy_self)), rand(30 SECONDS, 120 SECONDS)) + var/lifetime = rand(30 SECONDS, 120 SECONDS) + QDEL_IN(src, lifetime) /datum/component/mob_stacker/RegisterWithParent() . = ..() @@ -28,25 +29,27 @@ RegisterSignal(parent, COMSIG_LIVING_SET_BUCKLED, PROC_REF(check_collapse)) RegisterSignal(parent, COMSIG_MOBSTACKER_DESTROY, PROC_REF(destroy_self)) +/datum/component/mob_stacker/UnregisterFromParent() + UnregisterSignal(parent, list( + COMSIG_CHECK_CAN_ADD_NEW_STACK, + COMSIG_ATOM_JOIN_STACK, + COMSIG_LIVING_SET_BUCKLED, + COMSIG_MOBSTACKER_DESTROY + )) + /datum/component/mob_stacker/Destroy(force) - . = ..() - UnregisterSignal(main_dude, COMSIG_ATOM_JOIN_STACK) - UnregisterSignal(main_dude, COMSIG_LIVING_SET_BUCKLED) - UnregisterSignal(main_dude, COMSIG_CHECK_CAN_ADD_NEW_STACK) - if(main_dude.buckled) - main_dude.buckled.unbuckle_mob(main_dude, force=TRUE) + main_dude.buckled?.unbuckle_mob(main_dude, force = TRUE) main_dude = null current_head = null for(var/mob/living/dude as anything in stacked_mobs) if(isbasicmob(dude)) var/mob/living/basic/basic = dude basic.ai_controller?.reset_ai_status() - REMOVE_TRAIT(dude, TRAIT_IN_STACK, "mob_stack") - UnregisterSignal(dude, COMSIG_ATOM_JOIN_STACK) - UnregisterSignal(dude, COMSIG_LIVING_SET_BUCKLED) - if(dude.buckled) - dude.buckled.unbuckle_mob(dude, force=TRUE) - stacked_mobs -= dude + REMOVE_TRAIT(dude, TRAIT_IN_STACK, REF(src)) + UnregisterSignal(dude, list(COMSIG_ATOM_JOIN_STACK, COMSIG_LIVING_SET_BUCKLED)) + dude.buckled?.unbuckle_mob(dude, force = TRUE) + stacked_mobs.len = 0 + return ..() /datum/component/mob_stacker/proc/try_join_stack(datum/source, mob/living/joiner) @@ -55,7 +58,7 @@ return if(main_dude.buckle_mob(joiner, force = TRUE)) - ADD_TRAIT(joiner, TRAIT_IN_STACK, "mob_stack") + ADD_TRAIT(joiner, TRAIT_IN_STACK, REF(src)) if(isbasicmob(joiner)) var/mob/living/basic/basic = joiner basic.ai_controller?.set_ai_status(AI_STATUS_OFF) diff --git a/monkestation/code/modules/slimecore/components/pollution_scrubber.dm b/monkestation/code/modules/slimecore/components/pollution_scrubber.dm index 108dfb2bd7a9..eabf0c698cd3 100644 --- a/monkestation/code/modules/slimecore/components/pollution_scrubber.dm +++ b/monkestation/code/modules/slimecore/components/pollution_scrubber.dm @@ -10,12 +10,12 @@ src.lifetime = lifetime if(lifetime) - addtimer(CALLBACK(src, PROC_REF(kill_component)), lifetime) + QDEL_IN(src, lifetime) START_PROCESSING(SSobj, src) - -/datum/component/pollution_scrubber/proc/kill_component() - qdel(src) +/datum/component/pollution_scrubber/Destroy(force) + STOP_PROCESSING(SSobj, src) + return ..() /datum/component/pollution_scrubber/process(seconds_per_tick) if(isliving(parent)) @@ -24,5 +24,4 @@ return var/turf/open/turf = get_turf(parent) - if(turf.pollution) - turf.pollution.scrub_amount(scrubbing_amount) + turf.pollution?.scrub_amount(scrubbing_amount) diff --git a/monkestation/code/modules/slimecore/components/vac_tagged.dm b/monkestation/code/modules/slimecore/components/vac_tagged.dm index 87e1c5bc13a6..571571485648 100644 --- a/monkestation/code/modules/slimecore/components/vac_tagged.dm +++ b/monkestation/code/modules/slimecore/components/vac_tagged.dm @@ -3,20 +3,21 @@ /datum/component/vac_tagged/Initialize(mob/creator_mob) . = ..() - if(!creator_mob) + if(QDELETED(creator_mob)) return COMPONENT_INCOMPATIBLE - creator = WEAKREF(creator_mob) /datum/component/vac_tagged/Destroy(force) - UnregisterSignal(parent, list(COMSIG_MOB_FED_ON, COMSIG_QDELETING)) - . = ..() + creator = null + return ..() /datum/component/vac_tagged/RegisterWithParent() - . = ..() RegisterSignal(parent, COMSIG_MOB_FED_ON, PROC_REF(on_fed_on)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_deleting)) +/datum/component/vac_tagged/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOB_FED_ON, COMSIG_QDELETING)) + /datum/component/vac_tagged/proc/on_deleting() qdel(src) diff --git a/monkestation/code/modules/spells/spell_types/conjure/pie.dm b/monkestation/code/modules/spells/spell_types/conjure/pie.dm new file mode 100644 index 000000000000..dcc5f72d7112 --- /dev/null +++ b/monkestation/code/modules/spells/spell_types/conjure/pie.dm @@ -0,0 +1,42 @@ +/datum/action/cooldown/spell/conjure/pie + name = "Summon Pie" + desc = "This spell conjures many a pie, sliced and otherwise." + sound = 'sound/magic/summonitems_generic.ogg' + button_icon_state = "pie" + + school = SCHOOL_CONJURATION + cooldown_time = 1 MINUTES + spell_requirements = null + + invocation = "L'T TH'M E'T CAY K" //let them eat cake + invocation_type = INVOCATION_SHOUT + garbled_invocation_prob = 0 //i'd rather it remain like this + + summon_radius = 2 + summon_amount = 5 + summon_type = list( + /obj/item/food/pie/asdfpie, + /obj/item/food/pie/shepherds_pie, + /obj/item/food/pie/frenchsilkpie, + /obj/item/food/pie/baklava, + /obj/item/food/pie/frostypie, + /obj/item/food/pie/dulcedebatata, + /obj/item/food/pie/blumpkinpie, + /obj/item/food/pie/cocolavatart, + /obj/item/food/pie/berrytart, + /obj/item/food/pie/mimetart, + /obj/item/food/pie/grapetart, + /obj/item/food/pie/appletart, + /obj/item/food/pie/pumpkinpie, + /obj/item/food/pie/cherrypie, + /obj/item/food/pie/applepie, + /obj/item/food/pie/xemeatpie, + /obj/item/food/pie/plump_pie, + /obj/item/food/pie/amanita_pie, + /obj/item/food/pie/tofupie, + /obj/item/food/pie/meatpie, + /obj/item/food/pie/bearypie, + /obj/item/food/pie/berryclafoutis, + /obj/item/food/pie/cream, + /obj/item/food/pie/plain, + ) diff --git a/monkestation/code/modules/surgery/organs/internal/brain.dm b/monkestation/code/modules/surgery/organs/internal/brain.dm index af6e4ed1578e..95e0cce1079f 100644 --- a/monkestation/code/modules/surgery/organs/internal/brain.dm +++ b/monkestation/code/modules/surgery/organs/internal/brain.dm @@ -87,6 +87,14 @@ /obj/item/organ/internal/brain/slime/Destroy(force) QDEL_NULL(membrane_mur) + QDEL_NULL(stored_dna) + QDEL_LIST(stored_quirks) + + if(stored_items) + if(!isnull(src.loc)) + drop_items_to_ground(src.drop_location(), explode = TRUE) + else + QDEL_LIST(stored_items) return ..() /obj/item/organ/internal/brain/slime/examine() @@ -149,7 +157,7 @@ addtimer(CALLBACK(src, PROC_REF(core_ejection), victim), 0) // explode them after the current proc chain ends, to avoid weirdness -/obj/item/organ/internal/brain/slime/proc/enable_coredeath() +/obj/item/organ/internal/brain/slime/proc/enable_coredeath() // No longer used. coredeath = TRUE if(owner?.stat == DEAD) addtimer(CALLBACK(src, PROC_REF(core_ejection), owner), 0) @@ -164,10 +172,8 @@ if(QDELETED(stored_dna)) stored_dna = new - if(victim.dna) - victim.dna.copy_dna(stored_dna) - else - src.stored_dna = null + isnull(victim.dna) ? (stored_dna = null) : victim.dna.copy_dna(stored_dna) + core_ejected = TRUE victim.visible_message(span_warning("[victim]'s body completely dissolves, collapsing outwards!"), span_notice("Your body completely dissolves, collapsing outwards!"), span_notice("You hear liquid splattering.")) var/turf/death_turf = get_turf(victim) @@ -213,14 +219,12 @@ addtimer(CALLBACK(src, PROC_REF(rebuild_body), null, FALSE), 30 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_DELETE_ME) target_bloodsucker.bloodsucker_blood_volume -= (OOZELING_MIN_REVIVE_BLOOD_THRESHOLD * 0.5) - rebuilt = FALSE - if(src.stored_dna) + if(stored_dna) + rebuilt = FALSE victim.transfer_observers_to(src) else //Gibbing is usually what causes this. No dna to get from a destroyed body. - drop_items_to_ground(get_turf(src), TRUE) - Destroy() qdel() - victim.transfer_observers_to(src) + Remove(victim) qdel(victim) @@ -281,8 +285,9 @@ process_and_store_item(victim.back, victim)// Jank to handle modsuit covering items, so it's removed first. Fix this. - var/obj/item/bodypart/chest/target_chest = victim.get_bodypart(BODY_ZONE_CHEST)// Store chest cavity item - process_and_store_item(target_chest.cavity_item, victim) + var/obj/item/bodypart/chest/target_chest = victim.get_bodypart(BODY_ZONE_CHEST) // Store chest cavity item + if(istype(target_chest)) + process_and_store_item(target_chest.cavity_item, victim) for(var/atom/movable/item in victim.get_equipped_items(include_pockets = TRUE)) // Store rest of equipment process_and_store_item(item, victim) diff --git a/monkestation/code/modules/uplink/uplink_items.dm b/monkestation/code/modules/uplink/uplink_items.dm index 406f4c571d06..fb237f6f0136 100644 --- a/monkestation/code/modules/uplink/uplink_items.dm +++ b/monkestation/code/modules/uplink/uplink_items.dm @@ -1,3 +1,30 @@ ///Override for any unique checks for specific items, by default returns TRUE /datum/uplink_item/proc/unique_checks(mob/user, datum/uplink_handler/handler, atom/movable/source) return TRUE + +/datum/uplink_item/dangerous/lever_action + name = "Pump action Shotgun" + desc = "A classic sturdy and robust shotgun. Fits five shells." + item = /obj/item/gun/ballistic/shotgun/lethal + cost = 7 + +//NEW TOT SHOTGUN AMMO BOXES +/datum/uplink_item/ammo/trickshot + name = "Trickshot Shell Box" + desc = "A box with 10 trickshot shells, capable of bouncing up to five times, they are made for the most talented trickshooters around." + cost = 3 + item = /obj/item/storage/box/trickshot + +/datum/uplink_item/ammo/uraniumpen + name = "Uranium Penetrator Box" + desc = "A box with 10 uranium penetrators, capable to penetrating walls and objects, but not people. Works best with thermals!" + cost = 3 + item = /obj/item/storage/box/uraniumpen + +/datum/uplink_item/ammo/beeshot + name = "Beeshot Box" + desc = "A box with 10 Beeshot shells. Creates very angry bees upon impact. Not as strong as buckshot." + cost = 3 + item = /obj/item/storage/box/beeshot + +//END OF NEW TOT SHOTGUN AMMO diff --git a/monkestation/code/modules/veth_misc_items/canopics/canopics.dm b/monkestation/code/modules/veth_misc_items/canopics/canopics.dm index f164cb9f4e73..620219c537da 100644 --- a/monkestation/code/modules/veth_misc_items/canopics/canopics.dm +++ b/monkestation/code/modules/veth_misc_items/canopics/canopics.dm @@ -252,3 +252,13 @@ /obj/item/stack/sheet/mineral/gold = 1, /obj/item/stack/sheet/mineral/silver = 1) category = CAT_CONTAINERS + +/obj/item/storage/box/canopic_box/stocked + +/obj/item/storage/box/canopic_box/stocked/PopulateContents() + var/static/items_inside = list( + /obj/item/storage/box/canopic_hawk = 1, + /obj/item/storage/box/canopic_human = 1, + /obj/item/storage/box/canopic_monke = 1, + /obj/item/storage/box/canopic_jackal = 1) + generate_items_inside(items_inside,src) diff --git a/monkestation/icons/mob/clothing/back.dmi b/monkestation/icons/mob/clothing/back.dmi index 45c1a44aa2a1..3ff9bbf78a67 100644 Binary files a/monkestation/icons/mob/clothing/back.dmi and b/monkestation/icons/mob/clothing/back.dmi differ diff --git a/monkestation/icons/mob/inhands/weapons/melee_lefthand.dmi b/monkestation/icons/mob/inhands/weapons/melee_lefthand.dmi index 5082c8fe6d88..535296e84781 100644 Binary files a/monkestation/icons/mob/inhands/weapons/melee_lefthand.dmi and b/monkestation/icons/mob/inhands/weapons/melee_lefthand.dmi differ diff --git a/monkestation/icons/mob/inhands/weapons/melee_righthand.dmi b/monkestation/icons/mob/inhands/weapons/melee_righthand.dmi index 5e74fb11ef88..bd0492ada856 100644 Binary files a/monkestation/icons/mob/inhands/weapons/melee_righthand.dmi and b/monkestation/icons/mob/inhands/weapons/melee_righthand.dmi differ diff --git a/monkestation/icons/obj/guns/ammunition.dmi b/monkestation/icons/obj/guns/ammunition.dmi new file mode 100644 index 000000000000..3247c444b887 Binary files /dev/null and b/monkestation/icons/obj/guns/ammunition.dmi differ diff --git a/monkestation/icons/obj/guns/projectiles.dmi b/monkestation/icons/obj/guns/projectiles.dmi index 5bdf73b64d59..d985707004aa 100644 Binary files a/monkestation/icons/obj/guns/projectiles.dmi and b/monkestation/icons/obj/guns/projectiles.dmi differ diff --git a/monkestation/icons/obj/items_and_weapons.dmi b/monkestation/icons/obj/items_and_weapons.dmi index 5a0f852f3350..3f8fae263ab4 100644 Binary files a/monkestation/icons/obj/items_and_weapons.dmi and b/monkestation/icons/obj/items_and_weapons.dmi differ diff --git a/monkestation/icons/obj/rayne_corp/inhand_left.dmi b/monkestation/icons/obj/rayne_corp/inhand_left.dmi new file mode 100644 index 000000000000..af94d9726d04 Binary files /dev/null and b/monkestation/icons/obj/rayne_corp/inhand_left.dmi differ diff --git a/monkestation/icons/obj/rayne_corp/inhand_right.dmi b/monkestation/icons/obj/rayne_corp/inhand_right.dmi new file mode 100644 index 000000000000..0374f010aa86 Binary files /dev/null and b/monkestation/icons/obj/rayne_corp/inhand_right.dmi differ diff --git a/monkestation/icons/obj/rayne_corp/rayne.dmi b/monkestation/icons/obj/rayne_corp/rayne.dmi index c44226eb0a73..0de2bb5bed2a 100644 Binary files a/monkestation/icons/obj/rayne_corp/rayne.dmi and b/monkestation/icons/obj/rayne_corp/rayne.dmi differ diff --git a/monkestation/icons/obj/sandstone_structures.dmi b/monkestation/icons/obj/sandstone_structures.dmi index 547624b7ba41..3fcd7d0b485d 100644 Binary files a/monkestation/icons/obj/sandstone_structures.dmi and b/monkestation/icons/obj/sandstone_structures.dmi differ diff --git a/monkestation/icons/obj/storage/boxes.dmi b/monkestation/icons/obj/storage/boxes.dmi new file mode 100644 index 000000000000..0a5c88f92e90 Binary files /dev/null and b/monkestation/icons/obj/storage/boxes.dmi differ diff --git a/monkestation/icons/turf/floorsign.dmi b/monkestation/icons/turf/floorsign.dmi new file mode 100644 index 000000000000..60329bde6342 Binary files /dev/null and b/monkestation/icons/turf/floorsign.dmi differ diff --git a/monkestation/sound/effects/prompt.ogg b/monkestation/sound/effects/prompt.ogg deleted file mode 100644 index 0a5a972da22d..000000000000 Binary files a/monkestation/sound/effects/prompt.ogg and /dev/null differ diff --git a/monkestation/sound/weapons/bat_hit.ogg b/monkestation/sound/weapons/bat_hit.ogg new file mode 100644 index 000000000000..0242b36d39af Binary files /dev/null and b/monkestation/sound/weapons/bat_hit.ogg differ diff --git a/sound/creatures/cat/oranges_meow1.ogg b/sound/creatures/cat/oranges_meow1.ogg new file mode 100644 index 000000000000..34e58d52a30b Binary files /dev/null and b/sound/creatures/cat/oranges_meow1.ogg differ diff --git a/sound/creatures/whistlereset.ogg b/sound/creatures/whistlereset.ogg new file mode 100644 index 000000000000..6974b4d17217 Binary files /dev/null and b/sound/creatures/whistlereset.ogg differ diff --git a/sound/items/slash.ogg b/sound/items/slash.ogg new file mode 100644 index 000000000000..466a63da929d Binary files /dev/null and b/sound/items/slash.ogg differ diff --git a/sound/items/tap.ogg b/sound/items/tap.ogg new file mode 100644 index 000000000000..f20cc0b0fa07 Binary files /dev/null and b/sound/items/tap.ogg differ diff --git a/sound/items/thudswoosh.ogg b/sound/items/thudswoosh.ogg new file mode 100644 index 000000000000..52aa058ec463 Binary files /dev/null and b/sound/items/thudswoosh.ogg differ diff --git a/sound/misc/prompt.ogg b/sound/misc/prompt.ogg new file mode 100644 index 000000000000..e32942e0d3cb Binary files /dev/null and b/sound/misc/prompt.ogg differ diff --git a/sound/vehicles/mecha/critdestr.ogg b/sound/vehicles/mecha/critdestr.ogg new file mode 100644 index 000000000000..2fb282834d35 Binary files /dev/null and b/sound/vehicles/mecha/critdestr.ogg differ diff --git a/sound/vehicles/mecha/hydraulic.ogg b/sound/vehicles/mecha/hydraulic.ogg new file mode 100644 index 000000000000..eaff261983a7 Binary files /dev/null and b/sound/vehicles/mecha/hydraulic.ogg differ diff --git a/sound/vehicles/mecha/imag_enh.ogg b/sound/vehicles/mecha/imag_enh.ogg new file mode 100644 index 000000000000..0f87d52bd3f8 Binary files /dev/null and b/sound/vehicles/mecha/imag_enh.ogg differ diff --git a/sound/vehicles/mecha/mech_blade_attack.ogg b/sound/vehicles/mecha/mech_blade_attack.ogg new file mode 100644 index 000000000000..d44156e4b8e3 Binary files /dev/null and b/sound/vehicles/mecha/mech_blade_attack.ogg differ diff --git a/sound/vehicles/mecha/mech_blade_break_wall.ogg b/sound/vehicles/mecha/mech_blade_break_wall.ogg new file mode 100644 index 000000000000..71982fba35b5 Binary files /dev/null and b/sound/vehicles/mecha/mech_blade_break_wall.ogg differ diff --git a/sound/vehicles/mecha/mech_blade_safty.ogg b/sound/vehicles/mecha/mech_blade_safty.ogg new file mode 100644 index 000000000000..c15b52f6f8de Binary files /dev/null and b/sound/vehicles/mecha/mech_blade_safty.ogg differ diff --git a/sound/vehicles/mecha/mech_charge_attack.ogg b/sound/vehicles/mecha/mech_charge_attack.ogg new file mode 100644 index 000000000000..f45c1bbe2c9a Binary files /dev/null and b/sound/vehicles/mecha/mech_charge_attack.ogg differ diff --git a/sound/vehicles/mecha/mech_shield_deflect.ogg b/sound/vehicles/mecha/mech_shield_deflect.ogg new file mode 100644 index 000000000000..96d3c927f58e Binary files /dev/null and b/sound/vehicles/mecha/mech_shield_deflect.ogg differ diff --git a/sound/vehicles/mecha/mech_shield_drop.ogg b/sound/vehicles/mecha/mech_shield_drop.ogg new file mode 100644 index 000000000000..6b9f6156adba Binary files /dev/null and b/sound/vehicles/mecha/mech_shield_drop.ogg differ diff --git a/sound/vehicles/mecha/mech_shield_raise.ogg b/sound/vehicles/mecha/mech_shield_raise.ogg new file mode 100644 index 000000000000..35cf4a57f2f1 Binary files /dev/null and b/sound/vehicles/mecha/mech_shield_raise.ogg differ diff --git a/sound/vehicles/mecha/mech_stealth_attack.ogg b/sound/vehicles/mecha/mech_stealth_attack.ogg new file mode 100644 index 000000000000..ebd083ed2f46 Binary files /dev/null and b/sound/vehicles/mecha/mech_stealth_attack.ogg differ diff --git a/sound/vehicles/mecha/mech_stealth_effect.ogg b/sound/vehicles/mecha/mech_stealth_effect.ogg new file mode 100644 index 000000000000..bd4e1d2e441e Binary files /dev/null and b/sound/vehicles/mecha/mech_stealth_effect.ogg differ diff --git a/sound/vehicles/mecha/mech_stealth_pre_attack.ogg b/sound/vehicles/mecha/mech_stealth_pre_attack.ogg new file mode 100644 index 000000000000..ff7bef9a5485 Binary files /dev/null and b/sound/vehicles/mecha/mech_stealth_pre_attack.ogg differ diff --git a/sound/vehicles/mecha/mechmove01.ogg b/sound/vehicles/mecha/mechmove01.ogg new file mode 100644 index 000000000000..ec11a380ed8e Binary files /dev/null and b/sound/vehicles/mecha/mechmove01.ogg differ diff --git a/sound/vehicles/mecha/mechmove03.ogg b/sound/vehicles/mecha/mechmove03.ogg new file mode 100644 index 000000000000..941d3693d0fd Binary files /dev/null and b/sound/vehicles/mecha/mechmove03.ogg differ diff --git a/sound/vehicles/mecha/mechmove04.ogg b/sound/vehicles/mecha/mechmove04.ogg new file mode 100644 index 000000000000..1971acec0c6d Binary files /dev/null and b/sound/vehicles/mecha/mechmove04.ogg differ diff --git a/sound/vehicles/mecha/mechstep.ogg b/sound/vehicles/mecha/mechstep.ogg new file mode 100644 index 000000000000..e03cf82589eb Binary files /dev/null and b/sound/vehicles/mecha/mechstep.ogg differ diff --git a/sound/vehicles/mecha/mechturn.ogg b/sound/vehicles/mecha/mechturn.ogg new file mode 100644 index 000000000000..ee6f3571215f Binary files /dev/null and b/sound/vehicles/mecha/mechturn.ogg differ diff --git a/sound/vehicles/mecha/nominal.ogg b/sound/vehicles/mecha/nominal.ogg new file mode 100644 index 000000000000..ba335dfa75eb Binary files /dev/null and b/sound/vehicles/mecha/nominal.ogg differ diff --git a/sound/vehicles/mecha/powerloader_step.ogg b/sound/vehicles/mecha/powerloader_step.ogg new file mode 100644 index 000000000000..abf45b99b89e Binary files /dev/null and b/sound/vehicles/mecha/powerloader_step.ogg differ diff --git a/sound/vehicles/mecha/powerloader_turn2.ogg b/sound/vehicles/mecha/powerloader_turn2.ogg new file mode 100644 index 000000000000..0830a32af1a5 Binary files /dev/null and b/sound/vehicles/mecha/powerloader_turn2.ogg differ diff --git a/sound/vehicles/mecha/skyfall_power_up.ogg b/sound/vehicles/mecha/skyfall_power_up.ogg new file mode 100644 index 000000000000..aee762197def Binary files /dev/null and b/sound/vehicles/mecha/skyfall_power_up.ogg differ diff --git a/sound/vehicles/mecha/weapdestr.ogg b/sound/vehicles/mecha/weapdestr.ogg new file mode 100644 index 000000000000..5a0550b62a0e Binary files /dev/null and b/sound/vehicles/mecha/weapdestr.ogg differ diff --git a/sound/weapons/minebot_rocket.ogg b/sound/weapons/minebot_rocket.ogg new file mode 100644 index 000000000000..6dcf0c2a0252 Binary files /dev/null and b/sound/weapons/minebot_rocket.ogg differ diff --git a/strings/nova/long_modular_laser.json b/strings/nova/long_modular_laser.json index a81c62b55b16..802a1733aab0 100644 --- a/strings/nova/long_modular_laser.json +++ b/strings/nova/long_modular_laser.json @@ -1,8 +1,6 @@ { "pickup": [ "Welcome back, @pick(operator).", - "Zǎo shàng hǎo.", - "Wǎn shàng hǎo.", "Charge systems operational, entering combat mode.", "@pick(operator), carp migrations have been reported in the sector.", "@pick(operator), having a pleasant day?", @@ -14,8 +12,6 @@ "putdown": [ "Understood, @pick(operator), entering sleep mode.", "Good night, @pick(operator).", - "Wǎn`ān, hǎo mèng.", - "Dàjiā ān.", "Good night.", "Entering sleep mode now.", "Entering recharge cycle." @@ -51,8 +47,7 @@ "Switching to rapid-pattern assault.", "Moving to dual-shot pattern.", "Moving to close-quarters burst doctrine, lethal.", - "@pick(operator), please tightly control my recoil pattern.", - "@pick(operator), please hold me firmly to ensure accuracy." + "@pick(operator), please hold on firmly to ensure accuracy." ], "sniper": [ diff --git a/strings/nova/short_modular_laser.json b/strings/nova/short_modular_laser.json index 592db9ada799..074ea071e9ec 100644 --- a/strings/nova/short_modular_laser.json +++ b/strings/nova/short_modular_laser.json @@ -1,24 +1,19 @@ { "pickup": [ - "Zǎo shàng hǎo.", - "Wǎn shàng hǎo.", + "GOOD MORNING VIETNAM!", "What's the operation today, ah?", "Let's get things started, heh-heh.", "I'm feeling good about our chances today.", - "Hey, clean my damn lens later.", - "Little tighter around the handguard, @pick(operator)" + "Hey, clean my damn lens later." ], "putdown": [ - "...you'll hold me again soon, right? Right?", + "Michael... Don't leave me here", "Don't you DARE leave me here!", - "Tch! Whatever... You'll come crawling back to point me around later.", - "Dàjiā ān.", "Good night.", "Entering sleep mode now.", "Entering recharge cycle.", - "Yeah, yeah... entering recharge cycle...", - "Qù nǐ mā... never mind, entering sleep mode." + "Yeah, yeah... entering recharge cycle..." ], "worn": [ @@ -26,17 +21,10 @@ "Lightweight, sold with a few backup magslings, what's not to love?", "I can't see anything in front of you, this sucks.", "I can't see shit from this angle...", - "We're going somewhere with this, right?", - "Don't fall over on top of me, okay?", - "Pretty cushy ride back here...", - "I could get used to this.", - "I can't see sh- ah, wait, maybe it's not so bad back here." + "We're going somewhere with this, right?" ], "lowcharge": [ - "Wǒ tài nán le...", - "Mā de...", - "Tā mā de...", "I'm really drowsy here, pull back, won't you?", "I'm running on fumes here, boss...", "Outta charge, gotta rest...", @@ -56,7 +44,6 @@ "combatmode": [ "I've been waaaiiitiiiing!", - "I was wondering how long you were planning on depriving me, @pick(operator).", "Come on, come at me!", "It's your lucky day!", "Now the fun begins!", @@ -64,8 +51,6 @@ ], "emp": [ - "Tāmāde! Tāmāde!", - "Qì sǐ wǒle!", "ELECTROM-", "ELECTROMAGNETIC PULSE DETECTED, DISCHARGING-", "ELECTROMAGNETIC PULSE, IT'S DISCHARGING MY BATTERY!", @@ -73,8 +58,7 @@ "GO KILL THEM!", "KILL THEM! KILL THEM! PUT THE SIGHTS ON THEM AND KILL THEM!", "KILL THEM, KILL THEM!", - "I DON'T NEED CHARGE FOR BLADE MODE, PUT IT IN THEM AND TWIST!", - "Qù nǐ mā de ba!" + "I DON'T NEED CHARGE FOR BLADE MODE, PUT IT IN THEM AND TWIST!" ], "incinerate": [ @@ -87,11 +71,9 @@ ], "blade": [ - "Extending blade; up close and personal? I like that.", "Extending blade; wipe me off after we're finished.", "Extending blade, stab stab stab!", "Swing the sword, swing the sword!", - "CQC mode initiated, stick me in there deep!", "Eviscerate!", "Show me your motivation...", "I'll cut them in two!", @@ -121,16 +103,15 @@ "Fabricating 'Balrog' energy flares; can you feel the fire?", "Firestarter, twisted firestarter!", "Apocalyptic meltdown!", - "Incendiary weapons are banned in numerous sectors; makes it kind of risqué..", + "Incendiary weapons are banned in numerous sectors!", "Dragon breath!" ], "shotgun": [ - "Focusing lens, one shot, one kill!", + "Focusing lens, one shot, ten kills!", "Focusing lens, let's go all the way through.", "Focusing lens, aim for the head!", "Let me show you what a real diffusion lens looks like...", - "Would it distract you if I told you about a shotgun's 'choke?'", "I'll be your boomstick.", "You should keep me handy for close encounters.", "Is there something more iconic and awesome than a double-barrel? Yeah, me." diff --git a/tgstation.dme b/tgstation.dme index 1895aa1dd572..e4c93d21643c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -955,8 +955,10 @@ #include "code\datums\ai\basic_mobs\basic_ai_behaviors\befriend_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\climb_tree.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\find_parent.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\interact_with_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\nearest_targeting.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\pick_up_item.dm" +#include "code\datums\ai\basic_mobs\basic_ai_behaviors\pull_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\run_away_from_target.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\set_travel_destination.dm" #include "code\datums\ai\basic_mobs\basic_ai_behaviors\step_towards_turf.dm" @@ -1196,6 +1198,7 @@ #include "code\datums\components\mind_linker.dm" #include "code\datums\components\mirage_border.dm" #include "code\datums\components\mirv.dm" +#include "code\datums\components\mob_access.dm" #include "code\datums\components\mob_chain.dm" #include "code\datums\components\mob_harvest.dm" #include "code\datums\components\multiple_lives.dm" @@ -1223,6 +1226,7 @@ #include "code\datums\components\recharging_attacks.dm" #include "code\datums\components\redirect_attack_hand_from_turf.dm" #include "code\datums\components\reflection.dm" +#include "code\datums\components\regenerative_shield.dm" #include "code\datums\components\regenerator.dm" #include "code\datums\components\religious_tool.dm" #include "code\datums\components\remote_materials.dm" @@ -1376,6 +1380,7 @@ #include "code\datums\elements\atmos_requirements.dm" #include "code\datums\elements\atmos_sensitive.dm" #include "code\datums\elements\attack_equip.dm" +#include "code\datums\elements\attack_zone_randomiser.dm" #include "code\datums\elements\backblast.dm" #include "code\datums\elements\bane.dm" #include "code\datums\elements\basic_eating.dm" @@ -1394,6 +1399,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\corrupted_organ.dm" #include "code\datums\elements\crackable.dm" @@ -1457,6 +1463,7 @@ #include "code\datums\elements\organ_set_bonus.dm" #include "code\datums\elements\permanent_fire_overlay.dm" #include "code\datums\elements\pet_bonus.dm" +#include "code\datums\elements\pet_collar.dm" #include "code\datums\elements\plant_backfire.dm" #include "code\datums\elements\point_of_interest.dm" #include "code\datums\elements\prevent_attacking_of_types.dm" @@ -2502,6 +2509,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" @@ -4202,6 +4210,7 @@ #include "code\modules\library\skill_learning\job_skillchips\_job.dm" #include "code\modules\library\skill_learning\job_skillchips\chef.dm" #include "code\modules\library\skill_learning\job_skillchips\janitor.dm" +#include "code\modules\library\skill_learning\job_skillchips\miner.dm" #include "code\modules\library\skill_learning\job_skillchips\psychologist.dm" #include "code\modules\library\skill_learning\job_skillchips\research_director.dm" #include "code\modules\library\skill_learning\job_skillchips\roboticist.dm" @@ -4558,11 +4567,20 @@ #include "code\modules\mob\living\basic\minebots\minebot.dm" #include "code\modules\mob\living\basic\minebots\minebot_abilities.dm" #include "code\modules\mob\living\basic\minebots\minebot_ai.dm" +#include "code\modules\mob\living\basic\minebots\minebot_remote_control.dm" #include "code\modules\mob\living\basic\minebots\minebot_upgrades.dm" #include "code\modules\mob\living\basic\pets\fox.dm" #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\cat\syndicat.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" @@ -4674,9 +4692,10 @@ #include "code\modules\mob\living\basic\vermin\crab.dm" #include "code\modules\mob\living\basic\vermin\frog.dm" #include "code\modules\mob\living\basic\vermin\lizard.dm" -#include "code\modules\mob\living\basic\vermin\mothroach.dm" #include "code\modules\mob\living\basic\vermin\mouse.dm" #include "code\modules\mob\living\basic\vermin\space_bat.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach.dm" +#include "code\modules\mob\living\basic\vermin\mothroach\mothroach_ai.dm" #include "code\modules\mob\living\brain\brain.dm" #include "code\modules\mob\living\brain\brain_cybernetic.dm" #include "code\modules\mob\living\brain\brain_item.dm" @@ -4830,17 +4849,14 @@ #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\dark_wizard.dm" -#include "code\modules\mob\living\simple_animal\hostile\feral.dm" #include "code\modules\mob\living\simple_animal\hostile\hostile.dm" #include "code\modules\mob\living\simple_animal\hostile\illusion.dm" #include "code\modules\mob\living\simple_animal\hostile\mimic.dm" #include "code\modules\mob\living\simple_animal\hostile\ooze.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" -#include "code\modules\mob\living\simple_animal\hostile\syndicat.dm" #include "code\modules\mob\living\simple_animal\hostile\vatbeast.dm" #include "code\modules\mob\living\simple_animal\hostile\zombie.dm" #include "code\modules\mob\living\simple_animal\hostile\jungle\_jungle_mobs.dm" @@ -5930,6 +5946,7 @@ #include "monkestation\code\controllers\subsystem\init_profiler.dm" #include "monkestation\code\controllers\subsystem\job.dm" #include "monkestation\code\controllers\subsystem\memory_stats.dm" +#include "monkestation\code\controllers\subsystem\plants.dm" #include "monkestation\code\controllers\subsystem\plexora.dm" #include "monkestation\code\controllers\subsystem\priority_effects.dm" #include "monkestation\code\controllers\subsystem\profiler.dm" @@ -6070,6 +6087,7 @@ #include "monkestation\code\game\machinery\prize_vendor.dm" #include "monkestation\code\game\machinery\suit_storage_unit.dm" #include "monkestation\code\game\machinery\computer\cloning.dm" +#include "monkestation\code\game\machinery\computer\crew.dm" #include "monkestation\code\game\machinery\computer\orders\order_veggies.dm" #include "monkestation\code\game\machinery\doors\airlock.dm" #include "monkestation\code\game\machinery\doors\firedoor.dm" @@ -6106,6 +6124,7 @@ #include "monkestation\code\game\objects\items\choice_beacon.dm" #include "monkestation\code\game\objects\items\cigs_lighters.dm" #include "monkestation\code\game\objects\items\cirno_plush.dm" +#include "monkestation\code\game\objects\items\comically_large_spoon.dm" #include "monkestation\code\game\objects\items\door_charge.dm" #include "monkestation\code\game\objects\items\emags.dm" #include "monkestation\code\game\objects\items\explosive_flash.dm" @@ -6125,6 +6144,7 @@ #include "monkestation\code\game\objects\items\trash.dm" #include "monkestation\code\game\objects\items\turf_demolisher.dm" #include "monkestation\code\game\objects\items\venom_knife.dm" +#include "monkestation\code\game\objects\items\AI_modules\full_lawsets.dm" #include "monkestation\code\game\objects\items\AI_modules\monke_lawsets.dm" #include "monkestation\code\game\objects\items\circuitboards\computer_circuitboards.dm" #include "monkestation\code\game\objects\items\circuitboards\holy_weapons.dm" @@ -6153,6 +6173,7 @@ #include "monkestation\code\game\objects\items\food\spaghetti.dm" #include "monkestation\code\game\objects\items\granters\elance.dm" #include "monkestation\code\game\objects\items\granters\maintenanceencyclopedia.dm" +#include "monkestation\code\game\objects\items\granters\summon_pie.dm" #include "monkestation\code\game\objects\items\grenades\monkey_barrel.dm" #include "monkestation\code\game\objects\items\guns\crank_guns.dm" #include "monkestation\code\game\objects\items\guns\long_guns.dm" @@ -6172,6 +6193,7 @@ #include "monkestation\code\game\objects\items\storage\garment.dm" #include "monkestation\code\game\objects\items\storage\toolbox.dm" #include "monkestation\code\game\objects\items\storage\uplink_kits.dm" +#include "monkestation\code\game\objects\items\storage\boxes\boxes.dm" #include "monkestation\code\game\objects\items\storage\boxes\security_boxes.dm" #include "monkestation\code\game\objects\structures\elevation.dm" #include "monkestation\code\game\objects\structures\gravestones.dm" @@ -6197,7 +6219,15 @@ #include "monkestation\code\modules\a_ship_in_need_of_breaking\machines\console.dm" #include "monkestation\code\modules\a_ship_in_need_of_breaking\machines\recycler.dm" #include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\_base_ship.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\black_peregrine.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\gasstation.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\goonshuttlesmall.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\mule.dm" #include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\robotics.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\squid.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\torus.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\ships\wanglius.dm" +#include "monkestation\code\modules\a_ship_in_need_of_breaking\tool\raynewelder.dm" #include "monkestation\code\modules\abberant_organs\organ_process.dm" #include "monkestation\code\modules\abberant_organs\components\abberant_organ.dm" #include "monkestation\code\modules\abberant_organs\custom_organs\drunkards_liver.dm" @@ -6707,6 +6737,7 @@ #include "monkestation\code\modules\blueshift\armaments\donkco.dm" #include "monkestation\code\modules\blueshift\armaments\jarnsimiour.dm" #include "monkestation\code\modules\blueshift\armaments\kaharaman.dm" +#include "monkestation\code\modules\blueshift\armaments\kemetek.dm" #include "monkestation\code\modules\blueshift\armaments\microstar.dm" #include "monkestation\code\modules\blueshift\armaments\nakamura.dm" #include "monkestation\code\modules\blueshift\armaments\nri.dm" @@ -6924,7 +6955,6 @@ #include "monkestation\code\modules\blueshift\uplinks\kits.dm" #include "monkestation\code\modules\blueshift\wounds\muscle_wounds.dm" #include "monkestation\code\modules\botany\hydrotray.dm" -#include "monkestation\code\modules\botany\plant_processing.dm" #include "monkestation\code\modules\botany\potty.dm" #include "monkestation\code\modules\botany\tools.dm" #include "monkestation\code\modules\botany\components\plant_growing.dm" @@ -7076,6 +7106,7 @@ #include "monkestation\code\modules\cargo\crates\service.dm" #include "monkestation\code\modules\cargo\mail\mail_token.dm" #include "monkestation\code\modules\cargo\markets\market_items.dm" +#include "monkestation\code\modules\cargo\markets\market_items\weapons.dm" #include "monkestation\code\modules\cargo\packs\emergency.dm" #include "monkestation\code\modules\cargo\packs\engineering.dm" #include "monkestation\code\modules\cargo\packs\hardsuit_crates.dm" @@ -7329,6 +7360,7 @@ #include "monkestation\code\modules\flavor_text\flavor_hrefs.dm" #include "monkestation\code\modules\flavor_text\flavor_text.dm" #include "monkestation\code\modules\flavor_text\pose_component.dm" +#include "monkestation\code\modules\floorsigns\floorsigns.dm" #include "monkestation\code\modules\food_and_drinks\machinery\microwave.dm" #include "monkestation\code\modules\food_and_drinks\machinery\smartfridge.dm" #include "monkestation\code\modules\food_and_drinks\recipes\boiling.dm" @@ -7628,6 +7660,7 @@ #include "monkestation\code\modules\mob\living\basic\pets\parrot\_parrot.dm" #include "monkestation\code\modules\mob\living\basic\pets\parrot\parrot_ai\parroting_action.dm" #include "monkestation\code\modules\mob\living\basic\space_fauna\carp\carp.dm" +#include "monkestation\code\modules\mob\living\basic\space_fauna\regal_rat\regal_rat_actions.dm" #include "monkestation\code\modules\mob\living\basic\space_fauna\slugcat\slugcat.dm" #include "monkestation\code\modules\mob\living\basic\trooper\syndicate.dm" #include "monkestation\code\modules\mob\living\basic\vermin\frog.dm" @@ -7688,6 +7721,7 @@ #include "monkestation\code\modules\modular_bartending\item_modifications\reagent_modification.dm" #include "monkestation\code\modules\modular_computers\computers\item\role_tablet_presets.dm" #include "monkestation\code\modules\modular_computers\file_system\programs\crewmanifest.dm" +#include "monkestation\code\modules\modular_computers\file_system\programs\lifeline.dm" #include "monkestation\code\modules\modular_guns\__base_attachment.dm" #include "monkestation\code\modules\modular_guns\__base_modular_gun.dm" #include "monkestation\code\modules\modular_guns\attachment_datums\__base_attachment_datum.dm" @@ -7879,12 +7913,14 @@ #include "monkestation\code\modules\projectiles\gun.dm" #include "monkestation\code\modules\projectiles\pins.dm" #include "monkestation\code\modules\projectiles\ammunition\_ammunition.dm" +#include "monkestation\code\modules\projectiles\ammunition\ballistic\shotgun.dm" #include "monkestation\code\modules\projectiles\guns\ballistic\revolver.dm" #include "monkestation\code\modules\projectiles\guns\ballistic\ryanecorp_whispering_jester.dm" #include "monkestation\code\modules\projectiles\guns\energy\stun.dm" #include "monkestation\code\modules\projectiles\guns\special\meat_hook.dm" #include "monkestation\code\modules\projectiles\projectile\spells.dm" #include "monkestation\code\modules\projectiles\projectile\bullets\c45_caseless.dm" +#include "monkestation\code\modules\projectiles\projectile\bullets\shotgun.dm" #include "monkestation\code\modules\ranching\_animations.dm" #include "monkestation\code\modules\ranching\chicken_book.dm" #include "monkestation\code\modules\ranching\chicken_carrier.dm" @@ -8184,6 +8220,7 @@ #include "monkestation\code\modules\smithing\TEG\teg_states\_base_state.dm" #include "monkestation\code\modules\smithing\TEG\teg_states\worked_materials.dm" #include "monkestation\code\modules\spells\spell_types\aoe_spell\mind_swap.dm" +#include "monkestation\code\modules\spells\spell_types\conjure\pie.dm" #include "monkestation\code\modules\spells\spell_types\conjure_item\summon_mjollnir.dm" #include "monkestation\code\modules\spells\spell_types\pointed\fire_ball.dm" #include "monkestation\code\modules\spells\spell_types\pointed\smite.dm" diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts index 1e2a41371c67..dc75f040126b 100644 --- a/tgui/packages/tgui/constants.ts +++ b/tgui/packages/tgui/constants.ts @@ -31,6 +31,7 @@ export const COLORS = { service: '#7cc46a', centcom: '#00c100', other: '#c38312', + prisoner: '#FFC2C2', // MONKESTATION EDIT ADDITION }, // Damage type colors damageType: { diff --git a/tgui/packages/tgui/interfaces/CassetteManager.tsx b/tgui/packages/tgui/interfaces/CassetteManager.tsx index f1d596966167..3665b8bd7ded 100644 --- a/tgui/packages/tgui/interfaces/CassetteManager.tsx +++ b/tgui/packages/tgui/interfaces/CassetteManager.tsx @@ -26,7 +26,9 @@ export const CassetteManager = (props) => {
act(id)} + onReview={(command: string, id: string) => + act(command, { tape_id: id }) + } />
@@ -39,7 +41,7 @@ const CassetteTable = ({ onReview, }: { entries: [string, CassetteDetails][]; - onReview: (id: string) => void; + onReview: (command: string, id: string) => void; }) => { // If entries is not provided or is empty, show a message instead of the table. if (!entries || entries.length === 0) { @@ -62,10 +64,15 @@ const CassetteTable = ({ {cassette.tape_name} {cassette.reviewed ? 'Yes' : 'No'} + + + + setSearchQuery((e.target as HTMLTextAreaElement).value) + } + /> + + + } + > + + + Name + + + + Vitals + + + Position + + {!!data.link_allowed && ( + + Tracking + + )} + + {sorted.map((sensor) => ( + + ))} +
+ + ); +}; + +type CrewTableEntryProps = { + sensor_data: CrewSensor; +}; + +const CrewTableEntry = (props: CrewTableEntryProps) => { + const { act, data } = useBackend(); + const { link_allowed } = data; + const { sensor_data } = props; + const { + name, + assignment, + ijob, + is_robot, + life_status, + oxydam, + toxdam, + burndam, + brutedam, + area, + can_track, + } = sensor_data; + + return ( + + + {name} + {assignment !== undefined ? ` (${assignment})` : ''} + + + {is_robot ? : ''} + + + {oxydam !== undefined ? ( + + ) : life_status !== STAT_DEAD ? ( + + ) : ( + + )} + + + {oxydam !== undefined ? ( + + + {'/'} + + {'/'} + + {'/'} + + + ) : life_status !== STAT_DEAD ? ( + 'Alive' + ) : ( + 'Dead' + )} + + + {area !== '~' && area !== undefined ? ( + area + ) : ( + + )} + + {!!link_allowed && ( + + + + )} + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CrewConsoleNovaBlueshield.jsx b/tgui/packages/tgui/interfaces/CrewConsoleNovaBlueshield.jsx index a939e3a4d076..0d2e1678e526 100644 --- a/tgui/packages/tgui/interfaces/CrewConsoleNovaBlueshield.jsx +++ b/tgui/packages/tgui/interfaces/CrewConsoleNovaBlueshield.jsx @@ -5,6 +5,7 @@ import { useBackend } from '../backend'; import { Box, Button, Icon, Section, Table } from '../components'; import { COLORS } from '../constants'; import { Window } from '../layouts'; +import { jobIsHead, jobToColor } from './CrewConsoleNova'; const HEALTH_COLOR_BY_LEVEL = [ '#17d568', @@ -22,35 +23,6 @@ const HEALTH_ICON_BY_LEVEL = [ 'heartbeat', 'skull', ]; -const jobIsHead = (jobId) => jobId % 10 === 0; - -const jobToColor = (jobId) => { - if (jobId === 0) { - return COLORS.department.captain; - } - if (jobId >= 10 && jobId < 20) { - return COLORS.department.security; - } - if (jobId >= 20 && jobId < 30) { - return COLORS.department.medbay; - } - if (jobId >= 30 && jobId < 40) { - return COLORS.department.science; - } - if (jobId >= 40 && jobId < 50) { - return COLORS.department.engineering; - } - if (jobId >= 50 && jobId < 60) { - return COLORS.department.cargo; - } - if (jobId >= 60 && jobId < 80) { - return COLORS.department.service; - } - if (jobId >= 200 && jobId < 240) { - return COLORS.department.centcom; - } - return COLORS.department.other; -}; const healthToAttribute = (oxy, tox, burn, brute, attributeList) => { const healthSum = oxy + tox + burn + brute; diff --git a/tgui/packages/tgui/interfaces/NtosLifeline.tsx b/tgui/packages/tgui/interfaces/NtosLifeline.tsx new file mode 100644 index 000000000000..e7739838cf27 --- /dev/null +++ b/tgui/packages/tgui/interfaces/NtosLifeline.tsx @@ -0,0 +1,239 @@ +import { createSearch } from 'common/string'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Flex, Icon, Input, Stack, Tabs } from '../components'; + +import { NtosWindow } from '../layouts'; +import { JOB2ICON } from './common/JobToIcon'; +import { jobIsHead, jobToColor } from './CrewConsoleNova'; + +type Data = { + selected: string; + settings: Settings; + sensors: CrewSensor[]; +}; + +type Settings = { + sortBy: string; + sortAsc: boolean; + blueshield: boolean; +}; + +type CrewSensor = { + dev: string; + ref: string; + name: string; + assignment: string; + trim: string; + ijob: number; + area: String; + dist: number; + degrees: number; + zdiff: number; +}; + +const SORT_NAMES = { + dist: 'Distance', + ijob: 'Job', + name: 'Name', + area: 'Area', +}; + +const SORT_OPTIONS = ['dist', 'ijob', 'name', 'area']; + +const areaSort = (a: CrewSensor, b: CrewSensor) => { + a.area ??= '~'; + b.area ??= '~'; + if (a.area < b.area) return -1; + if (a.area > b.area) return 1; + return 0; +}; + +export const NtosLifeline = () => { + return ( + + + + ); +}; + +const NtosLifelineContent = () => { + const { data, act } = useBackend(); + const { sensors, settings } = data; + const { sortAsc, sortBy, blueshield } = settings; + + const setSortAsc = (val: boolean) => { + act('sortAsc', { val: val }); + }; + const setSortBy = (val: string) => { + act('sortBy', { val: val }); + }; + const setBlueshield = (val: boolean) => { + act('blueshield', { val: val }); + }; + const [searchQuery, setSearchQuery] = useLocalState( + 'searchQuery', + '', + ); + + const cycleSortBy = () => { + let idx = SORT_OPTIONS.indexOf(sortBy) + 1; + if (idx === SORT_OPTIONS.length) idx = 0; + setSortBy(SORT_OPTIONS[idx]); + }; + + const nameSearch = createSearch( + searchQuery, + (crew: CrewSensor) => crew.name + crew.assignment, + ); + + const sorted = sensors + .filter(nameSearch) + .filter( + (sensor) => + !blueshield || + jobIsHead(sensor.ijob) || + (sensor.ijob >= 200 && sensor.ijob < 300), + ) + .sort((a, b) => { + if (a.dist < 0 || b.dist < 0) { + return b.dist - a.dist; + } + switch (sortBy) { + case 'name': + return sortAsc ? +(a.name > b.name) : +(b.name > a.name); + case 'ijob': + return sortAsc ? a.ijob - b.ijob : b.ijob - a.ijob; + case 'dist': + return sortAsc ? a.dist - b.dist : b.dist - a.dist; + case 'area': + return sortAsc ? areaSort(a, b) : areaSort(b, a); + default: + return 0; + } + }); + + return ( + + + + + + setSearchQuery((e.target as HTMLTextAreaElement).value) + } + /> + + + setBlueshield(!blueshield)} + > + + + + + + {sorted.map((object, index) => ( + + ))} + + + + ); +}; + +const CrewTab = (props: { sensor: CrewSensor }) => { + const { act, data } = useBackend(); + const { sensor } = props; + const selected = data.selected === sensor.ref; + + return ( + { + act('select', { + ref: sensor.ref, + }); + }} + style={{ margin: '2px 2px 0px 0px' }} + > + + + + + + + + {sensor.name} ({sensor.assignment}) + +
+ +
+
+
+ ); +}; + +const SensorLocation = (props: { sensor: CrewSensor }) => { + const { sensor } = props; + const dist = sensor.dist; + + if (dist >= 0) { + let zdiff = '-'; + if (sensor.zdiff > 0) { + zdiff = '↑'.repeat(sensor.zdiff); + } else if (sensor.zdiff < 0) { + zdiff = '↓'.repeat(-sensor.zdiff); + } + return ( + + {sensor.dist > 0 && ( + + )} + {sensor.dist}m {zdiff} [{sensor.area}] + + ); + } + if (dist === -1) { + return ; + } + const zdiff = + sensor.zdiff === 0 ? ( + + ) : ( + + ); + + if (dist === -2) { + return ( + + {zdiff} [{sensor.area}] + + ); + } + return { ...zdiff }; +}; diff --git a/tools/UpdatePaths/Scripts/79800_basic_cats.txt b/tools/UpdatePaths/Scripts/79800_basic_cats.txt new file mode 100644 index 000000000000..7a990f790865 --- /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