diff --git a/.github/RUNNING_A_SERVER.md b/.github/RUNNING_A_SERVER.md index 7ee48e872cd1..9a0c19a7e530 100644 --- a/.github/RUNNING_A_SERVER.md +++ b/.github/RUNNING_A_SERVER.md @@ -4,9 +4,9 @@ First-time installation should be fairly straightforward. First, you'll need BYOND installed. You can get it from https://www.byond.com/download. Once you've done that, extract the game files to wherever you want to keep them. This is a sourcecode-only release, so the next step is to compile the server files. -Open shiptest.dme by double-clicking it, open the Build menu, and click -compile. This'll take a little while, and if everything's done right you'll get -a message like this: + +Double-click `BUILD.bat` in the root directory of the source code. This'll take +a little while, and if everything's done right you'll get a message like this: ``` saving shiptest.dmb (DEBUG mode) @@ -17,14 +17,6 @@ If you see any errors or warnings, something has gone wrong - possibly a corrupt download or the files extracted wrong. If problems persist, ask for assistance in [the discord](https://shiptest.net/discord) -Once that's done, open up the config folder. You'll want to edit config.txt to -set the probabilities for different gamemodes in Secret and to set your server -location so that all your players don't get disconnected at the end of each -round. It's recommended you don't turn on the gamemodes with probability 0, -except Extended, as they have various issues and aren't currently being tested, -so they may have unknown and bizarre bugs. Extended is essentially no mode, and -isn't in the Secret rotation by default as it's just not very fun. - You'll also want to edit config/admins.txt to remove the default admins and add your own. "Game Master" is the highest level of access, and probably the one you'll want to use for now. You can set up your own ranks and find out more in @@ -43,9 +35,15 @@ Windows DLL is included in this repository, but Linux users will need to build and install it themselves. Directions can be found at the [rust-g repo](https://github.com/tgstation/rust-g). +**Unlike other servers,** Shiptest also uses an external library called Auxmos, which +needs to be compiled on linux systems. Like with rust-g, Windows hosts should be fine, as the DLL +it needs is shipped with the repository. Please download and install [auxmos](https://github.com/Putnam3145/auxmos) +using the instructions provided if you're running a linux system. +`tools/ci/build_auxmos.sh` can also be used if you're in a rush. + Finally, to start the server, run Dream Daemon and enter the path to your compiled shiptest.dmb file. Make sure to set the port to the one you -specified in the config.txt, and set the Security box to 'Safe'. Then press GO +specified in the config.txt, and set the Security box to 'Trusted'. Then press GO and the server should start up and be ready to join. It is also recommended that you set up the SQL backend (see below). @@ -68,9 +66,14 @@ https://github.com/tgstation/tgstation-server ## SQL SETUP -The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not supported but Mariadb is a drop in replacement for mysql. SQL is required for the library, stats tracking, admin notes, and job-only bans, among other features, mostly related to server administration. Your server details go in /config/dbconfig.txt, and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql depending on if you want table prefixes. More detailed setup instructions are located here: https://shiptest.net/wiki/Downloading_the_source_code#Setting_up_the_database +The SQL backend requires a Mariadb server running 10.2 or later. Mysql is not +supported, but Mariadb is a drop in replacement for mysql. SQL is required for the +library, stats tracking, admin notes, and job-only bans, among other features, +mostly related to server administration. Your server details go in /config/dbconfig.txt, +and the SQL schema is in /SQL/tgstation_schema.sql and /SQL/tgstation_schema_prefix.sql +depending on if you want table prefixes. -If you are hosting a testing server on windows you can use a standalone version of MariaDB pre load with a blank (but initialized) tgdb database. Find them here: https://tgstation13.download/database/ Just unzip and run for a working (but insecure) database server. Includes a zipped copy of the data folder for easy resetting back to square one. +More detailed setup instructions are located here: https://shiptest.net/wiki/Downloading_the_source_code#Setting_up_the_database ## WEB/CDN RESOURCE DELIVERY diff --git a/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm b/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm index 346458a87daf..3bf64a6b03b7 100644 --- a/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_crashed_starwalker.dmm @@ -89,10 +89,8 @@ dir = 4; color = "#808080" }, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "armory locker"; - pixel_x = 28; req_one_access_txt = "1" }, /obj/item/storage/box/slugshot, @@ -1151,18 +1149,13 @@ "sw" = ( /obj/effect/turf_decal/siding/wood/end, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "grey_wall"; - pixel_x = 28 +/obj/structure/closet/wall/directional/east{ + icon_door = "grey_wall" }, /obj/item/flashlight/lantern{ pixel_x = 8 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = -2 }, @@ -1474,10 +1467,7 @@ "wx" = ( /obj/structure/catwalk/over, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -2015,10 +2005,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/item/skub{ pixel_x = -5; pixel_y = 6 @@ -2124,10 +2111,8 @@ dir = 8; color = "#808080" }, -/obj/structure/closet/wall/red{ - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "armory locker"; - pixel_x = -28; req_one_access_txt = "1" }, /obj/item/storage/belt/military, @@ -2428,10 +2413,7 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "KC" = ( /obj/structure/catwalk/over, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ @@ -2844,10 +2826,8 @@ dir = 4; color = "#A47449" }, -/obj/structure/closet/wall{ - name = "uniform closet"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "uniform closet" }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ @@ -2950,10 +2930,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ruin/beach/starwalker) "SS" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 32 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/item/stack/sticky_tape, /obj/effect/decal/cleanable/dirt, /turf/open/floor/pod, @@ -3103,7 +3080,7 @@ /obj/structure/cable/blue{ icon_state = "2-8" }, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = -7 }, /turf/open/floor/plating{ @@ -3363,10 +3340,8 @@ dir = 6; color = "#808080" }, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "armory locker"; - pixel_x = 28; req_one_access_txt = "1" }, /obj/structure/railing, diff --git a/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm b/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm index bc6875cf81c3..17ad7d93f739 100644 --- a/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_knights_rest.dmm @@ -35,7 +35,7 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "dF" = ( /obj/structure/mineral_door/iron, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 4 }, /area/ruin/beachplanet/knight) @@ -940,7 +940,7 @@ /area/overmap_encounter/planetoid/beachplanet/explored) "ZS" = ( /obj/structure/mineral_door/iron, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 8 }, /area/ruin/beachplanet/knight) diff --git a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm index 091916c6eb33..28a963ed476a 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_surface_corporate_rejects.dmm @@ -321,10 +321,7 @@ /turf/open/floor/vault, /area/ruin/unpowered/corprejectrooms) "io" = ( -/obj/structure/closet/wall/red{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/red/directional/west, /obj/item/keycard/office{ desc = "Only Elite level employees are authorized to handle this keycard. All other employees may face termination if found in possession."; name = "Vault Card"; @@ -1391,9 +1388,7 @@ /turf/open/floor/plating/catwalk_floor, /area/ruin/unpowered/corprejectrooms) "Fa" = ( -/obj/structure/closet/firecloset/wall{ - pixel_x = -27 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/structure/cable/blue{ icon_state = "5-6" }, diff --git a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm index 7f5b18cd2014..a309798f02fe 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_bombed_starport.dmm @@ -457,7 +457,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -509,7 +509,7 @@ /area/overmap_encounter/planetoid/jungle/explored) "dI" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 1 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -1132,7 +1132,7 @@ "hZ" = ( /obj/structure/spider/stickyweb, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium, +/turf/open/floor/plasteel/stairs/mid, /area/overmap_encounter/planetoid/jungle/explored) "ib" = ( /obj/item/stack/sheet/metal, @@ -1759,7 +1759,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 8 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -2732,7 +2732,7 @@ /area/overmap_encounter/planetoid/jungle/explored) "te" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 4 }, /area/overmap_encounter/planetoid/jungle/explored) @@ -3029,7 +3029,7 @@ /area/overmap_encounter/planetoid/jungle/explored) "vd" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/stairs/medium, +/turf/open/floor/plasteel/stairs/mid, /area/overmap_encounter/planetoid/jungle/explored) "ve" = ( /obj/structure/railing{ @@ -3478,7 +3478,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/stairs/medium, +/turf/open/floor/plasteel/stairs/mid, /area/overmap_encounter/planetoid/jungle/explored) "xT" = ( /obj/structure/table/reinforced, diff --git a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index ff730ff082bd..bed82db78338 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -465,10 +465,8 @@ /area/ship/storage) "fv" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/wall/red{ - dir = 1; - name = "Bartender's locker"; - pixel_y = -28 +/obj/structure/closet/wall/red/directional/south{ + name = "Bartender's locker" }, /obj/item/clothing/under/suit/waiter/syndicate, /obj/item/clothing/suit/apron/purple_bartender, @@ -1029,10 +1027,7 @@ /obj/structure/sign/poster/contraband/lusty_xenomorph{ pixel_y = 32 }, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/west, /obj/item/reagent_containers/food/snacks/rationpack, /obj/item/reagent_containers/food/snacks/rationpack, /obj/item/reagent_containers/food/snacks/rationpack, @@ -2857,10 +2852,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/directional/west, /obj/item/reagent_containers/syringe/contraband/bath_salts{ pixel_y = 6; pixel_x = -4 diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index ae980c270cdd..547647fab052 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -443,10 +443,7 @@ /turf/open/floor/plating/dirt/jungle/dark/lit, /area/overmap_encounter/planetoid/jungle/explored) "dv" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -29 - }, +/obj/structure/closet/wall/blue/directional/west, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -485,10 +482,7 @@ /turf/closed/wall/mineral/titanium, /area/ruin/jungle/interceptor/porthall) "dE" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/effect/turf_decal/corner/opaque/orange/border{ dir = 6 }, @@ -581,10 +575,8 @@ }, /obj/item/clothing/suit/armor/vest, /obj/item/gun/energy/disabler, -/obj/structure/closet/wall/red{ - name = "secure locker"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/red/directional/west{ + name = "secure locker" }, /turf/open/floor/plasteel/dark, /area/ruin/jungle/interceptor/security) @@ -999,10 +991,7 @@ /obj/effect/turf_decal/corner/opaque/bottlegreen/border{ dir = 5 }, -/obj/structure/closet/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/wall/directional/east, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, /obj/item/reagent_containers/food/condiment/sugar, @@ -1096,10 +1085,7 @@ /turf/open/floor/wood, /area/ruin/jungle/interceptor/starhall) "im" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -29 - }, +/obj/structure/closet/wall/blue/directional/west, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -1166,10 +1152,7 @@ /obj/effect/turf_decal/corner/opaque/bottlegreen/border{ dir = 8 }, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/interceptor/starhall) @@ -1529,10 +1512,7 @@ /turf/open/floor/plating/dirt/jungle/lit, /area/overmap_encounter/planetoid/jungle/explored) "mU" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -29 - }, +/obj/structure/closet/wall/blue/directional/west, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -1662,7 +1642,7 @@ /turf/open/floor/plating, /area/overmap_encounter/planetoid/jungle/explored) "nZ" = ( -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 1 }, /area/ruin/jungle/interceptor/forehall) @@ -1796,10 +1776,7 @@ /obj/effect/turf_decal/corner_steel_grid{ dir = 10 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/structure/cable/green{ icon_state = "4-9" }, @@ -2124,10 +2101,7 @@ /turf/open/floor/plating/dirt/jungle/lit, /area/overmap_encounter/planetoid/jungle/explored) "rU" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/item/clothing/mask/breath, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/plastic, @@ -3087,10 +3061,8 @@ /obj/effect/turf_decal/corner/transparent/bar/three_quarters{ dir = 4 }, -/obj/structure/closet/wall/red{ - name = "secure locker"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/red/directional/west{ + name = "secure locker" }, /turf/open/floor/plasteel/dark, /area/ruin/jungle/interceptor/security) @@ -3209,10 +3181,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/directional/west, /obj/structure/cable/green{ icon_state = "1-2" }, @@ -3934,10 +3903,8 @@ }, /obj/item/light/bulb/broken, /obj/item/clothing/suit/space/hardsuit/security, -/obj/structure/closet/wall/red{ - name = "secure locker"; - dir = 1; - pixel_y = -28 +/obj/structure/closet/wall/red/directional/south{ + name = "secure locker" }, /turf/open/floor/plating/rust, /area/ruin/jungle/interceptor/security) @@ -4503,9 +4470,7 @@ /obj/structure/cable/orange{ icon_state = "2-8" }, -/obj/structure/closet/wall{ - pixel_y = 29 - }, +/obj/structure/closet/wall/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/effect/decal/cleanable/glass, /obj/machinery/light/small/broken/directional/east, @@ -4891,6 +4856,10 @@ }, /turf/open/floor/plating, /area/ruin/jungle/interceptor/porthall) +"Pi" = ( +/obj/item/circuitboard/machine/ship_gravity, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/jungle/explored) "Pk" = ( /obj/effect/turf_decal/corner/opaque/purple/three_quarters{ icon_state = "borderfloor_white"; @@ -5513,10 +5482,7 @@ /turf/open/floor/plating/rust, /area/ruin/jungle/interceptor/starlaunchertwo) "UD" = ( -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/effect/turf_decal/corner/opaque/orange/border{ dir = 5 }, @@ -6172,7 +6138,7 @@ "YQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/stairs/medium, +/turf/open/floor/plasteel/stairs/mid, /area/ruin/jungle/interceptor/afthall) "YT" = ( /obj/structure/catwalk/over/plated_catwalk/dark, @@ -7954,7 +7920,7 @@ aG SC Mw EJ -wH +Pi sV Mw Bb diff --git a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm index cda541385b56..bc462784bca8 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm @@ -2879,10 +2879,7 @@ /obj/structure/railing{ layer = 3.9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 4; pixel_y = 5 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm index 6cad8f589b78..ac1c579eedb1 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_comm_outpost.dmm @@ -202,9 +202,9 @@ /obj/structure/closet/crate, /obj/item/clothing/gloves/combat, /obj/item/gun/ballistic/automatic/pistol, -/obj/item/ammo_box/magazine/pistolm9mm, -/obj/item/ammo_box/magazine/pistolm9mm, -/obj/item/ammo_box/magazine/pistolm9mm, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/m10mm, /turf/open/floor/carpet/black, /area/ruin/unpowered/syndicate_outpost) "To" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_crashed_pinnance.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_crashed_pinnance.dmm index ae8079063627..32c0fbf31006 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_crashed_pinnance.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_crashed_pinnance.dmm @@ -369,10 +369,8 @@ /turf/open/floor/plasteel/mono/white, /area/ruin/unpowered/crashsite/pinnance) "Gt" = ( -/obj/structure/closet/wall/white{ - dir = 8; - name = "survey gear"; - pixel_x = 30 +/obj/structure/closet/wall/white/directional/east{ + name = "survey gear" }, /obj/item/survey_handheld/elite, /obj/item/survey_handheld/advanced, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_boxsci.dmm b/_maps/RandomRuins/RockRuins/rockplanet_boxsci.dmm index 7af7b29b6de2..1e3c1d7ce293 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_boxsci.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_boxsci.dmm @@ -409,7 +409,7 @@ /turf/open/floor/plasteel, /area/ruin/unpowered) "Fk" = ( -/obj/effect/mine/shrapnel, +/obj/item/mine/pressure/explosive/shrapnel/live, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "FH" = ( diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index fcaa0b579175..155af484d84d 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -511,7 +511,7 @@ /turf/open/floor/plasteel/tech, /area/ruin/rockplanet/nanotrasen) "ix" = ( -/obj/effect/mine/shrapnel/human_only, +/obj/item/mine/pressure/explosive/shrapnel/live, /turf/open/floor/plating/asteroid/rockplanet/lit, /area/overmap_encounter/planetoid/rockplanet/explored) "iE" = ( @@ -760,10 +760,7 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_crash.dmm b/_maps/RandomRuins/RockRuins/rockplanet_crash.dmm index 2d69be814e35..43db217f9dcb 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_crash.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_crash.dmm @@ -906,7 +906,7 @@ /area/ruin/unpowered) "BX" = ( /obj/structure/table, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = 6; pixel_y = 14 }, diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 48f7614da429..1623ec21a576 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -1964,10 +1964,7 @@ /area/ruin/powered) "Tl" = ( /obj/machinery/light/directional/south, -/obj/structure/closet/secure_closet/wall{ - dir = 4; - pixel_x = -27 - }, +/obj/structure/closet/secure_closet/wall/directional/west, /obj/item/storage/firstaid/ancient, /obj/item/clothing/neck/stethoscope, /obj/item/grenade/chem_grenade/teargas{ diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm index 244eef61fa03..209709f2599b 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_pubbyslopcrash.dmm @@ -195,10 +195,8 @@ /turf/open/floor/engine, /area/ruin/whitesands/pubbycrash) "fk" = ( -/obj/structure/closet/wall/blue{ - dir = 1; - name = "Captain's locker"; - pixel_y = -28 +/obj/structure/closet/wall/blue/directional/south{ + name = "Captain's locker" }, /obj/item/clothing/suit/space/hardsuit/mining/heavy, /obj/effect/decal/cleanable/dirt, @@ -503,10 +501,7 @@ /area/ruin/whitesands/pubbycrash) "ln" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plasteel/tech/grid, /area/ruin/whitesands/pubbycrash/engine_room) @@ -660,10 +655,8 @@ }, /area/ruin/whitesands/pubbycrash/split) "oo" = ( -/obj/structure/closet/wall/white{ - dir = 1; - name = "Medicine storage"; - pixel_y = -30 +/obj/structure/closet/wall/white/directional/south{ + name = "Medicine storage" }, /obj/item/storage/firstaid/ancient{ pixel_x = 6; @@ -686,7 +679,7 @@ "oO" = ( /obj/structure/table/reinforced, /obj/item/laser_pointer, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = 6; pixel_y = 14 }, @@ -857,10 +850,9 @@ /obj/effect/turf_decal/siding/brown{ dir = 1 }, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "Mining equipment"; - pixel_y = 28 + name = "Mining equipment" }, /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, @@ -1818,10 +1810,8 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "Firearm Locker"; - pixel_x = 29; welded = 1 }, /obj/effect/turf_decal/spline/fancy/opaque/black{ @@ -1988,10 +1978,8 @@ /turf/open/floor/plasteel, /area/ruin/whitesands/pubbycrash/split) "Pr" = ( -/obj/structure/closet/wall/red{ - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "Pilots locker"; - pixel_x = -29; welded = 1 }, /obj/item/clothing/under/suit/black, diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm index 0babadd59a8d..fe95fca0e82b 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_waterplant.dmm @@ -1482,7 +1482,7 @@ /turf/open/floor/plating, /area/ruin/powered) "LM" = ( -/obj/machinery/power/turbine, +/obj/machinery/power/shuttle/engine/turbine, /turf/open/floor/plating/asteroid/whitesands, /area/overmap_encounter/planetoid/sand/explored) "LN" = ( diff --git a/_maps/RandomRuins/SpaceRuins/astraeus.dmm b/_maps/RandomRuins/SpaceRuins/astraeus.dmm index adf957299b7a..db2b305b063b 100644 --- a/_maps/RandomRuins/SpaceRuins/astraeus.dmm +++ b/_maps/RandomRuins/SpaceRuins/astraeus.dmm @@ -1499,7 +1499,7 @@ /turf/open/floor/plasteel/dark/airless, /area/ruin/space/has_grav/astraeus/bridge) "Ni" = ( -/obj/structure/closet/wall, +/obj/structure/closet/wall/directional/north, /obj/item/circuitboard/computer/rdconsole, /obj/item/clothing/suit/toggle/labcoat, /obj/item/research_notes/loot/big, diff --git a/_maps/RandomRuins/SpaceRuins/cryocontainment.dmm b/_maps/RandomRuins/SpaceRuins/cryocontainment.dmm index 01606dfa8a35..f381d0375e46 100644 --- a/_maps/RandomRuins/SpaceRuins/cryocontainment.dmm +++ b/_maps/RandomRuins/SpaceRuins/cryocontainment.dmm @@ -326,7 +326,7 @@ /turf/open/floor/plating/airless, /area/ruin/unpowered) "iA" = ( -/obj/effect/mine/stun, +/obj/item/mine/proximity/explosive/sting/live, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/airless, /area/ruin/unpowered) @@ -803,7 +803,7 @@ /turf/open/floor/engine/airless, /area/ruin/unpowered) "ET" = ( -/obj/effect/mine/stun, +/obj/item/mine/proximity/explosive/sting/live, /turf/open/floor/plating/airless, /area/ruin/unpowered) "Fb" = ( diff --git a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm index 28695ad57a80..a1bfbbcabd83 100644 --- a/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm +++ b/_maps/RandomRuins/SpaceRuins/dangerous_research.dmm @@ -1282,9 +1282,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav) "IR" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 29 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav) "Ja" = ( @@ -1820,9 +1818,7 @@ /area/ruin/space/has_grav) "UQ" = ( /obj/effect/turf_decal/siding/purple, -/obj/structure/closet/firecloset/wall{ - pixel_y = 29 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel, /area/ruin/space/has_grav) "UR" = ( diff --git a/_maps/RandomRuins/SpaceRuins/fueldepot.dmm b/_maps/RandomRuins/SpaceRuins/fueldepot.dmm index abe9e9f4562c..aa5edab6420a 100644 --- a/_maps/RandomRuins/SpaceRuins/fueldepot.dmm +++ b/_maps/RandomRuins/SpaceRuins/fueldepot.dmm @@ -148,10 +148,8 @@ }, /obj/structure/table_frame, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/wall{ - name = "armory locker"; - pixel_x = 28; - dir = 8 +/obj/structure/closet/wall/directional/east{ + name = "armory locker" }, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered) @@ -218,10 +216,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 5 }, -/obj/structure/closet/wall{ - name = "armory locker"; - pixel_x = 28; - dir = 8 +/obj/structure/closet/wall/directional/east{ + name = "armory locker" }, /obj/effect/decal/cleanable/dirt/dust, /obj/item/gun/ballistic/shotgun/brimstone, @@ -615,10 +611,8 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/wall{ - name = "suit locker"; - pixel_x = -28; - dir = 4 +/obj/structure/closet/wall/directional/west{ + name = "suit locker" }, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered) @@ -1314,10 +1308,8 @@ /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt/dust, /obj/item/reagent_containers/food/drinks/bottle/rum, -/obj/structure/closet/wall{ - name = "armory locker"; - pixel_x = 28; - dir = 8 +/obj/structure/closet/wall/directional/east{ + name = "armory locker" }, /turf/open/floor/mineral/plastitanium, /area/ruin/unpowered) @@ -1458,10 +1450,8 @@ /obj/structure/cable{ icon_state = "4-6" }, -/obj/structure/closet/wall{ - name = "suit locker"; - pixel_x = -28; - dir = 4 +/obj/structure/closet/wall/directional/west{ + name = "suit locker" }, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/mineral/plastitanium, diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index f425c41bccf3..700511e2e132 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -264,7 +264,7 @@ /turf/open/floor/plating, /area/ruin/space/has_grav/hellfactory) "aT" = ( -/obj/effect/mine/gas/water_vapor, +/obj/item/mine/pressure/gas/live, /obj/machinery/door/window, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) @@ -272,7 +272,7 @@ /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "aV" = ( -/obj/effect/mine/gas/water_vapor, +/obj/item/mine/pressure/gas/live, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) "aW" = ( diff --git a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm index 0402f3088095..7577cdeb99f5 100644 --- a/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm +++ b/_maps/RandomRuins/SpaceRuins/provinggrounds.dmm @@ -323,7 +323,7 @@ /turf/closed/wall/r_wall, /area/ruin/space/has_grav/syndicircle/winter) "iR" = ( -/obj/effect/mine/shrapnel, +/obj/item/mine/pressure/explosive/shrapnel/live, /obj/item/stack/tile/mineral/snow, /obj/machinery/light/dim/directional/west, /obj/effect/decal/cleanable/dirt/dust, @@ -648,7 +648,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/has_grav/syndicircle/winter) "tf" = ( -/obj/effect/mine/shrapnel, +/obj/item/mine/pressure/explosive/shrapnel/live, /obj/item/stack/tile/mineral/snow, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/asteroid/snow/atmosphere, diff --git a/_maps/RandomRuins/SpaceRuins/scav_mining.dmm b/_maps/RandomRuins/SpaceRuins/scav_mining.dmm index 48476edb1b82..cc1e434dc75b 100644 --- a/_maps/RandomRuins/SpaceRuins/scav_mining.dmm +++ b/_maps/RandomRuins/SpaceRuins/scav_mining.dmm @@ -347,7 +347,7 @@ /turf/open/floor/plating/airless, /area/ruin/space/has_grav/scav_mining/core) "xC" = ( -/obj/item/radio/off, +/obj/item/radio, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ icon_state = "1-2" diff --git a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm index 8dcef481246f..ee6e6bd7112a 100644 --- a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm +++ b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm @@ -4615,10 +4615,7 @@ }, /area/ruin/space/has_grav/singularitylab) "sr" = ( -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/wall/directional/west, /obj/item/reagent_containers/food/drinks/flask, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) @@ -8959,10 +8956,7 @@ /turf/open/floor/engine, /area/ruin/space/has_grav/singularitylab/reactor) "Jk" = ( -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/wall/directional/west, /turf/open/floor/wood, /area/ruin/space/has_grav/singularitylab/civvie) "Jl" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index aba1424544be..e5ed66920caf 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -1439,9 +1439,7 @@ pixel_y = 5 }, /obj/item/reagent_containers/food/condiment/sugar, -/obj/structure/closet/wall{ - pixel_y = 30 - }, +/obj/structure/closet/wall/directional/north, /obj/item/spacecash/bundle/c100, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/spacemall) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm index 554816ddc75d..cc330e69baa9 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm @@ -3425,7 +3425,7 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ruin/wasteplanet/abandoned_mechbay/bay1) "Og" = ( -/obj/effect/mine/shrapnel/human_only, +/obj/item/mine/pressure/explosive/shrapnel/live, /turf/open/floor/plating/asteroid/wasteplanet, /area/overmap_encounter/planetoid/cave/explored) "Oj" = ( @@ -4127,9 +4127,7 @@ /turf/closed/wall/concrete/reinforced, /area/ruin/wasteplanet/abandoned_mechbay/mechlab) "Yu" = ( -/obj/structure/closet/wall/white{ - pixel_y = 29 - }, +/obj/structure/closet/wall/white/directional/north, /obj/item/storage/firstaid/toxin, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_crash_kitchen.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_crash_kitchen.dmm index 2cd76a6338be..7a4b5e4caa3c 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_crash_kitchen.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_crash_kitchen.dmm @@ -431,10 +431,7 @@ /obj/machinery/advanced_airlock_controller{ pixel_y = -24 }, -/obj/structure/closet/emcloset/wall{ - pixel_x = 28; - dir = 8 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plasteel/tech, /area/ruin/unpowered) "TZ" = ( diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm index e931e0091d26..7756fdfa1fd6 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_fortress_of_solitide.dmm @@ -4083,7 +4083,7 @@ /turf/open/floor/plating/rust, /area/ruin/powered) "LY" = ( -/obj/effect/mine/sound/bwoink, +/obj/item/mine/pressure/sound/live, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 1 diff --git a/_maps/configs/pgf_crying_sun.json b/_maps/configs/pgf_crying_sun.json index 5112e1b25280..d4eb67b1fb50 100644 --- a/_maps/configs/pgf_crying_sun.json +++ b/_maps/configs/pgf_crying_sun.json @@ -46,5 +46,5 @@ "slots": 3 } }, - "enabled":false + "enabled":true } diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 07fec6af70db..ee85c403d3f1 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -3929,7 +3929,7 @@ /area/centcom/evac) "aLE" = ( /obj/structure/table, -/obj/item/radio/off, +/obj/item/radio, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) "aLF" = ( @@ -3955,7 +3955,7 @@ /area/centcom/evac) "aLJ" = ( /obj/structure/table, -/obj/item/radio/off, +/obj/item/radio, /obj/machinery/light/directional/east, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) diff --git a/_maps/outpost/hangar/nt_asteroid_20x20.dmm b/_maps/outpost/hangar/nt_asteroid_20x20.dmm index 159af62d17cf..02bd8e6f14f8 100644 --- a/_maps/outpost/hangar/nt_asteroid_20x20.dmm +++ b/_maps/outpost/hangar/nt_asteroid_20x20.dmm @@ -620,7 +620,7 @@ }, /area/hangar) "pW" = ( -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ planetary_atmos = 1 }, /area/hangar) diff --git a/_maps/outpost/indie_space.dmm b/_maps/outpost/indie_space.dmm index e7d2e554a70e..7d7ad5ecb653 100644 --- a/_maps/outpost/indie_space.dmm +++ b/_maps/outpost/indie_space.dmm @@ -2856,10 +2856,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel, /area/outpost/hallway/central) "sB" = ( @@ -3933,10 +3930,7 @@ "yV" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/effect/turf_decal/corner/opaque/neutral, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /turf/open/floor/plasteel, /area/outpost/hallway/port) "za" = ( @@ -7221,9 +7215,7 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel, /area/outpost/hallway/central) "SC" = ( diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index 800ea0cf0cbb..02d44702bc23 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -3191,10 +3191,7 @@ /area/outpost/crew/bar) "lS" = ( /obj/structure/table/reinforced, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 4 }, @@ -3896,10 +3893,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/east, /turf/open/floor/wood, /area/outpost/hallway/central) "op" = ( @@ -5302,10 +5296,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/east, /obj/item/clothing/suit/apron/chef, /turf/open/floor/concrete/tiles, /area/outpost/crew/library) @@ -5961,10 +5952,8 @@ }, /obj/effect/turf_decal/siding/wood, /obj/machinery/light/directional/north, -/obj/structure/closet/wall{ - name = "Storage Locker"; - dir = 8; - pixel_x = 28 +/obj/structure/closet/wall/directional/east{ + name = "Storage Locker" }, /turf/open/floor/carpet, /area/outpost/hallway/central) @@ -6032,9 +6021,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, @@ -6150,10 +6137,8 @@ /obj/item/reagent_containers/glass/rag, /obj/item/mop, /obj/item/soap/deluxe, -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Janitorial Closet"; - pixel_x = -29 +/obj/structure/closet/wall/blue/directional/west{ + name = "Janitorial Closet" }, /obj/machinery/door/window, /obj/effect/turf_decal/industrial/warning, @@ -7238,9 +7223,7 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 5 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel/tech/grid, /area/outpost/engineering) "zm" = ( @@ -7386,10 +7369,8 @@ /turf/open/floor/grass, /area/outpost/crew/garden) "zP" = ( -/obj/structure/closet/wall/red{ - dir = 8; - name = "Bartender's locker"; - pixel_x = 29 +/obj/structure/closet/wall/red/directional/east{ + name = "Bartender's locker" }, /obj/structure/cable{ icon_state = "1-8" @@ -9157,10 +9138,8 @@ /turf/open/floor/plating, /area/outpost/crew/lounge) "Gi" = ( -/obj/structure/closet/wall{ - name = "Storage Locker"; - pixel_y = -28; - dir = 1 +/obj/structure/closet/wall/directional/south{ + name = "Storage Locker" }, /turf/open/floor/carpet/green, /area/outpost/hallway/central) @@ -10430,10 +10409,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/wood, /area/outpost/hallway/central) "Kn" = ( @@ -14305,10 +14281,7 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/tech/grid, /area/outpost/engineering) "Yi" = ( @@ -14583,10 +14556,7 @@ /turf/closed/indestructible/reinforced, /area/outpost/crew/dorm) "Zb" = ( -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/east, /obj/item/clothing/under/shorts/cookjorts, /obj/item/clothing/shoes/cookflops, /obj/item/clothing/suit/toggle/chef, @@ -14869,10 +14839,8 @@ dir = 6 }, /obj/machinery/light/directional/south, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/east{ name = "Game Locker"; - dir = 8; - pixel_x = 28; desc = "It's a basic storage unit. Theres a little label on it, asking you to put the toys back in when finished" }, /obj/item/toy/figure/curator{ diff --git a/_maps/shuttles/independent/independent_beluga.dmm b/_maps/shuttles/independent/independent_beluga.dmm index e8bf634e863f..65df51cb9735 100644 --- a/_maps/shuttles/independent/independent_beluga.dmm +++ b/_maps/shuttles/independent/independent_beluga.dmm @@ -335,10 +335,8 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Janitorial Closet"; - pixel_x = -28 +/obj/structure/closet/wall/blue/directional/west{ + name = "Janitorial Closet" }, /obj/item/mop, /obj/item/reagent_containers/glass/bucket, @@ -659,10 +657,8 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/closet/wall/blue{ - dir = 1; - name = "Bridge Officers Locker"; - pixel_y = -28 +/obj/structure/closet/wall/blue/directional/south{ + name = "Bridge Officers Locker" }, /obj/item/clothing/shoes/cowboy/fancy, /obj/item/clothing/gloves/color/white, @@ -1045,10 +1041,8 @@ /turf/open/floor/wood, /area/ship/crew/canteen) "jI" = ( -/obj/structure/closet/wall/orange{ - name = "fuel locker"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/orange/directional/west{ + name = "fuel locker" }, /obj/item/stack/sheet/mineral/plasma/five{ pixel_y = 3 @@ -1593,10 +1587,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/carpet/nanoweave, /area/ship/hallway/central) "pe" = ( @@ -2093,6 +2084,8 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, +/obj/structure/cable/yellow, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/engineering) "tR" = ( @@ -2199,10 +2192,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) "vd" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/carpet/nanoweave/purple, /area/ship/crew) "vj" = ( @@ -2629,10 +2619,8 @@ /turf/open/floor/plasteel/white, /area/ship/hallway/central) "yZ" = ( -/obj/structure/closet/wall{ - dir = 1; - name = "Utility Closet"; - pixel_y = -28 +/obj/structure/closet/wall/directional/south{ + name = "Utility Closet" }, /obj/item/radio, /obj/item/radio, @@ -2741,10 +2729,7 @@ /obj/structure/cable/yellow{ icon_state = "2-9" }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plating, /area/ship/engineering) "AF" = ( @@ -3222,9 +3207,7 @@ /turf/open/floor/carpet/nanoweave/beige, /area/ship/crew/dorm) "EP" = ( -/obj/structure/closet/secure_closet/freezer/wall{ - pixel_y = 28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/north, /obj/item/reagent_containers/food/condiment/rice{ pixel_y = 17 }, @@ -3469,10 +3452,8 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/bridge) "Hu" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Captains Locker"; - pixel_x = -28 +/obj/structure/closet/wall/blue/directional/west{ + name = "Captains Locker" }, /obj/item/clothing/under/rank/command/captain, /obj/item/clothing/under/rank/command, @@ -3653,10 +3634,7 @@ /turf/open/floor/engine/hull/interior, /area/ship/cargo) "IH" = ( -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/item/storage/briefcase, /obj/item/folder/yellow, /obj/item/folder/red, @@ -3755,10 +3733,7 @@ /obj/effect/turf_decal/techfloor{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plasteel/tech, /area/ship/crew/cryo) "Jk" = ( @@ -3914,10 +3889,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/machinery/door/firedoor/border_only, /obj/item/reagent_containers/syringe/contraband{ pixel_x = 6; @@ -4974,10 +4946,8 @@ /area/ship/engineering) "WG" = ( /obj/effect/turf_decal/siding/wideplating/dark, -/obj/structure/closet/wall/red{ - dir = 1; - name = "Officer's Locker"; - pixel_y = -28 +/obj/structure/closet/wall/red/directional/south{ + name = "Officer's Locker" }, /obj/item/clothing/shoes/combat, /obj/item/storage/belt/security/webbing/inteq, diff --git a/_maps/shuttles/independent/independent_box.dmm b/_maps/shuttles/independent/independent_box.dmm index 685f9518f44e..0e1e4e9439b5 100644 --- a/_maps/shuttles/independent/independent_box.dmm +++ b/_maps/shuttles/independent/independent_box.dmm @@ -1180,10 +1180,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/item/storage/firstaid/fire, /obj/item/extinguisher/mini, /turf/open/floor/plasteel/tech, @@ -1570,10 +1567,7 @@ pixel_x = -25; pixel_y = 24 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/white, /area/ship/cargo) "ss" = ( @@ -2484,6 +2478,9 @@ /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering) "KI" = ( @@ -2554,8 +2551,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 9 }, -/obj/structure/salvageable/computer{ - dir = 8 +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-8" }, /turf/open/floor/plating, /area/ship/engineering) diff --git a/_maps/shuttles/independent/independent_boyardee.dmm b/_maps/shuttles/independent/independent_boyardee.dmm index 20a0cacad9ac..7d6fb95b99da 100644 --- a/_maps/shuttles/independent/independent_boyardee.dmm +++ b/_maps/shuttles/independent/independent_boyardee.dmm @@ -97,10 +97,8 @@ pixel_x = -5; pixel_y = -4 }, -/obj/structure/closet/wall/white{ - dir = 8; - name = "First Aid"; - pixel_x = 28 +/obj/structure/closet/wall/white/directional/east{ + name = "First Aid" }, /obj/machinery/light/small/directional/south, /obj/machinery/newscaster/directional/west, @@ -439,6 +437,10 @@ icon_state = "2-8" }, /obj/item/radio/intercom/directional/east, +/obj/structure/table/reinforced, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus, +/obj/machinery/cell_charger, /turf/open/floor/plating, /area/ship/maintenance) "iB" = ( @@ -665,12 +667,14 @@ /turf/open/floor/carpet/red_gold, /area/ship/crew/canteen) "mH" = ( -/obj/machinery/power/port_gen/pacman, +/obj/effect/turf_decal/box, /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "2-4" }, -/obj/effect/turf_decal/box, -/obj/item/stack/sheet/mineral/plasma/five, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, /turf/open/floor/plating, /area/ship/maintenance) "nc" = ( @@ -1573,11 +1577,12 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "CV" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/glass/bucket, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, /obj/effect/turf_decal/box, +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/ship/maintenance) "Da" = ( @@ -2496,10 +2501,10 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "TN" = ( -/obj/structure/table/reinforced, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/maintenance) "Uf" = ( @@ -2627,6 +2632,9 @@ icon_state = "2-8" }, /obj/effect/turf_decal/box, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/maintenance) "VR" = ( diff --git a/_maps/shuttles/independent/independent_bubble.dmm b/_maps/shuttles/independent/independent_bubble.dmm index 32efe563c0bb..c34ad8349987 100644 --- a/_maps/shuttles/independent/independent_bubble.dmm +++ b/_maps/shuttles/independent/independent_bubble.dmm @@ -480,13 +480,9 @@ /turf/open/floor/plasteel, /area/ship/bridge) "uw" = ( -/obj/item/pipe_dispenser, -/obj/structure/closet/crate, -/obj/item/construction/plumbing, -/obj/item/construction/rcd/arcd, -/obj/item/stack/sheet/plasteel/fifty, -/obj/item/construction/rcd/combat, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating/rust, /area/ship/maintenance/aft) "uE" = ( @@ -636,6 +632,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating/rust, /area/ship/maintenance/aft) "Ay" = ( @@ -988,6 +987,21 @@ "Ob" = ( /turf/closed/wall, /area/ship/maintenance/aft) +"OR" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/closet/crate, +/obj/item/stack/sheet/plasteel/fifty, +/obj/item/pipe_dispenser, +/obj/item/construction/rcd/arcd, +/obj/item/construction/rcd/combat, +/obj/item/construction/plumbing, +/turf/open/floor/plating, +/area/ship/maintenance/aft) "OY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1345,7 +1359,7 @@ bv MZ jI MW -VA +OR Ob Ob VB diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 4e7e52e85dff..6150fe8877ec 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -254,6 +254,10 @@ dir = 4 }, /obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/power/ship_gravity, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, /turf/open/floor/plating, /area/ship/engineering) "gm" = ( @@ -292,9 +296,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy, @@ -422,9 +424,7 @@ /obj/effect/turf_decal/corner/opaque/blue{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/white{ dir = 1 }, @@ -563,7 +563,7 @@ pixel_x = -9; pixel_y = 7 }, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = 6; pixel_y = 7 }, @@ -1499,9 +1499,8 @@ /obj/item/pickaxe/silver, /obj/item/storage/bag/ore, /obj/item/storage/bag/ore, -/obj/structure/closet/wall{ - name = "equipment closet"; - pixel_y = 28 +/obj/structure/closet/wall/directional/north{ + name = "equipment closet" }, /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 @@ -2125,7 +2124,7 @@ "WL" = ( /obj/structure/table, /obj/item/storage/belt/utility, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = 6; pixel_y = 7 }, diff --git a/_maps/shuttles/independent/independent_junker.dmm b/_maps/shuttles/independent/independent_junker.dmm index 006a74a2e3fb..a5b4354e7456 100644 --- a/_maps/shuttles/independent/independent_junker.dmm +++ b/_maps/shuttles/independent/independent_junker.dmm @@ -2266,9 +2266,7 @@ /obj/item/gun/ballistic/automatic/pistol/disposable, /obj/item/reagent_containers/food/drinks/bottle/hooch, /obj/machinery/light/dim/directional/south, -/obj/structure/closet/wall/blue{ - dir = 8; - pixel_x = 32; +/obj/structure/closet/wall/blue/directional/east{ welded = 1 }, /turf/open/floor/plating, diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index 29264dd2958f..b9c686406b14 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -618,7 +618,6 @@ "cY" = ( /obj/effect/decal/cleanable/greenglow, /obj/effect/decal/cleanable/dirt, -/obj/structure/table, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, @@ -632,6 +631,10 @@ pixel_x = -23; id = "kiloengine" }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/engineering/engine) "cZ" = ( @@ -1841,6 +1844,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "Nq" = ( @@ -2267,11 +2273,11 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, /obj/item/storage/belt/utility, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = -3; pixel_y = 3 }, -/obj/item/radio/off, +/obj/item/radio, /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/mineral/plastitanium, /area/ship/cargo) diff --git a/_maps/shuttles/independent/independent_lagoon.dmm b/_maps/shuttles/independent/independent_lagoon.dmm index c015f0c262a1..f1f68c199fa4 100644 --- a/_maps/shuttles/independent/independent_lagoon.dmm +++ b/_maps/shuttles/independent/independent_lagoon.dmm @@ -386,10 +386,7 @@ /obj/item/clothing/suit/hawaiian, /obj/item/spacecash/bundle/c1000, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/directional/west, /obj/effect/turf_decal/siding/wood{ dir = 8 }, @@ -741,8 +738,11 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "eS" = ( -/obj/structure/reagent_dispensers/watertank, /obj/machinery/light/directional/west, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ship/engineering) "eT" = ( @@ -1163,10 +1163,7 @@ /turf/open/floor/engine, /area/ship/engineering) "hN" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -1261,10 +1258,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/structure/cable{ icon_state = "1-4" }, @@ -2691,9 +2685,7 @@ /obj/item/cultivator, /obj/item/storage/box/beakers, /obj/item/plant_analyzer, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/item/storage/bag/plants/portaseeder, /obj/item/clothing/gloves/botanic_leather, /obj/effect/turf_decal/siding/wood{ @@ -2893,10 +2885,7 @@ /turf/open/floor/plating, /area/ship/engineering) "sQ" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, @@ -3717,10 +3706,7 @@ /turf/open/floor/plasteel, /area/ship/hallway/port) "ys" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/item/storage/firstaid/o2, /obj/effect/turf_decal/corner/opaque/white/border{ dir = 8 @@ -3791,9 +3777,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/structure/cable{ icon_state = "4-8" }, @@ -4074,6 +4058,7 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/ship/engineering) "Bg" = ( @@ -4195,9 +4180,7 @@ /turf/open/floor/plasteel, /area/ship/hallway/starboard) "BT" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -4598,10 +4581,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -5063,10 +5043,7 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/item/storage/firstaid/o2, /obj/effect/turf_decal/corner/opaque/white/border{ dir = 8 @@ -6274,10 +6251,7 @@ /turf/open/floor/wood, /area/ship/crew/dorm) "QU" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/structure/cable{ icon_state = "2-4" }, @@ -6763,10 +6737,9 @@ /obj/item/radio, /obj/item/gun/energy/e_gun/advtaser, /obj/item/pen/survival, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "equipment locker"; - pixel_y = 28; req_access = list(30) }, /obj/item/card/id/captains_spare, @@ -7449,6 +7422,9 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ship/engineering) "Yu" = ( diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index 5ac1bcdd0e65..f82cdc7ba748 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -162,6 +162,7 @@ name = "Engine Shutters" }, /obj/machinery/cell_charger, +/obj/item/storage/toolbox/mechanical, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engine) "dN" = ( @@ -384,6 +385,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "ib" = ( @@ -615,10 +619,8 @@ /turf/open/floor/plasteel/dark, /area/ship/cargo) "nV" = ( -/obj/structure/closet/wall/blue{ - dir = 4; +/obj/structure/closet/wall/blue/directional/west{ secure = 1; - pixel_x = -28; locked = 1 }, /obj/item/gun/energy/laser/scatter, @@ -876,10 +878,10 @@ /obj/structure/railing{ dir = 8 }, -/obj/structure/table/reinforced{ - color = "#c1b6a5" +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/item/storage/toolbox/mechanical, +/obj/machinery/power/ship_gravity, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "sT" = ( @@ -1638,9 +1640,6 @@ /area/ship/hallway/aft) "KA" = ( /obj/structure/window/reinforced/spawner, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/item/paper_bin, /obj/item/analyzer{ pixel_y = 3; @@ -1653,6 +1652,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engine) "KT" = ( diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index 03044b113956..13b336dc36ae 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -351,12 +351,10 @@ /obj/item/reagent_containers/syringe{ pixel_x = 7 }, -/obj/structure/closet/secure_closet/wall{ - dir = 8; +/obj/structure/closet/secure_closet/wall/directional/east{ icon_door = "med_wall"; locked = 0; name = "mortuary locker"; - pixel_x = 28; req_access_txt = "5" }, /obj/effect/turf_decal/corner/opaque/green{ @@ -657,11 +655,9 @@ /obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "white_wall"; - name = "medical closet"; - pixel_x = 28 + name = "medical closet" }, /obj/item/storage/backpack/satchel/med, /obj/item/clothing/shoes/sneakers/white, @@ -760,10 +756,16 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew) "jx" = ( -/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "4-8" + }, +/obj/structure/closet/wall/orange/directional/north{ + name = "fuel supply" }, +/obj/item/stack/sheet/mineral/uranium/five, +/obj/item/stack/sheet/mineral/plasma/fifty, +/obj/effect/turf_decal/radiation, +/obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "jy" = ( @@ -1008,16 +1010,13 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plating, /area/ship/maintenance/central) "mH" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "firearms locker"; - pixel_y = 28; req_access_txt = "1" }, /obj/item/gun/ballistic/shotgun/flamingarrow, @@ -1424,10 +1423,9 @@ /turf/open/floor/engine/hull, /area/ship/external) "sq" = ( -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "red_wall"; - name = "security closet"; - pixel_y = 28 + name = "security closet" }, /obj/item/storage/backpack/security, /obj/item/clothing/gloves/fingerless, @@ -1599,10 +1597,9 @@ dir = 4 }, /obj/structure/catwalk/over, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "yellow_wall"; - name = "engineering closet"; - pixel_y = 28 + name = "engineering closet" }, /obj/item/storage/backpack/industrial, /obj/item/clothing/shoes/workboots, @@ -1982,12 +1979,10 @@ pixel_x = -4; pixel_y = 5 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_door = "med_wall"; locked = 0; name = "medical locker"; - pixel_y = -28; req_access_txt = "5" }, /obj/effect/turf_decal/corner/opaque/green/border{ @@ -2334,8 +2329,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light/small/directional/north, /obj/structure/catwalk/over, +/obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/ship/engineering/atmospherics) "BZ" = ( @@ -2439,11 +2434,9 @@ /obj/effect/turf_decal/corner/opaque/red{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "firearms locker"; - pixel_y = -28; req_access_txt = "1" }, /obj/item/flashlight/seclite, @@ -2462,13 +2455,17 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "DE" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/sign/warning/nosmoking{ - pixel_y = 32 - }, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "DG" = ( @@ -2885,11 +2882,9 @@ /obj/effect/turf_decal/corner/opaque/red{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "armor locker"; - pixel_y = -28; req_access_txt = "1" }, /obj/item/clothing/suit/armor/vest/alt, @@ -3077,11 +3072,9 @@ /obj/effect/turf_decal/corner/opaque/red{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "firearms locker"; - pixel_y = -28; req_access_txt = "1" }, /obj/item/storage/belt/security, @@ -3274,10 +3267,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plasteel/tech, /area/ship/maintenance/central) "NU" = ( @@ -3434,12 +3424,10 @@ }, /obj/effect/turf_decal/corner/opaque/white/mono, /obj/item/roller, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_door = "med_wall"; locked = 0; name = "medical locker"; - pixel_y = -28; req_access_txt = "5" }, /obj/item/roller, @@ -3599,11 +3587,9 @@ /obj/item/clothing/head/HoS/cowboy, /obj/item/ammo_box/c38, /obj/item/ammo_box/c38, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "solgov_wall"; name = "first mate's closet"; - pixel_x = -28; req_access_txt = "57" }, /turf/open/floor/carpet/blue, @@ -3766,11 +3752,9 @@ /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/head/caphat/cowboy, /obj/item/gun/ballistic/automatic/pistol/candor, -/obj/structure/closet/secure_closet/wall{ - dir = 8; +/obj/structure/closet/secure_closet/wall/directional/east{ icon_state = "solgov_wall"; name = "captain's closet"; - pixel_x = 28; req_access_txt = "20" }, /obj/item/ammo_box/magazine/m45, @@ -4036,11 +4020,11 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/obj/structure/closet/crate, -/obj/item/stack/sheet/mineral/uranium/five, -/obj/item/stack/sheet/mineral/plasma/fifty, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/radiation, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-5" + }, +/obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "Vo" = ( @@ -4149,10 +4133,9 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) "WG" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "ammunition locker"; - pixel_y = 28; req_access_txt = "1" }, /obj/item/ammo_box/c38_box, @@ -4184,6 +4167,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/sign/warning/nosmoking{ + pixel_y = 32 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "WO" = ( @@ -4482,9 +4468,8 @@ dir = 4 }, /obj/structure/catwalk/over, -/obj/structure/closet/wall/orange{ - name = "tool closet"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "tool closet" }, /obj/item/storage/toolbox/mechanical, /obj/item/storage/belt/utility, diff --git a/_maps/shuttles/independent/independent_schmiedeberg.dmm b/_maps/shuttles/independent/independent_schmiedeberg.dmm index f9c4ee6c499c..a77e943f1558 100644 --- a/_maps/shuttles/independent/independent_schmiedeberg.dmm +++ b/_maps/shuttles/independent/independent_schmiedeberg.dmm @@ -146,7 +146,6 @@ /turf/open/floor/plating, /area/ship/bridge) "bu" = ( -/obj/structure/catwalk/over, /obj/structure/cable{ icon_state = "2-8" }, @@ -157,8 +156,9 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 + dir = 1 }, +/obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/engineering) "bD" = ( @@ -467,10 +467,7 @@ dir = 4 }, /obj/structure/curtain/bounty, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/turf_decal/siding/wood{ dir = 1 }, @@ -536,6 +533,7 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "gt" = ( @@ -1290,6 +1288,9 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plating, /area/ship/engineering) "rC" = ( @@ -1559,6 +1560,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, /turf/open/floor/plating, /area/ship/engineering) "wz" = ( @@ -1759,10 +1763,7 @@ icon_state = "1-8" }, /obj/effect/turf_decal/corner/opaque/blue/three_quarters, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/plasteel/white, /area/ship/cargo) "yv" = ( @@ -1973,12 +1974,10 @@ /obj/item/reagent_containers/syringe/piercing, /obj/item/reagent_containers/syringe/piercing, /obj/item/reagent_containers/syringe/piercing, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/south{ desc = "For when you REALLY need to reserve the right to deny service. Immediate results guaranteed*"; - dir = 1; icon_state = "sec_wall"; - name = "Unruly Customer Pacification"; - pixel_y = -28 + name = "Unruly Customer Pacification" }, /obj/item/reagent_containers/glass/bottle/chloralhydrate{ pixel_x = 10 @@ -2039,10 +2038,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 32 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/canteen) "CX" = ( @@ -2216,9 +2212,8 @@ /obj/item/clothing/head/helmet/space/orange, /obj/item/pickaxe/mini, /obj/item/pickaxe/mini, -/obj/structure/closet/wall/white{ - name = "E.V.A"; - pixel_y = 28 +/obj/structure/closet/wall/white/directional/north{ + name = "E.V.A" }, /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ @@ -2443,10 +2438,7 @@ /obj/machinery/portable_atmospherics/scrubber, /obj/machinery/light/small/directional/west, /obj/effect/turf_decal/box/white, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Ln" = ( @@ -2527,9 +2519,7 @@ /turf/open/floor/concrete/slab_3, /area/ship/crew/hydroponics) "MP" = ( -/obj/structure/closet/secure_closet/freezer/wall{ - pixel_y = 32 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/north, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, /obj/item/reagent_containers/food/condiment/flour, @@ -2673,8 +2663,11 @@ /obj/effect/turf_decal/siding/thinplating/dark/end{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/effect/decal/cleanable/oil/streak, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-8" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "Oe" = ( @@ -2692,10 +2685,7 @@ /turf/open/floor/concrete/tiles, /area/ship/crew/hydroponics) "On" = ( -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/wall/directional/west, /obj/machinery/washing_machine, /obj/item/clothing/suit/longcoat/chemist, /obj/item/clothing/suit/longcoat/chemist, @@ -3323,6 +3313,9 @@ pixel_x = 11; pixel_y = -16 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, /turf/open/floor/plating, /area/ship/engineering) "Yw" = ( @@ -3510,11 +3503,9 @@ /obj/machinery/door/window/eastright{ dir = 1 }, -/obj/structure/closet/secure_closet/wall{ - dir = 8; +/obj/structure/closet/secure_closet/wall/directional/east{ icon_state = "solgov_wall"; name = "Chief Pharmacist's Locker"; - pixel_x = 32; req_access_txt = "40" }, /obj/item/storage/bag/medical, diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index 113975fc8edf..3d5fa7c58420 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -333,6 +333,9 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 9 }, +/obj/structure/cable{ + icon_state = "5-9" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "cR" = ( @@ -815,6 +818,9 @@ /obj/effect/turf_decal/miskilamo_big/six{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-9" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "gZ" = ( @@ -1282,11 +1288,9 @@ /obj/effect/turf_decal/corner/opaque/green{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - dir = 8; +/obj/structure/closet/secure_closet/wall/directional/east{ icon_door = "med_wall"; name = "mortuary locker"; - pixel_x = 28; req_access_txt = "5" }, /obj/item/reagent_containers/glass/bottle/formaldehyde{ @@ -1662,6 +1666,9 @@ /area/ship/security) "oH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable{ + icon_state = "6-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "oK" = ( @@ -2111,11 +2118,9 @@ /area/ship/hallway/fore) "rQ" = ( /obj/effect/turf_decal/corner/opaque/bottlegreen/full, -/obj/structure/closet/wall{ - dir = 4; +/obj/structure/closet/wall/directional/west{ icon_door = "white_wall"; - name = "medical closet"; - pixel_x = -28 + name = "medical closet" }, /obj/item/storage/backpack/satchel/med, /obj/item/clothing/shoes/sneakers/white, @@ -2137,6 +2142,9 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-6" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "sb" = ( @@ -3194,10 +3202,7 @@ /turf/open/floor/carpet/blue, /area/ship/bridge) "AG" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/structure/cable{ icon_state = "4-8" }, @@ -3259,6 +3264,13 @@ /obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/dark, /area/ship/hallway/port) +"BR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) "BY" = ( /obj/machinery/door/airlock{ name = "Dormitory" @@ -4169,6 +4181,10 @@ "Km" = ( /obj/effect/turf_decal/box, /obj/effect/decal/cleanable/dirt, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "Kn" = ( @@ -4601,6 +4617,9 @@ /area/ship/engineering/engine) "NK" = ( /obj/structure/closet/cardboard, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "NR" = ( @@ -4924,6 +4943,9 @@ /obj/machinery/atmospherics/pipe/layer_manifold/visible{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "Qt" = ( @@ -5019,11 +5041,9 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "Rm" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 8; +/obj/structure/closet/secure_closet/wall/directional/east{ icon_door = "med_wall"; name = "medical locker"; - pixel_x = 28; req_access_txt = "5" }, /obj/item/storage/box/syringes, @@ -5759,6 +5779,9 @@ /obj/effect/turf_decal/miskilamo_big/eight{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "XY" = ( @@ -6111,7 +6134,7 @@ PP PP QB Id -pr +BR Zn JF xf diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm index fd1a368ebc50..d39a1ef392e3 100644 --- a/_maps/shuttles/independent/independent_tranquility.dmm +++ b/_maps/shuttles/independent/independent_tranquility.dmm @@ -563,10 +563,8 @@ /obj/item/reagent_containers/food/condiment/rice, /obj/item/reagent_containers/food/condiment/rice, /obj/item/storage/box/condimentbottles, -/obj/structure/closet/secure_closet/wall{ - dir = 4; - name = "Kitchen Cabinet"; - pixel_x = -28 +/obj/structure/closet/secure_closet/wall/directional/west{ + name = "Kitchen Cabinet" }, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) @@ -672,10 +670,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/item/radio, /obj/item/radio, /obj/item/radio, @@ -1284,6 +1279,10 @@ /obj/structure/railing{ dir = 4 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/engine) "jk" = ( @@ -1329,10 +1328,8 @@ /turf/open/floor/grass, /area/ship/crew/hydroponics) "js" = ( -/obj/structure/closet/wall{ - dir = 4; - name = "Wardrobe"; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Wardrobe" }, /obj/item/clothing/head/beret, /obj/item/clothing/under/color/jumpskirt/random, @@ -1418,6 +1415,23 @@ }, /turf/open/floor/wood/birch, /area/ship/crew/crewtwo) +"ka" = ( +/obj/machinery/power/terminal, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) "kr" = ( /obj/structure/cable{ icon_state = "2-8" @@ -1455,10 +1469,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, -/obj/structure/closet/wall{ - dir = 4; - name = "Wardrobe"; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Wardrobe" }, /obj/item/clothing/head/wig/random, /obj/item/clothing/under/color/jumpskirt/random, @@ -1747,10 +1759,7 @@ /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) "ny" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/starboard) "nz" = ( @@ -1990,10 +1999,7 @@ /area/ship/hallway/port) "pT" = ( /obj/effect/turf_decal/techfloor/orange, -/obj/structure/closet/wall/orange{ - dir = 1; - pixel_y = -32 - }, +/obj/structure/closet/wall/orange/directional/south, /obj/item/stack/tape/industrial/electrical, /obj/item/stack/tape/industrial, /obj/item/holosign_creator/engineering, @@ -2071,10 +2077,8 @@ /area/ship/hallway/port) "qV" = ( /obj/effect/turf_decal/siding/wood, -/obj/structure/closet/wall{ - dir = 1; - name = "Wardrobe"; - pixel_y = -28 +/obj/structure/closet/wall/directional/south{ + name = "Wardrobe" }, /obj/item/clothing/head/wig/random, /obj/item/storage/box/syndie_kit/chameleon, @@ -2458,10 +2462,8 @@ /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) "ub" = ( -/obj/structure/closet/wall{ - dir = 8; - name = "Personal Effects"; - pixel_x = 32 +/obj/structure/closet/wall/directional/east{ + name = "Personal Effects" }, /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -2937,9 +2939,7 @@ /turf/open/floor/carpet/nanoweave/red, /area/ship/crew/dorm/dormfour) "xW" = ( -/obj/structure/closet/wall/orange{ - pixel_y = 32 - }, +/obj/structure/closet/wall/orange/directional/north, /obj/item/clothing/suit/fire/atmos, /obj/item/clothing/mask/gas/atmos, /obj/item/clothing/head/hardhat/atmos, @@ -3469,9 +3469,8 @@ /obj/item/clothing/under/pants/khaki, /obj/item/clothing/shoes/laceup, /obj/item/clothing/under/suit/charcoal, -/obj/structure/closet/wall{ - name = "Wardrobe"; - pixel_y = 28 +/obj/structure/closet/wall/directional/north{ + name = "Wardrobe" }, /obj/item/clothing/accessory/waistcoat, /turf/open/floor/carpet/black, @@ -4486,10 +4485,8 @@ icon_state = "1-8" }, /obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/closet/wall/blue{ - dir = 1; - name = "Janitorial Closet"; - pixel_y = -28 +/obj/structure/closet/wall/blue/directional/south{ + name = "Janitorial Closet" }, /obj/item/soap/deluxe, /obj/item/mop, @@ -4748,10 +4745,8 @@ /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/starboard) "LS" = ( -/obj/structure/closet/wall{ - dir = 8; - name = "Wardrobe"; - pixel_x = 32 +/obj/structure/closet/wall/directional/east{ + name = "Wardrobe" }, /obj/item/clothing/suit/toggle/labcoat/chemist/side, /obj/item/clothing/head/beret/puce, @@ -4791,10 +4786,8 @@ "Md" = ( /obj/item/circuitboard/machine/telecomms/relay, /obj/item/circuitboard/machine/telecomms/message_server, -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Component Storage"; - pixel_x = -28 +/obj/structure/closet/wall/blue/directional/west{ + name = "Component Storage" }, /obj/item/stack/cable_coil/blue, /obj/item/stock_parts/subspace/filter, @@ -5464,10 +5457,8 @@ /obj/item/reagent_containers/food/condiment/soymilk, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, -/obj/structure/closet/secure_closet/wall{ - dir = 8; - name = "Freezer"; - pixel_x = 32 +/obj/structure/closet/secure_closet/wall/directional/east{ + name = "Freezer" }, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) @@ -5836,10 +5827,8 @@ /turf/closed/wall/mineral/titanium, /area/ship/storage) "TI" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Personal Effects"; - pixel_x = -32 +/obj/structure/closet/wall/blue/directional/west{ + name = "Personal Effects" }, /obj/item/storage/belt/utility/full, /obj/item/clothing/suit/hooded/wintercoat/engineering, @@ -5856,10 +5845,8 @@ /turf/open/floor/carpet/nanoweave/red, /area/ship/crew/dorm/dormfour) "TJ" = ( -/obj/structure/closet/wall{ - dir = 8; - name = "Personal Effects"; - pixel_x = 32 +/obj/structure/closet/wall/directional/east{ + name = "Personal Effects" }, /obj/item/storage/bag/chemistry, /obj/item/storage/box/pillbottles, @@ -6634,10 +6621,7 @@ /turf/open/floor/plasteel/white, /area/ship/medical/surgery) "ZU" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/carpet/nanoweave/beige, /area/ship/hallway/port) @@ -7309,7 +7293,7 @@ rB aC Fq jh -JX +ka Jq Gs "} diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm index 647896ce8185..e8baced58968 100644 --- a/_maps/shuttles/inteq/inteq_colossus.dmm +++ b/_maps/shuttles/inteq/inteq_colossus.dmm @@ -190,10 +190,9 @@ /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 + name = "uniform closet" }, /obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel/grimy, @@ -1775,10 +1774,8 @@ /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, -/obj/structure/closet/wall{ - dir = 8; - icon_state = "emergency_wall"; - pixel_x = 28 +/obj/structure/closet/wall/directional/east{ + icon_state = "emergency_wall" }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/port) @@ -2294,10 +2291,9 @@ /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/shoes/sneakers/black, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 + name = "uniform closet" }, /turf/open/floor/plasteel/grimy, /area/ship/crew) @@ -2621,12 +2617,10 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "Da" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_door = "solgov_wall"; icon_state = "solgov_wall"; name = "vanguard's locker"; - pixel_x = -28; req_access_txt = "58" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -2801,6 +2795,9 @@ /obj/effect/turf_decal/corner_techfloor_gray{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "EQ" = ( @@ -2898,11 +2895,9 @@ /area/ship/crew/toilet) "GL" = ( /obj/machinery/atmospherics/pipe/layer_manifold/visible, -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "yellow_wall"; - name = "engineering closet"; - pixel_x = 32 + name = "engineering closet" }, /obj/structure/catwalk/over/plated_catwalk/dark, /obj/item/storage/backpack/industrial, @@ -3264,10 +3259,7 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "KM" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -32 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "Ld" = ( @@ -3662,8 +3654,9 @@ /obj/structure/sign/warning/nosmoking/circle{ pixel_x = 32 }, -/obj/effect/turf_decal/number/zero{ - dir = 8 +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-8" }, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -4548,10 +4541,7 @@ piping_layer = 2 }, /obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/plating, /area/ship/engineering) "Zz" = ( diff --git a/_maps/shuttles/inteq/inteq_hound.dmm b/_maps/shuttles/inteq/inteq_hound.dmm index e67d176f5683..5616d1d2d4b0 100644 --- a/_maps/shuttles/inteq/inteq_hound.dmm +++ b/_maps/shuttles/inteq/inteq_hound.dmm @@ -650,10 +650,9 @@ /obj/effect/turf_decal/siding/thinplating{ dir = 1 }, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 + name = "uniform closet" }, /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, @@ -965,12 +964,10 @@ /turf/open/floor/plasteel/patterned, /area/ship/cargo) "va" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_door = "solgov_wall"; icon_state = "solgov_wall"; name = "vanguard's locker"; - pixel_x = -28; req_access_txt = "58" }, /obj/item/clothing/glasses/hud/security/sunglasses/inteq, @@ -1102,10 +1099,9 @@ /obj/item/storage/belt/security/webbing/inteq, /obj/item/storage/belt/security/webbing/inteq, /obj/item/storage/belt/security/webbing/inteq, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "equipment locker"; - pixel_y = 28; req_one_access_txt = "1" }, /turf/open/floor/plasteel/patterned/grid, @@ -1245,9 +1241,7 @@ /obj/structure/sign/poster/official/safety_internals{ pixel_x = -32 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "AW" = ( @@ -1391,11 +1385,9 @@ /obj/item/gun/ballistic/automatic/assault/skm/inteq{ pixel_x = -5 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "weapons lockup"; - pixel_y = -28; req_one_access_txt = "58" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -1956,10 +1948,7 @@ pixel_x = 25; pixel_y = 7 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "OP" = ( @@ -2256,6 +2245,9 @@ /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 1 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/tech, /area/ship/storage/eva) "Wk" = ( @@ -2282,6 +2274,10 @@ codes_txt = "patrol;next_patrol=crew"; location = "eva" }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/tech, /area/ship/storage/eva) "Xc" = ( diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index c8bdcb1bd3be..4234e39cbafc 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -162,9 +162,7 @@ /obj/effect/turf_decal/siding/thinplating{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 32 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "aV" = ( @@ -1317,15 +1315,9 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/item/analyzer{ - pixel_x = 6; - pixel_y = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" }, /turf/open/floor/plasteel/dark, /area/ship/engineering) @@ -1540,6 +1532,13 @@ icon_state = "2-4" }, /obj/effect/turf_decal/number/five, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "jT" = ( @@ -2728,10 +2727,8 @@ /obj/structure/catwalk/over/plated_catwalk, /obj/structure/railing, /obj/machinery/airalarm/directional/north, -/obj/structure/closet/wall{ - dir = 4; - icon_door = "grey_wall"; - pixel_x = -32 +/obj/structure/closet/wall/directional/west{ + icon_door = "grey_wall" }, /obj/item/radio/headset, /obj/item/radio/headset, @@ -2757,6 +2754,19 @@ }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) +"qD" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ship/engineering) "qF" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3787,9 +3797,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 32 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/port) "wQ" = ( @@ -3815,9 +3823,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 32 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "xb" = ( @@ -4532,6 +4538,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "Ba" = ( @@ -5822,7 +5831,13 @@ /obj/item/assembly/igniter{ pixel_y = 6 }, -/obj/structure/cable/yellow, +/obj/item/analyzer{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-5" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "Lu" = ( @@ -6237,16 +6252,9 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/engineering) "OG" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, /obj/structure/railing, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, /area/ship/engineering) "OK" = ( /obj/machinery/cryopod{ @@ -7944,7 +7952,7 @@ sV sV AO cj -ek +qD jS AZ gV diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index ede8c585a5c2..e66283a78671 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -141,9 +141,7 @@ /obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel/patterned, /area/ship/cargo) "bB" = ( @@ -526,10 +524,9 @@ dir = 4 }, /obj/structure/table, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "equipment locker"; - pixel_y = 28; req_access = list(1) }, /obj/item/storage/box/zipties, @@ -572,10 +569,7 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "eV" = ( -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/structure/cable{ icon_state = "1-4" }, @@ -904,10 +898,7 @@ /obj/structure/chair/sofa/left{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "ix" = ( @@ -1745,9 +1736,7 @@ /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "pA" = ( -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/item/radio, /obj/item/radio, /obj/item/radio, @@ -1803,9 +1792,7 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "pU" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/machinery/atmospherics/components/binary/pump/on/layer2{ dir = 4 }, @@ -1943,6 +1930,10 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/maintenance/port) "rY" = ( @@ -2060,10 +2051,9 @@ /obj/item/gun/ballistic/automatic/pistol/commander/inteq/no_mag{ pixel_x = 4 }, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "weapons lockup"; - pixel_y = 28; req_access = list(1) }, /obj/structure/table, @@ -2369,10 +2359,7 @@ "vx" = ( /obj/effect/turf_decal/siding/thinplating/dark/end, /obj/machinery/airalarm/directional/south, -/obj/structure/closet/wall/white{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/wall/white/directional/east, /obj/item/clothing/under/rank/medical/gown, /obj/item/clothing/under/rank/medical/gown, /obj/item/clothing/under/rank/medical/gown, @@ -4311,7 +4298,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 8 }, /area/ship/cargo) @@ -4355,12 +4342,10 @@ /obj/item/clothing/under/syndicate/inteq, /obj/item/clothing/suit/armor/hos/inteq, /obj/item/clothing/head/beret/sec/hos/inteq, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_door = "solgov_wall"; icon_state = "solgov_wall"; name = "vanguard's locker"; - pixel_x = -28; req_access = list(58) }, /obj/item/storage/lockbox/medal/sec, @@ -4378,10 +4363,7 @@ /obj/structure/chair/sofa/right{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "Oh" = ( @@ -4398,9 +4380,7 @@ /obj/effect/turf_decal/borderfloor{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/patterned, /area/ship/cargo) "Ok" = ( @@ -4703,9 +4683,7 @@ /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/machinery/airalarm/directional/east, /turf/open/floor/carpet/black, /area/ship/crew/dorm) @@ -4720,10 +4698,8 @@ /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) "RR" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ name = "honorable corpsman's locker"; - pixel_x = -28; req_access = list(19) }, /obj/item/clothing/shoes/combat, @@ -5131,6 +5107,9 @@ /obj/structure/cable{ icon_state = "2-10" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/ship/maintenance/port) "WC" = ( @@ -5389,9 +5368,7 @@ /obj/item/clothing/shoes/combat, /obj/item/clothing/shoes/combat, /obj/item/clothing/shoes/combat, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /turf/open/floor/carpet/black, /area/ship/crew/dorm) "YZ" = ( diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index c93d0cc7f0a8..23e763a6b9c6 100644 --- a/_maps/shuttles/inteq/inteq_vaquero.dmm +++ b/_maps/shuttles/inteq/inteq_vaquero.dmm @@ -670,7 +670,6 @@ name = "Air to Distro" }, /obj/effect/turf_decal/hardline_small, -/obj/machinery/light/small/directional/north, /obj/machinery/atmospherics/components/binary/pump/layer4{ dir = 4; name = "Input to Waste" @@ -679,6 +678,7 @@ pixel_x = 10; pixel_y = 22 }, +/obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "jB" = ( @@ -890,11 +890,9 @@ /obj/item/clothing/head/hardhat, /obj/item/clothing/shoes/combat, /obj/effect/turf_decal/hardline_small/right, -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "yellow_wall"; - name = "engineering closet"; - pixel_x = 28 + name = "engineering closet" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 @@ -908,12 +906,10 @@ /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "mu" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_door = "solgov_wall"; icon_state = "solgov_wall"; name = "vanguard's locker"; - pixel_x = -28; req_access_txt = "20" }, /obj/item/clothing/glasses/hud/security/sunglasses/inteq, @@ -1209,10 +1205,9 @@ /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, /obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 + name = "uniform closet" }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 @@ -1737,9 +1732,8 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "Bu" = ( -/obj/structure/closet/wall{ - icon_door = "grey_wall"; - pixel_y = 28 +/obj/structure/closet/wall/directional/north{ + icon_door = "grey_wall" }, /obj/structure/cable{ icon_state = "0-2" @@ -1868,10 +1862,8 @@ dir = 9 }, /obj/effect/turf_decal/number/six, -/obj/structure/closet/wall/orange{ - dir = 8; +/obj/structure/closet/wall/orange/directional/east{ name = "tool closet"; - pixel_x = 28; req_access_txt = "11" }, /obj/item/pipe_dispenser, @@ -2149,10 +2141,9 @@ /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/shoes/sneakers/black, -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/north{ icon_door = "orange_wall"; - name = "uniform closet"; - pixel_y = 28 + name = "uniform closet" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 @@ -2167,13 +2158,16 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible/layer2{ dir = 1 }, -/obj/machinery/firealarm/directional/north, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/light/small/directional/north, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "Hn" = ( @@ -2220,10 +2214,9 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/security) "HN" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_door = "med_wall"; name = "medical locker"; - pixel_y = 28; req_access_txt = "5" }, /obj/item/storage/firstaid/regular{ @@ -2382,6 +2375,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "JL" = ( @@ -2391,6 +2387,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/south, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/ship/maintenance/starboard) "Kr" = ( diff --git a/_maps/shuttles/minutemen/minutemen_vela.dmm b/_maps/shuttles/minutemen/minutemen_vela.dmm index 200a677ea101..b0c66424a2d4 100644 --- a/_maps/shuttles/minutemen/minutemen_vela.dmm +++ b/_maps/shuttles/minutemen/minutemen_vela.dmm @@ -1032,10 +1032,7 @@ /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) "gB" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/turf_decal/techfloor{ dir = 10 }, @@ -1471,7 +1468,7 @@ /turf/open/floor/carpet/nanoweave/purple, /area/ship/science) "jh" = ( -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 1 }, /area/ship/hallway/central) @@ -1563,10 +1560,7 @@ /turf/open/floor/plasteel/dark, /area/ship/science) "jI" = ( -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, @@ -2490,10 +2484,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/machinery/button/door{ dir = 8; id = "vela_labeva"; @@ -3979,10 +3970,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/atmospherics) "wk" = ( -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, @@ -4074,6 +4062,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/generic, +/obj/machinery/power/floodlight, /turf/open/floor/plating, /area/ship/storage) "wD" = ( @@ -4735,10 +4724,7 @@ /turf/open/floor/plating, /area/ship/engineering/atmospherics) "zR" = ( -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/effect/decal/cleanable/dirt, /obj/item/storage/firstaid/fire, /obj/effect/turf_decal/techfloor, @@ -5555,7 +5541,7 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/box/corners, -/obj/machinery/power/floodlight, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/storage) "Ex" = ( @@ -6188,10 +6174,7 @@ /turf/open/floor/plating, /area/ship/hallway/central) "HO" = ( -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/machinery/power/apc/auto_name/directional/west, /obj/effect/turf_decal/steeldecal/steel_decals_central7{ pixel_y = 1 @@ -6399,10 +6382,8 @@ /area/ship/hallway/central) "Jj" = ( /obj/effect/turf_decal/spline/fancy/opaque/black, -/obj/structure/closet/wall{ - dir = 4; - name = "spare uniforms"; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "spare uniforms" }, /obj/item/clothing/under/clip/minutemen, /obj/item/clothing/under/clip/minutemen, @@ -6662,7 +6643,7 @@ /turf/open/floor/circuit/green, /area/ship/science/ai_chamber) "KC" = ( -/turf/open/floor/plasteel/stairs/medium, +/turf/open/floor/plasteel/stairs/mid, /area/ship/hallway/central) "KE" = ( /obj/machinery/firealarm/directional/south, @@ -7411,10 +7392,7 @@ /turf/open/floor/plasteel/dark, /area/ship/science/xenobiology) "Ox" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/turf_decal/techfloor{ dir = 6 }, @@ -8486,10 +8464,7 @@ /obj/machinery/camera/autoname{ dir = 10 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel/dark, /area/ship/hangar/port) @@ -8517,10 +8492,7 @@ /turf/open/floor/plating, /area/ship/engineering) "Uw" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/item/storage/box/gum/happiness, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) diff --git a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm index 4ee6ad18467c..6fef103cab50 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm @@ -46,11 +46,7 @@ "ap" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -32; - pixel_y = -6 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plating, /area/ship/hallway/port) "ar" = ( @@ -726,6 +722,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering) "dd" = ( @@ -845,9 +844,7 @@ /obj/effect/turf_decal/corner/opaque/bar{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel, /area/ship/crew) "dr" = ( @@ -917,6 +914,10 @@ /obj/effect/turf_decal/industrial/warning{ dir = 8 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-1" + }, /turf/open/floor/plating, /area/ship/engineering) "dE" = ( @@ -927,10 +928,8 @@ /obj/machinery/camera{ dir = 5 }, -/obj/structure/closet/wall{ - dir = 4; - name = "Emergency Defense Storage"; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Emergency Defense Storage" }, /obj/item/ammo_box/magazine/co9mm{ pixel_x = 5 @@ -1444,10 +1443,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plasteel, /area/ship/hallway/port) "oz" = ( @@ -2205,6 +2201,9 @@ }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ship/engineering) "ID" = ( @@ -2705,10 +2704,8 @@ dir = 4 }, /obj/effect/turf_decal/corner/opaque/lime, -/obj/structure/closet/wall{ - dir = 4; - name = "Radio Storage"; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Radio Storage" }, /obj/item/radio, /obj/item/radio, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm index 46e396a197a8..8c17da5f36ee 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm @@ -1064,9 +1064,9 @@ /turf/open/floor/plasteel/patterned, /area/ship/cargo/port) "ks" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/firecloset/full, +/obj/structure/cable, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/engineering/engine) "ku" = ( @@ -1094,6 +1094,9 @@ "kL" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/station_engineer, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "kM" = ( @@ -2282,6 +2285,9 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "wY" = ( @@ -2503,6 +2509,9 @@ /obj/machinery/atmospherics/pipe/simple/purple/hidden/layer1{ dir = 9 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "zn" = ( @@ -3567,6 +3576,12 @@ /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/ship/maintenance/fore) +"JL" = ( +/obj/structure/closet/firecloset/full, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering/engine) "JV" = ( /obj/structure/table/reinforced, /obj/machinery/fax/nanotrasen, @@ -4030,6 +4045,12 @@ /obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plasteel/tech, /area/ship/engineering/atmospherics) +"Pp" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) "Pr" = ( /obj/structure/sign/warning/fire, /turf/closed/wall/mineral/titanium/nodiagonal, @@ -5389,7 +5410,7 @@ Bi Tb st Tb -SQ +JL Ug hu hu @@ -5475,7 +5496,7 @@ FZ on on Fq -on +Pp lW Ug hu diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index ac76ca6c6ca1..91a2a0a4fc90 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm @@ -352,11 +352,9 @@ /obj/item/clothing/under/rank/cargo/qm, /obj/effect/turf_decal/corner/opaque/yellow/full, /obj/effect/turf_decal/corner/opaque/yellow/diagonal, -/obj/structure/closet/wall{ - dir = 4; +/obj/structure/closet/wall/directional/west{ icon_door = "orange_wall"; - name = "quartermaster's closet"; - pixel_x = -28 + name = "quartermaster's closet" }, /obj/item/clothing/neck/cloak/qm, /obj/item/clothing/under/rank/cargo/qm/skirt, @@ -1192,9 +1190,8 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "eV" = ( -/obj/structure/closet/wall/orange{ - name = "fuel locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "fuel locker" }, /obj/item/stack/sheet/mineral/plasma/fifty, /obj/effect/decal/cleanable/wrapping{ @@ -1458,9 +1455,8 @@ /turf/open/floor/plasteel, /area/ship/hallway/fore) "gb" = ( -/obj/structure/closet/wall/orange{ - name = "Chief Engineer's Locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "Chief Engineer's Locker" }, /obj/item/clothing/under/rank/engineering/chief_engineer, /obj/item/clothing/suit/toggle/hazard, @@ -2578,9 +2574,7 @@ /turf/open/floor/wood, /area/ship/crew/dorm) "ki" = ( -/obj/structure/closet/wall/orange{ - dir = 4; - pixel_x = -28; +/obj/structure/closet/wall/orange/directional/west{ name = "Pilot's Locker" }, /obj/item/clothing/under/rank/security/officer/military/eng, @@ -3761,9 +3755,7 @@ /obj/effect/turf_decal/steeldecal/steel_decals10{ dir = 4 }, -/obj/structure/closet/wall/blue{ - pixel_y = 28 - }, +/obj/structure/closet/wall/blue/directional/north, /obj/item/aicard{ pixel_x = -5 }, @@ -3851,7 +3843,7 @@ "oa" = ( /obj/item/multitool, /obj/item/clothing/glasses/meson/engine/tray, -/obj/item/radio/off, +/obj/item/radio, /obj/item/storage/belt/utility/atmostech, /obj/item/holosign_creator/atmos, /obj/item/analyzer, @@ -3861,10 +3853,8 @@ /obj/item/clothing/suit/fire/atmos, /obj/item/clothing/mask/gas/atmos, /obj/item/clothing/head/hardhat/atmos, -/obj/structure/closet/wall{ - name = "Atmospheric locker"; - dir = 8; - pixel_x = 28 +/obj/structure/closet/wall/directional/east{ + name = "Atmospheric locker" }, /obj/effect/turf_decal/techfloor/orange{ dir = 4 @@ -3959,10 +3949,7 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/directional/west, -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/item/clothing/under/rank/rnd/roboticist, /obj/item/clothing/under/rank/rnd/research_director/turtleneck, /obj/item/clothing/under/rank/rnd/roboticist/skirt, @@ -4151,10 +4138,7 @@ /turf/open/floor/plasteel/elevatorshaft, /area/ship/science/robotics) "pk" = ( -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/east, /obj/item/clothing/under/shorts/cookjorts, /obj/item/clothing/shoes/cookflops, /obj/item/clothing/suit/toggle/chef, @@ -4173,10 +4157,7 @@ }, /obj/effect/decal/cleanable/vomit/old, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/wall/directional/west, /obj/item/reagent_containers/syringe/contraband/fentanyl{ pixel_x = -3; pixel_y = 4 @@ -5019,10 +5000,7 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, @@ -5442,9 +5420,8 @@ pixel_y = 7; pixel_x = 9 }, -/obj/structure/closet/wall{ - name = "Toy Storage"; - pixel_y = 28 +/obj/structure/closet/wall/directional/north{ + name = "Toy Storage" }, /obj/item/toy/figure/engineer{ pixel_x = 7 @@ -5777,7 +5754,6 @@ /obj/effect/decal/cleanable/greenglow{ pixel_y = -10 }, -/obj/machinery/light/directional/east, /obj/structure/cable/yellow{ icon_state = "1-2" }, @@ -5802,7 +5778,6 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 8 }, -/obj/structure/frame/machine, /obj/effect/turf_decal/industrial/warning{ dir = 4; color = "#808080" @@ -5825,9 +5800,8 @@ /turf/open/floor/plasteel/elevatorshaft, /area/ship/science/robotics) "vb" = ( -/obj/structure/closet/wall/orange{ - name = "Pilot's Locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "Pilot's Locker" }, /obj/item/clothing/under/rank/security/officer/military/eng, /obj/item/clothing/suit/jacket/leather/duster, @@ -6366,10 +6340,7 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/effect/turf_decal/techfloor/hole/right{ dir = 4 }, @@ -7528,10 +7499,7 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering) "BJ" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/effect/turf_decal/industrial/warning{ dir = 4 }, @@ -8648,10 +8616,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 9 }, -/obj/structure/closet/wall{ - name = "Utility Closet"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Utility Closet" }, /obj/item/flashlight, /obj/item/flashlight, @@ -8660,52 +8626,31 @@ /obj/item/flashlight, /obj/item/flashlight, /obj/item/flashlight, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 2 }, @@ -9135,10 +9080,7 @@ /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "HG" = ( -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/secure_closet/freezer/wall/directional/west, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/holopad, /obj/effect/turf_decal/siding/white{ @@ -9191,9 +9133,8 @@ /turf/open/floor/wood, /area/ship/crew/dorm/dormtwo) "HI" = ( -/obj/structure/closet/wall/orange{ - name = "Pilot's Locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "Pilot's Locker" }, /obj/item/clothing/under/rank/security/officer/military/eng, /obj/item/clothing/suit/jacket/leather/duster, @@ -9794,9 +9735,6 @@ /obj/effect/turf_decal/techfloor/orange{ dir = 1 }, -/obj/structure/sign/poster/official/build{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, @@ -9809,6 +9747,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "Kp" = ( @@ -10260,11 +10201,9 @@ dir = 10 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = null; - name = "Office Supplies"; - pixel_y = -28 + name = "Office Supplies" }, /obj/item/storage/briefcase, /obj/item/storage/secure/briefcase{ @@ -10507,10 +10446,7 @@ "MM" = ( /obj/effect/turf_decal/corner/transparent/beige/full, /obj/structure/table, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = -5; pixel_y = 10 }, @@ -10590,11 +10526,9 @@ /turf/open/floor/plating, /area/ship/engineering) "MT" = ( -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "red_wall"; - name = "Roboticists Locker"; - pixel_x = 28 + name = "Roboticists Locker" }, /obj/item/clothing/suit/longcoat/roboblack, /obj/item/clothing/suit/longcoat/robowhite, @@ -10717,9 +10651,8 @@ /obj/item/storage/backpack/industrial, /obj/item/clothing/head/beret/eng/hazard, /obj/item/clothing/glasses/meson/engine, -/obj/structure/closet/wall/orange{ - name = "Engineering locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "Engineering locker" }, /obj/effect/decal/cleanable/dirt, /obj/item/storage/belt/utility/full/engi{ @@ -10904,11 +10837,9 @@ /turf/open/floor/plasteel, /area/ship/hallway/fore) "Of" = ( -/obj/structure/closet/wall{ +/obj/structure/closet/wall/directional/east{ icon_door = "orange_wall"; - name = "Mining equipment"; - pixel_x = 29; - dir = 8 + name = "Mining equipment" }, /obj/item/storage/bag/ore, /obj/item/storage/bag/ore, @@ -11786,6 +11717,17 @@ /obj/machinery/light/directional/south, /turf/open/floor/plasteel, /area/ship/hallway/aft) +"Sb" = ( +/obj/structure/sign/poster/official/build{ + pixel_y = -32 + }, +/obj/machinery/light/directional/south, +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/machinery/power/ship_gravity, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "Sc" = ( /obj/structure/cable/yellow{ icon_state = "2-4" @@ -13106,9 +13048,8 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, -/obj/structure/closet/wall/red{ - name = "Ammo locker"; - pixel_y = 28 +/obj/structure/closet/wall/red/directional/north{ + name = "Ammo locker" }, /obj/item/ammo_box/magazine/co9mm{ pixel_x = -7 @@ -13591,10 +13532,8 @@ /obj/item/storage/backpack/ert/janitor{ pixel_x = 6 }, -/obj/structure/closet/wall/blue{ - dir = 8; - name = "Janitorial Closet"; - pixel_x = 28 +/obj/structure/closet/wall/blue/directional/east{ + name = "Janitorial Closet" }, /obj/item/clothing/suit/longcoat/science{ name = "janitor longcoat" @@ -14192,7 +14131,7 @@ Fu WW Mv Ko -hr +Sb hr UJ UJ diff --git a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm index 70be6e034c6c..117d575d366a 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm @@ -227,7 +227,7 @@ pixel_x = -2; pixel_y = -4 }, -/obj/item/radio/off{ +/obj/item/radio{ pixel_x = 6; pixel_y = 7 }, @@ -1639,6 +1639,9 @@ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering) "id" = ( @@ -2237,8 +2240,8 @@ /obj/item/storage/belt/utility{ pixel_y = 6 }, -/obj/item/radio/off, -/obj/item/radio/off{ +/obj/item/radio, +/obj/item/radio{ pixel_x = -3; pixel_y = 3 }, @@ -3227,6 +3230,8 @@ "NL" = ( /obj/effect/decal/cleanable/blood/splatter, /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/ship_gravity, +/obj/structure/cable, /turf/open/floor/plating, /area/ship/engineering) "NN" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm index d14755d94d3a..735f484525f0 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm @@ -108,10 +108,7 @@ /turf/open/floor/plasteel/white, /area/ship/crew/toilet) "aV" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/structure/cable{ icon_state = "1-8" }, @@ -1520,6 +1517,10 @@ /obj/structure/railing{ dir = 8 }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/ship_gravity, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/port) "iy" = ( @@ -1819,9 +1820,7 @@ /turf/open/floor/mineral/plastitanium/red/brig, /area/ship/hallway/central) "km" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -30; +/obj/structure/closet/wall/blue/directional/west{ name = "Space Suits"; desc = "Contains supplies for space walking." }, @@ -2101,10 +2100,7 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "lA" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 32 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/machinery/light/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/crew/dorm/dormthree) @@ -2672,6 +2668,9 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/port) "pe" = ( @@ -3567,10 +3566,7 @@ /turf/open/floor/plating, /area/ship/storage/eva) "uO" = ( -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/structure/cable{ icon_state = "1-2" }, @@ -3750,9 +3746,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/electrical) "wk" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/structure/cable{ icon_state = "4-8" }, @@ -4515,9 +4509,7 @@ /turf/open/floor/plasteel/dark, /area/ship/security/armory) "AP" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -30; +/obj/structure/closet/wall/blue/directional/west{ name = "Space Suits"; desc = "Contains supplies for space walking." }, @@ -6395,10 +6387,7 @@ /obj/structure/railing/corner{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/effect/turf_decal/corner/opaque/orange/border{ dir = 8 }, @@ -7461,9 +7450,7 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Rm" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/structure/cable{ icon_state = "4-8" }, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm index b9f1fe3ee680..64d506147d56 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm @@ -3,12 +3,10 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_door = "sec_wall"; icon_state = "sec_wall"; name = "gun locker"; - pixel_x = -32; req_access_txt = "19" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -1169,6 +1167,10 @@ sortTypes = list(4); tag = "Engineering" }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/firealarm/directional/east, /turf/open/floor/plasteel/patterned/grid, /area/ship/engineering) "ir" = ( @@ -1330,7 +1332,9 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/firealarm/directional/south, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/patterned/grid, /area/ship/engineering) "jo" = ( @@ -2185,10 +2189,8 @@ /turf/open/floor/plasteel/white, /area/ship/science) "oE" = ( -/obj/structure/closet/wall{ - dir = 1; - icon_door = "grey_wall"; - pixel_y = -28 +/obj/structure/closet/wall/directional/south{ + icon_door = "grey_wall" }, /obj/item/clothing/under/color/grey, /obj/item/clothing/under/color/grey, @@ -2239,9 +2241,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/engineering/atmospherics) "oQ" = ( @@ -2545,10 +2545,7 @@ dir = 8 }, /obj/effect/turf_decal/corner/transparent/neutral, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/plasteel, /area/ship/hallway/central) "qw" = ( @@ -2922,10 +2919,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/plasteel, /area/ship/crew/cryo) "sJ" = ( @@ -3057,9 +3051,7 @@ /obj/effect/turf_decal/corner/transparent/neutral{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel, /area/ship/hallway/central) "tO" = ( @@ -4006,7 +3998,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 4 }, /area/ship/cargo) @@ -5972,6 +5964,12 @@ }, /turf/open/floor/plasteel, /area/ship/cargo) +"MT" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable, +/obj/effect/turf_decal/industrial/warning/corner, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/engineering) "Nd" = ( /obj/structure/disposalpipe/segment{ dir = 2 @@ -8183,7 +8181,7 @@ hr vx XK jn -WU +MT VV Aj VV diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 1a876c27135c..4ce3ae890503 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -381,9 +381,7 @@ /turf/open/floor/plating, /area/ship/hallway/central) "dK" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -441,22 +439,13 @@ /turf/template_noop, /area/template_noop) "eo" = ( -/obj/structure/rack, -/obj/item/flashlight/seclite{ - pixel_x = 4; - pixel_y = -1 - }, -/obj/item/gps{ - pixel_y = 10; - pixel_x = -5 - }, -/obj/item/kitchen/knife/combat/survival{ - pixel_y = 6; - pixel_x = 5 - }, /obj/effect/turf_decal/techfloor{ dir = 4 }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/ship_gravity, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "er" = ( @@ -947,9 +936,7 @@ /turf/open/floor/plasteel/dark, /area/ship/security) "iI" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 }, @@ -1495,10 +1482,7 @@ /turf/open/floor/plasteel/white, /area/ship/hallway/port) "pf" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -1536,14 +1520,43 @@ /area/ship/crew/toilet) "ps" = ( /obj/structure/closet/secure_closet/lp/engineer, -/obj/item/clothing/head/welding, -/obj/item/holosign_creator/engineering, -/obj/item/holosign_creator/atmos, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/glasses/meson/gar, -/obj/item/crowbar/power, -/obj/item/clothing/shoes/magboots, /obj/machinery/light/dim/directional/north, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = -9 + }, +/obj/item/crowbar/power{ + pixel_y = 3 + }, +/obj/item/clothing/shoes/magboots{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/holosign_creator/engineering{ + pixel_y = 6; + pixel_x = -5 + }, +/obj/item/holosign_creator/atmos{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/flashlight/seclite{ + pixel_x = 2; + pixel_y = 15 + }, +/obj/item/gps{ + pixel_y = 9; + pixel_x = -12 + }, +/obj/item/kitchen/knife/combat/survival{ + pixel_y = 6; + pixel_x = 5 + }, +/obj/item/clothing/head/welding{ + pixel_y = -9 + }, +/obj/item/clothing/glasses/meson/gar{ + pixel_y = 8 + }, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "pA" = ( @@ -2668,10 +2681,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/plasteel/white, /area/ship/hallway/central) "BY" = ( @@ -2979,6 +2989,9 @@ /obj/effect/turf_decal/siding/yellow{ dir = 5 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "FQ" = ( @@ -3043,10 +3056,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -30 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/white, /area/ship/hallway/central) "Gn" = ( @@ -4015,10 +4025,7 @@ /turf/open/floor/plasteel/white, /area/ship/hallway/port) "RA" = ( -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm index 5ec1a75727d5..803c5f0ea0c2 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm @@ -2164,10 +2164,8 @@ /turf/open/floor/plasteel/dark, /area/ship/cargo/office) "qS" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ name = "The Captain's Personal Medicine Cabinet And Soap Holder"; - pixel_x = -28; req_access_txt = "20" }, /obj/item/soap/nanotrasen, @@ -2385,6 +2383,10 @@ /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-1" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engine) "sU" = ( @@ -3700,10 +3702,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /turf/open/floor/carpet/nanoweave, /area/ship/hallway/central) "Dy" = ( @@ -5672,9 +5671,7 @@ /turf/open/floor/engine, /area/ship/engineering/atmospherics) "Wy" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/carpet/nanoweave, /area/ship/hallway/central) "Wz" = ( diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index f797f25d2f95..e39ca5bb9654 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -239,10 +239,8 @@ pixel_x = 7; pixel_y = -5 }, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; - dir = 4; - pixel_x = -28; name = "equipment locker" }, /obj/effect/turf_decal/corner/opaque/purple/border{ @@ -292,6 +290,13 @@ }, /turf/open/floor/plasteel/sepia, /area/ship/crew/dorm/dormthree) +"ck" = ( +/obj/effect/turf_decal/borderfloorblack{ + dir = 1 + }, +/obj/structure/tank_dispenser, +/turf/open/floor/plasteel/mono/dark, +/area/ship/construction) "cs" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable{ @@ -701,8 +706,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/obj/item/radio/intercom/directional/east, -/obj/structure/tank_dispenser, +/obj/structure/cable, +/obj/machinery/power/ship_gravity, /turf/open/floor/plating, /area/ship/engineering) "gx" = ( @@ -786,11 +791,9 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = null; - name = "Uniforms"; - pixel_y = -28 + name = "Uniforms" }, /obj/item/clothing/under/gezena{ pixel_y = -5; @@ -983,10 +986,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/lime{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/structure/cable{ icon_state = "1-2" }, @@ -1175,9 +1175,8 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "jt" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "cargo_wall"; - pixel_y = 28; name = "Engineer's Locker" }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -1512,10 +1511,7 @@ /turf/open/floor/plasteel/sepia, /area/ship/crew/dorm/dormthree) "na" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/machinery/light/directional/north, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) @@ -1536,9 +1532,7 @@ /turf/open/floor/plating, /area/ship/engineering) "nm" = ( -/obj/structure/closet/wall/blue{ - dir = 4; - pixel_x = -28; +/obj/structure/closet/wall/blue/directional/west{ name = "Spare EVA Closet" }, /obj/effect/turf_decal/corner/opaque/lime/mono, @@ -1729,9 +1723,7 @@ /obj/effect/turf_decal/siding/wood/end{ dir = 4 }, -/obj/structure/closet/wall{ - dir = 8; - pixel_x = 28; +/obj/structure/closet/wall/directional/east{ name = "Cleaning Station" }, /obj/machinery/computer/helm/viewscreen/directional/south, @@ -1990,9 +1982,8 @@ /turf/closed/wall/mineral/titanium/exterior, /area/ship/construction) "qZ" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "cargo_wall"; - pixel_y = 28; name = "Engineer's Locker" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, @@ -2068,10 +2059,8 @@ /turf/open/floor/plasteel/tech, /area/ship/crew/office) "rN" = ( -/obj/structure/closet/secure_closet/wall{ - icon_state = "secure_wall"; - dir = 8; - pixel_x = 26 +/obj/structure/closet/secure_closet/wall/directional/east{ + icon_state = "secure_wall" }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable{ @@ -2125,10 +2114,7 @@ /obj/effect/turf_decal/corner_steel_grid{ dir = 10 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -27 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, @@ -2218,10 +2204,7 @@ /obj/structure/railing{ dir = 6 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/mono/dark, /area/ship/bridge) "ty" = ( @@ -2314,10 +2297,8 @@ pixel_x = 11; pixel_y = -5 }, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; - dir = 4; - pixel_x = -28; name = "equipment locker" }, /obj/structure/window/reinforced{ @@ -3033,11 +3014,9 @@ /obj/effect/turf_decal/corner_steel_grid{ dir = 9 }, -/obj/structure/closet/wall{ - dir = 2; +/obj/structure/closet/wall/directional/north{ icon_door = null; - name = "headset storage"; - pixel_y = 28 + name = "headset storage" }, /obj/item/encryptionkey/pgf{ pixel_y = -5; @@ -3412,9 +3391,7 @@ /obj/item/towel, /obj/item/towel, /obj/item/towel, -/obj/structure/closet/wall{ - dir = 4; - pixel_x = -28; +/obj/structure/closet/wall/directional/west{ name = "towel closet" }, /turf/open/floor/plastic, @@ -3707,10 +3684,7 @@ /obj/effect/turf_decal/spline/fancy/opaque/lime{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/structure/cable{ icon_state = "1-2" }, @@ -3730,11 +3704,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = null; - name = "Uniforms"; - pixel_y = -28 + name = "Uniforms" }, /obj/item/clothing/gloves/gezena{ pixel_x = -5; @@ -4462,10 +4434,7 @@ /obj/effect/turf_decal/corner_steel_grid{ dir = 10 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, @@ -4481,10 +4450,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plating, /area/ship/engineering) "KB" = ( @@ -4711,13 +4677,10 @@ /turf/open/floor/plasteel/tech, /area/ship/crew/dorm/dormtwo) "MC" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/east{ icon_door = "med_wall"; name = "Doctor's Locker"; - pixel_y = 0; - req_access_txt = "5"; - dir = 8; - pixel_x = 28 + req_access_txt = "5" }, /obj/item/clothing/gloves/gezena{ pixel_x = 3; @@ -4935,6 +4898,7 @@ pixel_x = 6; pixel_y = 2 }, +/obj/item/radio/intercom/directional/south, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Nz" = ( @@ -5269,10 +5233,8 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "PP" = ( -/obj/structure/closet/wall{ - dir = 4; +/obj/structure/closet/wall/directional/west{ icon_state = "emergency_wall"; - pixel_x = -28; name = "Spare Internals Closet" }, /obj/effect/turf_decal/corner/opaque/lime/mono, @@ -5417,10 +5379,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -27 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plating, /area/ship/engineering) @@ -5574,10 +5533,7 @@ dir = 10 }, /obj/machinery/light/directional/north, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/engine/hull/reinforced/interior, /area/ship/construction) "RX" = ( @@ -6359,10 +6315,8 @@ /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/central) "Xz" = ( -/obj/structure/closet/secure_closet/wall{ - icon_state = "secure_wall"; - dir = 8; - pixel_x = 26 +/obj/structure/closet/secure_closet/wall/directional/east{ + icon_state = "secure_wall" }, /turf/open/floor/plastic, /area/ship/crew/toilet) @@ -6642,10 +6596,8 @@ /turf/open/floor/plasteel/tech, /area/ship/crew/dorm/dormthree) "ZH" = ( -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "cargo_wall"; - pixel_y = -28; - dir = 1; name = "Engineering Equipment" }, /obj/item/storage/box/metalfoam{ @@ -7597,7 +7549,7 @@ Sh vh mL cY -xO +ck TO xz xz diff --git a/_maps/shuttles/pirate/pirate_ember.dmm b/_maps/shuttles/pirate/pirate_ember.dmm index 195b7268b8aa..2ebdfc9313a1 100644 --- a/_maps/shuttles/pirate/pirate_ember.dmm +++ b/_maps/shuttles/pirate/pirate_ember.dmm @@ -205,10 +205,7 @@ /area/ship/hallway/central) "aZ" = ( /obj/effect/decal/cleanable/oil, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, @@ -1414,10 +1411,8 @@ /turf/open/floor/plasteel, /area/ship/crew/canteen) "hq" = ( -/obj/structure/closet/wall{ - name = "Atmospheric locker"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/directional/west{ + name = "Atmospheric locker" }, /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, /obj/item/clothing/suit/fire/atmos, @@ -1464,10 +1459,7 @@ /turf/open/floor/plating/rust, /area/ship/medical) "hy" = ( -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/wrapping, /obj/item/kirbyplants/random, @@ -1996,6 +1988,20 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/closet/crate/engineering, +/obj/item/stack/sheet/metal/fifty{ + pixel_y = 2 + }, +/obj/item/stack/sheet/metal/fifty{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/stack/sheet/mineral/plastitanium/fifty{ + pixel_x = -3 + }, +/obj/item/stack/sheet/mineral/plastitanium/twenty{ + pixel_y = 2 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering/electrical) "kc" = ( @@ -2423,10 +2429,8 @@ }, /area/ship/engineering/electrical) "mi" = ( -/obj/structure/closet/wall/red{ - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "armory locker"; - pixel_x = -28; req_one_access_txt = "1" }, /obj/effect/turf_decal/techfloor{ @@ -2722,11 +2726,9 @@ /area/ship/maintenance/fore) "nx" = ( /obj/effect/turf_decal/techfloor, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = "yellow_wall"; - name = "engineering closet"; - pixel_y = -28 + name = "engineering closet" }, /obj/item/clothing/suit/toggle/industrial, /obj/item/clothing/under/utility, @@ -2849,10 +2851,8 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, -/obj/structure/closet/wall/red{ - dir = 1; - name = "Firearm Locker"; - pixel_y = -28 +/obj/structure/closet/wall/red/directional/south{ + name = "Firearm Locker" }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/steeldecal/steel_decals_central2{ @@ -3301,9 +3301,7 @@ /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) "qr" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/item/seeds/berry{ pixel_x = -8; pixel_y = 6 @@ -3339,10 +3337,8 @@ pixel_x = 1; pixel_y = -4 }, -/obj/structure/closet/wall/blue{ - dir = 4; - name = "Component Storage"; - pixel_x = -28 +/obj/structure/closet/wall/blue/directional/west{ + name = "Component Storage" }, /obj/item/stack/cable_coil/blue, /obj/item/stack/cable_coil/orange{ @@ -3565,10 +3561,7 @@ "rJ" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/wall/directional/south, /obj/item/reagent_containers/syringe/contraband/fentanyl{ pixel_x = -3; pixel_y = 4 @@ -3609,10 +3602,7 @@ /turf/closed/wall/rust, /area/ship/crew/canteen) "rQ" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ship/hallway/central) @@ -3707,19 +3697,9 @@ /obj/structure/cable{ icon_state = "2-9" }, -/obj/item/stack/sheet/metal/fifty{ - pixel_y = 2 - }, -/obj/item/stack/sheet/metal/fifty{ - pixel_y = 6; - pixel_x = 6 - }, -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/mineral/plastitanium/fifty{ - pixel_x = -3 - }, -/obj/item/stack/sheet/mineral/plastitanium/twenty{ - pixel_y = 2 +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-2" }, /turf/open/floor/plasteel/tech, /area/ship/engineering/electrical) @@ -4545,6 +4525,7 @@ /obj/effect/turf_decal/industrial/warning{ dir = 4 }, +/obj/machinery/power/ship_gravity/unanchored, /turf/open/floor/plating/rust, /area/ship/hallway/central) "vY" = ( @@ -4684,9 +4665,7 @@ /area/ship/maintenance/central) "wC" = ( /obj/structure/catwalk/over/plated_catwalk, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plating, /area/ship/hallway/central) @@ -4732,10 +4711,7 @@ /obj/effect/turf_decal/trimline/transparent/lightgrey/line{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/structure/cable{ icon_state = "1-2" }, @@ -5449,10 +5425,8 @@ /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) "AL" = ( -/obj/structure/closet/wall/orange{ - dir = 8; - name = "Engineering locker"; - pixel_x = 28 +/obj/structure/closet/wall/orange/directional/east{ + name = "Engineering locker" }, /obj/effect/decal/cleanable/robot_debris/gib, /obj/item/clothing/under/utility, @@ -5863,9 +5837,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall{ - dir = 8; - pixel_x = 28; +/obj/structure/closet/wall/directional/east{ name = "Uniform Closet" }, /obj/item/clothing/neck/shemagh, @@ -6098,9 +6070,7 @@ /obj/effect/turf_decal/techfloor/corner{ dir = 4 }, -/obj/structure/closet/wall/blue{ - dir = 8; - pixel_x = 28; +/obj/structure/closet/wall/blue/directional/east{ name = "Bridge Officer's locker" }, /obj/item/clothing/shoes/workboots, @@ -6839,11 +6809,9 @@ /area/ship/maintenance/fore) "GF" = ( /obj/effect/turf_decal/techfloor, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = "yellow_wall"; - name = "engineering closet"; - pixel_y = -28 + name = "engineering closet" }, /obj/item/clothing/suit/toggle/industrial, /obj/item/clothing/under/utility, @@ -7747,92 +7715,54 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall{ - name = "Utility Closet"; - pixel_y = -28; - dir = 1 +/obj/structure/closet/wall/directional/south{ + name = "Utility Closet" }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, -/obj/item/radio{ - desc = "An old handheld radio. You could use it, if you really wanted to."; - icon_state = "radio"; - name = "old radio"; +/obj/item/radio/old{ pixel_x = 2; pixel_y = 9 }, @@ -8208,9 +8138,7 @@ /obj/effect/turf_decal/techfloor/corner{ dir = 4 }, -/obj/structure/closet/wall/blue{ - dir = 8; - pixel_x = 28; +/obj/structure/closet/wall/blue/directional/east{ name = "Bridge Officer's locker" }, /obj/item/clothing/shoes/workboots, @@ -8985,10 +8913,8 @@ /turf/open/floor/plasteel, /area/ship/hallway/central) "Pn" = ( -/obj/structure/closet/wall/red{ - name = "Ammo locker"; - dir = 4; - pixel_x = -28 +/obj/structure/closet/wall/red/directional/west{ + name = "Ammo locker" }, /obj/effect/turf_decal/techfloor{ dir = 8 @@ -9278,10 +9204,7 @@ "QH" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering/communications) @@ -9915,10 +9838,7 @@ /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/machinery/advanced_airlock_controller{ pixel_y = 26 }, diff --git a/_maps/shuttles/pirate/pirate_libertatia.dmm b/_maps/shuttles/pirate/pirate_libertatia.dmm index e0c0905371ad..2fe2cd9ddb20 100644 --- a/_maps/shuttles/pirate/pirate_libertatia.dmm +++ b/_maps/shuttles/pirate/pirate_libertatia.dmm @@ -424,10 +424,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 5 }, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "armory locker"; - pixel_x = 28; req_one_access_txt = "1" }, /turf/open/floor/mineral/plastitanium, @@ -443,10 +441,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/structure/closet/wall/red{ - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "suit locker"; - pixel_x = -28; req_one_access_txt = "1" }, /turf/open/floor/mineral/plastitanium, @@ -501,10 +497,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "armory locker"; - pixel_x = 28; req_one_access_txt = "1" }, /obj/item/gun/ballistic/shotgun/doublebarrel{ @@ -535,10 +529,8 @@ /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, -/obj/structure/closet/wall/red{ - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "suit locker"; - pixel_x = -28; req_one_access_txt = "1" }, /turf/open/floor/mineral/plastitanium, @@ -585,10 +577,8 @@ /obj/effect/turf_decal/industrial/warning{ dir = 6 }, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "armory locker"; - pixel_x = 28; req_one_access_txt = "1" }, /turf/open/floor/mineral/plastitanium, @@ -659,9 +649,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/machinery/advanced_airlock_controller{ pixel_y = -25 }, @@ -900,10 +888,8 @@ /obj/item/clothing/under/costume/sailor, /obj/item/clothing/under/costume/sailor, /obj/item/clothing/under/costume/sailor, -/obj/structure/closet/wall{ - dir = 8; - icon_door = "grey_wall"; - pixel_x = 28 +/obj/structure/closet/wall/directional/east{ + icon_door = "grey_wall" }, /turf/open/floor/pod/light, /area/ship/crew) @@ -1139,10 +1125,7 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/pod/light, /area/ship/cargo) "Hh" = ( @@ -1312,10 +1295,7 @@ /obj/structure/cable/yellow, /obj/machinery/power/terminal, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -1402,10 +1382,7 @@ /obj/item/wrench, /obj/effect/decal/cleanable/oil, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /turf/open/floor/plating, /area/ship/hallway/starboard) "OA" = ( @@ -1790,6 +1767,7 @@ "WC" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/power/ship_gravity/unanchored, /turf/open/floor/mineral/plastitanium, /area/ship/cargo) "WK" = ( diff --git a/_maps/shuttles/pirate/pirate_noderider.dmm b/_maps/shuttles/pirate/pirate_noderider.dmm index c10e072892df..10c591d8f52f 100644 --- a/_maps/shuttles/pirate/pirate_noderider.dmm +++ b/_maps/shuttles/pirate/pirate_noderider.dmm @@ -294,10 +294,7 @@ /obj/item/storage/box/handcuffs, /obj/item/storage/box/handcuffs, /obj/item/storage/box/handcuffs, -/obj/structure/closet/wall/red{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/wall/red/directional/east, /obj/item/storage/backpack/duffelbag/syndie/c4, /turf/open/floor/plasteel/tech, /area/ship/security/armory) @@ -413,6 +410,12 @@ dir = 1 }, /obj/effect/turf_decal/industrial/caution, +/obj/structure/closet/secure_closet/engineering_electrical{ + req_access = null + }, +/obj/structure/cable{ + icon_state = "5-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "fD" = ( @@ -1021,8 +1024,7 @@ /turf/open/floor/plating/airless, /area/ship/external) "qh" = ( -/obj/structure/closet/wall/red{ - pixel_y = 28; +/obj/structure/closet/wall/red/directional/north{ name = "weapons locker" }, /obj/item/gun/energy/e_gun/smg, @@ -1188,10 +1190,8 @@ /obj/structure/sign/poster/contraband/cybersun_borg{ pixel_y = 32 }, -/obj/structure/closet/wall/white{ - dir = 4; - name = "First Aid"; - pixel_x = -28 +/obj/structure/closet/wall/white/directional/west{ + name = "First Aid" }, /obj/item/storage/backpack/duffelbag/med/surgery, /obj/item/storage/toolbox/mechanical, @@ -1291,8 +1291,7 @@ /turf/closed/wall/r_wall/syndicate, /area/ship/maintenance/central) "tF" = ( -/obj/structure/closet/wall/red{ - pixel_y = 28; +/obj/structure/closet/wall/red/directional/north{ name = "armor locker" }, /obj/item/clothing/suit/armor/riot, @@ -1477,9 +1476,7 @@ /area/ship/external) "xl" = ( /obj/structure/table, -/obj/structure/closet/wall/red{ - pixel_x = -28; - dir = 4; +/obj/structure/closet/wall/red/directional/west{ name = "captain's locker" }, /obj/effect/turf_decal/spline/fancy/opaque/black{ @@ -2539,9 +2536,7 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/central) "MJ" = ( -/obj/structure/closet/wall{ - dir = 1; - pixel_y = -28; +/obj/structure/closet/wall/directional/south{ name = "node uniforms" }, /obj/item/clothing/under/utility, @@ -2964,9 +2959,6 @@ /obj/structure/railing/corner{ layer = 3.1 }, -/obj/structure/closet/secure_closet/engineering_electrical{ - req_access = null - }, /obj/effect/turf_decal/spline/fancy/opaque/black/corner, /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -2974,6 +2966,10 @@ /obj/effect/turf_decal/corner_techfloor_gray{ dir = 8 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "Vb" = ( diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index e5f06babb733..6d1a743dc6a0 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -30,6 +30,9 @@ /obj/structure/cable{ icon_state = "1-10" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "al" = ( @@ -207,9 +210,7 @@ /turf/open/floor/wood/maple, /area/ship/hallway/central) "cg" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/structure/cable{ icon_state = "4-8" }, @@ -815,10 +816,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 10 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/effect/turf_decal/trimline/opaque/red/arrow_cw{ dir = 8 }, @@ -850,9 +848,7 @@ /turf/open/floor/wood/ebony, /area/ship/hallway/port) "iT" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/effect/turf_decal/siding/brown{ dir = 1 }, @@ -913,12 +909,12 @@ /turf/open/floor/plasteel/white, /area/ship/medical) "jr" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "jv" = ( -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/structure/cable{ icon_state = "4-8" }, @@ -1887,10 +1883,7 @@ /turf/open/floor/grass/ship/jungle, /area/ship/bridge) "wE" = ( -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /turf/open/floor/grass/ship/jungle, /area/ship/roumain) "xe" = ( @@ -2322,10 +2315,7 @@ /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "Cr" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/grass/ship/jungle, /area/ship/roumain) "Cx" = ( @@ -2396,9 +2386,7 @@ /turf/open/floor/plating, /area/ship/hallway/port) "CF" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/effect/turf_decal/siding/brown{ dir = 1 }, @@ -2662,9 +2650,7 @@ /turf/open/floor/wood/ebony, /area/ship/storage) "HB" = ( -/obj/structure/closet/wall/blue{ - dir = 8; - pixel_x = 28; +/obj/structure/closet/wall/blue/directional/east{ name = "Spare EVA Closet" }, /obj/item/clothing/suit/space/eva{ @@ -2695,10 +2681,7 @@ /turf/open/floor/wood/mahogany, /area/ship/bridge) "Ii" = ( -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/effect/turf_decal/spline/fancy/wood{ dir = 4 }, @@ -4159,10 +4142,7 @@ /turf/open/floor/wood/mahogany, /area/ship/hallway/starboard) "ZI" = ( -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/effect/turf_decal/spline/fancy/wood{ dir = 4 }, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index 9cceb17c5dea..c790d8a67b7c 100644 --- a/_maps/shuttles/solgov/solgov_chronicle.dmm +++ b/_maps/shuttles/solgov/solgov_chronicle.dmm @@ -51,6 +51,9 @@ dir = 4 }, /obj/machinery/meter/atmos/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/engine) "aB" = ( @@ -3127,8 +3130,7 @@ /turf/open/floor/engine/n2, /area/ship/engineering/engine) "Ez" = ( -/obj/structure/closet/secure_closet/wall{ - pixel_y = 28; +/obj/structure/closet/secure_closet/wall/directional/north{ name = "bridge supplies" }, /obj/item/binoculars, @@ -3333,10 +3335,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/machinery/camera/autoname{ dir = 4 }, @@ -3866,6 +3865,10 @@ /obj/effect/turf_decal/techfloor{ dir = 1 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering/engine) "LE" = ( @@ -3896,10 +3899,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/wood, /area/ship/bridge) "Me" = ( @@ -3942,6 +3942,9 @@ dir = 4 }, /obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/white, /area/ship/engineering/engine) "MT" = ( @@ -3972,10 +3975,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plasteel/white, /area/ship/engineering/engine) "Nm" = ( diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index e42972d85eed..21331c0bf281 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -400,6 +400,9 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/white, /area/ship/engineering) "dm" = ( @@ -1051,10 +1054,7 @@ /obj/effect/turf_decal/spline/fancy/transparent/solgovblue{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/patterned, /area/ship/cargo) @@ -1308,10 +1308,7 @@ /obj/item/clothing/under/solgov/formal/skirt, /obj/item/clothing/suit/solgov/suit, /obj/structure/table/wood, -/obj/structure/closet/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/wall/directional/east, /obj/machinery/button/door{ pixel_y = -21; pixel_x = -8; @@ -1695,10 +1692,7 @@ /obj/item/clothing/under/solgov/formal/skirt, /obj/item/clothing/suit/solgov/suit, /obj/structure/table/wood, -/obj/structure/closet/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/wall/directional/east, /obj/item/clothing/suit/hooded/wintercoat/solgov, /obj/item/clothing/suit/hooded/wintercoat/solgov, /turf/open/floor/wood/walnut, @@ -1722,7 +1716,7 @@ pixel_y = 0; pixel_x = -26 }, -/turf/open/floor/plasteel/stairs/wood{ +/turf/open/floor/plasteel/stairs/wood/left{ dir = 1 }, /area/ship/bridge) @@ -2441,7 +2435,7 @@ /area/ship/crew/canteen/kitchen) "qe" = ( /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/wood{ +/turf/open/floor/plasteel/stairs/wood/right{ dir = 1 }, /area/ship/bridge) @@ -2566,9 +2560,7 @@ dir = 8 }, /obj/structure/table/wood, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/item/radio, /obj/item/radio, /obj/item/radio, @@ -3712,9 +3704,8 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/wood{ - dir = 8; - color = "#D5A66E" +/turf/open/floor/plasteel/stairs/wood/birch{ + dir = 8 }, /area/ship/crew/dorm/dormthree) "xF" = ( @@ -4416,6 +4407,9 @@ }, /obj/machinery/light/directional/west, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "Ct" = ( @@ -4619,6 +4613,10 @@ /obj/structure/sign/poster/solgov/random{ pixel_y = 32 }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "DF" = ( @@ -5827,9 +5825,7 @@ /obj/effect/turf_decal/techfloor{ dir = 1 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/white, /area/ship/hallway/starboard) @@ -6259,10 +6255,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /turf/open/floor/plasteel/tech, /area/ship/hallway/starboard) "PB" = ( @@ -6307,7 +6300,7 @@ /obj/structure/railing/wood{ dir = 4 }, -/turf/open/floor/plasteel/stairs/wood, +/turf/open/floor/plasteel/stairs/wood/right, /area/ship/bridge) "Qt" = ( /obj/machinery/power/terminal{ @@ -6400,9 +6393,7 @@ /obj/effect/turf_decal/spline/fancy/transparent/solgovblue{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /turf/open/floor/plasteel/patterned, /area/ship/cargo) "QT" = ( @@ -6470,7 +6461,7 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/wood, +/turf/open/floor/plasteel/stairs/wood/left, /area/ship/bridge) "Rh" = ( /obj/effect/turf_decal/techfloor, @@ -6900,9 +6891,8 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/stairs/wood{ - dir = 8; - color = "#543C30" +/turf/open/floor/plasteel/stairs/wood/walnut{ + dir = 8 }, /area/ship/crew/dorm/dormtwo) "TV" = ( @@ -6933,6 +6923,9 @@ }, /obj/machinery/light/directional/north, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "Ul" = ( diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index b4ca4f13cb07..ba1181c14daa 100644 --- a/_maps/shuttles/solgov/solgov_paracelsus.dmm +++ b/_maps/shuttles/solgov/solgov_paracelsus.dmm @@ -1160,9 +1160,7 @@ /turf/template_noop, /area/template_noop) "lD" = ( -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/item/radio, /obj/item/radio, /obj/item/radio, @@ -1891,8 +1889,7 @@ /obj/structure/railing/wood{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - pixel_y = 28; +/obj/structure/closet/secure_closet/wall/directional/north{ name = "navigational supplies"; req_access_txt = "19" }, @@ -2025,6 +2022,7 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible/layer2{ dir = 4 }, +/obj/machinery/airalarm/directional/east, /turf/open/floor/plasteel/dark, /area/ship/maintenance/starboard) "ul" = ( @@ -2450,7 +2448,8 @@ /area/ship/hallway/starboard) "xU" = ( /obj/effect/turf_decal/techfloor, -/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/obj/machinery/power/ship_gravity, /turf/open/floor/plasteel/tech/techmaint, /area/ship/maintenance/starboard) "xX" = ( @@ -2866,11 +2865,9 @@ /obj/item/ammo_box/magazine/pistol556mm, /obj/item/ammo_box/magazine/pistol556mm, /obj/item/ammo_box/magazine/pistol556mm, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "firearms locker"; - pixel_y = -28; req_access_txt = "19" }, /turf/open/floor/carpet/royalblue, @@ -3540,6 +3537,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/maintenance/starboard) "IO" = ( @@ -4316,10 +4316,7 @@ /area/ship/cargo/office) "Pp" = ( /obj/structure/table/wood, -/obj/structure/closet/secure_closet/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/wall/directional/east, /obj/item/clipboard, /obj/item/paper_bin/carbon, /obj/item/clothing/accessory/waistcoat/solgov, @@ -4552,6 +4549,9 @@ dir = 8; name = "Air to Distro" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/maintenance/starboard) "RA" = ( diff --git a/_maps/shuttles/subshuttles/inteq_anvil.dmm b/_maps/shuttles/subshuttles/inteq_anvil.dmm index f14f1e64d7fd..5e591774e259 100644 --- a/_maps/shuttles/subshuttles/inteq_anvil.dmm +++ b/_maps/shuttles/subshuttles/inteq_anvil.dmm @@ -46,10 +46,7 @@ }, /obj/effect/landmark/ert_shuttle_spawn, /obj/machinery/light/directional/east, -/obj/structure/closet/emcloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/emcloset/wall/directional/south, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, /turf/open/floor/plasteel/dark, diff --git a/_maps/shuttles/subshuttles/nanotrasen_ancon.dmm b/_maps/shuttles/subshuttles/nanotrasen_ancon.dmm index 7176477bab9c..1238678040f8 100644 --- a/_maps/shuttles/subshuttles/nanotrasen_ancon.dmm +++ b/_maps/shuttles/subshuttles/nanotrasen_ancon.dmm @@ -149,9 +149,7 @@ /turf/open/floor/plasteel/white, /area/ship/bridge) "vV" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/item/clothing/suit/space/eva, /obj/item/clothing/suit/space/eva, /obj/item/clothing/suit/space/eva, diff --git a/_maps/shuttles/subshuttles/pgf_nail.dmm b/_maps/shuttles/subshuttles/pgf_nail.dmm index 80534adfc514..9a5224dc4573 100644 --- a/_maps/shuttles/subshuttles/pgf_nail.dmm +++ b/_maps/shuttles/subshuttles/pgf_nail.dmm @@ -194,9 +194,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/tech, /area/ship/bridge) "y" = ( diff --git a/_maps/shuttles/subshuttles/syndicate_runner.dmm b/_maps/shuttles/subshuttles/syndicate_runner.dmm index 21e4f84a10e5..100a0d234000 100644 --- a/_maps/shuttles/subshuttles/syndicate_runner.dmm +++ b/_maps/shuttles/subshuttles/syndicate_runner.dmm @@ -188,10 +188,7 @@ /obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ dir = 1 }, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/oxygen, diff --git a/_maps/shuttles/syndicate/syndicate_aegis.dmm b/_maps/shuttles/syndicate/syndicate_aegis.dmm index f5b0e87a6b1b..e879c978eef0 100644 --- a/_maps/shuttles/syndicate/syndicate_aegis.dmm +++ b/_maps/shuttles/syndicate/syndicate_aegis.dmm @@ -32,10 +32,8 @@ }, /obj/item/clothing/neck/stripedredscarf, /obj/item/clothing/neck/tie/red, -/obj/structure/closet/wall/red{ - dir = 8; +/obj/structure/closet/wall/red/directional/east{ name = "Captain's Locker"; - pixel_x = 30; req_access_txt = "20" }, /obj/item/storage/belt/sabre, @@ -84,10 +82,9 @@ /obj/item/shovel/spade, /obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, -/obj/structure/closet/wall/white{ +/obj/structure/closet/wall/white/directional/north{ color = "#50C878"; - name = "Produce Production Locker"; - pixel_y = 30 + name = "Produce Production Locker" }, /obj/item/storage/box/disks_plantgene, /obj/item/clothing/gloves/botanic_leather, @@ -128,11 +125,9 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "orange_wall"; - name = "Mining equipment"; - pixel_x = 29 + name = "Mining equipment" }, /obj/item/gps/mining, /obj/item/pickaxe, @@ -236,9 +231,8 @@ /obj/item/folder/red, /obj/item/laser_pointer/red, /obj/item/clipboard, -/obj/structure/closet/wall/red{ - name = "Psychologists Locker"; - pixel_y = 28 +/obj/structure/closet/wall/red/directional/north{ + name = "Psychologists Locker" }, /obj/item/clothing/head/suns, /obj/item/clothing/gloves/suns/xo, @@ -506,9 +500,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - pixel_y = 29 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/structure/catwalk/over, /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 1 @@ -571,9 +563,8 @@ /obj/item/clothing/glasses/hud/health/sunglasses, /obj/item/clothing/neck/stripedredscarf, /obj/item/clothing/neck/stripedbluescarf, -/obj/structure/closet/wall/red{ - name = "Lead Doctor's Locker"; - pixel_y = 28 +/obj/structure/closet/wall/red/directional/north{ + name = "Lead Doctor's Locker" }, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/clothing/suit/armor/vest/security/brig_phys{ @@ -671,10 +662,8 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall/white{ - dir = 8; - name = "Bartenders Clothing"; - pixel_x = 30 +/obj/structure/closet/wall/white/directional/east{ + name = "Bartenders Clothing" }, /obj/item/clothing/under/rank/civilian/bartender/skirt, /obj/item/clothing/under/rank/civilian/bartender, @@ -742,9 +731,8 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "fJ" = ( -/obj/structure/closet/wall/orange{ - name = "fuel locker"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "fuel locker" }, /obj/item/stack/sheet/mineral/uranium/five{ pixel_x = 2 @@ -1002,8 +990,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall/white{ - pixel_y = 26; +/obj/structure/closet/wall/white/directional/north{ name = "bureaucratic supplies" }, /obj/item/paper_bin, @@ -1528,7 +1515,9 @@ name = "Engineering storage"; pixel_x = 23 }, -/obj/machinery/space_heater, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "mv" = ( @@ -1886,6 +1875,7 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "qa" = ( @@ -2327,10 +2317,8 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall/white{ - dir = 4; - name = "Cooks Clothing"; - pixel_x = -30 +/obj/structure/closet/wall/white/directional/west{ + name = "Cooks Clothing" }, /obj/item/book/manual/wiki/cooking, /obj/item/clothing/under/rank/civilian/chef, @@ -2362,9 +2350,8 @@ /turf/open/floor/plating, /area/ship/engineering) "vs" = ( -/obj/structure/closet/wall/orange{ - name = "Engineering locker"; - pixel_y = 30 +/obj/structure/closet/wall/orange/directional/north{ + name = "Engineering locker" }, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -2501,9 +2488,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 31 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/structure/catwalk/over, /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2512,11 +2497,11 @@ /area/ship/engineering) "wM" = ( /obj/machinery/atmospherics/pipe/layer_manifold, +/obj/structure/rack, /obj/item/clothing/mask/gas/suns, /obj/item/clothing/mask/gas/suns, /obj/item/clothing/mask/gas/suns, /obj/item/holosign_creator/atmos, -/obj/structure/rack, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "wQ" = ( @@ -2547,10 +2532,8 @@ /area/ship/hallway/central) "xh" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/closet/wall{ - dir = 1; - name = "Patient Clothing Closet"; - pixel_y = -30 +/obj/structure/closet/wall/directional/south{ + name = "Patient Clothing Closet" }, /obj/effect/decal/cleanable/blood/drip, /obj/item/clothing/under/rank/medical/gown, @@ -2686,6 +2669,9 @@ pixel_y = 7 }, /obj/item/storage/toolbox/mechanical, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "yA" = ( @@ -3142,9 +3128,8 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/closet/wall/orange{ - name = "Emergency Engineering"; - pixel_y = 30 +/obj/structure/closet/wall/orange/directional/north{ + name = "Emergency Engineering" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -3399,11 +3384,9 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/closet/wall{ - dir = 8; +/obj/structure/closet/wall/directional/east{ icon_door = "orange_wall"; - name = "Mining equipment"; - pixel_x = 29 + name = "Mining equipment" }, /obj/item/gps/mining, /obj/item/pickaxe, @@ -3860,12 +3843,9 @@ /turf/open/floor/carpet/red, /area/ship/crew/office) "Mb" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/corner_techfloor_grid/diagonal{ - dir = 4 - }, -/obj/effect/decal/cleanable/generic, /obj/machinery/light/small/directional/south, +/obj/machinery/power/ship_gravity, +/obj/structure/cable/yellow, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Mc" = ( @@ -4488,10 +4468,8 @@ name = "butlers's uniform" }, /obj/item/clothing/under/suit/waiter/syndicate, -/obj/structure/closet/wall/red{ - dir = 8; - name = "Uniform Closet"; - pixel_x = 30 +/obj/structure/closet/wall/red/directional/east{ + name = "Uniform Closet" }, /obj/structure/table/wood, /obj/effect/turf_decal/siding/wood{ @@ -4613,9 +4591,8 @@ /turf/open/floor/plasteel/tech, /area/ship/medical) "Tt" = ( -/obj/structure/closet/wall/orange{ - name = "Chemical Closet"; - pixel_y = 30 +/obj/structure/closet/wall/orange/directional/north{ + name = "Chemical Closet" }, /obj/item/storage/bag/chemistry, /obj/item/clothing/glasses/sunglasses/chemical, @@ -4738,10 +4715,7 @@ /obj/item/ammo_box/magazine/m10mm, /obj/item/kitchen/knife/combat/survival, /obj/item/kitchen/knife/combat/survival, -/obj/structure/closet/secure_closet/wall{ - dir = 8; - pixel_x = 32 - }, +/obj/structure/closet/secure_closet/wall/directional/east, /turf/open/floor/wood/walnut, /area/ship/bridge) "Uu" = ( @@ -4978,6 +4952,7 @@ dir = 1 }, /obj/effect/decal/cleanable/glass, +/obj/machinery/space_heater, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "WE" = ( @@ -5085,10 +5060,8 @@ /obj/item/radio, /obj/item/radio, /obj/item/radio, -/obj/structure/closet/wall{ - dir = 8; - name = "Uniform closet"; - pixel_x = 32 +/obj/structure/closet/wall/directional/east{ + name = "Uniform closet" }, /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -5212,10 +5185,8 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/structure/closet/secure_closet/freezer/wall{ - dir = 1; - name = "Kitchen Freezer"; - pixel_y = -30 +/obj/structure/closet/secure_closet/freezer/wall/directional/south{ + name = "Kitchen Freezer" }, /obj/effect/turf_decal/trimline/opaque/brown/filled/line, /obj/structure/table/wood/reinforced, @@ -5256,7 +5227,6 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/catwalk/over, -/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/ship/engineering) "Zj" = ( @@ -5279,6 +5249,42 @@ }, /turf/open/floor/plasteel/tech, /area/ship/cargo) +"Zq" = ( +/obj/structure/closet/wall/orange{ + name = "Engineering locker"; + pixel_y = 30 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/item/tank/internals/oxygen, +/obj/item/storage/toolbox/syndicate{ + name = "syndicate toolbox"; + pixel_x = -3; + pixel_y = 5 + }, +/obj/item/storage/belt/utility/syndicate, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/item/storage/box/stockparts/t2, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/clothing/gloves/suns/yellow, +/obj/item/clothing/shoes/jackboots/suns, +/obj/item/clothing/suit/toggle/suns/workervest, +/obj/item/clothing/under/syndicate/suns/workerjumpsuit, +/obj/item/clothing/mask/gas/suns, +/obj/item/clothing/head/safety_helmet/suns, +/obj/item/clothing/glasses/meson/engine, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/ship/engineering) "Zu" = ( /obj/effect/turf_decal/siding/wood/corner, /obj/effect/turf_decal/siding/wood{ @@ -5805,7 +5811,7 @@ vh ZU gB It -vs +Zq yb mt Mb diff --git a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm index 523a524de9d0..d02d2a60319c 100644 --- a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm +++ b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm @@ -86,10 +86,8 @@ /obj/item/storage/firstaid/medical, /obj/item/storage/firstaid/regular, /obj/item/storage/firstaid/regular, -/obj/structure/closet/wall/white{ - dir = 1; - name = "Medical Supplies"; - pixel_y = -32 +/obj/structure/closet/wall/white/directional/south{ + name = "Medical Supplies" }, /turf/open/floor/plasteel/dark, /area/ship/crew) @@ -1156,6 +1154,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/ship/engineering) "BS" = ( @@ -1379,9 +1380,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /obj/machinery/computer/cryopod/directional/west, /obj/machinery/camera/autoname{ dir = 4 @@ -1425,9 +1424,8 @@ /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) "KP" = ( -/obj/structure/closet/wall{ - name = "emergency rum cabinet"; - pixel_y = 28 +/obj/structure/closet/wall/directional/north{ + name = "emergency rum cabinet" }, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/effect/turf_decal/corner/opaque/syndiered/bordercorner{ @@ -1765,7 +1763,16 @@ dir = 1 }, /obj/machinery/light/small/directional/south, -/obj/machinery/space_heater, +/obj/structure/closet/secure_closet/engineering_personal, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/storage/belt/utility/full, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/ship/engineering) "SL" = ( @@ -1794,14 +1801,10 @@ /area/ship/engineering) "Ul" = ( /obj/effect/decal/cleanable/oil, -/obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/storage/belt/utility/full, -/obj/item/storage/belt/utility/full, -/obj/item/clothing/glasses/welding, -/obj/item/clothing/glasses/welding, -/obj/structure/extinguisher_cabinet/directional/west, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ship/engineering) "UZ" = ( @@ -1874,9 +1877,7 @@ "VJ" = ( /obj/structure/chair/comfy/black, /obj/effect/turf_decal/corner/opaque/syndiered/bordercorner, -/obj/structure/closet/wall{ - pixel_y = 28 - }, +/obj/structure/closet/wall/directional/north, /turf/open/floor/plasteel/dark, /area/ship/crew) "Xa" = ( @@ -1976,6 +1977,7 @@ /obj/effect/turf_decal/spline/fancy/transparent/grey{ dir = 1 }, +/obj/machinery/space_heater, /turf/open/floor/plating, /area/ship/engineering) "ZI" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index 0cd79289edec..cce460292a0c 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm @@ -1486,10 +1486,8 @@ /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) "zq" = ( -/obj/structure/closet/wall/red{ - dir = 8; - name = "uniform closet"; - pixel_x = 28 +/obj/structure/closet/wall/red/directional/east{ + name = "uniform closet" }, /obj/item/clothing/under/syndicate/gorlex, /obj/item/clothing/under/syndicate/gorlex, @@ -1558,9 +1556,7 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "Af" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) @@ -2395,6 +2391,8 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/machinery/power/ship_gravity, +/obj/structure/cable, /turf/open/floor/plating, /area/ship/maintenance/starboard) "Oy" = ( @@ -3161,9 +3159,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /turf/open/floor/plasteel/tech, /area/ship/hallway/central) "Yc" = ( diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm index 63bcd879d7e1..72925f49b230 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -376,12 +376,10 @@ /obj/item/clothing/shoes/combat, /obj/item/clothing/mask/gas/syndicate, /obj/item/clothing/suit/armor/vest/duster, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "Bridge Officer's Locker"; - req_access_txt = "57"; - pixel_y = -29 + req_access_txt = "57" }, /obj/item/melee/classic_baton/telescopic, /obj/item/clothing/neck/chameleon, @@ -834,10 +832,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/structure/closet/wall{ - dir = 4; - name = "Utility Closet"; - pixel_x = -30 +/obj/structure/closet/wall/directional/west{ + name = "Utility Closet" }, /obj/item/radio, /obj/item/radio, @@ -887,10 +883,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/machinery/advanced_airlock_controller{ dir = 8; pixel_x = 24 @@ -1160,10 +1153,8 @@ /turf/open/floor/circuit/green/off, /area/ship/maintenance/starboard) "lr" = ( -/obj/structure/closet/wall/orange{ - dir = 1; - name = "Engineering locker"; - pixel_y = -30 +/obj/structure/closet/wall/orange/directional/south{ + name = "Engineering locker" }, /obj/item/clothing/under/syndicate/coldres, /obj/item/clothing/suit/toggle/industrial, @@ -1411,11 +1402,9 @@ /obj/item/pickaxe, /obj/item/mining_scanner, /obj/item/mining_scanner, -/obj/structure/closet/wall{ - dir = 1; +/obj/structure/closet/wall/directional/south{ icon_door = "orange_wall"; - name = "Mining equipment"; - pixel_y = -29 + name = "Mining equipment" }, /obj/item/gps/mining, /turf/open/floor/plasteel/tech, @@ -1580,10 +1569,7 @@ dir = 8; name = "tactical chair" }, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 29 - }, +/obj/structure/closet/firecloset/wall/directional/east, /obj/effect/turf_decal/techfloor{ dir = 4 }, @@ -2017,12 +2003,10 @@ /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/m10mm, /obj/item/storage/toolbox/ammo/c10mm, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; name = "Ammo Locker"; - req_access_txt = "1"; - pixel_x = -29 + req_access_txt = "1" }, /obj/item/ammo_box/magazine/m10mm, /obj/item/ammo_box/magazine/smgm45, @@ -2301,12 +2285,10 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "secure_wall"; name = "Peacekeeping Locker"; - req_access_txt = "1"; - pixel_x = -29 + req_access_txt = "1" }, /obj/item/gun/energy/disabler, /obj/item/gun/energy/disabler, @@ -2704,8 +2686,8 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/cable/yellow{ - icon_state = "1-4" +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) @@ -2727,10 +2709,8 @@ icon_state = "1-2" }, /obj/structure/catwalk/over, -/obj/structure/closet/wall/orange{ - dir = 8; - name = "fuel locker"; - pixel_x = 28 +/obj/structure/closet/wall/orange/directional/east{ + name = "fuel locker" }, /obj/item/stack/sheet/mineral/plasma/five, /obj/item/stack/sheet/mineral/plasma/five, @@ -2907,12 +2887,10 @@ }, /obj/item/clothing/mask/gas/sechailer/swat, /obj/item/clothing/head/HoS/beret/syndicate, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; name = "Sergeant's Locker"; - req_access_txt = "58"; - pixel_x = -29 + req_access_txt = "58" }, /obj/item/melee/classic_baton/telescopic, /obj/item/clothing/suit/armor/vest/blueshirt, @@ -3128,10 +3106,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, -/obj/structure/closet/firecloset/wall{ - dir = 8; - pixel_x = 29 - }, +/obj/structure/closet/firecloset/wall/directional/east, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Eb" = ( @@ -3241,13 +3216,11 @@ /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) "EL" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 6 - }, -/obj/machinery/computer/monitor, -/obj/structure/cable/yellow{ +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ icon_state = "0-2" }, +/obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "EN" = ( @@ -3521,9 +3494,6 @@ icon_state = "1-2" }, /obj/structure/catwalk/over, -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /turf/open/floor/plating, /area/ship/engineering) "HF" = ( @@ -4001,10 +3971,8 @@ /obj/effect/turf_decal/trimline/transparent/bar/filled/line{ dir = 6 }, -/obj/structure/closet/wall/red{ - dir = 1; - name = "Bartender's locker"; - pixel_y = -29 +/obj/structure/closet/wall/red/directional/south{ + name = "Bartender's locker" }, /obj/item/clothing/shoes/cowboy/black, /obj/item/storage/belt/military/snack, @@ -4119,12 +4087,10 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; name = "Armor Locker"; - req_access_txt = "1"; - pixel_x = -29 + req_access_txt = "1" }, /obj/item/storage/belt/military, /obj/item/storage/belt/military, @@ -5542,10 +5508,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 10 }, -/obj/structure/closet/wall{ - dir = 4; - name = "uniform closet"; - pixel_x = -30 +/obj/structure/closet/wall/directional/west{ + name = "uniform closet" }, /obj/effect/decal/cleanable/dirt/dust, /obj/item/storage/backpack/duffelbag/syndie, diff --git a/_maps/shuttles/syndicate/syndicate_litieguai.dmm b/_maps/shuttles/syndicate/syndicate_litieguai.dmm index e81231480dfb..1330108a6874 100644 --- a/_maps/shuttles/syndicate/syndicate_litieguai.dmm +++ b/_maps/shuttles/syndicate/syndicate_litieguai.dmm @@ -67,6 +67,12 @@ }, /turf/open/floor/plasteel/white, /area/ship/cargo) +"bz" = ( +/obj/machinery/light/small/directional/south, +/obj/machinery/power/ship_gravity, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ship/maintenance/port) "bD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -1021,11 +1027,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "firearms locker"; - req_access_txt = "5"; - pixel_y = 28 + req_access_txt = "5" }, /obj/item/ammo_box/magazine/m10mm/rubber, /obj/item/ammo_box/magazine/m10mm/rubber, @@ -1093,9 +1098,7 @@ /turf/open/floor/plasteel/freezer, /area/ship/crew/toilet) "wt" = ( -/obj/structure/closet/emcloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/emcloset/wall/directional/north, /obj/effect/turf_decal/number/two, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -1379,7 +1382,6 @@ /area/ship/medical) "zT" = ( /obj/effect/turf_decal/number/zero, -/obj/machinery/light/small/directional/north, /turf/open/floor/plating, /area/ship/maintenance/starboard) "Ah" = ( @@ -1403,12 +1405,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "armor locker"; - req_access_txt = "5"; - pixel_y = -28 + req_access_txt = "5" }, /obj/item/clothing/suit/armor/vest/marine/trauma, /obj/item/clothing/suit/armor/vest/marine/trauma, @@ -1490,12 +1490,10 @@ /obj/item/storage/belt/medical, /obj/item/healthanalyzer/advanced, /obj/item/hypospray/mkii/CMO, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "solgov_wall"; name = "chief medical officer's closet"; - req_access_txt = "40"; - pixel_x = -28 + req_access_txt = "40" }, /obj/item/storage/backpack/satchel/med, /obj/item/defibrillator/compact/loaded, @@ -1561,12 +1559,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, -/obj/structure/closet/secure_closet/wall{ - dir = 1; +/obj/structure/closet/secure_closet/wall/directional/south{ icon_state = "sec_wall"; name = "clothing locker"; - req_access_txt = "5"; - pixel_y = -28 + req_access_txt = "5" }, /obj/item/clothing/under/syndicate/medic, /obj/item/clothing/under/syndicate/medic, @@ -1650,6 +1646,9 @@ /obj/effect/turf_decal/industrial/warning/corner{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ship/maintenance/port) "DX" = ( @@ -2292,7 +2291,7 @@ /obj/structure/cable{ icon_state = "2-9" }, -/turf/open/floor/plasteel/stairs/medium{ +/turf/open/floor/plasteel/stairs/mid{ dir = 1 }, /area/ship/storage/eva) @@ -2392,11 +2391,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/obj/structure/closet/secure_closet/wall{ +/obj/structure/closet/secure_closet/wall/directional/north{ icon_state = "sec_wall"; name = "equipment locker"; - req_access_txt = "5"; - pixel_y = 28 + req_access_txt = "5" }, /obj/item/healthanalyzer/advanced, /obj/item/healthanalyzer/advanced, @@ -2790,6 +2788,10 @@ /obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/science) +"VN" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/ship/maintenance/starboard) "WB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -2842,12 +2844,10 @@ /obj/item/areaeditor/shuttle, /obj/item/megaphone/command, /obj/item/clothing/glasses/sunglasses, -/obj/structure/closet/secure_closet/wall{ - dir = 4; +/obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "solgov_wall"; name = "captain's closet"; - req_access_txt = "20"; - pixel_x = -28 + req_access_txt = "20" }, /obj/item/gun/ballistic/revolver, /obj/item/clothing/suit/armor/vest/capcarapace/cybersun, @@ -2873,10 +2873,7 @@ /obj/machinery/atmospherics/components/binary/pump/on/layer2{ dir = 8 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /turf/open/floor/plating, /area/ship/maintenance/port) "Xx" = ( @@ -2925,7 +2922,9 @@ dir = 4 }, /obj/item/storage/toolbox/electrical, -/obj/machinery/light/small/directional/south, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plating, /area/ship/maintenance/port) "YA" = ( @@ -3158,7 +3157,7 @@ HU ZC XL Yw -ZC +bz fp UG vx @@ -3172,7 +3171,7 @@ gL UG UG Ti -UO +VN zT kh UO @@ -3182,7 +3181,7 @@ ZC KS Xu ZC -UG +fp UG UG Ra @@ -3194,7 +3193,7 @@ tO Ra UG UG -UG +Ti UO wt xW diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 79c693817dda..19071dbc1baf 100644 --- a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm +++ b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm @@ -4,10 +4,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/item/clothing/suit/space/syndicate/black/engie, /obj/item/clothing/head/helmet/space/syndicate/black/engie, /turf/open/floor/plasteel/dark, @@ -135,10 +132,7 @@ /turf/open/floor/plating, /area/ship/engineering/atmospherics) "aG" = ( -/obj/structure/closet/secure_closet/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/secure_closet/wall/directional/east, /obj/item/kitchen/knife, /obj/item/cutting_board, /obj/item/clothing/under/suit/waiter/syndicate, @@ -410,6 +404,9 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "cC" = ( @@ -2323,9 +2320,7 @@ /obj/item/card/id/syndicate_command/lieutenant{ name = "lieutenant ID card" }, -/obj/structure/closet/secure_closet/wall{ - dir = 4; - pixel_x = -28; +/obj/structure/closet/secure_closet/wall/directional/west{ name = "spare cards locker"; req_access = list(3,150) }, @@ -2428,10 +2423,7 @@ /obj/effect/turf_decal/corner/opaque/syndiered{ dir = 10 }, -/obj/structure/closet/firecloset/wall{ - dir = 1; - pixel_y = -28 - }, +/obj/structure/closet/firecloset/wall/directional/south, /obj/effect/turf_decal/borderfloorblack{ dir = 1 }, @@ -4781,10 +4773,7 @@ /obj/effect/turf_decal/corner/opaque/syndiered{ dir = 9 }, -/obj/structure/closet/firecloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/firecloset/wall/directional/west, /obj/effect/turf_decal/borderfloorblack{ dir = 4 }, @@ -5212,10 +5201,7 @@ /obj/effect/turf_decal/corner/opaque/syndiered{ dir = 9 }, -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/effect/turf_decal/borderfloorblack{ dir = 4 }, @@ -5798,10 +5784,7 @@ /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/port) "GN" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/item/clothing/suit/space/syndicate, /obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate, @@ -6173,10 +6156,7 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "IV" = ( -/obj/structure/closet/emcloset/wall{ - dir = 4; - pixel_x = -28 - }, +/obj/structure/closet/emcloset/wall/directional/west, /obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate, @@ -7103,6 +7083,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, +/obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "Pd" = ( @@ -7777,10 +7758,7 @@ "SA" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/closet/emcloset/wall{ - dir = 8; - pixel_x = 28 - }, +/obj/structure/closet/emcloset/wall/directional/east, /obj/item/clothing/suit/space/syndicate/black/engie, /obj/item/clothing/head/helmet/space/syndicate/black/engie, /turf/open/floor/plasteel/dark, @@ -8157,7 +8135,8 @@ /turf/open/floor/plasteel/tech, /area/ship/hallway/central) "UB" = ( -/obj/structure/extinguisher_cabinet/directional/south, +/obj/machinery/power/ship_gravity, +/obj/structure/cable/yellow, /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "UC" = ( @@ -8340,9 +8319,8 @@ /obj/effect/turf_decal/trimline/opaque/orange/line{ dir = 5 }, -/obj/structure/closet/wall/orange{ - name = "Chemical Closet"; - pixel_y = 28 +/obj/structure/closet/wall/orange/directional/north{ + name = "Chemical Closet" }, /obj/item/storage/bag/chemistry, /obj/item/reagent_containers/glass/beaker/large, @@ -8573,9 +8551,7 @@ dir = 5 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/firecloset/wall{ - pixel_y = 28 - }, +/obj/structure/closet/firecloset/wall/directional/north, /obj/effect/turf_decal/borderfloorblack, /turf/open/floor/plasteel/tech, /area/ship/hallway/starboard) diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 44f0893cd9a5..e1590614b6be 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -67,8 +67,9 @@ #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_VERBOSEJMP(src) "[src ? "[AREACOORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" #define ADMIN_INDIVIDUALLOG(user) "(LOGS)" -/// Displays "(SHOW)" in the chat, when clicked it tries to show atom(paper). First you need to set the request_state variable to TRUE for the paper. +/// Displays "(SHOW)" in the chat, when clicked it tries to show atom(paper) or atom(photo). First you need to set the request_state variable to TRUE for the paper. #define ADMIN_SHOW_PAPER(atom) "(SHOW)" +#define ADMIN_SHOW_PHOTO(atom) "(PHOTO)" #define ADMIN_PUNISHMENT_BREAK_BONES "Break all bones" #define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index c428e1e7dd53..5c6f14c887eb 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -3,7 +3,6 @@ #define COLOR_INPUT_DISABLED "#F0F0F0" #define COLOR_INPUT_ENABLED "#D3B5B5" -//BeginWS #define COLOR_DARKMODE_DARKBACKGROUND "#383838" #define COLOR_DARKMODE_BACKGROUND "#272727" #define COLOR_DARKMODE_HEADER "#ffffff" @@ -23,7 +22,6 @@ #define WOOD_COLOR_BLACK "#332521" #define WOOD_COLOR_CHOCOLATE "#543C30" #define WOOD_COLOR_YELLOW "#E3994E" -//EndWS #define COLOR_WHITE "#FFFFFF" #define COLOR_OFF_WHITE "#FFF5ED" diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 52a68098488a..d9edeb83202c 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -224,19 +224,29 @@ #define COMSIG_LIVING_GET_PULLED "living_start_pulled" ///////////////// - -#define COMSIG_ENTER_AREA "enter_area" //from base of area/Entered(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. -#define COMSIG_EXIT_AREA "exit_area" //from base of area/Exited(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. - -#define COMSIG_CLICK "atom_click" //from base of atom/Click(): (location, control, params, mob/user) -#define COMSIG_CLICK_SHIFT "shift_click" //from base of atom/ShiftClick(): (/mob) - #define COMPONENT_ALLOW_EXAMINATE 1 //Allows the user to examinate regardless of client.eye. -#define COMSIG_CLICK_CTRL "ctrl_click" //from base of atom/CtrlClickOn(): (/mob) -#define COMSIG_CLICK_ALT "alt_click" //from base of atom/AltClick(): (/mob) -#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" //from base of atom/CtrlShiftClick(/mob) -#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" //from base of atom/MouseDrop(): (/atom/over, /mob/user) +//from base of area/Entered(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. +#define COMSIG_ENTER_AREA "enter_area" +//from base of area/Exited(): (/area). Sent to "area-sensitive" movables, see __DEFINES/traits.dm for info. +#define COMSIG_EXIT_AREA "exit_area" +//from base of atom/Click(): (location, control, params, mob/user) +#define COMSIG_CLICK "atom_click" +//from base of atom/ShiftClick(): (/mob) +#define COMSIG_CLICK_SHIFT "shift_click" +//Allows the user to examinate regardless of client.eye. + #define COMPONENT_ALLOW_EXAMINATE 1 +//from base of atom/CtrlClickOn(): (/mob) +#define COMSIG_CLICK_CTRL "ctrl_click" +//from base of atom/AltClick(): (/mob) +#define COMSIG_CLICK_ALT "alt_click" +//from base of atom/CtrlShiftClick(/mob) +#define COMSIG_CLICK_CTRL_SHIFT "ctrl_shift_click" +///from base of atom/CtrlShiftRightClick(/mob) +#define COMSIG_CLICK_CTRL_SHIFT_RIGHT "ctrl_shift_right_click" +//from base of atom/MouseDrop(): (/atom/over, /mob/user) +#define COMSIG_MOUSEDROP_ONTO "mousedrop_onto" #define COMPONENT_NO_MOUSEDROP 1 -#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" //from base of atom/MouseDrop_T: (/atom/from, /mob/user) +//from base of atom/MouseDrop_T: (/atom/from, /mob/user) +#define COMSIG_MOUSEDROPPED_ONTO "mousedropped_onto" ///from base of area/proc/power_change(): () #define COMSIG_AREA_POWER_CHANGE "area_power_change" @@ -535,7 +545,7 @@ #define COMSIG_TOOL_IN_USE "tool_in_use" ///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) #define COMSIG_TOOL_START_USE "tool_start_use" ///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) #define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed" ///from [/obj/item/proc/disableEmbedding]: -#define COMSIG_MINE_TRIGGERED "minegoboom" ///from [/obj/effect/mine/proc/triggermine]: +#define COMSIG_MINE_TRIGGERED "minegoboom" ///from [/obj/item/mine/proc/trigger_mine]: ///from [/obj/structure/closet/supplypod/proc/endlaunch]: #define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom" @@ -608,7 +618,7 @@ #define COMSIG_PROJECTILE_PREHIT "com_proj_prehit" // sent to targets during the process_hit proc of projectiles #define COMSIG_PROJECTILE_RANGE_OUT "projectile_range_out" // sent to targets during the process_hit proc of projectiles #define COMSIG_EMBED_TRY_FORCE "item_try_embed" // sent when trying to force an embed (mainly for projectiles, only used in the embed element) - + #define COMPONENT_EMBED_SUCCESS (1<<1) #define COMSIG_PELLET_CLOUD_INIT "pellet_cloud_init" // sent to targets during the process_hit proc of projectiles // /obj/mecha signals diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm new file mode 100644 index 000000000000..0256ed11bedd --- /dev/null +++ b/code/__DEFINES/guns.dm @@ -0,0 +1,16 @@ +//weapon manufacturers +#define MANUFACTURER_NONE null +#define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" +#define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" +#define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" +#define MANUFACTURER_SOLARARMORIES "the Solarbundswaffenkammer emblem" +#define MANUFACTURER_SCARBOROUGH "the Scarborough Arms logo" +#define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" +#define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" +#define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" +#define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" +#define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" +#define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" +#define MANUFACTURER_DONKCO "the Donk! Co. logo" +#define MANUFACTURER_PGF "the Etherbor Industries emblem" +#define MANUFACTURER_IMPORT "Lanchester Import Co." diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index c0a4d30aba8b..80c400e5864c 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -167,7 +167,7 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isgrenade(A) (istype(A, /obj/item/grenade)) -#define islandmine(A) (istype(A, /obj/effect/mine)) +#define islandmine(A) (istype(A, /obj/item/mine)) #define issupplypod(A) (istype(A, /obj/structure/closet/supplypod)) diff --git a/code/__DEFINES/keybinding.dm b/code/__DEFINES/keybinding.dm index 97b9c9d82aad..50a16edc350a 100644 --- a/code/__DEFINES/keybinding.dm +++ b/code/__DEFINES/keybinding.dm @@ -31,6 +31,7 @@ #define COMSIG_KB_CLIENT_GETHELP_DOWN "keybinding_client_gethelp_down" #define COMSIG_KB_CLIENT_SCREENSHOT_DOWN "keybinding_client_screenshot_down" #define COMSIG_KB_CLIENT_MINIMALHUD_DOWN "keybinding_client_minimalhud_down" +#define COMSIG_KB_CLIENT_FULLSCREEN_DOWN "keybinding_client_fullscreen_down" //Communication #define COMSIG_KB_CLIENT_OOC_DOWN "keybinding_client_ooc_down" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index ad9d5ae5abc8..f0b505114646 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -335,7 +335,7 @@ #define SHADOW_SPECIES_LIGHT_THRESHOLD 0.2 //MINOR TWEAKS/MISC -#define AGE_MIN 17 //youngest a character can be +#define AGE_MIN 18 //youngest a character can be #define AGE_MAX 85 //oldest a character can be #define AGE_MINOR 20 //legal age of space drinking and smoking #define WIZARD_AGE_MIN 30 //youngest a wizard can be diff --git a/code/__DEFINES/wires.dm b/code/__DEFINES/wires.dm index 5623b5f52b4a..5c35c1f6b5a9 100644 --- a/code/__DEFINES/wires.dm +++ b/code/__DEFINES/wires.dm @@ -51,4 +51,8 @@ #define WIRE_PRIZEVEND "Emergency Prize Vend" #define WIRE_RESETOWNER "Reset Owner" #define WIRE_AGELIMIT "Age Limit" +#define WIRE_PIN "Trigger Pin" +#define WIRE_FUSE "Fuse" +#define WIRE_RESET "Factory Reset" +#define WIRE_DELAYBOOM "Delayed Boom" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 376e023940de..28e2464aa8a9 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -24,7 +24,7 @@ #define LAZYCLEARLIST(L) if(L) L.Cut() #define SANITIZE_LIST(L) (islist(L) ? L : list()) #define reverseList(L) reverseRange(L.Copy()) -#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += list(V); +#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += V; #define LAZYADDASSOCLIST(L, K, V) if(!L) { L = list(); } L[K] += list(V); #define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; } #define LAZYACCESSASSOC(L, I, K) L ? L[I] ? L[I][K] ? L[I][K] : null : null : null diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index fdeadc13b61a..f307aa952804 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -171,13 +171,6 @@ if(!findname(.)) break -/proc/random_unique_moth_name(attempts_to_find_unique_name=10) - for(var/i in 1 to attempts_to_find_unique_name) - . = capitalize(pick(GLOB.moth_first)) + " " + capitalize(pick(GLOB.moth_last)) - - if(!findname(.)) - break - /proc/random_unique_squid_name(attempts_to_find_unique_name=10) for(var/i in 1 to attempts_to_find_unique_name) . = capitalize(squid_name()) @@ -217,6 +210,12 @@ GLOBAL_LIST_INIT(skin_tones, sortList(list( "african2" ))) +/proc/pick_species_adjective(mob/living/carbon/human/H) + if(isipc(H)) + return pick(GLOB.ipc_preference_adjectives) + else + return pick(GLOB.preference_adjectives) + GLOBAL_LIST_EMPTY(species_list) /proc/age2agedescription(age) diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index a6f48af9338c..4348460c24d7 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -7,9 +7,6 @@ /proc/plasmaman_name() return "[pick(GLOB.plasmaman_names)] \Roman[rand(1,99)]" -/proc/moth_name() - return "[pick(GLOB.moth_first)] [pick(GLOB.moth_last)]" - /proc/squid_name() return "[pick(GLOB.squid_names)][pick("-", "", " ")][capitalize(pick(GLOB.squid_names) + pick(GLOB.squid_names))]" diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 0091b88fa15f..59f25efe9823 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -138,7 +138,7 @@ GLOBAL_LIST_INIT(common_loot, list( //common: basic items ) = 1, list(//misc - /obj/item/radio/off = 1, + /obj/item/radio = 1, /obj/item/extinguisher = 1, /obj/item/tank/internals/emergency_oxygen = 1, /obj/item/bodybag = 1, diff --git a/code/_globalvars/lists/names.dm b/code/_globalvars/lists/names.dm index ecc1acb6f0e1..ff452072fbec 100644 --- a/code/_globalvars/lists/names.dm +++ b/code/_globalvars/lists/names.dm @@ -27,6 +27,8 @@ GLOBAL_LIST_INIT(verbs, world.file2list("strings/names/verbs.txt")) GLOBAL_LIST_INIT(ing_verbs, world.file2list("strings/names/ing_verbs.txt")) GLOBAL_LIST_INIT(adverbs, world.file2list("strings/names/adverbs.txt")) GLOBAL_LIST_INIT(adjectives, world.file2list("strings/names/adjectives.txt")) +GLOBAL_LIST_INIT(preference_adjectives, world.file2list("strings/preference_adjectives.txt")) +GLOBAL_LIST_INIT(ipc_preference_adjectives, world.file2list("strings/ipc_preference_adjectives.txt")) GLOBAL_LIST_INIT(dream_strings, world.file2list("strings/dreamstrings.txt")) //loaded on startup because of " //would include in rsc if ' was used diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 81ce3ceec1eb..993026c0d5e0 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -356,7 +356,6 @@ /** * Control+Shift click - * Unused except for AI */ /mob/proc/CtrlShiftClickOn(atom/A) A.CtrlShiftClick(src) diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm index f163553f5f9b..3e044a441c0a 100644 --- a/code/controllers/subsystem/explosions.dm +++ b/code/controllers/subsystem/explosions.dm @@ -164,7 +164,7 @@ SUBSYSTEM_DEF(explosions) // 5 explosion power is a (0, 1, 3) explosion. // 1 explosion power is a (0, 0, 1) explosion. -/proc/explosion(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0, silent = FALSE, smoke = FALSE) +/proc/explosion(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0, silent = FALSE, smoke = FALSE, gentle = FALSE) . = SSexplosions.explode(arglist(args)) #define CREAK_DELAY 5 SECONDS //Time taken for the creak to play after explosion, if applicable. @@ -177,7 +177,7 @@ SUBSYSTEM_DEF(explosions) #define FREQ_UPPER 40 //The upper limit for the randomly selected frequency. #define FREQ_LOWER 25 //The lower of the above. -/datum/controller/subsystem/explosions/proc/explode(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke) +/datum/controller/subsystem/explosions/proc/explode(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog, ignorecap, flame_range, silent, smoke, gentle) epicenter = get_turf(epicenter) if(!epicenter) return @@ -550,6 +550,8 @@ SUBSYSTEM_DEF(explosions) var/throw_dir = L[2] var/max_range = L[3] for(var/atom/movable/A in T) + if(QDELETED(A)) + continue if(!A.anchored && A.move_resist != INFINITY) var/atom_throw_range = rand(throw_range, max_range) var/turf/throw_at = get_ranged_target_turf(A, throw_dir, atom_throw_range) diff --git a/code/controllers/subsystem/overmap.dm b/code/controllers/subsystem/overmap.dm index b96a4944c812..93852230b244 100644 --- a/code/controllers/subsystem/overmap.dm +++ b/code/controllers/subsystem/overmap.dm @@ -274,7 +274,7 @@ SUBSYSTEM_DEF(overmap) var/datum/map_zone/mapzone = SSmapping.create_map_zone(encounter_name) var/datum/virtual_level/vlevel = SSmapping.create_virtual_level( encounter_name, - list(ZTRAIT_MINING = TRUE, ZTRAIT_BASETURF = dynamic_datum.default_baseturf), + list(ZTRAIT_MINING = TRUE, ZTRAIT_BASETURF = dynamic_datum.default_baseturf, ZTRAIT_GRAVITY = dynamic_datum.gravity), mapzone, dynamic_datum.vlevel_width, dynamic_datum.vlevel_height, diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index 7c2bf71cad6a..b7ef35e63663 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -146,7 +146,7 @@ SUBSYSTEM_DEF(pai) continue if(!(ROLE_PAI in G.client.prefs.be_special)) continue - to_chat(G, "[user] is requesting a pAI personality! Use the pAI button to submit yourself as one.") + to_chat(G, "[user.real_name] is requesting a pAI personality! Use the pAI button to submit yourself as one.") addtimer(CALLBACK(src, PROC_REF(spam_again)), spam_delay) var/list/available = list() for(var/datum/paiCandidate/c in SSpai.candidates) diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index c27e0bd1b7ae..60b4db1d1ce9 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -182,7 +182,7 @@ message.maptext = complete_text // View the message - LAZYADDASSOC(owned_by.seen_messages, message_loc, src) + LAZYADDASSOCLIST(owned_by.seen_messages, message_loc, src) owned_by.images |= message animate(message, alpha = 255, time = CHAT_MESSAGE_SPAWN_TIME) diff --git a/code/datums/components/gunpoint.dm b/code/datums/components/gunpoint.dm index 26bbb641a8eb..0aa1a5a1e8cc 100644 --- a/code/datums/components/gunpoint.dm +++ b/code/datums/components/gunpoint.dm @@ -40,7 +40,7 @@ if(istype(weapon, /obj/item/gun/ballistic/rocketlauncher) && weapon.chambered) shooter.client.give_award(/datum/award/achievement/misc/rocket_holdup, shooter) - target.do_alert_animation(target) + target.do_alert_animation() target.playsound_local(target.loc, 'sound/machines/chime.ogg', 50, TRUE) SEND_SIGNAL(target, COMSIG_ADD_MOOD_EVENT, "gunpoint", /datum/mood_event/gunpoint) diff --git a/code/datums/components/pellet_cloud.dm b/code/datums/components/pellet_cloud.dm index e7f5174c9102..19b1e2094993 100644 --- a/code/datums/components/pellet_cloud.dm +++ b/code/datums/components/pellet_cloud.dm @@ -1,20 +1,19 @@ -/* - * This component is used when you want to create a bunch of shrapnel or projectiles (say, shrapnel from a fragmentation grenade, or buckshot from a shotgun) from a central point, - * without necessarily printing a separate message for every single impact. This component should be instantiated right when you need it (like the moment of firing), then activated - * by signal. - * - * Pellet cloud currently works on two classes of sources: directed (ammo casings), and circular (grenades, landmines). - * -Directed: This means you're shooting multiple pellets, like buckshot. If an ammo casing is defined as having multiple pellets, it will automatically create a pellet cloud - * and call COMSIG_PELLET_CLOUD_INIT (see [/obj/item/ammo_casing/proc/fire_casing]). Thus, the only projectiles fired will be the ones fired here. - * The magnitude var controls how many pellets are created. - * -Circular: This results in a big spray of shrapnel flying all around the detonation point when the grenade fires COMSIG_GRENADE_PRIME or landmine triggers COMSIG_MINE_TRIGGERED. - * The magnitude var controls how big the detonation radius is (the bigger the magnitude, the more shrapnel is created). Grenades can be covered with bodies to reduce shrapnel output. - * - * Once all of the fired projectiles either hit a target or disappear due to ranging out/whatever else, we resolve the list of all the things we hit and print aggregate messages so we get - * one "You're hit by 6 buckshot pellets" vs 6x "You're hit by the buckshot blah blah" messages. - * - * Note that this is how all guns handle shooting ammo casings with multiple pellets, in case such a thing comes up. -*/ + + //This component is used when you want to create a bunch of shrapnel or projectiles (say, shrapnel from a fragmentation grenade, or buckshot from a shotgun) from a central point, + //without necessarily printing a separate message for every single impact. This component should be instantiated right when you need it (like the moment of firing), then activated + //by signal. + + //Pellet cloud currently works on two classes of sources: directed (ammo casings), and circular (grenades, landmines). + //Directed: This means you're shooting multiple pellets, like buckshot. If an ammo casing is defined as having multiple pellets, it will automatically create a pellet cloud + //and call COMSIG_PELLET_CLOUD_INIT (see [/obj/item/ammo_casing/proc/fire_casing]). Thus, the only projectiles fired will be the ones fired here. + //The magnitude var controls how many pellets are created. + //Circular: This results in a big spray of shrapnel flying all around the detonation point when the grenade fires COMSIG_GRENADE_PRIME or landmine triggers COMSIG_MINE_TRIGGERED. + //The magnitude var controls how big the detonation radius is (the bigger the magnitude, the more shrapnel is created). Grenades can be covered with bodies to reduce shrapnel output. + + //Once all of the fired projectiles either hit a target or disappear due to ranging out/whatever else, we resolve the list of all the things we hit and print aggregate messages so we get + //one "You're hit by 6 buckshot pellets" vs 6x "You're hit by the buckshot blah blah" messages. + + //Note that this is how all guns handle shooting ammo casings with multiple pellets, in case such a thing comes up. /datum/component/pellet_cloud /// What's the projectile path of the shrapnel we're shooting? @@ -83,12 +82,13 @@ /datum/component/pellet_cloud/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_PARENT_PREQDELETED, COMSIG_PELLET_CLOUD_INIT, COMSIG_GRENADE_PRIME, COMSIG_GRENADE_ARMED, COMSIG_MOVABLE_MOVED, COMSIG_MINE_TRIGGERED, COMSIG_ITEM_DROPPED)) -/** - * create_casing_pellets() is for directed pellet clouds for ammo casings that have multiple pellets (buckshot and scatter lasers for instance) - * - * Honestly this is mostly just a rehash of [/obj/item/ammo_casing/proc/fire_casing()] for pellet counts > 1, except this lets us tamper with the pellets and hook onto them for tracking purposes. - * The arguments really don't matter, this proc is triggered by COMSIG_PELLET_CLOUD_INIT which is only for this really, it's just a big mess of the state vars we need for doing the stuff over here. - */ + +//create_casing_pellets() is for directed pellet clouds for ammo casings that have multiple pellets (buckshot and scatter lasers for instance) +// +//Honestly this is mostly just a rehash of [/obj/item/ammo_casing/proc/fire_casing()] for pellet counts > 1, except this lets us tamper with the pellets and hook onto them for tracking purposes. +//The arguments really don't matter, this proc is triggered by COMSIG_PELLET_CLOUD_INIT which is only for this really, it's just a big mess of the state vars we need for doing the stuff over here. + + /datum/component/pellet_cloud/proc/create_casing_pellets(obj/item/ammo_casing/shell, atom/target, mob/living/user, fired_from, randomspread, spread, zone_override, params, distro) shooter = user var/targloc = get_turf(target) @@ -111,16 +111,27 @@ if(i != num_pellets) shell.newshot() -/** - * create_blast_pellets() is for when we have a central point we want to shred the surroundings of with a ring of shrapnel, namely frag grenades and landmines. - * - * Note that grenades have extra handling for someone throwing themselves/being thrown on top of it, while landmines do not (obviously, it's a landmine!). See [/datum/component/pellet_cloud/proc/handle_martyrs()] - */ -/datum/component/pellet_cloud/proc/create_blast_pellets(obj/O, mob/living/lanced_by) +//create_blast_pellets() is for when we have a central point we want to shred the surroundings of with a ring of shrapnel, namely frag grenades and landmines. + +//Note that grenades have extra handling for someone throwing themselves/being thrown on top of it, see [/datum/component/pellet_cloud/proc/handle_martyrs] +//Landmines just have a small check for [/obj/item/mine/pressure/explosive/shrapnel/var/shred_triggerer], and spawn extra shrapnel for them if so + +//Arguments: +////O- Our parent, the thing making the shrapnel obviously (grenade or landmine) +////punishable_triggerer- For grenade lances or people who step on the landmines (if we shred the triggerer), we spawn extra shrapnel for them in addition to the normal spread +// +/datum/component/pellet_cloud/proc/create_blast_pellets(obj/O, mob/living/punishable_triggerer) var/atom/A = parent if(isgrenade(parent)) // handle_martyrs can reduce the radius and thus the number of pellets we produce if someone dives on top of a frag grenade - handle_martyrs(lanced_by) // note that we can modify radius in this proc + handle_martyrs(punishable_triggerer) // note that we can modify radius in this proc + else if(istype(parent, /obj/item/mine/pressure/explosive)) + var/obj/item/mine/pressure/explosive/triggered_mine = parent + if(triggered_mine.shred_triggerer && istype(punishable_triggerer)) // free shrapnel for the idiot who stepped on it if we're a mine that shreds the triggerer + pellet_delta += radius // so they don't count against the later total + if(punishable_triggerer.loc == triggered_mine.loc)//only trigger this if they're actually on the tile + for(var/i in 1 to radius) + pew(punishable_triggerer, TRUE) if(radius < 1) return @@ -132,27 +143,27 @@ var/turf/shootat_turf = T pew(shootat_turf) -/** - * handle_martyrs() is used for grenades that shoot shrapnel to check if anyone threw themselves/were thrown on top of the grenade, thus absorbing a good chunk of the shrapnel - * - * Between the time the grenade is armed and the actual detonation, we set var/list/bodies to the list of mobs currently on the new tile, as if the grenade landed on top of them, tracking if any of them move off the tile and removing them from the "under" list - * Once the grenade detonates, handle_martyrs() is called and gets all the new mobs on the tile, and add the ones not in var/list/bodies to var/list/martyrs - * We then iterate through the martyrs and reduce the shrapnel magnitude for each mob on top of it, shredding each of them with some of the shrapnel they helped absorb. This can snuff out all of the shrapnel if there's enough bodies - * - * Note we track anyone who's alive and client'd when they get shredded in var/list/purple_hearts, for achievement checking later - */ -/datum/component/pellet_cloud/proc/handle_martyrs(mob/living/lanced_by) + +// handle_martyrs() is used for grenades that shoot shrapnel to check if anyone threw themselves/were thrown on top of the grenade, thus absorbing a good chunk of the shrapnel +// +// Between the time the grenade is armed and the actual detonation, we set var/list/bodies to the list of mobs currently on the new tile, as if the grenade landed on top of them, tracking if any of them move off the tile and removing them from the "under" list +// Once the grenade detonates, handle_martyrs() is called and gets all the new mobs on the tile, and add the ones not in var/list/bodies to var/list/martyrs +// We then iterate through the martyrs and reduce the shrapnel magnitude for each mob on top of it, shredding each of them with some of the shrapnel they helped absorb. This can snuff out all of the shrapnel if there's enough bodies + +// Note we track anyone who's alive and client'd when they get shredded in var/list/purple_hearts, for achievement checking later + +/datum/component/pellet_cloud/proc/handle_martyrs(mob/living/punishable_triggerer) var/magnitude_absorbed var/list/martyrs = list() var/self_harm_radius_mult = 3 - if(lanced_by && prob(60)) - to_chat(lanced_by, "Your plan to whack someone with a grenade on a stick backfires on you, literally!") + if(punishable_triggerer && prob(60)) + to_chat(punishable_triggerer, "Your plan to whack someone with a grenade on a stick backfires on you, literally!") self_harm_radius_mult = 1 // we'll still give the guy who got hit some extra shredding, but not 3*radius pellet_delta += radius for(var/i in 1 to radius) - pew(lanced_by) // thought you could be tricky and lance someone with no ill effects!! + pew(punishable_triggerer) // thought you could be tricky and lance someone with no ill effects!! for(var/mob/living/body in get_turf(parent)) if(body == shooter) @@ -209,11 +220,11 @@ finalize() /// Minor convenience function for creating each shrapnel piece with circle explosions, mostly stolen from the MIRV component -/datum/component/pellet_cloud/proc/pew(atom/target, spread=0) +/datum/component/pellet_cloud/proc/pew(atom/target, landmine_victim) var/obj/projectile/P = new projectile_type(get_turf(parent)) //Shooting Code: - P.spread = spread + P.spread = 0 P.original = target P.fired_from = parent P.firer = parent // don't hit ourself that would be really annoying @@ -224,6 +235,8 @@ RegisterSignal(P, list(COMSIG_PROJECTILE_RANGE_OUT, COMSIG_PARENT_QDELETING), PROC_REF(pellet_range)) pellets += P P.fire() + if(landmine_victim) + P.process_hit(get_turf(target), target) ///All of our pellets are accounted for, time to go target by target and tell them how many things they got hit by. /datum/component/pellet_cloud/proc/finalize() @@ -286,7 +299,9 @@ /// Someone who was originally "under" the grenade has moved off the tile and is now eligible for being a martyr and "covering" it /datum/component/pellet_cloud/proc/on_target_qdel(atom/target) + SIGNAL_HANDLER + UnregisterSignal(target, COMSIG_PARENT_QDELETING) targets_hit -= target LAZYREMOVE(bodies, target) - purple_hearts -= target + LAZYREMOVE(purple_hearts, target) diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index ced0b0e79ff7..bb79bbd282fa 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -227,6 +227,9 @@ if(!len) to_chat(M, "You failed to pick up anything with [parent]!") return + if(I.anchored) + to_chat(M, "\The [I] is stuck to the ground and cannot be picked up by [parent]!") + return var/datum/progressbar/progress = new(M, len, I.loc) var/list/rejections = list() while(do_after(M, 10, TRUE, parent, FALSE, CALLBACK(src, PROC_REF(handle_mass_pickup), things, I.loc, rejections, progress))) diff --git a/code/datums/elements/embed.dm b/code/datums/elements/embed.dm index 9b427b6b80c5..11072c771bab 100644 --- a/code/datums/elements/embed.dm +++ b/code/datums/elements/embed.dm @@ -176,23 +176,20 @@ * If we hit a valid target (carbon or closed turf), we create the shrapnel_type object and immediately call tryEmbed() on it, targeting what we impacted. That will lead * it to call tryForceEmbed() on its own embed element (it's out of our hands here, our projectile is done), where it will run through all the checks it needs to. */ -/datum/element/embed/proc/checkEmbedProjectile(obj/projectile/P, atom/movable/firer, atom/hit) +/datum/element/embed/proc/checkEmbedProjectile(obj/projectile/P, atom/movable/firer, atom/hit, angle, hit_zone) SIGNAL_HANDLER - if(!iscarbon(hit) && !isclosedturf(hit)) + if(!iscarbon(hit)) Detach(P) return // we don't care var/obj/item/payload = new payload_type(get_turf(hit)) - var/did_embed - if(iscarbon(hit)) - var/mob/living/carbon/C = hit - var/obj/item/bodypart/limb = C.get_bodypart(C.check_limb_hit(P.def_zone)) - did_embed = payload.tryEmbed(limb) - else - did_embed = payload.tryEmbed(hit) + var/mob/living/carbon/C = hit + var/obj/item/bodypart/limb = C.get_bodypart(hit_zone) + if(!limb) + limb = C.get_bodypart() - if(!did_embed) + if(!payload.tryEmbed(limb)) payload.failedEmbed() Detach(P) @@ -213,7 +210,6 @@ var/obj/item/bodypart/limb var/mob/living/carbon/C - var/turf/closed/T if(!forced && !prob(embed_chance)) return @@ -225,11 +221,8 @@ hit_zone = limb.body_zone else if(isbodypart(target)) limb = target + hit_zone = limb.body_zone C = limb.owner - else if(isclosedturf(target)) - T = target if(C) return checkEmbedMob(I, C, hit_zone, forced=TRUE) - else if(T) - return checkEmbedOther(I, T, forced=TRUE) diff --git a/code/datums/guestbook.dm b/code/datums/guestbook.dm new file mode 100644 index 000000000000..99104f09d715 --- /dev/null +++ b/code/datums/guestbook.dm @@ -0,0 +1,148 @@ +/** + * THE GUESTBOOK DATUM // ripped straight from mojave. + * + * Essentially, this datum handles the people that a given human knows, + * to handle getting the correct names on examine and saycode. + */ +/datum/guestbook + /// Associative list of known guests, real_name = known_name + var/list/known_names + +/datum/guestbook/Destroy(force) + known_names = null + return ..() + +/datum/guestbook/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Guestbook", "[user.real_name]'s Guestbook") + ui.set_autoupdate(FALSE) + ui.open() + +/datum/guestbook/ui_state(mob/user) + return GLOB.always_state + +/datum/guestbook/ui_data(mob/user) + var/list/data = list() + var/list/names = list() + for(var/real_name in known_names) + var/given_name = LAZYACCESS(known_names, real_name) + names += list(list("real_name" = real_name, "given_name" = given_name)) + data["names"] = names + return data + +/datum/guestbook/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return . + switch(action) + if("rename_guest") + var/real_name = params["real_name"] + var/new_name = params["new_name"] + new_name = reject_bad_name(new_name, max_length = 42) + if(!new_name) + to_chat(usr, span_warning("That's a pretty terrible name. You can do better.")) + return FALSE + if(!rename_guest(usr, null, real_name, new_name, silent = FALSE)) + return FALSE + return TRUE + if("delete_guest") + var/real_name = params["real_name"] + if(!remove_guest(usr, null, real_name, silent = FALSE)) + return FALSE + return TRUE + +/datum/guestbook/proc/try_add_guest(mob/user, mob/living/carbon/human/guest, silent = FALSE) + if(user == guest) + if(!silent) + to_chat(user, span_warning("That's you! You already know yourself plenty.")) + return FALSE + if(!visibility_checks(user, guest, silent)) + return FALSE + var/given_name = input(user, "What name do you want to give to [guest]?", "Guestbook Name", guest.get_visible_name()) + if(!given_name) + if(!silent) + to_chat(user, span_warning("Nevermind.")) + return FALSE + given_name = reject_bad_name(given_name) + if(!given_name) + if(!silent) + to_chat(user, span_warning("That's a pretty terrible name. You can do better.")) + return FALSE + if(!visibility_checks(user, guest, silent)) + return FALSE + var/face_name = guest.get_face_name("ForgetMeNot") + if(LAZYACCESS(known_names, face_name)) + if(!rename_guest(user, guest, face_name, given_name, silent)) + return FALSE + else + if(!add_guest(user, guest, face_name, given_name, silent)) + return FALSE + return TRUE + +/datum/guestbook/proc/add_guest(mob/user, mob/living/carbon/guest, real_name, given_name, silent = TRUE) + //Already exists, should be handled by rename_guest() + var/existing_name = LAZYACCESS(known_names, real_name) + if(existing_name) + if(!silent) + to_chat(user, span_warning("You already know them as \"[existing_name]\".")) + return FALSE + LAZYADDASSOC(known_names, real_name, given_name) + if(!silent) + to_chat(user, span_notice("You memorize the face of [guest] as \"[given_name]\".")) + return TRUE + +/datum/guestbook/proc/rename_guest(mob/user, mob/living/carbon/guest, real_name, given_name, silent = TRUE) + var/old_name = LAZYACCESS(known_names, real_name) + if(!old_name) + return FALSE + known_names[real_name] = given_name + if(!silent) + to_chat(user, span_notice("You re-memorize the face of \"[old_name]\" as \"[given_name]\".")) + return TRUE + +/datum/guestbook/proc/try_remove_guest(mob/user, mob/living/carbon/human/guest, silent = FALSE) + if(user == guest) + if(!silent) + to_chat(user, span_warning("That's you! You'll never forget yourself.")) + return + if(!visibility_checks(user, guest, silent)) + return FALSE + var/face_name = guest.get_face_name("ForgetMeNot") + if(!remove_guest(user, guest, face_name, silent)) + return FALSE + return TRUE + +/datum/guestbook/proc/remove_guest(mob/user, mob/living/carbon/guest, real_name, silent = TRUE) + //Already exists, should be handled by rename_guest() + var/existing_name = LAZYACCESS(known_names, real_name) + if(!existing_name) + if(!silent) + to_chat(user, span_warning("You don't know them in the first place.")) + return FALSE + LAZYREMOVE(known_names, real_name) + if(!silent) + to_chat(user, span_notice("You forget the face of \"[existing_name]\".")) + return TRUE + +/datum/guestbook/proc/get_known_name(mob/user, mob/living/carbon/guest, real_name) + if(user == guest || isAdminObserver(user)) + return real_name + return LAZYACCESS(known_names, real_name) + +/datum/guestbook/proc/visibility_checks(mob/user, mob/living/carbon/human/guest, silent = FALSE) + if(QDELETED(guest)) + if(!silent) + to_chat(user, span_warning("What?")) + return FALSE + var/visible_name = guest.get_visible_name("") + var/face_name = guest.get_face_name("") + if(!visible_name || !face_name) + if(!silent) + to_chat(user, span_warning("You can't see their face very well!")) + return FALSE + if(get_dist(user, guest) > 4) + if(!silent) + to_chat(user, span_warning("You need to take a closer look at them!")) + return FALSE + return TRUE diff --git a/code/datums/keybinding/client.dm b/code/datums/keybinding/client.dm index e4b940c7f722..3e78c4ac4c23 100644 --- a/code/datums/keybinding/client.dm +++ b/code/datums/keybinding/client.dm @@ -45,3 +45,39 @@ return user.mob.button_pressed_F12() return TRUE + +/client + var/fullscreen = FALSE +/datum/keybinding/client/t_fullscreen + hotkey_keys = list("F11") + name = "change_fullscreen" + full_name = "Toggle Fullscreen" + description = "Change window to Fullscreen or back" + keybind_signal = COMSIG_KB_CLIENT_FULLSCREEN_DOWN + +/datum/keybinding/client/t_fullscreen/down(client/C) + . = ..() + C.toggle_fullscreen() + + +/client/verb/toggle_fullscreen() + set name = "Toggle Fullscreen" + set category = "OOC" + + fullscreen = !fullscreen + + if (fullscreen) + winset(usr, "mainwindow", "on-size=") + winset(usr, "mainwindow", "titlebar=false") + winset(usr, "mainwindow", "can-resize=false") + winset(usr, "mainwindow", "menu=") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "is-maximized=true") + else + winset(usr, "mainwindow", "titlebar=true") + winset(usr, "mainwindow", "can-resize=true") + winset(usr, "mainwindow", "menu=menu") + winset(usr, "mainwindow", "is-maximized=false") + winset(usr, "mainwindow", "on-size=fitviewport") + + fit_viewport() diff --git a/code/datums/mapgen/planetary/LavaGenerator.dm b/code/datums/mapgen/planetary/LavaGenerator.dm index c244f3ef2560..ef66cca1103f 100644 --- a/code/datums/mapgen/planetary/LavaGenerator.dm +++ b/code/datums/mapgen/planetary/LavaGenerator.dm @@ -84,7 +84,7 @@ /datum/biome/lavaland open_turf_types = list( - /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit = 1 + /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit = 1, ) flora_spawn_chance = 1 flora_spawn_list = list( @@ -93,17 +93,22 @@ /obj/structure/flora/ash/fern = 5, /obj/structure/flora/ash/fireblossom = 1, /obj/structure/flora/ash/puce = 5, + /obj/item/mine/pressure/explosive/rusty/live = 1, ) feature_spawn_chance = 0.3 feature_spawn_list = list( + /obj/structure/flora/rock/hell = 20, + /obj/structure/elite_tumor = 4, + /obj/structure/geyser/random = 4, + /obj/effect/spawner/lootdrop/anomaly/lava = 2, /obj/structure/flora/rock/hell = 14, /obj/structure/vein = 5, /obj/structure/vein/classtwo = 2, /obj/structure/elite_tumor = 2, /obj/structure/geyser/random = 2, /obj/structure/vein/classthree = 1, + /obj/effect/spawner/minefield = 1, /obj/effect/spawner/lootdrop/anomaly/lava = 1, - ) mob_spawn_chance = 4 mob_spawn_list = list( @@ -250,14 +255,17 @@ /obj/structure/flora/ash/cacti = 1, /obj/structure/flora/ash/tall_shroom = 2, /obj/structure/flora/ash/fern = 2, - /obj/structure/flora/ash/puce = 2 + /obj/structure/flora/ash/puce = 2, + /obj/item/mine/proximity/explosive/live = 1, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) /datum/biome/cave/lavaland/rocky open_turf_types = list(/turf/open/floor/plating/asteroid/purple = 1) flora_spawn_list = list( - /obj/structure/flora/rock/pile/lava = 1, - /obj/structure/flora/rock/lava = 1 + /obj/structure/flora/rock/pile/lava = 3, + /obj/structure/flora/rock/lava = 3, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) flora_spawn_chance = 5 @@ -271,6 +279,7 @@ /obj/structure/flora/ash/cap_shroom = 2, /obj/structure/flora/ash/stem_shroom = 2, /obj/structure/flora/ash/cacti = 1, + /obj/item/mine/pressure/explosive/rusty/live = 1, /obj/structure/flora/ash/tall_shroom = 2 ) diff --git a/code/datums/mapgen/planetary/RockGenerator.dm b/code/datums/mapgen/planetary/RockGenerator.dm index 95e1273bb9d7..c675c87714f5 100644 --- a/code/datums/mapgen/planetary/RockGenerator.dm +++ b/code/datums/mapgen/planetary/RockGenerator.dm @@ -91,6 +91,7 @@ /obj/structure/vein/classtwo = 40, /obj/effect/spawner/lootdrop/anomaly/rock = 10, /obj/structure/vein/classthree = 10, + /obj/effect/spawner/minefield = 2, /obj/effect/spawner/lootdrop/anomaly/big = 1 //get out of here stalker ) @@ -98,10 +99,11 @@ mob_spawn_chance = 3 flora_spawn_list = list( - /obj/structure/flora/rock/rockplanet = 3, - /obj/structure/flora/tree/cactus = 4, - /obj/structure/flora/ash/cacti = 1, - /obj/structure/flora/ash/garden/arid = 1, + /obj/structure/flora/rock/rockplanet = 6, + /obj/structure/flora/tree/cactus = 8, + /obj/structure/flora/ash/cacti = 2, + /obj/structure/flora/ash/garden/arid = 2, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) mob_spawn_list = list( @@ -136,6 +138,7 @@ /obj/structure/flora/ash/cacti = 2, /obj/structure/flora/grass/rockplanet/dead = 8, /obj/structure/flora/ash/garden/arid = 1, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) /datum/biome/cave/rock @@ -143,10 +146,12 @@ open_turf_types = list(/turf/open/floor/plating/asteroid/rockplanet/cracked = 1) flora_spawn_chance = 4 flora_spawn_list = list( - /obj/structure/flora/rock/rockplanet = 4, - /obj/structure/flora/rock/pile/rockplanet = 4, - /obj/structure/flora/ash/fern = 2, - /obj/structure/flora/ash/puce = 1, + /obj/structure/flora/rock/rockplanet = 8, + /obj/structure/flora/rock/pile/rockplanet = 8, + /obj/structure/flora/ash/fern = 4, + /obj/structure/flora/ash/puce = 2, + /obj/item/mine/pressure/explosive/rusty/live = 1, + /obj/item/mine/proximity/explosive/live = 1, ) feature_spawn_chance = 0.5 feature_spawn_list = list( @@ -155,6 +160,7 @@ /obj/structure/vein/classtwo = 2, /obj/structure/elite_tumor = 1, /obj/structure/vein/classthree = 1, + /obj/effect/spawner/minefield = 1, /obj/structure/spawner/ice_moon/rockplanet = 4, /obj/effect/spawner/lootdrop/anomaly/rock/cave = 1, ) @@ -172,11 +178,13 @@ open_turf_types = list(/turf/open/floor/plating/asteroid/rockplanet/cracked = 1) flora_spawn_chance = 5 flora_spawn_list = list( - /obj/structure/flora/rock/rockplanet = 4, - /obj/structure/flora/rock/pile/rockplanet = 4, - /obj/structure/flora/ash/fern = 4, - /obj/structure/flora/ash/puce = 2, - /obj/structure/flora/ash/garden/arid = 1, + /obj/structure/flora/rock/rockplanet = 8, + /obj/structure/flora/rock/pile/rockplanet = 8, + /obj/structure/flora/ash/fern = 6, + /obj/structure/flora/ash/puce = 4, + /obj/structure/flora/ash/garden/arid = 2, + /obj/item/mine/proximity/explosive/live = 1, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) mob_spawn_list = list( /mob/living/simple_animal/hostile/netherworld/asteroid = 30, diff --git a/code/datums/mapgen/planetary/SnowGenerator.dm b/code/datums/mapgen/planetary/SnowGenerator.dm index a066647a0e4d..8489cbb970ba 100644 --- a/code/datums/mapgen/planetary/SnowGenerator.dm +++ b/code/datums/mapgen/planetary/SnowGenerator.dm @@ -90,12 +90,13 @@ /turf/open/floor/plating/asteroid/snow/lit = 25 ) flora_spawn_list = list( - /obj/structure/flora/tree/pine = 2, - /obj/structure/flora/rock/icy = 2, - /obj/structure/flora/rock/pile/icy = 2, - /obj/structure/flora/grass/both = 6, - /obj/structure/flora/ash/chilly = 2, - /obj/structure/flora/ash/garden/frigid = 1, + /obj/structure/flora/tree/pine = 4, + /obj/structure/flora/rock/icy = 4, + /obj/structure/flora/rock/pile/icy = 4, + /obj/structure/flora/grass/both = 12, + /obj/structure/flora/ash/chilly = 4, + /obj/structure/flora/ash/garden/frigid = 2, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) flora_spawn_chance = 10 mob_spawn_chance = 1 @@ -118,6 +119,7 @@ /obj/structure/spawner/ice_moon/demonic_portal/medium_threat = 50, /obj/structure/spawner/ice_moon/demonic_portal/high_threat = 13, /obj/structure/vein/ice = 25, + /obj/effect/spawner/minefield = 2, /obj/structure/vein/ice/classtwo = 50, /obj/structure/vein/ice/classthree = 10, ) @@ -148,9 +150,10 @@ /datum/biome/snow/forest flora_spawn_chance = 15 flora_spawn_list = list( - /obj/structure/flora/tree/pine = 10, - /obj/structure/flora/tree/dead = 3, - /obj/structure/flora/grass/both = 4 + /obj/structure/flora/tree/pine = 20, + /obj/structure/flora/tree/dead = 6, + /obj/structure/flora/grass/both = 8, + /obj/item/mine/pressure/explosive/rusty/live = 1, ) /datum/biome/snow/forest/dense @@ -159,6 +162,7 @@ /obj/structure/flora/tree/pine = 20, /obj/structure/flora/grass/both = 6, /obj/structure/flora/tree/dead = 3, + /obj/item/mine/pressure/explosive/rusty/live = 1, ) /datum/biome/arctic @@ -242,15 +246,17 @@ ) flora_spawn_chance = 6 flora_spawn_list = list( - /obj/structure/flora/grass/both = 5, - /obj/structure/flora/rock/pile/icy = 1, - /obj/structure/flora/rock/icy = 1, - /obj/structure/flora/ash/space = 1, - /obj/structure/flora/ash/leaf_shroom = 1, - /obj/structure/flora/ash/cap_shroom = 1, - /obj/structure/flora/ash/stem_shroom = 1, - /obj/structure/flora/ash/puce = 1, - /obj/structure/flora/ash/garden/frigid = 1, + /obj/structure/flora/grass/both = 10, + /obj/structure/flora/rock/pile/icy = 2, + /obj/structure/flora/rock/icy = 2, + /obj/structure/flora/ash/space = 2, + /obj/structure/flora/ash/leaf_shroom = 2, + /obj/structure/flora/ash/cap_shroom = 2, + /obj/structure/flora/ash/stem_shroom = 2, + /obj/structure/flora/ash/puce = 2, + /obj/structure/flora/ash/garden/frigid = 2, + /obj/item/mine/proximity/explosive/live = 1, + /obj/item/mine/pressure/explosive/rusty/live = 1 ) closed_turf_types = list( /turf/closed/mineral/random/snow = 1 @@ -279,6 +285,7 @@ /obj/structure/vein/ice = 30, /obj/structure/vein/ice/classtwo = 50, /obj/structure/vein/ice/classthree = 6, + /obj/effect/spawner/minefield = 2, ) /datum/biome/cave/snow/thawed @@ -317,9 +324,10 @@ ) flora_spawn_chance = 3 flora_spawn_list = list( - /obj/structure/flora/ash/leaf_shroom = 1, - /obj/structure/flora/ash/cap_shroom = 1, - /obj/structure/flora/ash/stem_shroom = 1, + /obj/structure/flora/ash/leaf_shroom = 3, + /obj/structure/flora/ash/cap_shroom = 3, + /obj/structure/flora/ash/stem_shroom = 3, + /obj/item/mine/pressure/explosive/fire/live = 1, ) feature_spawn_chance = 0.2 diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index d0243740bc3b..c6e1244be129 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -125,7 +125,9 @@ //the illusive shrapnel plant - /obj/effect/mine/shrapnel/human_only = 10 + /obj/item/mine/pressure/explosive/shrapnel/live = 30, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield = 2 ) feature_spawn_list = list( @@ -202,7 +204,9 @@ /obj/effect/spawner/lootdrop/maintenance/four = 20, /obj/structure/flora/ash/garden/waste = 300, /obj/structure/flora/ash/glowshroom = 1800, - /obj/effect/mine/shrapnel/human_only = 10 + /obj/item/mine/pressure/explosive/shrapnel/live = 30, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield = 2 ) /datum/biome/waste/tar_bed //tar colorings @@ -246,7 +250,10 @@ /obj/structure/closet/crate/secure/loot = 30, /obj/effect/spawner/lootdrop/waste/atmos_can = 180, /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, - /obj/effect/spawner/lootdrop/waste/salvageable = 300 + /obj/effect/spawner/lootdrop/waste/salvageable = 300, + /obj/item/mine/pressure/explosive/rad/live = 30, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield = 2 ) mob_spawn_list = list( //nor organics, more biased towards hivebots though /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, @@ -308,7 +315,9 @@ /obj/effect/spawner/lootdrop/waste/salvageable = 400, /obj/structure/flora/ash/garden/waste = 70, /obj/structure/flora/ash/glowshroom = 400, //more common in caves - /obj/effect/mine/shrapnel/human_only = 10 + /obj/item/mine/pressure/explosive/rad/live = 10, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield = 2 ) feature_spawn_list = list( @@ -362,7 +371,10 @@ /obj/effect/spawner/lootdrop/maintenance/two = 50, /obj/effect/spawner/lootdrop/maintenance/three = 100, /obj/effect/spawner/lootdrop/maintenance/four = 200, - /obj/structure/flora/ash/glowshroom = 1800 + /obj/structure/flora/ash/glowshroom = 1800, + /obj/item/mine/pressure/explosive/rad/live = 30, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield = 2 ) feature_spawn_chance = 12 @@ -397,6 +409,9 @@ /obj/effect/spawner/lootdrop/maintenance/three = 20, /obj/effect/spawner/lootdrop/maintenance/four = 40, /obj/effect/spawner/lootdrop/waste/salvageable = 80, + /obj/item/mine/proximity/spawner/manhack/live = 40, + /obj/effect/spawner/lootdrop/mine = 8, + /obj/effect/spawner/minefield/manhack = 2 ) mob_spawn_list = list( //nor organics, more biased towards hivebots though /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, @@ -427,7 +442,8 @@ /obj/effect/spawner/lootdrop/maintenance/three = 10, /obj/effect/spawner/lootdrop/maintenance/four = 20, /obj/effect/spawner/lootdrop/waste/salvageable = 40, - /obj/structure/foamedmetal = 100 + /obj/structure/foamedmetal = 100, + /obj/item/mine/proximity/spawner/manhack/live = 20 ) mob_spawn_list = list( //Whoops! All hivebots! /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, @@ -440,6 +456,7 @@ /obj/structure/spawner/wasteplanet/hivebot/low_threat = 20, /obj/structure/spawner/wasteplanet/hivebot/medium_threat = 10, /obj/structure/spawner/wasteplanet/hivebot/high_threat = 5, - /obj/structure/spawner/wasteplanet/hivebot/extreme_threat = 2 + /obj/structure/spawner/wasteplanet/hivebot/extreme_threat = 2, + /obj/effect/spawner/minefield/manhack = 2 ) feature_spawn_chance = 2 //hivebot biomes should have their dongles diff --git a/code/datums/mapgen/single_biome/WasteplanetCaves.dm b/code/datums/mapgen/single_biome/WasteplanetCaves.dm index 472a5cf4d54b..08f63ba3149a 100644 --- a/code/datums/mapgen/single_biome/WasteplanetCaves.dm +++ b/code/datums/mapgen/single_biome/WasteplanetCaves.dm @@ -39,10 +39,12 @@ /obj/structure/salvageable/circuit_imprinter = 8, /obj/structure/salvageable/destructive_analyzer = 8, /obj/structure/salvageable/server = 8, + /obj/item/mine/pressure/explosive/rusty/live = 30, + /obj/effect/spawner/lootdrop/mine = 8 ) feature_spawn_list = list( /obj/structure/geyser/random = 1, - /obj/effect/mine/shrapnel/human_only = 1 + /obj/effect/spawner/minefield = 1 ) mob_spawn_list = list( //hivebots, not too difficult diff --git a/code/datums/mind.dm b/code/datums/mind.dm index fc91d2c71de1..36ec4a1b5ae6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -79,6 +79,9 @@ /// The index for our current scar slot, so we don't have to constantly check the savefile (unlike the slots themselves, this index is independent of selected char slot, and increments whenever a valid char is joined with) var/current_scar_slot_index + /// Guestbook datum, in case we actually make use of the guestbook mechanics + var/datum/guestbook/guestbook + ///Skill multiplier, adjusts how much xp you get/loose from adjust_xp. Dont override it directly, add your reason to experience_multiplier_reasons and use that as a key to put your value in there. var/experience_multiplier = 1 ///Skill multiplier list, just slap your multiplier change onto this with the type it is coming from as key. @@ -95,6 +98,7 @@ key = _key soulOwner = src martial_art = default_martial_art + guestbook = new() init_known_skills() /datum/mind/Destroy() @@ -102,6 +106,7 @@ if(islist(antag_datums)) QDEL_LIST(antag_datums) QDEL_NULL(language_holder) + QDEL_NULL(guestbook) set_current(null) soulOwner = null return ..() diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 5ffa3778edc6..25621a613eeb 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -37,7 +37,7 @@ bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA user = User - LAZYADDASSOC(user.progressbars, bar_loc, src) + LAZYADDASSOCLIST(user.progressbars, bar_loc, src) var/list/bars = user.progressbars[bar_loc] listindex = bars.len diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm new file mode 100644 index 000000000000..4c856cf99d3f --- /dev/null +++ b/code/datums/wires/mines.dm @@ -0,0 +1,82 @@ +/datum/wires/mine + holder_type = /obj/item/mine/pressure + randomize = TRUE + +/datum/wires/mine/New(atom/holder) + wires = list( + WIRE_BOOM, WIRE_DELAYBOOM, WIRE_PIN, WIRE_RESET + ) + ..() + +/datum/wires/mine/interactable(mob/user) + var/obj/item/mine/pressure/ourmine = holder + if(ourmine.open_panel) + return TRUE + +//are you feelin lucky, punk? +/datum/wires/mine/on_pulse(wire) + var/obj/item/mine/pressure/ourmine = holder + switch(wire) + if(WIRE_BOOM)//oopsies + holder.visible_message(span_userdanger("[icon2html(ourmine, viewers(holder))] \The [ourmine] makes a shrill noise! It's go-")) + ourmine.trigger_mine() + if(WIRE_DELAYBOOM)//oopsies but you get to run + ourmine.blast_delay = clamp(ourmine.blast_delay * 5, 8, 50) + holder.visible_message(span_userdanger("[icon2html(ourmine, viewers(holder))] \The [ourmine] makes a shrill noise! It's go-")) + ourmine.trigger_mine() + //Resets the detonation pin, allowing someone to step off the mine. Minor success. + if(WIRE_PIN) + if(ourmine.clicked == TRUE) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] You hear something inside \the [ourmine] click softly.")) + playsound(ourmine, 'sound/weapons/empty.ogg', 30, TRUE) + ourmine.clicked = FALSE + else + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s detonation pad shifts slightly. Nothing happens.")) + if(WIRE_RESET)//Disarms the mine, allowing it to be picked up. Major success. + if(ourmine.armed && ourmine.anchored) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s arming lights fade, and the securing bolts loosen. ")) + playsound(ourmine, 'sound/machines/click.ogg', 100, TRUE) + ourmine.disarm() + else if(ourmine.anchored) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s yellow arming light flickers.")) + else + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s securing bolt shifts. Nothing happens.")) + +/datum/wires/mine/on_cut(wire, mend) + var/obj/item/mine/pressure/ourmine = holder + switch(wire) + if(WIRE_BOOM) + if(!mend) + holder.visible_message(span_userdanger("[icon2html(ourmine, viewers(holder))] \The [ourmine] makes a shrill noise! It's go-")) + ourmine.trigger_mine() + if(WIRE_DELAYBOOM) + if(!mend) + ourmine.blast_delay = clamp(ourmine.blast_delay * 5, 8, 50) + holder.visible_message(span_userdanger("[icon2html(ourmine, viewers(holder))] \The [ourmine] makes a shrill noise! It's go-")) + ourmine.trigger_mine() + //Disables the detonation pin. Nothing will happen when the mine is triggered. + //Mine can still be exploded by cutting wires & damage. + if(WIRE_PIN) + if(!mend) + ourmine.dud = TRUE + if(ourmine.clicked == TRUE) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] You hear something inside \the [ourmine] shift out of place.")) + playsound(ourmine, 'sound/weapons/empty.ogg', 30, TRUE) + ourmine.clicked = FALSE + else + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s detonation pad goes loose.")) + ourmine.foot_on_mine = null + else + ourmine.dud = FALSE + ourmine.clicked = FALSE + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] You hear something inside \the [ourmine] shift back into place.")) + if(WIRE_RESET) + if(!mend) + if(ourmine.armed && ourmine.anchored) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s arming lights fade, and the securing bolts loosen. Disarmed. ")) + playsound(ourmine, 'sound/machines/click.ogg', 100, TRUE) + ourmine.disarm() + else if(ourmine.anchored) + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s yellow arming light flickers.")) + else + holder.visible_message(span_notice("[icon2html(ourmine, viewers(holder))] \The [ourmine]'s securing bolt shifts. Nothing happens.")) diff --git a/code/game/area/ship_areas.dm b/code/game/area/ship_areas.dm index abf40f900af5..5f4e75b71d4d 100644 --- a/code/game/area/ship_areas.dm +++ b/code/game/area/ship_areas.dm @@ -68,7 +68,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/ship dynamic_lighting = DYNAMIC_LIGHTING_FORCED - has_gravity = STANDARD_GRAVITY always_unpowered = FALSE area_flags = VALID_TERRITORY | BLOBS_ALLOWED // Loading the same shuttle map at a different time will produce distinct area instances. icon_state = "shuttle" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6c6849724bde..b539e421508d 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -160,6 +160,7 @@ var/hitsound_type = PROJECTILE_HITSOUND_NON_LIVING ///volume wanted for being hit var/hitsound_volume = 50 + /** * Called when an atom is created in byond (built in engine proc) * @@ -1555,6 +1556,7 @@ * * No gravity if this atom is in is a space turf * * Gravity if the area it's in always has gravity * * Gravity if there's a gravity generator on the z level + * * Gravity if there is a ship gravity generator in a ship * * Gravity if the Z level has an SSMappingTrait for ZTRAIT_GRAVITY * * otherwise no gravity */ @@ -1587,12 +1589,22 @@ else // See if there's a gravity generator on our map zone var/datum/map_zone/mapzone = T.get_map_zone() + var/max_grav = T.virtual_level_trait(ZTRAIT_GRAVITY) if(mapzone?.gravity_generators.len) - var/max_grav = 0 for(var/obj/machinery/gravity_generator/main/G as anything in mapzone.gravity_generators) max_grav = max(G.setting,max_grav) - return max_grav - return T.virtual_level_trait(ZTRAIT_GRAVITY) + // Check for ship-based gravity + var/area/ship/ship = A + if(istype(ship)) + var/obj/docking_port/mobile/shuttle = ship.mobile_port + if(shuttle) + for(var/datum/weakref/weakref as anything in shuttle.gravgen_list) + var/obj/machinery/power/ship_gravity/SG = weakref.resolve() + if(!SG) + shuttle.gravgen_list -= weakref + continue + max_grav = max(SG.active,max_grav) + return max_grav /** * Called when a mob examines (shift click or verb) this atom twice (or more) within EXAMINE_MORE_TIME (default 1.5 seconds) @@ -1673,7 +1685,11 @@ active_hud.screentip_text.maptext = "" else //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this - active_hud.screentip_text.maptext = "[name]" + active_hud.screentip_text.maptext = "[get_screentip_name(client)]" + +/// Returns the atom name that should be used on screentip +/atom/proc/get_screentip_name(client/hovering_client) + return name ///Called whenever a player is spawned on the same turf as this atom. /atom/proc/join_player_here(mob/M) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 7dd3d612ae81..989db20efd1f 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -560,7 +560,7 @@ if(!client) return if(new_virtual_z) - LAZYADDASSOC(SSmobs.players_by_virtual_z, "[new_virtual_z]", src) + LAZYADDASSOCLIST(SSmobs.players_by_virtual_z, "[new_virtual_z]", src) SSidlenpcpool.try_wakeup_virtual_z(new_virtual_z) /mob/dead/on_virtual_z_change(new_virtual_z, previous_virtual_z) @@ -570,7 +570,7 @@ if(!client) return if(new_virtual_z) - LAZYADDASSOC(SSmobs.dead_players_by_virtual_z, "[new_virtual_z]", src) + LAZYADDASSOCLIST(SSmobs.dead_players_by_virtual_z, "[new_virtual_z]", src) // Make sure you know what you're doing if you call this, this is intended to only be called by byond directly. // You probably want CanPass() diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index a847b44d39a1..b54c192f4407 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -49,7 +49,7 @@ if(previous_virtual_z) LAZYREMOVEASSOC(GLOB.navbeacons, "[previous_virtual_z]", src) if(new_virtual_z) - LAZYADDASSOC(GLOB.navbeacons, "[new_virtual_z]", src) + LAZYADDASSOCLIST(GLOB.navbeacons, "[new_virtual_z]", src) ..() // set the transponder codes assoc list from codes_txt diff --git a/code/game/machinery/shuttle/ship_gravity.dm b/code/game/machinery/shuttle/ship_gravity.dm new file mode 100644 index 000000000000..bfcf937f341a --- /dev/null +++ b/code/game/machinery/shuttle/ship_gravity.dm @@ -0,0 +1,124 @@ +// +// Ship Gravity Generator +// + +/obj/machinery/power/ship_gravity + name = "gravitational generator" + desc = "A ship-portable gravity generator, capable of providing gravity throughout the vessel it is installed on." + icon = 'icons/obj/machines/ship_gravity.dmi' + icon_state = "shipgrav" + base_icon_state = "shipgrav" + density = TRUE + idle_power_usage = 10 + active_power_usage = 5000 + circuit = /obj/item/circuitboard/machine/ship_gravity + var/charging = FALSE + var/active = FALSE + var/charge = 0 + +/obj/machinery/power/ship_gravity/unanchored + anchored = FALSE + +/obj/machinery/power/ship_gravity/admin + idle_power_usage = 0 + active_power_usage = 0 + active = TRUE + +/obj/machinery/power/ship_gravity/Initialize() + . = ..() + if(anchored) + connect_to_network() + +/obj/machinery/power/ship_gravity/process() + if(charging && (!active_power_usage || surplus() >= active_power_usage)) + add_load(active_power_usage) + charge = min(charge+1, 5) + if(charge >= 5) + set_state(TRUE) + else + charge = max(charge-1, 0) + if(!charge) + set_state(FALSE) + update_appearance() + +/obj/machinery/power/ship_gravity/proc/set_state(toggle) + if(toggle == active) + return + if(toggle) + active = TRUE + playsound(src.loc, 'sound/effects/empulse.ogg', 100, TRUE) + visible_message(span_warning("The [src.name] finishes charging!"), blind_message = span_hear("You hear a low hum fade in.")) + else + visible_message(span_danger("The [src.name] shuts down due to lack of power!"), blind_message = span_hear("You hear a low hum fade out.")) + active = FALSE + log_game("[src] deactivated due to lack of power at [AREACOORD(src)]", INVESTIGATE_GRAVITY) + update_appearance() + +/obj/machinery/power/ship_gravity/update_overlays() + . = ..() + var/mutable_appearance/charge_state + if(active) + charge_state = mutable_appearance(icon, "charge_active") + if(charge < 5) + charge_state = mutable_appearance(icon, "charge_[charge]") + . += charge_state + +/obj/machinery/power/ship_gravity/examine(mob/user) + . = ..() + if(anchored) + . += span_info("It's secured to the floor, you can unsecure it with a wrench.") + else + . += span_info("It's currently unsecured, you can secure it with a wrench.") + if(in_range(user, src) || isobserver(user)) + if(!charging && !charge) + . += span_info("Its status display is currently turned off.") + else + . += span_info("Its status display reads: Current charge at [charge*20]%.") + +/obj/machinery/power/ship_gravity/screwdriver_act(mob/living/user, obj/item/I) + ..() + if(charging || charge) + to_chat(user, span_notice("You cannot open the maintenance panel on [src] while it is active!")) + return TRUE + default_deconstruction_screwdriver(user, "shipgrav_o", "shipgrav", I) + return TRUE + +/obj/machinery/power/ship_gravity/wrench_act(mob/living/user, obj/item/I) + . =..() + if(active) + to_chat(user, span_notice("You cannot unsecure [src] while it is active!")) + return TRUE + default_unfasten_wrench(user, I) + return TRUE + +/obj/machinery/power/ship_gravity/crowbar_act(mob/living/user, obj/item/I) + . = ..() + default_deconstruction_crowbar(I) + return TRUE + +/obj/machinery/power/ship_gravity/default_unfasten_wrench(mob/user, obj/item/I, time = 20) + . = ..() + if(. == SUCCESSFUL_UNFASTEN) + if(anchored) + connect_to_network() + else + disconnect_from_network() + charging = FALSE + set_state(FALSE) + +/obj/machinery/power/ship_gravity/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + . = ..() + port.gravgen_list |= WEAKREF(src) + +/obj/machinery/power/ship_gravity/interact(mob/user) + if(!powernet && active_power_usage) + to_chat(user, span_notice("[src] isn't connected to a wire!")) + return + if(panel_open) + return + charging = !charging + play_click_sound("switch") + user.visible_message(span_warning("[user] flips [src]'s power [charging ? "on" : "off"]!"), \ + span_info("You flip [src]'s power lever, turning it [charging ? "on" : "off"]"), \ + span_hear("You hear a heavy lever being pulled.")) + update_appearance() diff --git a/code/game/machinery/shuttle/shuttle_engine.dm b/code/game/machinery/shuttle/shuttle_engine.dm index 267c8d102918..c4fd424d4076 100644 --- a/code/game/machinery/shuttle/shuttle_engine.dm +++ b/code/game/machinery/shuttle/shuttle_engine.dm @@ -12,7 +12,7 @@ var/enabled = TRUE ///How much thrust this engine generates when burned fully. var/thrust = 0 - ///I don't really know what this is but it's used a lot + ///Whether this engine is actively providing thrust to the ship var/thruster_active = FALSE /** diff --git a/code/modules/power/turbine.dm b/code/game/machinery/shuttle/turbine.dm similarity index 54% rename from code/modules/power/turbine.dm rename to code/game/machinery/shuttle/turbine.dm index ba390b1cf873..7d310d37cd30 100644 --- a/code/modules/power/turbine.dm +++ b/code/game/machinery/shuttle/turbine.dm @@ -25,48 +25,60 @@ /obj/machinery/power/compressor name = "compressor" desc = "The compressor stage of a gas turbine generator." - icon = 'icons/obj/atmospherics/pipes/simple.dmi' + icon = 'icons/obj/atmospherics/components/turbine.dmi' icon_state = "compressor" density = TRUE resistance_flags = FIRE_PROOF CanAtmosPass = ATMOS_PASS_DENSITY + use_power = NO_POWER_USE // powered by gas flow + interacts_with_air = TRUE circuit = /obj/item/circuitboard/machine/power_compressor - var/obj/machinery/power/turbine/turbine + var/obj/machinery/power/shuttle/engine/turbine/turbine var/datum/gas_mixture/gas_contained - var/turf/inturf var/starter = 0 var/rpm = 0 var/rpmtarget = 0 var/capacity = 1e6 var/comp_id = 0 - var/efficiency + var/efficiency = 1 + var/intake_ratio = 0.1 // might add a way to adjust this in-game later -/obj/machinery/power/turbine/lavaland +/obj/machinery/power/shuttle/engine/turbine/lavaland destroy_output = TRUE /obj/machinery/power/compressor/Destroy() + SSair.stop_processing_machine(src) if (turbine && turbine.compressor == src) turbine.compressor = null + if(isopenturf(loc)) + loc.assume_air(gas_contained) + loc.air_update_turf() turbine = null return ..() -/obj/machinery/power/turbine +/obj/machinery/power/shuttle/engine/turbine name = "gas turbine generator" desc = "A gas turbine used for backup power generation." - icon = 'icons/obj/atmospherics/pipes/simple.dmi' + icon = 'icons/obj/atmospherics/components/turbine.dmi' icon_state = "turbine" density = TRUE resistance_flags = FIRE_PROOF CanAtmosPass = ATMOS_PASS_DENSITY + use_power = NO_POWER_USE // powered by gas flow + interacts_with_air = TRUE circuit = /obj/item/circuitboard/machine/power_turbine + thrust = 0 // no thrust by default + icon_state_closed = "turbine" + icon_state_open = "turbine" + icon_state_off = "turbine" var/opened = 0 var/obj/machinery/power/compressor/compressor - var/turf/outturf - var/lastgen + var/lastgen = 0 var/productivity = 1 var/destroy_output = FALSE //Destroy the output gas instead of actually outputting it. Used on lavaland to prevent cooking the zlevel -/obj/machinery/power/turbine/Destroy() +/obj/machinery/power/shuttle/engine/turbine/Destroy() + SSair.stop_processing_machine(src) if (compressor && compressor.turbine == src) compressor.turbine = null compressor = null @@ -74,29 +86,39 @@ // the inlet stage of the gas turbine electricity generator -/obj/machinery/power/compressor/Initialize() +/obj/machinery/power/compressor/Initialize(mapload) . = ..() // The inlet of the compressor is the direction it faces gas_contained = new - inturf = get_step(src, dir) + SSair.start_processing_machine(src, mapload) locate_machinery() if(!turbine) obj_break() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/power/compressor/LateInitialize() + . = ..() + var/turf/comp_turf = get_turf(src) + comp_turf.ImmediateCalculateAdjacentTurfs() // turbine blocks atmos so update the turf it's on or stuff breaks #define COMPFRICTION 5e5 /obj/machinery/power/compressor/locate_machinery() if(turbine) return - turbine = locate() in get_step(src, get_dir(inturf, src)) + turbine = locate() in get_step(src, turn(dir, 180)) if(turbine) + set_machine_stat(machine_stat & ~BROKEN) turbine.locate_machinery() + else + turbine = null + obj_break() /obj/machinery/power/compressor/RefreshParts() var/E = 0 for(var/obj/item/stock_parts/manipulator/M in component_parts) E += M.rating - efficiency = E / 6 + efficiency = max(E / 6, 1) /obj/machinery/power/compressor/examine(mob/user) . = ..() @@ -108,49 +130,63 @@ return if(default_change_direction_wrench(user, I)) - turbine = null - inturf = get_step(src, dir) - locate_machinery() if(turbine) to_chat(user, "Turbine connected.") set_machine_stat(machine_stat & ~BROKEN) else to_chat(user, "Turbine not connected.") - obj_break() return default_deconstruction_crowbar(I) -/obj/machinery/power/compressor/process() - if(!starter) - return - if(!turbine || (turbine.machine_stat & BROKEN)) - starter = FALSE - if(machine_stat & BROKEN || panel_open) - starter = FALSE - return - cut_overlays() - - rpm = 0.9* rpm + 0.1 * rpmtarget +/obj/machinery/power/compressor/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) + . = ..() + if(panel_open) + set_machine_stat(machine_stat | MAINT) + else + set_machine_stat(machine_stat & ~MAINT) - // It's a simplified version taking only 1/10 of the moles from the turf nearby. It should be later changed into a better version - // above todo 7 years and counting +//update when moved or changing direction +/obj/machinery/power/compressor/setDir(newdir) + . = ..() + locate_machinery() - inturf.transfer_air_ratio(gas_contained, 0.1) +/obj/machinery/power/compressor/Move(atom/newloc, direct, glide_size_override) + . = ..() + locate_machinery() -// RPM function to include compression friction - be advised that too low/high of a compfriction value can make things screwy +/obj/machinery/power/compressor/process(delta_time) + return +/obj/machinery/power/compressor/process_atmos(delta_time) + // RPM function to include compression friction - be advised that too low/high of a compfriction value can make things screwy + rpm -= 1 + rpm = (0.9 * rpm) + (0.1 * rpmtarget) rpm = min(rpm, (COMPFRICTION*efficiency)/2) - rpm = max(0, rpm - (rpm*rpm)/(COMPFRICTION*efficiency)) + rpm = max(0, rpm - (rpm**2)/(COMPFRICTION*efficiency)) - if(starter && !(machine_stat & NOPOWER)) - use_power(2800) - if(rpm<1000) - rpmtarget = 1000 - else - if(rpm<1000) - rpmtarget = 0 + update_overlays() + + if(!turbine || (turbine.machine_stat & BROKEN)) + locate_machinery() // try to find the other part if we somehow got disconnected + + if((machine_stat & (BROKEN|MAINT)) || !starter) // if we didn't find it... + rpmtarget = 0 + return + + var/turf/inturf = get_step(src, dir) + var/datum/gas_mixture/environment = inturf.return_air() + var/external_pressure = environment.return_pressure() + var/pressure_delta = external_pressure - gas_contained.return_pressure() + + // Equalize the gas between the environment and the internal gas mix + if(pressure_delta > 0) + var/datum/gas_mixture/removed = environment.remove_ratio((1 - ((1 - intake_ratio)**delta_time)) * pressure_delta / (external_pressure * 2)) // silly math to keep it consistent with delta_time + gas_contained.merge(removed) + inturf.air_update_turf() +/obj/machinery/power/compressor/update_overlays() + . = ..() if(rpm>50000) add_overlay(mutable_appearance(icon, "comp-o4", FLY_LAYER)) else if(rpm>10000) @@ -159,91 +195,122 @@ add_overlay(mutable_appearance(icon, "comp-o2", FLY_LAYER)) else if(rpm>500) add_overlay(mutable_appearance(icon, "comp-o1", FLY_LAYER)) - //TODO: DEFERRED // These are crucial to working of a turbine - the stats modify the power output. TurbGenQ modifies how much raw energy can you get from // rpms, TurbGenG modifies the shape of the curve - the lower the value the less straight the curve is. #define TURBGENQ 100000 #define TURBGENG 0.5 +#define POWER_TO_THRUST 0.001 // power production to thrust ratio -/obj/machinery/power/turbine/Initialize() +/obj/machinery/power/shuttle/engine/turbine/Initialize(mapload) . = ..() -// The outlet is pointed at the direction of the turbine component - outturf = get_step(src, dir) + SSair.start_processing_machine(src, mapload) locate_machinery() if(!compressor) obj_break() connect_to_network() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/power/shuttle/engine/turbine/LateInitialize() + . = ..() + var/turf/comp_turf = get_turf(src) + comp_turf.ImmediateCalculateAdjacentTurfs() // turbine blocks atmos so update the turf it's on or stuff breaks -/obj/machinery/power/turbine/RefreshParts() +/obj/machinery/power/shuttle/engine/turbine/RefreshParts() var/P = 0 for(var/obj/item/stock_parts/capacitor/C in component_parts) P += C.rating productivity = P / 6 -/obj/machinery/power/turbine/examine(mob/user) +/obj/machinery/power/shuttle/engine/turbine/examine(mob/user) . = ..() if(in_range(user, src) || isobserver(user)) . += "The status display reads: Productivity at [productivity*100]%." -/obj/machinery/power/turbine/locate_machinery() +/obj/machinery/power/shuttle/engine/turbine/locate_machinery() if(compressor) return - compressor = locate() in get_step(src, get_dir(outturf, src)) + compressor = locate() in get_step(src, turn(dir, 180)) if(compressor) + set_machine_stat(machine_stat & ~BROKEN) compressor.locate_machinery() + else + compressor = null + obj_break() -/obj/machinery/power/turbine/process() +/obj/machinery/power/shuttle/engine/turbine/process(delta_time) + add_avail(lastgen) // add power in process() so it doesn't update power output separately from the rest of the powernet (bad) + update_overlays() +/obj/machinery/power/shuttle/engine/turbine/process_atmos(delta_time) if(!compressor) set_machine_stat(BROKEN) + locate_machinery() // try to find the missing piece - if((machine_stat & BROKEN) || panel_open) + if(machine_stat & (BROKEN|MAINT)) // we're only running half a turbine, don't continue return - if(!compressor.starter) - return - cut_overlays() // This is the power generation function. If anything is needed it's good to plot it in EXCEL before modifying // the TURBGENQ and TURBGENG values lastgen = ((compressor.rpm / TURBGENQ)**TURBGENG) * TURBGENQ * productivity + thrust = lastgen * POWER_TO_THRUST // second law - add_avail(lastgen) - - // Weird function but it works. Should be something else... - - var/newrpm = ((compressor.gas_contained.return_temperature()) * compressor.gas_contained.total_moles())/4 + var/turf/outturf = get_step(src, dir) + if(!LAZYLEN(outturf.atmos_adjacent_turfs)) + compressor.rpmtarget = 0 + return - newrpm = max(0, newrpm) + // Move gas from the compressor to the outlet + var/datum/gas_mixture/environment = outturf.return_air() + var/internal_pressure = compressor.gas_contained.return_pressure() + var/pressure_delta = internal_pressure - environment.return_pressure() - if(!compressor.starter || newrpm > 1000) - compressor.rpmtarget = newrpm + // Now set the compressor's RPM target based on how much gas is flowing through + compressor.rpmtarget = max(0, pressure_delta * compressor.gas_contained.return_volume() / (R_IDEAL_GAS_EQUATION * 4)) - if(compressor.gas_contained.total_moles()>0) - var/oamount = min(compressor.gas_contained.total_moles(), (compressor.rpm+100)/35000*compressor.capacity) + // Equalize the gas between the internal gas mix and the environment + if(pressure_delta > 0) + var/datum/gas_mixture/removed = compressor.gas_contained.remove_ratio(pressure_delta / (internal_pressure * 2)) if(destroy_output) - compressor.gas_contained.set_moles(compressor.gas_contained.get_moles() - oamount) - else - outturf.assume_air_moles(compressor.gas_contained, oamount) + qdel(removed) + return + outturf.assume_air(removed) + outturf.air_update_turf() + +// Return the current thrust amount +/obj/machinery/power/shuttle/engine/turbine/burn_engine(percentage, deltatime) + return thrust * deltatime * (percentage / 100) + +// Return the current power output +/obj/machinery/power/shuttle/engine/turbine/return_fuel() + return lastgen + +// Return the maximum power output +/obj/machinery/power/shuttle/engine/turbine/return_fuel_cap() + return ((COMPFRICTION*(compressor ? compressor.efficiency : 1) / (TURBGENQ*4))**TURBGENG) * TURBGENQ * productivity + +// Return the maximum power output +/obj/machinery/power/shuttle/engine/turbine/update_engine() + if(!(flags_1 & INITIALIZED_1)) + return FALSE + thruster_active = !panel_open && compressor + return thruster_active // If it works, put an overlay that it works! - +/obj/machinery/power/shuttle/engine/turbine/update_overlays() + . = ..() if(lastgen > 100) add_overlay(mutable_appearance(icon, "turb-o", FLY_LAYER)) -/obj/machinery/power/turbine/attackby(obj/item/I, mob/user, params) +/obj/machinery/power/shuttle/engine/turbine/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, initial(icon_state), initial(icon_state), I)) return if(default_change_direction_wrench(user, I)) - compressor = null - outturf = get_step(src, dir) - locate_machinery() if(compressor) to_chat(user, "Compressor connected.") - set_machine_stat(machine_stat & ~BROKEN) else to_chat(user, "Compressor not connected.") obj_break() @@ -251,25 +318,42 @@ default_deconstruction_crowbar(I) -/obj/machinery/power/turbine/ui_interact(mob/user, datum/tgui/ui) +/obj/machinery/power/shuttle/engine/turbine/default_deconstruction_screwdriver(mob/user, icon_state_open, icon_state_closed, obj/item/I) + . = ..() + if(panel_open) + set_machine_stat(machine_stat | MAINT) + else + set_machine_stat(machine_stat & ~MAINT) + +// update if it moves or changes direction +/obj/machinery/power/shuttle/engine/turbine/setDir(newdir) + . = ..() + locate_machinery() + +/obj/machinery/power/shuttle/engine/turbine/Move(atom/newloc, direct, glide_size_override) + . = ..() + locate_machinery() + +/obj/machinery/power/shuttle/engine/turbine/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "TurbineComputer", name) ui.open() -/obj/machinery/power/turbine/ui_data(mob/user) +/obj/machinery/power/shuttle/engine/turbine/ui_data(mob/user) var/list/data = list() data["compressor"] = compressor ? TRUE : FALSE - data["compressor_broke"] = (!compressor || (compressor.machine_stat & BROKEN)) ? TRUE : FALSE + data["compressor_broke"] = (!compressor || (compressor.machine_stat & (BROKEN|MAINT))) ? TRUE : FALSE data["turbine"] = compressor?.turbine ? TRUE : FALSE - data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.machine_stat & BROKEN)) ? TRUE : FALSE + data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.machine_stat & (BROKEN|MAINT))) ? TRUE : FALSE data["online"] = compressor?.starter data["power"] = DisplayPower(compressor?.turbine?.lastgen) data["rpm"] = compressor?.rpm data["temp"] = compressor?.gas_contained.return_temperature() + data["pressure"] = compressor?.gas_contained.return_pressure() return data -/obj/machinery/power/turbine/ui_act(action, params) +/obj/machinery/power/shuttle/engine/turbine/ui_act(action, params) . = ..() if(.) return @@ -306,7 +390,7 @@ /obj/machinery/computer/turbine_computer/locate_machinery() if(id) - for(var/obj/machinery/power/compressor/C in GLOB.machines) + for(var/obj/machinery/power/compressor/C in SSair.atmos_air_machinery) if(C.comp_id == id) compressor = C return @@ -322,13 +406,14 @@ /obj/machinery/computer/turbine_computer/ui_data(mob/user) var/list/data = list() data["compressor"] = compressor ? TRUE : FALSE - data["compressor_broke"] = (!compressor || (compressor.machine_stat & BROKEN)) ? TRUE : FALSE + data["compressor_broke"] = (!compressor || (compressor.machine_stat & (BROKEN|MAINT))) ? TRUE : FALSE data["turbine"] = compressor?.turbine ? TRUE : FALSE - data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.machine_stat & BROKEN)) ? TRUE : FALSE + data["turbine_broke"] = (!compressor || !compressor.turbine || (compressor.turbine.machine_stat & (BROKEN|MAINT))) ? TRUE : FALSE data["online"] = compressor?.starter data["power"] = DisplayPower(compressor?.turbine?.lastgen) data["rpm"] = compressor?.rpm data["temp"] = compressor?.gas_contained.return_temperature() + data["pressure"] = compressor?.gas_contained.return_pressure() return data /obj/machinery/computer/turbine_computer/ui_act(action, params) @@ -345,6 +430,7 @@ locate_machinery() . = TRUE +#undef POWER_TO_THRUST #undef COMPFRICTION #undef TURBGENQ #undef TURBGENG diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index c14086ff0f3b..7ff53391f6e0 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -4,7 +4,7 @@ GLOBAL_LIST(gang_tags) name = "rune" desc = "Graffiti. Damn kids." icon = 'icons/effects/crayondecal.dmi' - icon_state = "rune1" + icon_state = "firedanger" gender = NEUTER plane = GAME_PLANE //makes the graffiti visible over a wall. mergeable_decal = FALSE diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index b08d7bf6737c..078c435bd213 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -45,7 +45,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark) . = ..() GLOB.start_landmarks_list += src if(jobspawn_override) - LAZYADDASSOC(GLOB.jobspawn_overrides, name, src) + LAZYADDASSOCLIST(GLOB.jobspawn_overrides, name, src) if(name != "start") tag = "start*[name]" diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm deleted file mode 100644 index 0ca73652857c..000000000000 --- a/code/game/objects/effects/mines.dm +++ /dev/null @@ -1,217 +0,0 @@ - -/obj/effect/mine - name = "dummy mine" - desc = "Better stay away from that thing." - density = FALSE - anchored = TRUE - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "uglymine" - var/triggered = 0 - -/obj/effect/mine/Initialize() - . = ..() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/mine/proc/mineEffect(mob/victim) - to_chat(victim, "*click*") - -/obj/effect/mine/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(isturf(loc)) - if(ismob(AM)) - var/mob/MM = AM - if(!(MM.movement_type & FLYING)) - INVOKE_ASYNC(src, PROC_REF(triggermine), AM) - else - INVOKE_ASYNC(src, PROC_REF(triggermine), AM) - -/obj/effect/mine/proc/triggermine(mob/victim) - if(triggered) - return - visible_message("[victim] sets off [icon2html(src, viewers(src))] [src]!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - mineEffect(victim) - SEND_SIGNAL(src, COMSIG_MINE_TRIGGERED) - triggered = 1 - qdel(src) - - -/obj/effect/mine/explosive - name = "explosive mine" - var/range_devastation = 0 - var/range_heavy = 1 - var/range_light = 2 - var/range_flash = 3 - -/obj/effect/mine/explosive/mineEffect(mob/victim) - explosion(loc, range_devastation, range_heavy, range_light, range_flash) - -/obj/effect/mine/stun - name = "stun mine" - var/stun_time = 80 - -/obj/effect/mine/shrapnel - name = "shrapnel mine" - var/shrapnel_type = /obj/projectile/bullet/shrapnel - var/shrapnel_magnitude = 3 - -/obj/effect/mine/shrapnel/mineEffect(mob/victim) - AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) - -/obj/effect/mine/shrapnel/human_only - name = "sophisticated shrapnel mine" - desc = "A deadly mine, this one seems to be modified to trigger for humans only?" - -/obj/effect/mine/shrapnel/human_only/on_entered(datum/source, atom/movable/AM) - if(!ishuman(AM)) - return - . = ..() - -/obj/effect/mine/shrapnel/sting - name = "stinger mine" - shrapnel_type = /obj/projectile/bullet/pellet/stingball - -/obj/effect/mine/stun/mineEffect(mob/living/victim) - if(isliving(victim)) - victim.Paralyze(stun_time) - -/obj/effect/mine/kickmine - name = "kick mine" - -/obj/effect/mine/kickmine/mineEffect(mob/victim) - if(isliving(victim) && victim.client) - to_chat(victim, "You have been kicked FOR NO REISIN!") - qdel(victim.client) - - -/obj/effect/mine/gas - name = "oxygen mine" - var/gas_amount = 360 - var/gas_type = "o2" - -/obj/effect/mine/gas/mineEffect(mob/victim) - atmos_spawn_air("[gas_type]=[gas_amount]") - - -/obj/effect/mine/gas/plasma - name = "plasma mine" - gas_type = "plasma" - - -/obj/effect/mine/gas/n2o - name = "\improper N2O mine" - gas_type = "n2o" - - -/obj/effect/mine/gas/water_vapor - name = "chilled vapor mine" - gas_amount = 500 - gas_type = "water_vapor" - -/obj/effect/mine/sound - name = "honkblaster 1000" - var/sound = 'sound/items/bikehorn.ogg' - -/obj/effect/mine/sound/mineEffect(mob/victim) - playsound(loc, sound, 100, TRUE) - - -/obj/effect/mine/sound/bwoink - name = "bwoink mine" - sound = 'sound/effects/adminhelp.ogg' - -/obj/effect/mine/pickup - name = "He" - desc = "He." - icon = 'icons/obj/marg.dmi' - icon_state = "marg" - density = FALSE - var/duration = 0 - pixel_x = -8 - pixel_y = 1 - -/obj/effect/mine/pickup/Initialize() - . = ..() - animate(src, time = 20, loop = -1) - -/obj/effect/mine/pickup/triggermine(mob/victim) - if(triggered) - return - triggered = 1 - invisibility = INVISIBILITY_ABSTRACT - mineEffect(victim) - qdel(src) - - -/obj/effect/mine/pickup/bloodbath - name = "His Odium" - desc = "Embrace my righteous fury." - duration = 1200 //2min - color = "#FF0000" - var/mob/living/doomslayer - var/obj/item/chainsaw/doomslayer/chainsaw - -/obj/effect/mine/pickup/bloodbath/mineEffect(mob/living/carbon/victim) - if(!victim.client || !istype(victim)) - return - to_chat(victim, "RIP AND TEAR") - - INVOKE_ASYNC(src, PROC_REF(blood_delusion), victim) - - chainsaw = new(victim.loc) - victim.log_message("entered a marg frenzy", LOG_ATTACK) - - ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) - victim.drop_all_held_items() - victim.put_in_hands(chainsaw, forced = TRUE) - chainsaw.attack_self(victim) - victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,25) - to_chat(victim, "KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!") - - var/datum/client_colour/colour = victim.add_client_colour(/datum/client_colour/bloodlust) - QDEL_IN(colour, 11) - doomslayer = victim - RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(end_blood_frenzy)) - QDEL_IN(WEAKREF(src), duration) - -/obj/effect/mine/pickup/bloodbath/proc/end_blood_frenzy() - if(doomslayer) - to_chat(doomslayer, "Your bloodlust seeps back into the bog of your subconscious and you regain self control.") - doomslayer.log_message("exited a blood frenzy", LOG_ATTACK) - if(chainsaw) - qdel(chainsaw) - -/obj/effect/mine/pickup/bloodbath/proc/blood_delusion(mob/living/carbon/victim) - new /datum/hallucination/delusion(victim, TRUE, "demon", duration, 0) - -/obj/effect/mine/pickup/healing - name = "His Benevolence" - desc = "Come, come. Your wounds shall be undone by my mercy." - - -/obj/effect/mine/pickup/healing/mineEffect(mob/living/carbon/victim) - if(!victim.client || !istype(victim)) - return - to_chat(victim, "You feel great!") - victim.revive(full_heal = TRUE, admin_revive = TRUE) - -/obj/effect/mine/pickup/speed - name = "His Purpose" - desc = "Come, let me quicken you to brilliance." - duration = 300 - -/obj/effect/mine/pickup/speed/mineEffect(mob/living/carbon/victim) - if(!victim.client || !istype(victim)) - return - to_chat(victim, "You feel fast!") - victim.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) - addtimer(CALLBACK(src, PROC_REF(finish_effect), victim), duration) - -/obj/effect/mine/pickup/speed/proc/finish_effect(mob/living/carbon/victim) - victim.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) - to_chat(victim, "You slow down.") diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 3370c8b4543d..d763c46e84e9 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -87,7 +87,7 @@ /obj/item/assembly/flash/handheld = 1, /obj/item/restraints/handcuffs/cable/zipties = 1, /obj/item/restraints/handcuffs = 1, - /obj/item/radio/off = 1, + /obj/item/radio = 1, /obj/item/lighter = 3, /obj/item/storage/box/matches = 3, /obj/item/reagent_containers/syringe/contraband/space_drugs = 1, diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index df7c5ae431c5..437aa7625d71 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1025,7 +1025,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb * * forced- Do we want this to go through 100%? */ /obj/item/proc/tryEmbed(atom/target, forced=FALSE, silent=FALSE) - if(!isbodypart(target) && !iscarbon(target) && !isclosedturf(target)) + if(!isbodypart(target) && !iscarbon(target)) return if(!forced && !LAZYLEN(embedding)) return diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 630759c85afe..2e93b662799a 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -140,8 +140,8 @@ playsound(src, 'sound/items/bikehorn.ogg', 50, TRUE) /obj/item/card/id - name = "identification card" - desc = "A card used to provide ID and determine access across the station." + name = "access card" + desc = "These cards provide access to different sections of a ship." icon_state = "id" item_state = "card-id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' @@ -159,7 +159,7 @@ var/obj/machinery/paystand/my_store var/uses_overlays = TRUE var/icon/cached_flat_icon - var/registered_age = 13 // default age for ss13 players + var/registered_age = 18 // default age for ss13 players var/job_icon var/faction_icon @@ -180,10 +180,7 @@ /obj/item/card/id/attack_self(mob/user) if(Adjacent(user)) - var/minor - if(registered_name && registered_age && registered_age < AGE_MINOR) - minor = " (MINOR)" - user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [src.name][minor].", "You show \the [src.name][minor].") + user.visible_message("[user] shows you: [icon2html(src, viewers(user))] \the [initial(name)] [(!registered_name) ? "(" : "([registered_name]"][(!assignment) ? ")" : ", [assignment])"].", "You show \the [initial(name)] [(!registered_name) ? "(" : "([registered_name],"] [(!assignment) ? ")" : "[assignment])"].") add_fingerprint(user) /obj/item/card/id/vv_edit_var(var_name, var_value) @@ -324,12 +321,14 @@ /obj/item/card/id/examine(mob/user) . = ..() if(registered_account) - . += "The account linked to the ID belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr." + . += "The account linked to the card belongs to '[registered_account.account_holder]' and reports a balance of [registered_account.account_balance] cr." . += "There's more information below, you can look again to take a closer look..." /obj/item/card/id/examine_more(mob/user) var/list/msg = list("You examine [src] closer, and note the following...") + if(registered_name) + msg += "This access card is assigned to [registered_name]." if(registered_age) msg += "The card indicates that the holder is [registered_age] years old. [(registered_age < AGE_MINOR) ? "There's a holographic stripe that reads 'MINOR: DO NOT SERVE ALCOHOL OR TOBACCO' along the bottom of the card." : ""]" if(mining_points) @@ -407,16 +406,14 @@ /* Usage: update_label() - Sets the id name to whatever registered_name and assignment is + Sets the id name to whatever the assignment is */ /obj/item/card/id/proc/update_label() - var/blank = !registered_name - name = "[blank ? initial(name) : "[registered_name]'s ID Card"][(!assignment) ? "" : " ([assignment])"]" + name = "[(istype(src, /obj/item/card/id/syndicate)) ? "[initial(name)]" : "access card"][(!assignment) ? "" : " ([assignment])"]" /obj/item/card/id/silver - name = "silver identification card" - desc = "A silver card which shows honour and dedication." + desc = "A silver-colored card, usually given to higher-ranking officials in ships and stations." icon_state = "silver" item_state = "silver_id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' @@ -428,8 +425,7 @@ update_label() access = list(ACCESS_CHANGE_IDS) /obj/item/card/id/gold - name = "gold identification card" - desc = "A golden card which shows power and might." + desc = "A golden-colored card, usually given to those at the top of the hierarchy in a ship." icon_state = "gold" item_state = "gold_id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' @@ -532,10 +528,7 @@ update_label() access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) /obj/item/card/id/syndicate_command - name = "syndicate ID card" - desc = "An ID straight from the Syndicate." - registered_name = "Syndicate" - assignment = "Syndicate Overlord" + desc = "An access card widely utilized by Coalition splinters in the frontier." icon_state = "syndie" access = list(ACCESS_SYNDICATE) uses_overlays = FALSE @@ -569,15 +562,12 @@ update_label() /obj/item/card/id/patient //Aegis ID assignment = "Long Term Patient" uses_overlays = FALSE - access = list(ACCESS_SYNDICATE) /obj/item/card/id/captains_spare - desc = "The spare ID of the High Lord himself." icon_state = "gold" item_state = "gold_id" lefthand_file = 'icons/mob/inhands/equipment/idcards_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/idcards_righthand.dmi' - registered_name = "Captain" assignment = "Captain" registered_age = null @@ -596,11 +586,9 @@ update_label() ..() /obj/item/card/id/centcom - name = "\improper CentCom ID" - desc = "An ID straight from Central Command." + name = "\improper Nanotrasen Central Command access card" + desc = "An access card sourced from Nanotrasen's Central Command." icon_state = "centcom" - registered_name = "Central Command" - assignment = "Central Command" uses_overlays = FALSE registered_age = null @@ -615,8 +603,6 @@ update_label() name = "\improper CentCom ID" desc = "An ERT ID card." icon_state = "ert_commander" - registered_name = "Emergency Response Team Commander" - assignment = "Emergency Response Team Commander" uses_overlays = FALSE registered_age = null @@ -625,8 +611,6 @@ update_label() . = ..() /obj/item/card/id/ert/security - registered_name = "Security Response Officer" - assignment = "Security Response Officer" icon_state = "ert_security" /obj/item/card/id/ert/security/Initialize() @@ -634,8 +618,6 @@ update_label() . = ..() /obj/item/card/id/ert/engineer - registered_name = "Engineering Response Officer" - assignment = "Engineering Response Officer" icon_state = "ert_engineer" /obj/item/card/id/ert/engineer/Initialize() @@ -643,8 +625,6 @@ update_label() . = ..() /obj/item/card/id/ert/medical - registered_name = "Medical Response Officer" - assignment = "Medical Response Officer" icon_state = "ert_medic" /obj/item/card/id/ert/medical/Initialize() @@ -652,8 +632,6 @@ update_label() . = ..() /obj/item/card/id/ert/chaplain - registered_name = "Religious Response Officer" - assignment = "Religious Response Officer" icon_state = "ert_chaplain" /obj/item/card/id/ert/chaplain/Initialize() @@ -661,8 +639,6 @@ update_label() . = ..() /obj/item/card/id/ert/janitor - registered_name = "Janitorial Response Officer" - assignment = "Janitorial Response Officer" icon_state = "ert_janitor" /obj/item/card/id/ert/janitor/Initialize() @@ -670,8 +646,6 @@ update_label() . = ..() /obj/item/card/id/ert/clown - registered_name = "Entertainment Response Officer" - assignment = "Entertainment Response Officer" icon_state = "ert_clown" /obj/item/card/id/ert/clown/Initialize() @@ -679,12 +653,10 @@ update_label() . = ..() /obj/item/card/id/ert/deathsquad - name = "\improper Death Squad ID" - desc = "A Death Squad ID card." + desc = "An access card colored in black and red." icon_state = "deathsquad" //NO NO SIR DEATH SQUADS ARENT A PART OF NANOTRASEN AT ALL - registered_name = "Death Commando" - assignment = "Death Commando" uses_overlays = FALSE + job_icon = "deathsquad" /obj/item/card/id/debug name = "\improper Debug ID" diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 7b2724f9e53f..6a5fa6e70a12 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -257,7 +257,7 @@ /obj/item/circuitboard/machine/power_turbine name = "Power Turbine (Machine Board)" icon_state = "engineering" - build_path = /obj/machinery/power/turbine + build_path = /obj/machinery/power/shuttle/engine/turbine req_components = list( /obj/item/stack/cable_coil = 5, /obj/item/stock_parts/capacitor = 6) @@ -389,6 +389,17 @@ name = "Freezer (Machine Board)" build_path = PATH_FREEZER +/obj/item/circuitboard/machine/ship_gravity + name = "Gravity Generator (Machine Board)" + icon_state = "engineering" + build_path = /obj/machinery/power/ship_gravity + req_components = list( + /obj/item/stock_parts/capacitor = 5, + /obj/item/stack/sheet/bluespace_crystal = 1, + /obj/item/stock_parts/micro_laser = 4 + ) + needs_anchored = FALSE + #undef PATH_FREEZER #undef PATH_HEATER diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 5ca8fa313c60..d703ae86ca7d 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -43,16 +43,15 @@ var/drawtype var/text_buffer = "" - var/static/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","star","poseur tag","prolizard","antilizard") + var/static/list/graffiti = list("face","guy","end","body") + var/static/list/code = list("getout","empty","unsafe","camp","safepath","jackpot","dismantle") var/static/list/symbols = list("danger","firedanger","electricdanger","biohazard","radiation","safe","evac","space","med","trade","shop","food","peace","like","skull","nay","heart","credit") - var/static/list/drawings = list("smallbrush","brush","largebrush","splatter","snake","stickman","carp","ghost","clown","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun") - var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint") // These turn to face the same way as the drawer - var/static/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6") + var/static/list/drawings = list("smallbrush","brush","splatter","snake","carp","ghost","taser","disk","fireaxe","toolbox","corgi","cat","toilet","blueprint","beepsky","scroll","bottle","shotgun") + var/static/list/oriented = list("arrow","line","thinline","shortline","body","chevron","footprint","clawprint","pawprint","dogo","nogo") // These turn to face the same way as the drawer var/static/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED, RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER, RANDOM_SYMBOL, RANDOM_PUNCTUATION, RANDOM_DRAWING) - var/static/list/graffiti_large_h = list("yiffhell", "secborg", "paint") - var/static/list/all_drawables = graffiti + symbols + drawings + oriented + runes + graffiti_large_h + var/static/list/all_drawables = graffiti + code + symbols + drawings + oriented var/paint_mode = PAINT_NORMAL @@ -176,15 +175,15 @@ . = list() - var/list/g_items = list() + var/list/g_items = list() //i hate tgcode . += list(list("name" = "Graffiti", "items" = g_items)) for(var/g in graffiti) g_items += list(list("item" = g)) - var/list/glh_items = list() - . += list(list("name" = "Graffiti Large Horizontal", "items" = glh_items)) - for(var/glh in graffiti_large_h) - glh_items += list(list("item" = glh)) + var/list/c_items = list() + . += list(list("name" = "Code", "items" = c_items)) + for(var/c in code) + c_items += list(list("item" = c)) var/list/S_items = list() . += list(list("name" = "Symbols", "items" = S_items)) @@ -201,11 +200,6 @@ for(var/O in oriented) O_items += list(list("item" = O)) - var/list/R_items = list() - . += list(list(name = "Runes", "items" = R_items)) - for(var/R in runes) - R_items += list(list("item" = R)) - var/list/rand_items = list() . += list(list(name = "Random", "items" = rand_items)) for(var/i in randoms) @@ -245,9 +239,6 @@ drawtype = stencil . = TRUE text_buffer = "" - if(stencil in graffiti_large_h) - paint_mode = PAINT_LARGE_HORIZONTAL - text_buffer = "" else paint_mode = PAINT_NORMAL if("select_colour") @@ -281,8 +272,6 @@ var/istagger = HAS_TRAIT(user, TRAIT_TAGGER) var/cost = 1 - if(paint_mode == PAINT_LARGE_HORIZONTAL) - cost = 5 if(istype(target, /obj/item/canvas)) cost = 0 if(ishuman(user)) @@ -311,8 +300,6 @@ drawing = pick(drawings) if(RANDOM_GRAFFITI) drawing = pick(graffiti) - if(RANDOM_RUNE) - drawing = pick(runes) if(RANDOM_ORIENTED) drawing = pick(oriented) if(RANDOM_NUMBER) diff --git a/code/game/objects/items/devices/mines.dm b/code/game/objects/items/devices/mines.dm new file mode 100644 index 000000000000..112e26e1303b --- /dev/null +++ b/code/game/objects/items/devices/mines.dm @@ -0,0 +1,708 @@ + +/obj/item/mine + name = "mine" + desc = "An anti-personnel mine. This one explodes into nothing and does nothing. Why can you see this? You should't be able to see this. Stop looking at this." + icon = 'icons/obj/landmine.dmi' + w_class = WEIGHT_CLASS_SMALL + throw_speed = 3 + throw_range = 5 + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + icon_state = "mine" + item_state = "assembly"//when we get custom sprites replace this. please + base_icon_state = "mine" + + /// Is our mine live? + var/armed = FALSE + /// Is our mine currently exploding? + var/triggered = FALSE + + /// Sets a delay for mines going live after being planted + var/arm_delay = 5 SECONDS + /// Use to set a delay after activation to trigger the explosion. + var/blast_delay = 1 DECISECONDS + + var/manufacturer = MANUFACTURER_NONE + + +/obj/item/mine/Initialize(mapload) + . = ..() + if(armed) + now_armed() + + +/obj/item/mine/examine(mob/user) + . = ..() + if(!armed) + . += span_info("It appears to be inactive...") + else + . += span_info("It looks ready to explode.") + + if(manufacturer) + . += span_notice("It has [manufacturer] engraved on it.") + +/obj/item/mine/update_icon_state() + . = ..() + icon_state = "[base_icon_state][triggered ? "_exploding" : null][!armed && anchored ? "_arming" : null][armed && anchored && !triggered ? "_armed" : null]" + +//mines have a small chance to be triggered by damage, but they take longer to explode +/obj/item/mine/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir) + . = ..() + if(prob(35) & obj_integrity > 0) + blast_delay = blast_delay * 2 + trigger_mine() + +//insert your horrible fate here +/obj/item/mine/proc/mine_effect(mob/victim) + return + +//handles controlled deactivation +/obj/item/mine/proc/disarm() + if(triggered) //no turning back now + return + anchored = FALSE + armed = FALSE + update_appearance(UPDATE_ICON_STATE) + return + +//using an unarmed mine inhand deploys it. +/obj/item/mine/attack_self(mob/user) + if(!armed) + user.visible_message(span_danger("[user] deploys the [src]."), span_notice("You deploy the [src].")) + + user.dropItemToGround(src) + anchored = TRUE + playsound(src, 'sound/machines/click.ogg', 60, TRUE) + + if(arm_delay) + armed = FALSE + update_appearance(UPDATE_ICON_STATE) + addtimer(CALLBACK(src, PROC_REF(now_armed)), arm_delay) + else + armed = TRUE + message_admins("[key_name(user)] has placed \a [src] at ([x],[y],[z]).") + +//let them know the mine's done cooking +/obj/item/mine/proc/now_armed() + armed = TRUE + update_appearance(UPDATE_ICON_STATE) + playsound(src, 'sound/machines/nuke/angry_beep.ogg', 55, FALSE, 1) + visible_message("\The [src] beeps softly, indicating it is now active.", vision_distance = COMBAT_MESSAGE_RANGE) + +/// Can this mine trigger on the passed movable? +/obj/item/mine/proc/can_trigger(atom/movable/on_who) + //var/badtype = typecacheof(list(/obj/effect, /obj/item/mine)) + if(triggered || !isturf(loc) || !armed || iseffect(on_who) || istype(on_who, /obj/item/mine)) + return FALSE + //if(on_who == badtype)//no recursive self triggering. Bad landmine + // return FALSE + return TRUE + +/// When something sets off a mine +/obj/item/mine/proc/trigger_mine(atom/movable/triggerer) + if(obj_integrity <= 0) + return + if(triggered) //too busy detonating to detonate again + return + if(triggerer) + triggerer.visible_message(span_danger("[icon2html(src, viewers(src))] [triggerer] sets off \the [src]. It's gonna blow!"), span_danger("[icon2html(src, viewers(src))] \The [src] activates.")) + else + visible_message(span_danger("[icon2html(src, viewers(src))] \the [src] begins to flash bright red!")) + triggered = TRUE + update_appearance(UPDATE_ICON_STATE) + if(blast_delay >= 5 DECISECONDS) + playsound(src, 'sound/items/mine_activate.ogg', 70, FALSE) + else + playsound(src, 'sound/items/mine_activate_short.ogg', 80, FALSE) + light_color = "#FF0000" + light_power = 5 + light_range = 3 + if(!blast_delay)//addtimer gets mad if the delay is 0 + blast_now(triggerer) + else + addtimer(CALLBACK(src, PROC_REF(blast_now), triggerer), blast_delay) + +//NOW we actually blow up +/obj/item/mine/proc/blast_now(atom/movable/triggerer) + var/datum/effect_system/spark_spread/sporks = new /datum/effect_system/spark_spread + sporks.set_up(3, 1, src) + sporks.start() + if(ismob(triggerer)) + mine_effect(triggerer) + else + mine_effect() + visible_message(span_danger("[icon2html(src, viewers(src))] \the [src] detonates!")) + SEND_SIGNAL(src, COMSIG_MINE_TRIGGERED, triggerer) + if(triggered)//setting triggered to false in mine_effect() creates a reusable mine + qdel(src) + +//trying to pick up a live mine is probably up there when it comes to terrible ideas +/obj/item/mine/attack_hand(mob/user) + if(armed) + user.visible_message(span_warning("[user] extends their hand towards \the [src]!"), span_userdanger("You extend your arms to pick up \the [src], knowing that it will likely blow up when you touch it!")) + if(do_after(user, 5 SECONDS, target = src))//SO SO generous. You can still step back from the edge. + if(prob(10)) + user.visible_message(span_notice("[user] picks up \the [src], which miraculously doesn't explode!"), span_notice("You pick up \the [src], which miraculously doesn't explode!")) + disarm() + else + user.visible_message(span_danger("[user] attempts to pick up \the [src] only to hear a beep as it activates in their hand!"), span_danger("You attempt to pick up \the [src] only to hear a beep as it activates in your hands!")) + anchored = FALSE + trigger_mine(user) + return . =..() + else + user.visible_message(span_notice("[user] withdraws their hand from \the [src]."), span_notice("You decide against picking up \the [src].")) + . =..() + +//just don't. +/obj/item/mine/attackby(obj/item/I, mob/user) + if(!armed) + to_chat(user, span_notice("You smack \the [src] with [I]. Thankfully, nothing happens.")) + return + else//please stop hitting the live mine with a rock + if(user.a_intent != INTENT_HARM)//are you SURE you want to hit the live mine with a rock + user.visible_message(user, span_notice("[user] gently pokes \the [src] with [I]. Nothing seems to happen."), span_notice("You gently prod \the [src] with [I]. Thankfully, nothing happens.")) + else//at this point it's just natural selection + user.visible_message(span_danger("[user] hits \the [src] with [I], activating it!"), span_userdanger("[icon2html(src, viewers(src))]You hit \the [src] with [I]. The light goes red.")) + trigger_mine(user) + +// +//PRESSURE BASED MINE: +//Mine that explodes when stepped on. +/obj/item/mine/pressure + name = "dummy landmine" + /// When true, mines trigger instantly on being stepped upon + var/hair_trigger = FALSE + /// Has the mine loc been entered? + var/clicked = FALSE + /// Prevents a mine from being screwdrivable (e.g. cannot be disarmed) + var/sealed = FALSE + /// Disables the mine without disarming it. perfect for practical jokes + var/dud = FALSE + + /// Are the wires exposed? + var/open_panel = FALSE + + /// Who's got their foot on the mine's pressure plate + /// Stepping on the mine will set this to the first mob who stepped over it + /// The mine will not detonate via movement unless the first mob steps off of it + var/datum/weakref/foot_on_mine + +/obj/item/mine/pressure/Initialize() + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + COMSIG_ATOM_EXITED = PROC_REF(on_exited), + ) + AddElement(/datum/element/connect_loc, loc_connections) + wires = new /datum/wires/mine(src) + +/obj/item/mine/pressure/examine(mob/user) + . = ..() + if(hair_trigger) + . += span_danger("It's been rigged to detonate as soon as someone steps on it.") + else + var/atom/movable/unlucky_sod = foot_on_mine?.resolve() + if(user == unlucky_sod) + . += span_bolddanger("The pressure plate is depressed. Any movement you make will set it off now.") + else if(!isnull(unlucky_sod)) + . += span_danger("The pressure plate is depressed by [unlucky_sod]. Any move they make'll set it off now.") + +//step 1: the mistake +/obj/item/mine/pressure/proc/on_entered(datum/source, atom/movable/arrived) + SIGNAL_HANDLER + if(!can_trigger(arrived)) + return + // Flying = can't step on a mine + if(arrived.movement_type & FLYING) + return + //no cheap disarming + if(arrived.throwing && isitem(arrived)) + return + // Someone already on it + if(foot_on_mine?.resolve()) + return + + if(dud == FALSE)//we don't actually need this if the mine's been disabled + foot_on_mine = WEAKREF(arrived) + + if(ismob(arrived)) + var/mob/living/fool = arrived + fool.do_alert_animation(fool) + if(!hair_trigger) + fool.Immobilize(25 DECISECONDS, TRUE) + to_chat(fool, span_userdanger("You step on \the [src] and freeze.")) + visible_message(span_danger("[icon2html(src, viewers(src))] *click*")) + if(dud == FALSE)//see wirecutting + clicked = TRUE + if(hair_trigger) + trigger_mine(arrived) + playsound(src, 'sound/machines/click.ogg', 100, TRUE) + +//step 2: the consequences +/obj/item/mine/pressure/proc/on_exited(datum/source, atom/movable/gone) + SIGNAL_HANDLER + if(hair_trigger) + return + if(!clicked) + return + if(!can_trigger(gone)) + return + // Check that the guy who's on it is stepping off + if(foot_on_mine && !IS_WEAKREF_OF(gone, foot_on_mine)) + return + INVOKE_ASYNC(src, PROC_REF(trigger_mine), gone) + foot_on_mine = null + +/obj/item/mine/pressure/disarm() + clicked = FALSE + . = ..() + +//handles disarming(and failing to disarm) +/obj/item/mine/pressure/attackby(obj/item/I, mob/user) + if(I.tool_behaviour == TOOL_SCREWDRIVER) + if(sealed) + to_chat(user, "You can't see any way to access \the [src]'s wiring.") + return + open_panel = !open_panel + update_appearance(UPDATE_ICON_STATE) + to_chat(user, "You [open_panel ? "reveal" : "hide"] \the [src]'s wiring.") + I.play_tool_sound(src, 50) + return + else if(is_wire_tool(I) && open_panel) + wires.interact(user) + return + else + . = ..() + +// +//PROXIMITY MINES +//Mines that explode when someone moves nearby. Simpler, because I don't have to worry about saving step info or disarming logic +// + +/obj/item/mine/proximity + name = "dummy proximity mine" + blast_delay = 15 DECISECONDS + arm_delay = 10 SECONDS//clear the area + ///needed for the proximity checks. + var/datum/proximity_monitor/proximity_monitor + var/proximity_range = 2 + +/obj/item/mine/proximity/Initialize(mapload) + . = ..() + START_PROCESSING(SSfastprocess, src) + +/obj/item/mine/proximity/examine(mob/user) + . = ..() + if(armed) + . += span_danger("It's been rigged to detonate as soon as someone moves nearby...") + else + . += span_notice("When armed, it activates based on the proximity of living targets.") + +/obj/item/mine/proximity/now_armed() + . = ..() + proximity_monitor = new(src, proximity_range) + light_color = "#FF0000" + light_power = 1 + light_range = 1 + +/obj/item/mine/proximity/disarm() + . = ..() + QDEL_NULL(proximity_monitor) + +/obj/item/mine/proximity/Destroy() + STOP_PROCESSING(SSfastprocess, src) + QDEL_NULL(proximity_monitor) + . = ..() + +/obj/item/mine/proximity/HasProximity(atom/movable/triggerer) + if(!iscarbon(triggerer))//let's keep these on player movements for now. + return + if(!can_trigger(triggerer)) + return + var/mob/living/clueless = triggerer + clueless.do_alert_animation(clueless) + trigger_mine(triggerer) + QDEL_NULL(proximity_monitor) + return + +// +//LANDMINE TYPES +//Rylie please help me make these more immersive +// + +/obj/item/mine/pressure/explosive + name = "\improper G-80 Landmine" + desc = "An anti-infantry explosive produced during the corporate wars. Watch your step." + + //customize explosive power + var/range_devastation = 0 + var/range_heavy = 1 + var/range_light = 5 + var/range_flame = 1 + + //using this to indicate pb + var/range_flash = 1 + + //customize shrapnel. Magnitude zero prevents them from spawning + var/shrapnel_type = /obj/projectile/bullet/shrapnel + var/shrapnel_magnitude = 3 + + /// If TRUE, we spawn extra pellets to eviscerate a person still sitting on it, otherwise it just spawns a ring of pellets around the tile we're on (making setting it off an offensive move) + var/shred_triggerer = TRUE + + manufacturer = MANUFACTURER_SCARBOROUGH + +/obj/item/mine/pressure/explosive/mine_effect(mob/victim) + explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + if(shrapnel_magnitude > 0) + AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) + + +/obj/item/mine/pressure/explosive/rusty + name = "\improper Rusted Landmine" + desc = "An anti-infantry explosive, designed to go off underfoot. This one has seen better days." + manufacturer = MANUFACTURER_NONE + range_heavy = 0 + range_light = 3 + shrapnel_type = /obj/projectile/bullet/shrapnel/rusty + + +/obj/item/mine/pressure/explosive/fire + name = "\improper G-82 Incindeary" + desc = "An anti-infantry explosive produced during the corporate wars. Transforms into superheated slag and a ball of fire on detonation. " + + range_flame = 6 + range_light = 3 + range_flash = 3 + + shrapnel_type = /obj/projectile/bullet/shrapnel/hot + shrapnel_magnitude = 4 + +/obj/item/mine/pressure/explosive/fire/mine_effect(mob/victim) + if(victim.is_holding(src))//in case it's been picked up + for(var/turf/T in view(4,victim)) + T.IgniteTurf(15) + new /obj/effect/hotspot(T) + else + for(var/turf/T in view(4,src)) + T.IgniteTurf(15) + new /obj/effect/hotspot(T) + . = ..() + + +/obj/item/mine/pressure/explosive/heavy + name = "\improper G-81 Anti-Tank Mine" + desc = "An immense anti-vehicle explosive built during the corporate wars. Someone has recklessly switched out the detonator for one that activates for lighter targets." + w_class = WEIGHT_CLASS_BULKY + range_heavy = 6 + range_light = 9 + shrapnel_magnitude = 7 + shrapnel_type = /obj/projectile/bullet/shrapnel/mega + blast_delay = 50//run. + sealed = TRUE//unless we specifically give it to people disarmed, we probably don't want them stealing this + + +/obj/item/mine/pressure/explosive/shrapnel + name = "\improper G-84 Fragmentation" + desc = "An anti-infantry explosive built during the corporate wars. Metal banding inside creates additional deadly shrapnel on detonation. " + + range_heavy = 1 + range_light = 4 + + shrapnel_magnitude = 6 + shred_triggerer = TRUE + +/obj/item/mine/pressure/explosive/rad + name = "\improper G-85 Fission" + desc = "An anti-infantry explosive produced during the corporate wars. This one detonates a small microfission core, creating a bloom of deadly radiation. " + range_light = 4 + range_flame = 2 + shrapnel_magnitude = 7 + shrapnel_type = /obj/projectile/bullet/shrapnel/spicy + var/radpower = 750 + +/obj/item/mine/pressure/explosive/rad/mine_effect(mob/victim) + radiation_pulse(src, radpower, 1) + . = ..() + +//put this on military ships for disarming practice +/obj/item/mine/pressure/training + name = "\improper G-MTH Defusal Trainer" + desc = "A mothballed anti-personnel explosive, equipped with VISCERAL DEFUSAL ACTION for training purposes. Though Scarborough was forced to decomission their stockpiles of mines as part of the ceasefire, the deployed minefields remain." + arm_delay = 2 SECONDS + manufacturer = MANUFACTURER_SCARBOROUGH + +/obj/item/mine/pressure/training/mine_effect(mob/living/victim) + src.say("BOOM! Better luck next time!") + src.visible_message(span_notice("The mine resets itself for another disarming attempt.")) + triggered = FALSE + disarm() + . = ..() + +/obj/item/mine/pressure/gas + name = "chilled vapor mine" + desc = "A non-lethal security deterrent." + var/gas_amount = 500 + var/gas_type = "water_vapor" + hair_trigger = TRUE + +/obj/item/mine/pressure/gas/mine_effect(mob/victim) + atmos_spawn_air("[gas_type]=[gas_amount]") + + +/obj/item/mine/proximity/explosive + name = "\improper G-80P Bouncer" + desc = "An anti-infantry explosive produced during the corporate wars. This one has been rearmed with a proximity movement detector." + + var/range_devastation = 0 + var/range_heavy = 2 + var/range_light = 4 + var/range_flame = 1 + + var/range_flash = 1 + + var/shrapnel_type = /obj/projectile/bullet/shrapnel + var/shrapnel_magnitude = 5 + + manufacturer = MANUFACTURER_SCARBOROUGH + +/obj/item/mine/proximity/explosive/mine_effect(mob/victim) + explosion(loc, range_devastation, range_heavy, range_light, range_flash, 1, 0, range_flame, 0, 1) + if(shrapnel_magnitude > 0) + AddComponent(/datum/component/pellet_cloud, projectile_type=shrapnel_type, magnitude=shrapnel_magnitude) + + +//like all real 'less' than lethal crowd control options this is, in fact, not very good at being nonlethal +/obj/item/mine/proximity/explosive/sting + name = "\improper'Stinger' Crowd Management Device" + desc = "A \"less\" than lethal crowd control weapon, designed to demoralise and scatter anti-NT protestors. The bands of ballistic gel inside strike targets and incapacitate without causing serious maiming. In Theory." + + range_heavy = 0 + range_light = 1 + range_flash = 3 + range_flame = 0 + + shrapnel_magnitude = 8 + shrapnel_type = /obj/projectile/bullet/pellet/stingball + manufacturer = MANUFACTURER_NANOTRASEN_OLD + + +/obj/item/mine/proximity/explosive/plasma + name = "\improper Etherbor EP-3" + desc = "An anti-infantry explosive designed by the PGF for denial of territory to enemy forces. Radiates high energy plasma to eradicate nearby targets." + range_light = 2 + range_flame = 3 + range_heavy = 0 + shrapnel_magnitude = 8 + shrapnel_type = /obj/projectile/energy/plasmabolt + manufacturer = MANUFACTURER_PGF + +/obj/item/mine/proximity/explosive/plasma/mine_effect(mob/victim) + if(victim.is_holding(src))//in case it's been picked up + for(var/turf/T in view(3,victim)) + T.IgniteTurf(25, "green") + else + for(var/turf/T in view(3,src)) + T.IgniteTurf(25, "green") + . = ..() + +//Manhacks... so pretty... +/obj/item/mine/proximity/spawner + name = "debug spawner mine" + desc = "Real no Virus. 100% free. Coders hate him!" + var/spawn_type = null //manhacks go here :) + var/spawn_number = 5 + +/obj/item/mine/proximity/spawner/mine_effect(mob/victim) + if(isturf(loc)) + var/turf/T = get_turf(src) + playsound(T, 'sound/effects/phasein.ogg', 100, TRUE) + spawn_and_random_walk(spawn_type, T, spawn_number, walk_chance=50, admin_spawn=((flags_1 & ADMIN_SPAWNED_1) ? TRUE : FALSE)) + . = ..() + +/obj/item/mine/proximity/spawner/manhack + name = "\improper P-83 Lacerator" + desc = "An anti-infantry device produced during the corporate wars. The explosive payload has been swapped out for 'viscerator'-type antipersonnel drones." + spawn_type = /mob/living/simple_animal/hostile/viscerator + +// +//GIMMICK MINES// +//pretty much exclusively for adminbus & code dependencies +// + +/obj/item/mine/pressure/kickmine + name = "\improper A-00 'Adminbus'" + desc = "An Anti-Griefer proximity expulsive. Delivers Justice." + blast_delay = null//funnier this way + hair_trigger = TRUE + +/obj/item/mine/pressure/kickmine/mine_effect(mob/victim) + if(isliving(victim) && victim.client && Adjacent(victim)) + to_chat(victim, span_userdanger("You have been kicked from the game. Take this time to think about what you've done.")) + qdel(victim.client) + +/obj/item/mine/pressure/sound + name = "sonic mine" + desc = "A potent tool of psychological warfare." + var/sound = 'sound/effects/adminhelp.ogg' + blast_delay = null + hair_trigger = TRUE + +/obj/item/mine/pressure/sound/mine_effect(mob/victim) + playsound(loc, sound, 100, TRUE) + +/obj/item/mine/pressure/pickup + name = "pickup mine" + desc = "does nothing" + icon = 'icons/obj/marg.dmi' + icon_state = "marg" + density = FALSE + var/duration = 0 + pixel_x = -8 + pixel_y = 1 + anchored = TRUE + armed = TRUE + blast_delay = null + hair_trigger = TRUE + +/obj/item/mine/pressure/pickup/Initialize() + . = ..() + animate(src, time = 20, loop = -1) + +/obj/item/mine/pressure/pickup/trigger_mine(mob/victim) + if(triggered) + return + triggered = TRUE + invisibility = INVISIBILITY_ABSTRACT + mine_effect(victim) + qdel(src) + + +/obj/item/mine/pressure/pickup/bloodbath + name = "bloody orb" + desc = "Embrace righteous fury." + duration = 1200 //2min + color = "#FF0000" + var/mob/living/doomslayer + var/obj/item/chainsaw/doomslayer/chainsaw + +/obj/item/mine/pressure/pickup/bloodbath/mine_effect(mob/living/carbon/victim) + if(!victim.client || !istype(victim)) + return + to_chat(victim, "RIP AND TEAR") + + INVOKE_ASYNC(src, PROC_REF(blood_delusion), victim) + + chainsaw = new(victim.loc) + victim.log_message("entered a marg frenzy", LOG_ATTACK) + + ADD_TRAIT(chainsaw, TRAIT_NODROP, CHAINSAW_FRENZY_TRAIT) + victim.drop_all_held_items() + victim.put_in_hands(chainsaw, forced = TRUE) + chainsaw.attack_self(victim) + victim.reagents.add_reagent(/datum/reagent/medicine/adminordrazine,25) + to_chat(victim, "KILL, KILL, KILL! YOU HAVE NO ALLIES ANYMORE, KILL THEM ALL!") + + var/datum/client_colour/colour = victim.add_client_colour(/datum/client_colour/bloodlust) + QDEL_IN(colour, 11) + doomslayer = victim + RegisterSignal(src, COMSIG_PARENT_QDELETING, PROC_REF(end_blood_frenzy)) + QDEL_IN(WEAKREF(src), duration) + +/obj/item/mine/pressure/pickup/bloodbath/proc/end_blood_frenzy() + if(doomslayer) + to_chat(doomslayer, "Your bloodlust seeps back into the bog of your subconscious and you regain self control.") + doomslayer.log_message("exited a blood frenzy", LOG_ATTACK) + if(chainsaw) + qdel(chainsaw) + +/obj/item/mine/pressure/pickup/bloodbath/proc/blood_delusion(mob/living/carbon/victim) + new /datum/hallucination/delusion(victim, TRUE, "demon", duration, 0) + +/obj/item/mine/pressure/pickup/healing + name = "healing orb" + desc = "Your wounds shall be undone." + +/obj/item/mine/pressure/pickup/healing/mine_effect(mob/living/carbon/victim) + if(!victim.client || !istype(victim)) + return + to_chat(victim, "You feel great!") + victim.revive(full_heal = TRUE, admin_revive = TRUE) + +/obj/item/mine/pressure/pickup/speed + name = "quick orb" + desc = "Quickens you." + duration = 300 + +/obj/item/mine/pressure/pickup/speed/mine_effect(mob/living/carbon/victim) + if(!victim.client || !istype(victim)) + return + to_chat(victim, "You feel fast!") + victim.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) + addtimer(CALLBACK(src, PROC_REF(finish_effect), victim), duration) + +/obj/item/mine/pressure/pickup/speed/proc/finish_effect(mob/living/carbon/victim) + victim.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) + to_chat(victim, "You slow down.") + + + +// +//mapping tool that generates "live" variants of all mine subtypes, which are anchored and ready to blow. +//Add new mine variants you make below as a LIVE_MINE_HELPER define containing their subtyping. +// + +#define LIVE_MINE_HELPER(mine_type) \ + /obj/item/mine/##mine_type/live { \ + anchored = TRUE; \ + armed = TRUE; \ + } + +LIVE_MINE_HELPER(pressure/explosive) +LIVE_MINE_HELPER(pressure/explosive/fire) +LIVE_MINE_HELPER(pressure/explosive/rusty) +LIVE_MINE_HELPER(pressure/explosive/rad) +LIVE_MINE_HELPER(pressure/explosive/heavy) +LIVE_MINE_HELPER(pressure/explosive/shrapnel) + +LIVE_MINE_HELPER(proximity/explosive) +LIVE_MINE_HELPER(proximity/explosive/sting) +LIVE_MINE_HELPER(proximity/spawner/manhack) +LIVE_MINE_HELPER(proximity/explosive/plasma) + +LIVE_MINE_HELPER(pressure/gas) +LIVE_MINE_HELPER(pressure/kickmine) +LIVE_MINE_HELPER(pressure/sound) + +// +// spawners (random mines, minefields, non-guaranteed mine) +// + +/obj/effect/spawner/lootdrop/mine + name = "live mine spawner (random)" + lootcount = 1 + fan_out_items = TRUE + loot = list( + /obj/item/mine/pressure/explosive/live = 10, + /obj/item/mine/pressure/explosive/shrapnel/live = 3, + /obj/item/mine/pressure/explosive/rad/live = 3, + /obj/item/mine/pressure/explosive/fire/live = 3) + +/obj/effect/spawner/minefield + name = "minefield spawner" + var/minerange = 9 + var/minetype = /obj/item/mine/pressure/explosive/rusty/live + +/obj/effect/spawner/minefield/Initialize(mapload) + . = ..() + for(var/turf/open/T in view(minerange,loc)) + if(prob(5)) + new minetype(T) + +/obj/effect/spawner/minefield/random + name = "random minefield spawner" + minetype = /obj/effect/spawner/lootdrop/mine + +/obj/effect/spawner/minefield/manhack + name = "manhack field spawner" + minetype = /obj/item/mine/proximity/spawner/manhack/live diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index dc35bebb1e30..cc528f103fe2 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -27,7 +27,7 @@ var/last_chatter_time // The time since we last played a radio chatter sound. (WS edit - Radio Chatter #434) var/broadcasting = FALSE // Whether the radio will transmit dialogue it hears nearby. - var/listening = TRUE // Whether the radio is currently receiving. + var/listening = FALSE // Whether the radio is currently receiving. var/prison_radio = FALSE // If true, the transmit wire starts cut. var/unscrewed = FALSE // Whether wires are accessible. Toggleable by screwdrivering. var/freerange = FALSE // If true, the radio has access to the full spectrum. @@ -436,12 +436,6 @@ recalculateChannels() - -/obj/item/radio/off // Station bounced radios, their only difference is spawning with the speakers off, this was made to help the lag. - listening = 0 // And it's nice to have a subtype too for future features. - dog_fashion = /datum/dog_fashion/back - - /obj/item/radio/old name = "old radio" icon_state = "radio" diff --git a/code/game/objects/items/shrapnel.dm b/code/game/objects/items/shrapnel.dm index 8bf29c9a807a..959649c8c59b 100644 --- a/code/game/objects/items/shrapnel.dm +++ b/code/game/objects/items/shrapnel.dm @@ -1,6 +1,6 @@ /obj/item/shrapnel // frag grenades name = "shrapnel shard" - embedding = list(embed_chance=70, ignore_throwspeed_threshold=TRUE, fall_chance=4, embed_chance_turf_mod=-100) + embedding = list(embed_chance=70, ignore_throwspeed_threshold=TRUE, fall_chance=2, embed_chance_turf_mod=-100) custom_materials = list(/datum/material/iron=50) armour_penetration = -20 icon = 'icons/obj/shards.dmi' @@ -8,9 +8,14 @@ w_class = WEIGHT_CLASS_TINY item_flags = DROPDEL -/obj/item/shrapnel/stingball // stingbang grenades - name = "stingball" - embedding = list(embed_chance=90, fall_chance=3, jostle_chance=7, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.7, pain_mult=5, jostle_pain_mult=6, rip_time=15, embed_chance_turf_mod=-100) +/obj/item/shrapnel/hot + name = "molten slag" + embedding = list(embed_chance=70, ignore_throwspeed_threshold=TRUE, fall_chance=2, embed_chance_turf_mod=-100) + damtype = BURN + +/obj/item/shrapnel/stingball + name = "clump of ballistic gel" + embedding = list(embed_chance=15, fall_chance=2, jostle_chance=7, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.8, pain_mult=3, jostle_pain_mult=5, rip_time=15, embed_chance_turf_mod=-100) icon_state = "tiny" /obj/item/shrapnel/bullet // bullets @@ -28,35 +33,79 @@ /obj/projectile/bullet/shrapnel name = "flying shrapnel shard" - damage = 9 + damage = 10 range = 10 - armour_penetration = -30 - dismemberment = 5 + armour_penetration = -20 + dismemberment = 25 ricochets_max = 2 ricochet_chance = 40 shrapnel_type = /obj/item/shrapnel ricochet_incidence_leeway = 60 hit_stunned_targets = TRUE +/obj/projectile/bullet/shrapnel/Initialize() + . = ..() + def_zone = pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) + +/obj/projectile/bullet/shrapnel/rusty + damage = 8 + armour_penetration = -35 + dismemberment = 15 + ricochets_max = 3//duller = less likely to stick in a wall + ricochet_chance = 60 + /obj/projectile/bullet/shrapnel/mega + damage = 20 name = "flying shrapnel hunk" range = 25 - dismemberment = 10 + dismemberment = 35 ricochets_max = 4 ricochet_chance = 90 ricochet_decay_chance = 0.9 +/obj/projectile/bullet/shrapnel/hot + name = "white-hot metal slag" + damage = 8 + range = 8 + armour_penetration = -35 + dismemberment = 10 + shrapnel_type = /obj/item/shrapnel/hot + damage_type = BURN + +/obj/projectile/bullet/shrapnel/hot/on_hit(atom/target, blocked = FALSE) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/M = target + M.adjust_fire_stacks(15) + M.IgniteMob() + +/obj/projectile/bullet/shrapnel/spicy + name = "radioactive slag" + damage_type = BURN + damage = 10 + range = 8 + dismemberment = 10 + armour_penetration = -35 + shrapnel_type = /obj/item/shrapnel/hot + +/obj/projectile/bullet/shrapnel/spicy/on_hit(atom/target, blocked = FALSE) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/M = target + M.apply_effect(250,EFFECT_IRRADIATE,0) + /obj/projectile/bullet/pellet/stingball - name = "stingball pellet" - damage = 3 - stamina = 8 - ricochets_max = 4 + name = "ballistic gel clump" + damage = 5 + stamina = 15 + ricochets_max = 6 ricochet_chance = 66 ricochet_decay_chance = 1 ricochet_decay_damage = 0.9 ricochet_auto_aim_angle = 10 ricochet_auto_aim_range = 2 ricochet_incidence_leeway = 0 + knockdown = 20 shrapnel_type = /obj/item/shrapnel/stingball /obj/projectile/bullet/pellet/stingball/mega diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 09b2338b244f..cf4824f20fbe 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -118,6 +118,10 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("mortar", /obj/item/reagent_containers/glass/mortar/metal, 3), \ new/datum/stack_recipe("pestle", /obj/item/pestle, 1, time = 50), \ new/datum/stack_recipe("hygienebot assembly", /obj/item/bot_assembly/hygienebot, 2, time = 50), \ + new/datum/stack_recipe_list("weight machines", list( \ + new/datum/stack_recipe("chest press", /obj/structure/weightmachine/stacklifter, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bench press", /obj/structure/weightmachine/weightlifter, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ + )), \ new/datum/stack_recipe("shower", /obj/machinery/shower, 3, time = 25) )) @@ -367,6 +371,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ new/datum/stack_recipe("19x19 canvas", /obj/item/canvas/nineteenXnineteen, 3), \ new/datum/stack_recipe("23x19 canvas", /obj/item/canvas/twentythreeXnineteen, 4), \ new/datum/stack_recipe("23x23 canvas", /obj/item/canvas/twentythreeXtwentythree, 5), \ + new/datum/stack_recipe("punching bag", /obj/structure/punching_bag, 5, time = 25, one_per_turf = TRUE, on_floor = TRUE), \ )) /obj/item/stack/sheet/cotton/cloth diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 0737eb0b616e..fb001b2eb56b 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -121,9 +121,11 @@ var/mask_type = /obj/item/clothing/mask/breath var/internal_type = /obj/item/tank/internals/emergency_oxygen var/medipen_type = /obj/item/reagent_containers/hypospray/medipen + var/radio_type = /obj/item/radio /obj/item/storage/box/survival/PopulateContents() new mask_type(src) + new radio_type(src) if(!isnull(medipen_type)) new medipen_type(src) @@ -132,10 +134,6 @@ else new /obj/item/tank/internals/plasmaman/belt(src) -/obj/item/storage/box/survival/radio/PopulateContents() - ..() // we want the survival stuff too. - new /obj/item/radio/off(src) - // Mining survival box /obj/item/storage/box/survival/mining mask_type = /obj/item/clothing/mask/gas/explorer @@ -148,10 +146,6 @@ /obj/item/storage/box/survival/engineer internal_type = /obj/item/tank/internals/emergency_oxygen/engi -/obj/item/storage/box/survival/engineer/radio/PopulateContents() - ..() // we want the regular items too. - new /obj/item/radio/off(src) - // Syndie survival box /obj/item/storage/box/survival/syndie mask_type = /obj/item/clothing/mask/gas/syndicate @@ -162,10 +156,6 @@ /obj/item/storage/box/survival/security mask_type = /obj/item/clothing/mask/gas/sechailer -/obj/item/storage/box/survival/security/radio/PopulateContents() - ..() // we want the regular stuff too - new /obj/item/radio/off(src) - // Medical survival box /obj/item/storage/box/survival/medical mask_type = /obj/item/clothing/mask/breath/medical @@ -173,10 +163,6 @@ /obj/item/storage/box/survival/clip internal_type = /obj/item/tank/internals/emergency_oxygen/engi //clip actually cares about their personnel -/obj/item/storage/box/survival/clip/PopulateContents() - . = ..() - new /obj/item/radio/off(src) - /obj/item/storage/box/survival/clip/balaclava mask_type = /obj/item/clothing/mask/gas/sechailer/balaclava diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 7b02bd6b19d3..c703aeb38a0d 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -56,7 +56,7 @@ new /obj/item/flashlight/glowstick(src) if(3) new /obj/item/flashlight/flare(src) - new /obj/item/radio/off(src) + new /obj/item/radio(src) /obj/item/storage/toolbox/emergency/old name = "rusty red toolbox" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 00c619da8353..361358892520 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1404,7 +1404,7 @@ say(message, language) return NOPASS -/obj/item/toy/dummy/GetVoice() +/obj/item/toy/dummy/GetVoice(if_no_voice = "Unknown") return doll_name /obj/item/toy/seashell diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index abc67e252d52..112218650f85 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -149,7 +149,7 @@ name = "Demonic Friend" uniform = /obj/item/clothing/under/misc/assistantformal shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/radio/off + r_pocket = /obj/item/radio back = /obj/item/storage/backpack implants = list(/obj/item/implant/mindshield) //No revolutionaries, he's MY friend. id = /obj/item/card/id diff --git a/code/game/say.dm b/code/game/say.dm index c3c8dca852f8..2d53eea65e75 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -52,10 +52,28 @@ GLOBAL_LIST_INIT(freqcolor, list()) //Radio freq/name display var/freqpart = radio_freq ? "\[[get_radio_name(radio_freq)]\] " : "" //Speaker name - var/namepart = "[speaker.GetVoice()][speaker.get_alt_name()]" - if(face_name && ishuman(speaker)) - var/mob/living/carbon/human/H = speaker - namepart = "[H.get_face_name()]" //So "fake" speaking like in hallucinations does not give the speaker away if disguised + + var/namepart = speaker.GetVoice() + var/atom/movable/reliable_narrator = speaker + if(istype(speaker, /atom/movable/virtualspeaker)) //ugh + var/atom/movable/virtualspeaker/fakespeaker = speaker + reliable_narrator = fakespeaker.source + if(ishuman(reliable_narrator)) + //So "fake" speaking like in hallucinations does not give the speaker away if disguised + if(face_name) + var/mob/living/carbon/human/human_narrator = reliable_narrator + namepart = human_narrator.name + //otherwise, do guestbook handling + else if(ismob(src)) + var/mob/mob_source = src + if(mob_source.mind?.guestbook) + var/known_name = mob_source.mind.guestbook.get_known_name(src, reliable_narrator, namepart) + if(known_name) + namepart = "[known_name]" + else + var/mob/living/carbon/human/human_narrator = reliable_narrator + namepart = "[human_narrator.get_generic_name(prefixed = TRUE, lowercase = FALSE)]" + //End name span. var/endspanpart = "" @@ -67,9 +85,9 @@ GLOBAL_LIST_INIT(freqcolor, list()) else messagepart = lang_treat(speaker, message_language, raw_message, spans, message_mods) - var/datum/language/D = GLOB.language_datum_instances[message_language] - if(istype(D) && D.display_icon(src)) - languageicon = "[D.get_icon()] " + var/datum/language/language = GLOB.language_datum_instances[message_language] + if(istype(language) && language.display_icon(src)) + languageicon = "[language.get_icon()] " messagepart = " [say_emphasis(messagepart)]" @@ -177,7 +195,7 @@ GLOBAL_LIST_INIT(freqcolor, list()) return "2" return "0" -/atom/movable/proc/GetVoice() +/atom/movable/proc/GetVoice(if_no_voice = "Unknown") return "[src]" //Returns the atom's name, prepended with 'The' if it's not a proper noun /atom/movable/proc/IsVocal() diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index f4bfa034fa12..d74edb27a658 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -62,27 +62,15 @@ if(1) ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) if(2) - switch(rand(1, 3)) - if(1) - if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor)) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - ReplaceWithLattice() - else - ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) - if(prob(33)) - new /obj/item/stack/sheet/metal(src) - if(2) - ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR) - if(3) - if(prob(80)) - ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - else - break_tile() - hotspot_expose(1000,CELL_VOLUME) - if(prob(33)) - new /obj/item/stack/sheet/metal(src) + if(prob(60)) + ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + else + break_tile() + hotspot_expose(1000,CELL_VOLUME) + if(prob(33)) + new /obj/item/stack/sheet/metal(src) if(3) - if (prob(50)) + if(prob(50)) src.break_tile() src.hotspot_expose(1000,CELL_VOLUME) diff --git a/code/game/turfs/open/floor/plasteel_floor.dm b/code/game/turfs/open/floor/plasteel_floor.dm index 10760b3af5cf..7ed16bc5631e 100644 --- a/code/game/turfs/open/floor/plasteel_floor.dm +++ b/code/game/turfs/open/floor/plasteel_floor.dm @@ -157,7 +157,6 @@ /turf/open/floor/plasteel/cult/airless initial_gas_mix = AIRLESS_ATMOS - /turf/open/floor/plasteel/stairs //considering removal icon = 'icons/turf/floors.dmi' icon_state = "stairs" @@ -169,7 +168,7 @@ icon_state = "stairs-l" base_icon_state = "stairs-l" -/turf/open/floor/plasteel/stairs/medium +/turf/open/floor/plasteel/stairs/mid icon_state = "stairs-m" base_icon_state = "stairs-m" @@ -182,9 +181,128 @@ base_icon_state = "stairs-old" /turf/open/floor/plasteel/stairs/wood - color = "#A47449" - barefootstep = "wood" - footstep = "wood" + color = "#5B3E1D" + icon_state = "stairs-wood" + base_icon_state = "stairs-wood" + barefootstep = FOOTSTEP_WOOD_BAREFOOT + footstep = FOOTSTEP_WOOD_CLAW + +/turf/open/floor/plasteel/stairs/wood/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/mahogany + color = WOOD_COLOR_RICH + +/turf/open/floor/plasteel/stairs/wood/mahogany/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/mahogany/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/mahogany/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/maple + color = WOOD_COLOR_PALE + +/turf/open/floor/plasteel/stairs/wood/maple/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/maple/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/maple/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/ebony + color = WOOD_COLOR_BLACK + +/turf/open/floor/plasteel/stairs/wood/ebony/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/ebony/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/ebony/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/walnut + color = WOOD_COLOR_CHOCOLATE + +/turf/open/floor/plasteel/stairs/wood/walnut/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/walnut/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/walnut/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/bamboo + color = WOOD_COLOR_PALE2 + +/turf/open/floor/plasteel/stairs/wood/bamboo/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/bamboo/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/bamboo/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/birch + color = WOOD_COLOR_PALE3 + +/turf/open/floor/plasteel/stairs/wood/birch/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/birch/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/birch/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" + +/turf/open/floor/plasteel/stairs/wood/yew + color = WOOD_COLOR_YELLOW + +/turf/open/floor/plasteel/stairs/wood/yew/left + icon_state = "stairs-wood-l" + base_icon_state = "stairs-wood-l" + +/turf/open/floor/plasteel/stairs/wood/yew/mid + icon_state = "stairs-wood-m" + base_icon_state = "stairs-wood-m" + +/turf/open/floor/plasteel/stairs/wood/yew/right + icon_state = "stairs-wood-r" + base_icon_state = "stairs-wood-r" /turf/open/floor/plasteel/rockvault icon_state = "rockvault" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 82cb857576c1..5bb4b25cc1f1 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -39,7 +39,7 @@ return var/body = "Options for [M.key]" - body += "Options panel for [M]" + body += "Options panel for [M.real_name]" if(M.client) body += " played by [M.client] " body += "[M.client.holder ? M.client.holder.rank : "Player"]" diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index c1845945485f..7d5dfccf2804 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -23,6 +23,7 @@ H.facial_hair_color = H.hair_color H.eye_color = random_eye_color() H.dna.blood_type = random_blood_type() + H.generic_adjective = pick_species_adjective(H) // Mutant randomizing, doesn't affect the mob appearance unless it's the specific mutant. H.dna.features["mcolor"] = random_short_color() diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 99e7b1692ecc..04e84097f6d1 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -134,8 +134,8 @@ INVOKE_ASYNC(src, PROC_REF(do_bloodbath), M) /obj/effect/forcefield/arena_shuttle_entrance/proc/do_bloodbath(mob/living/L) - var/obj/effect/mine/pickup/bloodbath/B = new (L) - B.mineEffect(L) + var/obj/item/mine/pressure/pickup/bloodbath/B = new (L) + B.mine_effect(L) /area/shuttle_arena name = "arena" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b917501d0bb8..13d4c814f2fe 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -2227,6 +2227,15 @@ return paper_to_show.ui_interact(usr) + else if(href_list["show_photo"]) + if(!check_rights(R_ADMIN)) + return + + var/obj/item/photo/photo_to_show = locate(href_list["show_photo"]) + if(!istype(photo_to_show)) + return + photo_to_show.show(usr) + /datum/admins/proc/HandleCMode() if(!check_rights(R_ADMIN)) return diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index ac05c3afdd4f..dff0335b7e9e 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -493,6 +493,16 @@ teamSpawned++ if(teamSpawned) + // guestbook + for(var/datum/mind/member in ert_team.members) + var/member_mob = member.current + for(var/datum/mind/other_member in ert_team.members) + // skip yourself + if(other_member.name == member.name) + continue + var/mob/living/carbon/human/other_member_mob = other_member.current + member.guestbook.add_guest(member_mob, other_member_mob, other_member_mob.real_name, other_member_mob.real_name, TRUE) + message_admins("[ertemplate.rename_team] has spawned with the mission: [ertemplate.mission]") //Open the Armory doors diff --git a/code/modules/antagonists/blood_contract/blood_contract.dm b/code/modules/antagonists/blood_contract/blood_contract.dm index 01039a77623d..edd8aba60422 100644 --- a/code/modules/antagonists/blood_contract/blood_contract.dm +++ b/code/modules/antagonists/blood_contract/blood_contract.dm @@ -26,10 +26,10 @@ H.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY) - var/obj/effect/mine/pickup/bloodbath/B = new(H) + var/obj/item/mine/pressure/pickup/bloodbath/B = new(H) B.duration = duration - INVOKE_ASYNC(B, TYPE_PROC_REF(/obj/effect/mine/pickup/bloodbath, mineEffect), H) //could use moving out from the mine + INVOKE_ASYNC(B, TYPE_PROC_REF(/obj/item/mine/pressure/pickup/bloodbath, mine_effect), H) //could use moving out from the mine for(var/mob/living/carbon/human/P in GLOB.player_list) if(P == H) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 28d5ad1ec248..53bfd35974e7 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -281,6 +281,12 @@ contains = list(/obj/item/stock_parts/cell/gun) cost = 500 +/datum/supply_pack/ammo/guncell/kalix + name = "Etherbor Cell Crate" + desc = "Contains an Etherbor weapon cell, compatible with Etherbor armaments with a slightly higher capacity." + contains = list(/obj/item/stock_parts/cell/gun/kalix) + cost = 600 + /datum/supply_pack/ammo/c46x30mm_boxcrate name = "4.6x30mm Ammo Box Crate" desc = "Contains a fifty-round 4.6x30mm box for PDWs such as the WT-550." diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index e71a23ffcc17..b5371f4ba491 100644 --- a/code/modules/cargo/packs/gun.dm +++ b/code/modules/cargo/packs/gun.dm @@ -83,6 +83,20 @@ crate_name = "ion rifle crate" crate_type = /obj/structure/closet/crate/secure/plasma +/datum/supply_pack/gun/laser/kalix/pistol + name = "Etherbor SG-8 Beam Pistol Crate" + desc = "Contains a single SG-8 Beam Pistol, a civilian-grade sidearm developed in the PGF, manufactured by Etherbor Industries." + cost = 1000 + contains = list(/obj/item/gun/energy/kalix/pistol) + crate_name = "beam pistol crate" + +/datum/supply_pack/gun/laser/kalix + name = "Etherbor BG-12 Beam Rifle Crate" + desc = "Contains a single BG-12 Beam Rifle, a civilian-grade semi-automatic developed in the PGF, manufactured by Etherbor Industries." + cost = 3000 + contains = list(/obj/item/gun/energy/kalix) + crate_name = "beam rifle crate" + /* Shotguns */ diff --git a/code/modules/cargo/packs/machinery.dm b/code/modules/cargo/packs/machinery.dm index 215b146fad43..0bf718fffdd5 100644 --- a/code/modules/cargo/packs/machinery.dm +++ b/code/modules/cargo/packs/machinery.dm @@ -136,6 +136,14 @@ Miscellaneous machines */ +/datum/supply_pack/machinery/gravgen + name = "Ship-Portable Gravity Generator Crate" + desc = "For those tired of their tools floating away from them. Contains a single gravity generator." + cost = 2000 + contains = list(/obj/machinery/power/ship_gravity/unanchored) + crate_name = "gravity generator crate" + crate_type = /obj/structure/closet/crate/engineering/electrical + /datum/supply_pack/machinery/breach_shield_gen name = "Anti-breach Shield Projector Crate" desc = "Hull breaches again? Say no more with the Nanotrasen Anti-Breach Shield Projector! Uses forcefield technology to keep the air in, and the space out. Contains two shield projectors." diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 090041f06382..d49e9760da81 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -92,7 +92,9 @@ /obj/item/reagent_containers/blood/BMinus, /obj/item/reagent_containers/blood/OPlus, /obj/item/reagent_containers/blood/OMinus, - /obj/item/reagent_containers/blood/lizard) + /obj/item/reagent_containers/blood/lizard, + /obj/item/reagent_containers/blood/elzuose, + /obj/item/reagent_containers/blood/synthetic) crate_name = "blood freezer" crate_type = /obj/structure/closet/crate/freezer diff --git a/code/modules/cargo/packs/spacesuit_armor.dm b/code/modules/cargo/packs/spacesuit_armor.dm index c873a7e2dac4..78e7d0fb1ff0 100644 --- a/code/modules/cargo/packs/spacesuit_armor.dm +++ b/code/modules/cargo/packs/spacesuit_armor.dm @@ -8,39 +8,32 @@ /datum/supply_pack/spacesuit_armor/spacesuit name = "Space Suit Crate" - desc = "Contains three basic space suits. Although the technology is centuries old, they should protect you from the vacuum of space." - cost = 1500 + desc = "Contains one basic space suit. Although the technology is centuries old, it should protect you from the vacuum of space." + cost = 500 contains = list(/obj/item/clothing/suit/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/suit/space, - /obj/item/clothing/head/helmet/space, - /obj/item/clothing/head/helmet/space, /obj/item/clothing/head/helmet/space) crate_name = "space suit crate" /datum/supply_pack/spacesuit_armor/pilot_spacesuit name = "Pilot Space Suit Crate" - desc = "Two pilot space suits, for improved mobility in mechs and pods." - cost = 3500 + desc = "One pilot space suit, for improved mobility in mechs." + cost = 750 contains = list(/obj/item/clothing/suit/space/pilot, - /obj/item/clothing/suit/space/pilot, - /obj/item/clothing/head/helmet/space/pilot/random, /obj/item/clothing/head/helmet/space/pilot/random) crate_name = "pilot space suit crate" /datum/supply_pack/spacesuit_armor/mining_hardsuits_indie name = "Mining Hardsuit Crate" - desc = "Two independent branded mining hardsuits for when explorer suits just dont cut it." - cost = 4000 - contains = list(/obj/item/clothing/suit/space/hardsuit/mining/independent, - /obj/item/clothing/suit/space/hardsuit/mining/independent) + desc = "One independent branded mining hardsuit for when explorer suits just dont cut it." + cost = 1500 + contains = list(/obj/item/clothing/suit/space/hardsuit/mining/independent) crate_name = "mining hardsuit crate" crate_type = /obj/structure/closet/crate/secure/plasma /datum/supply_pack/spacesuit_armor/med_hardsuit name = "Medical Hardsuit Crate" - desc = "Two medical hardsuits, resistant to diseases and useful for retrieving patients in space." - cost = 5000 + desc = "One medical hardsuit, resistant to diseases and useful for retrieving patients in space." + cost = 1500 contains = list(/obj/item/clothing/suit/space/hardsuit/medical, /obj/item/clothing/suit/space/hardsuit/medical) crate_name = "medical hardsuit crate" @@ -49,7 +42,7 @@ /datum/supply_pack/spacesuit_armor/mining_hardsuit_heavy name = "Heavy Mining Hardsuit Crate" desc = "One deluxe heavy mining hardsuit for dangerous frontier operations. Comes with a pair of EXOCOM jet boots." - cost = 6000 + cost = 3500 contains = list(/obj/item/clothing/suit/space/hardsuit/mining/heavy, /obj/item/clothing/shoes/bhop) crate_name = "heavy mining hardsuit crate" @@ -57,53 +50,43 @@ /datum/supply_pack/spacesuit_armor/sec_hardsuit_bundle name = "Security Hardsuit Crate" - desc = "Contains two security hardsuits for light combat duty." - cost = 7500 - contains = list(/obj/item/clothing/suit/space/hardsuit/security/independent, - /obj/item/clothing/suit/space/hardsuit/security/independent) + desc = "Contains one security hardsuit for light combat duty." + cost = 2500 + contains = list(/obj/item/clothing/suit/space/hardsuit/security/independent) crate_name = "security hardsuit crate" crate_type = /obj/structure/closet/crate/secure/gear /datum/supply_pack/spacesuit_armor/sci_hardsuit name = "Science Hardsuit Crate" - desc = "Contains two science hardsuits, designed to provide safety under advanced experimental conditions." - cost = 8500 - contains = list(/obj/item/clothing/suit/space/hardsuit/rd, - /obj/item/clothing/suit/space/hardsuit/rd) + desc = "Contains one science hardsuit, designed to provide safety under advanced experimental conditions." + cost = 2000 + contains = list(/obj/item/clothing/suit/space/hardsuit/rd) crate_name = "science hardsuit crate" crate_type = /obj/structure/closet/crate/secure/science /datum/supply_pack/spacesuit_armor/engi_spacesuit_bundle name = "Engineering Space Suit Crate" - desc = "Need to turn your ship into a safety hazard? Not a problem! These three engineering space suits will help get the job done." - cost = 9000 + desc = "Need to turn your ship into a safety hazard? Not a problem! This engineering space suit will help get the job done." + cost = 1500 contains = list(/obj/item/clothing/suit/space/engineer, - /obj/item/clothing/suit/space/engineer, - /obj/item/clothing/suit/space/engineer, - /obj/item/clothing/head/helmet/space/light/engineer, - /obj/item/clothing/head/helmet/space/light/engineer, /obj/item/clothing/head/helmet/space/light/engineer) crate_name = "engineering space suit crate" crate_type = /obj/structure/closet/crate/secure/engineering /datum/supply_pack/spacesuit_armor/atmos_hardsuit name = "Atmospherics Hardsuit Crate" - desc = "The iconic hardsuit of Nanotrasen's Atmosphere Corps, these two hardsuits are known across space as a symbol of defiance in the face of sudden decompression. Smells faintly of plasma." - cost = 12000 - contains = list(/obj/item/clothing/suit/space/hardsuit/engine/atmos, - /obj/item/clothing/suit/space/hardsuit/engine/atmos) + desc = "The iconic hardsuit of Nanotrasen's Atmosphere Corps, this hardsuit is known across space as a symbol of defiance in the face of sudden decompression. Smells faintly of plasma." + cost = 2500 + contains = list(/obj/item/clothing/suit/space/hardsuit/engine/atmos) crate_name = "atmospherics hardsuit crate" crate_type = /obj/structure/closet/crate/secure/engineering /datum/supply_pack/spacesuit_armor/swat name = "SWAT Crate" - desc = "Contains two fullbody sets of tough, fireproof, pressurized suits designed in a joint effort by IS-ERI and Nanotrasen. Each set contains a suit, helmet, and combat belt." - cost = 12000 + desc = "Contains one fullbody set of tough, fireproof, pressurized suit designed in a joint effort by IS-ERI and Nanotrasen. The set contains a suit, helmet, and combat belt." + cost = 3500 contains = list(/obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/head/helmet/swat/nanotrasen, - /obj/item/clothing/suit/space/swat, /obj/item/clothing/suit/space/swat, - /obj/item/storage/belt/military/assault, /obj/item/storage/belt/military/assault) crate_name = "swat crate" crate_type = /obj/structure/closet/crate/secure/gear @@ -114,42 +97,35 @@ /datum/supply_pack/spacesuit_armor/basic_armor name = "Armor Crate" - desc = "Two sets of well-rounded body armor. Each set includes a helmet and vest." - cost = 1500 + desc = "One set of well-rounded body armor. The set includes a helmet and vest." + cost = 750 contains = list(/obj/item/clothing/suit/armor/vest, - /obj/item/clothing/suit/armor/vest, - /obj/item/clothing/head/helmet/sec, /obj/item/clothing/head/helmet/sec) crate_name = "armor crate" crate_type = /obj/structure/closet/crate/secure/plasma /datum/supply_pack/spacesuit_armor/riot_armor name = "Riot Armor Crate" - desc = "Contains two full sets of riot armor. Although heavily padded to deal with close-quarters threats, they perform poorly against most firearms." - cost = 3000 + desc = "Contains one full set of riot armor. Although heavily padded to deal with close-quarters threats, they perform poorly against most firearms." + cost = 1500 contains = list(/obj/item/clothing/suit/armor/riot, - /obj/item/clothing/suit/armor/riot, - /obj/item/clothing/head/helmet/riot, /obj/item/clothing/head/helmet/riot) crate_name = "riot armor crate" crate_type = /obj/structure/closet/crate/secure/plasma /datum/supply_pack/spacesuit_armor/bullet_armor name = "Bulletproof Armor Crate" - desc = "Contains two full sets of bulletproof armor, guaranteed to reduce a bullet's stopping power by half but with limited protection against melee weaponry." - cost = 3500 + desc = "Contains one full set of bulletproof armor, guaranteed to reduce a bullet's stopping power by half but with limited protection against melee weaponry." + cost = 1750 contains = list(/obj/item/clothing/suit/armor/vest/bulletproof, - /obj/item/clothing/suit/armor/vest/bulletproof, - /obj/item/clothing/head/helmet/bulletproof, /obj/item/clothing/head/helmet/bulletproof) crate_name = "bulletproof armor crate" crate_type = /obj/structure/closet/crate/secure/plasma /datum/supply_pack/spacesuit_armor/laser_armor name = "Reflector Vest Crate" - desc = "Contains two vests of highly reflective material. Each armor piece diffuses a laser's energy by over half, as well as offering a good chance to reflect the laser entirely." - cost = 3000 - contains = list(/obj/item/clothing/suit/armor/laserproof, - /obj/item/clothing/suit/armor/laserproof) + desc = "Contains one vest made of highly reflective material. The armor piece diffuses a laser's energy by over half, as well as offering a good chance to reflect the laser entirely." + cost = 1500 + contains = list(/obj/item/clothing/suit/armor/laserproof) crate_name = "reflector vest crate" crate_type = /obj/structure/closet/crate/secure/plasma diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm index 042315cc981f..5b8df328e6e2 100644 --- a/code/modules/client/loadout/loadout_general.dm +++ b/code/modules/client/loadout/loadout_general.dm @@ -102,10 +102,6 @@ display_name = "cane" path = /obj/item/cane -/datum/gear/radio - display_name = "hand radio" - path = /obj/item/radio - /datum/gear/lizard display_name = "toy, lizard plushie" path = /obj/item/toy/plush/lizardplushie diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ebf32c163d89..901200f69928 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -158,7 +158,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/custom_names = list() var/preferred_ai_core_display = "Blue" var/prefered_security_department = SEC_DEPT_RANDOM - + var/generic_adjective = "Unremarkable" //Quirk list var/list/all_quirks = list() @@ -847,6 +847,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "[features["body_size"]]
" + + dat += "

Character Adjective

" + + dat += "[generic_adjective]
" + mutant_category++ if(mutant_category >= MAX_MUTANT_ROWS) dat += "" @@ -2074,6 +2079,15 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(phobiaType) phobia = phobiaType + if("generic_adjective") + var/selectAdj + if(istype(pref_species, /datum/species/ipc)) + selectAdj = input(user, "In one word, how would you describe your character's appereance?", "Character Preference", generic_adjective) as null|anything in GLOB.ipc_preference_adjectives + else + selectAdj = input(user, "In one word, how would you describe your character's appereance?", "Character Preference", generic_adjective) as null|anything in GLOB.preference_adjectives + if(selectAdj) + generic_adjective = selectAdj + if ("max_chat_length") var/desiredlength = input(user, "Choose the max character length of shown Runechat messages. Valid range is 1 to [CHAT_MESSAGE_MAX_LENGTH] (default: [initial(max_chat_length)]))", "Character Preference", max_chat_length) as null|num if (!isnull(desiredlength)) @@ -2473,6 +2487,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE) //Because of how set_species replaces all bodyparts with new ones, hair needs to be set AFTER species. character.dna.real_name = character.real_name + character.generic_adjective = generic_adjective character.hair_color = hair_color character.facial_hair_color = facial_hair_color character.grad_color = features["grad_color"] diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 0b95e291b794..cce6b66ac612 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -405,6 +405,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car READ_FILE(S["jumpsuit_style"], jumpsuit_style) READ_FILE(S["uplink_loc"], uplink_spawn_loc) READ_FILE(S["phobia"], phobia) + READ_FILE(S["generic_adjective"], generic_adjective) READ_FILE(S["randomise"], randomise) READ_FILE(S["body_size"], features["body_size"]) READ_FILE(S["prosthetic_limbs"], prosthetic_limbs) @@ -594,6 +595,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["randomise"] , randomise) WRITE_FILE(S["species"] , pref_species.id) WRITE_FILE(S["phobia"] , phobia) + WRITE_FILE(S["generic_adjective"] , generic_adjective) WRITE_FILE(S["body_size"] , features["body_size"]) WRITE_FILE(S["prosthetic_limbs"] , prosthetic_limbs) WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) diff --git a/code/modules/client/verbs/looc.dm b/code/modules/client/verbs/looc.dm index 47d4e0e82aec..1c66a077a065 100644 --- a/code/modules/client/verbs/looc.dm +++ b/code/modules/client/verbs/looc.dm @@ -59,32 +59,33 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC") mob.log_talk(raw_msg, LOG_LOOC, tag = "(LOOC)") - var/list/heard = get_hearers_in_view(7, get_top_level_mob(src.mob)) - for(var/mob/M in heard) - if(!M.client) + var/list/heard = get_hearers_in_view(7, get_top_level_mob(mob)) + for(var/mob/hearer_mob in heard) + var/client/hearer = hearer_mob.client + + if(!hearer) continue - var/client/C = M.client - if(key in C.prefs.ignoring) + if(key in hearer.prefs.ignoring) continue - if(holder?.fakekey in C.prefs.ignoring) + if(holder?.fakekey in hearer.prefs.ignoring) continue - if(!(C.prefs.chat_toggles & CHAT_LOOC)) + if(!(hearer.prefs.chat_toggles & CHAT_LOOC)) continue //Handled before admins so that they see this if they're in range anyways - if(C.prefs.chat_on_map && mob.invisibility <= M.see_invisible) - M.create_chat_message(mob, null, "\[LOOC: [raw_msg]\]", null, LOOC_MESSAGE) + if(hearer.prefs.chat_on_map && mob.invisibility <= hearer_mob.see_invisible) + hearer_mob.create_chat_message(mob, null, "\[LOOC: [raw_msg]\]", null, LOOC_MESSAGE) - if(C in GLOB.admins) + if(hearer in GLOB.admins) continue //handled in the next loop if(GLOB.LOOC_COLOR) - to_chat(C, "LOOC: [src.mob.name]: [msg]", MESSAGE_TYPE_LOOC) + to_chat(hearer, "LOOC: [mob.get_screentip_name(hearer)]: [msg]", MESSAGE_TYPE_LOOC) else - to_chat(C, "LOOC: [src.mob.name]: [msg]", MESSAGE_TYPE_LOOC) + to_chat(hearer, "LOOC: [mob.get_screentip_name(hearer)]: [msg]", MESSAGE_TYPE_LOOC) for(var/client/C in GLOB.admins) if(key in C.prefs.ignoring) @@ -100,9 +101,9 @@ GLOBAL_VAR_INIT(normal_looc_colour, "#6699CC") if (C.mob in heard) prefix = "LOOC" if(GLOB.LOOC_COLOR) - to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]", MESSAGE_TYPE_LOOC) + to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [key]/[mob.real_name]: [msg]", MESSAGE_TYPE_LOOC) else - to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [src.key]/[src.mob.name]: [msg]", MESSAGE_TYPE_LOOC) + to_chat(C, "[ADMIN_FLW(usr)] [prefix]: [key]/[mob.real_name]: [msg]", MESSAGE_TYPE_LOOC) /proc/toggle_looc(toggle = null) if(toggle == null) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 203bcf416b13..f5c37b18997d 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -150,7 +150,7 @@ card.assignment = J.name card.update_appearance() card.assignment = old_assignment - card.update_label() + card.name = "[(istype(src, /obj/item/card/id/syndicate)) ? "[initial(name)]" : "access card"][(!old_assignment) ? "" : " ([old_assignment])"]" H.sec_hud_set_ID() qdel(outfit) diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 4e0ac8545648..a541941208e2 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -282,7 +282,7 @@ suit = /obj/item/clothing/suit/armor/vest/marine back = /obj/item/storage/backpack/ert backpack_contents = list( - /obj/item/storage/box/survival/engineer/radio = 1, + /obj/item/storage/box/survival/engineer = 1, /obj/item/gun_voucher/nanotrasen = 1 ) belt = /obj/item/storage/belt/military/assault @@ -332,7 +332,7 @@ l_pocket = /obj/item/healthanalyzer head = /obj/item/clothing/head/helmet/marine/medic backpack_contents = list( - /obj/item/storage/box/survival/engineer/radio = 1, + /obj/item/storage/box/survival/engineer = 1, /obj/item/gun_voucher/nanotrasen = 1, /obj/item/reagent_containers/hypospray/combat = 1, /obj/item/storage/firstaid/regular = 1, @@ -359,7 +359,7 @@ head = /obj/item/clothing/head/helmet/marine/engineer back = /obj/item/storage/backpack/ert/engineer backpack_contents = list( - /obj/item/storage/box/survival/engineer/radio = 1, + /obj/item/storage/box/survival/engineer = 1, /obj/item/gun_voucher/nanotrasen = 1, /obj/item/rcd_ammo/large = 2, ) @@ -460,6 +460,5 @@ glasses = /obj/item/clothing/glasses/hud/security/sunglasses back = /obj/item/storage/backpack/ert - box = /obj/item/storage/box/survival/radio l_pocket = /obj/item/megaphone/command r_pocket = /obj/item/binoculars diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm index 9de9c0d152c3..a8ce0907a35a 100644 --- a/code/modules/clothing/outfits/factions/minutemen.dm +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -308,7 +308,7 @@ suit = /obj/item/clothing/suit/armor/vest/capcarapace/clip shoes = /obj/item/clothing/shoes/combat - box = /obj/item/storage/box/survival/engineer/radio + box = /obj/item/storage/box/survival/engineer backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/gun/ballistic/revolver/mateba=1) /datum/outfit/job/clip/minutemen/captain/general/admiral // for flavor, might remove outright diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index ee0d7789355e..20ad6e089730 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -25,7 +25,6 @@ var/display_order = JOB_DISPLAY_ORDER_DEFAULT - ///Levels unlocked at roundstart in physiology var/list/roundstart_experience diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index b6058b596444..613a68a2de47 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -222,9 +222,7 @@ if(96) new /obj/item/banhammer(src) for(var/i in 1 to 3) - var/obj/effect/mine/sound/bwoink/mine = new (src) - mine.set_anchored(FALSE) - mine.move_resist = MOVE_RESIST_DEFAULT + new /obj/item/mine/pressure/sound(src) if(97) for(var/i in 1 to 4) new /obj/item/clothing/mask/balaclava(src) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 985c5212299b..42cc2a74d6a4 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -1517,8 +1517,8 @@ /obj/item/mayhem/attack_self(mob/user) for(var/mob/living/carbon/human/H in range(7,user)) - var/obj/effect/mine/pickup/bloodbath/B = new(H) - INVOKE_ASYNC(B, TYPE_PROC_REF(/obj/effect/mine/pickup/bloodbath, mineEffect), H) + var/obj/item/mine/pressure/pickup/bloodbath/B = new(H) + INVOKE_ASYNC(B, TYPE_PROC_REF(/obj/item/mine/pressure/pickup/bloodbath, mine_effect), H) to_chat(user, "You shatter the bottle!") playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, TRUE) message_admins("[ADMIN_LOOKUPFLW(user)] has activated a bottle of mayhem!") diff --git a/code/modules/mining/lavaland/ruins/gym.dm b/code/modules/mining/lavaland/ruins/gym.dm index 8a73aff51a69..63b220828f81 100644 --- a/code/modules/mining/lavaland/ruins/gym.dm +++ b/code/modules/mining/lavaland/ruins/gym.dm @@ -7,6 +7,47 @@ layer = WALL_OBJ_LAYER var/list/hit_sounds = list('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg',\ 'sound/weapons/punch1.ogg', 'sound/weapons/punch2.ogg', 'sound/weapons/punch3.ogg', 'sound/weapons/punch4.ogg') + var/buildstacktype = /obj/item/stack/sheet/cotton/cloth + var/buildstackamount = 5 + +/obj/structure/punching_bag/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + return..() + +/obj/structure/punching_bag/wrench_act(mob/living/user, obj/item/W) + if(..()) + return TRUE + add_fingerprint(user) + var/action = anchored ? "unbolts [src] from" : "bolts [src] to" + var/uraction = anchored ? "unbolt [src] from" : "bolt [src] to" + user.visible_message(span_warning("[user] [action] the floor."), span_notice("You start to [uraction] the floor..."), span_hear("You hear rustling noises.")) + if(W.use_tool(src, user, 50, volume=100, extra_checks = CALLBACK(src, PROC_REF(check_anchored_state), anchored))) + set_anchored(!anchored) + to_chat(user, span_notice("You [anchored ? "bolt" : "unbolt"] [src] from the floor.")) + return TRUE + +/obj/structure/punching_bag/wirecutter_act(mob/living/user, obj/item/W) + . = ..() + if(!anchored) + user.visible_message(span_warning("[user] cuts apart [src]."), span_notice("You start to cut apart [src]."), span_hear("You hear cutting.")) + if(W.use_tool(src, user, 50, volume=100)) + if(anchored) + return TRUE + to_chat(user, span_notice("You cut apart [src].")) + deconstruct(TRUE) + return TRUE + +/obj/structure/punching_bag/proc/check_anchored_state(check_anchored) + return anchored == check_anchored + +/obj/structure/punching_bag/examine(mob/user) + . = ..() + if(anchored) + . += span_notice("[src] is bolted to the floor.") + else + . += span_notice("[src] is no longer bolted to the floor, and the seams can be cut apart.") /obj/structure/punching_bag/attack_hand(mob/user as mob) . = ..() @@ -25,6 +66,8 @@ icon = 'icons/obj/gym_equipment.dmi' density = TRUE anchored = TRUE + var/buildstacktype = /obj/item/stack/sheet/metal + var/buildstackamount = 5 /obj/structure/weightmachine/proc/AnimateMachine(mob/living/user) return @@ -33,6 +76,45 @@ . = ..() icon_state = (obj_flags & IN_USE) ? "[base_icon_state]-u" : base_icon_state +/obj/structure/weightmachine/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(buildstacktype) + new buildstacktype(loc,buildstackamount) + return..() + +/obj/structure/weightmachine/wrench_act(mob/living/user, obj/item/W) + if(..()) + return TRUE + add_fingerprint(user) + var/action = anchored ? "unbolts [src] from" : "bolts [src] to" + var/uraction = anchored ? "unbolt [src] from" : "bolt [src] to" + user.visible_message(span_warning("[user] [action] the floor."), span_notice("You start to [uraction] the floor..."), span_hear("You hear rustling noises.")) + if(W.use_tool(src, user, 50, volume=100, extra_checks = CALLBACK(src, PROC_REF(check_anchored_state), anchored))) + set_anchored(!anchored) + to_chat(user, span_notice("You [anchored ? "bolt" : "unbolt"] [src] from the floor.")) + return TRUE + +/obj/structure/weightmachine/screwdriver_act(mob/living/user, obj/item/W) + . = ..() + if(!anchored) + user.visible_message(span_warning("[user] screws apart [src]."), span_notice("You start to screw apart [src]."), span_hear("You hear screwing.")) + if(W.use_tool(src, user, 50, volume=100)) + if(anchored) + return TRUE + to_chat(user, span_notice("You screw apart [src].")) + deconstruct(TRUE) + return TRUE + +/obj/structure/weightmachine/proc/check_anchored_state(check_anchored) + return anchored == check_anchored + +/obj/structure/weightmachine/examine(mob/user) + . = ..() + if(anchored) + . += span_notice("[src] is bolted to the floor.") + else + . += span_notice("[src] is no longer bolted to the floor, and the screws are exposed.") + /obj/structure/weightmachine/update_overlays() . = ..() @@ -44,7 +126,7 @@ if(.) return if(obj_flags & IN_USE) - to_chat(user, "It's already in use - wait a bit!") + to_chat(user, span_warning("It's already in use - wait a bit!")) return else obj_flags |= IN_USE @@ -100,3 +182,4 @@ sleep(3) animate(user, pixel_y = 2, time = 3) sleep(3) + diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 5a1e5bbf3387..85c60a15b031 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -107,7 +107,7 @@ INITIALIZE_IMMEDIATE(/mob/dead) . = ..() if(!client) return - LAZYADDASSOC(SSmobs.dead_players_by_virtual_z, "[virtual_z()]", src) + LAZYADDASSOCLIST(SSmobs.dead_players_by_virtual_z, "[virtual_z()]", src) /mob/dead/Logout() . = ..() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 9baa46f526b5..5ccba743bb1b 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -249,8 +249,8 @@ observer.client.init_verbs() observer.update_appearance() observer.stop_sound_channel(CHANNEL_LOBBYMUSIC) - deadchat_broadcast(" has observed.", "[observer.real_name]", follow_target = observer, turf_target = get_turf(observer), message_type = DEADCHAT_DEATHRATTLE) QDEL_NULL(mind) + deadchat_broadcast(" has observed.", "[observer.real_name]", follow_target = observer, turf_target = get_turf(observer), message_type = DEADCHAT_DEATHRATTLE) qdel(src) return TRUE @@ -329,6 +329,7 @@ var/mob/living/carbon/human/humanc = character ship.manifest_inject(humanc, client, job) GLOB.data_core.manifest_inject(humanc, client) + ship.add_mob_to_crew_guestbook(humanc) AnnounceArrival(humanc, job.name, ship) AddEmploymentContract(humanc) SSblackbox.record_feedback("tally", "species_spawned", 1, humanc.dna.species.name) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index b024be2f96f7..59f97d172ad1 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -8,7 +8,6 @@ var/t_has = p_have() var/t_is = p_are() var/obscure_name - var/list/obscured = check_obscured_slots() var/skipface = ((wear_mask?.flags_inv & HIDEFACE) || (head?.flags_inv & HIDEFACE)) @@ -16,10 +15,25 @@ var/mob/living/L = user if(HAS_TRAIT(L, TRAIT_PROSOPAGNOSIA)) obscure_name = TRUE - var/apparent_species - if(dna?.species && !skipface) - apparent_species = ", \an [dna.species.name]" - . = list("This is [!obscure_name ? name : "Unknown"][apparent_species]!") + + . = list(span_info("This is [name]!")) + + if(user != src) + if(!obscure_name && !skipface) + var/face_name = get_face_name("") + if(face_name) + //if we have no guestbook, we just KNOW okay? + var/known_name = user.mind?.guestbook ? user.mind.guestbook.get_known_name(user, src, face_name) : face_name + if(known_name) + . += "You know them as [known_name]." + else + . += "You don't recognize [t_him]. You can Ctrl-Shift click [t_him] to memorize their face." + else + . += "You can't see [t_his] face very well." + else + . += "You can't see [t_his] face very well." + else + . += "It's you, [real_name]." //uniform if(w_uniform && !(ITEM_SLOT_ICLOTHING in obscured)) @@ -402,18 +416,4 @@ . = ..() if ((wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))) return - var/age_text - switch(age) - if(-INFINITY to 25) - age_text = "very young" - if(26 to 35) - age_text = "of adult age" - if(36 to 55) - age_text = "middle-aged" - if(56 to 75) - age_text = "rather old" - if(76 to 100) - age_text = "very old" - if(101 to INFINITY) - age_text = "withering away" - . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [age_text].")) + . += list(span_notice("[p_they(TRUE)] appear[p_s()] to be [get_age()].")) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f3802e381c55..ecad7982b83a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1057,6 +1057,12 @@ else if(can_be_firemanned(target)) fireman_carry(target) +/mob/living/carbon/human/limb_attack_self() + var/obj/item/bodypart/arm = hand_bodyparts[active_hand_index] + if(arm) + arm.attack_self(src) + return ..() + /mob/living/carbon/human/MouseDrop(mob/over) . = ..() if(ishuman(over)) @@ -1258,6 +1264,23 @@ return FALSE return ..() +/mob/living/carbon/human/CtrlShiftClick(mob/user) + . = ..() + if(isobserver(user) || !user.mind?.guestbook) + return + INVOKE_ASYNC(user.mind.guestbook, TYPE_PROC_REF(/datum/guestbook, try_add_guest), user, src, FALSE) + +/mob/living/carbon/human/get_screentip_name(client/hovering_client) + . = ..() + var/mob/hovering_mob = hovering_client?.mob + if(!hovering_mob?.mind?.guestbook) + return . + var/face_name = get_face_name("") + var/known_name = hovering_mob.mind.guestbook.get_known_name(hovering_mob, src, face_name) + if(known_name) + return known_name + return . + /mob/living/carbon/human/species var/race = null diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 5b638d330690..8cc9e5002749 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -61,6 +61,9 @@ var/special_voice = "" // For changing our voice. Used by a symptom. + /// Adjective used in get_generic_name(), if any + var/generic_adjective + var/bleed_rate = 0 //how much are we bleeding var/bleedsuppress = 0 //for stopping bloodloss, eventually this will be limb-based like bleeding diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 2f9814112711..b98466301f63 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -31,28 +31,19 @@ return pda.owner return if_no_id -//repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere /mob/living/carbon/human/get_visible_name() - var/face_name = get_face_name("") - var/id_name = get_id_name("") if(name_override) return name_override - if(face_name) - if(id_name && (id_name != face_name)) - return "[face_name] (as [id_name])" - return face_name - if(id_name) - return id_name - return "Unknown" + return get_generic_name(lowercase = TRUE) //Returns "Unknown" if facially disfigured and real_name if not. Useful for setting name when Fluacided or when updating a human's name variable -/mob/living/carbon/human/proc/get_face_name(if_no_face="Unknown") - if(wear_mask && (wear_mask.flags_inv&HIDEFACE)) //Wearing a mask which hides our face, use id-name if possible +/mob/living/carbon/human/proc/get_face_name(if_no_face = get_generic_name(lowercase = TRUE)) + if(wear_mask && (wear_mask.flags_inv & HIDEFACE)) //Wearing a mask which hides our face, use id-name if possible return if_no_face - if(head && (head.flags_inv&HIDEFACE)) - return if_no_face //Likewise for hats + if(head && (head.flags_inv & HIDEFACE)) + return if_no_face //Likewise for hats var/obj/item/bodypart/O = get_bodypart(BODY_ZONE_HEAD) - if(!O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name) //disfigured. use id-name if possible + if(!O || (HAS_TRAIT(src, TRAIT_DISFIGURED)) || (O.brutestate+O.burnstate)>2 || cloneloss>50 || !real_name) //disfigured. use id-name if possible return if_no_face return real_name @@ -181,3 +172,56 @@ destination.socks = socks destination.socks_color = socks_color destination.jumpsuit_style = jumpsuit_style + +/mob/living/carbon/human/proc/get_age() + var/obscured = check_obscured_slots() + var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + if((obscured & ITEM_SLOT_ICLOTHING) && skipface || isipc(src)) + return "" + switch(age) + if(70 to INFINITY) + return "Geriatric" + if(60 to 70) + return "Elderly" + if(50 to 60) + return "Old" + if(40 to 50) + return "Middle-Aged" + if(24 to 40) + return "" //not necessary because this is basically the most common age range + if(18 to 24) + return "Young" + else + return "Puzzling" + +/mob/living/carbon/human/proc/get_generic_name(prefixed = FALSE, lowercase = FALSE) + var/obscured = check_obscured_slots() + var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) + var/hide_features = (obscured & ITEM_SLOT_ICLOTHING) && skipface + var/visible_adjective + if(generic_adjective && !hide_features) + visible_adjective = "[generic_adjective] " + var/visible_age = get_age() + if(visible_age) + visible_age = "[visible_age] " + var/visible_gender = get_gender() + var/final_string = "[visible_adjective][visible_age][dna.species.name] [visible_gender]" + if(prefixed) + final_string = "\A [final_string]" + return lowercase ? lowertext(final_string) : final_string + +/mob/living/carbon/human/proc/get_gender() + var/visible_gender = p_they() + switch(visible_gender) + if("he") + visible_gender = "Man" + if("she") + visible_gender = "Woman" + if("they") + if(ishuman(src)) + visible_gender = "Person" + else + visible_gender = "Creature" + else + visible_gender = "Thing" + return visible_gender diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index 039141bb5fd5..6b0c1ff1c768 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -7,16 +7,14 @@ else . = ..() -/mob/living/carbon/human/GetVoice() +/mob/living/carbon/human/GetVoice(if_no_voice = get_generic_name()) if(istype(wear_mask, /obj/item/clothing/mask/chameleon)) - var/obj/item/clothing/mask/chameleon/V = wear_mask - if(V.voice_change && wear_id) + var/obj/item/clothing/mask/chameleon/chameleon_mask = wear_mask + if(chameleon_mask.voice_change && wear_id) var/obj/item/card/id/idcard = wear_id.GetID() if(istype(idcard)) return idcard.registered_name - else - return real_name - if(istype(wear_mask, /obj/item/clothing/mask/gas/syndicate/voicechanger)) + else if(istype(wear_mask, /obj/item/clothing/mask/gas/syndicate/voicechanger)) var/obj/item/clothing/mask/gas/syndicate/voicechanger/V = wear_mask if(V.voice_change && wear_id) var/obj/item/card/id/idcard = wear_id.GetID() @@ -26,18 +24,17 @@ return real_name else return real_name - if(istype(wear_mask, /obj/item/clothing/mask/infiltrator)) - var/obj/item/clothing/mask/infiltrator/V = wear_mask - if(V.voice_unknown) - return ("Unknown") - else - return real_name + else if(istype(wear_mask, /obj/item/clothing/mask/infiltrator)) + var/obj/item/clothing/mask/infiltrator/infiltrator_mask = wear_mask + if(infiltrator_mask.voice_unknown) + return if_no_voice if(mind) var/datum/antagonist/changeling/changeling = mind.has_antag_datum(/datum/antagonist/changeling) if(changeling && changeling.mimicing) return changeling.mimicing - if(GetSpecialVoice()) - return GetSpecialVoice() + var/special_voice = GetSpecialVoice() + if(special_voice) + return special_voice return real_name /mob/living/carbon/human/IsVocal() diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 381708757fd1..6506ee40c086 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -1,5 +1,5 @@ /datum/species/ipc // im fucking lazy mk2 and cant get sprites to normally work - name = "\improper Integrated Positronic Chassis" //inherited from the real species, for health scanners and things + name = "\improper Positronic" //inherited from the real species, for health scanners and things id = SPECIES_IPC sexes = FALSE species_age_min = 0 diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 02ddf79f6bc4..b20b27efc928 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -1,5 +1,5 @@ /datum/species/moth - name = "\improper Mothman" + name = "\improper Mothperson" id = SPECIES_MOTH default_color = "00FF00" species_traits = list(LIPS, NOEYESPRITES, TRAIT_ANTENNAE, HAIR, EMOTE_OVERLAY) @@ -36,17 +36,6 @@ var/mob/living/carbon/human/H = C handle_mutant_bodyparts(H) -/datum/species/moth/random_name(gender,unique,lastname) - if(unique) - return random_unique_moth_name() - - var/randname = moth_name() - - if(lastname) - randname += " [lastname]" - - return randname - /datum/species/handle_fire(mob/living/carbon/human/H, no_protection = FALSE) . = ..() if(.) //if the mob is immune to fire, don't burn wings off. diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index ec9afd777f2c..d3c900c56786 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -1,5 +1,5 @@ /datum/species/plasmaman - name = "\improper Plasmaman" + name = "\improper Phorid" id = SPECIES_PLASMAMAN sexes = 0 meat = /obj/item/stack/sheet/mineral/plasma diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index d59e3f77781e..62098a940937 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -18,7 +18,7 @@ var/virtual_z = virtual_z() - LAZYADDASSOC(SSmobs.players_by_virtual_z, "[virtual_z]", src) + LAZYADDASSOCLIST(SSmobs.players_by_virtual_z, "[virtual_z]", src) SSidlenpcpool.try_wakeup_virtual_z(virtual_z) //Vents diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index daa987904737..cfd7d9153c8d 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -1063,3 +1063,4 @@ ghostize(1) QDEL_NULL(src) + diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index efa813ec34c4..9fd90009cab6 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -756,7 +756,7 @@ r_pocket = pickweight(list( /obj/item/reagent_containers/hypospray/medipen/stimpack = 1, /obj/item/kitchen/knife/letter_opener = 3, - /obj/item/radio/off = 3, + /obj/item/radio = 3, /obj/item/grenade/syndieminibomb/concussion = 1, /obj/item/melee/transforming/energy/ctf/solgov = 1 ) @@ -765,7 +765,7 @@ l_pocket = pickweight(list( /obj/item/reagent_containers/hypospray/medipen/stimpack = 1, /obj/item/kitchen/knife/letter_opener = 3, - /obj/item/radio/off = 3, + /obj/item/radio = 3, /obj/item/grenade/syndieminibomb/concussion = 1, /obj/item/melee/transforming/energy/ctf/solgov = 1 ) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index e4ead25880f9..3670e14a6405 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -636,7 +636,7 @@ switch(togglestatus) if(AI_Z_OFF) - LAZYADDASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src) + LAZYADDASSOCLIST(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src) else LAZYREMOVEASSOC(SSidlenpcpool.idle_mobs_by_virtual_level, virt_z, src) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 8eb5bc620722..d60755693489 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -478,11 +478,11 @@ for(var/listed_type in slowdown_type) if(ispath(listed_type)) listed_type = "[listed_type]" //Path2String - LAZYADDASSOC(movespeed_mod_immunities, listed_type, source) + LAZYADDASSOCLIST(movespeed_mod_immunities, listed_type, source) else if(ispath(slowdown_type)) slowdown_type = "[slowdown_type]" //Path2String - LAZYADDASSOC(movespeed_mod_immunities, slowdown_type, source) + LAZYADDASSOCLIST(movespeed_mod_immunities, slowdown_type, source) if(update) update_movespeed() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index d475891fc28f..131e3f971113 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -204,27 +204,34 @@ if(self_message) hearers -= src - var/raw_msg = message - if(visible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" - for(var/mob/M in hearers) if(!M.client) continue - //This entire if/else chain could be in two lines but isn't for readibilties sake. var/msg = message + + //This entire if/else chain could be in two lines but isn't for readibilties sake. if(M.see_invisible < invisibility)//if src is invisible to M msg = blind_message else if(T != loc && T != src) //if src is inside something and not a turf. msg = blind_message else if(T.lighting_object && T.lighting_object.invisibility <= M.see_invisible && T.is_softly_lit()) //if it is too dark. msg = blind_message + else if(visible_message_flags & EMOTE_MESSAGE) + var/shown_name = name + if(M.mind?.guestbook && ishuman(src)) + var/mob/living/carbon/human/human_source = src + var/known_name = M.mind.guestbook.get_known_name(M, src, human_source.get_face_name()) + if(known_name) + shown_name = known_name + + msg = "[shown_name][separation][message]" + if(!msg) continue if(visible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, visible_message_flags)) - M.create_chat_message(src, raw_message = raw_msg, runechat_flags = visible_message_flags) + M.create_chat_message(src, raw_message = message, runechat_flags = visible_message_flags) M.show_message(msg, MSG_VISUAL, blind_message, MSG_AUDIBLE) @@ -250,12 +257,24 @@ if(self_message) hearers -= src var/raw_msg = message - if(audible_message_flags & EMOTE_MESSAGE) - message = "[src][separation][message]" for(var/mob/M in hearers) - if(audible_message_flags & EMOTE_MESSAGE && runechat_prefs_check(M, audible_message_flags)) - M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) - M.show_message(message, MSG_AUDIBLE, deaf_message, MSG_VISUAL) + var/msg = raw_msg + + //emote handling + if(audible_message_flags & EMOTE_MESSAGE) + var/shown_name = name + if(M.mind?.guestbook && ishuman(src)) + var/mob/living/carbon/human/human_source = src + var/known_name = M.mind.guestbook.get_known_name(M, src, human_source.GetVoice()) + if(known_name) + shown_name = known_name + + msg = "[shown_name][separation][message]" + + if(runechat_prefs_check(M, audible_message_flags) && M.can_hear()) + M.create_chat_message(src, raw_message = raw_msg, runechat_flags = audible_message_flags) + + M.show_message(msg, MSG_AUDIBLE, deaf_message, MSG_VISUAL) /** * Show a message to all mobs in earshot of this one @@ -565,6 +584,15 @@ var/msg = "[src] makes eye contact with you." addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(to_chat), examined_mob, msg), 3) +/** + * Called by using Activate Held Object with an empty hand/limb + * + * Does nothing by default. The intended use is to allow limbs to call their + * own attack_self procs. It is up to the individual mob to override this + * parent and actually use it. + */ +/mob/proc/limb_attack_self() + return ///Can this mob resist (default FALSE) /mob/proc/can_resist() @@ -622,6 +650,8 @@ if(I) I.attack_self(src) update_inv_hands() + return + limb_attack_self() /mob/verb/do_unique_action() set name = "Do Unique Action" @@ -670,6 +700,24 @@ else to_chat(src, "You don't have a mind datum for some reason, so you can't add a note to it.") +///Shows guestbook tgui window +/mob/verb/guestbook() + set name = "Guestbook" + set category = "IC" + set desc = "View your character's Guestbook." + // the reason why there are two observer checks in here is because the mind datum sometimes carries over to ghosts. + // this is something i should probably fix instead of adding a fallback check, but... + if(isobserver(src)) + to_chat(src, span_warning("You have to be in the current round to do that!")) + return + if(!mind) + var/fail_message = "You have no mind!" + if(isobserver(src)) + fail_message += " You have to be in the current round at some point to have one." + to_chat(src, span_warning(fail_message)) + return + mind.guestbook.ui_interact(usr) + /** * Allows you to respawn, abandoning your current mob * diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index b10e25c84e7a..c858582af6a3 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -17,3 +17,4 @@ /datum/movespeed_modifier/berserk multiplicative_slowdown = -0.2 + diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index 69591c71dc8e..dcc62aad7424 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -35,6 +35,9 @@ /// The turf used as the backup baseturf for any reservations created by this datum. Should not be null. var/turf/default_baseturf = /turf/open/space + ///The default gravity the virtual z will have + var/gravity = 0 + ///The weather the virtual z will have. If null, the planet will have no weather. var/datum/weather_controller/weather_controller_type @@ -139,6 +142,7 @@ token.color = planet.color ruin_type = planet.ruin_type default_baseturf = planet.default_baseturf + gravity = planet.gravity mapgen = planet.mapgen weather_controller_type = planet.weather_controller_type landing_sound = planet.landing_sound diff --git a/code/modules/overmap/objects/outpost/outpost.dm b/code/modules/overmap/objects/outpost/outpost.dm index 774057b68a08..0e4c385651ee 100644 --- a/code/modules/overmap/objects/outpost/outpost.dm +++ b/code/modules/overmap/objects/outpost/outpost.dm @@ -24,10 +24,12 @@ // NOTE: "planetary" outposts should use baseturf specification and possibly different ztrait sun type, for both hangars and main level. var/list/main_level_ztraits = list( ZTRAIT_STATION = TRUE, - ZTRAIT_SUN_TYPE = AZIMUTH + ZTRAIT_SUN_TYPE = AZIMUTH, + ZTRAIT_GRAVITY = STANDARD_GRAVITY ) var/list/hangar_ztraits = list( - ZTRAIT_SUN_TYPE = STATIC_EXPOSED + ZTRAIT_SUN_TYPE = STATIC_EXPOSED, + ZTRAIT_GRAVITY = STANDARD_GRAVITY ) /// The mapzone used by the outpost level and hangars. Using a single mapzone means networked radio messages. diff --git a/code/modules/overmap/planets/planet_types.dm b/code/modules/overmap/planets/planet_types.dm index 2152d4efe5ef..74ea0165b357 100644 --- a/code/modules/overmap/planets/planet_types.dm +++ b/code/modules/overmap/planets/planet_types.dm @@ -5,6 +5,7 @@ var/ruin_type = null var/mapgen = null var/default_baseturf = null + var/gravity = 0 var/weather_controller_type = null var/icon_state = "globe" var/color = "#ffffff" @@ -20,6 +21,7 @@ color = COLOR_ORANGE mapgen = /datum/map_generator/planet_generator/lava default_baseturf = /turf/open/floor/plating/asteroid/basalt/lava + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/lavaland ruin_type = RUINTYPE_LAVA landing_sound = 'sound/effects/planet_landing_2.ogg' @@ -33,6 +35,7 @@ color = COLOR_BLUE_LIGHT mapgen = /datum/map_generator/planet_generator/snow default_baseturf = /turf/open/floor/plating/asteroid/snow/icemoon + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/snow_planet ruin_type = RUINTYPE_ICE landing_sound = 'sound/effects/planet_landing_2.ogg' @@ -45,6 +48,7 @@ color = COLOR_LIME mapgen = /datum/map_generator/planet_generator/jungle default_baseturf = /turf/open/floor/plating/dirt/jungle + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_JUNGLE landing_sound = 'sound/effects/planet_landing_1.ogg' @@ -57,6 +61,7 @@ color = "#bd1313" mapgen = /datum/map_generator/planet_generator/rock default_baseturf = /turf/open/floor/plating/asteroid + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/rockplanet ruin_type = RUINTYPE_ROCK landing_sound = 'sound/effects/planet_landing_2.ogg' @@ -69,6 +74,7 @@ color = COLOR_GRAY mapgen = /datum/map_generator/planet_generator/sand default_baseturf = /turf/open/floor/plating/asteroid/whitesands + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/desert ruin_type = RUINTYPE_SAND landing_sound = 'sound/effects/planet_landing_2.ogg' @@ -81,6 +87,7 @@ color = "#c6b597" mapgen = /datum/map_generator/planet_generator/beach default_baseturf = /turf/open/floor/plating/asteroid/sand/lit + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/lush ruin_type = RUINTYPE_BEACH landing_sound = 'sound/effects/planet_landing_1.ogg' @@ -92,6 +99,7 @@ icon_state = "wormhole" color = COLOR_YELLOW mapgen = /datum/map_generator/single_biome/reebe + gravity = STANDARD_GRAVITY default_baseturf = /turf/open/chasm/reebe_void weather_controller_type = null weight = 0 @@ -131,6 +139,7 @@ color = "#a9883e" mapgen = /datum/map_generator/planet_generator/waste default_baseturf = /turf/open/floor/plating/asteroid/wasteplanet + gravity = STANDARD_GRAVITY weather_controller_type = /datum/weather_controller/chlorine ruin_type = RUINTYPE_WASTE landing_sound = 'sound/effects/planet_landing_2.ogg' @@ -142,6 +151,7 @@ icon_state = "globe" color = COLOR_DARK_MODERATE_ORANGE mapgen = /datum/map_generator/single_biome/gas_giant + gravity = GAS_GIANT_GRAVITY default_baseturf = /turf/open/chasm/gas_giant weather_controller_type = null ruin_type = null //it's a Gas Giant. Not Cloud fuckin City @@ -155,6 +165,7 @@ planet = DYNAMIC_WORLD_PLASMA_GIANT color = COLOR_PURPLE mapgen = /datum/map_generator/single_biome/plasma_giant + gravity = GAS_GIANT_GRAVITY default_baseturf = /turf/open/chasm/gas_giant/plasma weight = 0 icon_state = "globe" diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm index 8174a3e365f4..b87d3efda187 100644 --- a/code/modules/overmap/ships/controlled_ship_datum.dm +++ b/code/modules/overmap/ships/controlled_ship_datum.dm @@ -307,6 +307,25 @@ job_holder_refs[human_job] = list() job_holder_refs[human_job] += WEAKREF(H) +/** + * adds a mob's real name to a crew's guestbooks + * + * * H - human mob to add to the crew's guestbooks + */ +/datum/overmap/ship/controlled/proc/add_mob_to_crew_guestbook(mob/living/carbon/human/H) + // iterate over the human list to find crewmembers + for(var/mob/living/carbon/human/crewmember as anything in GLOB.human_list) + if(crewmember == H) + continue + if(!(crewmember.real_name in manifest)) + continue + if(!crewmember.mind?.guestbook) + continue + + // add the mob to the crewmember's guestbook and viceversa + crewmember.mind.guestbook.add_guest(crewmember, H, H.real_name, H.real_name, TRUE) + H.mind.guestbook.add_guest(H, crewmember, crewmember.real_name, crewmember.real_name, TRUE) + /datum/overmap/ship/controlled/proc/set_owner_mob(mob/new_owner) if(owner_mob) // we (hopefully) don't have to hook qdeletion, diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index cb5a025da475..bce7a3f322c5 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -308,27 +308,34 @@ update_icon() return TRUE if("send_special") - var/obj/item/paper/fax_paper = loaded_item_ref?.resolve() - if(!fax_paper) + var/obj/item/loaded = loaded_item_ref?.resolve() + var/obj/thing_to_send + if(!loaded) return - if(!istype(fax_paper)) + if(istype(loaded, /obj/item/paper)) + var/obj/item/paper/fax_paper = loaded + fax_paper.request_state = TRUE + thing_to_send = fax_paper + else if(istype(loaded, /obj/item/photo)) + thing_to_send = loaded + else to_chat(usr, icon2html(src.icon, usr) + "ERROR: Failed to send fax.") return - fax_paper.request_state = TRUE - fax_paper.loc = null - - INVOKE_ASYNC(src, PROC_REF(animate_object_travel), fax_paper, "fax_receive", find_overlay_state(fax_paper, "send")) + if(!thing_to_send) + return + thing_to_send.loc = null + INVOKE_ASYNC(src, PROC_REF(animate_object_travel), thing_to_send, "fax_receive", find_overlay_state(thing_to_send, "send")) history_add("Send", params["name"]) - GLOB.requests.fax_request(usr.client, "sent a fax message from [fax_name]/[fax_id] to [params["name"]]", fax_paper) - to_chat(GLOB.admins, "[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])] [ADMIN_SHOW_PAPER(fax_paper)]") - log_fax(fax_paper, params["id"], params["name"]) + GLOB.requests.fax_request(usr.client, "sent a fax message from [fax_name]/[fax_id] to [params["name"]]", thing_to_send) + to_chat(GLOB.admins, "[icon2html(src.icon, GLOB.admins)]FAX REQUEST: [ADMIN_FULLMONTY(usr)]: sent a fax message from [fax_name]/[fax_id][ADMIN_FLW(src)] to [html_encode(params["name"])] [istype(thing_to_send, /obj/item/paper) ? ADMIN_SHOW_PAPER(thing_to_send) : ADMIN_SHOW_PHOTO(thing_to_send)]") + log_fax(thing_to_send, params["id"], params["name"]) loaded_item_ref = null for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) if(fax.admin_fax_id == params["id"]) - fax.receive(fax_paper, fax_name) + fax.receive(thing_to_send, fax_name) break update_appearance() @@ -360,7 +367,7 @@ * * loaded - The object to be sent. * * id - The network ID of the fax machine you want to send the item to. */ -/obj/machinery/fax/proc/send(obj/item/loaded, id) +/obj/machinery/fax/proc/send(atom/movable/loaded, id) for(var/obj/machinery/fax/fax as anything in GLOB.fax_machines) if(fax.fax_id != id) continue @@ -385,7 +392,7 @@ * * loaded - The object to be printed. * * sender_name - The sender's name, which will be displayed in the message and recorded in the history of operations. */ -/obj/machinery/fax/proc/receive(obj/item/loaded, sender_name, important = FALSE) +/obj/machinery/fax/proc/receive(atom/movable/loaded, sender_name, important = FALSE) playsound(src, 'sound/items/poster_being_created.ogg', 20, FALSE) INVOKE_ASYNC(src, PROC_REF(animate_object_travel), loaded, "fax_receive", find_overlay_state(loaded, "receive")) say("Received correspondence from [sender_name].") @@ -442,7 +449,7 @@ * Arguments: * * vend - Item to vend from the fax machine. */ -/obj/machinery/fax/proc/vend_item(obj/item/vend) +/obj/machinery/fax/proc/vend_item(atom/movable/vend) vend.forceMove(drop_location()) if(hurl_contents) vend.throw_at(get_edge_target_turf(drop_location(), pick(GLOB.alldirs)), rand(1, 4), EMBED_THROWSPEED_THRESHOLD) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 1e4660c48953..a6020d0fae11 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -1,4 +1,3 @@ - // // Gravity Generator // diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index c524ffd36516..5cd55858537a 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -1,21 +1,6 @@ #define DUALWIELD_PENALTY_EXTRA_MULTIPLIER 1.6 -#define MANUFACTURER_NONE null -#define MANUFACTURER_SHARPLITE "the Sharplite Defense logo" -#define MANUFACTURER_SHARPLITE_NEW "the Nanotrasen-Sharplite logo" -#define MANUFACTURER_HUNTERSPRIDE "the Hunter's Pride Arms and Ammunition logo" -#define MANUFACTURER_SOLARARMORIES "the Solarbundswaffenkammer emblem" -#define MANUFACTURER_SCARBOROUGH "the Scarborough Arms logo" -#define MANUFACTURER_EOEHOMA "the Eoehoma Firearms emblem" -#define MANUFACTURER_NANOTRASEN_OLD "an outdated Nanotrasen logo" -#define MANUFACTURER_NANOTRASEN "the Nanotrasen logo" -#define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" -#define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" -#define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" -#define MANUFACTURER_DONKCO "the Donk! Co. logo" -#define MANUFACTURER_PGF "the Etherbor Industries emblem" -#define MANUFACTURER_IMPORT "Lanchester Import Co." /obj/item/gun name = "gun" desc = "It's a gun. It's pretty terrible, though." @@ -665,6 +650,9 @@ safety_overlay.icon_state = "[safety_wording]-off" . += safety_overlay +#define BRAINS_BLOWN_THROW_RANGE 2 +#define BRAINS_BLOWN_THROW_SPEED 1 + /obj/item/gun/proc/handle_suicide(mob/living/carbon/human/user, mob/living/carbon/human/target, params, bypass_timer) if(!ishuman(user) || !ishuman(target)) return @@ -672,32 +660,58 @@ if(semicd) return + if(!can_shoot()) //Just because you can pull the trigger doesn't mean it can shoot. + shoot_with_empty_chamber(user) + return + if(user == target) - target.visible_message("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger...", \ - "You stick [src] in your mouth, ready to pull the trigger...") + target.visible_message(span_warning("[user] sticks [src] in [user.p_their()] mouth, ready to pull the trigger..."), \ + span_userdanger("You stick [src] in your mouth, ready to pull the trigger...")) else - target.visible_message("[user] points [src] at [target]'s head, ready to pull the trigger...", \ - "[user] points [src] at your head, ready to pull the trigger...") + target.visible_message(span_warning("[user] points [src] at [target]'s head, ready to pull the trigger..."), \ + span_userdanger("[user] points [src] at your head, ready to pull the trigger...")) semicd = TRUE - if(!bypass_timer && (!do_mob(user, target, 120) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) + if(!bypass_timer && (!do_mob(user, target, 100) || user.zone_selected != BODY_ZONE_PRECISE_MOUTH)) if(user) if(user == target) - user.visible_message("[user] decided not to shoot.") + user.visible_message(span_notice("[user] decided not to shoot.")) else if(target && target.Adjacent(user)) - target.visible_message("[user] has decided to spare [target]", "[user] has decided to spare your life!") + target.visible_message(span_notice("[user] has decided to spare [target]."), span_notice("[user] has decided to spare your life!")) semicd = FALSE return semicd = FALSE - target.visible_message("[user] pulls the trigger!", "[(user == target) ? "You pull" : "[user] pulls"] the trigger!") + target.visible_message(span_warning("[user] pulls the trigger!"), span_userdanger("[(user == target) ? "You pull" : "[user] pulls"] the trigger!")) - if(chambered && chambered.BB) - chambered.BB.damage *= 5 + if(chambered && chambered.BB && can_trigger_gun(user)) + chambered.BB.damage *= 3 + //Check is here for safeties and such, brain will be removed after + process_fire(target, user, TRUE, params, BODY_ZONE_HEAD) + + var/obj/item/organ/brain/brain_to_blast = target.getorganslot(ORGAN_SLOT_BRAIN) + if(brain_to_blast) + + //Check if the projectile is actually damaging and not of type STAMINA + if(chambered.BB.nodamage || !chambered.BB.damage || chambered.BB.damage_type == STAMINA) + return + + //Remove brain of the mob shot + brain_to_blast.Remove(target) + + var/turf/splat_turf = get_turf(target) + //Move the brain of the person shot to selected turf + brain_to_blast.forceMove(splat_turf) + + var/turf/splat_target = get_ranged_target_turf(target, REVERSE_DIR(target.dir), BRAINS_BLOWN_THROW_RANGE) + var/datum/callback/gibspawner = CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(spawn_atom_to_turf), /obj/effect/gibspawner/generic, brain_to_blast, 1, FALSE, target) + //Throw the brain that has been removed away and place a gibspawner on landing + brain_to_blast.throw_at(splat_target, BRAINS_BLOWN_THROW_RANGE, BRAINS_BLOWN_THROW_SPEED, callback = gibspawner) - process_fire(target, user, TRUE, params, BODY_ZONE_HEAD) +#undef BRAINS_BLOWN_THROW_RANGE +#undef BRAINS_BLOWN_THROW_SPEED //Happens before the actual projectile creation /obj/item/gun/proc/before_firing(atom/target,mob/user) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7cc9b1c6ebb4..06698ca53982 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -133,7 +133,7 @@ var/homing_offset_y = 0 var/damage = 10 - var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here + var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, STAMINA are the only things that should be in here var/nodamage = FALSE //Determines if the projectile will skip any damage inflictions var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb ///How much armor this projectile pierces. @@ -209,7 +209,11 @@ SEND_SIGNAL(fired_from, COMSIG_PROJECTILE_ON_HIT, firer, target, Angle) // i know that this is probably more with wands and gun mods in mind, but it's a bit silly that the projectile on_hit signal doesn't ping the projectile itself. // maybe we care what the projectile thinks! See about combining these via args some time when it's not 5AM - SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle) + var/obj/item/bodypart/hit_limb + if(isliving(target)) + var/mob/living/L = target + hit_limb = L.check_limb_hit(def_zone) + SEND_SIGNAL(src, COMSIG_PROJECTILE_SELF_ON_HIT, firer, target, Angle, hit_limb) var/turf/target_loca = get_turf(target) var/hitx @@ -259,7 +263,7 @@ new impact_effect_type(target_loca, hitx, hity) var/organ_hit_text = "" - var/limb_hit = L.check_limb_hit(def_zone)//to get the correct message info. + var/limb_hit = hit_limb if(limb_hit) organ_hit_text = " in \the [parse_zone(limb_hit)]" if(suppressed==SUPPRESSED_VERY) diff --git a/code/modules/projectiles/projectile/energy/misc.dm b/code/modules/projectiles/projectile/energy/misc.dm index 81fed69d516a..11f948ddb415 100644 --- a/code/modules/projectiles/projectile/energy/misc.dm +++ b/code/modules/projectiles/projectile/energy/misc.dm @@ -23,3 +23,22 @@ icon_state = "pulse1" damage = 0 damage_type = BURN + +/obj/projectile/energy/plasmabolt + name = "ionized plasma" + damage = 25 + armour_penetration = -10 + range = 8 + damage_type = BURN + icon_state = "blastwave" + color = "#00ff00" + hitsound = 'sound/weapons/sear.ogg' + +/obj/projectile/energy/plasmabolt/on_hit(atom/target, blocked = FALSE) + . = ..() + if(iscarbon(target)) + var/mob/living/carbon/M = target + M.adjust_bodytemperature(350) + if(prob(35)) + M.adjust_fire_stacks(15) + M.IgniteMob() diff --git a/code/modules/reagents/reagent_containers/blood_pack.dm b/code/modules/reagents/reagent_containers/blood_pack.dm index d72389224fd9..6c5691f83f73 100644 --- a/code/modules/reagents/reagent_containers/blood_pack.dm +++ b/code/modules/reagents/reagent_containers/blood_pack.dm @@ -38,7 +38,7 @@ /obj/item/reagent_containers/blood/random/Initialize() icon_state = "bloodpack" - blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L") + blood_type = pick("A+", "A-", "B+", "B-", "O+", "O-", "L", "E", "Coolant") return ..() /obj/item/reagent_containers/blood/APlus diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index f580502e0b7a..7c43c3fc5acb 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -647,7 +647,7 @@ id = "bounced_radio" build_type = AUTOLATHE materials = list(/datum/material/iron = 75, /datum/material/glass = 25) - build_path = /obj/item/radio/off + build_path = /obj/item/radio category = list("initial", "T-Comm") /datum/design/intercom_frame diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 3cf848089652..e12db8a59738 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -247,7 +247,6 @@ build_path = /obj/item/circuitboard/machine/rdserver category = list("Research Machinery", "initial", "Equipment") - /datum/design/board/mechfab name = "Machine Design (Exosuit Fabricator Board)" desc = "The circuit board for an Exosuit Fabricator." @@ -471,6 +470,14 @@ category = list ("Misc. Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE +/datum/design/board/ship_gravity + name = "Machine Design (Ship Gravity Generator Board)" + desc = "The circuit board for a ship-sized gravity generator." + id = "ship_gravity" + build_type = AUTOLATHE | IMPRINTER + build_path = /obj/item/circuitboard/machine/ship_gravity + category = list("Misc. Machinery", "initial", "Equipment") + /datum/design/board/ntnet_relay name = "Machine Design (NTNet Relay Board)" desc = "The circuit board for a wireless network relay." diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 8bfe1f7e9bd8..14a7497728a9 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -318,6 +318,9 @@ ///A list of all engines currently linked to the shuttle. var/list/engine_list = list() + ///A list of all gravity generators currently linked to the shuttle. + var/list/gravgen_list = list() + ///if this shuttle can move docking ports other than the one it is docked at var/can_move_docking_ports = TRUE diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index d9d3d6b0b717..5d6fac852d51 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -13,6 +13,10 @@ var/list/items_list = list()// I would use contents, but they shuffle on every activation/deactivation leading to interface inconsistencies. /// You can use this var for item path, it would be converted into an item on New(). var/obj/item/active_item + /// Sound played when extending + var/extend_sound = 'sound/mecha/mechmove03.ogg' + /// Sound played when retracting + var/retract_sound = 'sound/mecha/mechmove03.ogg' /obj/item/organ/cyberimp/arm/Initialize() . = ..() @@ -68,18 +72,34 @@ to_chat(user, "You modify [src] to be installed on the [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.") update_appearance() +/obj/item/organ/cyberimp/arm/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) + . = ..() + var/side = zone == BODY_ZONE_R_ARM? RIGHT_HANDS : LEFT_HANDS + hand = owner.hand_bodyparts[side] + if(hand) + RegisterSignal(hand, COMSIG_ITEM_ATTACK_SELF, PROC_REF(ui_action_click)) //If the limb gets an attack-self, open the menu. Only happens when hand is empty + RegisterSignal(M, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) //We're nodrop, but we'll watch for the drop hotkey anyway and then stow if possible. + /obj/item/organ/cyberimp/arm/Remove(mob/living/carbon/M, special = 0) Retract() + if(hand) + UnregisterSignal(hand, COMSIG_ITEM_ATTACK_SELF) + UnregisterSignal(M, COMSIG_KB_MOB_DROPITEM_DOWN) ..() -/obj/item/organ/cyberimp/arm/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(15/severity) && owner) - to_chat(owner, "[src] is hit by EMP!") - // give the owner an idea about why his implant is glitching - Retract() +/** + * Called when the mob uses the "drop item" hotkey + * + * Items inside toolset implants have TRAIT_NODROP, but we can still use the drop item hotkey as a + * quick way to store implant items. In this case, we check to make sure the user has the correct arm + * selected, and that the item is actually owned by us, and then we'll hand off the rest to Retract() +**/ +/obj/item/organ/cyberimp/arm/proc/dropkey(mob/living/carbon/host) + if(!host) + return //How did we even get here + if(hand != host.hand_bodyparts[host.active_hand_index]) + return //wrong hand + Retract() /obj/item/organ/cyberimp/arm/proc/Retract() if(!active_item || (active_item in src)) @@ -89,13 +109,9 @@ "[active_item] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") - if(istype(active_item, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = active_item - F.set_light(0) - owner.transferItemToLoc(active_item, src, TRUE) + playsound(get_turf(owner), retract_sound, 50, TRUE) active_item = null - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, TRUE) /obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item) if(!(item in src)) @@ -135,7 +151,7 @@ owner.visible_message("[owner] extends [active_item] from [owner.p_their()] [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You extend [active_item] from your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") - playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, TRUE) + playsound(get_turf(owner), extend_sound, 50, TRUE) /obj/item/organ/cyberimp/arm/ui_action_click() if((organ_flags & ORGAN_FAILING) || (!active_item && !contents.len)) @@ -161,6 +177,14 @@ else Retract() +/obj/item/organ/cyberimp/arm/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + if(prob(15/severity) && owner) + to_chat(owner, "[src] is hit by EMP!") + // give the owner an idea about why his implant is glitching + Retract() /obj/item/organ/cyberimp/arm/gun/emp_act(severity) . = ..() @@ -225,7 +249,6 @@ desc = "A cybernetic implant that allows the user to project a healing beam from their hand." items_to_create = list(/obj/item/gun/medbeam) - /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." @@ -277,4 +300,4 @@ name = "power cord implant" desc = "An internal power cord hooked up to a battery. Useful if you run on volts." items_to_create = list(/obj/item/apc_powercord) - zone = "l_arm" + zone = BODY_ZONE_L_ARM diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index ae6f1cf43d39..f623bb67606b 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -2,6 +2,7 @@ /obj/item/organ/cyberimp name = "cybernetic implant" desc = "A state-of-the-art implant that improves a baseline's functionality." + icon = 'icons/obj/implants/implant.dmi' status = ORGAN_ROBOTIC organ_flags = ORGAN_SYNTHETIC var/implant_color = "#FFFFFF" @@ -17,8 +18,6 @@ add_overlay(overlay) return ..() - - //[[[[BRAIN]]]] /obj/item/organ/cyberimp/brain diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index fc5de4be3049..05ca5131e0f9 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -226,7 +226,7 @@ if(SA_pp > SA_para_min) // Enough to make us stunned for a bit H.Unconscious(60) // 60 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.Sleeping(max(H.AmountSleeping() + 40, 200)) + H.Sleeping(200) else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) H.emote(pick("giggle", "laugh")) diff --git a/html/changelogs/AutoChangeLog-pr-2696.yml b/html/changelogs/AutoChangeLog-pr-2696.yml deleted file mode 100644 index 05b6fa459451..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2696.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Martinpachu -changes: - - {bugfix: Fixes MAA on the Colossus not being able to access the bridge.} -delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-2870.yml b/html/changelogs/AutoChangeLog-pr-2870.yml deleted file mode 100644 index da114a147340..000000000000 --- a/html/changelogs/AutoChangeLog-pr-2870.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: phoaly -changes: - - {rscdel: Removed some old ships} - - {tweak: Aspawned the Lagoon and Junker} -delete-after: true diff --git a/html/changelogs/archive/2024-04.yml b/html/changelogs/archive/2024-04.yml index 4554d939d8b3..1e9898f9a4e0 100644 --- a/html/changelogs/archive/2024-04.yml +++ b/html/changelogs/archive/2024-04.yml @@ -19,3 +19,76 @@ Imaginos16, spookywastaken: - rscadd: Resprites a ton of gun magazines - bugfix: Changes how magainzes with only a empty and loaded state are +2024-04-12: + Gristlebee: + - rscadd: Punching bags can be built with 5 cloth. + - rscadd: Bench press and chest press can be built with 5 metal. + - rscadd: Exercise equipment can be deconstructed. + Martinpachu: + - bugfix: Fixes MAA on the Colossus not being able to access the bridge. + Sadhorizon: + - tweak: Random blood packs now can roll Elzu and IPC blood. + SomeguyManperson: + - bugfix: anesthetic can no longer semi permanently knock people out + Yata9ar4su: + - rscadd: Fullscreen on F11 + Zxaber: + - tweak: You can now use drop / use inhand hotkey to retract and deploy arm implants + meemofcourse: + - rscadd: Long-range bluespace technologies in fax machines now allow the faxing + of photos. I am not responsible for any consequences that might result from + sending your faction's command personnel a photo of your character's ass. + phoaly: + - rscdel: Removed some old ships + - tweak: Aspawned the Lagoon and Junker + sapphicoverload, PestoVerde322, PacifistDalek: + - rscadd: turbines now provide thrust for ships + - tweak: turbines respect conservation of energy instead of moving gas around for + free + - tweak: turbine control console now shows the internal pressure of the turbine + - code_imp: refactored how gas flows through the turbine + - bugfix: fixed turbines making free energy from nowhere at low RPM + - bugfix: fixed turbines forcing air into the output turf when it's blocked + - bugfix: fixed turbines not updating air at the input and output turfs + - bugfix: fixed turbines disconnecting when docking and undocking + - imageadd: new turbine sprites + thgvr: + - rscadd: Suicide & Execution with a damaging firearm is now more deadly and gruesome. +2024-04-13: + FalloutFalcon: + - tweak: all radios start off + - tweak: all survival boxs start with a radio + Sun-Soaked: + - rscadd: Redesigns landmines as an item that can be picked up, disarmed, deployed. + Some logic courtesy of /tg/. + - rscadd: Adds a proximity explosive variant of landmines. + - bugfix: shrapnel embedding once again respects targeted limb and no longer runtimes + on hitting a wall or destroying an object. + - bugfix: storage can no longer pick up anchored objects, causing them to get stuck + inside + - balance: Nerfs the ability of heavy explosions to immediately breach to space + - soundadd: adds two mine detonation noises + - code_imp: moves weapon manufacturer defines to a DEFINE file + generalthrax: + - rscadd: Etherbor SG-8 Beam Pistol to cargo for 1000 credits + - rscadd: Etherbor BG-12 Beam Rifle to cargo for 3000 credits + - rscadd: Etherbor civilian weapon cells for 600 credits, slightly higher capacity + than the generic cells +2024-04-17: + Gristlebee: + - tweak: Granularizes Outpost Spacesuits and Armor + - balance: Reduces the cost of specialized space suits + SomeguyManperson: + - tweak: ships no longer have intrinsic gravity + - rscadd: new gravity generator machine for ships + - tweak: planetary gravity is now stored level-wide, a ship landing at a planet + will be effected by the planet's gravity + meemofcourse: + - tweak: Identification Cards are now Access Cards. The only real difference is + that your name only shows up on a double examine. + - refactor: Anonymous mechanics. Characters no longer instantly recognize each other, + and need to properly memorize each other in order. You can recognize an unmasked + person by ctrl-shift-clicking them. +2024-04-18: + goober3: + - bugfix: Wall lockers should be facing the right way again. diff --git a/icons/effects/crayondecal.dmi b/icons/effects/crayondecal.dmi index c9e7f880c809..d18ba51ae40f 100644 Binary files a/icons/effects/crayondecal.dmi and b/icons/effects/crayondecal.dmi differ diff --git a/icons/mob/inhands/weapons/axes_lefthand.dmi b/icons/mob/inhands/weapons/axes_lefthand.dmi index 810455a611bd..3b95d17cdc78 100644 Binary files a/icons/mob/inhands/weapons/axes_lefthand.dmi and b/icons/mob/inhands/weapons/axes_lefthand.dmi differ diff --git a/icons/obj/atmospherics/components/turbine.dmi b/icons/obj/atmospherics/components/turbine.dmi new file mode 100644 index 000000000000..6e499911a75b Binary files /dev/null and b/icons/obj/atmospherics/components/turbine.dmi differ diff --git a/icons/obj/implants/implant.dmi b/icons/obj/implants/implant.dmi new file mode 100644 index 000000000000..31bd68db0caf Binary files /dev/null and b/icons/obj/implants/implant.dmi differ diff --git a/icons/obj/landmine.dmi b/icons/obj/landmine.dmi new file mode 100644 index 000000000000..dd19fd9d3991 Binary files /dev/null and b/icons/obj/landmine.dmi differ diff --git a/icons/obj/machines/ship_gravity.dmi b/icons/obj/machines/ship_gravity.dmi new file mode 100644 index 000000000000..276fcf2b6720 Binary files /dev/null and b/icons/obj/machines/ship_gravity.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index d94097ddf2e5..8f2566a98f8a 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 5136279026c1..398d5550f810 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/shiptest.dme b/shiptest.dme index b06d2f0e71a0..1a95193b0d54 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -65,6 +65,7 @@ #include "code\__DEFINES\food.dm" #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" +#include "code\__DEFINES\guns.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" #include "code\__DEFINES\important_recursive_contents.dm" @@ -403,6 +404,7 @@ #include "code\datums\emotes.dm" #include "code\datums\ert.dm" #include "code\datums\forced_movement.dm" +#include "code\datums\guestbook.dm" #include "code\datums\holocall.dm" #include "code\datums\http.dm" #include "code\datums\hud.dm" @@ -772,6 +774,7 @@ #include "code\datums\wires\explosive.dm" #include "code\datums\wires\fax.dm" #include "code\datums\wires\microwave.dm" +#include "code\datums\wires\mines.dm" #include "code\datums\wires\mulebot.dm" #include "code\datums\wires\particle_accelerator.dm" #include "code\datums\wires\r_n_d.dm" @@ -960,9 +963,11 @@ #include "code\game\machinery\porta_turret\portable_turret_construct.dm" #include "code\game\machinery\porta_turret\portable_turret_cover.dm" #include "code\game\machinery\shuttle\custom_shuttle.dm" +#include "code\game\machinery\shuttle\ship_gravity.dm" #include "code\game\machinery\shuttle\shuttle_engine.dm" #include "code\game\machinery\shuttle\shuttle_engine_types.dm" #include "code\game\machinery\shuttle\shuttle_heater.dm" +#include "code\game\machinery\shuttle\turbine.dm" #include "code\game\machinery\telecomms\broadcasting.dm" #include "code\game\machinery\telecomms\machine_interactions.dm" #include "code\game\machinery\telecomms\telecomunications.dm" @@ -1028,7 +1033,6 @@ #include "code\game\objects\effects\forcefields.dm" #include "code\game\objects\effects\glowshroom.dm" #include "code\game\objects\effects\landmarks.dm" -#include "code\game\objects\effects\mines.dm" #include "code\game\objects\effects\misc.dm" #include "code\game\objects\effects\overlays.dm" #include "code\game\objects\effects\particle_emitter.dm" @@ -1198,6 +1202,7 @@ #include "code\game\objects\items\devices\laserpointer.dm" #include "code\game\objects\items\devices\lightreplacer.dm" #include "code\game\objects\items\devices\megaphone.dm" +#include "code\game\objects\items\devices\mines.dm" #include "code\game\objects\items\devices\multitool.dm" #include "code\game\objects\items\devices\paicard.dm" #include "code\game\objects\items\devices\pipe_painter.dm" @@ -2936,7 +2941,6 @@ #include "code\modules\power\solar.dm" #include "code\modules\power\terminal.dm" #include "code\modules\power\tracker.dm" -#include "code\modules\power\turbine.dm" #include "code\modules\power\singularity\boh_tear.dm" #include "code\modules\power\singularity\collector.dm" #include "code\modules\power\singularity\containment_field.dm" diff --git a/sound/items/mine_activate.ogg b/sound/items/mine_activate.ogg new file mode 100644 index 000000000000..ed39ba283be7 Binary files /dev/null and b/sound/items/mine_activate.ogg differ diff --git a/sound/items/mine_activate_short.ogg b/sound/items/mine_activate_short.ogg new file mode 100644 index 000000000000..8c6e81a06bbe Binary files /dev/null and b/sound/items/mine_activate_short.ogg differ diff --git a/strings/ipc_preference_adjectives.txt b/strings/ipc_preference_adjectives.txt new file mode 100644 index 000000000000..a243b2d77fc5 --- /dev/null +++ b/strings/ipc_preference_adjectives.txt @@ -0,0 +1,71 @@ +Bedraggled +Brawny +Bulky +Burly +Calm +Chaotic +Charming +Delicate +Dignified +Disgusting +Disturbing +Dull +Effeminate +Elegant +Energetic +Exasperated +Exotic +Faint +Feisty +Flamboyant +Fragile +Frail +Friendly +Gentle +Hawkish +Hefty +Hobbling +Hyper +Imposing +Jaded +Lax +Lean +Limp +Lithe +Lopsided +Lovely +Mangled +Masculine +Messy +Nimble +Petite +Pompous +Pugnacious +Repulsive +Robust +Rough +Rusted +Scarred +Shifty +Sickly +Skittish +Sleek +Slender +Slovenly +Sluggish +Spacy +Stiff +Stony +Stylish +Unattractive +Unremarkable +Unsightly +Verbose +Vigorous +Waifish +Wilted +Wily +Withered +Worn-Out +Zealous +Zesty diff --git a/strings/names/moth_first.txt b/strings/names/moth_first.txt deleted file mode 100644 index cfd8a8675f91..000000000000 --- a/strings/names/moth_first.txt +++ /dev/null @@ -1,100 +0,0 @@ -Acantharctia -Acco -Acherontia -Actias -Aemilia -Aethria -Antheraea -Aphomia -Argema -Ascalapha -Asota -Athrypsiastis -Attacus -Autochloris -Axylia -Bombyx -Callosamia -Callhistia -Capricornia -Catocala -Cheliosea -Chloroclystis -Cochylimorpha -Cryphia -Cryptophasa -Cucullia -Cydia -Diarsia -Diaphora -Dolichohedya -Dyspyralis -Eacles -Eclipsea -Electresia -Elysius -Enarmonia -Eriomastyx -Epiphyas -Eugnorisma -Eupithecia -Euplexia -Eurosia -Falcatula -Fangarctia -Fulcrifera -Glyphidoptera -Gracillina -Gravitarmata -Haemanota -Halysidota -Helicoverpa -Heliomata -Hyalophora -Hypomartyria -Icelita -Isanthrene -Isochorista -Izatha -Kodiosoma -Lacida -Leguminivora -Leucoptera -Lymantria -Macrobathra -Maruca -Mecodina -Megalonycta -Metacrisia -Mythimna -Naenia -Naenia -Neuroxena -Nodaria -Nymphicula -Obscurior -Ochropleura -Opodiphthera -Ostrinia -Pacificulla -Philomusaea -Phragmataecia -Plodia -Plutella -Rachiplusia -Sarobela -Selenarctia -Shiragasane -Sphingidae -Socioplana -Spodoptera -Syllomatia -Thaumetopoea -Timandra -Toxoproctis -Uranophora -Vestura -Vietteria -Xanthorhoe -Xestia -Zomaria diff --git a/strings/names/moth_last.txt b/strings/names/moth_last.txt deleted file mode 100644 index 4d6ec130c41e..000000000000 --- a/strings/names/moth_last.txt +++ /dev/null @@ -1,57 +0,0 @@ -Accurata -Adultera -Albipuncta -Albostriata -Albovenosa -Argentea -Bicolorata -Bifasciata -Cameroni -Chiangmai -Combinata -Convecta -Cuneilinea -Curvata -Dentata -Empyrea -Eucrossa -Ferrilinea -Fraterna -Goniosigma -Hamifera -Hirashimai -Hypophaea -Ignita -Impura -Insularis -Infrargyrea -Intermediata -Intolerabilis -Laevusta -Languida -Liebherri -Lineatipes -Lucida -Maxima -Mediana -Modesta -Monticola -Naumanni -Nepalina -Obscura -Osseogrisea -Pastellina -Phlebitis -Pyrausta -Radiata -Riparia -Rufulosa -Semicana -Separata -Siamensis -Simplex -Toumodi -Undicilia -Uruma -Vittata -Yuennana diff --git a/strings/preference_adjectives.txt b/strings/preference_adjectives.txt new file mode 100644 index 000000000000..0d67f16803f8 --- /dev/null +++ b/strings/preference_adjectives.txt @@ -0,0 +1,117 @@ +Angsty +Awkward +Bedraggled +Blemished +Bony +Brawny +Breathtaking +Bruised +Bulky +Burly +Calm +Chaotic +Charming +Chubby +Coarse +Deformed +Delicate +Despondent +Dignified +Disgusting +Disturbing +Dull +Effeminate +Elegant +Emaciated +Energetic +Energetic +Exasperated +Exotic +Faint +Feisty +Flabby +Flamboyant +Fragile +Frail +Frazzled +Friendly +Gap-toothed +Gaunt +Gentle +Gloomy +Gormless +Hawkish +Hawkish +Healthy +Hefty +Hobbling +Hyper +Imposing +Inscrutable +Jaded +Lax +Lean +Limp +Lithe +Lopsided +Lovely +Malnourished +Mangled +Mangled +Masculine +Messy +Muscular +Nimble +Pathetic +Peppy +Petite +Pompous +Pugnacious +Quievering +Radical +Repulsive +Robust +Roguish +Rough +Scarred +Scrawny +Sculpted +Shifty +Shrewd +Sickly +Skittish +Sleek +Sleepy +Slender +Slimy +Slovenly +Sluggish +Sly +Smooth +Sniveling +Soulrendered +Spacy +Stiff +Stony +Stout +Strapping +Sturdy +Stylish +Swarthy +Tense +Tubular +Unattractive +Unblemished +Unhealthy +Unremarkable +Unsightly +Verbose +Vigorous +Waifish +Wilted +Wily +Withered +Worn-Out +Wrinkly +Zealous +Zesty diff --git a/tgui/packages/tgui/interfaces/Guestbook.tsx b/tgui/packages/tgui/interfaces/Guestbook.tsx new file mode 100644 index 000000000000..d1fb09aa8499 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Guestbook.tsx @@ -0,0 +1,74 @@ +import { useBackend } from '../backend'; +import { useLocalState } from '../backend'; +import { Stack, Button, Input, Section, Box } from '../components'; +import { Window } from '../layouts'; + +type Info = { + names: NameData[]; +}; + +type NameData = { + real_name: string; + given_name: string; +}; + +export const Guestbook = (props, context) => { + const { act, data } = useBackend(context); + const { names = [] } = data; + + const [lastNameBeforeEdit, setLastNameBeforeEdit] = useLocalState< + string | null + >(context, 'lastNameBeforeEdit', null); + + return ( + + + {(!names.length &&
{'No known names!'}
) || ( + + {names.map((name) => ( + +
+ + +
+
+ ))} +
+ )} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/TurbineComputer.js b/tgui/packages/tgui/interfaces/TurbineComputer.js index f11eb9880728..f8c9e2677ff3 100644 --- a/tgui/packages/tgui/interfaces/TurbineComputer.js +++ b/tgui/packages/tgui/interfaces/TurbineComputer.js @@ -1,5 +1,6 @@ import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; +import { formatSiUnit } from '../format'; import { Window } from '../layouts'; export const TurbineComputer = (props, context) => { @@ -11,7 +12,7 @@ export const TurbineComputer = (props, context) => { !data.turbine_broke ); return ( - +
{ {data.temp} K + + {formatSiUnit(data.pressure * 1000, 1, 'Pa')} + {data.power} diff --git a/tools/UpdatePaths/Scripts/2883_wall_lockers.txt b/tools/UpdatePaths/Scripts/2883_wall_lockers.txt new file mode 100644 index 000000000000..403deb69f119 --- /dev/null +++ b/tools/UpdatePaths/Scripts/2883_wall_lockers.txt @@ -0,0 +1,71 @@ +/obj/structure/closet/wall {dir=@UNSET} : /obj/structure/closet/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall {dir=1} : /obj/structure/closet/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall {dir=2} : /obj/structure/closet/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall {dir=4} : /obj/structure/closet/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall {dir=8} : /obj/structure/closet/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/blue {dir=@UNSET} : /obj/structure/closet/wall/blue/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/blue {dir=1} : /obj/structure/closet/wall/blue/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/blue {dir=2} : /obj/structure/closet/wall/blue/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/blue {dir=4} : /obj/structure/closet/wall/blue/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/blue {dir=8} : /obj/structure/closet/wall/blue/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/chem {dir=@UNSET} : /obj/structure/closet/wall/chem/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/chem {dir=1} : /obj/structure/closet/wall/chem/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/chem {dir=2} : /obj/structure/closet/wall/chem/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/chem {dir=4} : /obj/structure/closet/wall/chem/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/chem {dir=8} : /obj/structure/closet/wall/chem/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/med {dir=@UNSET} : /obj/structure/closet/wall/med/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/med {dir=1} : /obj/structure/closet/wall/med/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/med {dir=2} : /obj/structure/closet/wall/med/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/med {dir=4} : /obj/structure/closet/wall/med/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/med {dir=8} : /obj/structure/closet/wall/med/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/orange {dir=@UNSET} : /obj/structure/closet/wall/orange/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/orange {dir=1} : /obj/structure/closet/wall/orange/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/orange {dir=2} : /obj/structure/closet/wall/orange/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/orange {dir=4} : /obj/structure/closet/wall/orange/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/orange {dir=8} : /obj/structure/closet/wall/orange/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/red {dir=@UNSET} : /obj/structure/closet/wall/red/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/red {dir=1} : /obj/structure/closet/wall/red/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/red {dir=2} : /obj/structure/closet/wall/red/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/red {dir=4} : /obj/structure/closet/wall/red/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/red {dir=8} : /obj/structure/closet/wall/red/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/wall/white {dir=@UNSET} : /obj/structure/closet/wall/white/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/white {dir=1} : /obj/structure/closet/wall/white/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/white {dir=2} : /obj/structure/closet/wall/white/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/white {dir=4} : /obj/structure/closet/wall/white/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/wall/white {dir=8} : /obj/structure/closet/wall/white/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/emcloset/wall {dir=@UNSET} : /obj/structure/closet/emcloset/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/emcloset/wall {dir=1} : /obj/structure/closet/emcloset/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/emcloset/wall {dir=2} : /obj/structure/closet/emcloset/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/emcloset/wall {dir=4} : /obj/structure/closet/emcloset/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/emcloset/wall {dir=8} : /obj/structure/closet/emcloset/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/firecloset/wall {dir=@UNSET} : /obj/structure/closet/firecloset/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/firecloset/wall {dir=1} : /obj/structure/closet/firecloset/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/firecloset/wall {dir=2} : /obj/structure/closet/firecloset/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/firecloset/wall {dir=4} : /obj/structure/closet/firecloset/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/firecloset/wall {dir=8} : /obj/structure/closet/firecloset/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/secure_closet/wall {dir=@UNSET} : /obj/structure/closet/secure_closet/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/wall {dir=1} : /obj/structure/closet/secure_closet/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/wall {dir=2} : /obj/structure/closet/secure_closet/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/wall {dir=4} : /obj/structure/closet/secure_closet/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/wall {dir=8} : /obj/structure/closet/secure_closet/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/secure_closet/brig/wall {dir=@UNSET} : /obj/structure/closet/secure_closet/brig/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/brig/wall {dir=1} : /obj/structure/closet/secure_closet/brig/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/brig/wall {dir=2} : /obj/structure/closet/secure_closet/brig/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/brig/wall {dir=4} : /obj/structure/closet/secure_closet/brig/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/brig/wall {dir=8} : /obj/structure/closet/secure_closet/brig/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} + +/obj/structure/closet/secure_closet/freezer/wall {dir=@UNSET} : /obj/structure/closet/secure_closet/freezer/wall/directional/north {@OLD;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/freezer/wall {dir=1} : /obj/structure/closet/secure_closet/freezer/wall/directional/south {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/freezer/wall {dir=2} : /obj/structure/closet/secure_closet/freezer/wall/directional/north {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/freezer/wall {dir=4} : /obj/structure/closet/secure_closet/freezer/wall/directional/west {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} +/obj/structure/closet/secure_closet/freezer/wall {dir=8} : /obj/structure/closet/secure_closet/freezer/wall/directional/east {@OLD;dir=@SKIP;pixel_x=@SKIP;pixel_y=@SKIP} \ No newline at end of file