diff --git a/.github/workflows/update_tgs_dmapi.yml b/.github/workflows/update_tgs_dmapi.yml new file mode 100644 index 0000000000..72c029c770 --- /dev/null +++ b/.github/workflows/update_tgs_dmapi.yml @@ -0,0 +1,45 @@ +name: Update TGS DMAPI + +on: + schedule: + - cron: "0 0 * * *" + workflow_dispatch: + +jobs: + update-dmapi: + runs-on: ubuntu-latest + name: Update the TGS DMAPI + steps: + - name: Clone + uses: actions/checkout@v2 + + - name: Branch + run: | + git branch -f tgs-dmapi-update + git checkout tgs-dmapi-update + git reset --hard master + + - name: Apply DMAPI update + uses: tgstation/tgs-dmapi-updater@v2 + with: + header-path: 'code/__DEFINES/tgs.dm' + library-path: 'code/modules/tgs' + + - name: Commit and Push + run: | + git config user.name tgstation-server + git config user.email tgstation-server@users.noreply.github.com + git add * + git commit -m 'Update TGS DMAPI' + git push -f -u origin tgs-dmapi-update + + - name: Create Pull Request + uses: repo-sync/pull-request@v2 + with: + source_branch: "tgs-dmapi-update" + destination_branch: "master" + pr_title: "Automatic TGS DMAPI Update" + pr_body: "This pull request updates the TGS DMAPI to the latest version. Please note any breaking or unimplemented changes before merging." + pr_label: "Tools" + pr_allow_empty: false + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm index c95e0c7539..268c907445 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehermit.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehermit.dmm @@ -17,10 +17,14 @@ /turf/open/floor/mineral/titanium, /area/ruin/powered) "ag" = ( -/obj/structure/shuttle/engine/propulsion/right{ - dir = 4 +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, -/turf/closed/wall/mineral/titanium, +/turf/open/floor/mineral/titanium, /area/ruin/powered) "ah" = ( /obj/structure/table/wood, @@ -70,20 +74,21 @@ /turf/open/floor/mineral/titanium, /area/ruin/powered) "ar" = ( -/obj/machinery/door/airlock/titanium{ - name = "Escape Pod Airlock" - }, -/turf/open/floor/mineral/titanium, +/turf/closed/wall/mineral/wood, /area/ruin/powered) "as" = ( /obj/machinery/light, /turf/open/floor/mineral/titanium, /area/ruin/powered) "at" = ( -/obj/structure/shuttle/engine/propulsion/left{ - dir = 4 +/obj/structure/extinguisher_cabinet{ + pixel_x = 5; + pixel_y = -32 }, -/turf/closed/wall/mineral/titanium, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium, /area/ruin/powered) "au" = ( /obj/item/seeds/tower, @@ -93,11 +98,15 @@ /area/ruin/powered) "av" = ( /obj/structure/table/wood, -/obj/item/paper/crumpled{ - info = "

So this is it, I guess.. Always thought I'd go out doing something stupid, but.. not like this.
Should anyone find this note, tell Jeremy Clarke he can kiss my ass. Launching the pod unprepared like that..
Well. Now that I'm keeling over here, I guess I should write how I came to be the last one standing here.
Four of us took this pod.. only three of us woke up though.. fourth pod is locked from the inside, we couldn't figure out how to get it open.
Me and the clown set up a farm s'we can survive at least a while.. though, he didn't seem to understand that man cannot live on banana alone.
Had a bunch of circuits on him for some reason when he eventually passed, whispered to me something about a chem dispenser.. I.. don't know what he meant by that. I was never good with machinary. Maybe he wanted space lube?
The assistant that we gave the space suit to go out and find help never came back.. I'm betting he found salvation and left us behind.. never can trust those grubby greytiders." +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton{ + pixel_x = 6; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton{ + pixel_x = -5; + pixel_y = 6 }, -/obj/item/pen, -/obj/item/stock_parts/cell/hyper, /turf/open/floor/plating/asteroid, /area/ruin/powered) "aw" = ( @@ -142,6 +151,17 @@ "aE" = ( /turf/open/floor/plating/asteroid/airless, /area/ruin/powered) +"aF" = ( +/obj/machinery/power/port_gen/pacman{ + active = 1; + anchored = 1; + sheets = 10 + }, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) "aG" = ( /obj/structure/sink/puddle, /turf/open/floor/plating/asteroid, @@ -187,9 +207,7 @@ /turf/open/floor/plating/asteroid, /area/ruin/powered) "aQ" = ( -/obj/item/stack/ore/gold, -/obj/item/stack/ore/gold, -/obj/item/stack/ore/gold, +/obj/item/circuitboard/machine/circuit_imprinter, /turf/open/floor/plating/asteroid, /area/ruin/powered) "aR" = ( @@ -205,8 +223,12 @@ /turf/open/floor/plating/asteroid, /area/ruin/powered) "aU" = ( -/obj/item/flashlight/lamp, /obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/meat/slab/human{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/meat/slab/human, /turf/open/floor/plating/asteroid, /area/ruin/powered) "aV" = ( @@ -238,20 +260,24 @@ /turf/closed/mineral/random/no_caves/earth_like, /area/ruin/powered) "bc" = ( -/obj/item/circuitboard/machine/circuit_imprinter, +/obj/structure/table/wood, +/obj/item/vending_refill/snack, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bd" = ( -/obj/item/grown/bananapeel, -/turf/open/floor/plating/asteroid, +/obj/structure/shuttle/engine/propulsion/right{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, /area/ruin/powered) "be" = ( -/obj/effect/mob_spawn/human/corpse/cargo_tech, -/obj/structure/fans/tiny/invisible, +/obj/structure/chair/wood/normal{ + dir = 1 + }, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bf" = ( -/obj/item/clothing/glasses/meson, +/obj/machinery/door/airlock/wood, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bg" = ( @@ -275,50 +301,43 @@ /turf/open/floor/plating/asteroid, /area/ruin/powered) "bl" = ( -/obj/machinery/power/floodlight, -/obj/structure/cable{ - icon_state = "0-2" +/obj/machinery/door/airlock/titanium{ + name = "Escape Pod Airlock" }, -/turf/open/floor/plating/asteroid, +/turf/open/floor/mineral/titanium, /area/ruin/powered) "bm" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, +/obj/item/flashlight/lamp, +/obj/structure/table/wood, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bn" = ( -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/table/wood, +/obj/item/paper/crumpled{ + info = "

So this is it, I guess.. Always thought I'd go out doing something stupid, but.. not like this.
Should anyone find this note, tell Jeremy Clarke he can kiss my ass. Launching the pod unprepared like that..
Well. Now that I'm keeling over here, I guess I should write how I came to be the last one standing here.
Four of us took this pod.. only three of us woke up though.. fourth pod is locked from the inside, we couldn't figure out how to get it open.
Me and the clown set up a farm s'we can survive at least a while.. though, he didn't seem to understand that man cannot live on banana alone.
Had a bunch of circuits on him for some reason when he eventually passed, whispered to me something about a chem dispenser.. I.. don't know what he meant by that. I was never good with machinary. Maybe he wanted space lube?
The assistant that we gave the space suit to go out and find help never came back.. I'm betting he found salvation and left us behind.. never can trust those grubby greytiders." }, +/obj/item/pen, +/obj/item/stock_parts/cell/hyper, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bo" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, +/obj/item/grown/bananapeel, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bp" = ( -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, -/obj/item/stack/ore/iron, +/obj/effect/mob_spawn/human/corpse/cargo_tech, +/obj/structure/fans/tiny/invisible, /turf/open/floor/plating/asteroid, /area/ruin/powered) "bq" = ( -/obj/structure/cable, -/obj/machinery/power/port_gen/pacman{ - active = 1; - anchored = 1; - sheets = 10 - }, +/obj/item/clothing/glasses/meson, /turf/open/floor/plating/asteroid, /area/ruin/powered) "br" = ( -/obj/item/stack/ore/iron, -/obj/item/stack/sheet/mineral/plasma, -/obj/item/stack/sheet/mineral/plasma, -/turf/open/floor/plating/asteroid, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor5" + }, +/turf/open/floor/mineral/titanium, /area/ruin/powered) "bs" = ( /obj/item/flashlight/lamp/bananalamp, @@ -328,18 +347,181 @@ /obj/item/pickaxe/titanium, /turf/open/floor/plating/asteroid, /area/ruin/powered) +"fc" = ( +/obj/item/stack/ore/iron, +/obj/item/stack/sheet/mineral/plasma, +/obj/item/stack/sheet/mineral/plasma, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) "fp" = ( /turf/closed/mineral/random/high_chance/earth_like, /area/ruin/powered) "jx" = ( /turf/closed/mineral/silver/earth_like, /area/ruin/powered) +"ma" = ( +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/obj/item/stack/ore/iron, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"mr" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/mob_spawn/human/skeleton, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) "nc" = ( /turf/closed/mineral/bscrystal/earth_like, /area/ruin/powered) +"nl" = ( +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/bot, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"oR" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"wU" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"zs" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"CY" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/bot, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"DH" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 8 + }, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"Ft" = ( +/obj/structure/reagent_dispensers/fueltank/high, +/obj/effect/turf_decal/bot, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"HK" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"HP" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/bot, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) +"Iy" = ( +/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/double{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen/double{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen/double{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen/double{ + pixel_x = 3 + }, +/obj/item/tank/internals/emergency_oxygen/double{ + 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/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/item/clothing/head/hardhat/orange{ + name = "protective hat"; + pixel_y = 9 + }, +/obj/structure/closet/crate/internals, +/obj/effect/turf_decal/bot, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) "JZ" = ( /turf/closed/mineral/titanium/earth_like, /area/ruin/powered) +"Kj" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) "Lt" = ( /obj/structure/mirror, /turf/closed/wall/mineral/iron, @@ -347,6 +529,19 @@ "PG" = ( /turf/closed/mineral/gold/earth_like, /area/ruin/powered) +"Qi" = ( +/obj/structure/cable, +/obj/machinery/power/port_gen/pacman{ + active = 1; + anchored = 1; + sheets = 10 + }, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"Sv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/titanium, +/area/ruin/powered) "Ue" = ( /turf/closed/mineral/diamond/earth_like, /area/ruin/powered) @@ -358,6 +553,24 @@ /obj/item/circuitboard/machine/ore_redemption, /turf/open/floor/plating/asteroid, /area/ruin/powered) +"WP" = ( +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/obj/item/stack/ore/gold, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"Xh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/asteroid, +/area/ruin/powered) +"XQ" = ( +/obj/structure/shuttle/engine/propulsion/left{ + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ruin/powered) (1,1,1) = {" aa @@ -1123,9 +1336,9 @@ bb bb af ak -ao -ao -ao +DH +an +mr ak af am @@ -1175,9 +1388,9 @@ bb aR ae ae -an -an -an +af +bl +af ae ae am @@ -1225,13 +1438,13 @@ ba ba bb aR +ae ag -ag -af -ar -af -at +nl +an +HP at +ae am bb fp @@ -1277,13 +1490,13 @@ aL bb bb aT -am -am -am -am -am -am -am +bl +br +an +an +an +an +bl aR bb bb @@ -1329,13 +1542,13 @@ am ba bb am -am -am -am -am -am -am -am +af +Ft +zs +Sv +CY +wU +af bg bb fp @@ -1381,13 +1594,13 @@ am ba bb bb -am -am -am -am -am -am -am +ae +Iy +aF +br +CY +CY +ae bb bb bb @@ -1432,14 +1645,14 @@ am bb bb bb -aU +am bd -am -am +bd +af bl -bm -am -am +af +XQ +XQ bb bb bb @@ -1484,15 +1697,15 @@ am bb bb ba -av -be am am am -bn -bo -bo -bq +am +am +am +am +am +am bb bb bb @@ -1525,10 +1738,10 @@ bb bb bb bb -ba -am -am -am +ar +ar +ar +ar am am am @@ -1536,15 +1749,15 @@ am bb bb bb -bc -bf am am am am am am -br +am +am +am bb bb bb @@ -1577,10 +1790,10 @@ bb bb bb bb -bb -bb -bb -bb +ar +av +am +ar am am am @@ -1629,10 +1842,10 @@ bb fp bb bb -bb -bb -bb -bb +ar +aU +be +bf am am am @@ -1645,8 +1858,8 @@ am am aR am -am -am +Kj +HK am bb bb @@ -1681,11 +1894,11 @@ bb bb bb bb -bb -bb -bb -bb -ba +ar +bc +am +ar +am am am am @@ -1698,10 +1911,10 @@ am am am am -am -am -am -am +oR +Xh +Xh +Qi ba ba ba @@ -1733,16 +1946,18 @@ bb bb bb bb -bb -bb -bb -bb +ar +ar +ar +ar ba ba ba aK ba ba +bm +bo am am am @@ -1750,9 +1965,7 @@ am am am am -bp -am -am +fc aR ba ba @@ -1795,16 +2008,16 @@ fp ba fp ba +bn +bp +am +am +am +am +am aP am am -am -am -am -am -am -am -am aR ba ba @@ -1848,14 +2061,14 @@ ba ba ba aQ -aP +bq am am aR am am -am -am +WP +aP bb am ba @@ -2009,7 +2222,7 @@ bg am am am -am +ma am aS bb diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 3e5c80253d..6e0c65f6aa 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -1453,7 +1453,7 @@ /area/ruin/space/has_grav/hotel/guestroom/room_2) "eu" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/wood, /area/ruin/space/has_grav/hotel/guestroom/room_2) "ev" = ( diff --git a/_maps/RandomZLevels/away_mission/research.dmm b/_maps/RandomZLevels/away_mission/research.dmm index 4710d9829b..f1c0f989df 100644 --- a/_maps/RandomZLevels/away_mission/research.dmm +++ b/_maps/RandomZLevels/away_mission/research.dmm @@ -5371,7 +5371,7 @@ /area/awaymission/research/interior/dorm) "kS" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel, /area/awaymission/research/interior/dorm) "kT" = ( diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index dfae5e0ad7..df4ab2bc72 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -350,7 +350,7 @@ /area/security/prison) "aaV" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel, /area/security/prison) "aaW" = ( @@ -1491,6 +1491,10 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solar/starboard/fore) +"adu" = ( +/obj/effect/landmark/barthpot, +/turf/open/floor/wood, +/area/library) "adw" = ( /obj/structure/cable, /obj/structure/lattice/catwalk, @@ -38668,8 +38672,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bNC" = ( -/obj/structure/closet/wardrobe/grey, -/turf/open/floor/plating, +/obj/machinery/vending/cigarette, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "bND" = ( /obj/structure/chair{ @@ -39610,8 +39614,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bPP" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plating, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "bPQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -42667,16 +42670,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bYr" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, /area/maintenance/starboard/aft) "bYs" = ( -/obj/structure/closet/crate, -/obj/item/clothing/under/color/lightpurple, -/obj/item/stack/spacecash/c200, +/obj/machinery/vending/boozeomat, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) "bYt" = ( @@ -43312,13 +43319,23 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "cac" = ( -/obj/structure/chair/stool, -/turf/open/floor/plating, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "cad" = ( -/obj/structure/table, -/obj/item/flashlight/lamp, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, /area/maintenance/starboard/aft) "cae" = ( /turf/open/floor/plating{ @@ -43751,18 +43768,12 @@ }, /area/maintenance/starboard/aft) "cbh" = ( -/obj/structure/table, -/obj/item/folder/white, -/obj/item/folder/white, -/obj/item/pen, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/turf/closed/wall/rust, +/area/science/mixing) "cbi" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 5 - }, +/obj/structure/barricade/wooden, +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cbj" = ( @@ -44484,14 +44495,17 @@ /turf/closed/wall, /area/maintenance/starboard/aft) "ccV" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "ccW" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "ccX" = ( @@ -44655,9 +44669,7 @@ /area/engine/break_room) "cdu" = ( /obj/structure/closet/emcloset, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cdv" = ( @@ -44819,8 +44831,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "cdV" = ( -/obj/structure/table, -/turf/open/floor/plating, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "cdW" = ( /obj/machinery/power/apc{ @@ -45160,8 +45174,8 @@ /area/maintenance/starboard/aft) "ceT" = ( /obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 +/obj/structure/sign/poster/ripped{ + pixel_y = 32 }, /turf/open/floor/plating, /area/maintenance/starboard/aft) @@ -45380,11 +45394,8 @@ /turf/closed/wall/r_wall, /area/science/misc_lab) "cfv" = ( -/obj/machinery/door/airlock/maintenance/abandoned{ - name = "Firefighting equipment"; - req_access_txt = "12" - }, -/turf/open/floor/plating, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/carpet/royalblue, /area/maintenance/starboard/aft) "cfw" = ( /turf/closed/wall/r_wall, @@ -45768,11 +45779,8 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cgy" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/chair/stool, -/turf/open/floor/plating, +/obj/machinery/light/floor, +/turf/open/floor/carpet/royalblue, /area/maintenance/starboard/aft) "cgz" = ( /obj/structure/cable, @@ -46263,8 +46271,7 @@ /turf/open/floor/plasteel, /area/engine/engineering) "chH" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/plating, +/turf/open/floor/light/colour_cycle/dancefloor_b, /area/maintenance/starboard/aft) "chI" = ( /obj/structure/cable{ @@ -53347,6 +53354,14 @@ /obj/machinery/vending/coffee, /turf/open/floor/wood, /area/bridge/meeting_room) +"cVw" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/tower, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "cVK" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -53401,6 +53416,14 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"ddM" = ( +/obj/structure/sign/poster/official/the_owl{ + pixel_x = 32 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/starboard/aft) "dev" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -53565,8 +53588,18 @@ /turf/open/floor/plasteel, /area/engine/atmos) "dBm" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plating, +/obj/machinery/light/floor, +/obj/structure/table, +/obj/item/clothing/glasses/sunglasses/reagent, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = -5; + pixel_y = 13 + }, +/obj/item/storage/fancy/cigarettes/cigpack_uplift{ + pixel_x = 10; + pixel_y = 7 + }, +/turf/open/floor/carpet/royalblue, /area/maintenance/starboard/aft) "dCr" = ( /obj/structure/pool/Rboard, @@ -53591,6 +53624,10 @@ }, /turf/open/floor/plasteel, /area/security/range) +"dEh" = ( +/obj/machinery/jukebox/disco/indestructible, +/turf/open/floor/light/colour_cycle/dancefloor_b, +/area/maintenance/starboard/aft) "dEX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/requests_console{ @@ -53604,6 +53641,10 @@ "dFX" = ( /turf/closed/wall, /area/crew_quarters/fitness/pool) +"dHp" = ( +/mob/living/simple_animal/bot/secbot/grievous/toy, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/maintenance/starboard/aft) "dJL" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53772,6 +53813,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/execution/transfer) +"eoD" = ( +/obj/structure/table/wood/poker, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "epD" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/machinery/light{ @@ -53850,6 +53895,15 @@ }, /turf/open/floor/plating, /area/crew_quarters/fitness) +"ewN" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/watermelon, +/obj/item/seeds/cannabis, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "exP" = ( /obj/item/kirbyplants{ icon_state = "plant-14" @@ -53929,6 +53983,14 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"eDz" = ( +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "eEe" = ( /obj/machinery/door/airlock{ name = "Theatre Backstage"; @@ -54119,6 +54181,16 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) +"fkW" = ( +/obj/structure/cable/white, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "flc" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -54134,6 +54206,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"flP" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/carrot, +/obj/item/seeds/cannabis/white, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "fne" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -54294,6 +54374,28 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"fxk" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/door/window/northright, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/blood/innards, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "fxx" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, @@ -54394,6 +54496,13 @@ /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) +"fLN" = ( +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 1 + }, +/obj/structure/table/wood/poker, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "fMp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, @@ -54679,6 +54788,14 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"gDZ" = ( +/obj/structure/chair/stool/bar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/maintenance/starboard/aft) +"gGK" = ( +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "gIU" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -54689,6 +54806,16 @@ /obj/structure/lattice/catwalk, /turf/open/space/basic, /area/space/nearstation) +"gKl" = ( +/obj/structure/cable/white, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "gLz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -54775,6 +54902,11 @@ }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet/locker) +"gRV" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/starboard/aft) "gRZ" = ( /obj/structure/bookcase{ name = "Forbidden Knowledge" @@ -54835,6 +54967,20 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"hbi" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/glowshroom, +/obj/item/seeds/cannabis/ultimate, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/starboard/aft) "hcb" = ( /turf/open/floor/carpet, /area/crew_quarters/theatre) @@ -54857,7 +55003,7 @@ /area/engine/atmos) "hgO" = ( /obj/structure/table, -/obj/item/storage/box/dice{ +/obj/item/storage/dice{ pixel_x = 4; pixel_y = 4 }, @@ -54868,6 +55014,18 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/department/electrical) +"hke" = ( +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "hlT" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock"; @@ -55042,6 +55200,21 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"hTt" = ( +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"hUJ" = ( +/obj/structure/reagent_dispensers/beerkeg, +/obj/machinery/light/floor, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "hWd" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -55066,6 +55239,16 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, /area/security/range) +"ifJ" = ( +/obj/machinery/biogenerator, +/obj/structure/sign/poster/contraband/have_a_puff{ + pixel_y = -32 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "iiW" = ( /turf/open/floor/wood, /area/maintenance/bar) @@ -55098,6 +55281,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"iky" = ( +/obj/effect/turf_decal/weather/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "imk" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -55109,6 +55300,14 @@ /obj/structure/falsewall, /turf/open/floor/plating, /area/maintenance/bar) +"imZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/starboard/aft) "inq" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, @@ -55199,6 +55398,20 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"ixd" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/beer, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) +"iyG" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + brightness = 3; + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "izg" = ( /obj/item/cigbutt/cigarbutt, /turf/open/floor/plating, @@ -55235,6 +55448,20 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"iIs" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/ipc/limb, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "iIS" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -55281,6 +55508,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/fore) +"iQc" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "iRj" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -55447,6 +55679,15 @@ /obj/item/beacon, /turf/open/floor/plasteel/white, /area/science/circuit) +"jsO" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/glowshroom, +/obj/item/seeds/corn, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jtj" = ( /obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ @@ -55580,6 +55821,14 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"jGw" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "jGI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55616,6 +55865,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "jIj" = ( @@ -55803,6 +56055,9 @@ }, /turf/open/floor/plating, /area/storage/tech) +"kfS" = ( +/turf/closed/wall/rust, +/area/maintenance/starboard/aft) "kfX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -55987,7 +56242,10 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "kAJ" = ( -/obj/machinery/portable_atmospherics/pump, +/obj/structure/table/wood/poker, +/obj/item/reagent_containers/food/drinks/shaker, +/obj/item/reagent_containers/glass/beaker/cryoxadone, +/obj/item/reagent_containers/dropper, /turf/open/floor/plating, /area/maintenance/starboard/aft) "kAO" = ( @@ -56070,6 +56328,14 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"kIN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/wood/normal, +/obj/machinery/light/small/broken{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/maintenance/starboard/aft) "kJE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -56110,6 +56376,15 @@ /obj/structure/disposalpipe/junction/flip, /turf/open/floor/plasteel, /area/hallway/primary/central) +"kQe" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/fancy/cigarettes/dromedaryco, +/obj/item/storage/fancy/cigarettes/dromedaryco{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kQk" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -56192,6 +56467,21 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/range) +"leE" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/human/body, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "lfV" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56263,6 +56553,14 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) +"lre" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck/syndicate{ + pixel_y = 6 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lsk" = ( /obj/machinery/vending/kink, /turf/open/floor/plasteel, @@ -56295,6 +56593,10 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lxP" = ( +/mob/living/simple_animal/opossum, +/turf/closed/wall, +/area/science/xenobiology) "lzt" = ( /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/stripes/line, @@ -56403,12 +56705,25 @@ }, /turf/open/floor/carpet, /area/crew_quarters/theatre) +"lUP" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lUS" = ( /obj/structure/table/wood/fancy/black, /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/carpet, /area/crew_quarters/dorms) +"lXy" = ( +/obj/machinery/light, +/obj/item/light/tube/broken, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lZl" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -56594,6 +56909,13 @@ /obj/effect/spawner/lootdrop/keg, /turf/open/floor/wood, /area/maintenance/bar) +"mug" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/mob/living/simple_animal/bot/mulebot, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "mvt" = ( /obj/machinery/airalarm{ dir = 1; @@ -56630,6 +56952,21 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"mDZ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/slime/limb, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "mGw" = ( /obj/machinery/door/airlock/security{ name = "Labor Shuttle"; @@ -56642,6 +56979,26 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/security/range) +"mHA" = ( +/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/reagent_containers/food/snacks/grown/banana, +/obj/item/reagent_containers/food/snacks/grown/wheat, +/obj/item/reagent_containers/food/snacks/grown/watermelon, +/obj/item/reagent_containers/food/snacks/grown/watermelon, +/obj/item/reagent_containers/food/snacks/grown/watermelon, +/obj/item/reagent_containers/food/snacks/grown/citrus/orange, +/obj/item/reagent_containers/food/snacks/grown/grapes, +/obj/item/reagent_containers/food/snacks/grown/cocoapod, +/obj/structure/rack, +/obj/item/seeds/wheat, +/obj/item/seeds/watermelon, +/obj/item/seeds/watermelon, +/obj/item/seeds/grape, +/obj/item/seeds/glowshroom, +/obj/item/seeds/cannabis/rainbow, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "mHU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/light_construct{ @@ -56665,6 +57022,12 @@ }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"mLS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "mNi" = ( /obj/machinery/light_switch{ pixel_x = -20 @@ -56868,6 +57231,17 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/fore) +"nnM" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/starboard/aft) +"noa" = ( +/obj/machinery/door/airlock/maintenance/abandoned, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "noy" = ( /obj/structure/sign/poster/contraband/smoke{ desc = "This poster reminds us all that the Detective is a parasite. Year after year, they must get replacement lungs because of their addiction. "; @@ -56881,6 +57255,23 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) +"noT" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/maintenance/starboard/aft) +"nsf" = ( +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nss" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -56918,6 +57309,14 @@ }, /turf/open/floor/plating, /area/construction) +"nzB" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/grass, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "nzR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -57010,10 +57409,13 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "nRG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/structure/cable/white{ + icon_state = "4-8" }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "nSt" = ( /obj/effect/turf_decal/tile/neutral{ @@ -57068,6 +57470,16 @@ /obj/item/gun/ballistic/revolver/nagant, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) +"nYK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/table/wood/poker, +/obj/item/clothing/glasses/sunglasses/big, +/obj/item/stack/spacecash/c10{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/maintenance/starboard/aft) "nYT" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -57195,6 +57607,21 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"olh" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/human/core, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "olr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -57410,12 +57837,20 @@ }, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"oMT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "oNz" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"oQP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/grimy, +/area/maintenance/starboard/aft) "oSl" = ( /obj/machinery/door/airlock/security{ name = "Firing Range"; @@ -57460,6 +57895,11 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) +"oYQ" = ( +/obj/structure/chair/stool, +/mob/living/simple_animal/bot/medbot, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "oZl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/wardrobe/pjs, @@ -57469,6 +57909,33 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"paJ" = ( +/obj/machinery/light{ + dir = 4; + light_color = "#c1caff" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"pcK" = ( +/mob/living/simple_animal/bot/cleanbot{ + name = "C.L.E.A.N." + }, +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/maintenance/starboard/aft) +"pcQ" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "pem" = ( /obj/machinery/button/door{ desc = "Bolts the doors to the Private Study."; @@ -57503,6 +57970,21 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) +"pkS" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "plC" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -57661,6 +58143,12 @@ /obj/item/target/syndicate, /turf/open/floor/plating, /area/security/range) +"pDG" = ( +/obj/structure/closet, +/obj/item/clothing/glasses/science, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pHl" = ( /obj/structure/table, /obj/item/storage/box/beakers{ @@ -57797,6 +58285,14 @@ }, /turf/open/floor/plating, /area/engine/atmos) +"pYQ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/sign/poster/official/hydro_ad{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qaY" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/bar, @@ -57875,6 +58371,12 @@ }, /turf/closed/wall, /area/quartermaster/miningdock) +"qlY" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "qmn" = ( /obj/machinery/computer/libraryconsole/bookmanagement, /obj/structure/table, @@ -57931,12 +58433,35 @@ /obj/structure/lattice, /turf/closed/wall/r_wall, /area/crew_quarters/heads/captain) +"qEB" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/berry, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"qFf" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "qIw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"qIO" = ( +/turf/open/floor/plating/rust, +/area/maintenance/starboard/aft) "qJr" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -57961,6 +58486,25 @@ }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/dorms) +"qMv" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/door/window/eastleft, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/gibs/core, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "qOc" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -57981,6 +58525,13 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) +"qSF" = ( +/obj/item/seeds/bee_balm/honey_balm, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "qTG" = ( /obj/machinery/light{ dir = 8 @@ -58017,6 +58568,16 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"rba" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/structure/cable/white, +/obj/effect/spawner/structure/window/hollow/reinforced/end{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "rcD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -58080,6 +58641,16 @@ }, /turf/open/floor/wood, /area/crew_quarters/dorms) +"rgW" = ( +/obj/structure/cable/white, +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "rhX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -58103,9 +58674,16 @@ /turf/open/floor/plasteel, /area/engine/atmos) "rmX" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/plating, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/item/light/bulb/broken, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, /area/maintenance/starboard/aft) "rnt" = ( /obj/structure/chair/comfy/black{ @@ -58360,6 +58938,20 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/fore) +"rSf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "rTo" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; @@ -58382,6 +58974,21 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"rVy" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "rVN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -58504,6 +59111,9 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) +"srk" = ( +/turf/open/floor/light/colour_cycle/dancefloor_a, +/area/maintenance/starboard/aft) "srG" = ( /obj/machinery/airalarm{ dir = 1; @@ -58573,6 +59183,21 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"sAH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/item/storage/toolbox/emergency, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "sAM" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" @@ -58687,6 +59312,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"sMG" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/starboard/aft) "sNK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/structure/cable{ @@ -58699,6 +59332,9 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance/abandoned, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/starboard/aft) "sOA" = ( @@ -58738,6 +59374,14 @@ /obj/structure/chair/office/light, /turf/open/floor/plasteel/white, /area/science/circuit) +"sVD" = ( +/obj/structure/table/wood/poker, +/obj/item/storage/box/matches{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "sWR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -58848,6 +59492,18 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) +"tsq" = ( +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 9 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ttL" = ( /obj/structure/sign/poster/contraband/random{ pixel_y = 32 @@ -59051,6 +59707,18 @@ }, /turf/open/space/basic, /area/space/nearstation) +"tTc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"tTw" = ( +/obj/structure/girder, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "tWj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -59163,6 +59831,20 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"uhq" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/gibs/human/lizard/body, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "ujv" = ( /obj/structure/sign/departments/restroom, /turf/closed/wall, @@ -59217,6 +59899,14 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"uqu" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/cultivator, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "usE" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/rack, @@ -59252,6 +59942,11 @@ /obj/structure/mineral_door/wood, /turf/open/floor/wood, /area/maintenance/bar) +"uwN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/stool/bar, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "uxY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -59264,6 +59959,33 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"uys" = ( +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"uzm" = ( +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/landmark/blobstart, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/maintenance/starboard/aft) "uzs" = ( /turf/open/floor/plasteel/yellowsiding{ dir = 4 @@ -59440,6 +60162,11 @@ /obj/machinery/power/terminal, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"uRn" = ( +/mob/living/simple_animal/opossum, +/obj/structure/chair/stool, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "uRS" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -59465,6 +60192,16 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/fore) +"uUP" = ( +/obj/structure/cable/white, +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/effect/spawner/structure/window/hollow/reinforced/directional{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "uVS" = ( /obj/structure/cable{ icon_state = "4-8" @@ -59649,11 +60386,22 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/fore) +"vsr" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg2" + }, +/area/maintenance/starboard/aft) "vsM" = ( /obj/machinery/power/apc/auto_name/south, /obj/structure/cable, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"vsO" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/maintenance/starboard/aft) "vsT" = ( /obj/structure/closet/crate, /obj/item/book/manual/wiki/telescience, @@ -59682,12 +60430,9 @@ /turf/open/floor/wood, /area/library) "vxh" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 8; - name = "8maintenance loot spawner" +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/turf/open/floor/plating, /area/maintenance/starboard/aft) "vxX" = ( /obj/machinery/door/airlock/external{ @@ -60058,6 +60803,14 @@ "wkN" = ( /turf/closed/wall, /area/science/circuit) +"wly" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 4; + name = "4maintenance loot spawner" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "wlI" = ( /obj/machinery/holopad, /turf/open/floor/plasteel/showroomfloor, @@ -60133,6 +60886,16 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wuO" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/costume, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "wvg" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -60239,6 +61002,19 @@ /obj/item/hand_labeler, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wVg" = ( +/obj/item/kirbyplants/random, +/obj/item/storage/firstaid/regular{ + pixel_y = 5 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/starboard/aft) +"wVN" = ( +/obj/structure/falsewall, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "wWi" = ( /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 @@ -60328,6 +61104,19 @@ }, /turf/open/space, /area/space/nearstation) +"xcz" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/onion, +/obj/structure/sign/poster/contraband/ambrosia_vulgaris{ + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "xgk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -60340,6 +61129,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"xgs" = ( +/obj/effect/landmark/event_spawn, +/turf/open/floor/carpet/royalblue, +/area/maintenance/starboard/aft) "xgC" = ( /obj/structure/cable{ icon_state = "0-4" @@ -60589,9 +61382,8 @@ /turf/open/floor/plasteel, /area/ai_monitored/security/armory) "xIa" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/grille_or_trash, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, /area/maintenance/starboard/aft) "xJC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -60741,6 +61533,13 @@ }, /turf/open/floor/plating, /area/security/processing) +"xWs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/wood/normal{ + dir = 1 + }, +/turf/open/floor/plasteel/grimy, +/area/maintenance/starboard/aft) "xXi" = ( /obj/machinery/vending/clothing, /turf/open/floor/plasteel, @@ -60766,6 +61565,13 @@ }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) +"yaW" = ( +/obj/machinery/hydroponics/soil{ + pixel_y = 8 + }, +/obj/item/seeds/ambrosia, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ycd" = ( /obj/structure/toilet/secret/low_loot{ dir = 4 @@ -104650,7 +105456,7 @@ aIt aPd aIt aPb -aIt +adu aXu aYW bat @@ -106484,7 +107290,7 @@ bLe bMr bNr bIT -bJN +lxP bJN bJN bJN @@ -111384,9 +112190,9 @@ cNW cNW clt cNW +wVN cNW -cNW -cNW +cQw cjD cjD cjD @@ -111624,30 +112430,30 @@ bLk bEs bNC nRG -cbf -cbf -cbf -cbf -cbf -cbf -cbf +kIN +nYK +xWs +uwN +lre +oQP +oQP bYr -cbf -clr +fLN +cNW cad cbi -cNW +iyG ccW -cdV +cNW clt cNW -cgy -ccV +cfv cNW -aaa -aaa -aaf -aaf +mug +hUJ +ixd +cNW +ktS aaf aaf aaf @@ -111879,31 +112685,31 @@ bIU bKe bLj bEs -bNB +cdV cac bPP -cNW -cNW -cNW -cNW -cNW -cNW -cNW +cOe +gRV +gDZ +eoD +sVD +kQe +imZ kAJ -clt -cac -cbh cNW +rSf +cNW +wly ccV -cOe -clt -cfv -cBL -cOe +noa +clu +cNW +xgs +srk +srk +srk +oYQ cNW -aaf -aaa -aaa aaa aaf aaa @@ -112139,29 +112945,29 @@ bEs rmX xIa vxh -cNW -aaa -aaa -aaf -aaa -aaf -cNW +cOe +bPP +bPP +bPP +vsO +iQc +sMG bYs -nRG -ciJ -cbf -cbf -cbf -cbf +ccU +nnM +cNW +wuO +pDG +cNW ceT cNW -dBm +gGK chH +dEh +srk +gGK cNW -aaf -aaf -aaa -aaf +ktS aaf aaf aaf @@ -112393,31 +113199,31 @@ rNc bEs bLm bEs -cOT -cOT -cOT -cNW -aaa -aaa -aaf -aaa -aaf +jGw +hke +fkW +fkW +fkW +fkW +uUP +noT cNW cNW -cOT -cOT -cOT +cNW +cNW +tTw +cNW cNW cNW cNW cPH cNW +gGK +pcK +srk +dHp +uRn cNW -cNW -cNW -aaf -aaf -aaa aaa aaf aaa @@ -112649,32 +113455,32 @@ bGc bGc bEs bLl -bEs -aaf -aaa -aaa -aaf -aaa -aaa -aaf -aaa -aaa -aag -aaf -aaa -aaa -aaa -aaf -aaf +cbh +eDz +fxk +iIs +qFf +pcQ +leE +hTt +vsr +cNW +hbi +uqu +yaW +iky +cNW +mHA +ifJ cNW ceU cNW -aaa -aaa -aaa -aaf -aaa -aaa +cgy +gGK +gGK +uRn +dBm +cNW aaa aaf aaa @@ -112906,33 +113712,33 @@ gXs gXs aaf aaa -aaf -gXs -aaa -aaa -aaf -aaa -aaa -aaf -aaa -aaa -aag -aaf -aaa -aaa -aaa -aaa -aaf +cNW +bPP +tsq +pkS +olh +cOe +rVy +hTt +cOe +wVN +pYQ +mLS +qIO +qSF +lUP +tTc +vxh cNW cOe cNW -aaf -aaf -aaf -aaf -aaf -aaf -aaf +cNW +cNW +cNW +cNW +cNW +cNW +ktS aaf aaf aaf @@ -113163,30 +113969,30 @@ aaa aaa aaf aaa -aaf -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aaa -aaa -aaf -aaf -aaa -aaa -aaa -aaa -aaf +cOT +bPP +uys +qFf +sAH +uzm +uhq +hTt +lXy +kfS +ewN +qEB +nzB +xcz +cVw +jsO +flP cNW cPI cNW -aaf +gXs aaa aaa -aaf +gXs aaa aaa aaa @@ -113420,24 +114226,24 @@ aaa aaa aaf aaa -aaf -aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aaa -aaa -gXs -aag +cOT +bPP +uys +mDZ +oMT +qFf +qFf +hTt +qIO +cNW +cNW +cNW +cNW +cNW +cNW +cNW +cNW +cNW aag aag gXs @@ -113677,19 +114483,19 @@ aaa aaa aaf aaa -aaf +cNW +bPP +nsf +rgW +rgW +gKl +qMv +rba +cae +cOT aaa aaa aaa -aag -aaa -aaa -aaa -aaa -aaa -aaf -aaa -aaa aaa aaa aaa @@ -113934,19 +114740,19 @@ aaa aaa aaf aaa -aaf +cNW +qlY +paJ +bPP +bPP +bPP +bPP +ddM +wVg +cOT aaa aaa aaa -aag -aaa -aaa -aaa -aaa -aaa -aaf -aaa -aaa aaa aaa aaa @@ -114191,16 +114997,16 @@ aaa aaa aaf aaa -aaf -aaa -aaa -aaa -aag -aaa -aaa -aaa -aaa -aaa +cNW +cNW +cNW +cOT +cOT +cOT +cOT +cNW +cNW +cNW aaa aaa aaa @@ -114448,11 +115254,11 @@ aaa aaa aaf aaa -aaf +gXs aaa aaa aaa -aag +gXs aaa aaa aaa @@ -114709,7 +115515,7 @@ aaf aaa aaa aaa -aag +aaa aaa aaa aaa @@ -114966,7 +115772,7 @@ aaf aaa aaa aaa -aaf +aaa aaa aaa aaa diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 9b260f0133..70abbc1477 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -8535,7 +8535,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/item/toy/cards/deck, /turf/open/floor/plasteel, /area/crew_quarters/bar) @@ -16727,7 +16727,7 @@ /area/bridge) "aKw" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/item/toy/cards/deck, /obj/structure/disposalpipe/segment{ dir = 4 @@ -31929,7 +31929,7 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/item/toy/cards/deck, /turf/open/floor/plasteel/white/corner{ dir = 1 diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 127b8b2241..891b238f11 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -20277,7 +20277,7 @@ /area/security/prison) "aND" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -20973,7 +20973,7 @@ /area/crew_quarters/bar/atrium) "aOJ" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -73299,7 +73299,7 @@ /area/library) "ctL" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -32 }, @@ -95302,7 +95302,7 @@ /area/medical/medbay/central) "deG" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/structure/sign/poster/official/help_others{ pixel_x = -32 }, @@ -116727,7 +116727,7 @@ /area/library/abandoned) "dQx" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/carpet, /area/library/abandoned) "dQy" = ( @@ -122957,7 +122957,7 @@ /area/hallway/secondary/exit/departure_lounge) "ecH" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 64af02437d..be1b5ba779 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -928,7 +928,7 @@ /area/security/prison) "acb" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel, /area/security/prison) "acc" = ( @@ -15807,7 +15807,7 @@ /area/crew_quarters/dorms) "aDZ" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "aEa" = ( @@ -21386,7 +21386,7 @@ /area/crew_quarters/locker) "aPI" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aPJ" = ( @@ -42546,7 +42546,7 @@ dir = 10 }, /obj/structure/table/wood/poker, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/wood, /area/crew_quarters/bar) "bFt" = ( diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index eabbdbb656..af94512e0f 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -22551,7 +22551,7 @@ /area/hallway/primary/starboard) "aJa" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/machinery/firealarm{ dir = 4; pixel_x = -24 @@ -22871,7 +22871,7 @@ /obj/machinery/requests_console{ department = "Genetics"; name = "Genetics RC"; - pixel_x = 28 + pixel_x = 28 }, /turf/open/floor/plasteel/white, /area/medical/genetics) @@ -28655,7 +28655,7 @@ "aTf" = ( /obj/structure/table/wood, /obj/item/clipboard, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 0f77d35dd5..ed7abba3d6 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -2180,7 +2180,7 @@ /turf/open/floor/plasteel/dark, /area/security/prison) "afp" = ( -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/structure/table, /turf/open/floor/plasteel/dark, /area/security/prison) @@ -10645,7 +10645,7 @@ /area/crew_quarters/dorms) "ayo" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/carpet, /area/crew_quarters/dorms) "ayq" = ( diff --git a/_maps/map_files/Snaxi/Snaxi.dmm b/_maps/map_files/Snaxi/Snaxi.dmm index 5cf7c43a3e..69b0fd9981 100644 --- a/_maps/map_files/Snaxi/Snaxi.dmm +++ b/_maps/map_files/Snaxi/Snaxi.dmm @@ -4095,7 +4095,7 @@ /area/engine/supermatter) "aOP" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel/dark, /area/security/prison) "aPw" = ( @@ -27914,7 +27914,7 @@ "nIM" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck, -/obj/item/storage/box/dice{ +/obj/item/storage/dice{ pixel_x = 8 }, /obj/structure/sign/poster/contraband/random{ @@ -33380,7 +33380,7 @@ /area/bridge) "qMN" = ( /obj/structure/table, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel/grimy, /area/crew_quarters/fitness/recreation) "qNB" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 020017c3fe..4582400c1a 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -8429,7 +8429,7 @@ /area/centcom/ferry) "tx" = ( /obj/structure/table/wood, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /turf/open/floor/plasteel/grimy, /area/centcom/ferry) "ty" = ( @@ -10217,7 +10217,7 @@ /area/wizard_station) "xy" = ( /obj/structure/table/wood/fancy, -/obj/item/storage/box/dice{ +/obj/item/storage/dice{ icon_state = "magicdicebag" }, /turf/open/floor/carpet, diff --git a/_maps/shuttles/arrival_delta.dmm b/_maps/shuttles/arrival_delta.dmm index c7d331e368..da5205fe66 100644 --- a/_maps/shuttles/arrival_delta.dmm +++ b/_maps/shuttles/arrival_delta.dmm @@ -307,7 +307,7 @@ "D" = ( /obj/structure/table/reinforced, /obj/item/folder, -/obj/item/storage/box/dice, +/obj/item/storage/dice, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/shuttle/arrival) diff --git a/_maps/shuttles/arrival_omega.dmm b/_maps/shuttles/arrival_omega.dmm index 9285a4a716..47673e98b7 100644 --- a/_maps/shuttles/arrival_omega.dmm +++ b/_maps/shuttles/arrival_omega.dmm @@ -237,7 +237,7 @@ /area/shuttle/arrival) "C" = ( /obj/structure/table/reinforced, -/obj/item/storage/box/dice{ +/obj/item/storage/dice{ pixel_x = -2; pixel_y = 8 }, diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 5775e128f8..57484ae85b 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -76,8 +76,14 @@ #define LINGHIVE_LINK 3 //whether the emote is visible or audible. +// Requires sight #define EMOTE_VISIBLE 1 +// Requires hearing #define EMOTE_AUDIBLE 2 +// Requires sight or hearing +#define EMOTE_BOTH 3 +// Always able to be seen +#define EMOTE_OMNI 4 //Don't set this very much higher then 1024 unless you like inviting people in to dos your server with message spam #define MAX_MESSAGE_LEN 2048 //Citadel edit: What's the WORST that could happen? @@ -89,4 +95,4 @@ // Audio/Visual Flags. Used to determine what sense are required to notice a message. #define MSG_VISUAL (1<<0) -#define MSG_AUDIBLE (1<<1) \ No newline at end of file +#define MSG_AUDIBLE (1<<1) diff --git a/code/__DEFINES/species.dm b/code/__DEFINES/species.dm index 3b4c674079..efd715b85a 100644 --- a/code/__DEFINES/species.dm +++ b/code/__DEFINES/species.dm @@ -34,6 +34,7 @@ #define SPECIES_SYNTH "synth" #define SPECIES_SYNTH_MIL "military_synth" #define SPECIES_VAMPIRE "vampire" + #define SPECIES_VAMPIRE_WEAK "vampire_roundstart" #define SPECIES_XENOHYBRID "xeno" #define SPECIES_ZOMBIE "zombie" diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 520f205381..82302a2e06 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -208,10 +208,9 @@ #define TRAIT_FAST_PUMP "fast_pump" #define TRAIT_NO_PROCESS_FOOD "no-process-food" // You don't get benefits from nutriment, nor nutrition from reagent consumables #define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good... -/// Prevents stamina buffer regeneration -#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" -/// Prevents stamina regeneration -#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" +#define TRAIT_NO_STAMINA_BUFFER_REGENERATION "block_stamina_buffer_regen" /// Prevents stamina buffer regeneration +#define TRAIT_NO_STAMINA_REGENERATION "block_stamina_regen" /// Prevents stamina regeneration +#define TRAIT_ARMOR_BROKEN "armor_broken" //acts as if you are wearing no clothing when taking damage, does not affect non-clothing sources of protection // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) diff --git a/code/__DEFINES/vote.dm b/code/__DEFINES/vote.dm index 175cce3dc4..a3617e21d0 100644 --- a/code/__DEFINES/vote.dm +++ b/code/__DEFINES/vote.dm @@ -1,9 +1,9 @@ -#define PLURALITY_VOTING 0 -#define APPROVAL_VOTING 1 -#define SCHULZE_VOTING 2 -#define SCORE_VOTING 3 -#define MAJORITY_JUDGEMENT_VOTING 4 -#define INSTANT_RUNOFF_VOTING 5 +#define PLURALITY_VOTING "PLURALITY" +#define APPROVAL_VOTING "APPROVAL" +#define SCHULZE_VOTING "SCHULZE" +#define SCORE_VOTING "SCORE" +#define MAJORITY_JUDGEMENT_VOTING "MAJORITY_JUDGEMENT" +#define INSTANT_RUNOFF_VOTING "IRV" #define SHOW_RESULTS (1<<0) #define SHOW_VOTES (1<<1) @@ -26,4 +26,4 @@ GLOBAL_LIST_INIT(display_vote_settings, list(\ "Ongoing Votes" = SHOW_VOTES, "Winner" = SHOW_WINNER, "Abstainers" = SHOW_ABSTENTION -)) \ No newline at end of file +)) diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index b3e00af458..48b159baa1 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -290,7 +290,7 @@ /datum/config_entry/flag/tgstyle_maprotation /datum/config_entry/string/map_vote_type - config_entry_value = "SCORE" + config_entry_value = APPROVAL_VOTING /datum/config_entry/number/maprotatechancedelta config_entry_value = 0.75 diff --git a/code/controllers/subsystem/processing/circuit.dm b/code/controllers/subsystem/processing/circuit.dm index ac720a7fb4..880e7a16a8 100644 --- a/code/controllers/subsystem/processing/circuit.dm +++ b/code/controllers/subsystem/processing/circuit.dm @@ -50,17 +50,20 @@ PROCESSING_SUBSYSTEM_DEF(circuit) /obj/item/electronic_assembly/simple, /obj/item/electronic_assembly/hook, /obj/item/electronic_assembly/pda, + /obj/item/electronic_assembly/dildo, /obj/item/electronic_assembly/small/default, /obj/item/electronic_assembly/small/cylinder, /obj/item/electronic_assembly/small/scanner, /obj/item/electronic_assembly/small/hook, /obj/item/electronic_assembly/small/box, + /obj/item/electronic_assembly/small/dildo, /obj/item/electronic_assembly/medium/default, /obj/item/electronic_assembly/medium/box, /obj/item/electronic_assembly/medium/clam, /obj/item/electronic_assembly/medium/medical, /obj/item/electronic_assembly/medium/gun, /obj/item/electronic_assembly/medium/radio, + /obj/item/electronic_assembly/medium/dildo, /obj/item/electronic_assembly/large/default, /obj/item/electronic_assembly/large/scope, /obj/item/electronic_assembly/large/terminal, diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm index 161fd92f77..13e9ff50a2 100644 --- a/code/controllers/subsystem/statpanel.dm +++ b/code/controllers/subsystem/statpanel.dm @@ -45,22 +45,29 @@ SUBSYSTEM_DEF(statpanels) var/list/vote_arry = list( list("Vote active!", "There is currently a vote running. Question: [SSvote.question]") ) //see the MC on how this works. - if(!(SSvote.vote_system in list(PLURALITY_VOTING, APPROVAL_VOTING))) + if(!(SSvote.vote_system in list(PLURALITY_VOTING, APPROVAL_VOTING, SCHULZE_VOTING, INSTANT_RUNOFF_VOTING))) vote_arry[++vote_arry.len] += list("STATPANEL VOTING DISABLED!", "The current vote system is not supported by statpanel rendering. Please vote manually by opening the vote popup using the action button or chat link.", "disabled") //does not return. else - vote_arry[++vote_arry.len] += list("Time Left:", " [round(SSvote.end_time - world.time)] seconds") + vote_arry[++vote_arry.len] += list("Time Left:", " [DisplayTimeText(SSvote.end_time - world.time)] seconds") vote_arry[++vote_arry.len] += list("Choices:", "") for(var/choice in SSvote.choice_statclicks) var/choice_id = SSvote.choice_statclicks[choice] - var/ivotedforthis = FALSE if(target.ckey) switch(SSvote.vote_system) - if(APPROVAL_VOTING) - ivotedforthis = SSvote.voted[target.ckey] && (text2num(choice_id) in SSvote.voted[usr.ckey]) - if(PLURALITY_VOTING) - ivotedforthis = (SSvote.voted[target.ckey] == text2num(choice_id)) - vote_arry[++vote_arry.len] += list(ivotedforthis ? "\[X\]" : "\[ \]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1") + if(PLURALITY_VOTING, APPROVAL_VOTING) + var/ivotedforthis = FALSE + if(SSvote.vote_system == APPROVAL_VOTING) + ivotedforthis = SSvote.voted[target.ckey] && (text2num(choice_id) in SSvote.voted[target.ckey]) + else + ivotedforthis = (SSvote.voted[target.ckey] == text2num(choice_id)) + vote_arry[++vote_arry.len] += list(ivotedforthis ? "\[X\]" : "\[ \]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1") + if(SCHULZE_VOTING, INSTANT_RUNOFF_VOTING) + var/list/vote = SSvote.voted[target.ckey] + var/vote_position = " " + if(vote) + vote_position = vote.Find(text2num(choice_id)) + vote_arry[++vote_arry.len] += list("\[[vote_position]\]", choice, "[REF(SSvote)];vote=[choice_id];statpannel=1") var/vote_str = url_encode(json_encode(vote_arry)) target << output("[vote_str]", "statbrowser:update_voting") else diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 19f19f05ac..95d8928368 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -482,18 +482,7 @@ SUBSYSTEM_DEF(ticker) INVOKE_ASYNC(SSmapping, /datum/controller/subsystem/mapping/.proc/maprotate) else var/vote_type = CONFIG_GET(string/map_vote_type) - switch(vote_type) - if("PLURALITY") - SSvote.initiate_vote("map","server", display = SHOW_RESULTS) - if("APPROVAL") - SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = APPROVAL_VOTING) - if("IRV") - SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = INSTANT_RUNOFF_VOTING) - if("SCORE") - SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = MAJORITY_JUDGEMENT_VOTING) - else - SSvote.initiate_vote("map","server", display = SHOW_RESULTS) - // fallback + SSvote.initiate_vote("map","server", display = SHOW_RESULTS, votesystem = vote_type) /datum/controller/subsystem/ticker/proc/HasRoundStarted() return current_state >= GAME_STATE_PLAYING diff --git a/code/datums/accents.dm b/code/datums/accents.dm index ce32aa0884..d9e073b729 100644 --- a/code/datums/accents.dm +++ b/code/datums/accents.dm @@ -25,18 +25,15 @@ /datum/accent/abductor/modify_speech(list/speech_args, datum/source) var/message = speech_args[SPEECH_MESSAGE] - var/mob/living/carbon/human/user = source + var/mob/living/carbon/user = source + var/obj/item/organ/tongue/abductor/A = user.getorgan(/obj/item/organ/tongue/abductor) var/rendered = "[user.name]: [message]" user.log_talk(message, LOG_SAY, tag="abductor") - for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE) - if(!T || T.type != type) + for(var/mob/living/carbon/C in GLOB.alive_mob_list) + var/obj/item/organ/tongue/abductor/T = C.getorgan(/obj/item/organ/tongue/abductor) + if(!T || T.mothership != A.mothership) continue - if(H.dna && H.dna.species.id == "abductor" && user.dna && user.dna.species.id == "abductor") - var/datum/antagonist/abductor/A = user.mind.has_antag_datum(/datum/antagonist/abductor) - if(!A || !(H.mind in A.team.members)) - continue - to_chat(H, rendered) + to_chat(C, rendered) for(var/mob/M in GLOB.dead_mob_list) var/link = FOLLOW_LINK(M, user) to_chat(M, "[link] [rendered]") diff --git a/code/datums/action.dm b/code/datums/action.dm index 4e65a0a698..284df6adda 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -174,7 +174,7 @@ M.ghostize(can_reenter_corpse = TRUE, voluntary = TRUE) /datum/action/proc/OnUpdatedIcon() - UpdateButtonIcon() + addtimer(CALLBACK(src, .proc/UpdateButtonIcon), 1) //Hopefully runs after new icon overlays have been compiled. //Presets for item actions /datum/action/item_action diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index ec8ea86d24..753adf7ff4 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -248,7 +248,7 @@ category = CAT_WEAPONRY subcategory = CAT_WEAPON -/datum/crafting_recipe/ishotgun // smaller and more versatile gun requires some better materials +/datum/crafting_recipe/ishotgun name = "Improvised Shotgun" result = /obj/item/gun/ballistic/revolver/doublebarrel/improvised reqs = list(/obj/item/pipe = 2, // putting a large amount of meaningless timegates by forcing people to turn base resources into upgraded resources kinda sucks @@ -408,7 +408,7 @@ /datum/crafting_recipe/rifle_receiver name = "Improvised Rifle Receiver" result = /obj/item/weaponcrafting/improvised_parts/rifle_receiver - reqs = list(/obj/item/stack/sheet/metal = 15) // you can carry multiple shotguns + reqs = list(/obj/item/stack/sheet/metal = 15) tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) time = 25 category = CAT_WEAPONRY @@ -417,10 +417,9 @@ /datum/crafting_recipe/shotgun_receiver name = "Improvised Shotgun Receiver" result = /obj/item/weaponcrafting/improvised_parts/shotgun_receiver - reqs = list(/obj/item/stack/sheet/metal = 15, - /obj/item/stack/sheet/plasteel = 1) // requires access or hacking since shotgun is better + reqs = list(/obj/item/stack/sheet/metal = 10) // shotgun does less damage than the rifle and can't 1shot but is more portable tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 25 + time = 20 category = CAT_WEAPONRY subcategory = CAT_PARTS @@ -432,6 +431,6 @@ reqs = list(/obj/item/stack/sheet/metal = 3, /obj/item/assembly/igniter = 1) tools = list(TOOL_SCREWDRIVER, TOOL_WELDER) - time = 25 + time = 20 category = CAT_WEAPONRY subcategory = CAT_PARTS diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index b8191a377b..0552a791ea 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -46,6 +46,21 @@ if(isnum(use_delay_override)) use_delay = use_delay_override +/datum/component/squeak/UnregisterFromParent() + if(!isatom(parent)) + return + UnregisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY)) + if(ismovable(parent)) + UnregisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT, + COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED, COMSIG_MOVABLE_CROSS, + COMSIG_CROSS_SQUEAKED, COMSIG_MOVABLE_DISPOSING)) + if(isitem(parent)) + UnregisterSignal(parent, list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF, + COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED)) + if(istype(parent, /obj/item/clothing/shoes)) + UnregisterSignal(parent, COMSIG_SHOES_STEP_ACTION) + return ..() + /datum/component/squeak/proc/play_squeak() do_play_squeak() diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index e1147df225..14f3eae689 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -66,8 +66,12 @@ if(emote_type == EMOTE_AUDIBLE) user.audible_message(msg) - else + else if(emote_type == EMOTE_VISIBLE) user.visible_message(msg) + else if(emote_type == EMOTE_BOTH) + user.visible_message(msg, blind_message = msg) + else if(emote_type == EMOTE_OMNI) + user.visible_message(msg, omni = TRUE) /datum/emote/proc/replace_pronoun(mob/user, message) if(findtext(message, "their")) diff --git a/code/datums/mutations/_mutations.dm b/code/datums/mutations/_mutations.dm index 3bddfdaa63..b72874c329 100644 --- a/code/datums/mutations/_mutations.dm +++ b/code/datums/mutations/_mutations.dm @@ -150,7 +150,6 @@ overlays_standing[CM.layer_used] = mut_overlay apply_overlay(CM.layer_used) - /datum/mutation/human/proc/modify() //called when a genome is applied so we can properly update some stats without having to remove and reapply the mutation from someone if(modified || !power || !owner) return diff --git a/code/game/gamemodes/gangs/gang.dm b/code/game/gamemodes/gangs/gang.dm index a766dda57c..a4483ca3b8 100644 --- a/code/game/gamemodes/gangs/gang.dm +++ b/code/game/gamemodes/gangs/gang.dm @@ -197,7 +197,7 @@ if(gangtool)//Here is where all of the text occurs when a gang boss first spawns in. var/obj/item/device/gangtool/G = new() - var/where = H.equip_in_one_of_slots(G, slots) + var/where = H.equip_in_one_of_slots(G, slots, critical = TRUE) if (!where) to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a Gangtool.") else @@ -207,7 +207,7 @@ if(pen) var/obj/item/pen/gang/T = new() - var/where2 = H.equip_in_one_of_slots(T, slots) + var/where2 = H.equip_in_one_of_slots(T, slots, critical = TRUE) if (!where2) to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a recruitment pen to start.") else @@ -215,7 +215,7 @@ if(spraycan) var/obj/item/toy/crayon/spraycan/gang/SC = new(null,gang) - var/where3 = H.equip_in_one_of_slots(SC, slots) + var/where3 = H.equip_in_one_of_slots(SC, slots, critical = TRUE) if (!where3) to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a territory spraycan to start.") else @@ -223,7 +223,7 @@ if(hud) var/obj/item/clothing/glasses/hud/security/chameleon/C = new(null,gang) - var/where4 = H.equip_in_one_of_slots(C, slots) + var/where4 = H.equip_in_one_of_slots(C, slots, critical = TRUE) if (!where4) to_chat(H, "Your Syndicate benefactors were unfortunately unable to get you a chameleon security HUD.") else diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index a8ed4611eb..d8617e0b48 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -166,7 +166,7 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo. var/list/slots = list("backpack" = SLOT_IN_BACKPACK) for(var/eq_path in special_equipment) var/obj/O = new eq_path - H.equip_in_one_of_slots(O, slots) + H.equip_in_one_of_slots(O, slots, critical = TRUE) /datum/objective/assassinate name = "assasinate" @@ -1152,7 +1152,7 @@ GLOBAL_LIST_EMPTY(cult_contraband) I.forceMove(get_turf(owner)) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK)) + H.equip_in_one_of_slots(I, list("backpack" = SLOT_IN_BACKPACK), critical = TRUE) hoarded_item = I diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index da82b0afc7..f46169f72e 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = ..() if(.) return - if(!usr.canUseTopic(src, !issilicon(usr))) + if(!usr.canUseTopic(src, !hasSiliconAccessInArea(usr))) return if(stat & BROKEN) visible_message("[src] buzzes.", "You hear a faint buzz.") @@ -147,7 +147,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = attack_ai(user) /obj/machinery/announcement_system/attack_ai(mob/user) - if(!user.canUseTopic(src, !issilicon(user))) + if(!user.canUseTopic(src, !hasSiliconAccessInArea(user))) return if(stat & BROKEN) to_chat(user, "[src]'s firmware appears to be malfunctioning!") @@ -167,7 +167,9 @@ GLOBAL_LIST_EMPTY(announcement_systems) act_up() /obj/machinery/announcement_system/emag_act() + . = ..() if(obj_flags & EMAGGED) return obj_flags |= EMAGGED act_up() + return TRUE diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 401d05da12..9b911e9c15 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -21,6 +21,9 @@ return if(R.scrambledcodes) return + if(hasSiliconAccessInArea(user) && !issilicon(user)) + if(!Adjacent(user)) + return return TRUE /obj/machinery/computer/robotics/ui_interact(mob/user, datum/tgui/ui) @@ -40,6 +43,10 @@ else if(IsAdminGhost(user)) data["can_hack"] = TRUE + data["can_convert"] = FALSE + if(isAI(user) && is_servant_of_ratvar(user)) + data["can_convert"] = TRUE + data["cyborgs"] = list() for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs) if(!can_control(user, R)) @@ -54,6 +61,7 @@ module = R.module ? "[R.module.name] Module" : "No Module Detected", synchronization = R.connected_ai, emagged = R.emagged, + servant = is_servant_of_ratvar(R), ref = REF(R) ) data["cyborgs"] += list(cyborg_data) @@ -110,6 +118,13 @@ log_game("[key_name(usr)] emagged [key_name(R)] using robotic console!") message_admins("[ADMIN_LOOKUPFLW(usr)] emagged cyborg [key_name_admin(R)] using robotic console!") R.SetEmagged(TRUE) + if("convert") + if(isAI(usr) && is_servant_of_ratvar(usr)) + var/mob/living/silicon/robot/R = locate(params["ref"]) in GLOB.silicon_mobs + if(istype(R) && !is_servant_of_ratvar(R) && R.connected_ai == usr) + log_game("[key_name(usr)] converted [key_name(R)] using robotic console!") + message_admins("[ADMIN_LOOKUPFLW(usr)] converted cyborg [key_name_admin(R)] using robotic console!") + add_servant_of_ratvar(R) if("killdrone") if(allowed(usr)) var/mob/living/simple_animal/drone/D = locate(params["ref"]) in GLOB.mob_list diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index e721e986d2..0dcb0e7235 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -32,6 +32,8 @@ . = ..() if(in_range(user, src) || isobserver(user)) . += "The status display reads: Radiation pulse accuracy increased by factor [precision_coeff**2].
Radiation pulse damage decreased by factor [damage_coeff**2].
" + if(scan_level >= 3) + . += "Scanner has been upgraded to support autoprocessing." /obj/machinery/dna_scannernew/update_icon_state() //no power or maintenance @@ -94,6 +96,13 @@ ..(user) +// search for ghosts, if the corpse is empty and the scanner is connected to a cloner + var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) + if(istype(mob_occupant)) + if(locate_computer(/obj/machinery/computer/cloning)) + if(!mob_occupant.suiciding && !(HAS_TRAIT(mob_occupant, TRAIT_NOCLONE)) && !mob_occupant.hellbound) + mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) + // DNA manipulators cannot operate on severed heads or brains if(iscarbon(occupant)) if(linked_console) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 515a4672a5..9ef34390f6 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1457,6 +1457,16 @@ ui.open() return TRUE +/obj/machinery/door/airlock/ui_status(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + . = UI_INTERACTIVE + +/obj/machinery/door/airlock/can_interact(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + return TRUE + /obj/machinery/door/airlock/ui_data() var/list/data = list() diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm index 04fd5f6af5..a0440001c3 100644 --- a/code/game/machinery/telecomms/machines/message_server.dm +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -28,10 +28,10 @@ if(!do_after(user, 30 SECONDS, TRUE, src)) to_chat(user, "Your fingers slip as you fail to pry the [stored] from the [src], clicking it right back into the slot!") return - if(user.put_in_hands(stored)) - stored.forceMove(user.drop_location()) + user.put_in_hands(stored) + to_chat(user, "You successfully pry the [stored] from the [src]\ + [user.is_holding(stored) ? "" : ", and send its overwhelming weight tumbling onto the ground"]! The tapes on the [src] stop spinning...") stored = null - to_chat(user, "You successfully pry the [stored] from the [src], and send its overwhelming weight tumbling onto the ground! The tapes on the [src] stop spinning...") update_icon() return else @@ -41,7 +41,7 @@ /obj/machinery/blackbox_recorder/attackby(obj/item/I, mob/living/user, params) . = ..() if(istype(I, /obj/item/blackbox)) - if(HAS_TRAIT(I, TRAIT_NODROP) || !user.transferItemToLoc(I, src)) + if(!user.transferItemToLoc(I, src)) to_chat(user, "[I] is stuck to your hand!") return user.visible_message("[user] clicks the [I] into the [src]!", \ diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 6564a83729..bacbf3c388 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -464,7 +464,7 @@ /obj/effect/spawner/lootdrop/cigars_cases/no_turf = 2, /obj/effect/spawner/lootdrop/space_cash/no_turf = 5, /obj/item/reagent_containers/food/snacks/grown/cannabis = 5, - /obj/item/storage/box/dice = 5, + /obj/item/storage/dice = 5, /obj/item/toy/cards/deck = 5, /obj/effect/spawner/lootdrop/druggie_pill/no_turf = 5 ) @@ -483,7 +483,7 @@ /obj/effect/spawner/lootdrop/cig_packs/no_turf = 10, /obj/effect/spawner/lootdrop/cigars_cases/no_turf = 5, /obj/item/reagent_containers/food/snacks/grown/cannabis = 5, - /obj/item/storage/box/dice = 5, + /obj/item/storage/dice = 5, /obj/item/toy/cards/deck = 5, /obj/effect/spawner/lootdrop/druggie_pill/no_turf = 5, /obj/item/kitchen/knife = 5, diff --git a/code/game/objects/items/RSF.dm b/code/game/objects/items/RSF.dm index 8fd2ed2377..da5ab1a5a5 100644 --- a/code/game/objects/items/RSF.dm +++ b/code/game/objects/items/RSF.dm @@ -93,7 +93,7 @@ RSF use_matter(50, user) if(4) to_chat(user, "Dispensing Dice Pack...") - new /obj/item/storage/box/dice(T) + new /obj/item/storage/dice(T) use_matter(200, user) if(5) to_chat(user, "Dispensing Cigarette...") diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 4777796331..ecc8f9187a 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -616,7 +616,7 @@ if(defib.healdisk) H.heal_overall_damage(25, 25) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index 2fe4c67362..bbc493672f 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -1,39 +1,38 @@ -/obj/item/storage/box/dice +/*****************************Dice Bags********************************/ + +/obj/item/storage/dice name = "bag of dice" desc = "Contains all the luck you'll ever need." icon = 'icons/obj/dice.dmi' icon_state = "dicebag" + w_class = WEIGHT_CLASS_SMALL + var/list/special_die = list( + /obj/item/dice/d1, + /obj/item/dice/d2, + /obj/item/dice/fudge, + /obj/item/dice/d6/space, + /obj/item/dice/d00, + /obj/item/dice/eightbd20, + /obj/item/dice/fourdd6, + /obj/item/dice/d100 + ) -/obj/item/storage/box/dice/Initialize() - . = ..() - var/special_die = pick("1","2","fudge","space","00","8bd20","4dd6","100") - if(special_die == "1") - new /obj/item/dice/d1(src) - if(special_die == "2") - new /obj/item/dice/d2(src) +/obj/item/storage/dice/PopulateContents() new /obj/item/dice/d4(src) new /obj/item/dice/d6(src) - if(special_die == "fudge") - new /obj/item/dice/fudge(src) - if(special_die == "space") - new /obj/item/dice/d6/space(src) new /obj/item/dice/d8(src) new /obj/item/dice/d10(src) - if(special_die == "00") - new /obj/item/dice/d00(src) new /obj/item/dice/d12(src) new /obj/item/dice/d20(src) - if(special_die == "8bd20") - new /obj/item/dice/eightbd20(src) - if(special_die == "4dd6") - new /obj/item/dice/fourdd6(src) - if(special_die == "100") - new /obj/item/dice/d100(src) + var/picked = pick(special_die) + new picked(src) -/obj/item/storage/box/dice/suicide_act(mob/user) +/obj/item/storage/dice/suicide_act(mob/user) user.visible_message("[user] is gambling with death! It looks like [user.p_theyre()] trying to commit suicide!") return (OXYLOSS) +/*****************************Dice********************************/ + /obj/item/dice //depreciated d6, use /obj/item/dice/d6 if you actually want a d6 name = "die" desc = "A die with six sides. Basic and serviceable." diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm index 36e58d8887..06d2df9272 100644 --- a/code/game/objects/items/implants/implant_hijack.dm +++ b/code/game/objects/items/implants/implant_hijack.dm @@ -92,10 +92,17 @@ /obj/item/implant/hijack/proc/hijack_remotely(obj/machinery/power/apc/apc) if (apc.hijacker || hijacking) return FALSE //can't remotely hijack an already hijacked APC + + if(apc.being_hijacked) + to_chat(imp_in, "This APC is already being hijacked!") + return FALSE + + apc.being_hijacked = TRUE hijacking = TRUE to_chat(imp_in, "Establishing remote connection with APC.") if (!do_after(imp_in, 4 SECONDS,target=apc)) to_chat(imp_in, "Aborting.") + apc.being_hijacked = FALSE hijacking = FALSE return TRUE if (LAZYLEN(imp_in.siliconaccessareas) >= HIJACK_APC_MAX_AMOUNT) @@ -118,6 +125,7 @@ toggle_eyes() else to_chat(imp_in, "Aborting.") + apc.being_hijacked = FALSE hijacking = FALSE imp_in.light_power = 0 imp_in.light_range = 0 diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 61f6ec9998..6e3fcfae2a 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -100,7 +100,7 @@ var/T = new item_path(mob) var/item_name = initial(item_path.name) - var/where = mob.equip_in_one_of_slots(T, slots) + var/where = mob.equip_in_one_of_slots(T, slots, critical = TRUE) if(!where) to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") return 0 diff --git a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm index 81bc090460..25602c8588 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_antag.dm @@ -75,7 +75,7 @@ var/T = new item_path(H) var/item_name = initial(item_path.name) - var/where = H.equip_in_one_of_slots(T, slots) + var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE) if(!where) to_chat(H, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") return FALSE diff --git a/code/modules/antagonists/overthrow/overthrow.dm b/code/modules/antagonists/overthrow/overthrow.dm index 0e8c4a35e0..8fa5517b4f 100644 --- a/code/modules/antagonists/overthrow/overthrow.dm +++ b/code/modules/antagonists/overthrow/overthrow.dm @@ -131,14 +131,14 @@ "left pocket" = SLOT_L_STORE, "right pocket" = SLOT_R_STORE ) - var/where = H.equip_in_one_of_slots(O, slots) + var/where = H.equip_in_one_of_slots(O, slots, critical = TRUE) if (!where) to_chat(H, "The Syndicate were unfortunately unable to get you the AI module.") else to_chat(H, "Use the AI board in your [where] to take control of the AI, as requested by the Syndicate.") // Give the implant converter var/obj/item/overthrow_converter/I = new(H) - where = H.equip_in_one_of_slots(I, slots) + where = H.equip_in_one_of_slots(I, slots, critical = TRUE) if (!where) to_chat(H, "The Syndicate were unfortunately unable to get you a converter implant.") else diff --git a/code/modules/antagonists/revolution/revolution.dm b/code/modules/antagonists/revolution/revolution.dm index 4f308cc4c0..c23523cc6b 100644 --- a/code/modules/antagonists/revolution/revolution.dm +++ b/code/modules/antagonists/revolution/revolution.dm @@ -251,7 +251,7 @@ "left pocket" = SLOT_L_STORE, "right pocket" = SLOT_R_STORE ) - var/where = H.equip_in_one_of_slots(T, slots) + var/where = H.equip_in_one_of_slots(T, slots, critical = TRUE) if (!where) to_chat(H, "The Syndicate were unfortunately unable to get you a flash.") else diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 0309b7e826..47a9c59274 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -212,7 +212,7 @@ ) var/where = "At your feet" - var/equipped_slot = mob.equip_in_one_of_slots(folder, slots) + var/equipped_slot = mob.equip_in_one_of_slots(folder, slots, critical = TRUE) if (equipped_slot) where = "In your [equipped_slot]" to_chat(mob, "

[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
") diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index a2a55ee6b1..6049ee965e 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -237,12 +237,21 @@ . += "Alt-click to [locked ? "unlock" : "lock"] the interface." /obj/machinery/airalarm/ui_status(mob/user) - if(hasSiliconAccessInArea(user) && aidisabled) - to_chat(user, "AI control has been disabled.") - else if(!shorted) + if(hasSiliconAccessInArea(user)) + if(aidisabled) + to_chat(user, "AI control has been disabled") + return UI_CLOSE + else if(!issilicon(user)) //True sillycones use ..() + return UI_INTERACTIVE + if(!shorted) return ..() return UI_CLOSE +/obj/machinery/airalarm/can_interact(mob/user) + . = ..() + if (!issilicon(user) && hasSiliconAccessInArea(user)) + return TRUE + /obj/machinery/airalarm/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 0d1b6861c8..66d4b46c60 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -74,7 +74,7 @@ actions_types = list(/datum/action/item_action/adjust) visor_flags_inv = HIDEFACE dog_fashion = /datum/dog_fashion/head/clown - var/static/list/clownmask_designs = list() + var/static/list/clownmask_designs /obj/item/clothing/mask/gas/clown_hat/Initialize(mapload) .=..() @@ -131,7 +131,7 @@ resistance_flags = FLAMMABLE actions_types = list(/datum/action/item_action/adjust) visor_flags_inv = HIDEFACE - var/static/list/mimemask_designs = list() + var/static/list/mimemask_designs /obj/item/clothing/mask/gas/mime/examine(mob/user) . = ..() diff --git a/code/modules/clothing/under/jobs/civilian/civilian.dm b/code/modules/clothing/under/jobs/civilian/civilian.dm index 9bfac2a81c..505aa91775 100644 --- a/code/modules/clothing/under/jobs/civilian/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian/civilian.dm @@ -199,6 +199,15 @@ can_adjust = FALSE mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON +/obj/item/clothing/under/rank/civilian/janitor/maid/polychromic + icon_state = "polymaid" + item_state = "polymaid" + var/list/poly_colors = list("#FFFFFF", "#000000") + +/obj/item/clothing/under/rank/civilian/janitor/maid/polychromic/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, poly_colors, 2) + /obj/item/clothing/under/rank/civilian/lawyer desc = "Slick threads." name = "Lawyer suit" diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index 394294db37..1b0c19274b 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -44,7 +44,13 @@ priority_announce("Localized energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") /datum/round_event/anomaly/start() - var/turf/T = pick(get_area_turfs(impact_area)) + var/list/turf/valid = list() + for(var/i in get_area_turfs(impact_area)) + var/turf/T = i + if(T.density) + continue + valid += T + var/turf/T = pick(valid) var/newAnomaly if(T) newAnomaly = new anomaly_path(T) diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index 3bcec9f471..8bada6da77 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -219,7 +219,7 @@ suit_type = /obj/item/clothing/suit/space helmet_type = /obj/item/clothing/head/helmet/space mask_type = /obj/item/clothing/mask/breath - storage_type = /obj/item/tank/internals/oxygen + storage_type = /obj/item/tank/jetpack/void /obj/machinery/loot_locator @@ -275,6 +275,7 @@ /obj/machinery/computer/piratepad_control name = "cargo hold control terminal" + resistance_flags = INDESTRUCTIBLE ui_x = 600 ui_y = 230 var/status_report = "Ready for delivery." diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 903ff13fa8..7c9f811c34 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -651,6 +651,11 @@ icon_state = "setup_small_pda" desc = "It's a case, for building small electronics with. This one resembles a PDA." +/obj/item/electronic_assembly/dildo + name = "type-g electronic assembly" + icon_state = "setup_dildo_medium" + desc = "It's a case, for building small electronics with. This one has a phallic design." + /obj/item/electronic_assembly/small name = "electronic device" icon_state = "setup_device" @@ -682,6 +687,11 @@ icon_state = "setup_device_box" desc = "It's a case, for building tiny-sized electronics with. This one has a boxy design." +/obj/item/electronic_assembly/small/dildo + name = "type-f electronic device" + icon_state = "setup_dildo_small" + desc = "It's a case, for building tiny-sized electronics with. This one has a phallic design." + /obj/item/electronic_assembly/medium name = "electronic mechanism" icon_state = "setup_medium" @@ -722,6 +732,12 @@ icon_state = "setup_medium_radio" desc = "It's a case, for building medium-sized electronics with. This one resembles an old radio." +/obj/item/electronic_assembly/medium/dildo + name = "type-g electronic mechanism" + icon_state = "setup_dildo_large" + desc = "It's a case, for building medium-sized electronics with. This one has a phallic design." + + /obj/item/electronic_assembly/large name = "electronic machine" icon_state = "setup_large" diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm index d9a18bc509..26ac3080de 100644 --- a/code/modules/integrated_electronics/subtypes/atmospherics.dm +++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm @@ -115,10 +115,10 @@ source_air = air_contents // Move gas from one place to another - move_gas(source_air, target_air) + move_gas(source_air, target_air, (istype(target, /obj/item/tank) ? target : null)) air_update_turf() -/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air) +/obj/item/integrated_circuit/atmospherics/pump/proc/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake) // No moles = nothing to pump if(source_air.total_moles() <= 0 || target_air.return_pressure() >= PUMP_MAX_PRESSURE) @@ -132,7 +132,10 @@ if(pressure_delta > 0.1) var/transfer_moles = (pressure_delta*target_air.return_volume()/(source_air.return_temperature() * R_IDEAL_GAS_EQUATION))*PUMP_EFFICIENCY var/datum/gas_mixture/removed = source_air.remove(transfer_moles) - target_air.merge(removed) + if(istype(snowflake)) //Snowflake check for tanks specifically, because tank ruptures are handled in a very snowflakey way that expects all tank interactions to be handled via the tank's procs + snowflake.assume_air(removed) + else + target_air.merge(removed) // - volume pump - // **Works** @@ -165,7 +168,7 @@ direction = SOURCE_TO_TARGET target_pressure = min(PUMP_MAX_VOLUME,abs(new_amount)) -/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air) +/obj/item/integrated_circuit/atmospherics/pump/volume/move_gas(datum/gas_mixture/source_air, datum/gas_mixture/target_air, obj/item/tank/snowflake) // No moles = nothing to pump if(source_air.total_moles() <= 0) return @@ -182,7 +185,10 @@ var/datum/gas_mixture/removed = source_air.remove_ratio(transfer_ratio * PUMP_EFFICIENCY) - target_air.merge(removed) + if(istype(snowflake)) + snowflake.assume_air(removed) + else + target_air.merge(removed) // - gas vent - // **works** @@ -379,9 +385,20 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() removed.set_moles(filtered_gas, 0) //Check if the pressure is high enough to put stuff in filtered, or else just put it back in the source - var/datum/gas_mixture/target = (filtered_air.return_pressure() < target_pressure ? filtered_air : source_air) - target.merge(filtered_out) - contaminated_air.merge(removed) + if(filtered_air.return_pressure() < target_pressure) + if(istype(filtered, /obj/item/tank)) + filtered.assume_air(filtered_out) + else + filtered_air.merge(filtered_out) + else + if(istype(source, /obj/item/tank)) + source.assume_air(filtered_out) + else + source_air.merge(filtered_out) + if(istype(contaminants, /obj/item/tank)) + contaminants.assume_air(removed) + else + contaminated_air.merge(removed) /obj/item/integrated_circuit/atmospherics/pump/filter/Initialize() @@ -449,10 +466,18 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() if(transfer_moles <= 0) return + var/snowflakecheck = istype(gas_output, /obj/item/tank) + var/datum/gas_mixture/mix = source_1_gases.remove(transfer_moles * gas_percentage) - output_gases.merge(mix) + if(snowflakecheck) + gas_output.assume_air(mix) + else + output_gases.merge(mix) mix = source_2_gases.remove(transfer_moles * (1-gas_percentage)) - output_gases.merge(mix) + if(snowflakecheck) + gas_output.assume_air(mix) + else + output_gases.merge(mix) // - integrated tank - // **works** diff --git a/code/modules/keybindings/keybind/human.dm b/code/modules/keybindings/keybind/human.dm index 43f5653472..8ae6ac1e94 100644 --- a/code/modules/keybindings/keybind/human.dm +++ b/code/modules/keybindings/keybind/human.dm @@ -5,17 +5,6 @@ /datum/keybinding/human/can_use(client/user) return ishuman(user.mob) -/datum/keybinding/human/quick_equip - hotkey_keys = list("E") - name = "quick_equip" - full_name = "Quick Equip" - description = "Quickly puts an item in the best slot available" - -/datum/keybinding/human/quick_equip/down(client/user) - var/mob/living/carbon/human/H = user.mob - H.quick_equip() - return TRUE - /datum/keybinding/human/quick_equipbelt hotkey_keys = list("ShiftE") name = "quick_equipbelt" diff --git a/code/modules/keybindings/keybind/living.dm b/code/modules/keybindings/keybind/living.dm index b5921b378a..f76c86691f 100644 --- a/code/modules/keybindings/keybind/living.dm +++ b/code/modules/keybindings/keybind/living.dm @@ -5,6 +5,17 @@ /datum/keybinding/living/can_use(client/user) return isliving(user.mob) +/datum/keybinding/living/quick_equip + hotkey_keys = list("E") + name = "quick_equip" + full_name = "Quick Equip" + description = "Quickly puts an item in the best slot available" + +/datum/keybinding/living/quick_equip/down(client/user) + var/mob/living/carbon/human/H = user.mob + H.quick_equip() + return TRUE + /datum/keybinding/living/resist hotkey_keys = list("B") name = "resist" diff --git a/code/modules/keybindings/keybind/robot.dm b/code/modules/keybindings/keybind/robot.dm index 4f249cf243..b9f6ce83eb 100644 --- a/code/modules/keybindings/keybind/robot.dm +++ b/code/modules/keybindings/keybind/robot.dm @@ -59,17 +59,3 @@ var/mob/living/silicon/robot/R = user.mob R.uneq_active() return TRUE - -/datum/keybinding/robot/drone/can_use(client/user) - return isdrone(user.mob) - -/datum/keybinding/robot/drone/quick_equip_drone // QOL: Drone quickequip - hotkey_keys = list("E") - name = "quick_equip_drone" - full_name = "Quick Equip (Drone)" - description = "Quickly puts an item in the best slot available" - -/datum/keybinding/robot/drone/quick_equip_drone/down(client/user) - var/mob/living/simple_animal/drone/D = user.mob - D.quick_equip() - return TRUE \ No newline at end of file diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 30a933db39..462e283300 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -202,7 +202,7 @@ var/obj/item/reagent_containers/food/snacks/donkpocket/warm/W = new(src) load(W) if(prob(50)) - var/obj/item/storage/box/dice/D = new(src) + var/obj/item/storage/dice/D = new(src) load(D) else var/obj/item/instrument/guitar/G = new(src) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 429dc98e8a..2ca4d5fd2e 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -109,9 +109,12 @@ GLOBAL_LIST(labor_sheet_values) qdel(src) /obj/machinery/mineral/labor_claim_console/emag_act(mob/user) - if(!(obj_flags & EMAGGED)) - obj_flags |= EMAGGED - to_chat(user, "PZZTTPFFFT") + . = ..() + if((obj_flags & EMAGGED)) + return + obj_flags |= EMAGGED + to_chat(user, "PZZTTPFFFT") + return TRUE /**********************Prisoner Collection Unit**************************/ diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index a967fea75a..0953ea138d 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -760,6 +760,7 @@ /obj/item/melee/transforming/cleaving_saw name = "cleaving saw" desc = "This saw, effective at drawing the blood of beasts, transforms into a long cleaver that makes use of centrifugal force." + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF force = 12 force_on = 20 //force when active throwforce = 20 @@ -1177,6 +1178,7 @@ /obj/item/gun/ballistic/revolver/doublebarrel/super name = "super combat shotgun" desc = "From the belly of the beast - or rather, demon. Twice as lethal as a less-than-super shotgun, but a tad bulkier." + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF icon_state = "heckgun" slot_flags = null mag_type = /obj/item/ammo_box/magazine/internal/shot/dual/heck @@ -1207,6 +1209,7 @@ /obj/item/hierophant_club name = "hierophant club" desc = "The strange technology of this large club allows various nigh-magical feats. It used to beat you, but now you can set the beat." + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF icon_state = "hierophant_club_ready_beacon" item_state = "hierophant_club_ready_beacon" icon = 'icons/obj/lavaland/artefacts.dmi' diff --git a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm index d9e2de1525..f7b73c3b30 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/tails.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/tails.dm @@ -651,11 +651,11 @@ name = "Fennec" icon_state = "fennec" -/datum/sprite_accessory/tails/mam_tails/human/fish +/datum/sprite_accessory/tails/mam_tails/fish name = "Fish" icon_state = "fish" -/datum/sprite_accessory/tails_animated/mam_tails_animated/human/fish +/datum/sprite_accessory/tails_animated/mam_tails_animated/fish name = "Fish" icon_state = "fish" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 710d49c075..301a9bd7c8 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -212,6 +212,7 @@ // called when something steps onto a human // this could be made more general, but for now just handle mulebot /mob/living/carbon/human/Crossed(atom/movable/AM) + ..() var/mob/living/simple_animal/bot/mulebot/MB = AM if(istype(MB)) MB.RunOver(src) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 76a9c00ed1..10295a7de4 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -1,4 +1,6 @@ /mob/living/carbon/human/getarmor(def_zone, type) + if(HAS_TRAIT(src, TRAIT_ARMOR_BROKEN)) //trait that makes it act as if you have no armor at all, you take natural damage from all sources + return 0 var/armorval = 0 var/organnum = 0 @@ -18,7 +20,6 @@ organnum++ return (armorval/max(organnum, 1)) - /mob/living/carbon/human/proc/checkarmor(obj/item/bodypart/def_zone, d_type) if(!d_type || !def_zone) return 0 diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 126d4401e0..8b78a9212d 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -668,7 +668,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.remove_overlay(BODY_FRONT_LAYER) H.remove_overlay(HORNS_LAYER) - if(!mutant_bodyparts) + if(!length(mutant_bodyparts)) return var/tauric = mutant_bodyparts["taur"] && H.dna.features["taur"] && H.dna.features["taur"] != "None" diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index a87c92bdb9..ecac5fda10 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -714,18 +714,25 @@ return FALSE /datum/action/innate/slime_puddle/Activate() + var/mob/living/carbon/human/H = owner + //if they have anything stuck to their hands, we immediately say 'no' and return + for(var/obj/item/I in H.held_items) + if(HAS_TRAIT(I, TRAIT_NODROP)) + to_chat(owner, "There's something stuck to your hand, stopping you from transforming!") + return if(isjellyperson(owner) && IsAvailable()) transforming = TRUE UpdateButtonIcon() - var/mob/living/carbon/human/H = owner var/mutcolor = "#" + H.dna.features["mcolor"] if(!is_puddle) - if(CHECK_MOBILITY(H, MOBILITY_USE)) - is_puddle = TRUE - owner.cut_overlays() + if(CHECK_MOBILITY(H, MOBILITY_USE)) //if we can use items, we can turn into a puddle + is_puddle = TRUE //so we know which transformation to use when its used + owner.cut_overlays() //we dont show our normal sprite, we show a puddle sprite var/obj/effect/puddle_effect = new puddle_into_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor - H.Stun(in_transformation_duration, ignore_canstun = TRUE) + H.Stun(in_transformation_duration, ignore_canstun = TRUE) //cant move while transforming + + //series of traits that make up the puddle behaviour ADD_TRAIT(H, TRAIT_PARALYSIS_L_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_PARALYSIS_R_ARM, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOPICKUP, SLIMEPUDDLE_TRAIT) @@ -733,19 +740,30 @@ ADD_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) ADD_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + ADD_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) + H.update_disabled_bodyparts(silent = TRUE) //silently update arms to be paralysed + H.add_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) - H.update_disabled_bodyparts(silent = TRUE) + H.layer -= 1 //go one layer down so people go over you - ENABLE_BITFIELD(H.pass_flags, PASSMOB) - squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) - sleep(in_transformation_duration) + ENABLE_BITFIELD(H.pass_flags, PASSMOB) //this actually lets people pass over you + squeak = H.AddComponent(/datum/component/squeak, custom_sounds = list('sound/effects/blobattack.ogg')) //blorble noise when people step on you + + //if the user is a changeling, retract their sting + H.unset_sting() + + sleep(in_transformation_duration) //wait for animation to end + + //set the puddle overlay up var/mutable_appearance/puddle_overlay = mutable_appearance(icon = puddle_icon, icon_state = puddle_state) puddle_overlay.color = mutcolor tracked_overlay = puddle_overlay owner.add_overlay(puddle_overlay) + transforming = FALSE UpdateButtonIcon() else + //like the above, but reverse everything done! owner.cut_overlay(tracked_overlay) var/obj/effect/puddle_effect = new puddle_from_effect(get_turf(owner), owner.dir) puddle_effect.color = mutcolor @@ -758,6 +776,7 @@ REMOVE_TRAIT(H, TRAIT_SPRINT_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_COMBAT_MODE_LOCKED, SLIMEPUDDLE_TRAIT) REMOVE_TRAIT(H, TRAIT_MOBILITY_NOREST, SLIMEPUDDLE_TRAIT) + REMOVE_TRAIT(H, TRAIT_ARMOR_BROKEN, SLIMEPUDDLE_TRAIT) H.update_disabled_bodyparts(silent = TRUE) H.remove_movespeed_modifier(/datum/movespeed_modifier/slime_puddle) H.layer += 1 //go one layer back above! diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index 676248c463..558fdc6594 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -15,8 +15,13 @@ skinned_type = /obj/item/stack/sheet/animalhide/human var/info_text = "You are a Vampire. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability." species_category = SPECIES_CATEGORY_UNDEAD + var/batform_enabled = TRUE -/datum/species/vampire/check_roundstart_eligible() +/datum/species/vampire/roundstart + id = SPECIES_VAMPIRE_WEAK + batform_enabled = FALSE + +/datum/species/vampire/roundstart/check_roundstart_eligible() if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) return TRUE return FALSE @@ -27,8 +32,9 @@ if(!C.dna.skin_tone_override) C.skin_tone = "albino" C.update_body(0) - var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new - C.AddSpell(B) + if(batform_enabled) + var/obj/effect/proc_holder/spell/targeted/shapeshift/bat/B = new + C.AddSpell(B) /datum/species/vampire/on_species_loss(mob/living/carbon/C) . = ..() diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 50801e1c0d..96dab9e95d 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -14,10 +14,29 @@ return legcuffed return null -/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1) +/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1, critical = FALSE) for(var/slot in slots) if(equip_to_slot_if_possible(I, slots[slot], qdel_on_fail = 0, disable_warning = TRUE)) return slot + if(critical) //it is CRITICAL they get this item, no matter what + //do they have a backpack? + var/obj/item/backpack = get_item_by_slot(SLOT_BACK) + if(!backpack) + //nothing on their back + backpack = new /obj/item/storage/backpack(get_turf(src)) + if(equip_to_slot(backpack, SLOT_BACK)) //worst-case-scenario, something that shouldnt wear a backpack gets one + I.forceMove(backpack) + return SLOT_BACK + else if(istype(backpack) && SEND_SIGNAL(backpack, COMSIG_CONTAINS_STORAGE)) + //place it in here, regardless of storage capacity + I.forceMove(backpack) + return SLOT_BACK + else + //this should NEVER happen, but if it does, report it with the appropriate information + var/conclusion = qdel_on_fail ? "deleted" : "not moved, staying at current position [I.x], [I.y], [I.z]" + message_admins("User [src] failed to get item of critical importance: [I]. Result: item is [conclusion]") + //it's not dropped at their turf as this is generally un-safe for midround antags and we don't know their status + if(qdel_on_fail) qdel(I) return null diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 4ee52a08a6..ce8bbc5dab 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -443,6 +443,7 @@ key = "me" key_third_person = "custom" message = null + emote_type = EMOTE_BOTH /datum/emote/living/custom/proc/check_invalid(mob/user, input) if(stop_bad_mime.Find(input, 1, 1)) @@ -462,24 +463,12 @@ else if(!params) var/custom_emote = stripped_multiline_input_or_reflect(user, "Choose an emote to display.", "Custom Emote", null, MAX_MESSAGE_LEN) if(custom_emote && !check_invalid(user, custom_emote)) - var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable") - switch(type) - if("Visible") - emote_type = EMOTE_VISIBLE - if("Hearable") - emote_type = EMOTE_AUDIBLE - else - alert("Unable to use this emote, must be either hearable or visible.") - return message = custom_emote else message = params - if(type_override) - emote_type = type_override message = user.say_emphasis(message) . = ..() message = null - emote_type = EMOTE_VISIBLE /datum/emote/living/custom/replace_pronoun(mob/user, message) return message diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index f0ab3fba4c..477483862b 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -87,7 +87,7 @@ Difficulty: Medium return FALSE return ..() -/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message) +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, list/ignored_mobs, mob/target, target_message, omni = FALSE) if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit return return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 3c6857b54e..174883650d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -263,6 +263,7 @@ SHITCODE AHEAD. BE ADVISED. Also comment extravaganza /obj/item/staff/storm name = "staff of storms" desc = "An ancient staff retrieved from the remains of Legion. The wind stirs as you move it." + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF icon_state = "staffofstorms" item_state = "staffofstorms" icon = 'icons/obj/guns/magic.dmi' diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index ab2556abb5..3416a8b337 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -127,8 +127,9 @@ * * ignored_mobs (optional) doesn't show any message to any given mob in the list. * * target (optional) is the other mob involved with the visible message. For example, the attacker in many combat messages. * * target_message (optional) is what the target mob will see e.g. "[src] does something to you!" + * * omni (optional) if TRUE, will show to users no matter what. */ -/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message) +/atom/proc/visible_message(message, self_message, blind_message, vision_distance = DEFAULT_MESSAGE_RANGE, ignored_mobs, mob/target, target_message, omni = FALSE) var/turf/T = get_turf(src) if(!T) return @@ -139,20 +140,26 @@ if(target_message && target && istype(target) && target.client) hearers -= target - //This entire if/else chain could be in two lines but isn't for readibilties sake. - var/msg = target_message - if(target.see_invisible[user.say_emphasis(message)]" - if(emote_type == EMOTE_AUDIBLE) - user.audible_message(message=message,hearing_distance=1, ignored_mobs = GLOB.dead_mob_list) - else - user.visible_message(message=message,self_message=message,vision_distance=1, ignored_mobs = GLOB.dead_mob_list) + user.visible_message(message = message, self_message = message, vision_distance = 1, ignored_mobs = GLOB.dead_mob_list, omni = TRUE) ///////////////// VERB CODE /mob/living/verb/subtle() diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm index 946d93e96b..f5a599f940 100644 --- a/code/modules/movespeed/modifiers/innate.dm +++ b/code/modules/movespeed/modifiers/innate.dm @@ -20,5 +20,6 @@ flags = IGNORE_NOSLOW /datum/movespeed_modifier/slime_puddle - multiplicative_slowdown = 2 + multiplicative_slowdown = 4.5 flags = IGNORE_NOSLOW + variable = TRUE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 1a96f36ccd..7f7c02f457 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -111,6 +111,7 @@ var/obj/machinery/computer/apc_control/remote_control = null var/mob/living/carbon/hijacker var/hijackerlast = TRUE + var/being_hijacked = FALSE /obj/machinery/power/apc/unlocked locked = FALSE @@ -902,7 +903,7 @@ if(H && !H.stealthmode && H.toggled) abilitiesavail = TRUE var/list/data = list( - "locked" = locked, + "locked" = locked && !(integration_cog && is_servant_of_ratvar(user)) && !area.hasSiliconAccessInArea(user, PRIVILEDGES_SILICON|PRIVILEDGES_DRONE), "failTime" = failure_timer, "isOperating" = operating, "externalPower" = main_status, @@ -1119,10 +1120,14 @@ /obj/machinery/power/apc/proc/hijack(mob/living/L) if (!istype(L)) return + if(being_hijacked) + to_chat(L, "This APC is already being hijacked!") + return if (hijacker && hijacker != L) var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack) to_chat(L, "Someone already has control of this APC. Beginning counter-hijack.") H.hijacking = TRUE + being_hijacked = TRUE if (do_after(L,20 SECONDS,target=src)) hijacker.toggleSiliconAccessArea(area) if (L.toggleSiliconAccessArea(area)) @@ -1130,23 +1135,28 @@ update_icon() set_hijacked_lighting() H.hijacking = FALSE + being_hijacked = FALSE return else to_chat(L, "Aborting.") H.hijacking = FALSE + being_hijacked = FALSE return to_chat(L, "Beginning hijack of APC.") var/obj/item/implant/hijack/H = L.getImplant(/obj/item/implant/hijack) H.hijacking = TRUE + being_hijacked = TRUE if (do_after(L,H.stealthmode ? 12 SECONDS : 5 SECONDS,target=src)) if (L.toggleSiliconAccessArea(area)) hijacker = L update_icon() set_hijacked_lighting() H.hijacking = FALSE + being_hijacked = FALSE else to_chat(L, "Aborting.") H.hijacking = FALSE + being_hijacked = FALSE return /obj/machinery/power/apc/proc/malfhack(mob/living/silicon/ai/malf) diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 0026a612e0..37b23402f1 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -329,7 +329,7 @@ /obj/item/gun/ballistic/revolver/doublebarrel/improvised name = "improvised shotgun" - desc = "A shoddy break-action breechloaded shotgun. Its lacklustre construction shows in its lesser effectiveness." + desc = "A shoddy break-action breechloaded shotgun. Less ammo-efficient than an actual shotgun, but still packs a punch." icon_state = "ishotgun" item_state = "shotgun" w_class = WEIGHT_CLASS_BULKY @@ -339,7 +339,6 @@ mag_type = /obj/item/ammo_box/magazine/internal/shot/improvised sawn_desc = "I'm just here for the gasoline." unique_reskin = null - projectile_damage_multiplier = 0.9 var/slung = FALSE /obj/item/gun/ballistic/revolver/doublebarrel/improvised/attackby(obj/item/A, mob/user, params) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index f3d299cce5..0d91e37ca0 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -970,7 +970,7 @@ M.emote("gasp") log_combat(M, M, "revived", src) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) @@ -1321,7 +1321,7 @@ pH = 11 value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already. - + //Earthsblood is still a wonderdrug. Just... don't expect to be able to mutate something that makes plants so healthy. /datum/reagent/medicine/earthsblood/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) . = ..() @@ -1335,7 +1335,7 @@ myseed.adjust_yield(round(chems.get_reagent_amount(src.type) * 1)) myseed.adjust_endurance(round(chems.get_reagent_amount(src.type) * 0.5)) myseed.adjust_production(-round(chems.get_reagent_amount(src.type) * 0.5)) - + /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, FALSE) M.adjustFireLoss(-3 * REM, FALSE) diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 11518b236f..3d54c7130c 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -132,7 +132,7 @@ lich.real_name = mind.name mind.transfer_to(lich) mind.grab_ghost(force=TRUE) - lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton) + lich.hardset_dna(null,null,null,lich.real_name,null, new /datum/species/skeleton/space) to_chat(lich, "Your bones clatter and shudder as you are pulled back into this world!") var/turf/body_turf = get_turf(old_body) lich.DefaultCombatKnockdown(200 + 200*resurrections) diff --git a/code/modules/surgery/advanced/revival.dm b/code/modules/surgery/advanced/revival.dm index c61ee330e6..0b864958a0 100644 --- a/code/modules/surgery/advanced/revival.dm +++ b/code/modules/surgery/advanced/revival.dm @@ -70,7 +70,7 @@ if(O.organ_flags & ORGAN_FAILING) O.applyOrganDamage(-5) var/list/policies = CONFIG_GET(keyed_list/policyconfig) - var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) + var/timelimit = CONFIG_GET(number/defib_cmd_time_limit) * 10 //the config is in seconds, not deciseconds var/late = timelimit && (tplus > timelimit) var/policy = late? policies[POLICYCONFIG_ON_DEFIB_LATE] : policies[POLICYCONFIG_ON_DEFIB_INTACT] if(policy) diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index bd821d80e3..462d4b5cb5 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -181,6 +181,7 @@ /obj/item/clothing/under/pants/mustangjeans = 3, /obj/item/clothing/neck/necklace/dope = 5, /obj/item/clothing/suit/jacket/letterman_nanotrasen = 5, + /obj/item/clothing/under/misc/corporateuniform = 5, /obj/item/clothing/suit/hooded/wintercoat/polychromic = 5) refill_canister = /obj/item/vending_refill/clothing default_price = PRICE_CHEAP diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index 7fd8246dd6..6c29b412e7 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -4,7 +4,7 @@ product_ads = "Escape to a fantasy world!;Fuel your gambling addiction!;Ruin your friendships!;Roll for initiative!;Elves and dwarves!;Paranoid computers!;Totally not satanic!;Fun times forever!" icon_state = "games" products = list(/obj/item/toy/cards/deck = 5, - /obj/item/storage/box/dice = 10, + /obj/item/storage/dice = 10, /obj/item/toy/cards/deck/cas = 3, /obj/item/toy/cards/deck/cas/black = 3, /obj/item/toy/cards/deck/unum = 3) diff --git a/config/config.txt b/config/config.txt index a550e6bf8a..7e2ff5da41 100644 --- a/config/config.txt +++ b/config/config.txt @@ -408,7 +408,7 @@ ALLOW_MAP_VOTING 1 ## APPROVAL (can vote for as many as you want), I ## IRV (vote by ranked choice, winner determined by instant runoff algorithm) ## SCORE (give individual rankings of each choice, winner determined by majority judgement algorithm) -MAP_VOTE_TYPE SCORE +MAP_VOTE_TYPE APPROVAL ## Map rotate chance delta ## This is the chance of map rotation factored to the round length. @@ -519,7 +519,7 @@ DEFAULT_VIEW 21x15 ### NOTE FOR LINUX HOSTS: This requires manual setup of iptables. Beware that improper configuration of this can and will irreversibly fuck up a server, so please don't tinker with it if you don't know what you're doing. ## Enabled #FAIL2TOPIC_ENABLED -## Minimum wait time in deciseconds between valid requests +## Minimum wait time in deciseconds between valid requests FAIL2TOPIC_RATE_LIMIT 10 ## Number of requests after breaching rate limit that triggers a ban FAIL2TOPIC_MAX_FAILS 5 diff --git a/html/changelogs/AutoChangeLog-pr-13567.yml b/html/changelogs/AutoChangeLog-pr-13567.yml new file mode 100644 index 0000000000..d51db8e3b8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13567.yml @@ -0,0 +1,8 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "changeling stings retract upon turning into a slime puddle" + - tweak: "you cannot transform into a slime puddle with a no drop item in your hands" + - tweak: "slime puddles are now transparent and their colour looks more natural in comparison to the user" + - tweak: "slime puddles are now even slower" + - tweak: "slime puddles now get no protection from worn clothing" diff --git a/html/changelogs/AutoChangeLog-pr-13592.yml b/html/changelogs/AutoChangeLog-pr-13592.yml new file mode 100644 index 0000000000..76e12e8c89 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13592.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - rscadd: "Stat panel UI for ranked choice votes" diff --git a/html/changelogs/AutoChangeLog-pr-13593.yml b/html/changelogs/AutoChangeLog-pr-13593.yml new file mode 100644 index 0000000000..08310f6013 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13593.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - code_imp: "Vote system #defines are now strings" diff --git a/html/changelogs/AutoChangeLog-pr-13601.yml b/html/changelogs/AutoChangeLog-pr-13601.yml new file mode 100644 index 0000000000..0cfb64b48b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13601.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - tweak: "antag items are now of critical importance and wont fail to be placed on the character" diff --git a/html/changelogs/AutoChangeLog-pr-13603.yml b/html/changelogs/AutoChangeLog-pr-13603.yml new file mode 100644 index 0000000000..4fcff30da0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13603.yml @@ -0,0 +1,5 @@ +author: "kappa-sama" +delete-after: True +changes: + - tweak: "ishotgun crafting recipe no longer requires plasteel and is slightly more convenient" + - balance: "ishotgun does 45 damage now instead of 40.5" diff --git a/html/changelogs/AutoChangeLog-pr-13605.yml b/html/changelogs/AutoChangeLog-pr-13605.yml new file mode 100644 index 0000000000..707de17870 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13605.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - rscadd: "the corporate unifoms can now be gotton in the clothing mate vender" diff --git a/html/changelogs/AutoChangeLog-pr-13607.yml b/html/changelogs/AutoChangeLog-pr-13607.yml new file mode 100644 index 0000000000..0ed47b1d44 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13607.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "polychromic maid outfit" diff --git a/html/changelogs/AutoChangeLog-pr-13612.yml b/html/changelogs/AutoChangeLog-pr-13612.yml new file mode 100644 index 0000000000..9a67ec5aa3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13612.yml @@ -0,0 +1,4 @@ +author: "MrJWhit" +delete-after: True +changes: + - rscadd: "Expanded space hermit base" diff --git a/html/changelogs/AutoChangeLog-pr-13616.yml b/html/changelogs/AutoChangeLog-pr-13616.yml new file mode 100644 index 0000000000..3032d0331f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13616.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "You can access the mime / clown mask skins radial menu once again." diff --git a/html/changelogs/AutoChangeLog-pr-13626.yml b/html/changelogs/AutoChangeLog-pr-13626.yml new file mode 100644 index 0000000000..fa5331e005 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13626.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - balance: "MEGAFAUNA DROPS ARE LAVAPROOF" diff --git a/html/changelogs/AutoChangeLog-pr-13627.yml b/html/changelogs/AutoChangeLog-pr-13627.yml new file mode 100644 index 0000000000..087cbde3ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13627.yml @@ -0,0 +1,8 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Dice bags no longer act like cardboard boxes." + - bugfix: "Abductors should be no longer mute." + - bugfix: "Item action buttons should now properly show the item current overlays, most times." + - bugfix: "The blackbox should now go into your hand slot when pried out, rather than tumbling on the ground everytime." + - tweak: "The Quick Equip hotkey is now usable by all living mobs (so long they have hands and equipment slots)" diff --git a/html/changelogs/AutoChangeLog-pr-13629.yml b/html/changelogs/AutoChangeLog-pr-13629.yml new file mode 100644 index 0000000000..954f6972ec --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13629.yml @@ -0,0 +1,4 @@ +author: "silicons" +delete-after: True +changes: + - rscdel: "anomalies no longer spawn in walls" diff --git a/html/changelogs/AutoChangeLog-pr-13632.yml b/html/changelogs/AutoChangeLog-pr-13632.yml new file mode 100644 index 0000000000..bf478ec97c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13632.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "time for memory loss message to show up when being revived is now correctly 300 seconds, instead of 30" diff --git a/html/changelogs/AutoChangeLog-pr-13633.yml b/html/changelogs/AutoChangeLog-pr-13633.yml new file mode 100644 index 0000000000..d9246cfff6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13633.yml @@ -0,0 +1,4 @@ +author: "ArchieBeepBoop" +delete-after: True +changes: + - bugfix: "Outlet Injector Mapping Asset Layer Fix" diff --git a/html/changelogs/AutoChangeLog-pr-13636.yml b/html/changelogs/AutoChangeLog-pr-13636.yml new file mode 100644 index 0000000000..75124f759f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13636.yml @@ -0,0 +1,4 @@ +author: "SiliconMain" +delete-after: True +changes: + - tweak: "Engi department has gas masks in loadout" diff --git a/html/changelogs/AutoChangeLog-pr-13647.yml b/html/changelogs/AutoChangeLog-pr-13647.yml new file mode 100644 index 0000000000..b3211ee759 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13647.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "jacqueline spawns on boxstation" diff --git a/html/changelogs/AutoChangeLog-pr-13648.yml b/html/changelogs/AutoChangeLog-pr-13648.yml new file mode 100644 index 0000000000..4148230385 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-13648.yml @@ -0,0 +1,13 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "The 'Your body is in a cloner' notification works again" + - bugfix: "Hijack implants should work properly again (or, at least better)" + - bugfix: "Liches are now good skeletons again instead of weak ones" + - bugfix: "The piratepad control cannot be destroyed again." + - bugfix: "Pirates have received new supplies of jetpacks instead of useless oxygen tanks" + - bugfix: "Ratvarian AIs are once again able to show their linked borgs Ratvar's light" + - bugfix: "Hijackers are once again unable to detonate borgs without being adjacent to the console" + - bugfix: "Automated annoucement systems and gulag ore consoles no longer waste emag charges" + - bugfix: "Automated announcement systems once again can be remote controlled by non-AIs with silicon access" + - bugfix: "APCs being hijacked multiple times at once is no longer possible, preventing some issues" diff --git a/icons/mob/clothing/uniform.dmi b/icons/mob/clothing/uniform.dmi index ffbb8b8b5b..7bd7de82c7 100644 Binary files a/icons/mob/clothing/uniform.dmi and b/icons/mob/clothing/uniform.dmi differ diff --git a/icons/mob/mob.dmi b/icons/mob/mob.dmi index 10b733bae4..3d1cbfa273 100644 Binary files a/icons/mob/mob.dmi and b/icons/mob/mob.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index a566a05591..17e52b60c9 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/hands.dm b/modular_citadel/code/modules/client/loadout/hands.dm index db57fb466b..eb496ed78c 100644 --- a/modular_citadel/code/modules/client/loadout/hands.dm +++ b/modular_citadel/code/modules/client/loadout/hands.dm @@ -12,7 +12,7 @@ /datum/gear/hands/dice name = "Dice bag" - path = /obj/item/storage/box/dice + path = /obj/item/storage/dice /datum/gear/hands/eightball name = "Magic eightball" diff --git a/modular_citadel/code/modules/client/loadout/mask.dm b/modular_citadel/code/modules/client/loadout/mask.dm index 0d7e32552e..9468c9303d 100644 --- a/modular_citadel/code/modules/client/loadout/mask.dm +++ b/modular_citadel/code/modules/client/loadout/mask.dm @@ -14,3 +14,9 @@ name = "Joy mask" path = /obj/item/clothing/mask/joy cost = 3 + +/datum/gear/mask/gas + name = "Gas Mask" + path = /obj/item/clothing/mask/gas + cost = 2 + restricted_roles = list("Chief Engineer", "Atmospheric Technician", "Station Engineer") //*shrug diff --git a/modular_citadel/code/modules/client/loadout/uniform.dm b/modular_citadel/code/modules/client/loadout/uniform.dm index 45d8fc1ef1..76389e2015 100644 --- a/modular_citadel/code/modules/client/loadout/uniform.dm +++ b/modular_citadel/code/modules/client/loadout/uniform.dm @@ -44,6 +44,10 @@ name = "Maid costume" path = /obj/item/clothing/under/costume/maid +/datum/gear/uniform/maidcostume/polychromic + name = "Polychromic maid costume" + path = /obj/item/clothing/under/rank/civilian/janitor/maid/polychromic + /datum/gear/uniform/mailmanuniform name = "Mailman's jumpsuit" path = /obj/item/clothing/under/misc/mailman diff --git a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js index 746cb7ad9c..1520b4093b 100644 --- a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js +++ b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js @@ -8,6 +8,7 @@ export const RoboticsControlConsole = (props, context) => { const [tab, setTab] = useSharedState(context, 'tab', 1); const { can_hack, + can_convert, cyborgs = [], drones = [], } = data; @@ -34,7 +35,9 @@ export const RoboticsControlConsole = (props, context) => { {tab === 1 && ( - + )} {tab === 2 && ( @@ -45,7 +48,7 @@ export const RoboticsControlConsole = (props, context) => { }; const Cyborgs = (props, context) => { - const { cyborgs, can_hack } = props; + const { cyborgs, can_hack, can_convert } = props; const { act, data } = useBackend(context); if (!cyborgs.length) { return ( @@ -70,6 +73,15 @@ const Cyborgs = (props, context) => { ref: cyborg.ref, })} /> )} + {!!can_convert && !cyborg.servant && ( +