diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index a4d6c07526..30029c87bb 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -51,7 +51,7 @@ As mentioned before, you are expected to follow these specifications in order to ### Object Oriented Code As BYOND's Dream Maker (henceforth "DM") is an object-oriented language, code must be object-oriented when possible in order to be more flexible when adding content to it. If you don't know what "object-oriented" means, we highly recommend you do some light research to grasp the basics. -### All BYOND paths must contain the full path. +### All BYOND paths must contain the full path (i.e. absolute pathing) DM will allow you nest almost any type keyword into a block, such as: @@ -105,7 +105,7 @@ The previous code made compliant: code ``` -### No overriding type safety checks. +### No overriding type safety checks The use of the : operator to override type safety checks is not allowed. You must cast the variable to the proper type. ### Type paths must begin with a / @@ -264,6 +264,8 @@ This prevents nesting levels from getting deeper then they need to be. * If you used regex to replace code during development of your code, post the regex in your PR for the benefit of future developers and downstream users. +* Changes to the `/config` tree must be made in a way that allows for updating server deployments while preserving previous behaviour. This is due to the fact that the config tree is to be considered owned by the user and not necessarily updated alongside the remainder of the code. The code to preserve previous behaviour may be removed at some point in the future given the OK by maintainers. + #### Enforced not enforced The following coding styles are not only not enforced at all, but are generally frowned upon to change for little to no reason: diff --git a/README.md b/README.md index b286239314..aaf2ad2a27 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ hassle if you want to make any changes at all, so it's not recommended.) ## INSTALLATION First-time installation should be fairly straightforward. First, you'll need -BYOND installed. You can get it from http://www.byond.com/. Once you've done +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 tgstation.dme by double-clicking it, open the Build menu, and click diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index e2a172e107..9f0f2c50c0 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -383,4 +383,4 @@ UPDATE erro_library SET deleted = 1 WHERE id = someid (Replace someid with the id of the book you want to soft delete.) ----------------------------------------------------- \ No newline at end of file +---------------------------------------------------- diff --git a/SQL/errofreedatabase.sql b/SQL/errofreedatabase.sql index 7d6ea4561c..7f23fcc861 100644 --- a/SQL/errofreedatabase.sql +++ b/SQL/errofreedatabase.sql @@ -12,4 +12,4 @@ ALTER TABLE erro_poll_option RENAME TO SS13_poll_option; ALTER TABLE erro_poll_question RENAME TO SS13_poll_question; ALTER TABLE erro_poll_textreply RENAME TO SS13_poll_textreply; ALTER TABLE erro_poll_vote RENAME TO SS13_poll_vote; -ALTER TABLE erro_watch RENAME TO SS13_watch; \ No newline at end of file +ALTER TABLE erro_watch RENAME TO SS13_watch; diff --git a/SQL/optimisations_2017-02-19.sql b/SQL/optimisations_2017-02-19.sql index b9017497ed..1bb19cc667 100644 --- a/SQL/optimisations_2017-02-19.sql +++ b/SQL/optimisations_2017-02-19.sql @@ -226,4 +226,4 @@ ALTER TABLE `poll_vote` , ADD INDEX `idx_pvote_optionid_ckey` (`optionid` ASC, `ckey` ASC); ALTER TABLE `poll_textreply` - ADD INDEX `idx_ptext_pollid_ckey` (`pollid` ASC, `ckey` ASC); \ No newline at end of file + ADD INDEX `idx_ptext_pollid_ckey` (`pollid` ASC, `ckey` ASC); diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 2d914161d3..8ec2fcfc41 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -432,4 +432,4 @@ CREATE TABLE `schema_revision` ( /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; \ No newline at end of file +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 2d44c8eac0..8bc768967d 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -432,4 +432,4 @@ CREATE TABLE `SS13_schema_revision` ( /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; \ No newline at end of file +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm index 2e066413f7..790e628cba 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_biodome_beach.dmm @@ -229,7 +229,7 @@ /area/ruin/powered/beach) "aV" = ( /obj/effect/mob_spawn/human/beach/alive{ - flavour_text = "You're, like, totally a dudebro, bruh. Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?"; + flavour_text = "You're, like, totally a dudebro, bruh. Ch'yea. You came here, like, on spring break, hopin' to pick up some bangin' hot chicks, y'knaw?"; l_pocket = /obj/item/reagent_containers/food/snacks/pizzaslice/dank; uniform = /obj/item/clothing/under/pants/youngfolksjeans }, @@ -349,7 +349,7 @@ dir = 4 }, /obj/effect/mob_spawn/human/beach/alive{ - flavour_text = "You're a spunky lifeguard! It's up to you to make sure nobody drowns or gets eaten by sharks and stuff."; + flavour_text = "You're a spunky lifeguard! It's up to you to make sure nobody drowns or gets eaten by sharks and stuff."; id = /obj/item/card/id; id_access = "Medical Doctor"; id_job = "Lifeguard"; diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm index cc961656f6..fe74e5a04d 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm @@ -544,7 +544,7 @@ "bN" = ( /obj/effect/mob_spawn/cow{ dir = 4; - flavour_text = "You're a cow. You've lived a pampered life as a prized show heifer, a real blue-ribbon winner. After showing signs of a minor respiratory infection, your master took you to the hospital right away. He'd better come back soon. You're getting quite impatient."; + flavour_text = "You're a cow. You've lived a pampered life as a prized show heifer, a real blue-ribbon winner. After showing signs of a minor respiratory infection, your master took you to the hospital right away. He'd better come back soon. You're getting quite impatient."; mob_name = "Flossie" }, /turf/open/floor/plasteel/white, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm index c9c983f3bb..d77a0f7ec0 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_cultaltar.dmm @@ -88,7 +88,7 @@ triggerer_only = 1 }, /obj/effect/step_trigger/message{ - message = "You've made a grave mistake, haven't you?"; + message = "You've made a grave mistake, haven't you?"; name = "ohfuck" }, /turf/open/floor/engine/cult{ diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm index 3a89d344a8..8a34879707 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_pizzaparty.dmm @@ -10,14 +10,11 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "d" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - }, +/turf/closed/wall, /area/ruin/unpowered) "e" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -25,7 +22,6 @@ /obj/structure/table/wood, /obj/item/storage/box/cups, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -36,14 +32,12 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "h" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -51,7 +45,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -59,7 +52,6 @@ /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -72,7 +64,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -89,7 +80,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -97,7 +87,6 @@ /obj/item/chair/wood/wings, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -105,7 +94,6 @@ /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -113,7 +101,6 @@ /obj/item/trash/plate, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -121,7 +108,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -129,7 +115,6 @@ /obj/item/chair/wood/wings, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -141,13 +126,11 @@ name = "party hat" }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "s" = ( /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -155,14 +138,12 @@ /obj/structure/chair/wood/wings, /obj/effect/decal/remains/human, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "u" = ( /obj/structure/glowshroom/single, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -175,7 +156,6 @@ /obj/item/kitchen/fork, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -187,7 +167,6 @@ name = "pizza spawner" }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -195,7 +174,6 @@ /obj/structure/table/wood, /obj/item/trash/plate, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -204,7 +182,6 @@ /obj/structure/glowshroom/single, /obj/item/a_gift, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -213,7 +190,6 @@ /obj/item/trash/plate, /obj/item/kitchen/fork, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -224,7 +200,6 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -233,7 +208,6 @@ /obj/item/reagent_containers/food/snacks/pizzaslice/margherita, /obj/item/trash/plate, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -241,7 +215,6 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/meat, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -249,21 +222,18 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/store/cake/birthday, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "G" = ( /obj/structure/table/wood, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "H" = ( /obj/item/chair/wood/wings, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -271,7 +241,6 @@ /obj/item/kitchen/fork, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -279,7 +248,6 @@ /obj/structure/glowshroom/single, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -291,7 +259,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -299,7 +266,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -307,7 +273,6 @@ /obj/effect/decal/cleanable/dirt, /obj/item/a_gift, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -320,7 +285,6 @@ /obj/item/kitchen/knife, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -330,13 +294,11 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) "Q" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) @@ -344,7 +306,6 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/baseturf_helper/lava_land/surface, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 56ed4a3716..ee873d9bde 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -9,1185 +9,5461 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "ad" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology{ + frequency = 1449; + id_tag = "lavaland_syndie_virology_interior"; + locked = 1; + name = "Virology Lab Interior Airlock"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) "ae" = ( -/turf/closed/wall/mineral/plastitanium/explosive, -/area/ruin/powered/syndicate_lava_base) +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) "af" = ( -/obj/structure/closet/secure_closet/bar{ - req_access = null; - req_access_txt = "150" +/obj/machinery/light/small{ + dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) "ag" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/item/reagent_containers/food/snacks/syndicake, -/obj/structure/sign/barsign{ - pixel_y = 32; +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ap" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"aq" = ( +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"as" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"at" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_chemistry" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"aL" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"aM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/chem_dispenser, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"cA" = ( +/obj/structure/table/reinforced, +/obj/item/book/manual/wiki/chemistry, +/obj/item/book/manual/wiki/chemistry, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"cG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/chem_master, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"cO" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dc" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"di" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"do" = ( +/obj/structure/closet/secure_closet/medical1{ req_access = null; req_access_txt = "150" }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ah" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/salad/validsalad, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ai" = ( -/obj/structure/rack{ - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "minibar_left"; - name = "skeletal minibar" - }, -/obj/item/reagent_containers/food/drinks/bottle/vodka, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aj" = ( -/obj/structure/rack{ - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "minibar_right"; - name = "skeletal minibar" - }, -/obj/item/reagent_containers/food/drinks/bottle/gin, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"ak" = ( -/obj/structure/dresser, -/obj/structure/mirror{ - pixel_x = -26 - }, -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"al" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"am" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"an" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/toy/figure/syndie, -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"ao" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ap" = ( -/turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"aq" = ( -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"ar" = ( -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 30 - }, -/obj/item/stack/rods/fifty, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/box/beakers, +/turf/open/floor/plasteel/white/side{ dir = 9 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"as" = ( -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"at" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate{ - icon_state = "sleeper_s"; - dir = 4 - }, -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"au" = ( -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"av" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate{ - icon_state = "sleeper_s"; - dir = 8 - }, -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"aw" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ax" = ( -/obj/item/stack/cable_coil/white, -/obj/item/stack/cable_coil/white, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ay" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"du" = ( /obj/machinery/light/small{ - brightness = 3; - dir = 8 + dir = 1 }, -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"az" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/machinery/light/small{ - dir = 4 +/obj/machinery/button/door{ + id = "lavalandsyndi_chemistry"; + name = "Chemistry Blast Door Control"; + pixel_y = 26; + req_access_txt = "150" }, -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"aA" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 1 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aB" = ( -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/structure/table/reinforced, -/obj/item/wrench, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dv" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aC" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/wood{ - icon_state = "wood-broken4" +/obj/machinery/chem_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dw" = ( +/obj/structure/chair/office/light{ + dir = 1 }, -/area/ruin/powered/syndicate_lava_base) -"aD" = ( -/obj/structure/table/wood, -/obj/item/storage/box/drinkingglasses, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aE" = ( -/obj/structure/table/wood, -/obj/item/toy/nuke, -/obj/item/book/manual/nuclear, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aF" = ( -/obj/structure/table/wood, -/obj/item/lighter{ - pixel_y = 3 +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aG" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aH" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dy" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dA" = ( +/obj/structure/closet/l3closet, +/obj/machinery/power/apc{ + dir = 8; + name = "Chemistry APC"; + pixel_x = -24; + req_access = 150 }, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"aI" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate/comms{ - icon_state = "sleeper_s"; +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dC" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dE" = ( +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_y = 2 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = 2; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/glass/bottle/charcoal{ + pixel_x = 6 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/turf/open/floor/plasteel/white/corner{ dir = 4 }, -/turf/open/floor/plasteel/grimy, -/area/ruin/powered/syndicate_lava_base) -"aJ" = ( -/obj/structure/sign/nosmoking_2, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aK" = ( -/obj/structure/closet/crate/bin, -/obj/item/trash/syndi_cakes, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"aL" = ( -/obj/structure/chair/stool/bar, -/turf/open/floor/plasteel/vault{ +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dG" = ( +/obj/structure/lattice/catwalk, +/turf/open/lava/smooth/lava_land_surface, +/area/lavaland/surface/outdoors) +"dI" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/reagent_containers/glass/beaker/large, +/turf/open/floor/plasteel/white/side{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"aM" = ( -/obj/structure/chair/stool/bar, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dK" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate/secure/gear{ + req_access_txt = "150" + }, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"aN" = ( -/obj/structure/table/wood, -/obj/item/lipstick/random{ +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dL" = ( +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/obj/structure/closet/crate, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/device/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/device/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/device/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/device/radio/headset/syndicate/alt{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/device/radio/headset/syndicate/alt, +/obj/item/device/radio/headset/syndicate/alt{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dM" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dP" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"dQ" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/hatch{ + name = "Experimentation Room"; + req_access_txt = "150" + }, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dS" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi"; + name = "Syndicate Research Experimentation Shutters" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"dT" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dU" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dX" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dY" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"dZ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/dropper, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24; + req_access = 150 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ea" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate/secure/weapon{ + req_access_txt = "150" + }, +/obj/item/ammo_box/c10mm{ + pixel_y = 6 + }, +/obj/item/ammo_box/c10mm, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/ammo_box/magazine/m10mm{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eb" = ( +/obj/structure/closet/crate, +/obj/item/storage/toolbox/electrical{ + pixel_y = 4 + }, +/obj/item/storage/toolbox/mechanical, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ec" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/fire{ pixel_x = 3; pixel_y = 3 }, -/obj/item/lipstick/random{ +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/regular{ pixel_x = -3; pixel_y = -3 }, -/obj/item/lipstick/random, -/obj/item/soap/syndie, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ed" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ee" = ( +/obj/structure/rack, +/obj/item/device/flashlight{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/device/flashlight, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ef" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Cargo Bay APC"; + pixel_y = 24; + req_access = 150 + }, +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eg" = ( +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eh" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ei" = ( +/obj/structure/disposaloutlet{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ej" = ( +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aO" = ( +/area/ruin/unpowered/syndicate_lava_base/testlab) +"ek" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"el" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aP" = ( -/obj/structure/dresser, -/obj/structure/mirror{ - pixel_x = 26 +/area/ruin/unpowered/syndicate_lava_base/testlab) +"em" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "lavalandsyndi"; + name = "Syndicate Experimentation Lockdown Control"; + pixel_y = 26; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eo" = ( +/obj/structure/table/reinforced, +/obj/item/stack/sheet/metal/fifty, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"ep" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/syndicate, +/obj/item/stack/cable_coil/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eq" = ( +/obj/structure/table/reinforced, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/voice, +/obj/item/device/assembly/voice, +/obj/item/device/assembly/voice, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/obj/item/screwdriver/nuke, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"er" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"es" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"et" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/chem_heater, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ev" = ( +/turf/open/floor/plasteel/white/corner, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ew" = ( +/obj/structure/table/glass, +/obj/item/stack/cable_coil/white{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/white, +/obj/item/device/assembly/igniter{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/device/assembly/igniter{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/device/assembly/igniter{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/device/assembly/timer{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/grenade/chem_grenade, +/obj/item/screwdriver{ + pixel_y = 20 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"ex" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"aQ" = ( -/obj/item/target, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ey" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ez" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eA" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eB" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eC" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eD" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/storage/box/lights/bulbs, +/obj/item/wrench, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eF" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_cargo" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eG" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eH" = ( +/obj/structure/bed, +/obj/item/bedsheet, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/white/side{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eI" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eJ" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"eK" = ( +/obj/machinery/light/small, +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aR" = ( +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eL" = ( +/obj/machinery/door/airlock/hatch{ + name = "Monkey Pen"; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eM" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eN" = ( +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -24; + req_access = null; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eP" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eQ" = ( +/obj/machinery/light/small, +/obj/structure/table/reinforced, +/obj/item/restraints/handcuffs, +/obj/item/device/taperecorder, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"eR" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/chem_master, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eT" = ( +/obj/effect/turf_decal/bot, +/obj/structure/chair/office/light, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eU" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/chem_dispenser, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"eW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eX" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 4 + }, +/obj/structure/closet/crate/internals, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eY" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"eZ" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/stack/sheet/cardboard{ + amount = 3 + }, +/obj/item/stack/rods/twentyfive, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fa" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/brown/corner{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ff" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fg" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fi" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/machinery/power/apc{ + dir = 1; + name = "Virology APC"; + pixel_y = 24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fj" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/virusfood{ + pixel_y = 28 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/device/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/turf/open/floor/plasteel/white/side{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fk" = ( +/obj/machinery/power/apc{ + dir = 2; + name = "Experimentation Lab APC"; + pixel_y = -24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"fl" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 25 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"fm" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical{ + name = "Chemistry Lab"; + req_access_txt = "150" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fn" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fo" = ( +/obj/machinery/door/firedoor, +/obj/structure/table/reinforced, +/obj/machinery/door/window/southleft{ + base_state = "left"; + dir = 2; + icon_state = "left"; + name = "Chemistry"; + req_access_txt = "0" + }, +/obj/machinery/door/window/southleft{ + base_state = "left"; + dir = 1; + icon_state = "left"; + name = "Chemistry"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fp" = ( +/obj/machinery/smartfridge/chemistry/preloaded, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/chemistry) +"fq" = ( +/obj/machinery/vending/assist, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fs" = ( +/obj/effect/turf_decal/box/white/corners{ + dir = 8 + }, +/obj/structure/closet/crate, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ft" = ( +/obj/effect/turf_decal/box/white/corners, +/obj/structure/closet/crate, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/reagent_containers/glass/beaker/waterbottle/large{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/structure/table, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/head/soft{ + pixel_x = -8 + }, +/obj/item/clothing/head/soft{ + pixel_x = -8 + }, +/obj/item/device/radio{ + pixel_x = 5 + }, +/obj/item/device/radio{ + pixel_x = 5 + }, +/turf/open/floor/plasteel/brown{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fw" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fx" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fy" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation B"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fz" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Isolation A"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fA" = ( +/obj/structure/table/glass, +/obj/item/book/manual/wiki/infections{ + pixel_y = 7 + }, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fB" = ( +/obj/structure/chair/stool, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fC" = ( +/obj/machinery/smartfridge/chemistry/virology/preloaded, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fD" = ( +/obj/structure/sign/biohazard, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/virology) +"fE" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/l3closet, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"fF" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/shower{ + pixel_y = 14 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"fG" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/door/airlock/hatch{ + name = "Experimentation Lab"; + req_access_txt = "150" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"fH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"fI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"fO" = ( +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"fW" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/door/airlock/mining/glass{ + name = "Warehouse"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"fY" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 1 + }, +/obj/structure/table, +/obj/item/folder/yellow, +/obj/item/stack/wrapping_paper{ + pixel_y = 5 + }, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gb" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gd" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gf" = ( +/obj/structure/sign/vacuum{ + pixel_y = -32 + }, +/obj/machinery/light/small, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gg" = ( +/obj/structure/sign/fire{ + pixel_y = 32 + }, +/obj/structure/sign/xeno_warning_mining{ + pixel_y = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gh" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gj" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/virology) +"go" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/medical{ + name = "SyndiMed Plus"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gq" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gs" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gv" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gz" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gA" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/virology{ + frequency = 1449; + id_tag = "lavaland_syndie_virology_exterior"; + name = "Virology Lab Exterior Airlock"; + req_access_txt = "150" + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "lavaland_syndie_virology_exterior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Button"; + pixel_y = -24; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"gE" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gF" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gG" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gH" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"gI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gJ" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gK" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/brown/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"gL" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/brown{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"gM" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"gN" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"gO" = ( +/obj/structure/sign/cargo, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gP" = ( +/obj/machinery/photocopier, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gQ" = ( +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gS" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "lavalandsyndi_cargo"; + name = "Cargo Bay Blast Door Control"; + pixel_x = 26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"gT" = ( +/obj/machinery/door/airlock/virology/glass{ + name = "Monkey Pen"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gU" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gV" = ( +/obj/structure/chair/office/light, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gW" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gX" = ( +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "lavaland_syndie_virology_exterior"; + idInterior = "lavaland_syndie_virology_interior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Console"; + pixel_x = 24; + pixel_y = -5; + req_access_txt = "150" + }, +/obj/machinery/light_switch{ + pixel_x = 25; + pixel_y = 8 + }, +/obj/effect/turf_decal/caution/red{ + dir = 1; + pixel_y = -6 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"gY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/doorButtons/access_button{ + idDoor = "lavaland_syndie_virology_interior"; + idSelf = "lavaland_syndie_virology_control"; + name = "Virology Access Button"; + pixel_x = -24; + pixel_y = 8; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"gZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"ha" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"hb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hd" = ( +/turf/open/floor/plasteel/red/corner, +/area/ruin/unpowered/syndicate_lava_base/main) +"he" = ( +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"hf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"hg" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"hh" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"hi" = ( +/turf/open/floor/plasteel/red/corner{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hj" = ( +/turf/open/floor/plasteel/brown{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hk" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + req_access_txt = "0" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hl" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hn" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"ho" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/computer/shuttle{ + desc = "Occasionally used to call in a resupply shuttle if one is in range."; + dir = 8; + icon_keyboard = "syndie_key"; + icon_screen = "syndishuttle"; + light_color = "#FA8282"; + name = "syndicate cargo shuttle terminal"; + possible_destinations = "syndielavaland_cargo"; + req_access_txt = "150"; + shuttleId = "syndie_cargo" + }, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hp" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hr" = ( +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, +/turf/open/floor/plasteel/white/side{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hs" = ( +/obj/machinery/computer/pandemic, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/button/door{ + id = "lavalandsyndi_virology"; + name = "Virology Blast Door Control"; + pixel_x = -26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"ht" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/hand_labeler, +/obj/item/pen/red, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hu" = ( +/obj/structure/table, +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hv" = ( +/obj/machinery/disposal/bin, +/obj/structure/sign/deathsposal{ + pixel_x = 32 + }, +/obj/effect/turf_decal/stripes/red/box, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hw" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hx" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hy" = ( +/turf/open/floor/plasteel/red/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hz" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hA" = ( +/obj/structure/closet/emcloset/anchored, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hB" = ( +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hC" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay"; + req_access_txt = "0" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hE" = ( +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hF" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hG" = ( +/obj/effect/decal/cleanable/dirt, +/mob/living/carbon/monkey{ + faction = list("neutral","syndicate") + }, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hH" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_virology" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/virology) +"hI" = ( +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hK" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/sign/fire{ + pixel_x = 32 + }, /obj/structure/closet/emcloset/anchored, /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/device/flashlight/seclite, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aS" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"aT" = ( -/obj/machinery/door/airlock/hatch{ - name = "Dormitories"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hL" = ( +/obj/machinery/light/small{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aU" = ( -/obj/structure/closet/emcloset, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/device/flashlight/seclite, -/obj/item/clothing/mask/gas, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/side{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ +/area/ruin/unpowered/syndicate_lava_base/main) +"hM" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/sniper_rounds, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hN" = ( +/obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aV" = ( -/obj/machinery/door/airlock/hatch{ - name = "Storage Closet"; - req_access_txt = "150" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hO" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hP" = ( +/obj/machinery/light/small{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aW" = ( -/obj/machinery/door/airlock/hatch{ - name = "Restroom"; +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hQ" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"hR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"hS" = ( +/obj/structure/table/reinforced, +/obj/item/folder, +/obj/item/suppressor, +/obj/item/clothing/ears/earmuffs, +/obj/item/clothing/ears/earmuffs, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hT" = ( +/obj/machinery/vending/toyliberationstation{ req_access_txt = "150" }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/brown, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hU" = ( +/obj/machinery/light/small, +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hV" = ( +/obj/structure/filingcabinet/chestdrawer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/brown, +/area/ruin/unpowered/syndicate_lava_base/cargo) +"hW" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"hX" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hY" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"hZ" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/red/side{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"aX" = ( -/obj/structure/mirror{ - pixel_x = 28 +/area/ruin/unpowered/syndicate_lava_base/main) +"ia" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/red/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ib" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + icon_state = "sleeper_s"; + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ic" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"id" = ( +/obj/structure/toilet{ + pixel_y = 18 }, /obj/structure/sink{ dir = 4; pixel_x = 11 }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"aY" = ( +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ie" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate/comms{ + dir = 8; + icon_state = "sleeper_s" + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"if" = ( +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"ig" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"aZ" = ( +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"ih" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"ii" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ij" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ik" = ( +/turf/open/floor/plasteel/red/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"il" = ( +/obj/machinery/door/airlock{ + name = "Cabin 2"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"im" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms"; + req_access_txt = "0" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"in" = ( +/obj/machinery/door/airlock{ + name = "Cabin 4"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ip" = ( +/obj/effect/turf_decal/stripes/red/corner, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iq" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/main) +"ir" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/line{ + dir = 9 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"is" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"it" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/line{ + dir = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"iu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"iv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"iw" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ix" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"iy" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Dormitories" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iz" = ( +/turf/open/floor/plasteel/neutral/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iA" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/neutral/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iB" = ( +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/neutral/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iC" = ( +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/neutral/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iE" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/neutral/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iF" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iG" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"iH" = ( +/obj/effect/turf_decal/stripes/red/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/red{ + dir = 8; + pixel_x = 6 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iI" = ( +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault"; + locked = 1; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"iJ" = ( +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"iK" = ( +/obj/machinery/syndicatebomb/self_destruct{ + anchored = 1 + }, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"iL" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24; + req_access = 150 + }, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"iM" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"iN" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/main) +"iO" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"iP" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"iQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/main) +"iR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Dormitories" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iS" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/neutral/side, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iT" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/neutral/corner{ + dir = 8; + heat_capacity = 1e+006 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iU" = ( +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/power/apc{ + dir = 2; + name = "Dormitories APC"; + pixel_y = -24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plasteel/neutral/corner, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iW" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/neutral/side, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/neutral/corner{ + dir = 8; + heat_capacity = 1e+006 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iY" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"iZ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ja" = ( +/obj/effect/turf_decal/stripes/red/corner{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "syndie_lavaland_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = 8; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jb" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/line{ + dir = 10 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jc" = ( +/obj/machinery/light/small, +/turf/open/floor/circuit/red, +/area/ruin/unpowered/syndicate_lava_base/main) +"jd" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/red/line{ + dir = 6 + }, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"je" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"jf" = ( +/obj/machinery/door/airlock{ + name = "Cabin 1"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jg" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jh" = ( +/obj/machinery/door/airlock{ + name = "Cabin 3"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"ji" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 8; + name = "Primary Hallway APC"; + pixel_x = -24; + req_access = 150 + }, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jj" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jk" = ( +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"jl" = ( +/turf/open/floor/plasteel/red/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jm" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jn" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + icon_state = "sleeper_s"; + dir = 4 + }, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"jq" = ( +/obj/effect/mob_spawn/human/lavaland_syndicate{ + dir = 8; + icon_state = "sleeper_s" + }, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jr" = ( +/obj/machinery/vending/snack/random{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"js" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jt" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/yellow/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"ju" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jv" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/toolcloset, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jw" = ( +/obj/effect/turf_decal/bot, +/obj/structure/closet/firecloset/full{ + anchored = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jx" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_bar" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jy" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jz" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Bar" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jA" = ( +/obj/structure/table/wood, +/obj/item/ammo_box/magazine/m10mm, +/obj/item/ammo_box/magazine/sniper_rounds, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jB" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jC" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/grimy, +/area/ruin/unpowered/syndicate_lava_base/dormitories) +"jD" = ( +/obj/machinery/vending/cola/random{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jE" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jF" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/yellow/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jG" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jI" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ba" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jK" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jL" = ( +/obj/structure/table, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/lighter{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ + pixel_x = -3 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jM" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "lavalandsyndi_bar"; + name = "Bar Blast Door Control"; + pixel_y = 26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jN" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jO" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 25 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jP" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"jR" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"jT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/yellow/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/main) +"jU" = ( +/obj/structure/sign/engineering, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/clothing/gloves/combat, +/obj/item/crowbar, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"jY" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"jZ" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ka" = ( +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kb" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/box/lights/bulbs, +/obj/item/stack/rods{ + amount = 50 + }, +/obj/item/clothing/head/welding, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"ke" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kf" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kh" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"ki" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kj" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"kk" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/door/firedoor, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/door/airlock/engineering{ + name = "Engineering"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"km" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/computer/monitor, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ko" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kq" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24; + req_access = 150 + }, +/obj/machinery/vending/coffee{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kr" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ks" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"ku" = ( +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"kv" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"kw" = ( +/obj/structure/table, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/main) +"kx" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ky" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/visible, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kA" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/power/apc{ + dir = 1; + name = "Engineering APC"; + pixel_y = 24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kC" = ( +/obj/machinery/computer/atmos_control/tank{ + dir = 8; + frequency = 1442; + name = "Nitrogen Supply Control"; + output_tag = "syndie_lavaland_n2_out"; + sensors = list("syndie_lavaland_n2_sensor" = "Tank") + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kD" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kE" = ( +/obj/machinery/air_sensor{ + frequency = 1442; + id_tag = "syndie_lavaland_n2_sensor" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kF" = ( +/obj/machinery/atmospherics/miner/nitrogen, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kG" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/beer, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kH" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kJ" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kK" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kM" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 26 + }, +/obj/machinery/vending/cigarette{ + extended_inventory = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kN" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sink/kitchen{ + pixel_y = 28 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"kP" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"kQ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kS" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kT" = ( +/obj/structure/sign/bluecross_2, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"kU" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow, +/obj/structure/sign/electricshock{ + pixel_x = -32 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kY" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/visible{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"kZ" = ( +/obj/machinery/atmospherics/components/trinary/mixer/flipped{ + dir = 4; + node1_concentration = 0.8; + node2_concentration = 0.1; + on = 1; + target_pressure = 4500 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"la" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lb" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + frequency = 1442; + id_tag = "syndie_lavaland_n2_out"; + name = "nitrogen out" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ld" = ( +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"le" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"lf" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lg" = ( +/obj/structure/chair/stool/bar, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lh" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"li" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/syndicate{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken4" + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lj" = ( +/obj/machinery/door/window/southleft{ + base_state = "right"; + dir = 1; + icon_state = "right"; + name = "Bar"; + req_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lk" = ( +/obj/structure/table/wood, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 30 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 1 + }, +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/item/book/manual/barman_recipes, +/obj/item/reagent_containers/food/drinks/shaker, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ll" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lm" = ( +/obj/structure/closet/secure_closet/medical1{ + req_access = null; + req_access_txt = "150" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ln" = ( +/turf/open/floor/plasteel/white/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lo" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/table, +/obj/item/storage/firstaid/fire, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lq" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ls" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lt" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lu" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"lw" = ( +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + baseturfs = /turf/open/lava/smooth/lava_land_surface; + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/lavaland/surface/outdoors) +"lx" = ( +/obj/structure/bookcase/random, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ly" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lz" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/glass/rag{ + pixel_x = -4; + pixel_y = 9 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = 5; + pixel_y = -2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lA" = ( +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lC" = ( +/obj/structure/table/wood, +/obj/machinery/reagentgrinder, +/obj/item/kitchen/rollingpin, +/obj/item/kitchen/knife{ + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lD" = ( +/obj/machinery/vending/boozeomat{ + req_access_txt = "0" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lF" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/closet/crate, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/cola, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lG" = ( +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/item/gun/syringe/syndicate, +/turf/open/floor/plasteel/white/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lH" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lI" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lJ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lK" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"lL" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/table, +/obj/item/stack/sheet/metal/fifty{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lO" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lP" = ( +/obj/machinery/computer/atmos_control/tank{ + dir = 8; + frequency = 1442; + name = "Oxygen Supply Control"; + output_tag = "syndie_lavaland_o2_out"; + sensors = list("syndie_lavaland_o2_sensor" = "Tank") + }, +/turf/open/floor/plasteel/blue/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lQ" = ( +/obj/machinery/air_sensor{ + frequency = 1442; + id_tag = "Syndicate_Construction_o2_sensor" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lR" = ( +/obj/machinery/atmospherics/miner/oxygen, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"lS" = ( +/obj/machinery/porta_turret/syndicate{ + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"lT" = ( +/obj/structure/fans/tiny, +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"lU" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/structure/chair/stool, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lV" = ( +/obj/structure/chair/stool/bar, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lW" = ( +/obj/structure/table/wood, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lX" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"lZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"ma" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/door/airlock{ + name = "Bar Storage"; + req_access_txt = "150" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mc" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"md" = ( +/obj/machinery/sleeper/syndie{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"me" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mf" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24; + req_access = 150 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mg" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 + }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/effect/decal/cleanable/dirt, +/obj/item/pipe_dispenser{ + pixel_y = 12 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mh" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mi" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 6 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mj" = ( +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "O2 to Incinerator"; + target_pressure = 4500 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mk" = ( +/obj/machinery/atmospherics/pipe/manifold/supplymain/visible, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ml" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/blue/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 8; + frequency = 1442; + id_tag = "syndie_lavaland_o2_out"; + name = "oxygen out" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mn" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mo" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mp" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor/preopen{ + id = "lavalandsyndi_telecomms" + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mq" = ( +/obj/structure/sign/vacuum{ + pixel_x = -32 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mr" = ( +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ms" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/sign/fire{ + pixel_x = 32 + }, /obj/structure/closet/emcloset/anchored, /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/device/flashlight/seclite, /obj/item/clothing/mask/gas, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bb" = ( +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mt" = ( +/obj/machinery/computer/arcade/orion_trail, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mu" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bc" = ( -/obj/structure/bookcase/random, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bd" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mv" = ( +/obj/structure/table/wood, /obj/machinery/light/small, +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + dir = 2; + name = "Bar APC"; + pixel_y = -24; + req_access = 150 + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mw" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mx" = ( +/obj/structure/table/wood, +/obj/machinery/microwave, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"my" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/snacks/chocolatebar, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"be" = ( -/obj/structure/bookcase/random, -/turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"bf" = ( -/obj/structure/toilet{ - dir = 8 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bg" = ( -/obj/machinery/door/airlock/hatch{ - name = "Lounge"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bh" = ( -/obj/machinery/chem_dispenser, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bi" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/syringe, -/obj/structure/sign/nosmoking_2{ - pixel_y = 32 - }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bj" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bk" = ( -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; +/area/ruin/unpowered/syndicate_lava_base/bar) +"mz" = ( +/obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; pixel_y = 5 }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/area/ruin/powered/syndicate_lava_base) -"bl" = ( -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/white, -/obj/item/book/manual/wiki/chemistry, -/obj/item/book/manual/wiki/chemistry, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/voice, -/obj/item/device/assembly/voice, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bm" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/beakers{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/syringes, -/obj/item/gun/syringe/syndicate, -/obj/item/storage/box/beakers, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bn" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/main) +"mA" = ( /obj/machinery/light/small{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bo" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bp" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 - }, -/obj/structure/noticeboard{ - pixel_y = 32 - }, -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bq" = ( -/obj/structure/reagent_dispensers/virusfood{ - pixel_y = 32 - }, -/obj/structure/table/reinforced, -/obj/item/device/healthanalyzer, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"br" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 32 - }, -/obj/machinery/computer/pandemic, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bs" = ( -/obj/structure/table/reinforced, -/obj/item/storage/box/beakers{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/box/syringes, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bt" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/random, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bu" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ruin/powered/syndicate_lava_base) -"bv" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/mob/living/carbon/monkey, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bw" = ( -/obj/structure/bed/roller, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bx" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"by" = ( -/mob/living/carbon/monkey, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bz" = ( -/obj/structure/window/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bA" = ( -/obj/machinery/door/window/brigdoor, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bB" = ( -/obj/machinery/chem_heater, -/obj/structure/extinguisher_cabinet{ +/obj/item/reagent_containers/blood/OMinus, +/obj/machinery/firealarm{ + dir = 8; pixel_x = -26 }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 8 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bC" = ( -/obj/structure/chair/office/dark{ +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mB" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mE" = ( +/obj/structure/table/reinforced, +/obj/item/scalpel, +/obj/item/circular_saw{ + pixel_y = 9 + }, +/obj/machinery/light/small{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"mF" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 1 + }, +/obj/structure/chair/stool, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mH" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 8 + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mI" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 8 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/head/welding, +/obj/item/weldingtool/largetank, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mJ" = ( /obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bD" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bE" = ( -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"bF" = ( -/obj/item/device/assembly/igniter, -/obj/item/device/assembly/igniter, -/obj/item/device/assembly/igniter, -/obj/item/device/assembly/timer{ - pixel_x = 3; - pixel_y = 3 +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mK" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/computer/atmos_control/tank{ + dir = 1; + frequency = 1442; + name = "Toxins Supply Control"; + output_tag = "syndie_lavaland_tox_out"; + sensors = list("syndie_lavaland_tox_sensor" = "Tank") }, -/obj/item/device/assembly/timer{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/device/assembly/timer{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bG" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/wiki/infections, -/obj/item/stack/sheet/mineral/silver{ - amount = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bH" = ( -/obj/structure/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bI" = ( -/obj/machinery/door/airlock/hatch{ - name = "Monkey Pen"; +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"mM" = ( +/turf/open/floor/circuit/green, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mN" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mO" = ( +/obj/structure/filingcabinet/security, +/obj/machinery/button/door{ + id = "lavalandsyndi_telecomms"; + name = "Telecomms Blast Door Control"; + pixel_y = 26; req_access_txt = "150" }, /turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"bJ" = ( -/obj/structure/table/reinforced, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, -/obj/item/gun/ballistic/automatic/c20r/toy/unrestricted/riot, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bK" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bL" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/suit/toggle/labcoat, -/obj/item/clothing/suit/toggle/labcoat, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/hud/health, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bM" = ( -/obj/machinery/smartfridge/chemistry/virology/preloaded, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bN" = ( -/obj/machinery/vending/toyliberationstation{ - req_access_txt = "150" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bO" = ( -/obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bP" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bQ" = ( -/obj/structure/chair/office/dark, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bR" = ( -/obj/machinery/chem_heater, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bS" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bT" = ( -/obj/structure/chair/office/dark, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bU" = ( -/obj/machinery/door/airlock/hatch{ - name = "Monkey Pen"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"bV" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/ears/earmuffs, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bW" = ( -/obj/structure/table/reinforced, -/obj/item/suppressor/specialoffer, -/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted, -/obj/item/gun/ballistic/automatic/toy/pistol/unrestricted, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"bX" = ( -/obj/machinery/chem_master, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bY" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/item/reagent_containers/glass/beaker/large, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"bZ" = ( -/obj/machinery/chem_dispenser, -/obj/structure/extinguisher_cabinet{ - pixel_x = 26 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ca" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/bio_suit/general, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/head/bio_hood/general, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/glasses/science, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cb" = ( -/obj/machinery/shower{ - dir = 4; - icon_state = "shower"; - name = "emergency shower" - }, -/obj/machinery/shower{ - dir = 8; - icon_state = "shower"; - name = "emergency shower" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"cc" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/light, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cd" = ( -/obj/structure/table/reinforced, -/obj/item/folder/white, -/obj/item/stack/sheet/mineral/gold{ - amount = 10 - }, -/obj/item/stack/sheet/mineral/uranium{ - amount = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ce" = ( -/obj/structure/bed/roller, -/mob/living/carbon/monkey, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"cf" = ( -/obj/structure/sign/securearea, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cg" = ( -/obj/machinery/door/airlock/hatch{ - name = "Firing Range"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"ch" = ( -/obj/machinery/door/airlock/hatch{ - name = "Chemistry Lab"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"ci" = ( -/obj/structure/sign/chemistry, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cj" = ( -/obj/structure/sign/biohazard, -/turf/closed/wall/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ck" = ( -/obj/machinery/door/airlock/hatch{ - name = "Virology Lab"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"cl" = ( -/obj/structure/rack, -/obj/item/ammo_box/foambox{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/ammo_box/foambox, -/obj/item/ammo_box/foambox{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cm" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"co" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cp" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cq" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/bluecross_2, -/turf/open/floor/plating, -/area/ruin/powered/syndicate_lava_base) -"cs" = ( +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mP" = ( +/obj/structure/filingcabinet/security, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mQ" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mR" = ( /obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = 3; - pixel_y = 3 +/obj/item/storage/toolbox/syndicate, +/obj/item/device/multitool, +/obj/machinery/button/door{ + id = "lavalandsyndi_telecomms"; + name = "Telecomms Blast Door Control"; + pixel_x = 26; + req_access_txt = "150" }, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/regular{ - pixel_x = -3; +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"mS" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "150" + }, +/obj/structure/fans/tiny, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mT" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mU" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mV" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/structure/sign/barsign{ + pixel_y = -32; + req_access = null; + req_access_txt = "0" + }, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mW" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks, +/turf/open/floor/wood, +/area/ruin/unpowered/syndicate_lava_base/bar) +"mX" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/toolbox/mechanical, +/obj/item/stack/cable_coil/yellow{ + pixel_x = 2; pixel_y = -3 }, -/turf/open/floor/plasteel/vault, -/area/ruin/powered/syndicate_lava_base) -"ct" = ( +/obj/item/device/multitool, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"mZ" = ( /obj/machinery/sleeper/syndie{ - dir = 8 + dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"na" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cu" = ( -/obj/structure/closet/crate/secure, -/obj/item/target, -/obj/item/target, -/obj/item/target/alien, -/obj/item/target/alien, -/obj/item/target/clown, -/obj/item/target/clown, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nb" = ( +/obj/structure/table/optable, +/obj/item/surgical_drapes, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nc" = ( +/obj/machinery/computer/turbine_computer{ + dir = 1; + id = "syndie_lavaland_incineratorturbine" }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cw" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cx" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cy" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cz" = ( -/obj/effect/turf_decal/stripes/corner, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"cB" = ( -/obj/machinery/door/airlock/hatch{ - name = "Infirmary"; +/obj/machinery/button/door{ + id = "syndie_lavaland_turbinevent"; + name = "Turbine Vent Control"; + pixel_x = 6; + pixel_y = -24; req_access_txt = "150" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/machinery/button/door{ + id = "syndie_lavaland_auxincineratorvent"; + name = "Auxiliary Vent Control"; + pixel_x = -6; + pixel_y = -24; + req_access_txt = "150" }, -/area/ruin/powered/syndicate_lava_base) -"cC" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nd" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/area/ruin/powered/syndicate_lava_base) -"cD" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "lavalandsyndi"; - name = "Syndicate Research Experimentor Shutters" +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ne" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/doorButtons/airlock_controller{ + idExterior = "syndie_lavaland_incinerator_exterior"; + idInterior = "syndie_lavaland_incinerator_interior"; + idSelf = "syndie_lavaland_incinerator_access"; + name = "Incinerator Access Console"; + pixel_x = -8; + pixel_y = -26; + req_access_txt = "150" }, +/obj/machinery/button/ignition{ + id = "syndie_lavaland_Incinerator"; + pixel_x = 6; + pixel_y = -24 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nf" = ( +/obj/structure/sign/fire, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ng" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plating, -/area/ruin/powered/syndicate_lava_base) -"cE" = ( -/obj/machinery/door/airlock/hatch{ - name = "Experimentation Room"; - req_access_txt = "150" +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nh" = ( +/obj/machinery/telecomms/relay/preset/ruskie{ + use_power = 0 }, -/turf/open/floor/plasteel/vault{ +/obj/machinery/light/small{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"cF" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ni" = ( +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nj" = ( /obj/machinery/door/airlock/hatch{ name = "Telecommunications Control"; req_access_txt = "150" }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nm" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cG" = ( -/turf/open/floor/engine, -/area/ruin/powered/syndicate_lava_base) -"cH" = ( /obj/structure/noticeboard{ - pixel_y = 32 + dir = 8; + pixel_x = 27 }, -/obj/machinery/light{ +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nn" = ( +/obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"no" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"np" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nq" = ( +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cI" = ( -/obj/structure/table, -/obj/item/storage/toolbox/syndicate, -/obj/item/device/multitool, -/turf/open/floor/plasteel/vault{ - dir = 8 +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ns" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/area/ruin/powered/syndicate_lava_base) -"cJ" = ( -/obj/item/surgicaldrill, -/obj/item/circular_saw, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cK" = ( -/obj/structure/sink{ +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 9 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4; - pixel_x = 11 + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/obj/structure/mirror{ - pixel_x = 30 +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + dir = 1; + name = "Arrival Hallway APC"; + pixel_y = 24; + req_access = 150 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nw" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 2; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nx" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/medical/glass{ + name = "Medbay" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ny" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nz" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/white/corner, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nB" = ( +/obj/structure/table/reinforced, +/obj/item/surgicaldrill, +/obj/item/cautery, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nC" = ( +/obj/structure/table/reinforced, +/obj/item/retractor, +/obj/item/hemostat, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"nD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + id_tag = "syndie_lavaland_incinerator_interior"; + locked = 1; + name = "Turbine Interior Airlock"; + req_access_txt = "150" + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nE" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nF" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + dir = 1; + frequency = 1442; + id_tag = "syndie_lavaland_tox_out"; + name = "toxin out" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nG" = ( +/obj/machinery/air_sensor{ + frequency = 1442; + id_tag = "syndie_lavaland_tox_sensor" + }, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"nH" = ( +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -24; + req_access = 150 + }, +/obj/machinery/light/small{ + dir = 8 }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cL" = ( -/obj/item/stack/cable_coil/white{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/syndicate, -/obj/item/stack/cable_coil/white, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nI" = ( +/obj/machinery/computer/camera_advanced, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cM" = ( -/obj/structure/table/reinforced, -/obj/item/device/flashlight/lamp, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"cN" = ( +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nJ" = ( /obj/structure/table/reinforced, /obj/item/device/radio/intercom{ broadcasting = 0; @@ -1197,67 +5473,330 @@ name = "Pirate Radio Listening Channel" }, /turf/open/floor/plasteel/vault{ - dir = 8 + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/area/ruin/powered/syndicate_lava_base) -"cO" = ( -/obj/machinery/computer/camera_advanced, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cP" = ( -/obj/structure/filingcabinet/chestdrawer, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nL" = ( +/obj/machinery/door/airlock/hatch{ + name = "Telecommunications"; + req_access_txt = "150" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"nM" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nO" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nP" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nQ" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/corner{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nS" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nU" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/airalarm{ + pixel_y = 24; + req_access = 150 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nW" = ( +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nX" = ( +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nY" = ( +/obj/machinery/light/small, +/turf/open/floor/plasteel/floorgrime, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"nZ" = ( +/turf/open/floor/plasteel/white/side{ + dir = 4 + }, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oa" = ( +/turf/open/floor/plasteel/white/side{ + dir = 10 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ob" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"oc" = ( +/obj/machinery/light/small, +/obj/structure/extinguisher_cabinet{ + pixel_y = -29 + }, +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + dir = 4; + name = "Medbay APC"; + pixel_x = 24; + req_access = 150 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/white/side{ + dir = 6 + }, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"od" = ( +/obj/machinery/light/small{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"cQ" = ( -/obj/item/cautery, -/obj/item/scalpel, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/machinery/doorButtons/access_button{ + idDoor = "syndie_lavaland_incinerator_exterior"; + idSelf = "syndie_lavaland_incinerator_access"; + layer = 3.1; + name = "Incinerator airlock control"; + pixel_x = 8; + pixel_y = -24 }, -/area/ruin/powered/syndicate_lava_base) -"cR" = ( -/obj/structure/table/optable, -/obj/item/surgical_drapes, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oe" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/area/ruin/powered/syndicate_lava_base) -"cS" = ( -/obj/item/retractor, -/obj/item/hemostat, -/obj/structure/table/reinforced, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"of" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/machinery/doorButtons/access_button{ + idDoor = "syndie_lavaland_incinerator_interior"; + idSelf = "syndie_lavaland_incinerator_access"; + name = "Incinerator airlock control"; + pixel_x = -8; + pixel_y = 24 }, -/area/ruin/powered/syndicate_lava_base) -"cT" = ( -/obj/structure/sign/nosmoking_2{ - pixel_x = 32 +/obj/machinery/atmospherics/components/binary/pump/on{ + target_pressure = 4500 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"cU" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/obj/structure/extinguisher_cabinet{ +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"og" = ( +/obj/machinery/atmospherics/miner/toxins, +/obj/machinery/light/small, +/turf/open/floor/plating/airless, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oh" = ( +/obj/machinery/firealarm{ + dir = 8; pixel_x = -26 }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"cV" = ( +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"oi" = ( +/obj/structure/chair/office/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"oj" = ( /obj/structure/table/reinforced, /obj/item/device/radio/intercom{ broadcasting = 1; @@ -1267,455 +5806,277 @@ name = "Pirate Radio Broadcast Channel" }, /turf/open/floor/plasteel/vault{ + dir = 5 + }, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ok" = ( +/obj/structure/chair{ dir = 8 }, -/area/ruin/powered/syndicate_lava_base) -"cW" = ( -/obj/structure/sign/fire{ - pixel_x = -32 - }, -/turf/open/floor/engine, -/area/ruin/powered/syndicate_lava_base) -"cX" = ( -/obj/structure/table/reinforced, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/signaler, -/obj/item/device/assembly/voice, -/obj/item/device/assembly/voice, -/obj/item/screwdriver/nuke, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"cY" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/plasteel{ - amount = 15 - }, -/obj/item/device/electropack, -/obj/item/device/taperecorder, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"cZ" = ( -/obj/structure/filingcabinet/security, -/obj/machinery/light{ - dir = 8 +/obj/structure/cable/yellow, +/obj/machinery/power/apc{ + dir = 2; + name = "Telecommunications APC"; + pixel_y = -24; + req_access = 150 }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ruin/powered/syndicate_lava_base) -"da" = ( +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ol" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/clothing/suit/space/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate, +/obj/item/device/mining_scanner, +/obj/item/pickaxe, +/turf/open/floor/mineral/plastitanium, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"om" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"on" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -29 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oo" = ( +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"op" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 + }, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oq" = ( +/obj/machinery/button/door{ + id = "lavalandsyndi_arrivals"; + name = "Arrivals Blast Door Control"; + pixel_y = -26; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"or" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/belt/medical, +/obj/effect/decal/cleanable/dirt, +/obj/item/crowbar, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"os" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/medical{ + name = "SyndiMed Plus"; + req_access_txt = "150" + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"ot" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/glass{ + autoclose = 0; + frequency = 1449; + heat_proof = 1; + id_tag = "syndie_lavaland_incinerator_exterior"; + locked = 1; + name = "Turbine Exterior Airlock"; + req_access_txt = "150" + }, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/engineering) +"ou" = ( +/obj/machinery/computer/message_monitor{ + dir = 1 + }, +/obj/item/paper/monitorkey, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ov" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/telecomms) +"ow" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"ox" = ( +/obj/structure/grille, +/obj/structure/window/plastitanium, +/obj/machinery/door/firedoor, +/obj/machinery/door/poddoor{ + id = "lavalandsyndi_arrivals" }, -/area/ruin/powered/syndicate_lava_base) -"db" = ( -/obj/machinery/computer/message_monitor, -/obj/item/paper/monitorkey, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oy" = ( +/turf/closed/wall/mineral/plastitanium/explosive, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"oz" = ( +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/area/ruin/powered/syndicate_lava_base) -"dd" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/open/floor/plasteel/vault{ - dir = 5 +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oA" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/area/ruin/powered/syndicate_lava_base) -"de" = ( -/obj/machinery/button/door{ - id = "lavalandsyndi"; - name = "Syndicate Experimentor Lockdown Control"; - pixel_x = 26; - req_access_txt = "150" +/obj/machinery/igniter{ + id = "syndie_lavaland_Incinerator"; + luminosity = 2; + on = 0 }, -/turf/open/floor/engine, -/area/ruin/powered/syndicate_lava_base) -"df" = ( -/obj/machinery/button/door{ - id = "lavalandsyndi"; - name = "Syndicate Experimentor Lockdown Control"; - pixel_x = -26; - req_access_txt = "150" +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oB" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1; + frequency = 1441; + id = "syndie_lavaland_inc_in" }, -/area/ruin/powered/syndicate_lava_base) -"dg" = ( -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 30 +/obj/structure/sign/vacuum{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + name = "EXTERNAL AIRLOCK"; + pixel_y = -32 }, -/obj/item/stack/rods/fifty, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 4 +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oC" = ( +/obj/machinery/door/poddoor{ + id = "syndie_lavaland_auxincineratorvent"; + name = "Auxiliary Incinerator Vent" }, -/area/ruin/powered/syndicate_lava_base) -"dh" = ( -/obj/structure/filingcabinet/medical, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/area/ruin/powered/syndicate_lava_base) -"di" = ( -/turf/open/floor/circuit/green, -/area/ruin/powered/syndicate_lava_base) -"dj" = ( -/obj/machinery/door/poddoor/preopen{ - id = "lavalandsyndi"; - name = "Syndicate Research Experimentor Shutters" +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oD" = ( +/obj/structure/sign/xeno_warning_mining{ + pixel_x = -32 }, -/obj/machinery/door/airlock/hatch{ - name = "Experimentation Room"; - req_access_txt = "150" +/obj/structure/sign/fire{ + pixel_x = 32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oE" = ( +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2"; + pixel_y = 1 }, -/area/ruin/powered/syndicate_lava_base) -"dk" = ( -/obj/item/stack/sheet/metal/fifty, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade, -/obj/structure/table/reinforced, -/obj/item/grenade/chem_grenade, -/obj/item/grenade/chem_grenade/large, -/obj/item/grenade/chem_grenade/large, -/obj/item/grenade/chem_grenade/large, -/obj/item/grenade/chem_grenade/large, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/machinery/power/compressor{ + comp_id = "syndie_lavaland_incineratorturbine"; + dir = 1; + luminosity = 2 }, -/area/ruin/powered/syndicate_lava_base) -"dl" = ( -/obj/machinery/door/airlock/hatch{ - name = "Self Destruct Control"; - req_access_txt = "150" +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oF" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oG" = ( +/obj/structure/cable, +/obj/machinery/power/turbine{ + dir = 2; + luminosity = 2 }, -/area/ruin/powered/syndicate_lava_base) -"dm" = ( -/obj/machinery/telecomms/relay/preset/ruskie{ - use_power = 0 +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oH" = ( +/obj/machinery/door/poddoor{ + id = "syndie_lavaland_turbinevent"; + name = "Turbine Vent" }, -/area/ruin/powered/syndicate_lava_base) -"dn" = ( -/obj/machinery/door/airlock/hatch{ - name = "Syndicate Recon Outpost"; - req_access_txt = "150" +/turf/open/floor/engine{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" }, -/obj/structure/fans/tiny, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"do" = ( -/turf/open/floor/circuit/red, -/area/ruin/powered/syndicate_lava_base) -"dp" = ( -/obj/machinery/door/airlock/hatch{ - name = "Monkey Pen"; - req_access_txt = "150" - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"dq" = ( +/area/ruin/unpowered/syndicate_lava_base/engineering) +"oI" = ( /obj/structure/sign/vacuum{ pixel_x = -32 }, /obj/machinery/light/small{ - brightness = 3; dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plating, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oJ" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/engine, +/area/ruin/unpowered/syndicate_lava_base/testlab) +"oK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/area/ruin/powered/syndicate_lava_base) -"dr" = ( -/obj/structure/sign/xeno_warning_mining{ - pixel_x = 32 - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"ds" = ( -/obj/machinery/syndicatebomb/self_destruct, -/turf/open/floor/circuit/red, -/area/ruin/powered/syndicate_lava_base) -"dt" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/mob/living/carbon/monkey, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"fJ" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"fK" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/wood, -/area/ruin/powered/syndicate_lava_base) -"fL" = ( -/obj/machinery/light{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4; + piping_layer = 3; + pixel_x = 5; + pixel_y = 5 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"fM" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/obj/machinery/light/small, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"fN" = ( -/obj/machinery/light/small, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"fP" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"fQ" = ( -/obj/structure/bed/roller, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"fR" = ( -/obj/machinery/light{ - dir = 4 +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/main) +"oL" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/syndicate_lava_base/bar) +"oM" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel, +/area/ruin/unpowered/syndicate_lava_base/medbay) +"oN" = ( +/obj/effect/baseturf_helper/lava_land/surface, +/turf/open/floor/plasteel/red/side, +/area/ruin/unpowered/syndicate_lava_base/arrivals) +"oO" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -26 }, /turf/open/floor/plasteel/dark, -/area/ruin/powered/syndicate_lava_base) -"fS" = ( -/obj/machinery/iv_drip, -/obj/item/reagent_containers/blood/random, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"fT" = ( -/obj/machinery/light/small{ - brightness = 3; - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"fU" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"fV" = ( -/obj/machinery/light/small, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/ruin/powered/syndicate_lava_base) -"fX" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"fZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/ruin/powered/syndicate_lava_base) -"ga" = ( -/obj/machinery/light/small, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"ge" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ruin/powered/syndicate_lava_base) -"gi" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/circuit/green, -/area/ruin/powered/syndicate_lava_base) -"gk" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/circuit/red, -/area/ruin/powered/syndicate_lava_base) -"gl" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/circuit/red, -/area/ruin/powered/syndicate_lava_base) -"gm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"go" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gr" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gs" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gt" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gw" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gC" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) -"gD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/mineral/plastitanium, -/area/ruin/powered/syndicate_lava_base) +/area/ruin/unpowered/syndicate_lava_base/bar) +"oP" = ( +/obj/structure/sign/chemistry, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_lava_base/testlab) (1,1,1) = {" aa @@ -1723,8 +6084,10 @@ aa aa aa aa -ab -ab +aa +aa +aa +aa ab ab ab @@ -1754,6 +6117,11 @@ ab ab ab ab +ab +aa +aa +aa +aa aa aa "} @@ -1762,6 +6130,9 @@ aa aa aa aa +aa +aa +aa ab ab ab @@ -1795,10 +6166,19 @@ ab ab ab ab +ab +ab +aa +aa aa "} (3,1,1) = {" aa +aa +aa +aa +ab +aa ab ab ab @@ -1836,9 +6216,12 @@ ab ab ab ab +ab +aa "} (4,1,1) = {" aa +aa ab ab ab @@ -1870,73 +6253,26 @@ ab ab ab ab +mn +mn +mn +mn +mn ab ab ab ab ab aa +aa "} (5,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(6,1,1) = {" aa ab ab ab ab ab -ac -ab -ab -ab -ab -ab -ac -ab -ab -ab -ac -ac -ac ab ab ab @@ -1956,6 +6292,73 @@ ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +mn +mn +mM +nh +mM +mn +mn +ab +ab +ab +ab +ab +aa +"} +(6,1,1) = {" +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mn +mM +mM +ni +mM +mM +mn +ab +ab +ab +ab +aa +aa "} (7,1,1) = {" aa @@ -1969,6 +6372,12 @@ ab ab ab ab +eh +eh +eh +eh +gj +eh ab ab ab @@ -1978,26 +6387,29 @@ ab ab ab ab -ac -ab -ac -ac -ab -ab -ab -ac -ab -ac -ac -ac -ac ab ab ab ab ab +ab +mn +mo +mN +nj +mn +mn +mn +ab +ab +ab +ab +ab +aa "} (8,1,1) = {" +aa +ab ab ab ab @@ -2007,37 +6419,44 @@ ab ab ab ac -ac -ac -ab -ab -ac -ac -ac -ac -ab -ac -ac -ab -ab -ac -ad -ad -ad -ad -ad -ad -ae -ad -ad -ac +eh +eG +ff +eI +go +eh +eh +eh +eh ab ab ab ab ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mP +ni +nH +oh +mn +mn +ab +ab +ab +ab +aa "} (9,1,1) = {" +aa +aa ab ab ab @@ -2046,31 +6465,36 @@ ab ab ab ab -ac -ad -ad -ad -ad -ad -ae -ad -ad -ad -ad -ad -ad -ae -ad -ad -cG -ge -cG -cW -cG -ge -cG -ad -ac +ab +eh +eH +fg +fy +gp +eI +hp +hE +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mP +nk +nI +oi +ou +mn ab ab ab @@ -2087,30 +6511,37 @@ ab ab ab ab -ad -aq -aq -aq -aY -fP -gm -bz -bJ -bN -bV -cf -cl -cu -ad -cG -cG -cG -cG -cG -cG -cG -ad ab +ac +eh +eI +eI +eI +gq +gT +hq +hF +eh +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +mp +mQ +nl +nJ +oj +ov +mn ab ab ab @@ -2118,44 +6549,51 @@ ab ab "} (11,1,1) = {" +aa +ab +ab +ab +ab ab ab ab ab ab ac +eh +eG +fh +eI +gr +eI +hr +hG +eh ab ab ab -ad -aq -aQ -aO -aO -aO -aO -bA -aO -aq -aq -cg -aq -aq -cD -cG -cG -cG -cG -cG -cG -cG -ad ab ab ab ab ab ab +ab +ab +ab +ab +mp +mR +nm +nK +ok +mn +mn +ab +ab +ab +ab +ab "} (12,1,1) = {" ab @@ -2165,31 +6603,38 @@ ab ab ab ab -ac -ac -ad -aq -fL -aq -aZ -aq -gn -bz -bK -aq -bW -ad -aS -aq -ad -cG -cG -cG -cG -cG -cG -cG -ad +ab +ab +ab +ab +eh +eH +fg +fz +gs +eh +gj +eh +eh +ab +ab +ab +ab +ab +ab +dG +dG +dG +dG +dG +dG +lS +mn +mo +mn +nL +mn +mn ab ab ab @@ -2204,33 +6649,40 @@ ab ab ab ab -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -bu -cg -ad -cG -cG -cG -cG -cG -cG -cG -ad -ac +ab +ab +ab +ab +ab +eh +eh +eI +eI +gt +gU +hs +hH +ab +ab +ab +ab +ab +ab +dG +dG +ig +iu +iu +iu +lv +lT +mq +mS +nn +nM +mT +mT +ab ab ab ab @@ -2244,33 +6696,40 @@ ab ab ab ab -ad -ao -aw -aA -aJ -aR -aU -ba -ad -bh -bB -aS -fS -bO -cf -cm -gm -ad -cG -cG -cG -cG -cG -cG -cG -ad +ab +ab +ab +ab +ab ac +eh +fi +fA +gu +gV +ht +hH +ab +ab +ab +ab +ab +dG +dG +ig +je +iv +jk +le +lw +lT +mr +mS +nn +nN +ol +mT +ab ab ab ab @@ -2284,34 +6743,41 @@ ab ab ab ab -ad -ap -aq -ap -aq -aq -ap -aq -ad -bi -bC -aq -ap -aq -ch -cn -cw -ad -cG -cG -cG -cG -de -cG -cG -ad -ac -ac +ab +ab +ab +ab +ab +ei +eJ +fj +fB +gv +gW +hu +hH +ab +ab +ab +ab +dG +dG +ig +je +jk +jx +jx +jP +jy +jy +ms +mT +no +nN +ol +ow +ab +ab ab ab ab @@ -2323,35 +6789,42 @@ ab ab ab ab +ab +ac +ab +ac ac -ad -aq -ap -aq -ap -ap -aq -ap -ad -bj -bD -aq -aq -aq -ci -cn -cx -ad -cf -cD -cD -cD -ad -dj -ad ae -ad -ad +ae +aL +ae +fC +gw +gX +hv +hH +ab +ab +ab +dG +dG +ig +je +jk +jx +jx +kG +lf +lx +jy +jy +jy +np +nO +mT +mT +mT +oF ab ab ab @@ -2362,36 +6835,43 @@ ab ab ab ab -ab -ac -ad -ar -ax -aB -ad -aS -aq -bb -ad -bk -bE -aq -bP -bX -ad -fX -ga ae -aS -cL -bF -cX -df -aq -cU -bu -dt +ae +ae +aL +ae +ae +ae +ej +eK +ae +fD ad +eh +gj +eh +hW +dG +dG +dG +ig +je +iv +jx +jx +kn +kH +jN +jZ +lU +mt +mU +np +nP +mS +oI +oD +lT ab ab ab @@ -2401,37 +6881,44 @@ ab ab ab ab -ab -ab -ad -ad -ad -ad -ad -ad -ad -aV -ad ae -bl -bE -aq -bQ -bY -bu -cn -cw -cE +ae aq aq aq +dc aq -aq -aq -aq -dp -aO -ad +dQ +ek +eL +ae +fE +gy +gY +hw +hI +hX +ig +iu +iu +je +jk +jx +jx +jN +jZ +jN +jZ +jN +jZ +kn +mU +nq +nQ +mT +mT +mT +oF ab ab ab @@ -2441,37 +6928,44 @@ ab ab ab ab -ab -ab -ad -af -as -fJ -aC -aK -aq +ae ap -bc -ad -bm -bF -bL -bR -bZ -ad -cn -cw -cf aq -fL -cT -cY -dg -dk -aS -bu -dt -ad +aq +aq +aq +aq +dR +el +eM +ae +fF +gz +gZ +hw +hJ +hY +ih +iv +iM +iv +iv +jx +jL +jY +jN +kI +lg +ly +lV +mu +mU +nr +nR +om +mT +ab +ab ab ab ab @@ -2481,37 +6975,44 @@ ab ab ab ab -ab -ab -ad -ag -as -as -aD -aL -ap +ae aq -bd -ad -ad -bu -bu -bu -ad -ad -cn -cw -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cf +aq +aq +oJ +aq +aq +ae +em +eN +ae +ae +gA +ha +ha +hK +ha +ha +ha +iN +ha +ha +jy +jM +jN +oL +kJ +lh +lz +lW +mv +jy +jy +nS +on +ow +ab +ab ab ab ab @@ -2521,37 +7022,44 @@ ab ab ab ab +ae +aq +aq +aq +aq +aq +aq +dS +eo +eO +fk +ae +gB +hb +ha +ha +ha +ii +iw +iO +hB +jl +jz +jN +jZ +ko +kK +li +lA +lX +mw +mV +jy +nu +oo +ox ab ab -ad -ah -as -as -aE -aM -aq -ap -aq -bg -bn -go -go -go -fT -go -co -cy -go -fT -go -go -fT -go -gm -dn -dq -aO -dn ab ab ab @@ -2561,37 +7069,44 @@ ab ab ab ab -ab -ab ae -ad -as -as -aF -aL ap aq -ap -bg -bo -gp -gp -gp -fU -gp -cp -cz -gp -fU -gp -gp -fU -gp -gn -dn -dr -aO -dn +aq +aq +aq +aq +dS +ep +eP +fl +fG +gE +hc +hx +hL +hZ +ij +ix +iP +hd +jm +jz +jO +jN +kp +kL +lj +lB +lY +lA +mW +jy +nT +op +ox +ab +ab ab ab ab @@ -2601,37 +7116,44 @@ ab ab ab ab -ab -ab -ad -ai -as -as -aG -ap +ae +ae aq -ap -fM -ad -ad -bu -bu -bu -ad -ad -cn -cw -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -cf +aq +aq +di +aq +dS +eq +eQ +ae +dQ +gF +hd +hy +hy +ia +ik +if +iQ +hz +hz +jy +jy +ka +kq +kM +lk +lC +lZ +mx +jy +jy +nU +oN +ox +ab +ab ab ab ab @@ -2642,35 +7164,42 @@ ab ab ab ab +ae +ae +ae +aL +ae +ae +ae +ae +ae +oP +fH +gG +he +hz +hz +hz +hz +iy +iR +hz +jn +jA +jP +jy +jy +jy +jy +lD +ma +jy +jy +ns +nV +oo +ox ab -ad -aj -as -fK -aH -aq -ap -aq -be -ad -bp -bG -bM -bS -ca -cj -cn -cw -ae -aS -aq -cU -cZ -dh -ae -ac -ac -ac ab ab ab @@ -2683,33 +7212,40 @@ ab ab ab ab -ad -ad -ad -ad -ad -ad -ad -aT -ad -ad -bq -bH -aq -aq -cb -ck -cn -cw -cF -aq -ap -ap -ap -aq -ad ac ac +as +do +dA +dT +er +eR +fm +fI +gH +he +hz +hM +ib +hz +iz +iS +jf +jo +jB +hz +kb +jy +kN +jZ +lE +mb +my +jy +nt +nW +oq +mT ab ab ab @@ -2723,35 +7259,42 @@ ab ab ab ab -ad -ak -at -ay -aI -aN -ad -aq -aS -ad -br -aq -ap -aq -bP -ad -fX -ga -cf -aq -cM -cV -da -aq -ad -ad -ad -ad -ad +ab +as +as +du +dB +dU +es +eS +fn +fO +gG +hf +hz +hN +ic +il +iA +iT +hz +hz +hz +hz +kc +kr +kO +ll +lF +mc +jy +jy +nu +nX +om +ow +ab +ab ab ab ab @@ -2763,35 +7306,42 @@ ab ab ab ab -ad -al -au -au -au -aO -aT -aq -fN -ad -bs -aq -ap -aq -cc -bu -cn -cw -ad -cH -cN -bH -db -aq -ad -aq -gk -aq -ad +ab +at +aM +dv +dC +dV +et +eT +fo +fO +oK +hg +hz +hO +hz +hz +iB +iU +jg +jp +jp +jQ +kd +jy +jy +jy +jy +jP +jy +mX +nv +nY +mT +mT +ab +ab ab ab ab @@ -2803,35 +7353,42 @@ ab ab ab ab -ad -ad -ad -ae -ad -ad -ad -aq -aq -ad -bt -aq -ap -bT -cd -bu -cn -cw -ad -aq -cO -aq -aq -aq -dl -do -ds -do -ad +ab +at +cA +dw +dD +dX +eu +eU +fn +fH +gG +he +hA +hz +id +im +iC +iV +hz +hz +hz +hz +ke +jQ +jQ +jQ +jp +jp +mz +mY +nw +nZ +mT +ab +ab +ab ab ab ab @@ -2843,35 +7400,42 @@ ab ab ab ab -ad -am -au -au -au -aO -aT -aq -fN -ae -bu -bu -ap -bx -bx -ae -cq -gn -ad -cI -cP -aO -aO -bK -ad -aq -gl -aq -ad +ab +at +cG +dx +dE +dY +ev +eV +fp +fH +gI +he +hz +hz +hz +hz +iD +iW +jh +jo +jC +hz +kf +ks +kP +kQ +kQ +kQ +kQ +kT +nx +kR +kQ +kQ +ab +ab ab ab ab @@ -2883,35 +7447,42 @@ ab ab ab ab -ad -an -av -az -av -aP -ad -aq -aS -ad -bv -bI -ap -bI -fV -ad -cr -cB -ad -ad -ad -ad -cF -ad -ad -ad -ad -ad -ad +ab +as +cO +as +dI +dZ +ew +as +cO +as +gJ +hh +hz +hP +ic +in +iE +iX +hz +jq +jA +hO +kg +kt +kQ +kQ +lG +md +mA +mZ +ny +oa +or +kQ +ab +ab ab ab ab @@ -2923,34 +7494,41 @@ ab ab ab ab -ad -ad -ad -ad -ad -ad -ad -aW -ad -ad -bw -bx -ap -bx -ce -ad -cs -aq -aq -cJ -cQ -ad -aq -di -di -ad ab ab +ac +cO +as +as +as +as +fq +dy +gK +he +hz +hQ +ie +hz +iF +iY +hz +hz +hz +hz +kh +ha +kQ +lm +lH +me +mB +na +nz +ob +os +oy +ac ab ab ab @@ -2958,7 +7536,7 @@ ab ab "} (32,1,1) = {" -ab +aa ab ab ab @@ -2966,69 +7544,83 @@ ab ab ab ac +dy +dK +ea +ex +eW +fr +fW +gL +he +hz +hz +hz +hz +hO +hz +hz +jr +jD +jR +iQ +ku +kR +ln +lI +oM +mC +lI +nA +oc +kQ +kQ ac ab -ac -ad -aX -bf -ad -bx -bx -ap -bx -bx -ad -fZ -aq -aq -aq -cR -ad -dd -di -dm -ad -ab -ab -ab ab ab ab ab "} (33,1,1) = {" +aa ab ab ab ab ab -ac ab ab -ab -ab -ab -ad -ad -ad -ad -fQ -bI -ap -bU -fV -ad -ct -cC -ct -cK -cS -ad -aq -gi -di -ad +dy +dL +eb +ey +eX +fs +fa +gM +hi +hB +hB +hB +ag +iG +iZ +ji +js +jE +jS +ki +kv +kS +ln +lJ +mf +mD +lI +nB +kQ +kQ ac ab ab @@ -3038,39 +7630,46 @@ ab ab "} (34,1,1) = {" +aa +aa ab ab ab ab ab ab -ab -ab -ab -ac +dy +dM +ec +ez +eY +ft +dy +gN +hj +hj +hR +af +ip +iH +ja +jj +jj +gI +if +kj +kw +kT +lo +lK +kQ +mE +nb +nC +kQ ac ab ab -ac -ad -by -bx -fR -bx -ce -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ac -ab ab ab ab @@ -3078,87 +7677,100 @@ ab ab "} (35,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ad -ad -ad -ad -ad -ad -ad -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa +ab +ab +ab +ab +ab +ab +ab +dy +dy +ed +ey +eZ +dy +dy +gO +hk +hC +dy +ha +iq +iI +iq +ha +jt +jF +jT +ju +ju +kU +ju +ju +ju +ju +ju +kU +ju +ju +ju +ju +ab +ab +ab +ab +ab "} (36,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab aa +ab +ab +ab +ab +ab +ab +ab +ac +dy +dP +eA +fa +dy +fY +gP +gQ +hl +hS +ha +ir +iJ +jb +ha +ju +jG +jU +ju +kx +kV +lp +lL +mg +mF +nc +ju +od +ju +oz +ju +ju +nf +ab +ab +ab "} (37,1,1) = {" -aa ab ab ab @@ -3168,36 +7780,373 @@ ab ab ab ab +dy +ee +eB +fb +fu +gb +gQ +hl +gQ +hT +ha +is +iK +jc +ha +jv +jH +jV +ju +ky +kW +lq +lM +mh +mG +nd +nD +oe +ot +oA +oE +oG +oH ab ab ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa "} (38,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +ef +eC +fc +fv +fv +gR +hm +hl +hU +ha +it +iL +jd +ha +jw +jI +jW +kk +kz +kX +lr +lN +mi +mH +ne +nE +of +nE +oB +ju +ju +nf +ab +ab +ab +"} +(39,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +eg +eD +fd +fw +gc +gS +hn +gQ +hV +ha +ha +ha +ha +ha +ju +jJ +jX +kl +kA +kY +ls +lO +mj +mI +nf +ju +ju +ju +oC +nf +ab +ab +ab +ab +ab +"} +(40,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +dy +eE +fe +dy +gd +dy +ho +hD +dy +dy +ac +ab +ab +ab +ac +jK +ju +km +kB +kZ +lt +lt +mk +mJ +ng +nF +ld +ju +ab +ab +ab +ab +ab +ab +ab +"} +(41,1,1) = {" +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +eF +eF +dP +gf +dy +eF +eF +dy +ab +ab +ab +ab +ab +ab +ab +ju +ju +kC +la +lu +lP +ml +mK +kD +nG +og +ju +ab +ab +ab +ab +ab +ab +ab +"} +(42,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +dy +gg +dy +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +kD +lb +kU +kD +lb +ju +ju +ju +ju +ju +ab +ab +ab +ab +ab +ab +aa +"} +(43,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +fx +gh +fx +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +kE +lc +ju +lQ +mm +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(44,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ju +kF +ld +ju +lR +ld +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(45,1,1) = {" aa aa ab @@ -3225,6 +8174,154 @@ ab ab ab ab +ju +ju +ju +ju +ju +ju +ju +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(46,1,1) = {" +aa +aa +aa +aa +ab +ab +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(47,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +aa +"} +(48,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab ab ab ab diff --git a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm index 1da57dc70a..b3d02e85cd 100644 --- a/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm +++ b/_maps/RandomRuins/SpaceRuins/bigderelict1.dmm @@ -498,7 +498,7 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/derelictoutpost/cargobay) "by" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "innerbrig"; name = "Security Checkpoint"; req_access_txt = "63" diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index 9ff1aad4c6..cceb58a95d 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -19,43 +19,31 @@ name = "Asteroid - Space" }) "af" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/kitchen) "ag" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/crusher) "ah" = ( /obj/structure/kitchenspike, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ai" = ( /obj/structure/closet/secure_closet/freezer/meat, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aj" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "ak" = ( /obj/machinery/conveyor{ dir = 4; id = "bunkerrecycle" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "al" = ( /obj/machinery/conveyor{ @@ -65,9 +53,7 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "am" = ( /obj/machinery/recycler/deathtrap, @@ -75,9 +61,7 @@ dir = 4; id = "bunkerrecycle" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "an" = ( /obj/machinery/conveyor{ @@ -85,9 +69,7 @@ id = "bunkerrecycle"; movedir = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "ao" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -96,46 +78,34 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ap" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 10 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ar" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, /obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "as" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "at" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "au" = ( /obj/machinery/conveyor_switch{ @@ -144,9 +114,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "av" = ( /obj/structure/window/plasma/reinforced{ @@ -157,62 +125,45 @@ id = "bunkerrecycle"; movedir = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aw" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "ax" = ( /obj/machinery/processor{ name = "processor" }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "ay" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "az" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aA" = ( /obj/machinery/gibber, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aB" = ( /obj/structure/table, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aC" = ( /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aD" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aE" = ( /obj/structure/cable/yellow{ @@ -223,9 +174,7 @@ name = "Recycling APC"; pixel_y = -24 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aF" = ( /obj/machinery/conveyor{ @@ -236,9 +185,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "aG" = ( /obj/structure/closet/cardboard, @@ -345,18 +292,14 @@ /area/ruin/space/has_grav/deepstorage/storage) "aM" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/kitchen) "aN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock{ name = "Freezer" }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage/kitchen) "aO" = ( /obj/machinery/door/airlock/highsecurity{ @@ -366,23 +309,17 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/crusher) "aP" = ( /obj/machinery/door/airlock/highsecurity{ name = "Recycling Room"; req_access_txt = "200" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/crusher) "aQ" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/hydroponics) "aR" = ( /obj/structure/closet/cardboard, @@ -466,9 +403,7 @@ }, /obj/item/storage/box/cups, /obj/item/reagent_containers/glass/beaker, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "aY" = ( /obj/structure/table, @@ -482,9 +417,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "aZ" = ( /obj/structure/table, @@ -497,9 +430,7 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "ba" = ( /obj/structure/table, @@ -512,30 +443,22 @@ dir = 9 }, /obj/item/kitchen/knife, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bc" = ( /obj/structure/sink/kitchen{ pixel_y = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bd" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "be" = ( /obj/structure/cable/yellow{ @@ -544,17 +467,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bf" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bg" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -562,9 +481,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "bh" = ( /obj/structure/table, @@ -573,9 +490,7 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bi" = ( /obj/machinery/vending/hydronutrients, @@ -585,9 +500,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bj" = ( /obj/machinery/vending/hydroseeds{ @@ -596,18 +509,14 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bk" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bl" = ( /obj/machinery/hydroponics/constructable, @@ -617,57 +526,43 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bm" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bp" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 6 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bq" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "br" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bs" = ( /obj/structure/closet/secure_closet/freezer/kitchen{ @@ -677,38 +572,28 @@ dir = 4 }, /obj/item/storage/box/drinkingglasses, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bt" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bu" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bw" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bx" = ( /obj/structure/table, @@ -717,9 +602,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "by" = ( /obj/structure/cable/yellow{ @@ -728,35 +611,25 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bz" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bA" = ( /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "bB" = ( /obj/structure/table, /obj/item/cultivator, /obj/item/hatchet, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bC" = ( -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -766,52 +639,38 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bF" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bG" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bH" = ( /obj/structure/reagent_dispensers/watertank/high, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bI" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/item/storage/box/ingredients/wildcard, /obj/item/storage/box/ingredients/wildcard, /obj/item/storage/box/ingredients/wildcard, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bJ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -820,9 +679,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -831,9 +688,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -842,9 +697,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bN" = ( /obj/structure/cable/yellow{ @@ -855,16 +708,12 @@ name = "Kitchen APC"; pixel_y = -24 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bO" = ( /obj/machinery/light, /obj/machinery/vending/dinnerware, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bP" = ( /obj/structure/cable/yellow{ @@ -874,32 +723,24 @@ dir = 8; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "bQ" = ( /obj/machinery/door/airlock/public/glass{ name = "Hydroponics" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bR" = ( /obj/structure/sink{ dir = 4; pixel_x = 11 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "bS" = ( /obj/machinery/hydroponics/constructable, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "bT" = ( /obj/effect/turf_decal/delivery, @@ -915,9 +756,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bU" = ( /obj/effect/turf_decal/delivery, @@ -930,21 +769,15 @@ /obj/item/reagent_containers/food/snacks/beans, /obj/item/reagent_containers/food/snacks/beans, /obj/item/reagent_containers/food/snacks/beans, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "bX" = ( /obj/machinery/door/airlock/highsecurity{ @@ -952,9 +785,7 @@ req_access_txt = "200" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "bY" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -965,16 +796,12 @@ /obj/machinery/door/airlock/public/glass{ name = "Kitchen" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/cafeteria, /area/ruin/space/has_grav/deepstorage/kitchen) "bZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/smartfridge, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/kitchen) "ca" = ( /obj/structure/cable/yellow{ @@ -984,18 +811,14 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cb" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cc" = ( /obj/structure/cable/yellow{ @@ -1003,35 +826,27 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "cd" = ( /obj/structure/table, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "ce" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cf" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cg" = ( /obj/structure/cable/yellow{ @@ -1042,9 +857,7 @@ name = "Hydroponics APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "ch" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1052,15 +865,11 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "ci" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cj" = ( /obj/structure/noticeboard{ @@ -1069,9 +878,7 @@ /obj/item/paper/fluff/ruins/deepstorage/water_concern, /obj/item/paper/fluff/ruins/deepstorage/hydro_notice, /obj/item/paper/fluff/ruins/deepstorage/recycling_notice, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ck" = ( /obj/structure/chair{ @@ -1083,9 +890,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cl" = ( /obj/structure/table, @@ -1096,9 +901,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cm" = ( /obj/structure/table, @@ -1110,9 +913,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1122,40 +923,30 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "co" = ( /obj/structure/closet/crate/bin, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cp" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage) "cq" = ( /obj/machinery/shower{ dir = 4 }, /obj/item/soap, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cr" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, @@ -1164,9 +955,7 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "ct" = ( /obj/structure/cable/yellow{ @@ -1175,18 +964,14 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cu" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1194,9 +979,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/hydroponics) "cw" = ( /obj/structure/table, @@ -1209,18 +992,14 @@ pixel_y = 4 }, /obj/item/reagent_containers/glass/bucket, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cx" = ( /obj/machinery/seed_extractor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cy" = ( /obj/machinery/biogenerator, @@ -1228,27 +1007,21 @@ dir = 4 }, /obj/item/reagent_containers/glass/beaker/large, -/turf/open/floor/plasteel/hydrofloor{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/hydrofloor, /area/ruin/space/has_grav/deepstorage/hydroponics) "cz" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "cA" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "cB" = ( /obj/effect/turf_decal/delivery, @@ -1261,9 +1034,7 @@ /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, /obj/item/reagent_containers/glass/beaker/waterbottle/large, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cC" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1272,9 +1043,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cD" = ( /obj/machinery/door/airlock/highsecurity{ @@ -1287,9 +1056,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cE" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1299,74 +1066,54 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cF" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cG" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 10 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cH" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cI" = ( /obj/structure/table, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cJ" = ( /obj/structure/table, /obj/item/kitchen/fork, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cK" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/vending/coffee, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cM" = ( /obj/machinery/shower{ dir = 4 }, /obj/structure/window/plasma/reinforced, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cN" = ( -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cO" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1377,18 +1124,14 @@ /obj/structure/mirror{ pixel_x = 24 }, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cQ" = ( /obj/structure/cable/yellow, @@ -1397,9 +1140,7 @@ name = "Storage APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "cR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1407,20 +1148,14 @@ icon_state = "1-2" }, /obj/machinery/computer/arcade, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cS" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "cT" = ( -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cU" = ( /obj/structure/chair{ @@ -1429,9 +1164,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cV" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -1440,9 +1173,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1451,30 +1182,22 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/bar{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/bar, /area/ruin/space/has_grav/deepstorage) "cX" = ( /obj/structure/toilet{ dir = 4 }, /obj/structure/curtain, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "cZ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "da" = ( /obj/structure/cable/yellow{ @@ -1482,9 +1205,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "db" = ( /obj/structure/table, @@ -1492,9 +1213,7 @@ /obj/item/device/healthanalyzer, /obj/item/stack/medical/gauze, /obj/item/stack/medical/gauze, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dc" = ( /obj/structure/table, @@ -1503,9 +1222,7 @@ pixel_y = 4 }, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dd" = ( /obj/structure/table, @@ -1517,30 +1234,22 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "de" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "df" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "dh" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, @@ -1548,9 +1257,7 @@ icon_state = "1-4" }, /obj/machinery/computer/arcade, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "di" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1560,9 +1267,7 @@ icon_state = "4-8" }, /obj/structure/chair/stool, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dj" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1575,9 +1280,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1586,9 +1289,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dl" = ( /obj/structure/cable/yellow{ @@ -1597,17 +1298,13 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dm" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dn" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1617,9 +1314,7 @@ /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "do" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1627,24 +1322,18 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage) "dq" = ( /obj/machinery/door/airlock{ name = "Showers" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/freezer{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/freezer, /area/ruin/space/has_grav/deepstorage) "dr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -1654,9 +1343,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ds" = ( /obj/structure/cable/yellow{ @@ -1667,20 +1354,14 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "dt" = ( -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "du" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dv" = ( /obj/structure/table, @@ -1695,9 +1376,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dw" = ( /obj/effect/turf_decal/delivery, @@ -1716,9 +1395,7 @@ /obj/item/vending_refill/coffee, /obj/item/vending_refill/cigarette, /obj/item/vending_refill/cigarette, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dx" = ( /obj/effect/turf_decal/delivery, @@ -1734,38 +1411,28 @@ /obj/item/vending_refill/coffee, /obj/item/vending_refill/cigarette, /obj/item/vending_refill/cigarette, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/storage) "dz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/storage) "dA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dB" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dC" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -1775,17 +1442,13 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1794,17 +1457,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dF" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1814,15 +1473,11 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -1831,33 +1486,25 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dJ" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/machinery/door/firedoor, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dL" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dM" = ( /obj/machinery/door/airlock/highsecurity{ @@ -1867,25 +1514,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dP" = ( /obj/structure/table, @@ -1900,15 +1541,11 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "dQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "dR" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1917,9 +1554,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "dS" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1932,26 +1567,20 @@ /obj/machinery/door/airlock/public/glass{ name = "Dorms" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "dT" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dU" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dV" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1964,9 +1593,7 @@ pixel_y = -24 }, /obj/effect/turf_decal/stripes/corner, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dW" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, @@ -1974,9 +1601,7 @@ icon_state = "1-4" }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dX" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -1985,9 +1610,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dY" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -1999,9 +1622,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "dZ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2011,18 +1632,14 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ea" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eb" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2032,9 +1649,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ec" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2050,18 +1665,14 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ed" = ( /obj/machinery/atmospherics/pipe/manifold4w/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ee" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2074,9 +1685,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ef" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -2085,17 +1694,13 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eg" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eh" = ( /obj/structure/table, @@ -2110,15 +1715,11 @@ name = "Armory APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ei" = ( /obj/structure/dresser, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ej" = ( /obj/structure/table/wood, @@ -2126,9 +1727,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ek" = ( /obj/structure/bed, @@ -2136,35 +1735,27 @@ dir = 4 }, /obj/item/bedsheet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "el" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "em" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "en" = ( /obj/machinery/door/airlock/highsecurity{ name = "Canister Storage"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eo" = ( /obj/machinery/door/poddoor{ @@ -2172,23 +1763,17 @@ }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ep" = ( /obj/machinery/door/poddoor{ id = "bunkerinterior" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eq" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "er" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2199,15 +1784,11 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "es" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "et" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -2220,9 +1801,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eu" = ( /obj/structure/cable/yellow{ @@ -2233,25 +1812,19 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "ev" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ew" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ex" = ( /obj/structure/table, @@ -2265,9 +1838,7 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_x = 32 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "ey" = ( /obj/structure/closet/cabinet, @@ -2276,9 +1847,7 @@ icon_state = "centcom"; name = "bunker access ID" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "ez" = ( /obj/structure/chair/stool, @@ -2286,17 +1855,13 @@ dir = 4 }, /obj/machinery/light/small, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eA" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eB" = ( /obj/machinery/door/airlock{ @@ -2306,9 +1871,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "eC" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -2317,14 +1880,10 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "eD" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eE" = ( /obj/machinery/portable_atmospherics/canister/oxygen, @@ -2332,9 +1891,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eF" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2344,9 +1901,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eG" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2355,17 +1910,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "eI" = ( /obj/structure/table, @@ -2398,9 +1949,7 @@ network = list("Bunker1"); pixel_y = 2 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eJ" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2413,9 +1962,7 @@ /obj/structure/cable/yellow{ icon_state = "1-4" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eK" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2428,9 +1975,7 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eL" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -2444,17 +1989,13 @@ name = "Airlock Control APC"; pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eM" = ( /obj/structure/cable/yellow, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/armory) "eN" = ( /obj/structure/table, @@ -2465,9 +2006,7 @@ /obj/item/storage/firstaid/toxin, /obj/item/storage/pill_bottle/charcoal, /obj/machinery/light, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eO" = ( /obj/structure/table, @@ -2482,9 +2021,7 @@ /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eP" = ( /obj/structure/table, @@ -2503,9 +2040,7 @@ /obj/item/device/flashlight/flare{ pixel_y = 6 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/deepstorage/armory) "eQ" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2515,24 +2050,18 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "eR" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "eS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "eT" = ( /obj/machinery/door/poddoor/shutters/preopen{ @@ -2546,9 +2075,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/airlock) "eU" = ( /obj/structure/chair{ @@ -2557,9 +2084,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eV" = ( /obj/structure/cable/yellow{ @@ -2568,15 +2093,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eX" = ( /obj/machinery/atmospherics/components/binary/valve{ @@ -2586,9 +2107,7 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "eY" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2599,9 +2118,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "eZ" = ( /obj/machinery/door/airlock/highsecurity{ @@ -2609,41 +2126,31 @@ req_access_txt = "200" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fa" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "fb" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/armory) "fc" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "fd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 8 }, -/turf/open/floor/plating/airless/astplate{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless/astplate, /area/ruin/space/has_grav/deepstorage/power) "fe" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2654,22 +2161,16 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "ff" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "fg" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fh" = ( /obj/machinery/door/poddoor/shutters/preopen{ @@ -2678,47 +2179,35 @@ /obj/structure/cable/yellow, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/airlock) "fi" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fm" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fn" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, @@ -2730,20 +2219,14 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fo" = ( /obj/machinery/suit_storage_unit/syndicate, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fp" = ( -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "fq" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, @@ -2751,9 +2234,7 @@ dir = 4 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "fr" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -2763,17 +2244,13 @@ dir = 4 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fs" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/airlock) "ft" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ @@ -2783,27 +2260,21 @@ dir = 4; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fu" = ( /obj/machinery/atmospherics/pipe/simple/yellow/hidden{ dir = 4 }, /obj/machinery/light, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fv" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4; name = "Port To Hall" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fw" = ( /obj/machinery/portable_atmospherics/canister/nitrous_oxide, @@ -2811,9 +2282,7 @@ dir = 8 }, /obj/item/wrench, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/airlock) "fx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -2829,9 +2298,7 @@ pixel_x = -25; pixel_y = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fy" = ( /obj/machinery/atmospherics/components/trinary/mixer{ @@ -2841,26 +2308,20 @@ node2_concentration = 0.8; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fz" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fA" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fB" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ @@ -2868,9 +2329,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ @@ -2879,14 +2338,10 @@ id_tag = "o2_out_bunker"; name = "oxygen out" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fD" = ( -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fE" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -2896,9 +2351,7 @@ name = "Dormory APC"; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fF" = ( /obj/machinery/door/poddoor{ @@ -2906,30 +2359,22 @@ }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fG" = ( /obj/machinery/door/poddoor{ id = "bunkerexterior" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fH" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fI" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fJ" = ( /obj/machinery/computer/atmos_control/tank{ @@ -2940,66 +2385,50 @@ output_tag = "o2_out_bunker"; sensors = list("o2_sensor_bunker" = "Tank") }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "fK" = ( /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fL" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "o2_sensor_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fM" = ( /obj/machinery/atmospherics/miner/oxygen, /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "fN" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/dorm) "fO" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fP" = ( /obj/structure/closet/wardrobe/pjs, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "fQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fR" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3014,9 +2443,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fS" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3025,14 +2452,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fT" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fU" = ( /obj/machinery/camera{ @@ -3044,15 +2467,11 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fV" = ( /obj/structure/closet/emcloset, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "fW" = ( /obj/structure/cable/yellow{ @@ -3061,9 +2480,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fX" = ( /obj/structure/cable/yellow{ @@ -3075,9 +2492,7 @@ /obj/structure/sign/electricshock{ pixel_y = 32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fY" = ( /obj/effect/turf_decal/stripes/line{ @@ -3089,9 +2504,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "fZ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -3100,9 +2513,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "ga" = ( /obj/machinery/atmospherics/components/trinary/filter{ @@ -3110,17 +2521,13 @@ filter_type = "o2"; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gb" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gc" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ @@ -3128,9 +2535,7 @@ }, /obj/machinery/door/firedoor, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gd" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ @@ -3138,9 +2543,7 @@ frequency = 1441; id = "n2_in_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "ge" = ( /obj/machinery/door/airlock{ @@ -3149,17 +2552,13 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/wood, /area/ruin/space/has_grav/deepstorage/dorm) "gf" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gg" = ( /obj/machinery/washing_machine, @@ -3170,9 +2569,7 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gh" = ( /obj/structure/cable/yellow{ @@ -3184,9 +2581,7 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gi" = ( /obj/machinery/power/terminal{ @@ -3198,18 +2593,14 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "2-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gk" = ( /obj/machinery/light{ @@ -3219,57 +2610,43 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gm" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/closet/crate/bin{ name = "laundry bin" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "gn" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "go" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "gp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "gq" = ( /obj/structure/cable/yellow{ icon_state = "1-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gr" = ( /obj/machinery/power/smes/engineering, @@ -3279,9 +2656,7 @@ /obj/structure/sign/electricshock{ pixel_y = -32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3290,9 +2665,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gt" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -3302,17 +2675,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gu" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 5 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gv" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ @@ -3321,22 +2690,16 @@ id_tag = "n2_out_bunker"; name = "nitrogen out" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gw" = ( /obj/machinery/sleeper{ dir = 4 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gx" = ( -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gy" = ( /obj/structure/closet/crate/freezer, @@ -3351,9 +2714,7 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gz" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3361,9 +2722,7 @@ name = "Inconspicuous Airlock"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -3372,17 +2731,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gC" = ( /obj/machinery/computer/atmos_control/tank{ @@ -3393,55 +2748,41 @@ output_tag = "n2_out_bunker"; sensors = list("n2_sensor_bunker" = "Tank") }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gD" = ( /obj/machinery/air_sensor{ frequency = 1441; id_tag = "n2_sensor_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gE" = ( /obj/machinery/atmospherics/miner/nitrogen, /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gF" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gG" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/white, /area/ruin/space/has_grav/deepstorage/dorm) "gH" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gI" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gJ" = ( /obj/machinery/light/small{ @@ -3450,9 +2791,7 @@ /obj/structure/cable/yellow{ icon_state = "2-4" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gK" = ( /obj/structure/cable/yellow{ @@ -3461,9 +2800,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gL" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3473,23 +2810,17 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable/yellow{ icon_state = "1-8" }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gN" = ( -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gO" = ( /obj/machinery/atmospherics/components/trinary/filter{ @@ -3497,9 +2828,7 @@ filter_type = "n2o"; on = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gP" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ @@ -3507,9 +2836,7 @@ frequency = 1441; id = "o2_in_bunker" }, -/turf/open/floor/plating/airless{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating/airless, /area/ruin/space/has_grav/deepstorage/power) "gQ" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3518,18 +2845,14 @@ req_access_txt = "200" }, /obj/structure/fans/tiny, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage) "gR" = ( /obj/structure/grille, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gS" = ( /obj/structure/grille, @@ -3540,9 +2863,7 @@ icon_state = "1-8" }, /obj/machinery/door/firedoor, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3552,17 +2873,13 @@ /obj/structure/sign/radiation{ pixel_x = -32 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -3574,9 +2891,7 @@ pixel_y = 4 }, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gW" = ( /obj/structure/table, @@ -3585,9 +2900,7 @@ pixel_y = 4 }, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "gX" = ( /obj/machinery/power/rtg/advanced, @@ -3595,51 +2908,37 @@ icon_state = "1-2" }, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gY" = ( /obj/machinery/door/airlock/highsecurity{ name = "Telecomms"; req_access_txt = "200" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "gZ" = ( /obj/machinery/power/rtg/advanced, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "ha" = ( /obj/machinery/power/rtg/advanced, /obj/machinery/light/small, /obj/structure/cable/yellow, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hb" = ( /obj/machinery/blackbox_recorder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hc" = ( /obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hd" = ( /obj/machinery/telecomms/relay/preset/telecomms, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "he" = ( /obj/structure/window/reinforced{ @@ -3648,9 +2947,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/crusher) "hf" = ( /obj/machinery/hydroponics/constructable, @@ -3662,9 +2959,7 @@ locked = 0; pixel_y = 23 }, -/turf/open/floor/light{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/light, /area/ruin/space/has_grav/deepstorage/hydroponics) "hg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -3673,18 +2968,14 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hh" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hi" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -3696,9 +2987,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hj" = ( /obj/machinery/atmospherics/pipe/manifold/supplymain/hidden{ @@ -3711,16 +3000,12 @@ dir = 4; pixel_x = 24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/dorm) "hk" = ( /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -3731,43 +3016,33 @@ dir = 8; pixel_x = -24 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage/power) "hm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "hn" = ( /obj/structure/closet/emcloset, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/floorgrime{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/deepstorage) "ho" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/turf/closed/wall/mineral/iron{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) "hp" = ( /obj/machinery/power/smes/engineering, /obj/structure/cable/yellow{ icon_state = "0-8" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, /area/ruin/space/has_grav/deepstorage/power) "hq" = ( /obj/machinery/door/firedoor, @@ -3775,9 +3050,117 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/airless - }, +/turf/open/floor/plating, +/area/ruin/space/has_grav/deepstorage/power) +"hr" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/mineral/random/low_chance, +/area/ruin/unpowered/no_grav) +"hs" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"ht" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hu" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hv" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hw" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hx" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hy" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hz" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hA" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/kitchen) +"hB" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/hydroponics) +"hC" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hD" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hE" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hF" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hG" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hH" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hI" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hJ" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hK" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hL" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hM" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hN" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hO" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hP" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hQ" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hR" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hS" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hT" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage) +"hU" = ( +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/storage) +"hV" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/dorm) +"hW" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/armory) +"hX" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, +/area/ruin/space/has_grav/deepstorage/airlock) +"hY" = ( +/obj/effect/baseturf_helper/asteroid/airless, +/turf/closed/wall/mineral/iron, /area/ruin/space/has_grav/deepstorage/power) (1,1,1) = {" @@ -4259,7 +3642,7 @@ ab ab ab ab -ab +hr ab ab ab @@ -4318,14 +3701,14 @@ ab ab ab ab -aw -aw -aw -aw -aw -aw -aw -dB +hE +hJ +hN +hP +hQ +hS +hU +hV dB dB dB @@ -4370,7 +3753,7 @@ ab ab ab ab -aw +hF bT bU cB @@ -4419,10 +3802,10 @@ ab ab ab aw -aw -aw -aw -aw +hz +hC +hD +hG bU bU cB @@ -4470,11 +3853,11 @@ ab ab ab ab -aw +hs aG aR bm -aw +hH bV ch cC @@ -4522,15 +3905,15 @@ ab ab ab ab -aw +ht aH aS bn -aw -aw -aw +hI +hK +hO cD -aw +hR dg dz dQ @@ -4574,7 +3957,7 @@ ab ab ab ab -aw +hu aI aT bo @@ -4626,7 +4009,7 @@ ab ab ab ab -aw +hv aJ aU bp @@ -4678,12 +4061,12 @@ ab ab ab ab -aw +hw aK aV bq bG -aw +hL cj cG bz @@ -4730,12 +4113,12 @@ ab ab ab ab -aw +hx aL aW br bH -aw +hM ck cH cT @@ -4782,8 +4165,8 @@ ab ab ab ab -aw -af +hy +hA af af af @@ -4999,7 +4382,7 @@ af cp cp cp -cp +hT dI dX eq @@ -5059,7 +4442,7 @@ eJ eV fi fu -eq +hX ho fp fp @@ -5575,7 +4958,7 @@ de de de de -de +hW fb fp fD @@ -5585,7 +4968,7 @@ fp fD gE fD -fp +hY ab ab ab @@ -5719,7 +5102,7 @@ ab ab ab ab -aQ +hB aQ aQ aQ diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index 93154afd94..edc4867e34 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -494,7 +494,7 @@ /area/ruin/space/has_grav/ancientstation/comm) "bB" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -1408,7 +1408,7 @@ /turf/open/floor/plasteel/floorgrime, /area/ruin/space/has_grav/ancientstation/deltacorridor) "ef" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medical Bay" }, /turf/open/floor/plasteel/floorgrime, @@ -3222,7 +3222,7 @@ }, /area/ruin/space/has_grav/ancientstation/rnd) "is" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Chemical Storage"; req_access_txt = "200" }, diff --git a/_maps/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 7b2e8f6751..947ece0ad4 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -297,7 +297,7 @@ }, /area/ruin/space/has_grav/onehalf/hallway) "aV" = ( -/obj/machinery/door/airlock/glass_medical, +/obj/machinery/door/airlock/medical/glass, /obj/structure/cable{ icon_state = "1-2" }, @@ -984,7 +984,7 @@ /turf/template_noop, /area/ruin/space/has_grav/onehalf/hallway) "cE" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge" }, /turf/open/floor/plasteel, @@ -998,7 +998,7 @@ id = "bridge_onehalf"; name = "bridge blast door" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge" }, /turf/open/floor/plasteel, diff --git a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm index 2eab719806..9ca7c8ea35 100644 --- a/_maps/RandomRuins/SpaceRuins/spacehotel.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacehotel.dmm @@ -3447,7 +3447,7 @@ /turf/closed/wall, /area/ruin/space/has_grav/hotel/security) "jq" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Hotel Security Checkpoint"; req_access_txt = "203" }, @@ -4059,14 +4059,10 @@ /area/ruin/space/has_grav/hotel/pool) "li" = ( /obj/effect/light_emitter, -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lj" = ( -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lk" = ( /obj/structure/chair{ @@ -4201,7 +4197,7 @@ /turf/open/floor/plating/airless, /area/ruin/unpowered/no_grav) "lF" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Hotel Security Checkpoint"; req_access_txt = "203" }, @@ -4274,9 +4270,7 @@ /area/ruin/space/has_grav/hotel/security) "lP" = ( /obj/item/bikehorn/rubberducky, -/turf/open/floor/plating/beach/water{ - baseturf = /turf/open/space - }, +/turf/open/floor/plating/beach/water, /area/ruin/space/has_grav/hotel/pool) "lQ" = ( /obj/structure/table, @@ -4655,6 +4649,10 @@ }, /turf/open/floor/carpet, /area/ruin/space/has_grav/hotel) +"mW" = ( +/obj/effect/baseturf_helper/space, +/turf/closed/wall, +/area/ruin/space/has_grav/hotel/pool) (1,1,1) = {" aa @@ -7090,7 +7088,7 @@ ih fi cJ jt -jQ +mW jQ jQ jQ diff --git a/_maps/RandomZLevels/beach.dmm b/_maps/RandomZLevels/beach.dmm index fb9c5e73c2..10fa8be861 100644 --- a/_maps/RandomZLevels/beach.dmm +++ b/_maps/RandomZLevels/beach.dmm @@ -162,7 +162,7 @@ uniform = /obj/item/clothing/under/rank/bartender; death = 0; desc = "Looks secure."; - flavour_text = "You are a bartender for the beach!"; + flavour_text = "You are a bartender for the beach!"; icon = 'icons/obj/machines/sleeper.dmi'; icon_state = "sleeper"; mob_name = "Jerry Thomas"; diff --git a/_maps/RandomZLevels/beach2.dmm b/_maps/RandomZLevels/beach2.dmm index 7f48402838..81bb0144d9 100644 --- a/_maps/RandomZLevels/beach2.dmm +++ b/_maps/RandomZLevels/beach2.dmm @@ -91,22 +91,16 @@ density = 0; pixel_y = 18 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "at" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "au" = ( /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "av" = ( /obj/structure/toilet{ @@ -117,9 +111,7 @@ /area/awaymission/beach) "aw" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ax" = ( /obj/item/bedsheet/rainbow, @@ -131,9 +123,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ay" = ( /obj/effect/overlay/palmtree_r, @@ -151,9 +141,7 @@ /obj/item/reagent_containers/food/drinks/bottle/wine, /obj/item/reagent_containers/food/drinks/bottle/rum, /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aB" = ( /obj/effect/overlay/coconut, @@ -174,9 +162,7 @@ /obj/structure/mirror{ pixel_y = 28 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aF" = ( /obj/machinery/button/door{ @@ -186,9 +172,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aG" = ( /obj/machinery/button/door{ @@ -198,9 +182,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aH" = ( /obj/machinery/door/airlock/sandstone{ @@ -238,74 +220,52 @@ /area/awaymission/beach) "aM" = ( /obj/structure/closet/gmcloset, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aN" = ( /obj/structure/closet/secure_closet/bar, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aO" = ( /obj/structure/table/wood, /obj/item/book/manual/barman_recipes, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aP" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/shaker, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aQ" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aR" = ( /obj/structure/table/wood, /obj/item/clothing/glasses/sunglasses, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aS" = ( /obj/effect/mob_spawn/human/bartender/alive, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aT" = ( /obj/machinery/vending/boozeomat, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aU" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aV" = ( /obj/machinery/vending/cola, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aW" = ( /obj/machinery/vending/snack, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aX" = ( /obj/structure/mineral_door/wood{ @@ -316,29 +276,21 @@ "aY" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "aZ" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "ba" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/soda_cans/dr_gibb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "bb" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/soda_cans/lemon_lime, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/beach/sand - }, +/turf/open/floor/wood, /area/awaymission/beach) "bc" = ( /obj/item/toy/beach_ball, @@ -431,6 +383,10 @@ "bt" = ( /turf/open/floor/plating/beach/water, /area/awaymission/beach) +"bu" = ( +/obj/effect/baseturf_helper/beach/sand, +/turf/open/floor/plating/beach/sand, +/area/awaymission/beach) (1,1,1) = {" aa @@ -43447,7 +43403,7 @@ ab ab ab ab -ac +bu ac ac ac diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index cfbd187283..06ef5c5c79 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -10,7 +10,6 @@ /area/awaymission/caves/BMP_asteroid/level_three) "ad" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -36,7 +35,6 @@ /area/awaymission/caves/BMP_asteroid/level_three) "ah" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -77,14 +75,12 @@ /area/awaymission/caves/BMP_asteroid/level_four) "ao" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "ap" = ( /obj/structure/destructible/cult/pylon, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -97,14 +93,12 @@ "ar" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "as" = ( /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -124,7 +118,6 @@ /obj/item/clothing/mask/gas/clown_hat, /obj/item/organ/heart/demon, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -134,25 +127,20 @@ name = "shock rune" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aw" = ( /obj/effect/decal/remains/human, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "ax" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/lava/smooth - }, +/turf/closed/wall/mineral/cult, /area/awaymission/caves/BMP_asteroid/level_four) "ay" = ( /obj/structure/destructible/cult/tome, @@ -162,14 +150,12 @@ }, /obj/item/coin/antagtoken, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "az" = ( /obj/structure/constructshell, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -177,14 +163,12 @@ /obj/structure/girder/cult, /obj/item/stack/sheet/runed_metal, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aB" = ( /mob/living/simple_animal/hostile/spawner/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -192,14 +176,12 @@ /obj/structure/bed, /obj/item/bedsheet/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aD" = ( /obj/item/stack/sheet/runed_metal, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -213,7 +195,6 @@ name = "an extremely flamboyant book" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -225,37 +206,29 @@ name = "weak forcefield" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aG" = ( /obj/item/ectoplasm, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aH" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_three) "aI" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) "aJ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid/level_three) "aK" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -264,7 +237,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -275,7 +247,6 @@ id = "minedeep" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -293,7 +264,6 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -305,7 +275,6 @@ name = "rusty ladder" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -318,14 +287,12 @@ "aR" = ( /obj/effect/forcefield/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "aS" = ( /obj/structure/girder/cult, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -351,7 +318,6 @@ "aV" = ( /obj/effect/forcefield/cult, /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -361,7 +327,6 @@ "aW" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -371,7 +336,6 @@ id_target = "minedeepup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -390,7 +354,6 @@ name = "flame rune" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -398,7 +361,6 @@ /obj/structure/destructible/cult/talisman, /obj/item/plasma_fist_scroll, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -418,9 +380,7 @@ /turf/open/floor/plating/asteroid/basalt/lava{ initial_gas_mix = "n2=23;o2=14" }, -/turf/closed/wall/mineral/cult{ - baseturf = /turf/open/lava/smooth - }, +/turf/closed/wall/mineral/cult, /area/awaymission/caves/BMP_asteroid/level_four) "be" = ( /mob/living/simple_animal/hostile/spawner/mining/goliath, @@ -431,7 +391,6 @@ "bf" = ( /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -452,7 +411,6 @@ dir = 9 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -461,7 +419,6 @@ dir = 1 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -470,7 +427,6 @@ dir = 5 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -479,7 +435,6 @@ dir = 8 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -488,7 +443,6 @@ calibrated = 0 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -497,7 +451,6 @@ dir = 4 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -513,14 +466,12 @@ dir = 10 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) "bq" = ( /obj/machinery/gateway, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -529,7 +480,6 @@ dir = 6 }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -565,7 +515,6 @@ /obj/effect/decal/cleanable/blood, /mob/living/simple_animal/hostile/spawner/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -586,7 +535,6 @@ /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -595,7 +543,6 @@ /obj/item/device/necromantic_stone, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -607,14 +554,12 @@ /area/awaymission/caves/BMP_asteroid/level_three) "bC" = ( /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) "bD" = ( /mob/living/simple_animal/hostile/skeleton, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -622,7 +567,6 @@ /obj/structure/destructible/cult/pylon, /obj/effect/decal/cleanable/blood, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_four) @@ -634,7 +578,6 @@ name = "rusty ladder" }, /turf/open/floor/engine/cult{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_three) @@ -670,7 +613,6 @@ /area/awaymission/caves/BMP_asteroid) "bM" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -682,7 +624,6 @@ /area/awaymission/caves/BMP_asteroid/level_two) "bO" = ( /turf/open/lava/smooth{ - baseturf = /turf/open/lava/smooth; desc = "Looks hot."; luminosity = 5; name = "lava"; @@ -703,25 +644,19 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "bQ" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid/level_two) "bR" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_two) "bS" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "bT" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -731,7 +666,6 @@ id_target = "minedeepup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -758,7 +692,6 @@ "bY" = ( /mob/living/simple_animal/hostile/skeleton, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -774,7 +707,6 @@ "ca" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -816,25 +748,19 @@ id = "mineintro" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cf" = ( /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cg" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/research) "ch" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/research) "ci" = ( /obj/item/shard, @@ -859,7 +785,6 @@ "cl" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -868,7 +793,6 @@ /area/awaymission/caves/BMP_asteroid/level_two) "cn" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -879,14 +803,12 @@ /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/caves/omega, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cp" = ( /obj/structure/table, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -898,14 +820,12 @@ /area/awaymission/caves/BMP_asteroid/level_two) "cr" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cs" = ( /obj/item/shard, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -914,34 +834,29 @@ /obj/item/stack/rods, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cu" = ( /obj/effect/decal/cleanable/blood/gibs, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cv" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cw" = ( /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cx" = ( /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -960,7 +875,6 @@ "cA" = ( /obj/effect/decal/remains/xeno, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -970,7 +884,6 @@ }, /obj/effect/decal/cleanable/xenoblood, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -979,14 +892,12 @@ /obj/item/restraints/handcuffs/cable, /obj/item/restraints/handcuffs/cable, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cD" = ( /obj/effect/decal/remains/human, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -997,14 +908,12 @@ }, /obj/item/stack/rods, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cF" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1019,13 +928,11 @@ "cH" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "cI" = ( /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) @@ -1039,9 +946,7 @@ desc = "A warning sign which reads 'HOLY SHIT NIGGA WHAT ARE YOU DOING'."; name = "\improper HOLY SHIT NIGGA WHAT ARE YOU DOING" }, -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid/level_two) "cL" = ( /mob/living/simple_animal/hostile/spawner/mining/basilisk, @@ -1054,7 +959,6 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1062,7 +966,6 @@ /obj/machinery/door/window/eastleft, /obj/effect/decal/cleanable/xenoblood/xgibs, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1072,14 +975,12 @@ }, /obj/machinery/door/window/eastleft, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cP" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1099,7 +1000,6 @@ "cR" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1110,7 +1010,6 @@ icon_state = "right" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1122,7 +1021,6 @@ icon_state = "right" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1138,7 +1036,6 @@ "cV" = ( /obj/effect/decal/cleanable/xenoblood/xgibs, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1147,7 +1044,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1155,14 +1051,12 @@ /obj/structure/table, /obj/item/melee/baton, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "cY" = ( /obj/structure/glowshroom/single, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1172,7 +1066,6 @@ pixel_x = 32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1187,7 +1080,6 @@ /obj/machinery/cell_charger, /obj/item/stock_parts/cell/crap, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1207,14 +1099,12 @@ "dd" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) "de" = ( /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1226,7 +1116,6 @@ /obj/item/grenade/syndieminibomb/concussion, /obj/item/grenade/syndieminibomb/concussion, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/research) @@ -1236,24 +1125,19 @@ id_target = "mineintroup" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid/level_two) "dh" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "di" = ( /obj/structure/table, /obj/item/paper/fluff/awaymissions/caves/magma, /obj/item/pen, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dj" = ( /obj/structure/ladder/unbreakable{ @@ -1261,64 +1145,46 @@ height = 2; id = "minedeep" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dk" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dl" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "dm" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid/level_two) "dn" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "do" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dp" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, /obj/item/clothing/glasses/meson, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dq" = ( /obj/machinery/light/small/built{ dir = 4 }, /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dr" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "ds" = ( /obj/structure/closet/secure_closet/personal, @@ -1330,193 +1196,137 @@ pixel_x = 5; throwforce = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dt" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/northblock) "du" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/northblock) "dv" = ( /obj/machinery/suit_storage_unit/mining{ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dw" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid/level_two) "dx" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/decal/cleanable/cobweb, /obj/item/sord, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dy" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dz" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dA" = ( /obj/structure/closet/secure_closet/personal, /obj/item/gun/energy/kinetic_accelerator, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dB" = ( /obj/structure/dresser, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dC" = ( /obj/structure/closet/secure_closet/personal, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dD" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dE" = ( /obj/machinery/light/small/built{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dF" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dG" = ( /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dH" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dI" = ( /obj/machinery/door/airlock{ name = "Dorm" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dJ" = ( /obj/item/stack/rods, /obj/structure/spider/stickyweb, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dK" = ( /obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dL" = ( /obj/item/stack/sheet/metal, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dM" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dN" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dO" = ( /mob/living/simple_animal/hostile/retaliate/bat{ desc = "A rare breed of bat which roosts deep in caves."; name = "Cave Bat" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dP" = ( /obj/item/stack/rods, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dQ" = ( /obj/machinery/door/airlock/mining{ name = "Dorm Access" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dR" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/northblock) "dS" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dT" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/northblock) "dU" = ( /obj/structure/closet/crate/miningcar{ @@ -1533,51 +1343,39 @@ /turf/open/floor/wood, /area/awaymission/caves/northblock) "dW" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/BMP_asteroid) "dX" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/BMP_asteroid) "dY" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/landmark/awaystart, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "dZ" = ( /obj/machinery/light/small{ dir = 8 }, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "ea" = ( /obj/item/stack/sheet/metal, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "eb" = ( /obj/machinery/light/small/built{ dir = 8 }, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ec" = ( /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1585,14 +1383,12 @@ /obj/structure/bed, /obj/effect/landmark/awaystart, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ee" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1604,30 +1400,22 @@ /area/awaymission/caves/BMP_asteroid) "eg" = ( /obj/effect/decal/cleanable/robot_debris/old, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eh" = ( /obj/structure/table, /obj/item/device/radio, /obj/item/device/radio, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ei" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "ej" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "ek" = ( /obj/structure/window{ @@ -1635,41 +1423,33 @@ dir = 8 }, /mob/living/simple_animal/hostile/mining_drone, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "el" = ( /obj/structure/closet/secure_closet/personal, /obj/item/gun/energy/laser/captain/scattershot, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/wood, /area/awaymission/caves/northblock) "em" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "en" = ( /obj/effect/decal/cleanable/shreds, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "eo" = ( /obj/item/stack/rods, /turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) "ep" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1677,15 +1457,11 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "er" = ( /obj/structure/chair/stool, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "es" = ( /obj/structure/window{ @@ -1694,14 +1470,11 @@ }, /obj/structure/window, /mob/living/simple_animal/hostile/mining_drone, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "et" = ( /obj/effect/decal/cleanable/shreds, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/northblock) @@ -1712,32 +1485,24 @@ }, /area/awaymission/caves/BMP_asteroid) "ev" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ew" = ( /obj/structure/table, /obj/item/device/mining_scanner, /obj/item/device/mining_scanner, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ex" = ( /obj/structure/closet/secure_closet/miner, /obj/effect/decal/cleanable/cobweb, /obj/item/survivalcapsule, /obj/item/extinguisher/mini, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ey" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ez" = ( /obj/machinery/light/small/built{ @@ -1747,22 +1512,16 @@ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eA" = ( /obj/structure/table, /obj/item/paper/fluff/awaymissions/caves/work_notice, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eB" = ( /obj/structure/barricade/wooden, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eC" = ( /obj/structure/table, @@ -1771,67 +1530,47 @@ /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, /obj/item/clothing/glasses/meson, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eD" = ( /obj/structure/closet/secure_closet/miner, /obj/item/survivalcapsule, /obj/item/extinguisher/mini, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eE" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eF" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall, /area/awaymission/caves/listeningpost) "eG" = ( -/turf/closed/wall/rust{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/closed/wall/rust, /area/awaymission/caves/listeningpost) "eH" = ( /obj/machinery/vending/sustenance, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eI" = ( /obj/structure/closet/crate/trashcart, /obj/item/switchblade, /obj/item/switchblade, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eJ" = ( -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eK" = ( /obj/structure/table, /obj/item/gun/energy/kinetic_accelerator, /obj/item/gun/energy/kinetic_accelerator, /obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eL" = ( /obj/machinery/vending/sovietsoda, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eM" = ( /obj/machinery/light/small{ @@ -1840,21 +1579,15 @@ /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/device/multitool, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eN" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eO" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eP" = ( /obj/structure/table, @@ -1874,9 +1607,7 @@ pixel_x = 5; throwforce = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eQ" = ( /obj/machinery/mineral/mint, @@ -1886,9 +1617,7 @@ /area/awaymission/caves/BMP_asteroid) "eR" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eS" = ( /obj/machinery/light/small/built, @@ -1896,29 +1625,21 @@ desc = "An industrial unit made to hold space suits. Age has seemed to rust the sliding door mechanisms, making it difficult to open."; name = "rusted suit storage unit" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eT" = ( /obj/structure/closet/emcloset, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "eU" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eV" = ( /obj/structure/closet/crate/bin, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eW" = ( /obj/structure/barricade/wooden, @@ -1927,23 +1648,17 @@ "eX" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eY" = ( /obj/structure/table, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "eZ" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "fa" = ( /obj/structure/noticeboard{ @@ -1951,9 +1666,7 @@ }, /obj/item/paper/fluff/awaymissions/caves/shipment_notice, /obj/item/paper/fluff/awaymissions/caves/saftey_notice, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/listeningpost) "fb" = ( /mob/living/simple_animal/hostile/spawner/mining/hivelord, @@ -2005,15 +1718,11 @@ /area/awaymission/caves/BMP_asteroid) "fh" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fi" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fj" = ( /obj/effect/mob_spawn/human/skeleton/alive{ @@ -2036,9 +1745,7 @@ }, /area/awaymission/caves/BMP_asteroid/level_two) "fm" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/listeningpost) "fn" = ( /obj/structure/closet/crate{ @@ -2075,9 +1782,7 @@ "fq" = ( /obj/structure/bed, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fr" = ( /obj/machinery/light/small/built{ @@ -2085,33 +1790,25 @@ }, /obj/structure/spider/stickyweb, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fs" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "ft" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/fire, /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fu" = ( /obj/structure/table, /obj/item/storage/firstaid/brute, /obj/item/reagent_containers/blood/OPlus, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fv" = ( /obj/structure/glowshroom/single, @@ -2131,40 +1828,31 @@ id_target = "mineintrodown" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fy" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fz" = ( /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "fA" = ( /obj/structure/bed, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fB" = ( /obj/structure/spider/stickyweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fC" = ( /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fD" = ( /obj/structure/spider/stickyweb, @@ -2172,9 +1860,7 @@ dir = 8 }, /mob/living/simple_animal/hostile/poison/giant_spider/hunter, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fE" = ( /obj/machinery/light/small, @@ -2197,9 +1883,7 @@ /area/awaymission/caves/BMP_asteroid) "fH" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fI" = ( /obj/structure/sign/bluecross{ @@ -2211,44 +1895,33 @@ /area/awaymission/caves/BMP_asteroid) "fJ" = ( /obj/structure/grille, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fK" = ( /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fL" = ( /obj/structure/sign/examroom{ pixel_y = 32 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fM" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fN" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "fO" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2276,15 +1949,11 @@ /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/toxin, /obj/item/reagent_containers/blood/OPlus, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fT" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fU" = ( /obj/effect/landmark/awaystart, @@ -2295,7 +1964,6 @@ /area/awaymission/caves/BMP_asteroid) "fV" = ( /turf/open/floor/plasteel/elevatorshaft{ - baseturf = /turf/open/floor/plating/asteroid/basalt; name = "elevator flooring"; initial_gas_mix = "n2=23;o2=14" }, @@ -2303,7 +1971,6 @@ "fW" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2329,13 +1996,10 @@ "fY" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "fZ" = ( /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2346,20 +2010,16 @@ id = "mineintro" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gb" = ( /obj/structure/closet/secure_closet/freezer/kitchen, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gc" = ( /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2383,22 +2043,18 @@ "gf" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/drinks/drinkingglass, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gg" = ( /obj/structure/table/reinforced, /obj/item/storage/box/donkpockets, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gh" = ( /obj/structure/table/reinforced, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2406,7 +2062,6 @@ /obj/structure/table/reinforced, /obj/item/stack/rods, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2414,9 +2069,7 @@ /obj/machinery/door/airlock/mining{ name = "Kitchen" }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gk" = ( /obj/effect/landmark/awaystart, @@ -2426,15 +2079,11 @@ /area/awaymission/caves/BMP_asteroid/level_two) "gl" = ( /obj/item/trash/plate, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gm" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gn" = ( /obj/item/grown/log, @@ -2445,29 +2094,23 @@ "go" = ( /obj/structure/chair/stool, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gp" = ( /obj/structure/table_frame, /turf/open/floor/plating{ - baseturf = /turf/open/lava/smooth; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gq" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gr" = ( /obj/structure/table, /obj/item/kitchen/fork, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gs" = ( /obj/item/device/assembly/igniter, @@ -2478,63 +2121,47 @@ "gt" = ( /obj/structure/table_frame, /obj/item/stack/sheet/metal, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gu" = ( /obj/item/stack/rods, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gv" = ( /obj/structure/table_frame, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gw" = ( /obj/structure/reagent_dispensers/beerkeg, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gx" = ( /obj/structure/table, /obj/item/kitchen/fork, /obj/item/trash/plate, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gy" = ( /obj/item/reagent_containers/food/drinks/drinkingglass, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plasteel, /area/awaymission/caves/BMP_asteroid) "gz" = ( /obj/machinery/door/airlock/external{ name = "Mess Hall" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gA" = ( /obj/machinery/light/small{ dir = 1 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gB" = ( /obj/machinery/mech_bay_recharge_port, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2553,7 +2180,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2562,7 +2188,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/clothing/glasses/material, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2574,34 +2199,26 @@ /obj/structure/table, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill, /obj/item/paper/fluff/awaymissions/caves/mech_notice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gI" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gJ" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gK" = ( /obj/structure/girder, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gL" = ( /obj/item/stack/rods, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gM" = ( /obj/structure/mecha_wreckage/ripley, @@ -2610,21 +2227,18 @@ "gN" = ( /obj/structure/holohoop, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gO" = ( /obj/structure/closet/emcloset, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) "gP" = ( /obj/item/toy/beach_ball/holoball, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2655,16 +2269,13 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/basalt - }, +/turf/open/floor/plating, /area/awaymission/caves/BMP_asteroid) "gU" = ( /obj/structure/holohoop{ dir = 1 }, /turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/basalt; initial_gas_mix = "n2=23;o2=14" }, /area/awaymission/caves/BMP_asteroid) @@ -2681,6 +2292,31 @@ /obj/effect/mapping_helpers/planet_z, /turf/closed/indestructible/rock, /area/space/nearstation) +"gX" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid/level_three) +"gY" = ( +/obj/effect/baseturf_helper/lava, +/turf/open/lava/smooth{ + desc = "Looks hot."; + luminosity = 5; + name = "lava"; + initial_gas_mix = "n2=23;o2=14" + }, +/area/awaymission/caves/BMP_asteroid/level_four) +"gZ" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid/level_two) +"ha" = ( +/obj/effect/baseturf_helper/lava, +/turf/closed/mineral/volcanic, +/area/awaymission/caves/BMP_asteroid) +"hb" = ( +/obj/effect/baseturf_helper/asteroid/basalt, +/turf/closed/wall, +/area/awaymission/caves/northblock) (1,1,1) = {" aa @@ -4489,7 +4125,7 @@ aa aa aa aa -ac +gX ac ac ac @@ -4647,7 +4283,7 @@ aa aa aa aa -bL +ha bL bL bL @@ -5693,7 +5329,7 @@ bL bL bL bL -dt +hb dt dt du @@ -47151,7 +46787,7 @@ aa aa aa aa -ad +gY ad ad ad @@ -52448,7 +52084,7 @@ aa aa aa aa -bK +gZ bK bK bK diff --git a/_maps/RandomZLevels/centcomAway.dmm b/_maps/RandomZLevels/centcomAway.dmm index 0c7fd7f713..1f4ae8457a 100644 --- a/_maps/RandomZLevels/centcomAway.dmm +++ b/_maps/RandomZLevels/centcomAway.dmm @@ -1513,7 +1513,7 @@ /turf/open/floor/plasteel/dark, /area/awaymission/centcomAway/courtroom) "fG" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering"; req_access_txt = "32" }, @@ -1803,7 +1803,7 @@ /turf/open/floor/plating, /area/awaymission/centcomAway/hangar) "gF" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; req_access_txt = "19" }, diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/moonoutpost19.dmm index f6815d7b1d..a25155be43 100644 --- a/_maps/RandomZLevels/moonoutpost19.dmm +++ b/_maps/RandomZLevels/moonoutpost19.dmm @@ -3204,7 +3204,7 @@ }, /area/awaymission/moonoutpost19/research) "gk" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Post"; req_access_txt = "201" }, @@ -4009,7 +4009,7 @@ }, /area/awaymission/moonoutpost19/research) "hG" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Research Storage"; req_access_txt = "201" }, @@ -4244,11 +4244,9 @@ }, /area/awaymission/moonoutpost19/research) "ie" = ( -/obj/machinery/door/airlock/glass_medical{ - glass = 0; +/obj/machinery/door/airlock/medical{ id_tag = ""; name = "Research Division"; - opacity = 1; req_access_txt = "201"; req_one_access_txt = "0" }, diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/research.dmm index 5693bd14ff..b98b064142 100644 --- a/_maps/RandomZLevels/research.dmm +++ b/_maps/RandomZLevels/research.dmm @@ -1596,7 +1596,7 @@ /turf/open/floor/plating, /area/awaymission/research/interior/security) "eS" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63" @@ -1913,7 +1913,7 @@ }, /area/awaymission/research/interior) "fS" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63" @@ -2323,7 +2323,7 @@ }, /area/awaymission/research/interior) "hb" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "outerbrig"; name = "Brig"; req_access_txt = "63" diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/snowdin.dmm index 7fb4fa76f1..84c91c3dd7 100644 --- a/_maps/RandomZLevels/snowdin.dmm +++ b/_maps/RandomZLevels/snowdin.dmm @@ -9,16 +9,12 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/snowdin) "ad" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/post) "ae" = ( /obj/effect/decal/cleanable/oil, /obj/vehicle/ridden/atv, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "af" = ( /turf/open/floor/plating/ice, @@ -30,45 +26,32 @@ desc = "An emptied plasma tank, the oil on the nozzle seems to implied it was used for more than plasma storage."; name = "dusty plasma tank" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ah" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ai" = ( /obj/vehicle/ridden/atv, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aj" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "ak" = ( /obj/structure/door_assembly/door_assembly_centcom, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "al" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/base) "am" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "an" = ( /obj/structure/table, @@ -76,19 +59,14 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ao" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "ap" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -97,7 +75,6 @@ /obj/machinery/door/window/westright, /obj/item/paper/crumpled/ruins/snowdin/keys, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -109,7 +86,6 @@ status = 2 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -117,16 +93,12 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "at" = ( /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/secnotice, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "au" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -141,9 +113,7 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "av" = ( /obj/effect/decal/cleanable/oil, @@ -156,82 +126,60 @@ name = "garage door button"; pixel_x = 32 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aw" = ( /obj/structure/chair/office/dark, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "ax" = ( /obj/item/ammo_casing/a762, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "ay" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, /obj/item/key, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "az" = ( /obj/machinery/door/poddoor/shutters{ id = "garagesnow" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aA" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "aB" = ( /obj/structure/table/reinforced, /obj/structure/barricade/wooden, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "aC" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/base) "aD" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/base) "aE" = ( /obj/structure/cable{ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aF" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aG" = ( /obj/machinery/light/small{ @@ -242,13 +190,11 @@ "aH" = ( /obj/item/ammo_casing/a762, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "aI" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -257,7 +203,6 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -266,7 +211,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -276,15 +220,12 @@ /area/awaymission/snowdin) "aM" = ( /obj/machinery/recharge_station, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aN" = ( /obj/item/trash/sosjerky, /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -293,27 +234,21 @@ dir = 9 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aP" = ( /obj/machinery/gateway{ dir = 5 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aQ" = ( /obj/machinery/gateway{ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aR" = ( /obj/structure/closet/crate, @@ -325,9 +260,7 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/shoes/winterboots, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aS" = ( /obj/structure/closet/crate, @@ -335,9 +268,7 @@ /obj/item/storage/firstaid/fire, /obj/item/storage/pill_bottle/stimulant, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "aT" = ( /obj/machinery/light/small{ @@ -365,53 +296,39 @@ /obj/item/gun/ballistic/shotgun/automatic, /obj/item/gun/ballistic/shotgun/automatic, /obj/item/gun/ballistic/shotgun/automatic, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "aZ" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "ba" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bb" = ( /obj/machinery/gateway{ dir = 8 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bc" = ( /obj/machinery/gateway{ dir = 4 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bd" = ( /obj/machinery/gateway/centeraway{ calibrated = 0 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "be" = ( /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bf" = ( /obj/structure/closet/crate{ @@ -421,54 +338,40 @@ /obj/item/reagent_containers/spray/cleaner, /obj/item/soap/nanotrasen, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bg" = ( /obj/machinery/iv_drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bh" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bi" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bj" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bk" = ( /obj/effect/decal/cleanable/oil, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bl" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bm" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -477,18 +380,14 @@ dir = 10 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bo" = ( /obj/machinery/gateway{ dir = 6 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bp" = ( /obj/machinery/gateway, @@ -496,9 +395,7 @@ icon_state = "0-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "bq" = ( /obj/structure/closet/crate, @@ -515,9 +412,7 @@ /obj/item/reagent_containers/food/snacks/grown/cocoapod, /obj/item/reagent_containers/food/snacks/grown/cocoapod, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/base) "br" = ( /obj/machinery/light{ @@ -525,7 +420,6 @@ }, /obj/machinery/iv_drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -533,17 +427,13 @@ /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bt" = ( /obj/structure/table, /obj/item/shovel, /obj/item/paper/crumpled/ruins/snowdin/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bu" = ( /obj/machinery/power/terminal{ @@ -553,7 +443,6 @@ icon_state = "0-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -563,14 +452,12 @@ name = "power storage unit" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bw" = ( /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -580,7 +467,6 @@ icon_state = "1-2" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -590,14 +476,12 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "bz" = ( /obj/effect/decal/cleanable/oil, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -608,7 +492,6 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -616,22 +499,16 @@ /obj/structure/table, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bC" = ( /obj/structure/showcase/machinery/signal_decrypter, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bD" = ( /obj/machinery/space_heater, /obj/machinery/light/small, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bE" = ( /obj/structure/closet/crate/trashcart, @@ -643,21 +520,15 @@ }, /obj/item/storage/box/rubbershot, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bF" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bG" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "bH" = ( /obj/machinery/power/terminal{ @@ -670,7 +541,6 @@ icon_state = "1-4" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -680,7 +550,6 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -693,7 +562,6 @@ icon_state = "1-8" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -701,7 +569,6 @@ /obj/item/trash/pistachios, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -711,7 +578,6 @@ }, /obj/effect/landmark/awaystart, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) @@ -721,317 +587,227 @@ /area/awaymission/snowdin) "bN" = ( /obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "bO" = ( /obj/structure/dresser, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bP" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bQ" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bR" = ( /obj/structure/bookcase/random/fiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bS" = ( /obj/structure/fireaxecabinet{ pixel_y = 32 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bT" = ( /obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bU" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "bV" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "bW" = ( /obj/machinery/light{ dir = 8 }, /obj/structure/filingcabinet, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bX" = ( /obj/structure/table, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bY" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "bZ" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ca" = ( /obj/machinery/light{ dir = 1 }, /obj/machinery/vending/coffee, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cb" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cc" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cd" = ( /obj/structure/closet/cabinet, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "ce" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cf" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cg" = ( /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "ch" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ci" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cj" = ( /obj/structure/chair/comfy/beige, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "ck" = ( /obj/item/cigbutt, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cl" = ( /obj/structure/chair/stool, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cm" = ( /obj/machinery/hydroponics/constructable, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cn" = ( /obj/structure/table/wood, /obj/item/trash/cheesie, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "co" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cp" = ( /obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cq" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cr" = ( /obj/structure/table/wood, /obj/item/trash/candle, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cs" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "ct" = ( /obj/structure/table/wood, /obj/item/pizzabox/mushroom, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cu" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cv" = ( /obj/structure/table/wood, /obj/item/paper/crumpled/ruins/snowdin/snowdingatewaynotice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cw" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/gibspawner/human, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cx" = ( /obj/structure/table/wood, /obj/item/key, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cy" = ( /obj/structure/table/wood, /obj/item/trash/can, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cz" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, /obj/structure/barricade/wooden, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cA" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cB" = ( /obj/machinery/light/small{ dir = 4 }, /mob/living/simple_animal/hostile/bear/snow, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cC" = ( /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/remains/human, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/base) "cD" = ( /obj/structure/chair, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cE" = ( /obj/structure/chair/comfy/beige{ dir = 1; icon_state = "comfychair" }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cF" = ( /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cG" = ( /obj/machinery/light{ @@ -1039,43 +815,32 @@ }, /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/log, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/base) "cH" = ( /obj/machinery/light, /obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cI" = ( /obj/structure/table, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/base) "cJ" = ( /obj/machinery/door/airlock{ name = "Dorms" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/base) "cK" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/base) "cL" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/base) "cM" = ( /obj/structure/statue/snow/snowman, @@ -1142,9 +907,7 @@ /turf/closed/indestructible/rock/snow/ice, /area/awaymission/snowdin/post) "cZ" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/post) "da" = ( /obj/effect/decal/remains/human, @@ -1172,13 +935,11 @@ /area/awaymission/snowdin/post) "de" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "df" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1192,7 +953,6 @@ /obj/structure/table, /obj/item/storage/toolbox/emergency, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1215,7 +975,6 @@ /obj/structure/table, /obj/item/storage/toolbox/mechanical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1235,7 +994,6 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1248,7 +1006,6 @@ /area/awaymission/snowdin/dungeon1) "dp" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1264,7 +1021,6 @@ /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/clothing/mask/breath, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1276,7 +1032,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1284,7 +1039,6 @@ "dt" = ( /obj/item/paper/crumpled/ruins/snowdin/lootstructures, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1324,7 +1078,6 @@ "dA" = ( /obj/item/clothing/shoes/winterboots, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1332,7 +1085,6 @@ "dB" = ( /obj/item/clothing/shoes/winterboots, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1340,7 +1092,6 @@ /obj/structure/table, /obj/item/clothing/suit/hooded/wintercoat, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1353,7 +1104,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1368,7 +1118,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1380,7 +1129,6 @@ status = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1390,14 +1138,11 @@ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "dJ" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dK" = ( /obj/structure/closet/cabinet, @@ -1406,9 +1151,7 @@ /obj/item/clothing/gloves/color/black, /obj/item/shovel, /obj/item/switchblade, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dL" = ( /obj/structure/closet/crate, @@ -1416,7 +1159,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1426,7 +1168,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1435,9 +1176,7 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dO" = ( /obj/machinery/door/airlock{ @@ -1445,9 +1184,7 @@ name = "Dorm Room"; req_access_txt = "150" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dP" = ( /turf/open/floor/plating/asteroid/basalt{ @@ -1456,7 +1193,6 @@ /area/awaymission/snowdin/post) "dQ" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -1469,7 +1205,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /obj/effect/spawner/lootdrop/snowdin/dungeonmisc, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1477,9 +1212,7 @@ /obj/structure/bed, /obj/effect/decal/remains/human, /obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dT" = ( /turf/open/lava{ @@ -1488,16 +1221,13 @@ /area/awaymission/snowdin/post) "dU" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "dV" = ( /obj/machinery/door/airlock/public/glass{ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1508,7 +1238,6 @@ "dX" = ( /obj/structure/table, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1520,7 +1249,6 @@ status = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1534,7 +1262,6 @@ status = 2 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -1544,7 +1271,6 @@ id_target = "up" }, /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1554,27 +1280,23 @@ id_target = "up" }, /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "ec" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/post) "ed" = ( /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "ee" = ( /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -1582,7 +1304,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1590,7 +1311,6 @@ "eg" = ( /obj/machinery/light/small, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -1713,9 +1433,7 @@ /turf/open/floor/plating/snowed, /area/awaymission/snowdin/post) "eD" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin/dungeon1) "eE" = ( /obj/structure/table/wood, @@ -1761,7 +1479,6 @@ "eM" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -1797,9 +1514,7 @@ /obj/item/cautery{ pixel_x = 4 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "eR" = ( /turf/closed/indestructible/rock/snow, @@ -1867,36 +1582,26 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fe" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ff" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fg" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fh" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fi" = ( /obj/machinery/light/small{ @@ -1906,24 +1611,18 @@ /obj/item/implanter/storage, /obj/item/clothing/shoes/jackboots, /obj/item/switchblade, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fj" = ( /obj/machinery/recharge_station, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fk" = ( /turf/open/floor/plating/ice, /area/awaymission/snowdin/post) "fl" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fm" = ( /turf/open/floor/plating/ice/colder, @@ -1947,39 +1646,27 @@ /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, /obj/item/shovel, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "fq" = ( /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fr" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fs" = ( /obj/item/cigbutt/cigarbutt, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "ft" = ( /obj/effect/landmark/awaystart, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fu" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fv" = ( /turf/open/floor/plating/snowed/colder, @@ -1998,33 +1685,25 @@ /area/awaymission/snowdin/dungeon1) "fy" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/post) "fz" = ( /obj/machinery/power/terminal{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fA" = ( /obj/structure/table, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fB" = ( /obj/machinery/power/smes/magical{ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "fC" = ( /obj/item/stack/sheet/metal, @@ -2036,7 +1715,6 @@ "fE" = ( /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2055,14 +1733,12 @@ /obj/item/paper_bin, /obj/item/pen, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fI" = ( /obj/structure/door_assembly/door_assembly_centcom, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2080,14 +1756,12 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fM" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2098,7 +1772,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2115,7 +1788,6 @@ "fQ" = ( /obj/structure/grille, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2123,14 +1795,12 @@ "fR" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fS" = ( /obj/item/storage/toolbox/mechanical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2138,13 +1808,11 @@ "fT" = ( /mob/living/simple_animal/hostile/bear/snow, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "fU" = ( /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2153,14 +1821,12 @@ /obj/item/reagent_containers/food/drinks/drinkingglass, /obj/item/key, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) "fW" = ( /obj/structure/chair/stool, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2177,7 +1843,6 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonmid, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140; wet = 0 }, @@ -2192,7 +1857,6 @@ /obj/structure/table, /obj/item/storage/box/donkpockets, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/post) @@ -2206,9 +1870,7 @@ /obj/machinery/door/poddoor/shutters{ id = "garagesnow2" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gd" = ( /obj/structure/ladder/unbreakable{ @@ -2226,9 +1888,7 @@ name = "shutter control"; pixel_x = 32 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "gf" = ( /mob/living/simple_animal/hostile/skeleton/ice, @@ -2284,7 +1944,6 @@ id_target = "down" }, /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) @@ -2294,19 +1953,16 @@ id_target = "down" }, /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) "gp" = ( /turf/open/floor/plasteel/stairs/left{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) "gq" = ( /turf/open/floor/plasteel/stairs/right{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 140 }, /area/awaymission/snowdin/cave) @@ -2316,7 +1972,6 @@ "gs" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2329,48 +1984,36 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gu" = ( /obj/item/stock_parts/cell/high/empty, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gv" = ( /obj/structure/table, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gw" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gx" = ( /obj/machinery/telecomms/allinone{ intercept = 1 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "gy" = ( /obj/structure/table, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gz" = ( /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2380,9 +2023,7 @@ /obj/item/twohanded/spear, /obj/item/twohanded/spear, /obj/item/twohanded/spear, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gB" = ( /obj/structure/table, @@ -2390,7 +2031,6 @@ dir = 4 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2399,21 +2039,17 @@ dir = 4 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gD" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gE" = ( /obj/item/pen, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2421,7 +2057,6 @@ /obj/structure/table, /obj/item/paper_bin, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2432,14 +2067,11 @@ }, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, /obj/effect/spawner/lootdrop/snowdin/dungeonmid, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gH" = ( /obj/structure/filingcabinet, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2448,7 +2080,6 @@ dir = 8 }, /turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2456,28 +2087,21 @@ /obj/machinery/door/airlock/public/glass, /obj/structure/barricade/wooden, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "gK" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gL" = ( /obj/machinery/light/small, /obj/structure/showcase/machinery/signal_decrypter, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gM" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "gN" = ( /turf/open/floor/plating, @@ -2492,14 +2116,12 @@ "gP" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gQ" = ( /obj/machinery/vending/coffee, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2508,34 +2130,26 @@ /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gS" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gT" = ( /obj/structure/closet/cabinet, /obj/effect/spawner/lootdrop/snowdin/dungeonlite, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "gU" = ( /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "gV" = ( /obj/structure/table, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) @@ -2544,14 +2158,12 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) "gX" = ( /obj/machinery/door/airlock/public/glass, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2565,39 +2177,30 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ha" = ( /obj/structure/barricade/wooden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hb" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hc" = ( /obj/structure/table/reinforced, /obj/structure/barricade/wooden, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hd" = ( /obj/machinery/light/built{ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2605,7 +2208,6 @@ /obj/machinery/door/airlock/external, /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2623,44 +2225,33 @@ status = 2 }, /turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hh" = ( -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hi" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hj" = ( /obj/structure/chair/office/dark{ dir = 1 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hk" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/post) "hl" = ( /obj/machinery/door/airlock{ name = "Dorms" }, /obj/structure/barricade/wooden, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/post) "hm" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -2674,51 +2265,40 @@ }, /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "hn" = ( /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/secnotice, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "ho" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hp" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin) "hq" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hr" = ( /turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow; temperature = 180 }, /area/awaymission/snowdin/post) "hs" = ( /obj/structure/closet/cabinet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/post) "ht" = ( /mob/living/simple_animal/hostile/skeleton/eskimo, @@ -2801,7 +2381,6 @@ /obj/structure/window/reinforced/fulltile/ice, /obj/structure/barricade/wooden, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2810,17 +2389,13 @@ /obj/structure/table, /obj/item/shovel, /obj/item/key, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hL" = ( /obj/structure/table, /obj/item/shovel, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hM" = ( /obj/machinery/space_heater, @@ -2830,9 +2405,7 @@ icon_state = "bulb-broken"; status = 2 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "hN" = ( /obj/effect/decal/cleanable/blood/old, @@ -2841,7 +2414,6 @@ "hO" = ( /obj/machinery/door/airlock/glass_large, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2853,7 +2425,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/post) @@ -2873,56 +2444,41 @@ /turf/open/floor/plating/snowed/colder, /area/awaymission/snowdin/dungeon1) "hV" = ( -/turf/closed/wall/r_wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/r_wall, /area/awaymission/snowdin/sekret) "hW" = ( /obj/structure/closet/emcloset, /obj/item/tank/internals/emergency_oxygen/engi, /obj/item/clothing/mask/breath, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hX" = ( /obj/machinery/space_heater, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hY" = ( /obj/machinery/power/port_gen/pacman, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "hZ" = ( /obj/machinery/light, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/post) "ia" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ib" = ( /obj/structure/table, /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ic" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "id" = ( /mob/living/simple_animal/hostile/skeleton/templar, @@ -2936,42 +2492,31 @@ dir = 8 }, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "if" = ( /obj/structure/table, /obj/item/shovel, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ig" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ih" = ( /obj/machinery/door/poddoor/shutters{ id = "sekret" }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ii" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "ij" = ( /obj/machinery/porta_turret/syndicate, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -2982,44 +2527,32 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "il" = ( /obj/structure/table/reinforced, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "im" = ( /obj/machinery/power/terminal{ dir = 4 }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "in" = ( /obj/machinery/power/smes/magical{ desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ip" = ( /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "iq" = ( /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "ir" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -3034,33 +2567,25 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "is" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/post) "it" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin/post) "iu" = ( /obj/machinery/door/airlock/highsecurity{ name = "Maint"; req_access_txt = "150" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/sekret) "iv" = ( /obj/item/device/multitool, @@ -3068,14 +2593,12 @@ /area/awaymission/snowdin) "iw" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "ix" = ( /obj/machinery/vending/snack, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3083,54 +2606,41 @@ /obj/structure/table, /obj/item/storage/firstaid/toxin, /obj/item/storage/firstaid/toxin, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iz" = ( /obj/machinery/iv_drip, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iA" = ( /obj/structure/table, /obj/item/storage/firstaid/o2, /obj/item/storage/firstaid/o2, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iB" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, /obj/item/storage/firstaid/regular, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iC" = ( /obj/structure/table, /obj/item/storage/firstaid/fire, /obj/item/storage/firstaid/fire, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iD" = ( /obj/structure/table, /obj/item/storage/firstaid/brute, /obj/item/storage/firstaid/brute, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iE" = ( /obj/machinery/light{ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3140,7 +2650,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3157,14 +2666,11 @@ }, /area/awaymission/snowdin/dungeon1) "iI" = ( -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iJ" = ( /obj/structure/table/reinforced, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3172,7 +2678,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3180,7 +2685,6 @@ "iL" = ( /obj/structure/grille, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3190,9 +2694,7 @@ /turf/open/floor/plating, /area/awaymission/snowdin) "iN" = ( -/turf/closed/wall/mineral/plastitanium{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/mineral/plastitanium, /area/awaymission/snowdin) "iO" = ( /obj/effect/spawner/lootdrop/snowdin/dungeonheavy, @@ -3210,7 +2712,6 @@ /obj/structure/grille, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3220,7 +2721,6 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3228,9 +2728,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "iU" = ( /obj/structure/window/reinforced{ @@ -3239,9 +2737,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "iV" = ( /obj/structure/window/reinforced{ @@ -3250,24 +2746,19 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "iW" = ( /obj/structure/sign/bluecross{ pixel_x = -32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "iX" = ( /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "iY" = ( /obj/machinery/light/small, @@ -3280,38 +2771,31 @@ "ja" = ( /obj/item/shard, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "jb" = ( /obj/structure/frame/computer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jc" = ( /obj/machinery/door/poddoor/shutters{ id = "garagesnow3" }, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin/post) "jd" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin/sekret) "je" = ( /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3322,20 +2806,15 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jg" = ( /obj/structure/table/optable, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "jh" = ( -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "ji" = ( /obj/machinery/door/airlock/highsecurity{ @@ -3343,33 +2822,25 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jj" = ( -/turf/closed/wall/ice{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall/ice, /area/awaymission/snowdin) "jk" = ( /obj/machinery/door/airlock/external, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "jl" = ( /obj/structure/table, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "jm" = ( -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jo" = ( /obj/machinery/porta_turret/syndicate, @@ -3380,7 +2851,6 @@ dir = 4 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3388,33 +2858,25 @@ /obj/machinery/sleeper{ dir = 4 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jr" = ( /obj/structure/window/reinforced, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "js" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "jt" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/plasteel/whiteblue{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/whiteblue, /area/awaymission/snowdin/sekret) "ju" = ( /obj/machinery/sleeper{ @@ -3423,43 +2885,32 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jv" = ( /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jw" = ( -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "jx" = ( /obj/effect/decal/cleanable/blood, /obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jy" = ( /obj/item/storage/box/donkpockets{ pixel_x = 3; pixel_y = 3 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jz" = ( /obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jA" = ( /obj/item/device/radio/intercom{ @@ -3471,15 +2922,11 @@ subspace_transmission = 1; syndie = 1 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jB" = ( /obj/effect/gibspawner/human, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jC" = ( /obj/item/tank/internals/plasma{ @@ -3489,40 +2936,30 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/snowdin) "jD" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jE" = ( /obj/machinery/vending/coffee, /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jF" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jG" = ( /obj/structure/chair/comfy/beige{ dir = 8 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jH" = ( /obj/machinery/sleeper{ dir = 8 }, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jI" = ( /obj/machinery/door/airlock/glass_large{ @@ -3533,17 +2970,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jJ" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jK" = ( /obj/effect/decal/cleanable/blood, @@ -3559,9 +2992,7 @@ name = "Cockpit"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jN" = ( /turf/closed/wall/mineral/plastitanium{ @@ -3582,15 +3013,11 @@ /area/awaymission/snowdin/sekret) "jP" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "jQ" = ( /obj/structure/table, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jR" = ( /obj/structure/closet/crate/freezer, @@ -3600,22 +3027,17 @@ /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, /obj/item/reagent_containers/blood/random, -/turf/open/floor/plasteel/cmo{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cmo, /area/awaymission/snowdin/sekret) "jS" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "jT" = ( /obj/structure/girder, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3628,23 +3050,18 @@ "jV" = ( /obj/structure/table, /obj/item/paper/crumpled/ruins/snowdin/misc1, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jW" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "jX" = ( /obj/machinery/door/airlock/glass_large{ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -3654,14 +3071,11 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "jZ" = ( -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "ka" = ( /obj/structure/closet/syndicate, @@ -3680,22 +3094,17 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kb" = ( /obj/machinery/porta_turret/syndicate, /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kc" = ( /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -3705,7 +3114,6 @@ }, /obj/structure/window/reinforced/fulltile/ice, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3717,83 +3125,60 @@ "kf" = ( /obj/item/stack/cable_coil, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "kg" = ( /obj/effect/decal/cleanable/blood, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kh" = ( /obj/structure/chair{ dir = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "ki" = ( /obj/structure/chair{ dir = 8 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kj" = ( /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kk" = ( /obj/structure/mirror/magic/lesser{ desc = "A collab of the Wizard Federation and the Syndicate, a specialized mirror to help our operatives personalize themselves while stuck in this icy hell-hole."; pixel_x = -32 }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kl" = ( -/turf/closed/wall{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/closed/wall, /area/awaymission/snowdin/sekret) "km" = ( /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kn" = ( /obj/structure/bookcase/random/reference, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ko" = ( /obj/structure/bookcase/random/adult, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kp" = ( /obj/structure/bookcase/random/religion, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kq" = ( -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kr" = ( /obj/structure/table/reinforced, @@ -3802,23 +3187,17 @@ /obj/machinery/light/small{ dir = 8 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "ks" = ( /obj/structure/table/reinforced, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kt" = ( /obj/structure/chair/office/dark{ dir = 4 }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "ku" = ( /obj/structure/rack, @@ -3831,17 +3210,13 @@ /turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kv" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kw" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kx" = ( /obj/structure/rack, @@ -3851,30 +3226,24 @@ }, /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, /obj/item/paper/fluff/awaymissions/snowdin/saw_usage, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "ky" = ( /obj/machinery/door/window/brigdoor/westleft{ name = "SAW Security Door"; req_access_txt = "150" }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kz" = ( /obj/item/shard, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) "kA" = ( /obj/structure/grille/broken, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -3889,35 +3258,25 @@ "kC" = ( /obj/item/crowbar/red, /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kD" = ( /obj/structure/dresser, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kE" = ( /obj/structure/table/wood, /obj/item/paper/fluff/awaymissions/snowdin/syndienotice, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kF" = ( -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kG" = ( /obj/machinery/light{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kH" = ( /obj/item/gun/ballistic/shotgun/boltaction, @@ -3932,9 +3291,7 @@ /obj/item/restraints/handcuffs, /obj/item/device/assembly/flash, /obj/item/storage/box/lethalshot, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kI" = ( /obj/structure/rack, @@ -3949,19 +3306,15 @@ /turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kJ" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, -/turf/open/floor/plasteel/darkred{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkred, /area/awaymission/snowdin/sekret) "kK" = ( /obj/structure/chair/stool, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kL" = ( /obj/structure/rack, @@ -3969,14 +3322,11 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kM" = ( /obj/machinery/light/built, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -3988,9 +3338,7 @@ /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "kP" = ( /obj/machinery/door/airlock/glass_large{ @@ -3998,7 +3346,6 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4008,9 +3355,7 @@ /area/awaymission/snowdin/sekret) "kR" = ( /obj/structure/table, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "kS" = ( /obj/structure/rack, @@ -4019,9 +3364,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kT" = ( /obj/structure/rack, @@ -4030,9 +3373,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel/dark{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/dark, /area/awaymission/snowdin/sekret) "kU" = ( /obj/structure/girder, @@ -4040,112 +3381,83 @@ /area/awaymission/snowdin) "kV" = ( /obj/structure/table, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kW" = ( /obj/item/storage/box/zipties{ pixel_x = 1; pixel_y = 2 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kX" = ( /obj/structure/chair{ dir = 8 }, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "kY" = ( /obj/structure/bookcase/random/fiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "kZ" = ( /obj/machinery/space_heater, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "la" = ( /obj/structure/bed/dogbed, /mob/living/simple_animal/pet/dog/corgi/puppy{ name = "Mr.Kempsy" }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lb" = ( /obj/structure/bookcase/random/nonfiction, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lc" = ( /obj/structure/chair/stool, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ld" = ( /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "le" = ( /obj/structure/table, /obj/item/pizzabox/mushroom, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lf" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lg" = ( /obj/structure/closet/cabinet, /obj/item/clothing/shoes/winterboots, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/gloves/color/black, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lh" = ( /obj/structure/table/wood, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "li" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "lj" = ( /obj/item/reagent_containers/food/drinks/beer, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lk" = ( /obj/item/clothing/head/helmet/space/syndicate/black/red, @@ -4153,42 +3465,30 @@ /area/awaymission/snowdin) "ll" = ( /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lm" = ( /obj/structure/table/wood, /obj/item/trash/candle, /obj/item/paper_bin, /obj/item/pen/fourcolor, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ln" = ( /obj/structure/table/wood, /obj/item/toy/cards/deck, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lo" = ( /obj/structure/table, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lp" = ( /obj/structure/filingcabinet, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "lq" = ( -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lr" = ( /obj/structure/table, @@ -4199,29 +3499,21 @@ listening = 1; name = "Pirate Radio Listening Channel" }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "ls" = ( -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lt" = ( /obj/structure/bed, /obj/item/bedsheet, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lu" = ( /obj/item/shard{ icon_state = "medium" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lv" = ( /obj/machinery/door/window{ @@ -4229,38 +3521,28 @@ name = "EVA Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lw" = ( /obj/machinery/door/airlock/external{ req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lx" = ( /obj/structure/table/wood, /obj/item/book/manual/nuclear, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ly" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lz" = ( /obj/structure/table, /obj/machinery/microwave, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lA" = ( /obj/machinery/door/airlock/highsecurity{ @@ -4268,7 +3550,6 @@ req_access_txt = "150" }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4281,41 +3562,29 @@ listening = 0; name = "Pirate Radio Broadcast Channel" }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lC" = ( -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "lD" = ( /obj/structure/chair/office/light{ dir = 8 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lE" = ( /obj/machinery/door/airlock/public/glass, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin) "lF" = ( -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin) "lG" = ( /obj/machinery/door/airlock{ name = "Dorm Room" }, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lH" = ( /obj/structure/bed, @@ -4324,16 +3593,13 @@ dir = 4 }, /obj/effect/landmark/awaystart, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin) "lI" = ( /obj/machinery/light{ dir = 8 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4345,15 +3611,11 @@ storage_type = null; suit_type = null }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lK" = ( /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lL" = ( /obj/machinery/door/window{ @@ -4363,42 +3625,31 @@ name = "EVA Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lM" = ( /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lN" = ( /obj/item/gun/ballistic/automatic/pistol, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lO" = ( /obj/structure/table, /obj/item/storage/box/donkpockets, /obj/item/storage/box/donkpockets, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "lP" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen/fourcolor, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "lQ" = ( /obj/item/stack/sheet/metal, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4420,107 +3671,77 @@ syndie = 1 }, /obj/item/reagent_containers/food/drinks/ale, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lT" = ( /obj/effect/mob_spawn/human/syndicatesoldier, /obj/effect/decal/cleanable/vomit, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "lU" = ( /obj/machinery/light/small, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "lV" = ( /obj/effect/mob_spawn/human/syndicatesoldier/coldres/alive/female, -/turf/open/floor/carpet{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/carpet, /area/awaymission/snowdin/sekret) "lW" = ( /obj/structure/table/wood, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lX" = ( /obj/structure/chair/comfy/beige{ dir = 4 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lY" = ( /obj/structure/table/wood, /obj/machinery/light, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "lZ" = ( /obj/structure/chair/comfy/beige{ dir = 8 }, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "ma" = ( /obj/structure/table/wood, /obj/item/gun/ballistic/automatic/c20r/toy, -/turf/open/floor/wood{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/wood, /area/awaymission/snowdin/sekret) "mb" = ( /obj/machinery/light, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "mc" = ( /obj/machinery/light, /obj/structure/table, /obj/item/storage/box/drinkingglasses, -/turf/open/floor/plasteel/cafeteria{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/cafeteria, /area/awaymission/snowdin/sekret) "md" = ( /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "me" = ( /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/white{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/white, /area/awaymission/snowdin/sekret) "mf" = ( /obj/machinery/recharge_station, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mg" = ( /obj/structure/table, /obj/machinery/cell_charger, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mh" = ( /obj/item/device/assembly/voice{ @@ -4538,15 +3759,11 @@ /obj/item/reagent_containers/syringe/charcoal{ pixel_y = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mk" = ( /obj/structure/chair/stool, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "ml" = ( /obj/machinery/door/window{ @@ -4557,36 +3774,28 @@ /obj/item/reagent_containers/syringe/charcoal{ pixel_y = 4 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mm" = ( /obj/machinery/door/window/westright{ name = "Tool Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mn" = ( /obj/item/stock_parts/cell/high, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mo" = ( /obj/item/target/alien, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "mp" = ( /obj/item/target/clown, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4598,9 +3807,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mr" = ( /obj/structure/table/reinforced, @@ -4608,7 +3815,6 @@ dir = 1 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4619,7 +3825,6 @@ pixel_y = 32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4627,7 +3832,6 @@ /obj/item/ammo_casing/c10mm, /obj/item/ammo_casing/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4637,7 +3841,6 @@ faction = list("syndicate") }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4648,7 +3851,6 @@ }, /obj/item/storage/firstaid/tactical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4656,7 +3858,6 @@ /obj/structure/table/reinforced, /obj/item/storage/firstaid/tactical, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4664,7 +3865,6 @@ /obj/structure/table/reinforced, /obj/item/storage/backpack/duffelbag/syndie/ammo/smg, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4673,7 +3873,6 @@ dir = 1 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4683,16 +3882,13 @@ dir = 1 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "mA" = ( /obj/item/stack/medical/bruise_pack, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mB" = ( /obj/machinery/door/window{ @@ -4703,9 +3899,7 @@ req_access_txt = "150" }, /obj/item/stack/medical/ointment, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mC" = ( /obj/machinery/door/window{ @@ -4713,22 +3907,17 @@ name = "Tool Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mD" = ( /obj/item/storage/toolbox/syndicate, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mE" = ( /obj/item/screwdriver{ pixel_y = 9 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4742,7 +3931,6 @@ "mG" = ( /obj/item/target, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4752,14 +3940,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mI" = ( /obj/item/ammo_casing/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4767,14 +3952,11 @@ /obj/machinery/telecomms/relay/preset/ruskie{ use_power = 0 }, -/turf/open/floor/plasteel/purple{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/purple, /area/awaymission/snowdin/sekret) "mK" = ( /obj/machinery/light/built, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4782,7 +3964,6 @@ "mL" = ( /obj/effect/decal/cleanable/blood/drip, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin) @@ -4791,7 +3972,6 @@ icon_state = "medium" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4802,9 +3982,7 @@ name = "Secure Storage"; req_access_txt = "150" }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mO" = ( /obj/structure/window/reinforced{ @@ -4813,14 +3991,11 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mP" = ( /obj/item/stock_parts/cell/high, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4836,15 +4011,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mS" = ( /obj/structure/table/reinforced, /obj/item/ammo_box/a357, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4854,7 +4026,6 @@ pixel_y = 2 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4867,9 +4038,7 @@ /obj/structure/mirror{ pixel_x = 30 }, -/turf/open/floor/mineral/plastitanium/brig{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/mineral/plastitanium/brig, /area/awaymission/snowdin) "mW" = ( /obj/structure/flora/grass/green, @@ -4881,7 +4050,6 @@ dir = 8 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -4892,57 +4060,43 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "mZ" = ( /obj/structure/table/reinforced, /obj/item/ammo_box/c10mm, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) "na" = ( -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nb" = ( /mob/living/simple_animal/bot/cleanbot{ name = "\improper Cleanksy" }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nc" = ( /obj/structure/table, /obj/item/paper/crumpled/ruins/snowdin/shovel, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nd" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "ne" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nf" = ( /obj/machinery/space_heater, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4952,7 +4106,6 @@ /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/electrical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -4977,9 +4130,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "nk" = ( /mob/living/simple_animal/hostile/syndicate{ @@ -4988,28 +4139,21 @@ name = "Weakened Syndicate Operative"; speed = 2 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nl" = ( /obj/structure/filingcabinet, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nm" = ( /obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nn" = ( /obj/item/shovel, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5019,7 +4163,6 @@ /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/mechanical, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5042,15 +4185,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel, /area/awaymission/snowdin/sekret) "nt" = ( /obj/structure/table/reinforced, /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5061,7 +4201,6 @@ pixel_y = -32 }, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5069,7 +4208,6 @@ /obj/item/ammo_casing/a357, /obj/item/ammo_casing/a357, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5083,7 +4221,6 @@ /obj/item/target/clown, /obj/machinery/light, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5091,7 +4228,6 @@ /obj/structure/table/reinforced, /obj/item/gun/ballistic/automatic/pistol, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5101,7 +4237,6 @@ /obj/item/storage/box/lethalshot, /obj/item/storage/box/lethalshot, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5109,7 +4244,6 @@ /obj/structure/table/reinforced, /obj/item/gun/ballistic/shotgun/automatic/combat, /turf/open/floor/plasteel{ - baseturf = /turf/open/floor/plating/asteroid/snow; wet = 0 }, /area/awaymission/snowdin/sekret) @@ -5125,27 +4259,19 @@ }, /obj/structure/filingcabinet, /obj/item/paper/fluff/awaymissions/snowdin/log2, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nC" = ( /obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nD" = ( /obj/machinery/door/airlock/hatch, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nE" = ( /obj/machinery/door/airlock/maintenance_hatch, -/turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plating, /area/awaymission/snowdin) "nF" = ( /obj/machinery/power/smes/magical{ @@ -5153,7 +4279,6 @@ name = "power storage unit" }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5163,27 +4288,21 @@ dir = 4 }, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, /area/awaymission/snowdin) "nH" = ( /obj/effect/decal/cleanable/vomit, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nI" = ( /obj/structure/chair, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nJ" = ( /obj/machinery/power/port_gen/pacman, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5196,20 +4315,15 @@ /area/awaymission/snowdin) "nL" = ( /obj/effect/spawner/lootdrop/snowdin/dungeonlite, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nM" = ( /obj/structure/table, -/turf/open/floor/plasteel/darkbrown{ - baseturf = /turf/open/floor/plating/asteroid/snow - }, +/turf/open/floor/plasteel/darkbrown, /area/awaymission/snowdin) "nN" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5218,7 +4332,6 @@ /obj/structure/closet/crate, /obj/item/survivalcapsule, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5226,7 +4339,6 @@ "nP" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating{ - baseturf = /turf/open/floor/plating/asteroid/snow; icon = 'icons/turf/snow.dmi'; temperature = 140 }, @@ -5241,9 +4353,33 @@ /obj/effect/mapping_helpers/planet_z, /turf/closed/indestructible/rock/snow, /area/awaymission/snowdin) +"nS" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/indestructible/rock/snow, +/area/awaymission/snowdin) +"nT" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/ice, +/area/awaymission/snowdin/post) +"nU" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/ice, +/area/awaymission/snowdin/base) +"nV" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/indestructible/rock/snow/ice, +/area/awaymission/snowdin/dungeon1) +"nW" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/closed/wall/mineral/snow, +/area/awaymission/snowdin/igloo) +"nX" = ( +/obj/effect/baseturf_helper/asteroid/snow, +/turf/open/floor/plating/asteroid/snow, +/area/awaymission/snowdin/cave) (1,1,1) = {" -aa +nS aa aa aa @@ -15536,7 +14672,7 @@ aa aa ac ac -al +nU al al al @@ -20160,7 +19296,7 @@ aa aa aa ac -ad +nT ad am ad @@ -23126,8 +22262,8 @@ ad hl ad ad -gr -gr +ez +ez eS eR eR @@ -23370,21 +22506,21 @@ eR eR eR ez -eC -eC -eC +ez +ez +ez ez gI gz gs gU gU -gr +ez gU gU df -gr -gr +ez +ez eS eS eS @@ -23626,10 +22762,10 @@ eR eR eT eT -eC -eC -eC -eC +ez +ez +ez +ez gz gz gz @@ -23638,9 +22774,9 @@ gU gU gU df -gr -gr -gr +ez +ez +ez fk eT eS @@ -23883,8 +23019,8 @@ eS eR eS eS -eC -eC +ez +ez ez gz ez @@ -23896,7 +23032,7 @@ gU hg gU df -gr +ez fk fk eT @@ -24140,9 +23276,9 @@ eS eS eS eS -eC +ez fk -eC +ez eM gz ad @@ -24398,7 +23534,7 @@ eT eS eR eK -eC +ez ez gz gz @@ -24655,7 +23791,7 @@ eR eR eR ad -eC +ez gz gz gz @@ -32781,7 +31917,7 @@ ac ac ac ac -cP +nW cW cP ac @@ -34887,7 +34023,7 @@ ac ac ac ac -eS +nX eS eS eS @@ -42028,7 +41164,7 @@ ab ab ab ab -cN +nV cN cN cN diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/undergroundoutpost45.dmm index a00c460da8..dbd2000946 100644 --- a/_maps/RandomZLevels/undergroundoutpost45.dmm +++ b/_maps/RandomZLevels/undergroundoutpost45.dmm @@ -7380,7 +7380,7 @@ }, /area/awaymission/undergroundoutpost45/research) "oE" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "201" }, @@ -8008,7 +8008,7 @@ /turf/closed/wall/rust, /area/awaymission/undergroundoutpost45/research) "pM" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Research Storage"; req_access_txt = "201" }, @@ -8159,7 +8159,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "SMES Room"; req_access_txt = "201"; req_one_access_txt = "0" @@ -8622,7 +8622,7 @@ /obj/machinery/atmospherics/pipe/simple{ dir = 4 }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Room"; req_access_txt = "201" }, @@ -9318,7 +9318,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Reception"; req_access_txt = "0" }, @@ -9760,7 +9760,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Reception"; req_access_txt = "0" }, @@ -10793,7 +10793,7 @@ /turf/closed/wall, /area/awaymission/undergroundoutpost45/engineering) "uF" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "201" }, @@ -11382,7 +11382,7 @@ "vN" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Foyer"; req_access_txt = "201" }, @@ -11396,7 +11396,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Foyer"; req_access_txt = "201" }, @@ -11682,7 +11682,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Chief Engineer"; req_access_txt = "201" }, @@ -12448,7 +12448,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining EVA"; req_access_txt = "201" }, diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 335393adac..5bcd4ec085 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -2,19 +2,6 @@ "aaa" = ( /turf/open/space/basic, /area/space) -"aab" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_n"; - name = "north of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) "aae" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -1495,14 +1482,14 @@ /turf/closed/wall, /area/security/prison) "adH" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 3"; req_access_txt = "2" }, /turf/open/floor/plasteel/floorgrime, /area/security/prison) "adI" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 2"; req_access_txt = "2" }, @@ -1510,7 +1497,7 @@ /turf/open/floor/plasteel/floorgrime, /area/security/prison) "adJ" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 1"; req_access_txt = "2" }, @@ -1912,7 +1899,7 @@ /turf/open/floor/plating, /area/crew_quarters/heads/hos) "aey" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Head of Security"; req_access_txt = "58" }, @@ -2477,7 +2464,7 @@ /turf/open/floor/plasteel/red/side, /area/security/prison) "afK" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = null; name = "Evidence Storage"; req_access_txt = "63" @@ -2529,7 +2516,7 @@ /turf/open/floor/plating, /area/security/main) "afS" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Equipment Room"; req_access_txt = "1" }, @@ -2642,7 +2629,7 @@ /area/security/execution/transfer) "agi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "2" }, @@ -2656,7 +2643,7 @@ /area/security/brig) "agk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "2" }, @@ -3254,7 +3241,7 @@ }, /area/security/brig) "ahE" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Control"; req_access_txt = "3" }, @@ -3834,7 +3821,7 @@ /turf/open/floor/plating, /area/security/warden) "aiM" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Control"; req_access_txt = "3" }, @@ -4754,7 +4741,7 @@ /turf/open/floor/plating, /area/security/brig) "akU" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Desk"; req_access_txt = "1" }, @@ -4777,7 +4764,7 @@ /turf/open/floor/plating, /area/security/brig) "akW" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -4809,7 +4796,7 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -4963,13 +4950,17 @@ /turf/closed/wall/r_wall, /area/ai_monitored/security/armory) "alu" = ( -/obj/structure/barricade/wooden, -/obj/structure/grille, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/wood, -/area/maintenance/fore) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/bar/cafe) "alv" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5488,7 +5479,7 @@ /turf/open/floor/plating, /area/security/processing) "amM" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prisoner Processing"; req_access_txt = "2" }, @@ -5584,7 +5575,7 @@ /area/security/brig) "amW" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -6727,10 +6718,6 @@ /obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/maintenance/port/fore) -"apQ" = ( -/obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) "apR" = ( /obj/item/paper/fluff/jobs/security/beepsky_mom, /turf/open/floor/plating, @@ -8973,14 +8960,14 @@ /area/maintenance/port/fore) "avT" = ( /obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; id = "syndicate_ne"; name = "northeast of station"; turf_type = /turf/open/space; - width = 18 + width = 23 }, /turf/open/space, /area/space/nearstation) @@ -9641,9 +9628,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -10051,21 +10035,28 @@ /area/maintenance/port/fore) "ayA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/barricade/wooden, -/obj/structure/grille, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/turf/open/floor/plating, +/area/maintenance/fore) "ayB" = ( +/turf/closed/wall, +/area/crew_quarters/theatre/mime) +"ayC" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/maintenance/bar/cafe) -"ayC" = ( -/turf/closed/wall, -/area/maintenance/bar/cafe) +/area/maintenance/fore) "ayD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, -/area/maintenance/bar/cafe) +/area/crew_quarters/theatre/clown) "ayE" = ( /turf/closed/wall/r_wall, /area/maintenance/fore) @@ -10474,35 +10465,23 @@ /turf/closed/wall, /area/maintenance/port/fore) "azH" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/bar/cafe"; - dir = 1; - name = "Abandoned Cafe APC"; - pixel_y = 24 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, -/area/maintenance/bar/cafe) +/turf/closed/wall, +/area/crew_quarters/theatre/mime) "azI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/chair/stool/bar, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/turf/open/floor/wood{ - icon_state = "wood-broken5" - }, -/area/maintenance/bar/cafe) +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/closed/wall, +/area/crew_quarters/theatre/clown) "azJ" = ( /obj/machinery/gateway{ dir = 9 }, /obj/effect/turf_decal/bot_white/right, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/gateway) "azK" = ( /obj/machinery/light{ @@ -10515,14 +10494,18 @@ dir = 5 }, /obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 4 + }, /area/gateway) "azM" = ( /obj/machinery/gateway{ dir = 1 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/gateway) "azN" = ( /obj/machinery/light{ @@ -10564,7 +10547,7 @@ /area/ai_monitored/storage/eva) "azS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "EVA Storage"; req_access_txt = "18" }, @@ -11064,7 +11047,9 @@ dir = 8 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/gateway) "aBe" = ( /turf/open/floor/plasteel/dark, @@ -11074,7 +11059,9 @@ dir = 4 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/gateway) "aBg" = ( /obj/machinery/gateway/centerstation, @@ -11358,48 +11345,24 @@ /turf/closed/wall/r_wall, /area/storage/primary) "aBS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"aBT" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/theatre/mime"; - dir = 2; - name = "Mime's Office APC"; - pixel_x = 1; - pixel_y = -24 +/obj/machinery/light_switch{ + pixel_y = 28 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) +"aBT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 }, -/obj/structure/chair/wood{ +/turf/open/floor/plasteel/white/side{ dir = 8 }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar/cafe) +/area/crew_quarters/theatre/mime) "aBU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/crew_quarters/theatre/clown) "aBV" = ( /obj/machinery/airalarm{ pixel_y = 23 @@ -11410,37 +11373,33 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "aBW" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/theatre/clown"; - dir = 2; - name = "Clown's Office APC"; - pixel_x = 1; - pixel_y = -24 +/obj/structure/table, +/obj/item/device/flashlight/lamp/bananalamp, +/obj/item/device/radio/intercom{ + freerange = 0; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = -30 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar/cafe) +/turf/open/floor/plasteel/redyellow, +/area/crew_quarters/theatre/clown) "aBX" = ( /obj/machinery/gateway{ dir = 10 }, /obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 4 + }, /area/gateway) "aBY" = ( /obj/machinery/gateway{ dir = 6 }, /obj/effect/turf_decal/bot_white/right, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/gateway) "aBZ" = ( /obj/machinery/gateway, @@ -11448,7 +11407,9 @@ icon_state = "0-2" }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/gateway) "aCa" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -11979,18 +11940,31 @@ /turf/open/floor/plasteel, /area/storage/primary) "aDr" = ( -/turf/closed/wall, -/area/crew_quarters/theatre/mime) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) "aDs" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/effect/spawner/structure/window/hollow/end{ + dir = 4 + }, +/turf/open/floor/plating, /area/crew_quarters/theatre/mime) "aDt" = ( -/turf/closed/wall, -/area/crew_quarters/theatre/clown) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/circuit, +/area/ai_monitored/nuke_storage) "aDv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/effect/spawner/structure/window/hollow/end{ + dir = 8 + }, +/turf/open/floor/plating, /area/crew_quarters/theatre/clown) "aDw" = ( /obj/structure/window/reinforced, @@ -12567,13 +12541,13 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "aEN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/bed, -/obj/item/bedsheet/mime, -/turf/open/floor/plasteel/white/side{ - dir = 1 +/obj/structure/chair/wood{ + dir = 8 }, -/area/crew_quarters/theatre/mime) +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/bar/cafe) "aEO" = ( /obj/structure/cable{ icon_state = "1-2" @@ -12581,10 +12555,12 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "aEP" = ( -/obj/structure/closet/secure_closet/freezer/cream_pie, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) +/obj/structure/table/wood, +/obj/item/stack/sheet/mineral/wood{ + amount = 7 + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) "aEQ" = ( /obj/structure/table, /obj/item/paper/pamphlet/gateway, @@ -12648,7 +12624,7 @@ /area/ai_monitored/storage/eva) "aEX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "EVA Storage"; req_access_txt = "18" }, @@ -13068,47 +13044,38 @@ /turf/open/floor/plasteel/vault/corner, /area/ai_monitored/nuke_storage) "aGb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Mime's Office"; - dir = 8 - }, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"aGc" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/camera/motion{ - c_tag = "Vault"; - dir = 1; - network = list("MiniSat") - }, -/obj/machinery/light, -/turf/open/floor/plasteel/vault/corner{ - dir = 8 - }, -/area/ai_monitored/nuke_storage) -"aGd" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/vault/side, -/area/ai_monitored/nuke_storage) -"aGe" = ( -/obj/structure/mirror{ - pixel_x = -28 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Clown's Office"; - c_tag_order = 999; +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"aGc" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/bar/cafe) +"aGd" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"aGe" = ( +/obj/structure/table/wood, +/obj/item/screwdriver, +/obj/item/crowbar, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/bar/cafe) "aGf" = ( /obj/machinery/firealarm{ dir = 4; @@ -13655,9 +13622,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/chapel/main) -"aHr" = ( -/turf/open/space, -/area/space) "aHs" = ( /obj/machinery/door/airlock/titanium{ name = "Arrivals Shuttle Airlock" @@ -13747,9 +13711,14 @@ /turf/open/floor/plasteel, /area/storage/primary) "aHF" = ( -/obj/structure/sign/securearea, -/turf/closed/wall/r_wall, -/area/ai_monitored/nuke_storage) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) "aHG" = ( /obj/machinery/door/airlock/vault{ icon_state = "door_locked"; @@ -14356,20 +14325,23 @@ /turf/open/floor/plasteel, /area/storage/primary) "aJd" = ( -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/mineral_door/wood{ + name = "Abandoned Cafe" }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/hallway/primary/port) -"aJe" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"aJe" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 8 }, -/area/hallway/primary/port) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/maintenance/bar/cafe) "aJf" = ( /obj/machinery/camera{ c_tag = "EVA South"; @@ -14609,6 +14581,9 @@ req_access_txt = "25" }, /obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/bar) "aJI" = ( @@ -14757,15 +14732,10 @@ /turf/open/floor/plasteel, /area/storage/primary) "aKb" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/redyellow/side{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/plating, /area/hallway/primary/port) "aKc" = ( /obj/machinery/door/firedoor, @@ -14890,48 +14860,40 @@ /turf/open/floor/plating, /area/storage/primary) "aKt" = ( -/obj/machinery/door/airlock/freezer{ - boltDown = null; - boltUp = null; - doorClose = null; - doorDeni = null; - doorOpen = null; - name = "Mime's Office"; - noPower = null; - req_access_txt = "46" +/obj/effect/spawner/structure/window/hollow/end, +/obj/item/shard{ + icon_state = "medium" }, -/turf/open/floor/plasteel/white/side{ +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/maintenance/bar/cafe) +"aKu" = ( +/turf/closed/wall, +/area/maintenance/bar/cafe) +"aKv" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/redyellow/side{ dir = 1 }, -/area/crew_quarters/theatre/mime) -"aKu" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/crew_quarters/theatre/mime) -"aKv" = ( -/obj/structure/cable, +/area/hallway/primary/port) +"aKw" = ( +/turf/open/floor/plasteel/redyellow/side{ + dir = 1 + }, +/area/hallway/primary/port) +"aKx" = ( /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/primary/port) -"aKw" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/fore) -"aKx" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/crew_quarters/theatre/clown) "aKy" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -15418,6 +15380,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "aLQ" = ( @@ -15780,10 +15745,10 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "aMR" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, /obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "aMS" = ( @@ -16511,9 +16476,7 @@ req_access_txt = "25" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel{ - icon_state = "wood" - }, +/turf/open/floor/wood, /area/crew_quarters/bar) "aOP" = ( /obj/effect/landmark/blobstart, @@ -17520,7 +17483,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aRL" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, @@ -18926,10 +18889,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) -"aVG" = ( -/obj/structure/table, -/turf/open/floor/plasteel/cafeteria, -/area/crew_quarters/kitchen) "aVH" = ( /obj/machinery/processor, /obj/machinery/firealarm{ @@ -19357,7 +19316,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 4; name = "Bridge"; req_access_txt = "19" @@ -19375,7 +19334,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge"; req_access_txt = "19" @@ -19572,7 +19531,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 4; name = "Bridge"; req_access_txt = "19" @@ -19605,7 +19564,7 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge"; req_access_txt = "19" @@ -21823,7 +21782,9 @@ /area/ai_monitored/turret_protected/ai_upload) "bdh" = ( /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/ai_monitored/turret_protected/ai_upload) "bdi" = ( /obj/machinery/computer/arcade, @@ -22174,7 +22135,8 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_harmless, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/structure/window/reinforced{ dir = 1 }, @@ -22235,7 +22197,7 @@ }, /obj/item/aiModule/reset/purge, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/structure/window/reinforced{ dir = 1 }, @@ -24315,7 +24277,7 @@ /area/quartermaster/storage) "bjs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "50" }, @@ -24582,14 +24544,6 @@ /obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/plating, /area/storage/emergency/starboard) -"bke" = ( -/obj/structure/rack, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, -/turf/open/floor/plating, -/area/storage/emergency/starboard) "bkf" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -25495,7 +25449,7 @@ }, /area/quartermaster/office) "bmg" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay"; req_access_txt = "31" }, @@ -25526,7 +25480,7 @@ /area/quartermaster/storage) "bmk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Delivery Office"; req_access_txt = "50" }, @@ -25685,7 +25639,7 @@ }, /area/medical/chemistry) "bmH" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay"; req_access_txt = "31" }, @@ -26312,7 +26266,7 @@ /area/medical/chemistry) "boe" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -26331,7 +26285,7 @@ /area/medical/medbay/central) "boh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -26366,7 +26320,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bok" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -26942,7 +26896,7 @@ /area/hallway/primary/central) "bpD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33" @@ -28189,7 +28143,7 @@ /area/medical/medbay/central) "bsu" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "GeneticsDoor"; name = "Genetics"; req_access_txt = "5; 68" @@ -29398,7 +29352,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bvl" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Surgery Observation"; req_access_txt = "0" }, @@ -29459,7 +29413,7 @@ }, /area/medical/genetics) "bvt" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Genetics Research"; req_access_txt = "5; 9; 68" }, @@ -29575,15 +29529,6 @@ dir = 9 }, /area/quartermaster/qm) -"bvG" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) "bvH" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -29697,10 +29642,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ +/turf/open/floor/plasteel/red/side{ dir = 1 }, -/turf/open/floor/plasteel, /area/hallway/primary/central) "bvX" = ( /obj/machinery/camera{ @@ -29734,22 +29678,20 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/red/side{ + dir = 1 + }, /area/hallway/primary/central) "bwb" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/turf/open/floor/plasteel/red/side{ + dir = 1 }, -/turf/open/floor/plasteel, /area/hallway/primary/central) "bwc" = ( /obj/structure/disposalpipe/segment, @@ -29791,17 +29733,13 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bwh" = ( -/obj/structure/sign/securearea{ - pixel_y = 32 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ +/turf/open/floor/plasteel/red/side{ dir = 1 }, -/turf/open/floor/plasteel, /area/hallway/primary/central) "bwi" = ( /obj/item/device/radio/intercom{ @@ -30088,7 +30026,7 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "bwT" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Quartermaster"; req_access_txt = "41" }, @@ -30161,7 +30099,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "bwY" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -30361,7 +30299,7 @@ /turf/open/floor/plasteel, /area/security/checkpoint/science) "bxw" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Quartermaster"; req_access_txt = "41" }, @@ -30588,7 +30526,7 @@ /turf/open/floor/plasteel, /area/medical/sleeper) "bxW" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Research Director"; req_access_txt = "30" }, @@ -30696,7 +30634,7 @@ /turf/closed/wall, /area/security/checkpoint/science) "byj" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -30996,10 +30934,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 +/turf/open/floor/plasteel/red/side{ + dir = 1 }, -/turf/open/floor/plasteel, /area/hallway/primary/central) "byT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -31076,7 +31013,7 @@ /turf/open/floor/plating, /area/medical/sleeper) "bzc" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Recovery Room"; req_access_txt = "0" @@ -31702,7 +31639,7 @@ /area/science/server) "bAB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Room"; req_access_txt = "30" }, @@ -32293,10 +32230,6 @@ }, /turf/open/floor/circuit/telecomms/server, /area/science/server) -"bBT" = ( -/obj/machinery/rnd/server, -/turf/open/floor/circuit/telecomms/server, -/area/science/server) "bBU" = ( /obj/machinery/atmospherics/pipe/simple{ dir = 9 @@ -33153,7 +33086,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bDU" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Chief Medical Officer"; req_access_txt = "40" }, @@ -33173,7 +33106,7 @@ /turf/open/floor/plating, /area/maintenance/aft) "bDW" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "45" @@ -33218,7 +33151,7 @@ /turf/open/floor/plasteel/floorgrime, /area/science/storage) "bEd" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "45" @@ -33842,6 +33775,12 @@ dir = 4; pixel_x = 11 }, +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Medbay RC"; + pixel_w = 30 + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bFB" = ( @@ -34401,11 +34340,6 @@ /obj/item/gun/syringe, /turf/open/floor/plasteel/white, /area/medical/sleeper) -"bGS" = ( -/obj/structure/closet/crate/freezer/surplus_limbs, -/obj/item/reagent_containers/glass/beaker/synthflesh, -/turf/open/floor/plasteel/white, -/area/medical/sleeper) "bGT" = ( /obj/structure/table, /obj/item/folder/white, @@ -34986,6 +34920,12 @@ pixel_x = -3; pixel_y = -3 }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIj" = ( @@ -34999,13 +34939,6 @@ /area/medical/sleeper) "bIk" = ( /obj/structure/table, -/obj/machinery/requests_console{ - announcementConsole = 0; - department = "Medbay"; - departmentType = 1; - name = "Medbay RC"; - pixel_y = -30 - }, /obj/item/storage/firstaid/fire{ pixel_x = 3; pixel_y = 3 @@ -35015,18 +34948,15 @@ pixel_x = -3; pixel_y = -3 }, +/obj/machinery/door/window/northright{ + name = "First-Aid Supplies"; + red_alert_access = 1; + req_access_txt = "5" + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIl" = ( /obj/structure/table, -/obj/item/device/radio/intercom{ - broadcasting = 0; - freerange = 0; - frequency = 1485; - listening = 1; - name = "Station Intercom (Medbay)"; - pixel_y = -30 - }, /obj/item/storage/firstaid/toxin{ pixel_x = 3; pixel_y = 3 @@ -35036,28 +34966,16 @@ pixel_x = -3; pixel_y = -3 }, +/obj/machinery/door/window/northleft{ + name = "First-Aid Supplies"; + red_alert_access = 1; + req_access_txt = "5" + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIm" = ( +/obj/machinery/rnd/protolathe/department/medical, /obj/machinery/light, -/obj/structure/table, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/obj/item/reagent_containers/glass/bottle/epinephrine{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/item/reagent_containers/glass/bottle/morphine{ - pixel_x = 8; - pixel_y = -3 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = 6; - pixel_y = -3 - }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIn" = ( @@ -35071,6 +34989,12 @@ pixel_x = -3; pixel_y = -3 }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bIo" = ( @@ -35426,7 +35350,7 @@ /turf/open/floor/plating, /area/shuttle/mining) "bJd" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ cyclelinkeddir = 8; name = "Mining Dock"; req_access_txt = "48" @@ -37198,7 +37122,7 @@ /area/medical/virology) "bNj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation A"; req_access_txt = "39" }, @@ -37211,7 +37135,7 @@ /area/medical/virology) "bNl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation B"; req_access_txt = "39" }, @@ -37297,10 +37221,9 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "bNu" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ autoclose = 0; frequency = 1449; - glass = 1; heat_proof = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; @@ -37311,10 +37234,9 @@ /turf/open/floor/engine, /area/science/mixing) "bNv" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ autoclose = 0; frequency = 1449; - glass = 1; heat_proof = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; @@ -37429,7 +37351,7 @@ /area/construction) "bNK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "50" }, @@ -37441,12 +37363,6 @@ }, /turf/open/floor/plating, /area/construction) -"bNM" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) "bNN" = ( /obj/structure/cable{ icon_state = "1-2" @@ -38004,7 +37920,7 @@ /turf/open/floor/plating, /area/engine/atmos) "bPb" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Firing Range"; req_access_txt = "47" }, @@ -38687,7 +38603,7 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bQK" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Control Room"; req_access_txt = "19; 61" }, @@ -38900,7 +38816,7 @@ /turf/open/floor/plating, /area/construction) "bRm" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -39038,7 +38954,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Distribution Loop"; req_access_txt = "24" }, @@ -39154,7 +39070,7 @@ /area/medical/virology) "bRR" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Monkey Pen"; req_access_txt = "39" }, @@ -39373,11 +39289,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/port/aft) -"bSr" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bSs" = ( /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, @@ -40006,7 +39917,7 @@ /area/engine/atmos) "bTN" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring"; req_access_txt = "24" }, @@ -40707,10 +40618,6 @@ }, /turf/open/space, /area/space/nearstation) -"bVw" = ( -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/space/nearstation) "bVx" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 2 @@ -40796,11 +40703,6 @@ /obj/machinery/vending/snack/random, /turf/open/floor/plasteel, /area/engine/break_room) -"bVL" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bVM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, @@ -41487,7 +41389,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering"; req_access_txt = "32" }, @@ -42616,7 +42518,7 @@ }, /area/tcommsat/server) "cal" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ cyclelinkeddir = 4; name = "Server Room"; req_access_txt = "61" @@ -42629,7 +42531,7 @@ }, /area/tcommsat/computer) "can" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ cyclelinkeddir = 8; name = "Server Room"; req_access_txt = "61" @@ -44138,10 +44040,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"cdM" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/aft) "cdN" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -44551,7 +44449,7 @@ /area/maintenance/port/aft) "ceZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Power Storage"; req_access_txt = "11"; req_one_access_txt = "0" @@ -45213,7 +45111,7 @@ /area/engine/engineering) "cgL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Room"; req_access_txt = "10" }, @@ -46538,7 +46436,7 @@ id = "testlab"; name = "test chamber blast door" }, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ cyclelinkeddir = 4; name = "Test Chamber"; req_access_txt = "47" @@ -46813,7 +46711,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "ckN" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ cyclelinkeddir = 8; name = "Test Chamber"; req_access_txt = "47" @@ -46825,7 +46723,7 @@ /turf/open/floor/plasteel, /area/science/misc_lab) "ckO" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Chief Engineer"; req_access_txt = "56" }, @@ -47148,16 +47046,18 @@ /turf/open/floor/plasteel/dark, /area/engine/engine_smes) "clD" = ( -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/engine_smes) "clE" = ( /obj/structure/cable{ icon_state = "0-8" }, /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/bot_white/right, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/engine/engine_smes) "clF" = ( /obj/structure/cable{ @@ -47173,8 +47073,9 @@ icon_state = "0-4" }, /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 4 + }, /area/engine/engine_smes) "clI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -47425,8 +47326,9 @@ /obj/structure/cable/yellow{ icon_state = "0-4" }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/engine_smes) "cmB" = ( /obj/machinery/power/terminal{ @@ -47435,8 +47337,9 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/engine_smes) "cmC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -47991,7 +47894,7 @@ "coc" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Room"; req_access_txt = "10" }, @@ -48390,7 +48293,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Room"; req_access_txt = "10" }, @@ -48860,7 +48763,7 @@ /area/engine/supermatter) "cqE" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ heat_proof = 1; name = "Supermatter Chamber"; req_access_txt = "10" @@ -49021,7 +48924,7 @@ /area/engine/engineering) "crd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine Room"; req_access_txt = "10" }, @@ -49100,7 +49003,7 @@ /turf/closed/wall/r_wall, /area/engine/supermatter) "crt" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ heat_proof = 1; name = "Supermatter Chamber"; req_access_txt = "10" @@ -49449,11 +49352,6 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) -"csw" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/turf/open/space, -/area/space/nearstation) "csx" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/heat_exchanging/simple, @@ -49467,10 +49365,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"csz" = ( -/obj/effect/landmark/carpspawn, -/turf/open/space, -/area/space) "csA" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -49484,10 +49378,6 @@ }, /turf/open/floor/plating, /area/engine/supermatter) -"csC" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "csD" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -49862,13 +49752,6 @@ /obj/structure/lattice, /turf/open/space, /area/space/nearstation) -"ctO" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 5 - }, -/turf/open/space, -/area/space/nearstation) "ctP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -51055,7 +50938,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "AI Core"; req_access_txt = "65" }, @@ -51864,12 +51747,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/exit) -"cyq" = ( -/obj/machinery/computer/pod{ - id = "oldship_gun" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cyr" = ( /obj/machinery/door/airlock/external{ cyclelinkeddir = 8; @@ -51896,9 +51773,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) -"cyv" = ( -/turf/open/floor/plating, -/area/shuttle/abandoned) "cyw" = ( /obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt{ @@ -51919,25 +51793,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"cyy" = ( -/obj/machinery/mass_driver{ - dir = 4; - icon_state = "mass_driver"; - id = "oldship_gun" - }, -/turf/open/floor/plating, -/area/shuttle/abandoned) -"cyz" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/plating, -/area/shuttle/abandoned) -"cyA" = ( -/obj/machinery/door/poddoor{ - id = "oldship_gun"; - name = "pod bay door" - }, -/turf/open/floor/plating, -/area/shuttle/abandoned) "cyB" = ( /turf/open/floor/mineral/titanium/blue, /area/shuttle/supply) @@ -51979,10 +51834,6 @@ }, /turf/open/floor/plating, /area/engine/atmos) -"cyH" = ( -/obj/machinery/door/airlock/titanium, -/turf/open/floor/plating, -/area/shuttle/abandoned) "cyI" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -51990,15 +51841,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"cyJ" = ( -/obj/structure/rack, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cyK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -52054,12 +51896,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"cyP" = ( -/obj/item/shard{ - icon_state = "medium" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cyQ" = ( /obj/machinery/door/airlock/titanium{ name = "Supply Shuttle Airlock"; @@ -52121,28 +51957,6 @@ }, /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) -"cyV" = ( -/obj/machinery/door/window, -/turf/open/floor/mineral/titanium/purple, -/area/shuttle/abandoned) -"cyW" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/mineral/titanium/purple, -/area/shuttle/abandoned) -"cyX" = ( -/obj/structure/table, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"cyY" = ( -/obj/structure/table, -/obj/item/gun/energy/laser/retro, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cyZ" = ( /obj/machinery/conveyor{ dir = 4; @@ -52154,35 +51968,6 @@ }, /turf/open/floor/plating, /area/shuttle/supply) -"cza" = ( -/obj/machinery/door/airlock/public/glass, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czb" = ( -/obj/machinery/porta_turret/aux_base{ - always_up = 1; - desc = "A turret built with substandard parts and run down further with age. Still capable of delivering lethal lasers to the odd space carp, but not much else."; - dir = 4; - has_cover = 0; - icon_state = "standard_lethal"; - lethal_projectile = /obj/item/projectile/beam/weak; - name = "turret" - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) -"czc" = ( -/obj/machinery/computer/shuttle/white_ship, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czd" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"cze" = ( -/obj/structure/table, -/obj/item/tank/internals/oxygen, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "czf" = ( /turf/closed/wall/mineral/titanium/interior, /area/shuttle/supply) @@ -52205,11 +51990,6 @@ }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) -"czl" = ( -/obj/machinery/door/window/northright, -/obj/effect/decal/remains/human, -/turf/open/floor/mineral/titanium/purple, -/area/shuttle/abandoned) "czm" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -52220,13 +52000,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"czn" = ( -/obj/structure/frame/computer{ - anchored = 1 - }, -/obj/structure/light_construct, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "czp" = ( /obj/structure/window/reinforced{ dir = 1 @@ -52260,40 +52033,6 @@ /obj/structure/shuttle/engine/propulsion/burst/right, /turf/open/floor/plating/airless, /area/shuttle/supply) -"czw" = ( -/obj/item/device/multitool, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czx" = ( -/obj/structure/chair, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czy" = ( -/obj/structure/frame/computer{ - anchored = 1 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czA" = ( -/obj/item/scalpel, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czB" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = 6; - pixel_y = -5 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"czC" = ( -/obj/machinery/sleeper{ - dir = 8 - }, -/obj/effect/decal/remains/human, -/obj/structure/light_construct, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "czE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 @@ -52727,16 +52466,6 @@ }, /turf/open/floor/plasteel, /area/janitor) -"cAM" = ( -/obj/structure/table/wood, -/obj/structure/disposalpipe/segment, -/obj/item/toy/cards/deck/cas, -/obj/item/toy/cards/deck/cas/black{ - pixel_x = -2; - pixel_y = 6 - }, -/turf/open/floor/wood, -/area/library) "cAN" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -53211,45 +52940,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/security/main) -"cBW" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_southmaint"; - name = "south maintenance airlock"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) -"cBX" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_se"; - name = "southeast of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) -"cBY" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_s"; - name = "south of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) "cBZ" = ( /obj/structure/table/wood, /obj/item/clothing/under/burial, @@ -53515,10 +53205,6 @@ /obj/structure/closet/firecloset, /turf/open/floor/plasteel, /area/engine/engineering) -"cCW" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/plating, -/area/engine/engineering) "cCY" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -53800,13 +53486,6 @@ }, /turf/closed/wall, /area/engine/engineering) -"cDS" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space, -/area/space/nearstation) "cDY" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/orange/visible{ @@ -54488,7 +54167,7 @@ /area/engine/engineering) "cGI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Laser Room"; req_access_txt = "10" }, @@ -54613,10 +54292,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"cHl" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/wall/r_wall, -/area/engine/engineering) "cHn" = ( /obj/structure/cable{ icon_state = "1-4" @@ -54641,10 +54316,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"cHs" = ( -/obj/item/crowbar/large, -/turf/open/floor/plating, -/area/engine/engineering) "cHD" = ( /obj/structure/cable{ icon_state = "1-2" @@ -54762,7 +54433,7 @@ /area/science/robotics/mechbay) "cHK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; req_access_txt = "29" }, @@ -55089,18 +54760,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"cMd" = ( -/obj/structure/light_construct{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"cMe" = ( -/obj/structure/light_construct/small{ - dir = 4 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cMf" = ( /obj/machinery/door/airlock/titanium{ name = "medbay"; @@ -55112,18 +54771,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"cMh" = ( -/obj/structure/light_construct/small{ - dir = 8 - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"cMk" = ( -/obj/structure/light_construct/small{ - dir = 1 - }, -/turf/open/floor/plating, -/area/shuttle/abandoned) "cMl" = ( /obj/machinery/light{ dir = 8 @@ -55161,13 +54808,6 @@ "cMH" = ( /turf/open/floor/engine, /area/engine/supermatter) -"cMI" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/turf/open/floor/engine, -/area/engine/supermatter) "cMN" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -55334,11 +54974,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cPa" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cPA" = ( /obj/machinery/atmospherics/components/binary/valve{ dir = 4 @@ -55750,10 +55385,6 @@ }, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) -"cTW" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/whiteship, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "cTX" = ( /obj/structure/cable{ icon_state = "0-2" @@ -55776,31 +55407,10 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) -"Qlj" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_nw"; - name = "northwest of station"; - turf_type = /turf/open/space - }, -/turf/open/space/basic, -/area/space/nearstation) -"Qlk" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_nw"; - name = "northwest of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space/basic, -/area/space/nearstation) +"kSb" = ( +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel, +/area/quartermaster/miningdock) "Qll" = ( /obj/machinery/door/airlock/titanium{ name = "recovery shuttle external airlock" @@ -55895,14 +55505,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"Qls" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "Qlt" = ( /obj/structure/tank_dispenser/oxygen{ layer = 2.7; @@ -56040,13 +55642,6 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"QlC" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "QlD" = ( /obj/machinery/door/airlock/titanium{ name = "E.V.A. equipment" @@ -56057,13 +55652,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"QlE" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "QlF" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/blood/gibs/old, @@ -56112,18 +55700,6 @@ dir = 1 }, /area/shuttle/abandoned) -"QlJ" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) "QlK" = ( /obj/effect/decal/cleanable/robot_debris/old, /obj/effect/decal/cleanable/oil, @@ -56213,13 +55789,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"QlQ" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "QlR" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/effect/decal/cleanable/dirt{ @@ -56240,18 +55809,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/abandoned) -"QlT" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/turf_decal/delivery{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/shuttle/abandoned) "QlU" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt{ @@ -56306,16 +55863,6 @@ }, /turf/closed/wall/mineral/titanium, /area/shuttle/abandoned) -"Qma" = ( -/obj/machinery/door/airlock/titanium{ - name = "E.V.A. equipment" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "Qmb" = ( /obj/machinery/door/airlock/titanium{ name = "recovery shuttle interior airlock" @@ -56330,20 +55877,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"Qmc" = ( -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle interior airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "Qmd" = ( /obj/structure/sign/cargo, /turf/closed/wall/mineral/titanium, @@ -56375,13 +55908,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"Qmh" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "Qmi" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt{ @@ -56410,20 +55936,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"Qml" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"Qmm" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "Qmn" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -56474,13 +55986,6 @@ /obj/machinery/vending/coffee, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"Qms" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "Qmt" = ( /obj/structure/chair, /obj/effect/decal/cleanable/dirt{ @@ -56489,22 +55994,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"Qmu" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmv" = ( -/obj/structure/chair, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "Qmw" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -56516,46 +56005,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"Qmx" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmy" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qmz" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) -"QmA" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmB" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "QmC" = ( /obj/effect/decal/cleanable/dirt{ desc = "A thin layer of dust coating the floor."; @@ -56584,16 +56033,6 @@ }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/abandoned) -"QmE" = ( -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle external airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "QmF" = ( /obj/machinery/door/airlock/titanium{ name = "recovery shuttle interior airlock" @@ -56790,73 +56229,6 @@ /obj/machinery/vending/cola/random, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"QmW" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmX" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmY" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"QmZ" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qna" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnb" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) -"Qnc" = ( -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "Qnd" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt{ @@ -57284,14 +56656,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"QnQ" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "QnR" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/glowshroom, @@ -57301,14 +56665,6 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"QnS" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/turf/open/floor/mineral/titanium, -/area/shuttle/abandoned) "QnT" = ( /obj/structure/table, /obj/machinery/reagentgrinder{ @@ -57438,88 +56794,19 @@ /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) -"Qoe" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) "Qof" = ( /obj/structure/lattice, /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) -"Qog" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Qoh" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) "Qoi" = ( /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"Qoj" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"Qok" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) "Qol" = ( /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"Qom" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Qon" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Qoo" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"Qop" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Qoq" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"Qor" = ( -/obj/structure/lattice, -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) -"Qos" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"Qot" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) -"Qou" = ( -/obj/structure/lattice, -/obj/structure/grille, -/turf/open/space/basic, -/area/space/nearstation) "Qov" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -57527,27 +56814,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"Qow" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"Qox" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) -"Qoy" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/engine, -/area/engine/engineering) "Qoz" = ( /obj/structure/cable{ icon_state = "1-2" @@ -57581,14 +56847,6 @@ /obj/item/stack/sheet/metal/fifty, /turf/open/floor/plasteel/dark, /area/engine/engineering) -"QoE" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) -"QoF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/dark, -/area/engine/engineering) "QoG" = ( /obj/structure/girder, /turf/open/floor/plasteel/dark, @@ -57607,10 +56865,6 @@ /obj/machinery/light, /turf/open/floor/plating, /area/engine/engineering) -"QoJ" = ( -/obj/machinery/light, -/turf/open/floor/plating, -/area/engine/engineering) "QoK" = ( /obj/item/crowbar/large, /obj/structure/rack, @@ -57651,23 +56905,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) -"QoQ" = ( -/obj/machinery/rnd/protolathe/department/medical, -/turf/open/floor/plasteel/white, -/area/medical/sleeper) -"QoR" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/rnd/protolathe/department/engineering, -/turf/open/floor/plasteel, -/area/engine/engineering) -"QoS" = ( -/obj/machinery/computer/rdconsole/production, -/turf/open/floor/plasteel, -/area/engine/engineering) "QoT" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, @@ -57698,61 +56935,310 @@ /turf/open/floor/plating, /area/maintenance/department/medical/morgue) "QoY" = ( -/obj/structure/grille, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/table, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/item/reagent_containers/glass/bottle/epinephrine{ + pixel_x = 7; + pixel_y = -3 + }, +/obj/item/reagent_containers/glass/bottle/morphine{ + pixel_x = 8; + pixel_y = -3 + }, +/obj/item/reagent_containers/syringe{ + pixel_x = 6; + pixel_y = -3 + }, +/obj/item/device/radio/intercom{ + freerange = 0; + frequency = 1485; + listening = 1; + name = "Station Intercom (Medbay)"; + pixel_x = 30 + }, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "QoZ" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/maintenance/port/fore) "Qpa" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/maintenance/port/fore) "Qpb" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "Qpc" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "Qpd" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/maintenance/fore) "Qpe" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/maintenance/fore) "Qpf" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, -/area/space/nearstation) +/area/maintenance/fore) "Qpg" = ( -/obj/structure/grille, -/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "Qph" = ( -/obj/structure/window/reinforced, -/obj/vehicle/ridden/secway, -/obj/item/key/security, -/obj/machinery/door/window/eastleft{ - name = "Secway Docking Port" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel/showroomfloor, -/area/security/main) +/turf/open/space/basic, +/area/space/nearstation) "Qpi" = ( +/turf/open/space/basic, +/area/space/nearstation) +"Qpj" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpk" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpl" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qpm" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qpn" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpo" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpp" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpq" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpr" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qps" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpt" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpu" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpv" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpw" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpx" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qpy" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qpz" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpA" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpB" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpC" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpD" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpE" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpF" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpG" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpH" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpI" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpJ" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpK" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpL" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"QpM" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"QpN" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpO" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpP" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpQ" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpR" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpS" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpT" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpU" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpV" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QpW" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpX" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QpY" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"QpZ" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qqa" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqb" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqc" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqd" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqe" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqf" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqg" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqh" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqi" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqj" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qqk" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qql" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqm" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqn" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqo" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqp" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqq" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqr" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqs" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqt" = ( +/obj/structure/grille, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) +"Qqu" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qqv" = ( +/turf/open/space/basic, +/area/maintenance/port/fore) +"Qqw" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqx" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqy" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"Qqz" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqA" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqB" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqC" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqD" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqE" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqF" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QqG" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QqH" = ( /obj/structure/window/reinforced, /obj/vehicle/ridden/secway, /obj/item/key/security, @@ -57762,31 +57248,119 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"Qpj" = ( +"QqI" = ( +/turf/open/space/basic, +/area/storage/primary) +"QqJ" = ( +/turf/open/space/basic, +/area/storage/primary) +"QqK" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqL" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqM" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqN" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqO" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqP" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqQ" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqR" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqS" = ( +/turf/open/space/basic, +/area/maintenance/bar/cafe) +"QqT" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QqU" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QqV" = ( +/obj/structure/window/reinforced, +/obj/vehicle/ridden/secway, +/obj/item/key/security, +/obj/machinery/door/window/eastleft{ + name = "Secway Docking Port" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/showroomfloor, +/area/security/main) +"QqW" = ( /obj/structure/closet/l3closet/security, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"Qpk" = ( +"QqX" = ( +/turf/open/space/basic, +/area/storage/primary) +"QqY" = ( +/turf/open/space/basic, +/area/storage/primary) +"QqZ" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qra" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qrb" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qrc" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qrd" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qre" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qrf" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qrg" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qrh" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qri" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qrj" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qrk" = ( /obj/machinery/flasher/portable, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpl" = ( +"Qrl" = ( /obj/machinery/flasher/portable, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpm" = ( +"Qrm" = ( /obj/machinery/flasher/portable, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpn" = ( +"Qrn" = ( /obj/machinery/flasher/portable, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpo" = ( +"Qro" = ( /obj/structure/table, /obj/item/grenade/barrier{ pixel_x = 4 @@ -57800,14 +57374,14 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpp" = ( +"Qrp" = ( /obj/structure/rack, /obj/item/gun/energy/e_gun/dragnet, /obj/item/gun/energy/e_gun/dragnet, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpq" = ( +"Qrq" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/bulletproof{ pixel_x = -3; @@ -57834,7 +57408,7 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qpr" = ( +"Qrr" = ( /obj/structure/rack, /obj/item/clothing/suit/armor/riot{ pixel_x = -3; @@ -57866,7 +57440,7 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"Qps" = ( +"Qrs" = ( /obj/structure/window/reinforced, /obj/machinery/door/window/eastleft{ name = "Cyborg Docking Port" @@ -57875,21 +57449,60 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"Qpt" = ( +"Qrt" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot{ dir = 2 }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"Qpu" = ( +"Qru" = ( /obj/structure/closet/secure_closet/security/sec, /obj/effect/turf_decal/bot{ dir = 2 }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"Qpv" = ( +"Qrv" = ( +/turf/open/space/basic, +/area/storage/primary) +"Qrw" = ( +/turf/open/space/basic, +/area/storage/primary) +"Qrx" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qry" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qrz" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrA" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrB" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QrC" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QrD" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QrE" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QrF" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QrG" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QrH" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QrI" = ( /obj/machinery/camera/motion{ c_tag = "Non-Lethal Armory Motion Sensor"; dir = 4 @@ -57899,14 +57512,14 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"Qpw" = ( +"QrJ" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"Qpx" = ( +"QrK" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/stripes/line{ @@ -57914,21 +57527,21 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"Qpy" = ( +"QrL" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"Qpz" = ( +"QrM" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpA" = ( +"QrN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -57937,14 +57550,14 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpB" = ( +"QrO" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpC" = ( +"QrP" = ( /obj/machinery/door/poddoor/shutters{ id = "lowsecarmory"; name = "Non-Lethal Armoury Shutter" @@ -57958,31 +57571,70 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpD" = ( +"QrQ" = ( /obj/effect/landmark/secequipment, /obj/effect/turf_decal/bot{ dir = 2 }, /turf/open/floor/plasteel/showroomfloor, /area/security/main) -"QpE" = ( +"QrR" = ( +/turf/open/space/basic, +/area/storage/primary) +"QrS" = ( +/turf/open/space/basic, +/area/storage/primary) +"QrT" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrU" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrV" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrW" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QrX" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QrY" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QrZ" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsa" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsb" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsc" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qsd" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qse" = ( /obj/machinery/suit_storage_unit/security, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpF" = ( +"Qsf" = ( /obj/machinery/suit_storage_unit/security, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpG" = ( +"Qsg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, /obj/structure/tank_dispenser/oxygen, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpH" = ( +"Qsh" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57990,7 +57642,7 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpI" = ( +"Qsi" = ( /obj/machinery/suit_storage_unit/security, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57998,7 +57650,7 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpJ" = ( +"Qsj" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -58011,14 +57663,14 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpK" = ( +"Qsk" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpL" = ( +"Qsl" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ @@ -58026,7 +57678,85 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpM" = ( +"Qsm" = ( +/turf/open/space/basic, +/area/storage/primary) +"Qsn" = ( +/turf/open/space/basic, +/area/storage/primary) +"Qso" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qsp" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qsq" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qsr" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"Qss" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qst" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsu" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsv" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsw" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qsx" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qsy" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qsz" = ( +/turf/open/space/basic, +/area/storage/primary) +"QsA" = ( +/turf/open/space/basic, +/area/storage/primary) +"QsB" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsC" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsD" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsE" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsF" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QsG" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QsH" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QsI" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QsJ" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QsK" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QsL" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QsM" = ( /obj/machinery/firealarm{ pixel_y = 24 }, @@ -58035,7 +57765,7 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpN" = ( +"QsN" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -58049,7 +57779,7 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpO" = ( +"QsO" = ( /obj/machinery/light{ dir = 1 }, @@ -58062,7 +57792,7 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpP" = ( +"QsP" = ( /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -58080,7 +57810,7 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpQ" = ( +"QsQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -58089,23 +57819,140 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) -"QpR" = ( +"QsR" = ( +/turf/open/space/basic, +/area/storage/primary) +"QsS" = ( +/turf/open/space/basic, +/area/storage/primary) +"QsT" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsU" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsV" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsW" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/mime) +"QsX" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"QsY" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"QsZ" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qta" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qtb" = ( +/turf/open/space/basic, +/area/crew_quarters/theatre/clown) +"Qtc" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qtd" = ( +/turf/open/space/basic, +/area/maintenance/fore) +"Qte" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtf" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtg" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qth" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qti" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtj" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtk" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtl" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtm" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtn" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qto" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtp" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtq" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtr" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qts" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtt" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtu" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtv" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtw" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtx" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qty" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"Qtz" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"QtA" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"QtB" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"QtC" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"QtD" = ( +/turf/open/space/basic, +/area/hallway/primary/port) +"QtE" = ( /obj/structure/table, /obj/item/storage/box/firingpins, /obj/item/storage/box/firingpins, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpS" = ( +"QtF" = ( /obj/structure/table, /obj/item/storage/toolbox/drone, /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) -"QpT" = ( +"QtG" = ( /obj/structure/falsewall, /obj/effect/turf_decal/delivery/white, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"QpU" = ( +"QtH" = ( /obj/effect/turf_decal/loading_area/white, /obj/effect/turf_decal/stripes/white/corner{ dir = 8 @@ -58113,7 +57960,7 @@ /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"QpV" = ( +"QtI" = ( /obj/structure/cable{ icon_state = "4-8" }, @@ -58129,7 +57976,7 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"QpW" = ( +"QtJ" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 8 }, @@ -58138,14 +57985,14 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"QpX" = ( +"QtK" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 1 }, /obj/effect/turf_decal/stripes/white/corner, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"QpY" = ( +"QtL" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 @@ -58164,22 +58011,22 @@ /obj/effect/turf_decal/delivery/white, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"QpZ" = ( +"QtM" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqa" = ( +"QtN" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqb" = ( +"QtO" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqc" = ( +"QtP" = ( /obj/effect/turf_decal/stripes/white/line{ dir = 5 }, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"Qqd" = ( +"QtQ" = ( /obj/effect/turf_decal/stripes/white/line, /obj/effect/turf_decal/stripes/white/corner{ dir = 1 @@ -58191,7 +58038,7 @@ }, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"Qqe" = ( +"QtR" = ( /obj/machinery/door/window/brigdoor/security/cell{ dir = 4; id = "Secure Cell"; @@ -58213,48 +58060,48 @@ dir = 8 }, /area/security/execution/transfer) -"Qqf" = ( +"QtS" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqg" = ( +"QtT" = ( /obj/structure/bed, /obj/item/clothing/suit/straight_jacket, /obj/item/clothing/mask/muzzle, /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqh" = ( +"QtU" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqi" = ( +"QtV" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqj" = ( +"QtW" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qqk" = ( +"QtX" = ( /turf/open/floor/plasteel, /area/security/execution/transfer) -"Qql" = ( +"QtY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-4" }, /turf/open/floor/plating, /area/security/warden) -"Qqm" = ( +"QtZ" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/structure/table, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"Qqn" = ( +"Qua" = ( /obj/machinery/computer/secure_data{ dir = 1 }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"Qqo" = ( +"Qub" = ( /obj/structure/table, /obj/item/folder/red, /obj/item/pen, @@ -58263,7 +58110,7 @@ /obj/machinery/light, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"Qqp" = ( +"Quc" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor{ dir = 1; @@ -58290,19 +58137,19 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"Qqq" = ( +"Qud" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /turf/open/floor/plasteel, /area/security/brig) -"Qqr" = ( +"Que" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /turf/open/floor/plasteel, /area/security/brig) -"Qqs" = ( +"Quf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58310,7 +58157,7 @@ dir = 4 }, /area/security/brig) -"Qqt" = ( +"Qug" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -58318,7 +58165,7 @@ dir = 1 }, /area/security/brig) -"Qqu" = ( +"Quh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -58326,12 +58173,12 @@ dir = 1 }, /area/security/brig) -"Qqv" = ( +"Qui" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -58341,13 +58188,13 @@ dir = 9 }, /area/security/brig) -"Qqw" = ( +"Quj" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /turf/open/floor/plasteel, /area/security/brig) -"Qqx" = ( +"Quk" = ( /obj/machinery/door_timer{ id = "Cell 2"; name = "Cell 2"; @@ -58357,7 +58204,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/red/corner, /area/security/brig) -"Qqy" = ( +"Qul" = ( /obj/machinery/door_timer{ id = "Cell 3"; name = "Cell 3"; @@ -58368,7 +58215,7 @@ }, /turf/open/floor/plasteel/red/corner, /area/security/brig) -"Qqz" = ( +"Qum" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -58376,12 +58223,12 @@ dir = 8 }, /area/security/brig) -"QqA" = ( +"Qun" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -58391,14 +58238,14 @@ dir = 10 }, /area/security/brig) -"QqB" = ( +"Quo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/light, /turf/open/floor/plasteel/red/side, /area/security/brig) -"QqC" = ( +"Qup" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -58409,7 +58256,7 @@ }, /turf/open/floor/plating, /area/security/brig) -"QqD" = ( +"Quq" = ( /obj/machinery/door/window/brigdoor/security/cell{ id = "Cell 3"; name = "Cell 3" @@ -58420,12 +58267,12 @@ }, /turf/open/floor/plasteel/red/side, /area/security/brig) -"QqE" = ( +"Qur" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -58435,7 +58282,7 @@ dir = 9 }, /area/security/brig) -"QqF" = ( +"Qus" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, @@ -58444,25 +58291,25 @@ }, /turf/open/floor/plasteel/floorgrime, /area/security/brig) -"QqG" = ( +"Qut" = ( /turf/open/floor/plasteel/red/side{ dir = 1 }, /area/hallway/primary/fore) -"QqH" = ( +"Quu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/plasteel/floorgrime, /area/security/brig) -"QqI" = ( +"Quv" = ( /obj/machinery/flasher{ id = "Cell 2"; pixel_x = -28 }, /turf/open/floor/plasteel/floorgrime, /area/security/brig) -"QqJ" = ( +"Quw" = ( /obj/machinery/flasher{ id = "Cell 3"; pixel_x = -28 @@ -58472,14 +58319,14 @@ }, /turf/open/floor/plasteel/floorgrime, /area/security/brig) -"QqK" = ( +"Qux" = ( /obj/machinery/flasher{ id = "Cell 4"; pixel_x = -28 }, /turf/open/floor/plasteel/floorgrime, /area/security/brig) -"QqL" = ( +"Quy" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "briggate"; @@ -58491,44 +58338,44 @@ }, /turf/open/floor/plasteel/dark, /area/security/brig) -"QqM" = ( +"Quz" = ( /turf/open/floor/plasteel/red/side{ dir = 8 }, /area/hallway/primary/fore) -"QqN" = ( +"QuA" = ( /turf/open/floor/plasteel/red/side{ dir = 1 }, /area/hallway/primary/fore) -"QqO" = ( +"QuB" = ( /turf/open/floor/plasteel/red/side{ dir = 1 }, /area/hallway/primary/fore) -"QqP" = ( +"QuC" = ( /turf/open/floor/plasteel/red/side{ dir = 6 }, /area/hallway/primary/fore) -"QqQ" = ( +"QuD" = ( /turf/open/floor/plasteel/red/side{ dir = 10 }, /area/hallway/primary/fore) -"QqR" = ( +"QuE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 4 }, /area/hallway/primary/fore) -"QqS" = ( +"QuF" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plasteel/red/side{ dir = 4 }, /area/hallway/primary/fore) -"QqT" = ( +"QuG" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "briggate"; @@ -58545,7 +58392,7 @@ }, /turf/open/floor/plasteel/dark, /area/security/brig) -"QqU" = ( +"QuH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "seclobby"; @@ -58556,24 +58403,24 @@ }, /turf/open/floor/plating, /area/security/brig) -"QqV" = ( +"QuI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 4 }, /area/hallway/primary/fore) -"QqW" = ( +"QuJ" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/red/side{ dir = 4 }, /area/hallway/primary/fore) -"QqX" = ( +"QuK" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"QqY" = ( +"QuL" = ( /obj/machinery/light{ dir = 1 }, @@ -58581,7 +58428,7 @@ dir = 1 }, /area/hallway/primary/fore) -"QqZ" = ( +"QuM" = ( /obj/structure/sign/securearea{ pixel_y = 32 }, @@ -58589,9 +58436,9 @@ dir = 4 }, /area/hallway/primary/fore) -"Qra" = ( +"QuN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "lobbyairlock"; name = "Security Lobby"; @@ -58601,33 +58448,33 @@ dir = 1 }, /area/hallway/primary/fore) -"Qrb" = ( +"QuO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/red/side{ dir = 10 }, /area/hallway/primary/fore) -"Qrc" = ( +"QuP" = ( /turf/open/floor/plasteel/red/side, /area/hallway/primary/fore) -"Qrd" = ( +"QuQ" = ( /turf/open/floor/plasteel/red/side, /area/hallway/primary/fore) -"Qre" = ( +"QuR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 6 }, /area/hallway/primary/fore) -"Qrf" = ( +"QuS" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/red/side{ dir = 4 }, /area/hallway/primary/fore) -"Qrg" = ( +"QuT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "lobbyairlock"; name = "Security Lobby"; @@ -58635,12 +58482,12 @@ }, /turf/open/floor/plasteel/red/side, /area/hallway/primary/fore) -"Qrh" = ( +"QuU" = ( /turf/open/floor/plasteel/red/side{ dir = 6 }, /area/hallway/primary/fore) -"Qri" = ( +"QuV" = ( /obj/machinery/flasher{ id = "brigentry"; pixel_x = 0; @@ -58652,247 +58499,141 @@ }, /turf/open/floor/plasteel/red/side, /area/hallway/primary/fore) -"Qrj" = ( +"QuW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrk" = ( +"QuX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/fore/secondary) -"Qrl" = ( +"QuY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/fore/secondary) -"Qrm" = ( +"QuZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrn" = ( +"Qva" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"Qro" = ( +"Qvb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrp" = ( +"Qvc" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrq" = ( +"Qvd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrr" = ( +"Qve" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrs" = ( +"Qvf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrt" = ( +"Qvg" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /turf/open/floor/plating, /area/maintenance/fore) -"Qru" = ( +"Qvh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/fore) -"Qrv" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar/cafe) -"Qrw" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"Qrx" = ( -/obj/structure/chair/wood{ +"Qvi" = ( +/obj/machinery/vending/autodrobe, +/turf/open/floor/plasteel/white/side{ dir = 8 }, -/turf/open/floor/wood{ - icon_state = "wood-broken7" - }, -/area/maintenance/bar/cafe) -"Qry" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"Qrz" = ( -/obj/structure/table/wood, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrA" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken5" - }, -/area/maintenance/bar/cafe) -"QrB" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks/beer, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrC" = ( -/turf/open/floor/wood{ - icon_state = "wood-broken5" - }, -/area/maintenance/bar/cafe) -"QrD" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrE" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/area/crew_quarters/theatre/mime) +"Qvj" = ( +/obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrF" = ( +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/crew_quarters/theatre/mime) +"Qvk" = ( +/obj/structure/bed, +/obj/item/bedsheet/mime, +/obj/machinery/camera{ + c_tag = "Mime's Office"; + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrH" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/structure/chair/stool/bar, -/turf/open/floor/wood{ - icon_state = "wood-broken7" - }, -/area/maintenance/bar/cafe) -"QrI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/structure/table/wood, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/maintenance/bar/cafe) -"QrJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrK" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/drinks, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrL" = ( -/obj/structure/chair/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/structure/table/wood, -/obj/machinery/light/small, -/turf/open/floor/wood{ - icon_state = "wood-broken" +/turf/open/floor/plasteel/white/side{ + dir = 8 }, -/area/maintenance/bar/cafe) -"QrN" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/area/crew_quarters/theatre/mime) +"Qvl" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/theatre/clown"; + dir = 4; + name = "Clown's Office APC"; + pixel_x = 26; + pixel_y = 1 }, -/turf/open/floor/wood, -/area/maintenance/bar/cafe) -"QrO" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, -/area/maintenance/bar/cafe) -"QrP" = ( -/obj/structure/table/wood, -/obj/item/storage/box/drinkingglasses, -/obj/machinery/light_switch{ - pixel_x = 27 - }, /turf/open/floor/wood, /area/maintenance/bar/cafe) -"QrQ" = ( -/turf/closed/wall, -/area/crew_quarters/theatre/mime) -"QrR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/crew_quarters/theatre/mime) -"QrS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, +"Qvm" = ( +/obj/structure/closet/secure_closet/freezer/cream_pie, +/obj/machinery/camera{ + c_tag = "Clown's Office"; + c_tag_order = 999; + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"QrT" = ( -/obj/machinery/vending/autodrobe, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"QrU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/light{ - dir = 1 - }, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"QrV" = ( +"Qvn" = ( /obj/structure/closet/crate/wooden/toy, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light{ dir = 1 }, +/obj/machinery/airalarm{ + pixel_y = 23 + }, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"QrW" = ( +"Qvo" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"QrX" = ( +"Qvp" = ( /obj/structure/table, /obj/item/reagent_containers/food/snacks/baguette, /obj/item/toy/dummy, @@ -58900,35 +58641,89 @@ pixel_x = -28 }, /turf/open/floor/plasteel/white/side{ - dir = 1 + dir = 8 }, /area/crew_quarters/theatre/mime) -"QrY" = ( +"Qvq" = ( /obj/effect/landmark/start/mime, /obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 + dir = 4 }, /turf/open/floor/plasteel/white/side{ - dir = 1 + dir = 8 }, /area/crew_quarters/theatre/mime) -"QrZ" = ( +"Qvr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/crew_quarters/theatre/mime) +"Qvs" = ( +/obj/machinery/door/airlock/freezer{ + boltDown = null; + boltUp = null; + doorClose = null; + doorDeni = null; + doorOpen = null; + name = "Mime's Office"; + noPower = null; + req_access_txt = "46" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/white/side{ + dir = 8 + }, +/area/crew_quarters/theatre/mime) +"Qvt" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/bar/cafe) +"Qvu" = ( +/obj/machinery/door/airlock/clown{ + name = "Clown's Office"; + req_access_txt = "46" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/redyellow, +/area/crew_quarters/theatre/clown) +"Qvv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/redyellow, +/area/crew_quarters/theatre/clown) +"Qvw" = ( /obj/effect/landmark/start/clown, /obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 + dir = 8 }, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"Qsa" = ( +"Qvx" = ( /obj/structure/bed, /obj/item/bedsheet/clown, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 +/obj/structure/mirror{ + pixel_x = 28 }, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"Qsb" = ( +"Qvy" = ( /obj/structure/table, /obj/item/lipstick/random{ pixel_x = -2; @@ -58943,33 +58738,10 @@ pixel_x = -22 }, /turf/open/floor/plasteel/white/side{ - dir = 1 + dir = 8 }, /area/crew_quarters/theatre/mime) -"Qsc" = ( -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"Qsd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"Qse" = ( -/obj/structure/reagent_dispensers/water_cooler, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) -"Qsf" = ( -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) -"Qsg" = ( -/obj/structure/displaycase/clown, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) -"Qsh" = ( +"Qvz" = ( /obj/structure/table, /obj/item/paper_bin{ pixel_x = 1; @@ -58977,131 +58749,346 @@ }, /obj/item/pen, /turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"Qsi" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"Qsj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plasteel/white/side{ - dir = 1 - }, -/area/crew_quarters/theatre/mime) -"Qsk" = ( -/obj/structure/table, -/obj/item/device/flashlight/lamp/bananalamp, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/item/device/radio/intercom{ - freerange = 0; - frequency = 1459; - name = "Station Intercom (General)"; - pixel_x = -30 - }, -/turf/open/floor/plasteel/redyellow, -/area/crew_quarters/theatre/clown) -"Qsl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, +/area/crew_quarters/theatre/mime) +"QvA" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/theatre/mime"; + dir = 8; + name = "Mime's Office APC"; + pixel_x = -26; + pixel_y = -1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvB" = ( +/obj/structure/displaycase/clown, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"Qsm" = ( +"QvC" = ( /obj/structure/statue/bananium/clown, /turf/open/floor/plasteel/redyellow, /area/crew_quarters/theatre/clown) -"Qsn" = ( -/obj/effect/spawner/structure/window, +"QvD" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 8 + }, +/turf/open/floor/plating, +/area/crew_quarters/theatre/mime) +"QvE" = ( +/obj/effect/spawner/structure/window/hollow/middle, +/turf/open/floor/plating, +/area/crew_quarters/theatre/mime) +"QvF" = ( +/obj/effect/spawner/structure/window/hollow/middle, /turf/open/floor/plating, /area/crew_quarters/theatre/clown) -"Qso" = ( -/obj/machinery/door/airlock/clown{ - name = "Clown's Office"; - req_access_txt = "46" +"QvG" = ( +/obj/effect/spawner/structure/window/hollow/end{ + dir = 4 }, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plating, /area/crew_quarters/theatre/clown) -"Qsp" = ( +"QvH" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/bar/cafe) +"QvI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/mineral/wood, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvJ" = ( +/obj/machinery/power/apc{ + areastring = "/area/maintenance/bar/cafe"; + dir = 1; + name = "Abandoned Cafe APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/bar/cafe) +"QvK" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvL" = ( +/obj/structure/chair/stool/bar, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 2; + pixel_y = 24 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/bar/cafe) +"QvM" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/bar/cafe) +"QvN" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvP" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/maintenance/bar/cafe) +"QvQ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/bar/cafe) +"QvR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvS" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvT" = ( +/obj/structure/chair/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/bar/cafe) +"QvU" = ( +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvV" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvW" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"QvX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/bar/cafe) +"QvY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/maintenance/bar/cafe) +"QvZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/bar/cafe) +"Qwa" = ( +/obj/machinery/light_switch{ + pixel_x = 27 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"Qwb" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/obj/structure/light_construct/small, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"Qwc" = ( +/obj/structure/chair/wood{ + dir = 8 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/bar/cafe) +"Qwd" = ( +/turf/closed/wall, +/area/maintenance/bar/cafe) +"Qwe" = ( +/obj/effect/spawner/structure/window/hollow/directional{ + dir = 6 + }, +/obj/item/shard{ + icon_state = "small" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/maintenance/bar/cafe) +"Qwf" = ( +/turf/closed/wall, +/area/maintenance/bar/cafe) +"Qwg" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/cobweb, +/obj/item/stack/sheet/glass{ + amount = 3 + }, +/obj/item/wrench, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"Qwh" = ( +/obj/structure/light_construct/small, +/obj/structure/table/wood, +/obj/item/storage/box/drinkingglasses, +/turf/open/floor/wood, +/area/maintenance/bar/cafe) +"Qwi" = ( +/obj/machinery/camera{ + c_tag = "Bar Storage" + }, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"Qwj" = ( +/obj/effect/spawner/structure/window/hollow, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plating, +/area/maintenance/bar/cafe) +"Qwk" = ( +/obj/effect/turf_decal/loading_area/white, +/turf/open/floor/wood, +/area/crew_quarters/bar) +"Qwl" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"Qwm" = ( /obj/machinery/door/airlock{ name = "Bar Storage"; req_access_txt = "25" }, -/turf/open/floor/plasteel{ - icon_state = "wood" - }, -/area/crew_quarters/bar) -"Qsq" = ( -/obj/structure/reagent_dispensers/beerkeg, /turf/open/floor/wood, /area/crew_quarters/bar) -"Qsr" = ( +"Qwn" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"Qwo" = ( /obj/machinery/vending/coffee, /turf/open/floor/wood, /area/bridge/meeting_room) -"Qss" = ( +"Qwp" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, /turf/open/floor/plating, /area/bridge/meeting_room) -"Qst" = ( +"Qwq" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsu" = ( +"Qwr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsv" = ( +"Qws" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsw" = ( +"Qwt" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsx" = ( +"Qwu" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsy" = ( +"Qwv" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"Qsz" = ( +"Qww" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"QsA" = ( +"Qwx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/department/bridge) -"QsB" = ( +"Qwy" = ( /turf/open/floor/plating, /area/maintenance/department/bridge) -"QsC" = ( +"Qwz" = ( /obj/machinery/door/airlock/maintenance{ name = "bridge maintenance access"; req_access_txt = "20" }, /turf/open/floor/plating, /area/crew_quarters/heads/captain) -"QsD" = ( +"QwA" = ( /turf/closed/wall/r_wall, /area/maintenance/department/bridge) -"QsE" = ( +"QwB" = ( /turf/closed/wall/r_wall, /area/maintenance/department/bridge) -"QsF" = ( +"QwC" = ( /obj/machinery/computer/bank_machine, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"QsG" = ( +"QwD" = ( /obj/machinery/power/apc{ dir = 1; name = "Vault APC"; @@ -59113,13 +59100,13 @@ }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"QsH" = ( +"QwE" = ( /obj/structure/filingcabinet, /obj/item/folder/documents, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"QsI" = ( +"QwF" = ( /obj/structure/closet/crate{ name = "Gold Crate" }, @@ -59138,19 +59125,19 @@ /obj/effect/turf_decal/bot_white/right, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"QsJ" = ( +"QwG" = ( /obj/structure/cable{ icon_state = "2-4" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"QsK" = ( +"QwH" = ( /obj/structure/cable{ icon_state = "1-8" }, /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) -"QsL" = ( +"QwI" = ( /obj/item/coin/silver{ pixel_x = 7; pixel_y = 12 @@ -59177,26 +59164,26 @@ /obj/effect/turf_decal/bot_white/left, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"QsM" = ( +"QwJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) -"QsN" = ( +"QwK" = ( /obj/structure/sign/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) -"QsO" = ( +"QwL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) -"QsP" = ( +"QwM" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ @@ -59204,10 +59191,10 @@ }, /turf/open/floor/plating, /area/security/checkpoint/tertiary) -"QsQ" = ( +"QwN" = ( /turf/closed/wall/r_wall, /area/security/checkpoint/tertiary) -"QsR" = ( +"QwO" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ icon_state = "2-4" @@ -59222,7 +59209,7 @@ dir = 5 }, /area/security/checkpoint/tertiary) -"QsS" = ( +"QwP" = ( /obj/structure/closet/secure_closet/security, /obj/machinery/power/apc{ areastring = "/area/security/checkpoint/tertiary"; @@ -59238,7 +59225,7 @@ dir = 9 }, /area/security/checkpoint/tertiary) -"QsT" = ( +"QwQ" = ( /obj/structure/reagent_dispensers/peppertank{ pixel_y = 30 }, @@ -59249,7 +59236,7 @@ dir = 1 }, /area/security/checkpoint/tertiary) -"QsU" = ( +"QwR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "2-8" @@ -59261,7 +59248,7 @@ dir = 1 }, /area/security/checkpoint/tertiary) -"QsV" = ( +"QwS" = ( /obj/structure/cable{ icon_state = "1-8" }, @@ -59269,13 +59256,13 @@ dir = 1 }, /area/security/checkpoint/tertiary) -"QsW" = ( +"QwT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/red/side{ dir = 1 }, /area/security/checkpoint/tertiary) -"QsX" = ( +"QwU" = ( /obj/machinery/requests_console{ department = "Security"; departmentType = 5; @@ -59285,13 +59272,13 @@ dir = 1 }, /area/security/checkpoint/tertiary) -"QsY" = ( +"QwV" = ( /obj/machinery/computer/security, /turf/open/floor/plasteel/red/side{ dir = 5 }, /area/security/checkpoint/tertiary) -"QsZ" = ( +"QwW" = ( /obj/structure/closet/wardrobe/red, /obj/machinery/light{ dir = 8 @@ -59300,10 +59287,10 @@ dir = 8 }, /area/security/checkpoint/tertiary) -"Qta" = ( +"QwX" = ( /turf/open/floor/plasteel, /area/security/checkpoint/tertiary) -"Qtb" = ( +"QwY" = ( /obj/machinery/computer/secure_data, /obj/machinery/light{ dir = 4 @@ -59312,7 +59299,7 @@ dir = 4 }, /area/security/checkpoint/tertiary) -"Qtc" = ( +"QwZ" = ( /obj/machinery/airalarm{ dir = 4; pixel_x = -22 @@ -59334,7 +59321,7 @@ dir = 10 }, /area/security/checkpoint/tertiary) -"Qtd" = ( +"Qxa" = ( /obj/item/paper_bin{ pixel_x = 1; pixel_y = 9 @@ -59343,7 +59330,7 @@ /obj/structure/table, /turf/open/floor/plasteel/red/side, /area/security/checkpoint/tertiary) -"Qte" = ( +"Qxb" = ( /obj/item/device/radio/off, /obj/item/crowbar, /obj/item/device/assembly/flash/handheld, @@ -59357,7 +59344,7 @@ dir = 6 }, /area/security/checkpoint/tertiary) -"Qtf" = ( +"Qxc" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "vault"; @@ -59371,11 +59358,20 @@ }, /turf/open/floor/plating, /area/security/checkpoint/tertiary) -"Qtg" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) -"Qth" = ( +"Qxd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel/red/corner{ + dir = 4 + }, +/area/hallway/primary/central) +"Qxe" = ( +/turf/open/floor/plasteel/red/corner{ + dir = 1 + }, +/area/hallway/primary/central) +"Qxf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -59384,28 +59380,64 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"Qti" = ( +"Qxg" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxh" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxi" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxj" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxk" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxl" = ( +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"Qxm" = ( /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/maintenance/port/aft) -"Qtj" = ( +"Qxn" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"Qxo" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"Qxp" = ( /obj/machinery/door/airlock{ id_tag = "MaintDorm2"; name = "Maintenance Dorm 2" }, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qtk" = ( +"Qxq" = ( +/obj/structure/lattice, +/turf/open/space, +/area/space) +"Qxr" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qtl" = ( +"Qxs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qtm" = ( +"Qxt" = ( /obj/structure/rack{ dir = 8; layer = 2.9 @@ -59417,11 +59449,15 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/port/aft) -"Qtn" = ( +"Qxu" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"Qxv" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qto" = ( +"Qxw" = ( /obj/machinery/light/small, /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/general/hidden{ @@ -59429,7 +59465,7 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qtp" = ( +"Qxx" = ( /obj/structure/bed, /obj/item/bedsheet, /obj/machinery/atmospherics/pipe/simple/general/hidden{ @@ -59437,49 +59473,49 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) -"Qtq" = ( +"Qxy" = ( /turf/closed/wall, /area/maintenance/bar) -"Qtr" = ( +"Qxz" = ( /turf/closed/wall, /area/maintenance/bar) -"Qts" = ( +"QxA" = ( /turf/closed/wall, /area/maintenance/bar) -"Qtt" = ( +"QxB" = ( /obj/machinery/door/airlock/maintenance/abandoned{ req_access_txt = "0" }, /turf/open/floor/plating, /area/maintenance/bar) -"Qtu" = ( +"QxC" = ( /turf/closed/wall, /area/maintenance/bar) -"Qtv" = ( +"QxD" = ( /turf/closed/wall, /area/maintenance/bar) -"Qtw" = ( +"QxE" = ( /turf/closed/wall, /area/maintenance/bar) -"Qtx" = ( +"QxF" = ( /turf/closed/wall, /area/maintenance/bar) -"Qty" = ( +"QxG" = ( /turf/open/floor/wood, /area/maintenance/bar) -"Qtz" = ( +"QxH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/open/floor/wood, /area/maintenance/bar) -"QtA" = ( +"QxI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"QtB" = ( +"QxJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59487,7 +59523,7 @@ icon_state = "wood-broken5" }, /area/maintenance/bar) -"QtC" = ( +"QxK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59496,7 +59532,7 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"QtD" = ( +"QxL" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59508,7 +59544,7 @@ }, /turf/open/floor/plating, /area/maintenance/bar) -"QtE" = ( +"QxM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59517,30 +59553,30 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"QtF" = ( +"QxN" = ( /turf/closed/wall, /area/maintenance/bar) -"QtG" = ( +"QxO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ icon_state = "wood-broken7" }, /area/maintenance/bar) -"QtH" = ( +"QxP" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /turf/open/floor/wood, /area/maintenance/bar) -"QtI" = ( +"QxQ" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"QtJ" = ( +"QxR" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -59555,40 +59591,40 @@ icon_state = "wood-broken7" }, /area/maintenance/bar) -"QtK" = ( +"QxS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/bar) -"QtL" = ( +"QxT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/bar) -"QtM" = ( +"QxU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/bar) -"QtN" = ( +"QxV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/bar) -"QtO" = ( +"QxW" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, /turf/closed/wall, /area/maintenance/bar) -"QtP" = ( +"QxX" = ( /turf/closed/wall, /area/maintenance/bar) -"QtQ" = ( +"QxY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -59597,7 +59633,7 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"QtR" = ( +"QxZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -59605,38 +59641,38 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) -"QtS" = ( +"Qya" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QtT" = ( +"Qyb" = ( /obj/structure/table/wood, /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) -"QtU" = ( +"Qyc" = ( /obj/structure/cable{ icon_state = "1-2" }, /turf/open/floor/wood, /area/maintenance/bar) -"QtV" = ( +"Qyd" = ( /obj/machinery/chem_dispenser/drinks/beer, /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) -"QtW" = ( +"Qye" = ( /turf/closed/wall, /area/maintenance/bar) -"QtX" = ( +"Qyf" = ( /obj/item/restraints/handcuffs/fake, /obj/effect/decal/cleanable/blood/old, /obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears, /turf/open/floor/plating, /area/maintenance/bar) -"QtY" = ( +"Qyg" = ( /obj/item/shard, /obj/item/wirecutters, /obj/item/wallframe/camera, @@ -59644,14 +59680,14 @@ icon_state = "panelscorched" }, /area/maintenance/bar) -"QtZ" = ( +"Qyh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qua" = ( +"Qyi" = ( /turf/closed/wall, /area/maintenance/bar) -"Qub" = ( +"Qyj" = ( /obj/item/device/radio/intercom{ freerange = 0; frequency = 1459; @@ -59662,22 +59698,22 @@ icon_state = "wood-broken" }, /area/maintenance/bar) -"Quc" = ( +"Qyk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"Qud" = ( +"Qyl" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ icon_state = "wood-broken7" }, /area/maintenance/bar) -"Que" = ( +"Qym" = ( /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) -"Quf" = ( +"Qyn" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -59685,15 +59721,15 @@ icon_state = "wood-broken7" }, /area/maintenance/bar) -"Qug" = ( +"Qyo" = ( /obj/structure/table/wood, /obj/machinery/chem_dispenser/drinks, /turf/open/floor/wood, /area/maintenance/bar) -"Quh" = ( +"Qyp" = ( /turf/closed/wall, /area/maintenance/bar) -"Qui" = ( +"Qyq" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -59702,7 +59738,7 @@ /obj/item/device/electropack/shockcollar, /turf/open/floor/plating, /area/maintenance/bar) -"Quj" = ( +"Qyr" = ( /obj/structure/bed, /obj/item/bedsheet/grey, /obj/effect/decal/cleanable/semen{ @@ -59714,11 +59750,11 @@ icon_state = "platingdmg3" }, /area/maintenance/bar) -"Quk" = ( +"Qys" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qul" = ( +"Qyt" = ( /obj/machinery/door/airlock/maintenance/abandoned{ name = "Incinerator Access"; req_access_txt = "12" @@ -59728,30 +59764,30 @@ }, /turf/open/floor/plating, /area/maintenance/bar) -"Qum" = ( +"Qyu" = ( /turf/open/floor/wood, /area/maintenance/bar) -"Qun" = ( +"Qyv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) -"Quo" = ( +"Qyw" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qup" = ( +"Qyx" = ( /obj/structure/table/wood, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"Quq" = ( +"Qyy" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, @@ -59760,15 +59796,15 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"Qur" = ( +"Qyz" = ( /obj/structure/table/wood, /obj/item/storage/box/drinkingglasses, /turf/open/floor/wood, /area/maintenance/bar) -"Qus" = ( +"QyA" = ( /turf/closed/wall, /area/maintenance/bar) -"Qut" = ( +"QyB" = ( /obj/item/lighter/greyscale, /obj/effect/decal/cleanable/semen{ desc = "Blech."; @@ -59778,32 +59814,32 @@ icon_state = "panelscorched" }, /area/maintenance/bar) -"Quu" = ( +"QyC" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/blood/old, /obj/item/device/assembly/signaler, /turf/open/floor/plating, /area/maintenance/bar) -"Quv" = ( +"QyD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Quw" = ( +"QyE" = ( /turf/closed/wall, /area/maintenance/bar) -"Qux" = ( +"QyF" = ( /obj/effect/spawner/lootdrop/keg, /turf/open/floor/wood, /area/maintenance/bar) -"Quy" = ( +"QyG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"Quz" = ( +"QyH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QuA" = ( +"QyI" = ( /obj/machinery/power/apc{ areastring = "/area/maintenance/bar"; dir = 2; @@ -59816,37 +59852,37 @@ icon_state = "wood-broken7" }, /area/maintenance/bar) -"QuB" = ( +"QyJ" = ( /turf/closed/wall, /area/maintenance/bar) -"QuC" = ( +"QyK" = ( /turf/closed/wall, /area/maintenance/bar) -"QuD" = ( +"QyL" = ( /obj/structure/falsewall, /turf/open/floor/plating, /area/maintenance/bar) -"QuE" = ( +"QyM" = ( /turf/closed/wall, /area/maintenance/bar) -"QuF" = ( +"QyN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"QuG" = ( +"QyO" = ( /turf/closed/wall, /area/maintenance/bar) -"QuH" = ( +"QyP" = ( /turf/closed/wall, /area/maintenance/bar) -"QuI" = ( +"QyQ" = ( /obj/machinery/door/airlock/maintenance/abandoned{ req_access_txt = "0" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QuJ" = ( +"QyR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/maintenance/abandoned{ req_access_txt = "0" @@ -59855,48 +59891,48 @@ icon_state = "wood-broken" }, /area/maintenance/bar) -"QuK" = ( +"QyS" = ( /obj/structure/sign/poster/official/no_erp, /turf/closed/wall, /area/maintenance/bar) -"QuL" = ( +"QyT" = ( /turf/closed/wall, /area/maintenance/bar) -"QuM" = ( +"QyU" = ( /obj/machinery/vending/clothing, /turf/open/floor/wood, /area/maintenance/bar) -"QuN" = ( +"QyV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"QuO" = ( +"QyW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QuP" = ( +"QyX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QuQ" = ( +"QyY" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" }, /area/maintenance/bar) -"QuR" = ( +"QyZ" = ( /turf/open/floor/wood{ icon_state = "wood-broken6" }, /area/maintenance/bar) -"QuS" = ( +"Qza" = ( /obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/maintenance/bar) -"QuT" = ( +"Qzb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"QuU" = ( +"Qzc" = ( /obj/structure/sign/poster/random{ pixel_x = -32 }, @@ -59907,28 +59943,28 @@ icon_state = "wood-broken7" }, /area/maintenance/bar) -"QuV" = ( +"Qzd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood, /area/maintenance/bar) -"QuW" = ( +"Qze" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/wood{ icon_state = "wood-broken" }, /area/maintenance/bar) -"QuX" = ( +"Qzf" = ( /obj/structure/chair/stool, /turf/open/floor/wood{ icon_state = "wood-broken7" }, /area/maintenance/bar) -"QuY" = ( +"Qzg" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) -"QuZ" = ( +"Qzh" = ( /obj/item/paper_bin{ pixel_x = -3; pixel_y = 7 @@ -59940,38 +59976,38 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) -"Qva" = ( +"Qzi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qvb" = ( +"Qzj" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvc" = ( +"Qzk" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvd" = ( +"Qzl" = ( /obj/structure/table/wood/poker, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qve" = ( +"Qzm" = ( /obj/structure/table/wood/poker, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvf" = ( +"Qzn" = ( /obj/structure/table/wood/poker, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -59979,20 +60015,20 @@ /obj/item/storage/pill_bottle/dice, /turf/open/floor/wood, /area/maintenance/bar) -"Qvg" = ( +"Qzo" = ( /obj/structure/chair/stool, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvh" = ( +"Qzp" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvi" = ( +"Qzq" = ( /obj/machinery/light{ dir = 4 }, @@ -60002,57 +60038,57 @@ icon_state = "wood-broken6" }, /area/maintenance/bar) -"Qvj" = ( +"Qzr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qvk" = ( +"Qzs" = ( /turf/open/floor/wood{ icon_state = "wood-broken5" }, /area/maintenance/bar) -"Qvl" = ( +"Qzt" = ( /obj/structure/table/wood/poker, /turf/open/floor/wood, /area/maintenance/bar) -"Qvm" = ( +"Qzu" = ( /obj/structure/table/wood/poker, /turf/open/floor/wood, /area/maintenance/bar) -"Qvn" = ( +"Qzv" = ( /obj/structure/table/wood/poker, /obj/item/coin/iron, /turf/open/floor/wood, /area/maintenance/bar) -"Qvo" = ( +"Qzw" = ( /obj/machinery/vending/games{ name = "\improper Good 'Clean' Fun" }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvp" = ( +"Qzx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qvq" = ( +"Qzy" = ( /obj/effect/spawner/lootdrop/keg, /turf/open/floor/wood{ icon_state = "wood-broken7" }, /area/maintenance/bar) -"Qvr" = ( +"Qzz" = ( /obj/structure/sign/poster/random{ pixel_y = -32 }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvs" = ( +"QzA" = ( /obj/structure/chair/stool, /turf/open/floor/wood{ icon_state = "wood-broken" }, /area/maintenance/bar) -"Qvt" = ( +"QzB" = ( /obj/structure/chair/stool, /obj/item/device/radio/intercom{ name = "Station Intercom (General)"; @@ -60060,7 +60096,7 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"Qvu" = ( +"QzC" = ( /obj/structure/sign/poster/random{ pixel_y = -32 }, @@ -60068,35 +60104,35 @@ icon_state = "wood-broken7" }, /area/maintenance/bar) -"Qvv" = ( +"QzD" = ( /obj/machinery/vending/kink, /turf/open/floor/wood, /area/maintenance/bar) -"Qvw" = ( +"QzE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/bar) -"Qvx" = ( +"QzF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/closed/wall/r_wall, /area/engine/engine_smes) -"Qvy" = ( +"QzG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" }, /turf/closed/wall/r_wall, /area/engine/engine_smes) -"Qvz" = ( +"QzH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvA" = ( +"QzI" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; @@ -60109,7 +60145,7 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvB" = ( +"QzJ" = ( /obj/machinery/camera{ c_tag = "Gravity Generator Foyer" }, @@ -60125,17 +60161,17 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvC" = ( +"QzK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvD" = ( +"QzL" = ( /turf/closed/wall, /area/engine/gravity_generator) -"QvE" = ( +"QzM" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -60148,11 +60184,11 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvF" = ( +"QzN" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvG" = ( +"QzO" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, @@ -60164,7 +60200,7 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvH" = ( +"QzP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, @@ -60173,42 +60209,42 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvI" = ( +"QzQ" = ( /obj/structure/grille, /turf/open/floor/plating/airless, /area/engine/engineering) -"QvJ" = ( +"QzR" = ( /obj/structure/grille, /turf/open/floor/plating/airless, /area/engine/engineering) -"QvK" = ( +"QzS" = ( /obj/structure/grille, /turf/open/floor/plating/airless, /area/engine/engineering) -"QvL" = ( +"QzT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ icon_state = "1-2" }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvM" = ( +"QzU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvN" = ( +"QzV" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvO" = ( +"QzW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvP" = ( +"QzX" = ( /obj/item/device/radio/intercom{ broadcasting = 0; listening = 1; @@ -60220,19 +60256,19 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvQ" = ( +"QzY" = ( /obj/machinery/power/terminal, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/cable, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvR" = ( +"QzZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"QvS" = ( +"QAa" = ( /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -60244,11 +60280,11 @@ /obj/item/pen/blue, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvT" = ( +"QAb" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvU" = ( +"QAc" = ( /obj/machinery/power/smes{ charge = 5e+006 }, @@ -60257,7 +60293,7 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvV" = ( +"QAd" = ( /obj/machinery/power/apc{ dir = 8; name = "Gravity Generator APC"; @@ -60276,28 +60312,28 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvW" = ( +"QAe" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvX" = ( +"QAf" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvY" = ( +"QAg" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable{ icon_state = "4-8" }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"QvZ" = ( +"QAh" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -60313,7 +60349,7 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) -"Qwa" = ( +"QAi" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; @@ -60326,7 +60362,7 @@ }, /turf/open/floor/plating, /area/engine/gravity_generator) -"Qwb" = ( +"QAj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-8" @@ -60336,8 +60372,8 @@ }, /turf/open/floor/plating, /area/engine/gravity_generator) -"Qwc" = ( -/obj/machinery/door/airlock/glass_engineering{ +"QAk" = ( +/obj/machinery/door/airlock/engineering/glass{ name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0" @@ -60347,7 +60383,7 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwd" = ( +"QAl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-8" @@ -60357,7 +60393,7 @@ }, /turf/open/floor/plating, /area/engine/gravity_generator) -"Qwe" = ( +"QAm" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; @@ -60371,52 +60407,52 @@ /obj/structure/cable, /turf/open/floor/plating, /area/engine/gravity_generator) -"Qwf" = ( +"QAn" = ( /obj/effect/turf_decal/bot_white/right, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwg" = ( +"QAo" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwh" = ( +"QAp" = ( /obj/effect/turf_decal/bot_white/left, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwi" = ( +"QAq" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwj" = ( +"QAr" = ( /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwk" = ( +"QAs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) -"Qwl" = ( +"QAt" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwm" = ( +"QAu" = ( /obj/effect/turf_decal/bot_white/left, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwn" = ( +"QAv" = ( /obj/machinery/gravity_generator/main/station, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwo" = ( +"QAw" = ( /obj/effect/turf_decal/bot_white/right, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwp" = ( +"QAx" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, @@ -60427,7 +60463,7 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) -"Qwq" = ( +"QAy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -66996,11 +67032,11 @@ Qlm cyc QlL QlW -QlC -QlC -QlC -QlC -QlC +cyI +cyI +cyI +cyI +cyI cyc Qnt QnD @@ -67254,10 +67290,10 @@ Qlx QlM QlX Qmi -Qms +cye QmG Qmw -QlC +cyI Qno Qnu cyi @@ -67513,11 +67549,11 @@ cyc Qmj Qmt QmH -QmX -QlC +cMc +cyI Qnp cyi -QlC +cyI QnR cyR aaa @@ -67770,7 +67806,7 @@ QlY Qmk Qmt QmI -QmX +cMc Qnh cyc Qnv @@ -68024,11 +68060,11 @@ Qlp Qlz QlO QlZ -QlC +cyI Qmt QmJ -QmX -QlC +cMc +cyI cyc cyc QnF @@ -68281,13 +68317,13 @@ cyc cyc cyc cyc -QlC +cyI Qmw QmK -Qms -QlC +cye +cyI Qnq -QlC +cyI QnG QnT cyc @@ -68539,10 +68575,10 @@ QlA cyn cyc cLY -QlC +cyI cyi -QlC -QlC +cyI +cyI cyc Qnw cyi @@ -69050,13 +69086,13 @@ aaf cyR Qlr cyi -QlC +cyI QlD cyi -QlC -QlC -QlC -QlC +cyI +cyI +cyI +cyI cyc Qny QnI @@ -69306,14 +69342,14 @@ aAC aaf cyc Qlt -QlC +cyI QlR cyc -QlC -Qms +cyI +cye QmM -Qms -QlC +cye +cyI cyc cyc cyc @@ -69820,16 +69856,16 @@ aAD awW Qll Qlu -QlC +cyI cyi Qmb -QlC +cyI Qmk QmO -QlC -QlC +cyI +cyI Qnr -QlC +cyI QnK QnX cyR @@ -70081,12 +70117,12 @@ QlF cyx Qmb cyi -QlC +cyI cMa cyi -QlC +cyI cyc -Qms +cye czm QnY cyc @@ -70337,10 +70373,10 @@ cyc QlG cyc cyc -QlC -Qms +cyI +cye QmP -Qms +cye Qnj cyc cyc @@ -70594,11 +70630,11 @@ cyk QlH QlS Qmd -QlC -Qms +cyI +cye QmQ Qmw -QlC +cyI Qns QnA QnL @@ -70851,11 +70887,11 @@ cyj QlI QlI Qme -QlC -QlC +cyI +cyI cyi -QlC -QlC +cyI +cyI cMf cyi QnM @@ -71367,8 +71403,8 @@ QlV cyc cyw QmC -QlC -Qms +cyI +cye Qnk cyc QnC @@ -71624,7 +71660,7 @@ cyc cyc Qmo QmD -QlC +cyI Qnd Qnl cyc @@ -71880,7 +71916,7 @@ aaa aaa cyR Qmp -QlC +cyI QmS Qne Qnm @@ -76268,9 +76304,9 @@ aaa aaa aaa aaa -aag -aaa +Qxg aaa +aoV aaa aaa aaa @@ -76525,9 +76561,9 @@ aaa aaa aaa aaa -aag -aaa +Qxh aaa +aoV aaa aaa aaa @@ -76782,9 +76818,9 @@ aaa aaa aaa aaa -aag -aaa +Qxi aaa +aoV aaa aaa aaa @@ -77039,9 +77075,9 @@ aaa aaa aaa aaa -aag -aaa +Qxj aaa +aoV aaa aaa aaa @@ -77296,9 +77332,9 @@ aaa aaa aaa aaa -aag -aaa +Qxk aaa +aoV aaa aaa aaa @@ -77553,9 +77589,9 @@ aaa aaa aaa aaa -aag -aaa +Qxl aaa +aoV aaa aaa aaa @@ -78839,7 +78875,7 @@ aaa aaa aaa aag -Qoi +Qxn aoV aaa aaf @@ -79096,9 +79132,9 @@ aaf aaf aaf aag -Qoi -aaf -Qoi +Qxo +Qxq +Qxu bVx caf aoV @@ -79612,7 +79648,7 @@ bCq bJP bCq bTs -Qtn +Qxv bCq cbj bLv @@ -79868,8 +79904,8 @@ aaa bCq bHE bCq -Qtk -Qto +Qxr +Qxw bCq cbk bLv @@ -80126,7 +80162,7 @@ bLv bPR bRc bSo -Qtp +Qxx bCq bVy bLv @@ -80328,14 +80364,14 @@ aaf avY axo ayB -Qrv -QrC -QrL -QrQ -QrT -QrX -Qsb -Qsh +Qvi +Qvp +Qvy +QvD +QvH +QvO +QvT +Qwb aKu aLF aLF @@ -80585,14 +80621,14 @@ aoV avY axo ayB -Qrw -QrD -QrM -QrR -QrU -QrY -Qsc -Qsi +Qvj +Qvq +Qvz +QvE +QvI +QvP +QvU +Qwc aKt aLE bDe @@ -80842,14 +80878,14 @@ aaf avY axo ayB -Qrx -QrE +Qvk +Qvr aBT aDs aEN aGb -Qsd -Qsj +QvV +Qwd aKu aLE aLE @@ -80896,7 +80932,7 @@ aaa bCq bPV bCq -Qtl +Qxs bTw bCq bVD @@ -81098,18 +81134,18 @@ aqQ aqQ avZ axo -ayC +ayB azH -QrF -aBS -aDr -aDr -aDr -aDr -aDr -aDr -aLE -aLE +Qvs +ayB +ayB +QvJ +QvQ +aHF +aJd +aKv +Qwl +Qwn aOl aPF aQZ @@ -81152,7 +81188,7 @@ aoV aoV bCq bPW -Qtj +Qxp bSp bTv bCq @@ -81353,19 +81389,19 @@ aqR aGh aqR aqR -Qrt +Qvg axq ayA -Qry -QrG -QrN +Qvl +Qvt +QvA alu -apS -apS -apS -apS +QvK +aGd +QvW +aJe aKw -aLP +aLE aMR aNU aPJ @@ -81408,7 +81444,7 @@ bGi aoV aoV bCq -Qti +Qxm bCq bCq bTu @@ -81614,14 +81650,14 @@ avZ axp ayD azI -QrH +Qvu aBU -aDt -aDt -aDt -aDt -aDt -aDt +aBU +QvL +aGc +QvX +Qwe +aKb aLE aMQ aNT @@ -81667,7 +81703,7 @@ aoV bCq bHE bPU -Qtm +Qxt bTx bCq bVE @@ -81869,16 +81905,16 @@ aaa aag avY axo -ayB -Qrz -QrI +ayD +Qvm +Qvv aBW aDv aEP aGe -Qse -Qsk -Qsn +QvY +Qwf +aKu aLE aMS aOt @@ -81925,14 +81961,14 @@ bCq bPY cOw bCq -Qtq -Qtx -QtF -QtP -Qua -Qul -Quw -QuG +Qxy +QxF +QxN +QxX +Qyi +Qyt +QyE +QyO cjn cjn cjn @@ -82126,16 +82162,16 @@ aaa aag avY axo -ayB -QrA -QrJ -QrO -QrS -QrV -QrZ -Qsf -Qsl -Qso +ayD +Qvn +Qvw +QvB +QvF +QvM +QvR +QvZ +Qwg +Qwj aLE aMS aOi @@ -82182,19 +82218,19 @@ bCq bPX bRg bRg -Qtr -Qty +Qxz +QxG bVG -QtQ -Qub -Qum -Qux -QuH +QxY +Qyj +Qyu +QyF +QyP bcU -QuU +Qzc bVG bcU -Qvq +Qzy cjn bUs bLv @@ -82210,16 +82246,16 @@ aaa aaa aaf aaf -QvD +QzL aaa -QvM +QzU bij bij bij bij bij bij -Qwk +QAs btG btG aaa @@ -82383,16 +82419,16 @@ aaa aag avY axo -ayB -QrB -QrK -QrP -aDt -QrW -Qsa -Qsg -Qsm -aKx +ayD +Qvo +Qvx +QvC +QvG +QvN +QvS +Qwa +Qwh +aKu aLE aMS aOi @@ -82439,19 +82475,19 @@ bLv bQa bHE bHE -Qts -Qtz -QtG -QtR -Quc -Qun -Quy -QuI -QuO -QuV -Qvb -Qvk -Qvr +QxA +QxH +QxO +QxZ +Qyk +Qyv +QyG +QyQ +QyW +Qzd +Qzj +Qzs +Qzz cjn bUs bLv @@ -82464,19 +82500,19 @@ cjJ cjJ cjJ cjJ -Qvx +QzF bij bij crn bij -QvN -QvS -QvV -Qwa +QzV +QAa +QAd +QAi bkI bgN bgN -Qwl +QAt bgN btG Qoi @@ -82696,17 +82732,17 @@ bLv bPZ bHE bHE -Qtt -QtA -QtH -QtS -Qud -Quo -Quz -QuJ -QuP -QuW -Qvc +QxB +QxI +QxP +Qya +Qyl +Qyw +QyH +QyR +QyX +Qze +Qzk cCa bcU cjn @@ -82723,17 +82759,17 @@ cov cpj cpS btG -QvA -QvE +QzI +QzM btG -QvO +QzW bsc -QvW -Qwb +QAe +QAj bgN -Qwf -Qwi -Qwm +QAn +QAq +QAu bgN btG aaa @@ -82953,19 +82989,19 @@ bLv bHE bHE bSs -Qtu -QtB -QtI -QtT -Que -Qup +QxC +QxJ +QxQ +Qyb +Qym +Qyx bcU -QuK -QuQ +QyS +QyY cCa -Qvd -Qvl -Qvs +Qzl +Qzt +QzA cjn bUs bLv @@ -82981,16 +83017,16 @@ cpl cpU btF bsc -QvF +QzN btF bsc -QvT -QvX -Qwc +QAb +QAf +QAk bgN -Qwg +QAo bgN -Qwn +QAv bgN btG Qoi @@ -83193,7 +83229,7 @@ bkM bbR bud QoO -Qtg +kSb bAZ bGm bzF @@ -83210,19 +83246,19 @@ bCq bHE bRh bLu -Qtv -QtC -QtJ -QtU -Quf -Quq -QuA -QuL +QxD +QxK +QxR +Qyc +Qyn +Qyy +QyI +QyT bcU -QuX -Qve -Qvm -Qvt +Qzf +Qzm +Qzu +QzB cjn bUs bLv @@ -83237,17 +83273,17 @@ cow cpk cpT btG -QvB -QvG +QzJ +QzO btG -QvP +QzX bsc -QvY -Qwd +QAg +QAl bgN -Qwh -Qwj -Qwo +QAp +QAr +QAw bgN btG aaa @@ -83447,7 +83483,7 @@ boS bfm bNK bkN -bfm +bml bwe bwe bwd @@ -83467,18 +83503,18 @@ bCq bOK bCq bCq -Qtw -QtD -QtK -QtV -Qug -Qur -QuB +QxE +QxL +QxS +Qyd +Qyo +Qyz +QyJ cjn bcU cCa -Qvf -Qvn +Qzn +Qzv cCa cjn bUs @@ -83492,19 +83528,19 @@ cnq cnP coz cpn -Qvy -Qvz -QvC -QvH -QvL -QvQ -QvU -QvZ -Qwe +QzG +QzH +QzK +QzP +QzT +QzY +QAc +QAh +QAm bmw bgN bgN -Qwp +QAx bgN btG aaa @@ -83644,10 +83680,10 @@ abc aea aeH aft -QpT -QpU -QpW -Qqc +QtG +QtH +QtJ +QtP abc Qoi Qoi @@ -83725,18 +83761,18 @@ bHE bLv aaa bLv -QtE -QtL -QtW -Quh -Qus -QuC +QxM +QxT +Qye +Qyp +QyA +QyK bcU bcU bcU -Qvg +Qzo cCa -Qvu +QzC cjn bUs bLv @@ -83752,16 +83788,16 @@ cpm cjJ aaf aaf -QvI +QzQ aaa -QvR +QzZ bgO bgO bgO bgO bgO bgO -Qwq +QAy btG btG Qoi @@ -83903,8 +83939,8 @@ aeJ afw abc abc -QpX -Qqd +QtK +QtQ abc aaf aaf @@ -83983,15 +84019,15 @@ bLv aaf bLv bUt -QtM -QtX -Qui -Qut -QuD +QxU +Qyf +Qyq +QyB +QyL bcU -QuR -QuY -Qvh +QyZ +Qzg +Qzp bcU bcU cjn @@ -84009,7 +84045,7 @@ cjJ cjJ aaa aaa -QvJ +QzR aaf aaa aaa @@ -84160,8 +84196,8 @@ aeI afv agf abc -QpY -Qqe +QtL +QtR abc aiT aiT @@ -84240,17 +84276,17 @@ bCq aaa bLv bUt -QtN -QtY -Quj -Quu -QuE -QuM -QuS -QuZ -Qvi -Qvo -Qvv +QxV +Qyg +Qyr +QyC +QyM +QyU +Qza +Qzh +Qzq +Qzw +QzD cjn bUs bCq @@ -84266,7 +84302,7 @@ cpo cjJ aaa aaa -QvK +QzS aaf Qoi aaa @@ -84417,9 +84453,9 @@ aeL afy agh abc -QpZ -Qqf -Qqi +QtM +QtS +QtV aiV ajs akb @@ -84497,17 +84533,17 @@ aaa aaa bTB bUv -QtO -QtZ -Quk -Quv -QuF -QuN -QuT -Qva -Qvj -Qvp -Qvw +QxW +Qyh +Qys +QyD +QyN +QyV +Qzb +Qzi +Qzr +Qzx +QzE car bUs bCq @@ -84674,9 +84710,9 @@ aeK afx agg abc -Qqa -Qqg -Qqj +QtN +QtT +QtW aiV ajr aka @@ -84931,9 +84967,9 @@ aeN afA afA afA -Qqb -Qqh -Qqk +QtO +QtU +QtX aiV aju akd @@ -86995,7 +87031,7 @@ auj akl akO alx -QqH +Quu amg aiX anw @@ -87507,9 +87543,9 @@ aiF agj ajD akm -QqC +Qup aly -QqI +Quv amQ aiX anw @@ -87804,7 +87840,7 @@ aZP bbh bcc bdd -Qsr +Qwo bfr bbX bif @@ -88020,7 +88056,7 @@ agP agP aiz ajg -Qqx +Quk akQ agj agj @@ -88063,7 +88099,7 @@ bbk bbk bbk bfs -Qss +Qwp aZM aZM aaf @@ -88258,7 +88294,7 @@ aaa aaa aaf aaf -QoY +Qql aaf aai abi @@ -88280,7 +88316,7 @@ ajb ajF akN alw -QqJ +Quw amQ aiX anw @@ -88320,15 +88356,15 @@ bce bdf beb aYv -Qst -QsD +Qwq +QwA aaf aaf Qoi aaa Qoi aaa -QsQ +QwN bsb bsb bsb @@ -88531,16 +88567,16 @@ agn agR agn agR -Qql +QtY agn -Qqq +Qud akv -QqD -QqF +Quq +Qus aww amk aiX -QqY +QuL aov aph aqb @@ -88577,20 +88613,20 @@ aZR bbm bec bfu -Qsu +Qwr aBb aBb bmu aBb aBb -QsM +QwJ aaa bsb -QsS -QsZ -Qtc +QwP +QwW +QwZ bsb -aXf +Qxd aJq bBi bCs @@ -88772,26 +88808,26 @@ aaa aaa aaa aaf -QoZ +Qqm aaf aaZ -Qpk -Qpv -QpE +Qrk +QrI +Qse aaZ cpg acv adi -QpR +QtE aaZ aeW -QpV +QtI ahv ahQ -Qqm +QtZ aiI ajI -Qqy +Qul akQ agj agj @@ -88834,22 +88870,22 @@ aZR aZR aZR bft -Qsv +Qws aBa -QsF +QwC bmv -QsI +QwF bnT bpg aaa bsb -QsT +QwQ buP bwm bxH byS aJq -Qth +Qxf bCs bCs bCs @@ -89029,29 +89065,29 @@ aaa aaa aaa aaf -Qpa +Qqn aaf aaZ -Qpl -Qpw -QpF +Qrl +QrJ +Qsf aaZ acl cxA acL -QpS +QtF aaZ agp agT ahx ahS aiK -Qqp -Qqr +Quc +Que akm akT aly -QqK +Qux amQ aiX anw @@ -89091,7 +89127,7 @@ bbm bdh bee bfv -Qsw +Qwt aBa big aEM @@ -89100,7 +89136,7 @@ aGa bph bqF bsd -QsU +QwR buQ bwn bxI @@ -89286,14 +89322,14 @@ aaa aaa aaa aaf -Qpb +Qqo aaf aaZ -Qpm -Qpx -QpG +Qrm +QrK +Qsg aaZ -QpM +QsM adk adK cqG @@ -89313,14 +89349,14 @@ amp aiX anS aoy -Qrj -Qrm -Qro -Qrp -Qrq -Qrr -Qrs -Qru +QuW +QuZ +Qvb +Qvc +Qvd +Qve +Qvf +Qvh axB anz anz @@ -89348,19 +89384,19 @@ bcf bdg bed bfv -Qsx +Qwu aBa aBV bkZ -QsJ +QwG bnU aHG bqE -QsR -QsV -Qta -Qtd -Qtf +QwO +QwS +QwX +Qxa +Qxc bvW bAf bBp @@ -89543,14 +89579,14 @@ aaa aaa aaa aaf -Qpc +Qqp aaf aaZ -Qpn -Qpy -QpH +Qrn +QrL +Qsh aaZ -QpN +QsN acM adQ cwM @@ -89559,16 +89595,16 @@ agr agU ahy ahX -Qqn +Qua aiN -Qqs +Quf akq akQ agj agj agj aiX -QqZ +QuM aoz apm aqd @@ -89605,16 +89641,16 @@ bbm bdh bef bfv -Qsy +Qwv aBa -QsG +QwD aEO -QsK +QwH bnV -QsN -QsP +QwK +QwM bsf -QsW +QwT buS bwp bxK @@ -89800,14 +89836,14 @@ aaa aaa aaa aaf -Qpd +Qqq aaf aaZ -Qpo -Qpz -QpI +Qro +QrM +Qsi aaZ -QpO +QsO coS aet cxA @@ -89818,15 +89854,15 @@ ahz aie agt aiM -Qqt +Qug akp akU alz aml amT aiX -Qra -Qrg +QuN +QuT apl aqc aqc @@ -89862,16 +89898,16 @@ aZR aZR aZR bfw -Qsz +Qww aBa -QsH +QwE bjy -QsL +QwI bnW bpi aaa bsb -QsX +QwU buR bwo bxJ @@ -90057,14 +90093,14 @@ aaa aaa aaa aaf -Qpe +Qqr aaf aaZ -Qpp -QpA -QpJ +Qrp +QrN +Qsj abQ -QpP +QsP adj arc blT @@ -90073,17 +90109,17 @@ cml agV cxk aig -Qqo +Qub agn -Qqu -Qqz +Quh +Qum akV alB amn amV -QqT +QuG anB -Qrh +QuU aod aqf ahT @@ -90119,20 +90155,20 @@ aZR bbm beh bfx -QsA +Qwx aBc aBc bgR aBc aBc -QsO +QwL aaa bsb -QsY -Qtb -Qte +QwV +QwY +Qxb bsb -aJq +Qxe aJq bBu bCv @@ -90314,14 +90350,14 @@ aaa aaa aaa aaf -Qpf +Qqs aaf aaZ -Qpq +Qrq ack -QpK +Qsk abN -QpQ +QsQ acF acF aes @@ -90332,13 +90368,13 @@ ahB aHp agn agn -Qqv -QqA +Qui +Qun amS alA -QqL +Quy amm -QqU +QuH anT anT aod @@ -90376,8 +90412,8 @@ bcg aZU beg aYB -QsB -QsE +Qwy +QwB aaf aaf Qoi @@ -90571,12 +90607,12 @@ aaa aaa aaa aaf -Qpg +Qqt aaf aaZ -Qpr -QpB -QpL +Qrr +QrO +Qsl aci acm cpA @@ -90593,7 +90629,7 @@ ajJ akr akX alC -QqM +Quz amX amX amX @@ -90633,7 +90669,7 @@ bbp bbp bbp bfz -QsC +Qwz aZV aZV aaf @@ -90832,7 +90868,7 @@ aaZ aaZ aaZ aaZ -QpC +QrP avB aaZ aaZ @@ -90849,14 +90885,14 @@ ajd ajb ahY akX -QqG +Qut amo amX amX -Qrb -Qri -Qrk -Qrn +QuO +QuV +QuX +Qva arf apY ate @@ -91086,9 +91122,9 @@ aaa aaa aaa abp -Qph -Qpi -Qps +QqH +QqV +Qrs abO abO acO @@ -91103,14 +91139,14 @@ ahA ahZ adR aiQ -Qqw +Quj akt -QqE +Qur anw -QqN -QqP +QuA +QuC anB -Qrc +QuP aoD aod aqe @@ -91364,10 +91400,10 @@ ajK aks akY anA -QqO -QqQ +QuB +QuD amo -Qrd +QuQ aoC aod aqe @@ -91602,8 +91638,8 @@ aaa abp abO abO -Qpt -QpD +Qrt +QrQ acq acq acq @@ -91618,13 +91654,13 @@ aia aiP aiR ajB -QqB +Quo aiX akz alf -QqR -QqV -Qre +QuE +QuI +QuR aoF apo aqh @@ -91879,11 +91915,11 @@ aku aiX alE amq -QqS -QqW -Qrf +QuF +QuJ +QuS aoE -Qrl +QuY aqg aun asf @@ -92115,8 +92151,8 @@ aaa aaa abp aco -Qpj -Qpu +QqW +Qru abR abP abP @@ -96785,7 +96821,7 @@ aGJ aIe aJC aJC -Qsp +Qwm aJC aJC aJC @@ -97811,8 +97847,8 @@ aaa alP aGL aIe -aJC -aKS +Qwi +aKR aKR aMC aJC @@ -98069,8 +98105,8 @@ alP aGL aIg aJH +Qwk aKR -Qsq aMB aJC aRA @@ -98104,8 +98140,8 @@ bAu bvj bCN bEa +QoY bFA -QoQ bIm bJD bKK @@ -106786,7 +106822,7 @@ aaf aaf aaf alP -QqX +QuK alP anf alP @@ -107133,7 +107169,7 @@ cls cmr cNW cOe -cPa +cmo cNW aaf aaf @@ -109177,7 +109213,7 @@ bPN bWr cbZ bQZ -cPa +cmo cNW cOx cNW @@ -110203,7 +110239,7 @@ bUp bUp bPN cOx -cPa +cmo cNW cOx cOx @@ -110612,21 +110648,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +QoZ +Qpl +Qpy +QpL +QpY +Qqu +QqI +QqX +Qrv +QrR +Qsm +Qsz +QsR +Qte +Qtr aaa aaa aaa @@ -110869,21 +110905,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpa +Qpm +Qpz +QpM +QpZ +Qqv +QqJ +QqY +Qrw +QrS +Qsn +QsA +QsS +Qtf +Qts aaa aaa aaa @@ -111126,21 +111162,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpb +Qpn +QpA +QpN +Qqa +Qqw +QqK +QqZ +Qrx +QrT +Qso +QsB +QsT +Qtg +Qtt aaa aaa aaa @@ -111384,20 +111420,20 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpo +QpB +QpO +Qqb +Qqx +QqL +Qra +Qry +QrU +Qsp +QsC +QsU +Qth +Qtu aaa aaa aaa @@ -111640,21 +111676,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpc +Qpp +QpC +QpP +Qqc +Qqy +QqM +Qrb +Qrz +QrV +Qsq +QsD +QsV +Qti +Qtv aaa aaa aaa @@ -111897,21 +111933,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpd +Qpq +QpD +QpQ +Qqd +Qqz +QqN +Qrc +QrA +QrW +Qsr +QsE +QsW +Qtj +Qtw aaa aaa aaa @@ -112154,21 +112190,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpe +Qpr +QpE +QpR +Qqe +QqA +QqO +Qrd +QrB +QrX +Qss +QsF +QsX +Qtk +Qtx aaa aaa aaa @@ -112411,21 +112447,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpf +Qps +QpF +QpS +Qqf +QqB +QqP +Qre +QrC +QrY +Qst +QsG +QsY +Qtl +Qty aaa aaa aaa @@ -112668,21 +112704,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpg +Qpt +QpG +QpT +Qqg +QqC +QqQ +Qrf +QrD +QrZ +Qsu +QsH +QsZ +Qtm +Qtz aaa aaa aaa @@ -112925,21 +112961,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qph +Qpu +QpH +QpU +Qqh +QqD +QqR +Qrg +QrE +Qsa +Qsv +QsI +Qta +Qtn +QtA aaa aaa aaa @@ -113182,21 +113218,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpi +Qpv +QpI +QpV +Qqi +QqE +QqS +Qrh +QrF +Qsb +Qsw +QsJ +Qtb +Qto +QtB aaa aaa aaa @@ -113439,21 +113475,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpj +Qpw +QpJ +QpW +Qqj +QqF +QqT +Qri +QrG +Qsc +Qsx +QsK +Qtc +Qtp +QtC aaa aaa aaa @@ -113696,21 +113732,21 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +Qpk +Qpx +QpK +QpX +Qqk +QqG +QqU +Qrj +QrH +Qsd +Qsy +QsL +Qtd +Qtq +QtD aaa aaa aaa diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 2852c76257..fce969b119 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -398,7 +398,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_maintenance{ +/obj/machinery/door/airlock/maintenance/glass{ name = "Maintenance" }, /turf/open/floor/plasteel, @@ -449,7 +449,7 @@ }, /area/shuttle/abandoned) "abb" = ( -/obj/machinery/door/airlock/glass_maintenance{ +/obj/machinery/door/airlock/maintenance/glass{ name = "Maintenance" }, /turf/open/floor/plasteel, @@ -2198,7 +2198,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Infirmary"; req_access_txt = "0" @@ -2863,7 +2863,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Storage" }, /turf/open/floor/plasteel/neutral/side{ @@ -3322,14 +3322,14 @@ /area/construction/mining/aux_base) "agO" = ( /obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; id = "syndicate_ne"; name = "northeast of station"; turf_type = /turf/open/space; - width = 18 + width = 23 }, /turf/open/space, /area/space/nearstation) @@ -3654,7 +3654,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; welded = 1 }, @@ -4243,7 +4243,7 @@ /turf/open/floor/plasteel/redyellow, /area/maintenance/starboard/fore) "aiI" = ( -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "aiJ" = ( /obj/effect/spawner/structure/window/reinforced, @@ -4389,28 +4389,28 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "aja" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajb" = ( /obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajd" = ( /obj/machinery/door/firedoor, @@ -4492,7 +4492,7 @@ "ajl" = ( /obj/structure/table_frame/wood, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajm" = ( /obj/item/chair/stool/bar{ @@ -4500,26 +4500,26 @@ }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/vomit/old, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajn" = ( /obj/structure/chair/stool/bar, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajo" = ( /obj/machinery/light/small, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajp" = ( /obj/structure/chair/stool/bar, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajq" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/bar, /area/maintenance/starboard/fore) "ajr" = ( /obj/structure/grille, @@ -5703,7 +5703,7 @@ /area/security/checkpoint/customs) "amm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Customs Desk"; req_access_txt = "19" @@ -5763,7 +5763,7 @@ /area/hallway/secondary/entry) "amu" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Checkpoint"; req_access_txt = "63" }, @@ -12507,7 +12507,7 @@ /turf/closed/wall/r_wall, /area/engine/supermatter) "aAW" = ( -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ heat_proof = 1; name = "Supermatter Chamber"; req_access_txt = "0"; @@ -16396,7 +16396,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Power Monitoring"; req_access_txt = "0"; req_one_access_txt = "24;10" @@ -19939,6 +19939,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/xmastree, /turf/open/floor/carpet, /area/crew_quarters/bar/atrium) "aQo" = ( @@ -20852,7 +20853,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Delivery Office"; req_access_txt = 0; req_one_access_txt = "48;50" @@ -20904,7 +20905,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "cardoor"; name = "Cargo Cell"; req_access_txt = "63" @@ -23278,7 +23279,7 @@ /area/engine/atmos) "aWI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Storage"; req_access_txt = "0"; req_one_access_txt = "24;10" @@ -23774,7 +23775,7 @@ /turf/open/floor/plating, /area/security/prison) "aXK" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Sanitarium"; req_access_txt = "63" }, @@ -23797,7 +23798,7 @@ /turf/closed/wall, /area/security/prison) "aXN" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 3"; req_access_txt = "2" }, @@ -23809,7 +23810,7 @@ /turf/closed/wall, /area/security/prison) "aXP" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 2"; req_access_txt = "2" }, @@ -23819,7 +23820,7 @@ /turf/open/floor/plasteel/floorgrime, /area/security/prison) "aXQ" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 1"; req_access_txt = "2" }, @@ -24797,7 +24798,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -25316,7 +25317,7 @@ /area/quartermaster/miningoffice) "baT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Office"; req_access_txt = "48" }, @@ -26056,7 +26057,7 @@ /area/quartermaster/office) "bcq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "0"; req_one_access_txt = "48;50" @@ -26223,7 +26224,7 @@ /area/security/prison) "bcL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -26246,7 +26247,7 @@ /area/security/prison) "bcN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -27606,7 +27607,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Storage Closet"; req_access_txt = "63" }, @@ -27712,7 +27713,7 @@ /area/engine/atmos) "bga" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Storage"; req_access_txt = "0"; req_one_access_txt = "24;10" @@ -28187,7 +28188,7 @@ /area/security/brig) "bha" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -28217,7 +28218,7 @@ /area/security/brig) "bhc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -28679,7 +28680,7 @@ "bie" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Office"; req_access_txt = "48" }, @@ -29377,7 +29378,7 @@ /area/hydroponics) "bjw" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Hydroponics"; req_access_txt = "35" }, @@ -29859,7 +29860,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Infirmary" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -31731,7 +31732,7 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Distribution Loop"; req_access_txt = "24" }, @@ -33268,7 +33269,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -33371,7 +33372,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -34289,7 +34290,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Transferring Control"; req_access_txt = "63" }, @@ -34354,7 +34355,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -34463,7 +34464,7 @@ /area/security/main) "btw" = ( /obj/effect/landmark/secequipment, -/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -34714,7 +34715,7 @@ /area/engine/atmos) "btZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Desk"; req_access_txt = "24" }, @@ -35149,7 +35150,7 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -35781,7 +35782,7 @@ pixel_x = 32 }, /obj/effect/landmark/secequipment, -/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -36382,7 +36383,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Transferring Control"; req_access_txt = "63" }, @@ -39214,7 +39215,7 @@ /area/engine/break_room) "bCL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Power Tools Storage"; req_access_txt = "19" @@ -39252,7 +39253,7 @@ /area/engine/break_room) "bCN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Power Tools Storage"; req_access_txt = "19" @@ -39708,7 +39709,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 4; name = "Bridge Access"; req_access_txt = "19" @@ -39769,7 +39770,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge Access"; req_access_txt = "19" @@ -39973,7 +39974,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 4; name = "Bridge Access"; req_access_txt = "19" @@ -40008,7 +40009,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge Access"; req_access_txt = "19" @@ -40333,7 +40334,7 @@ /area/engine/gravity_generator) "bEp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Gravity Generator Chamber"; req_access_txt = "19; 61" }, @@ -40825,7 +40826,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 4; name = "Bridge Access"; req_access_txt = "19" @@ -40867,7 +40868,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge Access"; req_access_txt = "19" @@ -41055,7 +41056,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 8; name = "Bridge Access"; req_access_txt = "19" @@ -41112,7 +41113,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "gulagdoor"; name = "Security Transferring Center"; req_access_txt = "63" @@ -42085,7 +42086,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; req_access_txt = "3" }, @@ -42576,7 +42577,7 @@ /area/storage/primary) "bIE" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -43492,7 +43493,7 @@ /area/storage/primary) "bKw" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -43912,7 +43913,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Warden's Office"; req_access_txt = "3" }, @@ -44303,7 +44304,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "engdoor"; name = "Engineering Cell"; req_access_txt = "63" @@ -44841,12 +44842,6 @@ }, /area/hallway/primary/starboard) "bNi" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; - pixel_x = 32 - }, /obj/machinery/light{ dir = 4 }, @@ -47293,7 +47288,7 @@ /area/storage/tech) "bSt" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -47308,7 +47303,7 @@ /area/storage/primary) "bSu" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -47565,7 +47560,7 @@ /area/storage/tools) "bSU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Auxiliary Tool Storage"; req_access_txt = "12" }, @@ -48931,12 +48926,6 @@ /turf/open/floor/plasteel/neutral, /area/hallway/primary/starboard) "bVj" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE"; - pixel_x = 32 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -50135,7 +50124,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 4; name = "Brig"; req_access_txt = "63" @@ -50197,7 +50186,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 8; name = "Brig"; req_access_txt = "63" @@ -51412,7 +51401,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Warden's Office"; req_access_txt = "3" }, @@ -52151,7 +52140,7 @@ /area/hallway/primary/starboard) "cbw" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 4; name = "Brig"; req_access_txt = "63" @@ -52193,7 +52182,7 @@ /area/security/brig) "cbz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 8; name = "Brig"; req_access_txt = "63" @@ -53420,7 +53409,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Power Monitoring"; req_access_txt = "32" }, @@ -54105,7 +54094,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Gear Room"; req_access_txt = "63" }, @@ -54219,14 +54208,10 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/paladin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/asimov, -/obj/item/aiModule/core/full/corp{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_harmless{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /obj/structure/sign/nanotrasen{ pixel_x = -32 @@ -54279,12 +54264,12 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/antimov{ - pixel_x = 3; - pixel_y = 3 +/obj/effect/spawner/lootdrop/aimodule_harmful{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 2 }, -/obj/item/aiModule/supplied/oxygen, -/obj/item/aiModule/supplied/protectStation{ +/obj/item/aiModule/supplied/oxygen{ pixel_x = -3; pixel_y = -3 }, @@ -54933,10 +54918,10 @@ dir = 4 }, /obj/structure/cable/white{ - icon_state = "1-4" + icon_state = "4-8" }, /obj/structure/cable/white{ - icon_state = "4-8" + icon_state = "1-4" }, /turf/open/floor/plasteel/red/side{ dir = 4 @@ -55144,6 +55129,10 @@ pixel_y = 3 }, /obj/item/aiModule/core/full/custom, +/obj/item/aiModule/core/full/asimov{ + pixel_x = -3; + pixel_y = -3 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -55226,7 +55215,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/tyrant{ +/obj/item/aiModule/supplied/protectStation{ pixel_x = 3; pixel_y = 3 }, @@ -57252,14 +57241,10 @@ /area/ai_monitored/turret_protected/ai_upload) "clQ" = ( /obj/structure/table/reinforced, -/obj/item/aiModule/core/full/drone{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/reporter, -/obj/item/aiModule/core/full/liveandletlive{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_neutral{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /turf/open/floor/plasteel/vault{ dir = 8 @@ -60756,7 +60741,7 @@ icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/glass_security/abandoned{ +/obj/machinery/door/airlock/security/glass/abandoned{ name = "Storage Closet"; req_access_txt = "63" }, @@ -65263,7 +65248,7 @@ /area/engine/engineering) "cCw" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Storage"; req_access_txt = "32" }, @@ -66490,7 +66475,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Gateway Chamber"; req_access_txt = "62" }, @@ -70920,6 +70905,15 @@ /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk, /obj/effect/turf_decal/bot, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/requests_console{ + department = "Medbay Storage"; + name = "Medbay Storage RC"; + pixel_y = 28 + }, /turf/open/floor/plasteel, /area/medical/storage) "cNQ" = ( @@ -72881,7 +72875,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Xenobiology Kill Room"; req_access_txt = "47" }, @@ -73102,7 +73096,7 @@ /area/medical/medbay/central) "cSJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -73257,6 +73251,12 @@ pixel_x = -3; pixel_y = -3 }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -73267,7 +73267,6 @@ /area/medical/storage) "cSV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/rnd/protolathe/department/medical, /turf/open/floor/plasteel/cmo, /area/medical/storage) "cSW" = ( @@ -73285,13 +73284,15 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, /obj/machinery/light{ dir = 4 }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel/neutral/side{ dir = 8; heat_capacity = 1e+006 @@ -74023,7 +74024,7 @@ /area/medical/medbay/central) "cUC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -74132,6 +74133,12 @@ pixel_x = -3; pixel_y = -3 }, +/obj/machinery/door/window/eastleft{ + name = "First-Aid Supplies"; + red_alert_access = 1; + req_access_txt = "5"; + req_one_access_txt = "0" + }, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -74157,11 +74164,10 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/requests_console{ - department = "Medbay Storage"; - departmentType = 0; - name = "Medbay Storage RC"; - pixel_x = 32 +/obj/machinery/door/window/westleft{ + name = "First-Aid Supplies"; + red_alert_access = 1; + req_access_txt = "5" }, /turf/open/floor/plasteel/neutral/side{ dir = 8; @@ -74944,6 +74950,10 @@ /obj/machinery/status_display{ pixel_x = -32 }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plasteel/neutral/side{ dir = 4 }, @@ -74983,6 +74993,10 @@ dir = 1; pixel_y = -24 }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel/neutral/side{ dir = 8; heat_capacity = 1e+006 @@ -75700,7 +75714,7 @@ /area/medical/medbay/central) "cXY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage"; req_access_txt = "5" }, @@ -75720,7 +75734,7 @@ /area/medical/storage) "cXZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage"; req_access_txt = "5" }, @@ -78129,7 +78143,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Desk"; req_access_txt = "5" }, @@ -79322,7 +79336,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "meddoor"; name = "Medical Cell"; req_access_txt = "63" @@ -81426,7 +81440,7 @@ /area/medical/chemistry) "dkm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Chemistry Lab"; req_access_txt = "5; 33" }, @@ -83824,7 +83838,7 @@ /area/medical/genetics/cloning) "dps" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "cloningfoyer"; name = "Cloning Lab"; req_access_txt = "5" @@ -84693,7 +84707,7 @@ /area/medical/genetics/cloning) "drg" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "cloningfoyer"; name = "Cloning Lab"; req_access_txt = "5" @@ -87937,7 +87951,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; req_access_txt = "29" }, @@ -90667,7 +90681,7 @@ /area/science/research) "dDy" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; req_access_txt = "29" }, @@ -92472,7 +92486,7 @@ /obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 6 }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Access"; req_access_txt = "30" }, @@ -95330,7 +95344,7 @@ /area/crew_quarters/theatre/abandoned) "dNb" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/twohanded/required/kirbyplants/random, +/obj/machinery/vending/kink, /turf/open/floor/wood, /area/crew_quarters/theatre/abandoned) "dNc" = ( @@ -95338,7 +95352,7 @@ dir = 1; pixel_y = -22 }, -/obj/machinery/vending/kink, +/obj/item/twohanded/required/kirbyplants/random, /turf/open/floor/wood{ icon_state = "wood-broken3" }, @@ -95628,7 +95642,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Customs Desk"; req_access_txt = "19" @@ -99375,10 +99389,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/landmark/lightsout, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/landmark/xmastree, /turf/open/floor/plasteel/grimy, /area/chapel/main) "dVT" = ( @@ -99505,7 +99519,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "dWk" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -99942,7 +99956,7 @@ /area/medical/virology) "dXh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Virology Lab"; req_access_txt = "39" }, @@ -100019,7 +100033,7 @@ /area/medical/virology) "dXn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Virology Containment Cell"; req_access_txt = "39" }, @@ -100777,7 +100791,7 @@ /area/medical/virology) "dYZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Virology Access"; req_access_txt = "39" }, @@ -100995,7 +101009,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "dZv" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -101405,7 +101419,7 @@ /area/medical/virology) "eaj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Virology Containment Cell"; req_access_txt = "39" }, @@ -103296,7 +103310,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Checkpoint"; req_access_txt = "63" }, @@ -103363,7 +103377,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, @@ -103409,14 +103423,14 @@ /turf/open/floor/plating, /area/security/checkpoint/escape) "eel" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "eem" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Cockpit"; req_access_txt = "19" }, @@ -104044,7 +104058,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, @@ -105027,26 +105041,46 @@ /turf/open/floor/plasteel/dark, /area/library) "ehQ" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/landmark/lightsout, +/turf/open/floor/plasteel/grimy, +/area/chapel/main) +"ehR" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/bar, +/area/maintenance/starboard/fore) +"ehS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/bar, +/area/maintenance/starboard/fore) +"ehT" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/bar, +/area/maintenance/starboard/fore) +"ehU" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, /area/maintenance/port/fore) -"ehR" = ( +"ehV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Desk"; req_access_txt = "63" }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/red/side{ dir = 8 }, /area/security/brig) -"ehS" = ( +"ehW" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) @@ -128581,7 +128615,7 @@ cqr ctp cuQ cjd -cxC +cje cje cAK cCr @@ -129385,7 +129419,7 @@ dry dta duk dvY -ehS +ehW dmi dfY aad @@ -135456,7 +135490,7 @@ alf avr awp axK -ehQ +ehU aAb aBk aCv @@ -139945,7 +139979,7 @@ dKD dUp dVd dVS -dVd +ehQ dVd dVd dVd @@ -148287,7 +148321,7 @@ ahw ahH abi aim -aiH +ehR aiZ ajl aig @@ -149058,7 +149092,7 @@ afj ahH abi aip -aiH +ehS ajb ajo ajP @@ -149830,7 +149864,7 @@ ahH abi ais aiI -aiH +ehT ajq aig akt @@ -155040,7 +155074,7 @@ bZK cbw bgZ bNj -ehR +ehV ciC bgZ clx diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 8ed9acf09f..c81ed8e449 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -2,19 +2,6 @@ "aaa" = ( /turf/open/space/basic, /area/space) -"aab" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_n"; - name = "north of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) "aac" = ( /obj/effect/landmark/carpspawn, /turf/open/space, @@ -311,21 +298,9 @@ }, /turf/open/floor/plasteel/floorgrime, /area/security/prison) -"aaU" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 8; - icon_state = "diagonalWall3" - }, -/area/security/prison) "aaV" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/pod_2) -"aaX" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/security/prison) "aaY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1887,14 +1862,14 @@ /turf/closed/wall, /area/security/prison) "aem" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 3"; req_access_txt = "2" }, /turf/open/floor/plasteel/floorgrime, /area/security/prison) "aen" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 2"; req_access_txt = "2" }, @@ -1905,7 +1880,7 @@ /turf/open/floor/plasteel/floorgrime, /area/security/prison) "aeo" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 1"; req_access_txt = "2" }, @@ -1913,7 +1888,7 @@ /area/security/prison) "aep" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Sanitarium"; req_access_txt = "2" }, @@ -3189,7 +3164,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -3202,7 +3177,7 @@ "agM" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -3952,7 +3927,7 @@ /area/security/brig) "ait" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; req_access_txt = "3" }, @@ -4345,7 +4320,7 @@ /area/security/brig) "ajn" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -4362,7 +4337,7 @@ "ajp" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -4648,7 +4623,9 @@ /area/engine/gravity_generator) "aka" = ( /obj/effect/turf_decal/bot_white/right, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/engine/gravity_generator) "akb" = ( /obj/structure/sign/securearea{ @@ -4658,11 +4635,15 @@ pixel_y = 32 }, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/gravity_generator) "akc" = ( /obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 4 + }, /area/engine/gravity_generator) "akd" = ( /turf/open/space, @@ -5342,7 +5323,9 @@ /area/engine/gravity_generator) "alt" = ( /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/gravity_generator) "alu" = ( /obj/machinery/light{ @@ -5649,7 +5632,7 @@ /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Gear Room"; req_access_txt = "0"; req_one_access_txt = "1;4" @@ -5683,7 +5666,7 @@ /area/security/warden) "ama" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Secure Gear Storage"; req_access_txt = "3" }, @@ -5838,7 +5821,7 @@ /area/security/main) "amp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Firing Range"; req_access_txt = "0"; req_one_access_txt = "1;4" @@ -6020,19 +6003,25 @@ dir = 10 }, /obj/effect/turf_decal/bot_white/left, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 4 + }, /area/engine/gravity_generator) "amK" = ( /obj/machinery/gravity_generator/main/station, /obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, /area/engine/gravity_generator) "amL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, /obj/effect/turf_decal/bot_white/right, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/vault{ + dir = 1 + }, /area/engine/gravity_generator) "amM" = ( /obj/machinery/camera{ @@ -6172,7 +6161,7 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "anc" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "N2O Storage"; req_access_txt = "3" }, @@ -6809,7 +6798,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Secure Gear Storage"; req_access_txt = "3" }, @@ -7191,7 +7180,7 @@ /turf/open/floor/plating, /area/engine/gravity_generator) "apj" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Gravity Generator Area"; req_access_txt = "19; 61" }, @@ -9439,7 +9428,7 @@ /area/security/warden) "atR" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Control"; req_access_txt = "3" }, @@ -9454,7 +9443,7 @@ /area/security/warden) "atS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Gear Room"; req_access_txt = "0"; req_one_access_txt = "1;4" @@ -9471,7 +9460,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "0"; req_one_access_txt = "1;4" @@ -9480,7 +9469,7 @@ /area/security/main) "atV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "0"; req_one_access_txt = "1;4" @@ -10514,7 +10503,7 @@ /area/security/brig) "avZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock"; req_access_txt = "2" }, @@ -11723,7 +11712,7 @@ "ayB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -11740,7 +11729,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -11923,7 +11912,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine"; req_access_txt = "10" }, @@ -12721,7 +12710,7 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aAD" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Dock"; req_access_txt = "48" }, @@ -13548,7 +13537,7 @@ /area/shuttle/labor) "aCj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock"; req_access_txt = "0" }, @@ -13594,7 +13583,7 @@ "aCn" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -13628,7 +13617,7 @@ id = "secentranceflasher"; pixel_x = 25 }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -13928,7 +13917,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine"; req_access_txt = "10" }, @@ -14540,7 +14529,7 @@ /area/engine/engineering) "aEm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Storage"; req_access_txt = "32" }, @@ -15195,7 +15184,7 @@ /area/engine/engineering) "aFz" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine"; req_access_txt = "10" }, @@ -16098,10 +16087,8 @@ /area/quartermaster/storage) "aHj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - glass = 0; +/obj/machinery/door/airlock/mining{ name = "Cargo Bay"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "48;50" }, @@ -16138,10 +16125,8 @@ /area/construction/storage/wing) "aHm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - glass = 0; +/obj/machinery/door/airlock/mining{ name = "Cargo Bay"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "48;50" }, @@ -16642,10 +16627,8 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/glass_mining{ - glass = 0; +/obj/machinery/door/airlock/mining{ name = "Cargo Bay"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "48;50" }, @@ -18281,7 +18264,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Supermatter Engine"; req_access_txt = "10" }, @@ -18309,7 +18292,7 @@ /turf/open/floor/engine, /area/engine/engineering) "aMj" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ heat_proof = 1; name = "Supermatter Chamber"; req_access_txt = "10" @@ -18443,6 +18426,7 @@ "aMG" = ( /obj/structure/table, /obj/item/aiModule/core/full/asimov, +/obj/effect/spawner/lootdrop/aimodule_harmless, /obj/item/aiModule/core/freeformcore, /obj/machinery/door/window{ base_state = "right"; @@ -18452,7 +18436,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/item/aiModule/core/full/custom, /obj/machinery/flasher{ pixel_y = 24; @@ -18477,7 +18461,7 @@ pixel_y = 24; id = "AI" }, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/item/aiModule/supplied/oxygen, /obj/item/aiModule/supplied/protectStation, /obj/item/aiModule/zeroth/oneHuman, @@ -19625,7 +19609,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Quartermaster"; req_access_txt = "41" }, @@ -21158,7 +21142,7 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Power Monitoring"; req_access_txt = "32" }, @@ -22763,7 +22747,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Post - Cargo"; req_access_txt = "63" }, @@ -25068,10 +25052,8 @@ /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - glass = 0; +/obj/machinery/door/airlock/mining{ name = "Cargo Bay"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "48;50" }, @@ -25084,10 +25066,8 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - glass = 0; +/obj/machinery/door/airlock/mining{ name = "Cargo Bay"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "48;50" }, @@ -27803,7 +27783,7 @@ /area/security/checkpoint/engineering) "bfW" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Engineering Security Post"; req_access_txt = "63" }, @@ -28186,7 +28166,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mailroom"; req_access_txt = "0"; req_one_access_txt = "48;50" @@ -28260,7 +28240,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "0"; req_one_access_txt = "48;50" @@ -31326,7 +31306,7 @@ /area/hallway/primary/starboard) "bmY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Foyer"; req_access_txt = "0"; req_one_access_txt = "32;19" @@ -34374,7 +34354,7 @@ /area/crew_quarters/heads/hop) "bsS" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; req_access_txt = "19" }, @@ -34385,7 +34365,7 @@ "bsT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; req_access_txt = "19" }, @@ -34461,7 +34441,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; req_access_txt = "19" }, @@ -34472,7 +34452,7 @@ "btb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; req_access_txt = "19" }, @@ -38520,7 +38500,7 @@ name = "bridge blast door" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge Access"; req_access_txt = "19" }, @@ -38533,7 +38513,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge Access"; req_access_txt = "19" }, @@ -38628,7 +38608,7 @@ name = "bridge blast door" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge Access"; req_access_txt = "19" }, @@ -39561,7 +39541,7 @@ }, /area/engine/atmos) "bDR" = ( -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring"; req_access_txt = "24" }, @@ -40641,7 +40621,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 4 }, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Distribution Loop"; req_access_txt = "24" }, @@ -42471,7 +42451,7 @@ }, /obj/effect/turf_decal/bot_white/right, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 1 }, /area/gateway) "bJZ" = ( @@ -42483,7 +42463,7 @@ }, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 8 }, /area/gateway) "bKa" = ( @@ -43193,14 +43173,12 @@ }, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 8 }, /area/gateway) "bLE" = ( /obj/machinery/gateway/centerstation, -/turf/open/floor/plasteel/vault{ - dir = 4 - }, +/turf/open/floor/plasteel/dark, /area/gateway) "bLF" = ( /obj/machinery/gateway{ @@ -43208,7 +43186,7 @@ }, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 8 }, /area/gateway) "bLG" = ( @@ -43784,12 +43762,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar) -"bMQ" = ( -/obj/structure/easel, -/obj/item/canvas/twentythreeXtwentythree, -/obj/item/canvas/twentythreeXtwentythree, -/turf/open/floor/wood, -/area/library) "bMR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ @@ -44084,7 +44056,7 @@ }, /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 8 }, /area/gateway) "bNr" = ( @@ -44093,7 +44065,7 @@ }, /obj/effect/turf_decal/bot_white/right, /turf/open/floor/plasteel/vault{ - dir = 4 + dir = 1 }, /area/gateway) "bNs" = ( @@ -44699,26 +44671,20 @@ /turf/open/floor/plating, /area/gateway) "bOK" = ( -/turf/open/floor/plasteel/vault{ - dir = 4 - }, +/turf/open/floor/plasteel/vault, /area/gateway) "bOL" = ( /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/vault{ - dir = 4 - }, +/turf/open/floor/plasteel/vault, /area/gateway) "bOM" = ( /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 4 - }, +/turf/open/floor/plasteel/vault, /area/gateway) "bON" = ( /obj/structure/sign/securearea{ @@ -46136,9 +46102,6 @@ /obj/item/reagent_containers/food/condiment/peppermill{ pixel_x = 3 }, -/obj/item/device/radio/intercom{ - pixel_y = -25 - }, /obj/item/kitchen/rollingpin, /obj/machinery/camera{ c_tag = "Kitchen"; @@ -46183,6 +46146,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/cafeteria{ dir = 5 }, @@ -46634,7 +46598,7 @@ id = "kitchenhydro"; name = "Service Shutter" }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Service Door"; req_access_txt = "0"; req_one_access_txt = "35;28" @@ -47303,44 +47267,35 @@ /turf/open/floor/plasteel, /area/hydroponics) "bUl" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/hydroponics) +"bUm" = ( +/obj/effect/turf_decal/stripes/line, /obj/machinery/chem_master/condimaster{ desc = "Used to separate out liquids - useful for purifying botanical extracts. Also dispenses condiments."; name = "BrewMaster 2199"; pixel_x = -4 }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/hydroponics) -"bUm" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = 29 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/reagent_dispensers/watertank/high, -/obj/item/reagent_containers/glass/bucket, /turf/open/floor/plasteel, /area/hydroponics) "bUn" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line, /obj/structure/reagent_dispensers/watertank/high, /obj/item/reagent_containers/glass/bucket, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel, /area/hydroponics) "bUo" = ( -/obj/structure/closet/crate/hydroponics, -/obj/item/shovel/spade, -/obj/item/wrench, -/obj/item/reagent_containers/glass/bucket, -/obj/item/cultivator, -/obj/item/wirecutters, /obj/effect/turf_decal/stripes/line, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/high, +/obj/item/reagent_containers/glass/bucket, /turf/open/floor/plasteel, /area/hydroponics) "bUp" = ( @@ -50076,7 +50031,7 @@ /area/medical/storage) "cad" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Medbay Security Post"; req_access_txt = "63" }, @@ -50406,7 +50361,7 @@ /area/hallway/primary/central) "caJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Hydroponics"; req_access_txt = "35" }, @@ -50761,39 +50716,6 @@ dir = 8 }, /area/engine/atmos) -"cbm" = ( -/obj/docking_port/mobile{ - callTime = 250; - dheight = 0; - dir = 2; - dwidth = 11; - height = 15; - id = "whiteship"; - launch_status = 0; - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); - name = "NT Recovery White-Ship"; - port_direction = 8; - preferred_direction = 4; - roundstart_move = "whiteship_away"; - width = 27 - }, -/obj/machinery/door/airlock/titanium{ - name = "recovery shuttle external airlock" - }, -/obj/effect/decal/cleanable/dirt{ - desc = "A thin layer of dust coating the floor."; - name = "dust" - }, -/obj/docking_port/stationary{ - dir = 2; - dwidth = 11; - height = 15; - id = "whiteship_home"; - name = "SS13: Auxiliary Dock, Station-Port"; - width = 27 - }, -/turf/open/floor/mineral/titanium/blue, -/area/shuttle/abandoned) "cbn" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/components/binary/pump{ @@ -51012,6 +50934,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 8 }, @@ -51020,6 +50945,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/storage) "cbL" = ( @@ -51027,12 +50955,18 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 2 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/storage) "cbM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/medical/storage) "cbN" = ( @@ -51041,6 +50975,9 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/white, /area/medical/storage) "cbO" = ( @@ -51761,6 +51698,13 @@ dir = 8 }, /obj/structure/closet/l3closet, +/obj/machinery/power/apc{ + dir = 2; + name = "Medbay Storage APC"; + areastring = "/area/medical/storage"; + pixel_y = -24 + }, +/obj/structure/cable/yellow, /turf/open/floor/plasteel/whiteblue/side{ dir = 10 }, @@ -51794,6 +51738,15 @@ /obj/item/clothing/glasses/hud/health, /obj/item/clothing/glasses/hud/health, /obj/item/gun/syringe, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel/whiteblue/corner{ dir = 8 }, @@ -52273,6 +52226,11 @@ pixel_y = -3 }, /obj/structure/table/glass, +/obj/machinery/door/window/eastleft{ + name = "First-Aid Supplies"; + req_access_txt = "5"; + req_one_access_txt = "0" + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 8 }, @@ -52307,6 +52265,13 @@ pixel_y = -3 }, /obj/structure/table/glass, +/obj/machinery/door/window/westleft{ + name = "First-Aid Supplies"; + req_access_txt = "5" + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 4 }, @@ -52948,28 +52913,20 @@ pixel_x = -3; pixel_y = -3 }, -/obj/machinery/power/apc{ - dir = 2; - name = "Medbay Storage APC"; - areastring = "/area/medical/storage"; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, /obj/machinery/light_switch{ pixel_x = -26 }, /obj/machinery/light/small, /obj/structure/table/glass, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 10 }, /area/medical/storage) "cfM" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -52978,9 +52935,6 @@ }, /area/medical/storage) "cfN" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -53016,6 +52970,10 @@ pixel_y = -3 }, /obj/structure/table/glass, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 6 }, @@ -53522,7 +53480,7 @@ /area/medical/sleeper) "cgU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "5" @@ -53540,7 +53498,7 @@ "cgW" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "5" @@ -53550,7 +53508,7 @@ "cgX" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Desk"; req_access_txt = "5" @@ -53568,7 +53526,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -53578,7 +53536,7 @@ "cha" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -53721,7 +53679,7 @@ /area/security/checkpoint/science/research) "chq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Post - Research Division"; req_access_txt = "63" }, @@ -54230,7 +54188,7 @@ /area/medical/medbay/central) "civ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33" @@ -54588,7 +54546,7 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "cjm" = ( -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ heat_proof = 1; name = "Auxiliary Chamber"; req_access_txt = "24" @@ -56218,10 +56176,8 @@ "cmN" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_medical{ - glass = 0; +/obj/machinery/door/airlock/medical{ name = "Research Break Room"; - opacity = 1; req_access_txt = "0"; req_one_access_txt = "47" }, @@ -57899,7 +57855,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Surgery Observation"; req_access_txt = "0" }, @@ -59653,13 +59609,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"ctp" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance"; - req_access_txt = "5" - }, -/turf/open/floor/plating, -/area/medical/surgery) "ctq" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -61960,7 +61909,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "CloningDoor"; name = "Cloning Lab"; req_access_txt = "5; 68" @@ -61998,7 +61947,7 @@ /area/medical/genetics/cloning) "cyc" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Genetics Lab"; req_access_txt = "5; 9; 68" }, @@ -62655,18 +62604,16 @@ /turf/open/floor/plating, /area/science/mixing) "czs" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "czt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, /area/science/mixing) "czu" = ( @@ -63232,23 +63179,24 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "cAy" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/white, /area/science/mixing) "cAz" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/science/mixing) @@ -64048,7 +63996,7 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; req_access_txt = "29" }, @@ -65282,7 +65230,7 @@ /area/medical/virology) "cEG" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Test Subject Cell"; req_access_txt = "39" }, @@ -65594,12 +65542,10 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "cFo" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ autoclose = 0; frequency = 1449; - glass = 1; heat_proof = 1; - icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; @@ -65617,12 +65563,10 @@ /turf/open/floor/engine, /area/science/mixing) "cFq" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ autoclose = 0; frequency = 1449; - glass = 1; heat_proof = 1; - icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; @@ -66199,7 +66143,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Containment Cells"; req_access_txt = "39" }, @@ -67266,7 +67210,7 @@ "cIq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation B"; req_access_txt = "39" }, @@ -67281,7 +67225,7 @@ "cIr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation A"; req_access_txt = "39" }, @@ -67573,7 +67517,7 @@ /area/science/server) "cIX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Access"; req_access_txt = "30" }, @@ -68048,10 +67992,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/science/server) -"cJV" = ( -/obj/machinery/rnd/server, -/turf/open/floor/circuit/telecomms/server, -/area/science/server) "cJW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ dir = 1; @@ -70265,7 +70205,7 @@ /area/hallway/secondary/exit/departure_lounge) "cOv" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Departure Lounge Security Post"; req_access_txt = "63" }, @@ -72650,19 +72590,6 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, /area/science/xenobiology) -"cTX" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_ne"; - name = "northeast of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) "cUH" = ( /obj/structure/table/optable, /turf/open/floor/plasteel/white, @@ -74975,7 +74902,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "cZp" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -75135,7 +75062,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "cZI" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig"; req_access_txt = "2" }, @@ -75186,7 +75113,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "cZQ" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Cockpit"; req_access_txt = "19" }, @@ -75776,45 +75703,6 @@ }, /turf/open/floor/circuit/killroom, /area/science/xenobiology) -"dbB" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_se"; - name = "southeast of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) -"dbC" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_sw"; - name = "southwest of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) -"dbD" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_s"; - name = "south of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space, -/area/space/nearstation) "dbE" = ( /obj/machinery/plantgenes, /obj/effect/turf_decal/stripes/line{ @@ -77199,7 +77087,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Laser Room"; req_access_txt = "10" }, @@ -77346,10 +77234,6 @@ }, /turf/open/floor/plating, /area/engine/engineering) -"deZ" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/turf/open/floor/plating, -/area/engine/engineering) "dfa" = ( /obj/machinery/power/supermatter_shard/crystal/engine, /turf/open/floor/engine, @@ -78626,6 +78510,12 @@ /obj/structure/sign/poster/official/random{ pixel_x = 32 }, +/obj/structure/closet/crate/hydroponics, +/obj/item/shovel/spade, +/obj/item/wrench, +/obj/item/reagent_containers/glass/bucket, +/obj/item/cultivator, +/obj/item/wirecutters, /turf/open/floor/plasteel/hydrofloor, /area/hydroponics) "dix" = ( @@ -79261,13 +79151,6 @@ /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, /area/engine/supermatter) -"dlS" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/engine, -/area/engine/supermatter) "dlV" = ( /turf/closed/wall/r_wall, /area/maintenance/department/science/xenobiology) @@ -79901,13 +79784,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"dBD" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/security/brig) "dBF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable/yellow{ @@ -79928,7 +79804,7 @@ "dBH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Desk"; req_access_txt = "63" }, @@ -79979,13 +79855,6 @@ /mob/living/carbon/monkey, /turf/open/floor/plasteel/freezer, /area/medical/virology) -"dBR" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/medical/virology) "dBS" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -80468,13 +80337,13 @@ /turf/open/floor/circuit, /area/science/robotics/mechbay) "dDA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, /obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/science/mixing) "dDB" = ( @@ -80597,14 +80466,14 @@ /area/shuttle/abandoned) "EDa" = ( /obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; id = "syndicate_nw"; name = "northwest of station"; turf_type = /turf/open/space; - width = 18 + width = 23 }, /turf/open/space/basic, /area/space/nearstation) @@ -80612,30 +80481,6 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) -"EDc" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"EDd" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"EDe" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"EDf" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"EDg" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) -"EDh" = ( -/obj/structure/grille, -/turf/open/floor/plating/airless, -/area/space/nearstation) "EDi" = ( /obj/docking_port/mobile{ callTime = 250; @@ -80697,72 +80542,21 @@ }, /turf/open/floor/mineral/titanium, /area/shuttle/abandoned) -"EDn" = ( -/obj/machinery/porta_turret/aux_base{ - always_up = 1; - desc = "A turret built with substandard parts and run down further with age. Still capable of delivering lethal lasers to the odd space carp, but not much else."; - dir = 4; - has_cover = 0; - icon_state = "standard_lethal"; - lethal_projectile = /obj/item/projectile/beam/weak; - name = "turret" - }, -/turf/closed/wall/mineral/titanium, -/area/shuttle/abandoned) "EDo" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, /area/engine/atmos) -"EDp" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDq" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDr" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDs" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDt" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDu" = ( -/obj/effect/spawner/structure/window/plasma/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"EDv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/rnd/protolathe/department/engineering, -/turf/open/floor/plasteel, -/area/engine/engineering) "EDw" = ( /obj/machinery/rnd/protolathe/department/service, +/obj/machinery/door/firedoor, /turf/open/floor/plating, /area/hydroponics) "EDx" = ( /turf/closed/wall/mineral/plastitanium, /area/hallway/secondary/entry) -"EDy" = ( -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/hallway/secondary/entry) "EDz" = ( /turf/closed/wall/mineral/plastitanium, /area/security/prison) -"EDA" = ( -/turf/closed/wall/mineral/plastitanium, -/area/security/prison) "EDB" = ( /turf/closed/wall/mineral/plastitanium, /area/crew_quarters/fitness/recreation) @@ -80805,6 +80599,10 @@ /obj/machinery/droneDispenser, /turf/open/floor/plating, /area/maintenance/aft) +"Ljw" = ( +/obj/structure/sign/poster/official/random, +/turf/closed/wall, +/area/hydroponics) (1,1,1) = {" aaa @@ -105831,7 +105629,7 @@ ayx azE azE ajm -aDw +aDx aEK aGc aHx @@ -106859,7 +106657,7 @@ ayz dCj azE ajm -aDw +aDx dCo aGg aHx @@ -107887,7 +107685,7 @@ ayA azE azE ajm -aDw +aDx aEQ aGj aHz @@ -112840,7 +112638,7 @@ cvS cwR crQ cyB -czu +czy cAz cBt cCu @@ -114869,7 +114667,7 @@ bNA bOU bQD bRS -EDw +Ljw bUi bVu bWO @@ -115897,7 +115695,7 @@ bNC bOW bQH bRV -bST +EDw bUl bVx bWS diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index bbf998aaba..0484f38648 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -111,6 +111,7 @@ /obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/clothing/glasses/meson, +/obj/item/device/mining_scanner, /turf/open/floor/plasteel, /area/mine/laborcamp) "av" = ( @@ -119,6 +120,7 @@ /obj/item/device/flashlight, /obj/item/pickaxe, /obj/item/clothing/glasses/meson, +/obj/item/device/mining_scanner, /turf/open/floor/plasteel, /area/mine/laborcamp) "aw" = ( @@ -144,7 +146,7 @@ /turf/open/floor/plasteel, /area/mine/laborcamp) "aB" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Infirmary"; req_access_txt = "0" @@ -286,7 +288,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors/explored) "aY" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 4; name = "Labor Camp Shuttle Security Airlock"; req_access_txt = "2" @@ -450,7 +452,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/mine/eva) "bx" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 4; name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0" @@ -470,7 +472,7 @@ /turf/open/floor/plasteel, /area/mine/laborcamp) "bA" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Backroom"; req_access_txt = "2" }, @@ -557,7 +559,7 @@ /turf/open/floor/plasteel/purple/corner, /area/mine/eva) "bL" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Monitoring"; req_access_txt = "2" }, @@ -617,7 +619,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Station EVA"; req_access_txt = "54" }, @@ -1371,7 +1373,7 @@ /turf/open/floor/plating, /area/mine/living_quarters) "dR" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Infirmary"; req_access_txt = "0" @@ -1511,7 +1513,7 @@ /turf/open/floor/plasteel/purple/corner, /area/mine/living_quarters) "el" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Processing Area"; req_access_txt = "48" }, @@ -1614,7 +1616,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Station Bridge"; req_access_txt = "48" }, @@ -1647,7 +1649,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mining Station Bridge"; req_access_txt = "48" }, @@ -1689,7 +1691,7 @@ }, /area/mine/production) "eF" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Processing Area"; req_access_txt = "48" }, @@ -3328,7 +3330,7 @@ /turf/open/floor/plasteel, /area/mine/laborcamp) "WB" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 8; name = "Labor Camp Shuttle Security Airlock"; req_access_txt = "2" @@ -3336,7 +3338,7 @@ /turf/open/floor/plasteel, /area/mine/laborcamp) "WC" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 8; name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0" @@ -21563,7 +21565,7 @@ am am am am -ao +ai ab ab ab @@ -22070,7 +22072,7 @@ am am am am -ao +ai ab ab ai @@ -22854,7 +22856,7 @@ ab ab ab ab -ao +ai ab ab ab @@ -24644,7 +24646,7 @@ am am am am -ao +ai ab ab ab @@ -24901,7 +24903,7 @@ am am am am -ao +ai ab ab ab @@ -25178,7 +25180,7 @@ ab ab ab ab -ao +ai am am ai @@ -25422,7 +25424,7 @@ ab ab ab ai -ao +ai ab ab ab @@ -25672,7 +25674,7 @@ am am am am -ao +ai ab ab ab @@ -25956,7 +25958,7 @@ am am am am -ao +ai ab ab ab @@ -26199,7 +26201,7 @@ ab ab ab ab -ao +ai am am am @@ -26213,7 +26215,7 @@ am am am am -ao +ai ab ab ab @@ -26972,7 +26974,7 @@ ab ab ab ab -ao +ai am am am @@ -28511,7 +28513,7 @@ ab ab ab ai -ao +ai ab ab ab @@ -29021,7 +29023,7 @@ ab ab ab ab -ao +ai ab ab ai @@ -29030,13 +29032,13 @@ am am am am -ao +ai ab ab ab ab -ao -ao +ai +ai ab ab ab @@ -29278,8 +29280,8 @@ ab ab ab ab -ao -ao +ai +ai ab ai am @@ -30060,8 +30062,8 @@ ab ab ab ab -ao -ao +ai +ai ab ab ab @@ -30573,7 +30575,7 @@ ai ai ab ab -ao +ai am am am diff --git a/_maps/map_files/OmegaStation/OmegaStation.dmm b/_maps/map_files/OmegaStation/OmegaStation.dmm index ffda1f471d..bb25481c4c 100644 --- a/_maps/map_files/OmegaStation/OmegaStation.dmm +++ b/_maps/map_files/OmegaStation/OmegaStation.dmm @@ -486,8 +486,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "aaY" = ( @@ -497,8 +497,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "aaZ" = ( @@ -518,8 +518,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "aba" = ( @@ -527,8 +527,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "abc" = ( @@ -541,7 +541,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 5 }, /area/bridge) @@ -573,8 +573,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "abf" = ( @@ -590,8 +590,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "abg" = ( @@ -602,8 +602,8 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "abh" = ( @@ -619,8 +619,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "abi" = ( @@ -636,7 +636,7 @@ }) "abk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -661,7 +661,7 @@ /area/bridge) "abl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -691,8 +691,8 @@ }, /area/bridge) "abo" = ( -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "abp" = ( @@ -705,7 +705,7 @@ /area/bridge) "abq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -721,7 +721,7 @@ /area/bridge) "abr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -777,7 +777,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/bridge) @@ -786,8 +786,8 @@ /obj/machinery/light_switch{ pixel_x = 24 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "abA" = ( @@ -804,8 +804,8 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "abC" = ( @@ -825,7 +825,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/bridge) "abE" = ( /obj/structure/cable/white{ @@ -865,7 +867,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/bridge) @@ -874,7 +876,7 @@ /obj/machinery/light_switch{ pixel_x = -24 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/bridge) @@ -886,17 +888,10 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) -"abJ" = ( -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/hop) "abK" = ( /obj/structure/window/reinforced{ dir = 8 @@ -914,41 +909,33 @@ /area/crew_quarters/heads/hop) "abL" = ( /obj/structure/rack, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "abM" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "abN" = ( /obj/structure/sign/vacuum, /turf/closed/wall, -/area/hallway/primary/central) +/area/maintenance/starboard) "abO" = ( -/obj/structure/closet/emcloset/anchored, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/obj/effect/turf_decal/stripes/line, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel, -/area/hallway/primary/central) -"abP" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/astplate, -/area/ruin/unpowered{ - name = "Asteroid" - }) +/area/maintenance/starboard) "abQ" = ( /turf/closed/wall/mineral/titanium, /area/shuttle/supply) @@ -959,7 +946,6 @@ name = "Asteroid" }) "abS" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/ore/glass, /turf/open/floor/plating/astplate, /area/ruin/unpowered{ @@ -994,7 +980,6 @@ /turf/open/floor/plasteel/white, /area/security/detectives_office) "abW" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/firecloset, /obj/machinery/light/small{ dir = 1 @@ -1091,14 +1076,18 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/bridge) "ace" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/bridge) "acf" = ( /obj/structure/cable/white{ @@ -1115,8 +1104,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "ach" = ( @@ -1157,7 +1146,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/bridge) @@ -1165,14 +1154,18 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/bridge) "acn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/bridge) "aco" = ( /obj/structure/table/wood, @@ -1193,15 +1186,12 @@ dir = 2; name = "command camera" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/heads/hop) "acp" = ( /obj/structure/bed, -/obj/structure/cable/white{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -1211,9 +1201,6 @@ /area/crew_quarters/heads/hop) "acq" = ( /obj/structure/dresser, -/obj/structure/cable/white{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, @@ -1256,11 +1243,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/fore) "acv" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -1268,7 +1253,35 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "acw" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"acx" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/landmark/xeno_spawn, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"acy" = ( /obj/machinery/door/airlock/external{ name = "External Airlock"; req_access_txt = "13" @@ -1276,41 +1289,21 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"acx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/xeno_spawn, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"acy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - name = "External Airlock"; - req_access_txt = "13" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/structure/cable/white{ + icon_state = "4-8" }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "acz" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -1322,13 +1315,6 @@ }, /turf/open/floor/plasteel, /area/shuttle/supply) -"acB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/shuttle/supply) "acC" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -1342,10 +1328,11 @@ name = "Asteroid" }) "acE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/ruin/unpowered{ name = "Asteroid" }) @@ -1356,7 +1343,6 @@ }) "acG" = ( /obj/structure/door_assembly/door_assembly_mhatch, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1369,7 +1355,6 @@ }) "acH" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" @@ -1426,10 +1411,7 @@ /area/security/detectives_office) "acN" = ( /obj/effect/landmark/blobstart, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "acO" = ( /obj/structure/mirror{ @@ -1498,8 +1480,8 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "acV" = ( @@ -1507,8 +1489,8 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "acW" = ( @@ -1541,8 +1523,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/bridge) "acY" = ( @@ -1644,8 +1626,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "adf" = ( @@ -1658,8 +1640,8 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "adg" = ( @@ -1672,17 +1654,14 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/heads/hop) "adh" = ( /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, /obj/structure/cable/white{ icon_state = "2-8" }, @@ -1692,9 +1671,6 @@ /turf/open/floor/wood, /area/crew_quarters/heads/hop) "adi" = ( -/obj/structure/cable/white{ - icon_state = "1-8" - }, /obj/structure/cable/white{ icon_state = "2-8" }, @@ -1739,7 +1715,6 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/heads/hop) "adm" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "0-2" @@ -1750,9 +1725,9 @@ areastring = "/area/maintenance/starboard/fore"; pixel_x = 26 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" }, /area/maintenance/starboard/fore) "adn" = ( @@ -1774,31 +1749,11 @@ /obj/structure/sign/vacuum, /turf/open/floor/plating, /area/quartermaster/storage) -"adr" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/shuttle/supply) "ads" = ( /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/supply) -"adt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/shuttle/supply) -"adu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/shuttle/supply) "adv" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate{ icon_state = "crateopen"; opened = 1 @@ -1809,25 +1764,18 @@ name = "Asteroid" }) "adw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/ruin/unpowered{ name = "Asteroid" }) "adx" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/clothing/suit/space/orange, /obj/item/clothing/head/helmet/space/orange, /obj/effect/landmark/revenantspawn, -/turf/open/floor/plasteel/neutral, -/area/ruin/unpowered{ - name = "Asteroid" - }) -"ady" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/side{ - dir = 4 - }, +/turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" }) @@ -1879,10 +1827,12 @@ /turf/open/floor/plasteel/white, /area/security/detectives_office) "adF" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/fore) "adG" = ( /obj/structure/toilet{ @@ -1940,6 +1890,7 @@ dir = 1 }, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken" }, /area/crew_quarters/heads/captain/private) @@ -1970,55 +1921,41 @@ /obj/structure/closet/crate/bin, /turf/open/floor/wood, /area/crew_quarters/heads/captain/private) -"adM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/bridge) "adN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = 28 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "adO" = ( /obj/machinery/ai_status_display, /turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "adP" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "aicorewindow"; - name = "AI Core Shutters" - }, /obj/structure/cable/white{ icon_state = "0-2" }, /obj/structure/cable/white, /turf/open/floor/plating, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "adQ" = ( /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/ai) "adR" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "aicorewindow"; - name = "AI Core Shutters" +/obj/structure/sign/electricshock{ + pixel_x = 32 }, /obj/structure/cable/white{ icon_state = "0-2" }, /turf/open/floor/plating, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "adS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -2027,8 +1964,8 @@ /obj/structure/sign/nanotrasen{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "adT" = ( @@ -2038,8 +1975,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "adU" = ( @@ -2078,14 +2015,6 @@ "adX" = ( /turf/closed/wall, /area/crew_quarters/heads/hop) -"adY" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "adZ" = ( /obj/machinery/conveyor{ dir = 8; @@ -2111,18 +2040,6 @@ /obj/structure/sign/nanotrasen{ pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aeb" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargounload" - }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -2159,7 +2076,6 @@ dir = 8; id = "cargounload" }, -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/directions/engineering{ desc = "A sign that shows there are doors here. There are doors everywhere!"; icon_state = "doors"; @@ -2171,21 +2087,6 @@ }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aef" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "cargounload" - }, -/obj/machinery/door/poddoor{ - id = "cargounload"; - name = "supply dock unloading door" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/open/floor/plating, -/area/quartermaster/storage) "aeg" = ( /obj/machinery/conveyor{ dir = 8; @@ -2234,26 +2135,20 @@ /turf/open/floor/plasteel, /area/shuttle/supply) "ael" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" }, -/turf/open/floor/plasteel/neutral/side{ - dir = 10 - }, +/turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" }) "aem" = ( -/turf/open/floor/plasteel/neutral/side, -/area/ruin/unpowered{ - name = "Asteroid" - }) -"aen" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/ruin/unpowered{ name = "Asteroid" }) @@ -2270,9 +2165,10 @@ name = "Asteroid" }) "aep" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 +/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" }, /area/ruin/unpowered{ name = "Asteroid" @@ -2306,11 +2202,7 @@ /turf/open/floor/plating, /area/security/detectives_office) "aet" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/machinery/power/apc{ dir = 8; name = "Fore Maintenace APC"; @@ -2321,7 +2213,10 @@ /obj/structure/cable/white{ icon_state = "0-2" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/maintenance/fore) "aeu" = ( /obj/structure/sign/nanotrasen, @@ -2365,8 +2260,8 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "aez" = ( @@ -2376,114 +2271,69 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/paladin{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/aiModule/core/full/asimov, -/obj/item/aiModule/core/full/corp{ - pixel_x = -3; - pixel_y = -3 +/obj/effect/spawner/lootdrop/aimodule_harmless{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, /obj/structure/sign/nanotrasen{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/nuke_storage) "aeA" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault, -/area/ai_monitored/turret_protected/ai) -"aeB" = ( -/obj/machinery/door/window{ - base_state = "leftsecure"; - dir = 8; - icon_state = "leftsecure"; - name = "Primary AI Core Access"; - req_access_txt = "16" - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 4; - pixel_y = 33 - }, -/turf/open/floor/plasteel/vault{ - dir = 6 - }, -/area/ai_monitored/turret_protected/ai) -"aeC" = ( -/obj/item/device/radio/intercom{ - broadcasting = 0; - freerange = 1; - listening = 1; - name = "Common Channel"; - pixel_x = -27; - pixel_y = -24 - }, -/obj/item/device/radio/intercom{ - anyai = 1; - freerange = 1; - listening = 0; - name = "Custom Channel"; - pixel_y = -27 - }, -/obj/item/device/radio/intercom{ - anyai = 1; - broadcasting = 0; - freerange = 1; - frequency = 1447; - name = "Private Channel"; - pixel_x = 27; - pixel_y = -24 - }, -/obj/machinery/button/door{ - id = "aicorewindow"; - name = "AI Core Shutters"; - pixel_x = 24; - pixel_y = -40; - req_access_txt = "16" - }, -/obj/machinery/button/door{ - id = "aicoredoor"; - name = "AI Chamber Access Control"; - pixel_x = -23; - pixel_y = -40; - req_access_txt = "16" - }, -/obj/effect/landmark/start/ai, -/obj/structure/cable/white{ - icon_state = "1-4" - }, /obj/machinery/ai_slipper{ uses = 10 }, -/obj/machinery/requests_console{ - department = "AI"; - departmentType = 5; - name = "AI RC"; - pixel_x = 30; - pixel_y = 30 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/nuke_storage) +"aeB" = ( +/obj/machinery/power/apc{ + aidisabled = 0; + areastring = "/area/ai_monitored/nuke_storage"; + dir = 1; + name = "AI Vault APC"; + pixel_y = 24 }, -/turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) -"aeD" = ( -/obj/machinery/door/window{ - base_state = "rightsecure"; - dir = 4; - icon_state = "rightsecure"; - name = "Primary AI Core Access"; - req_access_txt = "16" +/obj/structure/cable/white{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/nuke_storage) +"aeC" = ( +/obj/structure/cable/white{ + icon_state = "0-2" + }, +/obj/machinery/nuclearbomb/selfdestruct, +/obj/structure/cable/white{ + icon_state = "1-4" }, /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/vault{ - dir = 10 +/turf/open/floor/circuit/green, +/area/ai_monitored/nuke_storage) +"aeD" = ( +/obj/structure/cable/white{ + icon_state = "4-8" }, -/area/ai_monitored/turret_protected/ai) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/nuke_storage) "aeE" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -2491,27 +2341,34 @@ /obj/structure/cable/white{ icon_state = "2-8" }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "aeF" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor/westright{ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/antimov{ - pixel_x = 3; - pixel_y = 3 +/obj/effect/spawner/lootdrop/aimodule_harmful{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 2 }, -/obj/item/aiModule/supplied/oxygen, -/obj/item/aiModule/supplied/protectStation{ +/obj/item/aiModule/supplied/oxygen{ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/plasteel/vault{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/nuke_storage) "aeG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light{ @@ -2520,8 +2377,8 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "aeH" = ( @@ -2531,8 +2388,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "aeI" = ( @@ -2549,9 +2406,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/bed/dogbed/ian, /mob/living/simple_animal/pet/dog/corgi/Ian, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/heads/hop) "aeK" = ( /obj/structure/cable/white{ @@ -2561,25 +2416,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/heads/hop) "aeL" = ( /obj/machinery/photocopier, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/heads/hop) "aeM" = ( /obj/structure/filingcabinet/security, /obj/item/folder/documents, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/heads/hop) "aeN" = ( /obj/structure/table/wood, @@ -2597,9 +2446,7 @@ areastring = "/area/crew_quarters/heads/hop"; pixel_y = 25 }, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/heads/hop) "aeO" = ( /obj/structure/table/wood, @@ -2616,7 +2463,7 @@ pixel_x = 28; pixel_y = 24 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/corner{ dir = 8 }, /area/crew_quarters/heads/hop) @@ -2626,7 +2473,6 @@ pixel_x = -32; supply_display = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -2634,12 +2480,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aeR" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aeS" = ( /obj/structure/closet/crate, /obj/effect/turf_decal/delivery, @@ -2651,33 +2491,11 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aeU" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/brown{ dir = 4 }, /area/quartermaster/storage) -"aeV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aeW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - name = "Supply Dock Airlock"; - req_access_txt = "31" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aeX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -2689,7 +2507,6 @@ name = "Supply Shuttle Airlock"; req_access_txt = "31" }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/shuttle/supply) "afa" = ( @@ -2700,23 +2517,13 @@ /area/shuttle/supply) "afb" = ( /obj/structure/door_assembly/door_assembly_mhatch, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ruin/unpowered{ - name = "Asteroid" - }) -"afc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" }) @@ -2724,8 +2531,8 @@ /obj/structure/table/wood, /obj/item/device/taperecorder, /obj/item/restraints/handcuffs, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/security/detectives_office) "afe" = ( @@ -2782,16 +2589,14 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "afj" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "afk" = ( /obj/structure/extinguisher_cabinet{ @@ -2799,7 +2604,9 @@ }, /obj/machinery/suit_storage_unit/captain, /obj/effect/turf_decal/stripes/end, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/crew_quarters/heads/captain/private) "afl" = ( /obj/item/twohanded/required/kirbyplants{ @@ -2843,6 +2650,7 @@ dir = 8 }, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken2" }, /area/crew_quarters/heads/captain/private) @@ -2850,7 +2658,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, /obj/machinery/camera{ @@ -2858,8 +2665,8 @@ dir = 8; name = "command camera" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "afq" = ( @@ -2875,23 +2682,30 @@ pixel_y = 3 }, /obj/item/aiModule/core/full/custom, +/obj/item/aiModule/core/full/asimov{ + pixel_x = -3; + pixel_y = -3 + }, /obj/machinery/camera{ - c_tag = "AI Core - Port"; + c_tag = "AI Vault - Port"; dir = 4; name = "ai camera"; network = list("Sat"); start_active = 1 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/nuke_storage) "afr" = ( /obj/structure/cable/white{ icon_state = "1-2" }, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "afs" = ( /obj/structure/table/reinforced, /obj/machinery/door/window/brigdoor{ @@ -2900,7 +2714,7 @@ req_access_txt = "20" }, /obj/structure/window/reinforced, -/obj/item/aiModule/core/full/tyrant{ +/obj/item/aiModule/supplied/protectStation{ pixel_x = 3; pixel_y = 3 }, @@ -2909,10 +2723,13 @@ pixel_x = -3; pixel_y = -3 }, -/turf/open/floor/plasteel/vault{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/nuke_storage) "aft" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -2926,8 +2743,8 @@ dir = 4; name = "command camera" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "afu" = ( @@ -2941,8 +2758,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "afv" = ( @@ -2979,9 +2796,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "afx" = ( /obj/structure/cable/white{ @@ -2994,8 +2809,9 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken" }, /area/crew_quarters/heads/hop) "afy" = ( @@ -3009,9 +2825,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "afz" = ( /obj/structure/cable/white{ @@ -3028,9 +2842,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "afA" = ( /obj/machinery/computer/secure_data{ @@ -3044,7 +2856,7 @@ dir = 8; name = "command camera" }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/crew_quarters/heads/hop) @@ -3066,7 +2878,6 @@ }, /area/quartermaster/storage) "afD" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) @@ -3082,7 +2893,6 @@ /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) "afH" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor_switch{ id = "cargounload" }, @@ -3141,7 +2951,6 @@ name = "Asteroid" }) "afM" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/ore/iron, /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate, @@ -3149,18 +2958,8 @@ name = "Asteroid" }) "afN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/astplate, -/area/ruin/unpowered{ - name = "Asteroid" - }) -"afO" = ( -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 - }, /area/ruin/unpowered{ name = "Asteroid" }) @@ -3172,8 +2971,8 @@ name = "Station Intercom"; pixel_x = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/security/detectives_office) "afQ" = ( @@ -3223,14 +3022,12 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, /obj/effect/landmark/event_spawn, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "afW" = ( /obj/machinery/door/firedoor, @@ -3255,7 +3052,9 @@ icon_state = "4-8" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/crew_quarters/heads/captain/private) "afY" = ( /obj/machinery/requests_console{ @@ -3321,16 +3120,16 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "agf" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "agg" = ( @@ -3357,37 +3156,31 @@ }, /obj/item/clothing/neck/stethoscope, /obj/item/stack/sheet/mineral/diamond, -/obj/item/gun/ballistic/automatic/pistol/deagle, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/item/areaeditor/blueprints, +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/nuke_storage) "agh" = ( /obj/machinery/computer/upload/ai, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "agi" = ( -/obj/machinery/doomsday_device, -/obj/structure/cable/white{ - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - aidisabled = 0; - dir = 1; - name = "AI Chamber APC"; - areastring = "/area/ai_monitored/turret_protected/ai"; - pixel_y = 24 - }, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "agj" = ( /obj/machinery/computer/upload/borg, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "agk" = ( /obj/machinery/light{ dir = 4 @@ -3396,23 +3189,17 @@ /obj/structure/sign/nosmoking_2{ pixel_x = 32 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/nuke_storage) "agl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/bridge) -"agm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "agn" = ( @@ -3434,25 +3221,19 @@ /obj/item/stack/packageWrap, /obj/item/book/manual/wiki/security_space_law, /obj/item/hand_labeler, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "agp" = ( /obj/machinery/pdapainter, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "agq" = ( /obj/machinery/vending/cart, /obj/machinery/light, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "agr" = ( /obj/structure/table/wood, @@ -3466,8 +3247,9 @@ c_tag = "Head of Personnel's Office"; dir = 1 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken5" }, /area/crew_quarters/heads/hop) "ags" = ( @@ -3477,8 +3259,9 @@ pixel_y = -42 }, /obj/effect/landmark/start/head_of_personnel, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken6" }, /area/crew_quarters/heads/hop) "agt" = ( @@ -3506,26 +3289,24 @@ pixel_y = -24; req_access_txt = "57" }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/crew_quarters/heads/hop) "agu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, /area/maintenance/starboard/fore) "agv" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/brown{ dir = 8 }, @@ -3542,13 +3323,6 @@ }, /turf/open/floor/plasteel/neutral, /area/quartermaster/storage) -"agy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/quartermaster/storage) "agz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -3578,7 +3352,6 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "agC" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 1 }, @@ -3604,7 +3377,6 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/supply) "agE" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/ore/silver, /obj/item/ore/iron, /turf/open/floor/plating/astplate, @@ -3615,7 +3387,6 @@ /turf/closed/wall/r_wall, /area/security/brig) "agG" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/ruin/unpowered{ @@ -3644,8 +3415,8 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/security/detectives_office) "agJ" = ( @@ -3691,10 +3462,11 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/fore) "agO" = ( /obj/machinery/light{ @@ -3711,7 +3483,9 @@ icon_state = "0-4" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/crew_quarters/heads/captain/private) "agP" = ( /obj/structure/cable/white{ @@ -3811,8 +3585,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "agW" = ( @@ -3820,8 +3594,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "agX" = ( @@ -3831,25 +3605,31 @@ name = "Station Intercom"; pixel_x = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/nuke_storage) "agY" = ( /obj/structure/cable/white{ icon_state = "1-4" }, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "agZ" = ( /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "aha" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -3864,25 +3644,32 @@ icon_state = "2-4" }, /obj/effect/landmark/start/cyborg, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahb" = ( /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahc" = ( /obj/structure/cable/white{ icon_state = "1-8" }, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahd" = ( /obj/structure/table/reinforced, /obj/item/aiModule/supplied/quarantine, @@ -3894,22 +3681,25 @@ pixel_x = 28 }, /obj/machinery/camera{ - c_tag = "AI Core - Starboard"; + c_tag = "AI Vault - Starboard"; dir = 8; name = "ai camera"; network = list("Sat"); start_active = 1 }, -/turf/open/floor/plasteel/vault{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/nuke_storage) "ahe" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "ahf" = ( @@ -3920,8 +3710,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "ahg" = ( @@ -3959,12 +3749,14 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "ahj" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/starboard/fore) "ahk" = ( /obj/machinery/firealarm{ @@ -3975,7 +3767,6 @@ pixel_x = -24; pixel_y = -24 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -3999,8 +3790,6 @@ dir = 4; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -4013,7 +3802,6 @@ dir = 4; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -4028,7 +3816,6 @@ dir = 4; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -4042,7 +3829,6 @@ dir = 4; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor{ id = "cargoload"; name = "supply dock loading door" @@ -4061,7 +3847,6 @@ id = "cargoload" }, /obj/structure/plasticflaps, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -4094,14 +3879,13 @@ /obj/structure/sign/nanotrasen{ pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/security/brig) "ahw" = ( /obj/structure/reagent_dispensers/peppertank{ @@ -4111,7 +3895,7 @@ dir = 10 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/security/brig) "ahx" = ( /obj/machinery/ai_status_display{ @@ -4124,7 +3908,7 @@ dir = 6 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/security/brig) "ahy" = ( /obj/machinery/suit_storage_unit/security, @@ -4138,10 +3922,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/security/brig) "ahz" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -4155,8 +3938,6 @@ /obj/item/clothing/suit/fire/firefighter, /obj/item/clothing/mask/gas, /obj/item/clothing/head/hardhat/red, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -4173,7 +3954,9 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/security/detectives_office) "ahC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -4236,10 +4019,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "ahH" = ( /obj/structure/sign/securearea{ @@ -4249,7 +4030,10 @@ /obj/effect/turf_decal/stripes/end{ dir = 1 }, -/turf/open/floor/plasteel, +/obj/item/gun/energy/e_gun/hos, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/crew_quarters/heads/captain/private) "ahI" = ( /obj/machinery/computer/communications{ @@ -4318,17 +4102,20 @@ pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "ahP" = ( /obj/structure/table/reinforced, /obj/item/aiModule/supplied/freeform, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/stripes/line{ + dir = 4 }, -/area/ai_monitored/turret_protected/ai) +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/nuke_storage) "ahQ" = ( /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) @@ -4339,7 +4126,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahS" = ( /obj/structure/cable/white{ icon_state = "1-2" @@ -4347,39 +4134,32 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahU" = ( /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, /turf/open/floor/circuit/green, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "ahV" = ( /obj/structure/table/reinforced, -/obj/item/aiModule/core/full/drone{ - pixel_x = 3; - pixel_y = 3 +/obj/effect/spawner/lootdrop/aimodule_neutral{ + fan_out_items = 1; + lootdoubles = 0; + lootcount = 3 }, -/obj/item/aiModule/core/full/reporter, -/obj/item/aiModule/core/full/liveandletlive{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/open/floor/plasteel/vault{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) -"ahW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, -/area/bridge) +/area/ai_monitored/nuke_storage) "ahX" = ( /obj/machinery/airalarm{ dir = 8; @@ -4389,8 +4169,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/bridge) "ahY" = ( @@ -4429,7 +4209,6 @@ req_access_txt = "0"; req_one_access_txt = "48;50" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -4443,7 +4222,6 @@ dir = 1; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/plasticflaps, /obj/effect/turf_decal/stripes/line{ @@ -4460,17 +4238,11 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aig" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/plasteel, /area/shuttle/supply) -"aih" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/shuttle/supply) "aii" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -4482,20 +4254,8 @@ /turf/open/floor/plasteel, /area/shuttle/supply) "aik" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, /turf/open/floor/plating/astplate, -/area/ruin/unpowered{ - name = "Asteroid" - }) -"ail" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/turf/open/floor/plating, /area/ruin/unpowered{ name = "Asteroid" }) @@ -4515,8 +4275,9 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 1 }, /area/security/brig) "ain" = ( @@ -4531,6 +4292,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/brig) "aio" = ( @@ -4560,8 +4324,9 @@ /obj/structure/sign/nosmoking_2{ pixel_y = 32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 }, /area/security/brig) "aip" = ( @@ -4580,7 +4345,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; req_access_txt = "63" }, @@ -4601,7 +4366,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security E.V.A. Storage"; req_access_txt = "63" }, @@ -4674,11 +4439,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/fore) "aiy" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -4698,18 +4463,14 @@ "aiz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "aiA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ locked = 1; - name = "MiniSat Chamber"; + name = "AI Vault Chamber"; req_access_txt = "16" }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "aicoredoor"; - name = "AI Core Access" - }, /obj/machinery/flasher{ id = "AI"; pixel_x = -26 @@ -4731,14 +4492,14 @@ /turf/open/floor/plasteel/vault{ dir = 8 }, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "aiB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, -/area/ai_monitored/turret_protected/ai) +/area/ai_monitored/nuke_storage) "aiC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 0; name = "Bridge Access"; req_access_txt = "19" @@ -4799,7 +4560,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/fore) "aiI" = ( /obj/structure/filingcabinet/filingcabinet, @@ -4812,7 +4573,6 @@ }, /area/quartermaster/storage) "aiJ" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/brown{ dir = 1 }, @@ -4824,7 +4584,6 @@ }, /area/quartermaster/storage) "aiL" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/conveyor_switch{ id = "cargoload" }, @@ -4840,7 +4599,6 @@ dir = 1; id = "cargoload" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/end, /turf/open/floor/plating, @@ -4867,11 +4625,6 @@ dir = 5 }, /area/quartermaster/storage) -"aiP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/shuttle/supply) "aiQ" = ( /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -4889,8 +4642,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 1 }, /area/security/brig) "aiS" = ( @@ -4898,6 +4652,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/brig) "aiT" = ( @@ -4906,8 +4663,9 @@ /obj/item/clothing/suit/armor/laserproof, /obj/item/gun/energy/temperature/security, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 }, /area/security/brig) "aiU" = ( @@ -5340,11 +5098,9 @@ }, /area/hallway/primary/central) "ajH" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -5361,7 +5117,6 @@ }, /area/quartermaster/storage) "ajK" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -5400,17 +5155,7 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/supply) -"ajO" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/shuttle/engine/heater, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/supply) "ajQ" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/ore/iron, /turf/open/floor/plating/astplate, /area/ruin/unpowered{ @@ -5431,8 +5176,9 @@ name = "Station Intercom"; pixel_x = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 1 }, /area/security/brig) "ajS" = ( @@ -5443,6 +5189,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/brig) "ajT" = ( @@ -5478,8 +5227,9 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/darkred/corner{ + dir = 4 }, /area/security/brig) "ajU" = ( @@ -6228,7 +5978,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -6414,7 +6164,6 @@ id = "evashutters"; name = "E.V.A. Storage Shutters" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -6468,7 +6217,6 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "alC" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, @@ -6504,8 +6252,6 @@ }, /area/quartermaster/storage) "alG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/effect/landmark/revenantspawn, /turf/open/floor/plating, @@ -6562,7 +6308,7 @@ /area/security/brig) "alK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -6674,7 +6420,6 @@ }, /area/hallway/primary/central) "alT" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/storage/firstaid/regular, /obj/structure/extinguisher_cabinet{ @@ -6684,14 +6429,12 @@ pixel_y = 32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alV" = ( /obj/structure/urinal{ @@ -6701,26 +6444,23 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alW" = ( /obj/structure/urinal{ pixel_y = 28 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alX" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate/bin, /obj/machinery/light_switch{ pixel_y = 24 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "alY" = ( /obj/machinery/shieldwallgen, -/obj/effect/decal/cleanable/dirt, /obj/machinery/button/door{ id = "teleportershutters"; name = "Teleporter Shutters"; @@ -6728,10 +6468,11 @@ req_access_txt = "19" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/teleporter) "alZ" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, @@ -6768,7 +6509,9 @@ c_tag = "Teleporter" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/teleporter) "amd" = ( /obj/structure/cable/white{ @@ -6793,7 +6536,9 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 5 + }, /area/hallway/primary/central) "amg" = ( /turf/open/floor/plasteel/neutral/corner{ @@ -6830,7 +6575,9 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, /area/hallway/primary/central) "amm" = ( /obj/structure/cable/white{ @@ -6856,12 +6603,11 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/ai_monitored/storage/eva) "amp" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-8" }, @@ -6896,14 +6642,13 @@ /obj/item/storage/toolbox/mechanical, /obj/item/stack/cable_coil/white, /obj/item/device/multitool, -/obj/effect/decal/cleanable/dirt, /obj/machinery/button/door{ id = "evashutters"; name = "E.V.A. Shutters"; pixel_x = 26; req_access_txt = "19" }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/ai_monitored/storage/eva) @@ -7003,7 +6748,6 @@ /turf/open/floor/plating, /area/shuttle/mining) "amG" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas, @@ -7117,7 +6861,7 @@ pixel_x = -12 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "amP" = ( /obj/machinery/firealarm{ @@ -7128,11 +6872,10 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "amQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "amR" = ( /obj/machinery/airalarm{ @@ -7140,16 +6883,15 @@ pixel_y = -22 }, /obj/machinery/light/small, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "amS" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Locker Room Toilets"; dir = 8; network = list("SS13") }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "amT" = ( /obj/structure/table/reinforced, @@ -7165,17 +6907,10 @@ dir = 4; name = "command camera" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/teleporter) -"amU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/teleporter) "amV" = ( /obj/structure/table/reinforced, /obj/item/storage/belt/utility, @@ -7197,7 +6932,7 @@ /area/teleporter) "amX" = ( /obj/machinery/teleport/hub, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/teleporter) @@ -7206,7 +6941,7 @@ /turf/closed/wall/r_wall, /area/teleporter) "amZ" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack/random, /obj/structure/sign/nanotrasen{ pixel_y = -32 }, @@ -7214,7 +6949,9 @@ icon_state = "1-8" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/hallway/primary/central) "ana" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -7242,7 +6979,9 @@ icon_state = "1-4" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "ane" = ( /obj/structure/sign/electricshock, @@ -7256,7 +6995,6 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "ang" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -7287,10 +7025,8 @@ /area/ai_monitored/storage/eva) "anj" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, /obj/effect/turf_decal/stripes/end{ @@ -7343,7 +7079,7 @@ /area/quartermaster/storage) "ano" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "48;50" }, @@ -7369,7 +7105,6 @@ name = "Station Intercom"; pixel_y = 26 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -7377,8 +7112,6 @@ /area/quartermaster/miningdock) "anr" = ( /obj/machinery/mineral/equipment_vendor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -7393,7 +7126,6 @@ pixel_y = 26 }, /obj/structure/closet/secure_closet/miner, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "0-2" }, @@ -7420,7 +7152,6 @@ /area/shuttle/mining) "anv" = ( /obj/machinery/computer/shuttle/mining, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -7428,7 +7159,6 @@ /area/shuttle/mining) "anw" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, /obj/item/crowbar/red, /obj/item/wrench, /obj/item/tank/internals/emergency_oxygen/engi, @@ -7608,20 +7338,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"anK" = ( -/obj/machinery/door/airlock{ - name = "Toilet Unit" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "anL" = ( /obj/machinery/door/window/northleft{ @@ -7637,8 +7354,8 @@ }, /obj/structure/closet/crate/engineering, /obj/item/hand_tele, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/teleporter) "anM" = ( @@ -7652,17 +7369,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/teleporter) -"anO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/teleporter) "anP" = ( /obj/machinery/teleport/station, /obj/machinery/light{ @@ -7671,7 +7377,7 @@ /obj/machinery/status_display{ pixel_x = 32 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/teleporter) @@ -7769,7 +7475,6 @@ name = "E.V.A. RC"; pixel_x = 32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ c_tag = "Bridge - E.V.A. Storage"; @@ -7782,7 +7487,7 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "anY" = ( -/turf/closed/wall, +/turf/closed/wall/rust, /area/ai_monitored/storage/eva) "anZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -7867,8 +7572,6 @@ /area/hallway/primary/central) "aoh" = ( /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -7886,8 +7589,6 @@ pixel_x = -24; pixel_y = 24 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -7898,7 +7599,6 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "aoj" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -7907,7 +7607,6 @@ }, /area/quartermaster/miningdock) "aok" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -7917,13 +7616,11 @@ }, /area/quartermaster/miningdock) "aol" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/ore_box, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/miningdock) "aom" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, /obj/machinery/light/small{ dir = 1 @@ -7948,7 +7645,6 @@ /turf/open/floor/plasteel/neutral, /area/shuttle/mining) "aop" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -8014,7 +7710,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/security/brig) "aow" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -8026,7 +7724,7 @@ /area/security/brig) "aox" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "secinterior"; name = "Brig"; req_access_txt = "63" @@ -8066,7 +7764,7 @@ /area/security/brig) "aoA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "secexterior"; name = "Brig"; req_access_txt = "63" @@ -8091,7 +7789,6 @@ }, /area/hallway/primary/central) "aoC" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/vomit/old, /obj/structure/toilet{ dir = 8 @@ -8101,10 +7798,9 @@ }, /obj/machinery/light/small, /obj/effect/landmark/revenantspawn, -/turf/open/floor/plating, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "aoD" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/toilet{ dir = 8 }, @@ -8114,10 +7810,9 @@ /obj/machinery/light/small, /obj/effect/landmark/blobstart, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "aoE" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/toilet{ dir = 8 }, @@ -8127,7 +7822,7 @@ /obj/machinery/light/small, /obj/effect/landmark/start/assistant, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/hallway/primary/central) "aoF" = ( /obj/structure/table/reinforced, @@ -8138,8 +7833,8 @@ dir = 4; pixel_x = -22 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/teleporter) "aoG" = ( @@ -8166,13 +7861,12 @@ /obj/machinery/newscaster{ pixel_x = 32 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/teleporter) "aoJ" = ( /obj/machinery/droneDispenser, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -8180,15 +7874,12 @@ /area/maintenance/port/central) "aoK" = ( /obj/structure/table, -/obj/effect/decal/cleanable/dirt, /obj/item/stack/sheet/metal{ amount = 30 }, /obj/item/stack/sheet/glass{ amount = 30 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, @@ -8200,7 +7891,6 @@ /obj/item/crowbar/red, /obj/item/wrench, /obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -8221,6 +7911,14 @@ dir = 1 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/table, +/obj/item/stack/packageWrap, +/obj/item/stack/cable_coil/white, +/obj/item/hand_labeler, +/obj/item/hand_labeler_refill, /turf/open/floor/plasteel, /area/crew_quarters/bar/atrium) "aoO" = ( @@ -8268,6 +7966,9 @@ icon_state = "4-8" }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/crew_quarters/bar/atrium) "aoS" = ( @@ -8275,7 +7976,6 @@ name = "Maintenance Hatch"; req_access_txt = "12" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -8288,18 +7988,19 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aoT" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/starboard/central) "aoU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -8308,22 +8009,21 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/turf/open/floor/plasteel/caution{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aoV" = ( -/obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/structure/rack, +/obj/item/storage/box/lights/mixed, +/obj/item/stack/rods{ + amount = 25 + }, /turf/open/floor/plasteel, /area/maintenance/starboard/central) "aoW" = ( /obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ dir = 4; pixel_x = -22 @@ -8446,7 +8146,6 @@ /turf/open/floor/plasteel/brown/corner, /area/hallway/primary/central) "aph" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -8498,7 +8197,6 @@ }, /area/quartermaster/miningdock) "apl" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-8" }, @@ -8507,7 +8205,6 @@ }, /area/quartermaster/miningdock) "apm" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/external{ name = "Mining Dock Airlock"; @@ -8523,15 +8220,11 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "apn" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, -/turf/open/floor/plasteel, -/area/quartermaster/miningdock) -"apo" = ( /obj/effect/turf_decal/stripes/line{ - dir = 2 + dir = 1 }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) @@ -8548,13 +8241,6 @@ }, /turf/open/floor/plasteel/white, /area/shuttle/mining) -"apq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/shuttle/mining) "apr" = ( /turf/open/floor/plasteel/neutral, /area/shuttle/mining) @@ -8630,7 +8316,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Office"; req_access_txt = "63" }, @@ -8656,7 +8342,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/security/brig) "apz" = ( /obj/effect/landmark/start/security_officer, @@ -8693,7 +8381,7 @@ /area/security/brig) "apC" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "secinterior"; name = "Brig"; req_access_txt = "63" @@ -8736,7 +8424,7 @@ /area/security/brig) "apF" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ id_tag = "secexterior"; name = "Brig"; req_access_txt = "63" @@ -8793,7 +8481,6 @@ /area/storage/primary) "apK" = ( /obj/machinery/shieldwallgen, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch{ pixel_x = -24 }, @@ -8801,10 +8488,11 @@ pixel_y = -28 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/teleporter) "apL" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/status_display{ pixel_y = -32 }, @@ -8814,7 +8502,6 @@ /turf/open/floor/plasteel, /area/teleporter) "apM" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ dir = 2; name = "Teleporter APC"; @@ -8841,7 +8528,6 @@ /area/teleporter) "apO" = ( /obj/machinery/shieldwallgen, -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = 28 @@ -8850,15 +8536,17 @@ pixel_y = -32 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/teleporter) "apP" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel/yellow/side{ - dir = 9 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" }, /area/maintenance/port/central) "apQ" = ( @@ -8870,27 +8558,13 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/item/storage/box/lights/mixed, -/turf/open/floor/plasteel/yellow/side{ - dir = 5 - }, -/area/maintenance/port/central) -"apR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "apS" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8906,7 +8580,6 @@ /turf/open/floor/plasteel, /area/maintenance/port/central) "apT" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -8917,6 +8590,9 @@ icon_state = "4-8" }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/crew_quarters/bar/atrium) "apU" = ( @@ -8946,12 +8622,20 @@ /area/crew_quarters/bar/atrium) "apW" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel/neutral/corner, /area/crew_quarters/bar/atrium) "apX" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/delivery, /obj/machinery/rnd/protolathe/department/service, +/obj/effect/turf_decal/stripes/box, /turf/open/floor/plasteel, /area/crew_quarters/bar/atrium) "apY" = ( @@ -8961,15 +8645,12 @@ /turf/closed/wall, /area/maintenance/starboard/central) "apZ" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aqa" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -8977,17 +8658,28 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/caution, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard/central) "aqb" = ( -/obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/structure/closet/crate{ + name = "emergency supplies crate" + }, +/obj/item/storage/toolbox/emergency, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/device/flashlight/flare, +/obj/item/device/flashlight/flare, /turf/open/floor/plasteel, /area/maintenance/starboard/central) "aqc" = ( @@ -8998,7 +8690,6 @@ }, /obj/item/tank/jetpack/carbondioxide, /obj/item/wrench, -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = -28 @@ -9006,12 +8697,11 @@ /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/ai_monitored/storage/eva) "aqd" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/status_display{ pixel_y = -32 }, @@ -9069,7 +8759,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -28 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/ai_monitored/storage/eva) @@ -9098,7 +8788,6 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -9132,21 +8821,11 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aqo" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "aqp" = ( /obj/machinery/autolathe, /obj/structure/extinguisher_cabinet{ pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Fore Primary Hallway East"; dir = 1 @@ -9203,7 +8882,6 @@ /turf/open/floor/plasteel, /area/quartermaster/miningdock) "aqv" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /obj/structure/closet/crate, /obj/item/device/flashlight, @@ -9219,7 +8897,6 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/end{ dir = 8 }, @@ -9229,7 +8906,6 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -9239,7 +8915,6 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/end{ dir = 4 }, @@ -9288,8 +8963,6 @@ /area/engine/atmos) "aqG" = ( /obj/structure/door_assembly/door_assembly_mhatch, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -9310,8 +8983,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/security/brig) "aqJ" = ( @@ -9352,7 +9025,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/security/brig) "aqN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, @@ -9423,7 +9098,6 @@ /obj/item/storage/belt/utility, /obj/item/weldingtool, /obj/item/clothing/head/welding, -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ dir = 8; name = "Primary Tool Storage APC"; @@ -9468,7 +9142,6 @@ /area/storage/primary) "aqW" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /obj/structure/extinguisher_cabinet{ pixel_y = 26 @@ -9485,7 +9158,6 @@ /turf/open/floor/plasteel, /area/storage/primary) "aqY" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port/central) @@ -9494,8 +9166,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/yellow/side{ - dir = 4 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, /area/maintenance/port/central) "ara" = ( @@ -9560,18 +9233,14 @@ /turf/open/floor/plating, /area/crew_quarters/bar/atrium) "arg" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, /area/maintenance/starboard/central) "arh" = ( /obj/structure/girder, @@ -9583,10 +9252,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 - }, +/turf/open/floor/plasteel/stairs/left, /area/hallway/primary/central) "arj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -9716,7 +9382,6 @@ pixel_y = 9 }, /obj/structure/closet/crate/internals, -/obj/effect/decal/cleanable/dirt, /obj/item/pickaxe/emergency, /obj/item/pickaxe/emergency, /obj/effect/turf_decal/delivery, @@ -9741,7 +9406,6 @@ /area/shuttle/mining) "arp" = ( /obj/structure/ore_box, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /obj/machinery/light/small{ dir = 4 @@ -9759,6 +9423,9 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/vault, /area/engine/atmos) "ars" = ( @@ -9769,7 +9436,7 @@ /obj/structure/sign/fire{ pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -9778,8 +9445,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -9804,7 +9469,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -9815,8 +9479,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Atmospherics Tank 4"; network = list("thunder"); @@ -9837,7 +9499,7 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/green/side{ dir = 1 }, @@ -9855,7 +9517,6 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/atmos) @@ -9866,8 +9527,6 @@ /obj/structure/sign/nosmoking_2{ pixel_x = 32 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) @@ -9889,8 +9548,8 @@ dir = 1 }, /obj/structure/closet/l3closet/security, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/security/brig) "arE" = ( @@ -9919,7 +9578,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Gear Room"; req_access_txt = "63" }, @@ -9998,7 +9657,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Desk"; req_access_txt = "63" }, @@ -10097,7 +9756,6 @@ /turf/open/floor/plating, /area/storage/primary) "arQ" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -10118,14 +9776,12 @@ }, /area/storage/primary) "arT" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/yellow/side{ dir = 5 }, /area/storage/primary) "arU" = ( /obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = 26 @@ -10140,12 +9796,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel/yellow/side{ - dir = 4 - }, +/turf/open/floor/plating, /area/maintenance/port/central) "arW" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -10162,7 +9815,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "arX" = ( /obj/structure/cable/white{ @@ -10195,18 +9848,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port/central) -"asa" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, /area/maintenance/port/central) "asb" = ( @@ -10225,7 +9869,6 @@ /turf/open/floor/plating, /area/maintenance/port/central) "asc" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-8" }, @@ -10245,8 +9888,8 @@ dir = 4; network = list("MINE") }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "ase" = ( @@ -10276,11 +9919,11 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) "asj" = ( -/obj/machinery/vending/cola, +/obj/machinery/vending/cola/random, /obj/machinery/newscaster{ pixel_x = 32 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/crew_quarters/bar/atrium) @@ -10298,38 +9941,19 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard/central) -"asm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/maintenance/starboard/central) -"asn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aso" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard/central) "asp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -10340,38 +9964,42 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/central) -"asq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard/central) "asr" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/loading_area{ dir = 4 }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/airalarm{ + pixel_y = 24 + }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "ass" = ( /obj/machinery/mineral/mint, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/end, /obj/structure/sign/poster/official/random{ pixel_y = 32 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "ast" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/loading_area, +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard"; + dir = 1; + name = "Starboard Maintenance APC"; + pixel_y = 26 + }, +/obj/structure/cable/white{ + icon_state = "0-2" + }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "asu" = ( /obj/structure/shuttle/engine/propulsion/burst, /obj/structure/window/reinforced{ @@ -10401,15 +10029,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"asy" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/engine/atmos) "asz" = ( /obj/machinery/atmospherics/components/trinary/filter{ dir = 2; @@ -10424,20 +10043,12 @@ dir = 1; pixel_y = 1 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/red/side{ dir = 9 }, /area/engine/atmos) -"asA" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "asB" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "asC" = ( @@ -10466,7 +10077,6 @@ /obj/machinery/atmospherics/pipe/manifold/green/visible{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "asF" = ( @@ -10475,7 +10085,6 @@ dir = 8; name = "Air to Mix" }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "asG" = ( @@ -10483,20 +10092,17 @@ dir = 2 }, /obj/machinery/meter, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "asH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/caution{ dir = 4 }, /area/engine/atmos) "asI" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/vacuum{ pixel_x = -32 }, @@ -10514,8 +10120,8 @@ /obj/structure/reagent_dispensers/peppertank{ pixel_y = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 1 +/turf/open/floor/plasteel/vault/corner{ + dir = 4 }, /area/security/brig) "asK" = ( @@ -10551,8 +10157,8 @@ dir = 1; name = "security camera" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/security/brig) "asL" = ( @@ -10561,8 +10167,8 @@ dir = 1; pixel_y = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 4 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/security/brig) "asM" = ( @@ -10595,7 +10201,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/security/brig) "asP" = ( /obj/structure/table/reinforced, @@ -10614,7 +10222,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/security/brig) "asQ" = ( /obj/structure/table/reinforced, @@ -10627,7 +10237,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/security/brig) "asR" = ( /obj/machinery/computer/security{ @@ -10649,8 +10261,8 @@ dir = 1; name = "security camera" }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/security/brig) "asS" = ( @@ -10667,8 +10279,8 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/security/brig) "asT" = ( @@ -10687,7 +10299,7 @@ /area/hallway/primary/central) "asU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -10723,7 +10335,6 @@ /obj/structure/table/reinforced, /obj/item/stack/packageWrap, /obj/item/hand_labeler, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10754,8 +10365,6 @@ }, /area/storage/primary) "asZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -10766,15 +10375,15 @@ /turf/open/floor/plasteel, /area/storage/primary) "atb" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/open/floor/plasteel/yellow/side{ - dir = 4 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, /area/maintenance/port/central) "atc" = ( @@ -10782,12 +10391,14 @@ /turf/closed/wall, /area/maintenance/port/central) "atd" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/central) "ate" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -10806,7 +10417,6 @@ name = "Theatre Backstage"; req_access_txt = "46" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" @@ -10833,22 +10443,21 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 6 }, /area/crew_quarters/bar/atrium) "atj" = ( /obj/machinery/vending/coffee, /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, /obj/machinery/light{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 10 }, /area/crew_quarters/bar/atrium) "atl" = ( @@ -10874,8 +10483,9 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, /area/maintenance/starboard/central) "atp" = ( @@ -10891,7 +10501,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -10902,43 +10511,11 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"atr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/cable/white{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hallway/primary/central) -"ats" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, -/area/hallway/primary/central) -"att" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"atv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/landmark/xeno_spawn, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "atw" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/machinery/light/small{ @@ -10981,6 +10558,7 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/red/side{ dir = 8 }, @@ -10993,18 +10571,9 @@ /area/engine/atmos) "atC" = ( /obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) -"atD" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "atE" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 5 @@ -11019,11 +10588,6 @@ }, /turf/open/floor/plasteel/neutral, /area/engine/atmos) -"atG" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral, -/area/engine/atmos) "atH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -11046,7 +10610,6 @@ /obj/structure/cable/white{ icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11058,18 +10621,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/closed/wall/r_wall, +/turf/closed/wall/r_wall/rust, /area/engine/atmos) "atK" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /obj/structure/sign/poster/contraband/random{ pixel_x = 32 }, -/turf/open/floor/plasteel/caution/corner{ - dir = 1 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, /area/maintenance/port/fore) "atL" = ( @@ -11080,7 +10643,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -11115,7 +10677,7 @@ /area/hallway/primary/central) "atO" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Primary Tool Storage"; req_access_txt = "0" }, @@ -11241,7 +10803,6 @@ pixel_y = 9 }, /obj/structure/closet/crate/internals, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11249,11 +10810,9 @@ /turf/open/floor/plasteel, /area/storage/primary) "atU" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -11261,13 +10820,10 @@ /turf/open/floor/plasteel, /area/storage/primary) "atV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "atW" = ( /obj/effect/landmark/blobstart, @@ -11278,7 +10834,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating, /area/maintenance/port/central) "atX" = ( /obj/structure/table/wood, @@ -11298,14 +10854,17 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "atZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken6" + }, /area/crew_quarters/theatre) "aua" = ( /obj/structure/window/reinforced{ @@ -11320,12 +10879,12 @@ pixel_y = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "aub" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "auc" = ( @@ -11437,7 +10996,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/starboard/central) "auo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11478,15 +11040,6 @@ }, /turf/closed/wall/r_wall, /area/engine/atmos) -"aus" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, -/area/engine/atmos) "aut" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ @@ -11498,7 +11051,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/red/side{ dir = 10 }, @@ -11551,7 +11104,6 @@ name = "Mix to Distro"; on = 0 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "auB" = ( @@ -11582,7 +11134,6 @@ "auE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/space_heater, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -11601,7 +11152,6 @@ /area/maintenance/port/fore) "auG" = ( /obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -11611,23 +11161,23 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/red/corner, +/turf/open/floor/plating, /area/maintenance/port/fore) "auI" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/fore) "auJ" = ( /obj/structure/cable/white{ @@ -11639,20 +11189,20 @@ /obj/effect/decal/cleanable/blood/splatter, /obj/effect/landmark/revenantspawn, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/port/fore) "auK" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/port/fore) "auL" = ( /obj/effect/landmark/blobstart, @@ -11665,13 +11215,15 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/turf/open/floor/plasteel/red/corner, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/fore) "auM" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -11694,8 +11246,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/hallway/primary/central) "auO" = ( @@ -11765,7 +11318,6 @@ }, /area/hallway/primary/central) "auT" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/yellow/side{ dir = 10 }, @@ -11781,7 +11333,6 @@ /turf/open/floor/plasteel/yellow/side, /area/storage/primary) "auW" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/yellow/side{ dir = 6 @@ -11797,8 +11348,10 @@ /turf/open/floor/plasteel, /area/storage/primary) "auY" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/central) "auZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -11837,14 +11390,14 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "ave" = ( /obj/structure/table/wood, /obj/item/clothing/head/fedora, /obj/item/clothing/mask/cigarette/pipe, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "avf" = ( @@ -11962,12 +11515,14 @@ /turf/closed/wall, /area/crew_quarters/bar/atrium) "avs" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/maintenance/starboard/central) "avt" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -11990,17 +11545,18 @@ /area/hallway/primary/central) "avv" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/hallway/primary/central) +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) "avw" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "avx" = ( /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/cyan/visible, @@ -12013,7 +11569,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -12024,6 +11579,7 @@ dir = 4; name = "N2 to Pure" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -12032,7 +11588,6 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 10 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -12057,7 +11612,6 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 6 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "avE" = ( @@ -12103,12 +11657,13 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/open/floor/plasteel/caution, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/port/fore) "avJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -12118,13 +11673,15 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/caution, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/fore) "avK" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -12144,7 +11701,6 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12163,14 +11719,16 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/maintenance/port/fore) "avN" = ( /obj/structure/girder, @@ -12185,14 +11743,16 @@ /obj/item/crowbar/red, /obj/item/wrench, /obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, /turf/open/floor/plasteel, /area/maintenance/port/fore) "avP" = ( @@ -12203,8 +11763,6 @@ /obj/item/clothing/shoes/jackboots, /obj/item/device/radio, /obj/item/storage/secure/briefcase, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -12219,7 +11777,6 @@ /obj/structure/table, /obj/item/clothing/under/rank/security, /obj/item/restraints/handcuffs, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -12244,8 +11801,9 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/hallway/primary/central) "avT" = ( @@ -12300,7 +11858,6 @@ /obj/item/stock_parts/cell/high, /obj/item/stock_parts/cell/high, /obj/machinery/cell_charger, -/obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -12314,8 +11871,6 @@ /area/storage/primary) "avZ" = ( /obj/machinery/vending/tool, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/status_display{ pixel_y = -32 }, @@ -12340,7 +11895,6 @@ /obj/item/stack/sheet/glass{ amount = 30 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/storage/primary) @@ -12354,7 +11908,6 @@ pixel_y = 3 }, /obj/item/stack/cable_coil/white, -/obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ pixel_x = 32 }, @@ -12363,7 +11916,6 @@ /area/storage/primary) "awd" = ( /obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -12396,14 +11948,17 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken" + }, /area/crew_quarters/theatre) "awj" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "awk" = ( @@ -12528,7 +12083,6 @@ }, /area/crew_quarters/bar/atrium) "aww" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Bar Maintenance"; req_access_txt = "25" @@ -12546,7 +12100,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "awx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -12576,14 +12130,11 @@ }, /area/hallway/primary/central) "awz" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "awA" = ( /turf/open/floor/engine/o2, /area/engine/atmos) @@ -12617,6 +12168,7 @@ dir = 1; pixel_y = 1 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/blue/side{ dir = 9 }, @@ -12644,11 +12196,9 @@ name = "Mix to Filter"; on = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "awI" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, @@ -12713,7 +12263,6 @@ /turf/open/floor/plasteel, /area/maintenance/port/fore) "awN" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/plasticflaps{ opacity = 1 }, @@ -12869,21 +12418,21 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "axf" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/maintenance/starboard) "axg" = ( /obj/structure/rack, -/obj/item/crowbar/red, -/obj/item/wrench, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/hallway/primary/central) +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/item/wrench, +/obj/item/wirecutters, +/turf/open/floor/plasteel, +/area/maintenance/starboard) "axh" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light/small{ @@ -12899,7 +12448,6 @@ /turf/open/floor/engine/o2, /area/engine/atmos) "axj" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Atmospherics Tank 2"; dir = 4; @@ -12922,15 +12470,11 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/blue/side{ dir = 8 }, /area/engine/atmos) -"axl" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral, -/area/engine/atmos) "axm" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 8; @@ -12951,7 +12495,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 2 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "axp" = ( @@ -12975,7 +12518,6 @@ /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -12986,7 +12528,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -13000,7 +12541,6 @@ pixel_x = 24; pixel_y = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, @@ -13032,13 +12572,11 @@ /area/engine/atmos) "axw" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) "axx" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) @@ -13046,11 +12584,12 @@ /obj/item/weldingtool, /obj/item/clothing/head/welding, /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, /obj/machinery/status_display{ pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/caution{ dir = 9 }, @@ -13086,7 +12625,6 @@ pixel_x = 26; pixel_y = 26 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/caution{ dir = 5 }, @@ -13099,9 +12637,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plasteel/stairs/left, /area/hallway/primary/central) "axC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -13117,30 +12653,34 @@ name = "Station Intercom"; pixel_x = -26 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/crew_quarters/dorms) "axE" = ( -/obj/structure/closet/secure_closet/personal, /obj/machinery/status_display{ pixel_y = 32 }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/wardrobe/white, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/crew_quarters/dorms) "axF" = ( -/obj/structure/closet/secure_closet/personal, /obj/machinery/light_switch{ pixel_y = 24 }, +/obj/effect/turf_decal/bot, +/obj/structure/closet/wardrobe/grey, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/crew_quarters/dorms) "axG" = ( -/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/bot, +/obj/structure/closet/wardrobe/black, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -13186,13 +12726,6 @@ }, /turf/open/floor/carpet, /area/crew_quarters/dorms) -"axL" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port/central) "axM" = ( /obj/structure/table/wood, /obj/item/lipstick/random{ @@ -13288,14 +12821,6 @@ dir = 8 }, /area/crew_quarters/bar/atrium) -"axU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard/central) "axV" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/newscaster{ @@ -13349,6 +12874,7 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/blue/side{ dir = 10 }, @@ -13372,7 +12898,6 @@ on = 1; target_pressure = 4500 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "ayf" = ( @@ -13382,7 +12907,6 @@ name = "waste filter"; on = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, @@ -13436,7 +12960,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -13450,7 +12973,6 @@ dir = 4; pixel_x = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -13462,7 +12984,6 @@ dir = 8; pixel_x = -24 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/engine/atmos) @@ -13483,9 +13004,11 @@ /area/engine/atmos) "ayq" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, /obj/item/paper_bin, /obj/item/pen, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -13497,7 +13020,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/caution{ dir = 4 }, @@ -13569,7 +13091,6 @@ name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_y = -25; - req_access_txt = "0"; specialfunctions = 4 }, /turf/open/floor/plasteel/grimy, @@ -13588,20 +13109,10 @@ name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_y = -25; - req_access_txt = "0"; specialfunctions = 4 }, /turf/open/floor/carpet, /area/crew_quarters/dorms) -"ayD" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/maintenance/port/central) "ayE" = ( /obj/structure/table/wood, /obj/item/device/instrument/violin, @@ -13631,7 +13142,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "ayI" = ( /obj/structure/table/wood, @@ -13644,8 +13155,8 @@ dir = 4; network = list("MINE") }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "ayJ" = ( @@ -13700,7 +13211,6 @@ /area/maintenance/starboard/central) "ayQ" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -13711,8 +13221,6 @@ /obj/item/clothing/suit/fire/firefighter, /obj/item/clothing/mask/gas, /obj/item/clothing/head/hardhat/red, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 1 }, @@ -13753,7 +13261,9 @@ "ayV" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "ayW" = ( /obj/structure/table/reinforced, @@ -13896,7 +13406,7 @@ dir = 4; name = "O2 to Pure" }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -13918,13 +13428,6 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/neutral, /area/engine/atmos) -"azn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral, -/area/engine/atmos) "azo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -13951,7 +13454,6 @@ /turf/open/floor/plasteel/neutral, /area/engine/atmos) "azr" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -14017,6 +13519,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, /turf/open/floor/plasteel/caution{ dir = 8 }, @@ -14094,7 +13599,10 @@ pixel_y = -22 }, /obj/machinery/light, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken5" + }, /area/crew_quarters/theatre) "azG" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -14103,7 +13611,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "azH" = ( /obj/machinery/door/window/eastright{ @@ -14118,14 +13626,14 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "azI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/bar/atrium) "azJ" = ( @@ -14163,40 +13671,38 @@ /turf/closed/wall, /area/maintenance/starboard/central) "azN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "azO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plating, /area/maintenance/starboard/central) "azP" = ( /obj/effect/landmark/blobstart, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/side, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/starboard/central) "azQ" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/turf/open/floor/plasteel, /area/maintenance/starboard/central) "azR" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -14207,7 +13713,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "azS" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -14221,8 +13726,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) +/turf/open/floor/plating, +/area/maintenance/starboard/central) "azT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -14233,9 +13738,13 @@ }, /area/hallway/primary/central) "azU" = ( -/obj/structure/closet/crate/bin, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "azV" = ( /obj/structure/table/reinforced, @@ -14352,7 +13861,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -14369,7 +13877,7 @@ dir = 1; pixel_y = 1 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/arrival{ dir = 9 }, @@ -14378,7 +13886,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 9 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/neutral, /area/engine/atmos) "aAn" = ( @@ -14592,6 +14099,7 @@ dir = 8; network = list("SS13") }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/arrival{ dir = 4 }, @@ -14619,7 +14127,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/crew_quarters/theatre) "aAN" = ( /obj/machinery/power/apc{ @@ -14713,18 +14221,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard/central) -"aAU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aAV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -14736,13 +14233,12 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/turf/open/floor/plasteel/neutral/side{ - dir = 1; - heat_capacity = 1e+006 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, /area/maintenance/starboard/central) "aAW" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -14750,10 +14246,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aAX" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, @@ -14794,8 +14287,9 @@ /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "aBb" = ( -/obj/machinery/vending/cola, -/turf/open/floor/plasteel/vault{ +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/hallway/primary/central) @@ -14846,14 +14340,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"aBi" = ( -/obj/structure/fans/tiny, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aBj" = ( @@ -14933,6 +14419,8 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced, /turf/open/floor/plasteel/arrival{ dir = 8 }, @@ -15040,7 +14528,6 @@ dir = 4 }, /obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/caution{ dir = 10 }, @@ -15204,6 +14691,7 @@ /area/crew_quarters/dorms) "aBT" = ( /obj/machinery/washing_machine, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/arrival{ dir = 4 }, @@ -15232,12 +14720,15 @@ /obj/machinery/camera{ c_tag = "Theatre Storage" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/theatre) "aBW" = ( -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken7" + }, /area/crew_quarters/theatre) "aBX" = ( /obj/machinery/vending/autodrobe, @@ -15326,13 +14817,13 @@ }, /area/hallway/primary/central) "aCh" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack/random, /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, -/turf/open/floor/plasteel/vault{ +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/hallway/primary/central) @@ -15386,10 +14877,6 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/machinery/door/airlock/glass_security{ - name = "Holding Area"; - req_access_txt = "2" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" @@ -15400,6 +14887,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock/security/glass{ + name = "Security Checkpoint"; + req_access_txt = "63" + }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aCm" = ( @@ -15415,7 +14906,7 @@ /turf/open/floor/plating, /area/hallway/secondary/exit) "aCo" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, @@ -15426,7 +14917,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "aCq" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Cockpit"; req_access_txt = "19" }, @@ -15462,9 +14953,8 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/engine/atmos) "aCu" = ( @@ -15475,16 +14965,17 @@ /obj/structure/sign/fire{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 8 +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/engine/atmos) "aCv" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/machinery/meter, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCw" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -15495,7 +14986,9 @@ pixel_y = -32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCx" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -15505,19 +14998,20 @@ /obj/structure/fireaxecabinet{ pixel_y = -28 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCy" = ( /obj/machinery/atmospherics/pipe/simple/yellow/visible{ dir = 9 }, /obj/structure/closet/secure_closet/atmospherics, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCz" = ( /obj/structure/table/reinforced, @@ -15533,7 +15027,6 @@ pixel_y = -22 }, /obj/machinery/light, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -15554,8 +15047,6 @@ /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/arrival, /area/engine/atmos) "aCC" = ( @@ -15567,7 +15058,6 @@ dir = 1; pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/escape, /area/engine/atmos) "aCD" = ( @@ -15575,8 +15065,9 @@ dir = 1 }, /obj/machinery/portable_atmospherics/scrubber, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/escape, /area/engine/atmos) "aCE" = ( @@ -15587,7 +15078,9 @@ icon_state = "1-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCF" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -15601,7 +15094,9 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/engine/atmos) "aCG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -15629,7 +15124,7 @@ name = "Atmospherics Lockdown Blast door" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Desk"; req_access_txt = "24" }, @@ -15730,8 +15225,8 @@ /obj/structure/sign/poster/contraband/clown{ pixel_x = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/theatre) "aCQ" = ( @@ -15739,7 +15234,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "aCR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -15749,7 +15244,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "aCS" = ( /obj/structure/dresser, @@ -15789,11 +15284,11 @@ c_tag = "Kitchen"; dir = 2 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aCW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aCX" = ( /obj/structure/sink/kitchen{ @@ -15801,7 +15296,7 @@ name = "sink"; pixel_y = 28 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aCY" = ( /obj/structure/closet/secure_closet/freezer/fridge, @@ -15814,14 +15309,14 @@ name = "Kitchen RC"; pixel_y = 32 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aCZ" = ( /obj/structure/closet/secure_closet/freezer/fridge, /obj/machinery/newscaster{ pixel_y = 32 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aDa" = ( /obj/structure/table/reinforced, @@ -15835,18 +15330,15 @@ /obj/structure/sign/nanotrasen{ pixel_x = 32 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/crew_quarters/kitchen) "aDb" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aDc" = ( /obj/machinery/status_display, @@ -15879,6 +15371,9 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/escape{ dir = 1 }, @@ -15894,9 +15389,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aDj" = ( @@ -16015,7 +15507,6 @@ dir = 4 }, /obj/machinery/portable_atmospherics/scrubber, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/escape{ dir = 8 }, @@ -16105,7 +15596,6 @@ name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_y = 25; - req_access_txt = "0"; specialfunctions = 4 }, /turf/open/floor/wood, @@ -16121,7 +15611,6 @@ name = "Cabin Bolt Control"; normaldoorcontrol = 1; pixel_y = 25; - req_access_txt = "0"; specialfunctions = 4 }, /turf/open/floor/plasteel/grimy, @@ -16140,13 +15629,13 @@ /obj/structure/mirror{ pixel_x = -28 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/crew_quarters/theatre) "aDK" = ( /obj/effect/landmark/start/mime, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/crew_quarters/theatre) "aDL" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -16155,7 +15644,10 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken5" + }, /area/crew_quarters/theatre) "aDM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -16327,6 +15819,9 @@ /area/hallway/secondary/exit) "aEe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "aEf" = ( @@ -16461,8 +15956,6 @@ /area/shuttle/escape) "aEn" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/nosmoking_2{ pixel_y = 32 }, @@ -16476,24 +15969,22 @@ network = list("SS13") }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/engine/engineering) "aEo" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/engine/engineering) "aEp" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/plasteel, /area/engine/engineering) "aEq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -16502,14 +15993,15 @@ /area/engine/engineering) "aEr" = ( /obj/machinery/portable_atmospherics/canister/toxins, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/engine/engineering) "aEs" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/engine/engineering) "aEt" = ( /turf/closed/wall/r_wall, @@ -16530,7 +16022,8 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/plasteel/vault, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side, /area/engine/engineering) "aEv" = ( /obj/structure/cable/white{ @@ -16562,7 +16055,6 @@ /area/engine/engineering) "aEx" = ( /obj/structure/closet/radiation, -/obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/meson, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -16573,7 +16065,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aEy" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -16587,7 +16078,6 @@ "aEz" = ( /obj/machinery/shower{ dir = 8; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -16688,6 +16178,7 @@ dir = 8; pixel_x = -24 }, +/obj/effect/turf_decal/bot, /obj/structure/closet/crate/bin, /turf/open/floor/plasteel/vault{ dir = 5 @@ -16697,12 +16188,14 @@ /obj/machinery/status_display{ pixel_y = -32 }, +/obj/effect/turf_decal/bot, /obj/machinery/vending/kink, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/crew_quarters/dorms) "aEM" = ( +/obj/effect/turf_decal/bot, /obj/machinery/vending/clothing, /turf/open/floor/plasteel/vault{ dir = 5 @@ -16720,6 +16213,7 @@ dir = 8; network = list("SS13") }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -16745,6 +16239,7 @@ pixel_y = -32 }, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken7" }, /area/crew_quarters/dorms) @@ -16777,8 +16272,8 @@ /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/corner{ + dir = 4 }, /area/crew_quarters/theatre) "aET" = ( @@ -16791,8 +16286,8 @@ name = "Station Intercom"; pixel_y = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/theatre) "aEU" = ( @@ -16803,8 +16298,8 @@ pixel_y = -32 }, /obj/structure/closet/crate/wooden/toy, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/theatre) "aEV" = ( @@ -16816,8 +16311,8 @@ dir = 8; pixel_x = 24 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/theatre) "aEW" = ( @@ -16856,6 +16351,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/crew_quarters/kitchen) "aFb" = ( @@ -16871,6 +16367,7 @@ /obj/structure/cable/white{ icon_state = "2-4" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "aFc" = ( @@ -16889,6 +16386,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/white, /area/crew_quarters/kitchen) "aFd" = ( @@ -16897,6 +16395,7 @@ icon_state = "4-8" }, /obj/machinery/deepfryer, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/red, /area/crew_quarters/kitchen) "aFe" = ( @@ -16909,7 +16408,6 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/kitchen) "aFf" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Kitchen Maintenance"; req_access_txt = "28" @@ -16927,7 +16425,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aFg" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -16945,44 +16443,19 @@ /obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard/central) -"aFh" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 - }, -/area/hallway/primary/central) "aFi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"aFj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, +"aFk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"aFk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aFl" = ( @@ -16993,6 +16466,9 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "aFo" = ( @@ -17009,24 +16485,22 @@ /area/shuttle/escape) "aFq" = ( /obj/machinery/power/emitter, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/engine/engineering) "aFr" = ( /obj/machinery/power/emitter, -/obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/engine/engineering) "aFs" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -17039,13 +16513,11 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aFu" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/engine/engineering) "aFv" = ( /obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, /obj/item/crowbar/red, /obj/item/stack/sheet/mineral/plasma{ amount = 20 @@ -17053,13 +16525,14 @@ /obj/item/device/gps/engineering{ gpstag = "ENG0" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/structure/extinguisher_cabinet{ pixel_x = 26 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/engine/engineering) "aFw" = ( /obj/structure/cable/white{ @@ -17068,11 +16541,13 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aFx" = ( @@ -17082,13 +16557,15 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "2-4" }, /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aFy" = ( @@ -17099,7 +16576,6 @@ dir = 4; pixel_x = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ icon_state = "0-8" }, @@ -17111,11 +16587,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 2 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aFz" = ( /obj/structure/closet/radiation, -/obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, @@ -17130,7 +16608,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -17140,10 +16617,8 @@ "aFB" = ( /obj/machinery/shower{ dir = 8; - icon_state = "shower"; name = "emergency shower" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -17279,14 +16754,6 @@ }, /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) -"aFM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port/central) "aFN" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -26 @@ -17374,26 +16841,15 @@ "aFY" = ( /obj/machinery/holopad, /obj/effect/landmark/lightsout, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"aFZ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, /turf/open/floor/plasteel, -/area/hallway/secondary/exit) +/area/hallway/primary/central) "aGa" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/neutral, @@ -17402,6 +16858,9 @@ /obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aGc" = ( @@ -17441,8 +16900,6 @@ id = "engstorage"; name = "Engineering Secure Storage Lockdown" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -17470,7 +16927,7 @@ /area/engine/engineering) "aGk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Power Monitoring"; req_access_txt = "32" }, @@ -17480,8 +16937,6 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -17523,7 +16978,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -17542,7 +16996,6 @@ dir = 4 }, /obj/machinery/portable_atmospherics/pump, -/obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet{ pixel_x = -24 }, @@ -17623,9 +17076,8 @@ /area/maintenance/port/central) "aGz" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/port/central) "aGA" = ( @@ -17635,20 +17087,18 @@ pixel_y = 28 }, /obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/port/central) "aGB" = ( /obj/structure/mopbucket, -/obj/effect/decal/cleanable/dirt, /obj/item/mop, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 1 }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/port/central) "aGC" = ( @@ -17665,12 +17115,9 @@ areastring = "/area/maintenance/port/central"; pixel_y = 25 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/port/central) "aGE" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -17679,28 +17126,19 @@ }, /turf/open/floor/plating, /area/maintenance/port/central) -"aGF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port/central) "aGG" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port/central) "aGH" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -17708,12 +17146,9 @@ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/port/central) "aGI" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -17721,10 +17156,10 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" }, -/turf/open/floor/plasteel, /area/maintenance/port/central) "aGJ" = ( /obj/structure/cable/white{ @@ -17733,11 +17168,10 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aGK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -17746,35 +17180,31 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, -/turf/open/floor/plasteel, /area/maintenance/port/central) "aGL" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/turf/open/floor/plasteel, /area/maintenance/port/central) "aGM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aGN" = ( /obj/structure/chair/stool, @@ -17841,25 +17271,28 @@ dir = 1; pixel_y = -32 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/turf/open/floor/plasteel/escape, /area/crew_quarters/kitchen) "aGS" = ( /obj/machinery/processor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/end{ - dir = 1 +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/escape, /area/crew_quarters/kitchen) "aGT" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/kitchen) "aGU" = ( @@ -17874,8 +17307,8 @@ /obj/item/storage/box/donkpockets, /obj/item/clothing/head/chefhat, /obj/machinery/light, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/kitchen) "aGV" = ( @@ -17889,8 +17322,8 @@ dir = 1; pixel_y = -22 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/kitchen) "aGW" = ( @@ -17900,8 +17333,8 @@ pixel_x = -3; pixel_y = 5 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 1 }, /area/crew_quarters/kitchen) "aGX" = ( @@ -17918,13 +17351,6 @@ dir = 1 }, /area/engine/gravity_generator) -"aHf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/engine/gravity_generator) "aHg" = ( /obj/machinery/camera{ c_tag = "Gravity Generator Room"; @@ -17959,33 +17385,31 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHj" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHk" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHl" = ( /obj/structure/cable/white{ @@ -17997,7 +17421,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHm" = ( /obj/structure/cable/white{ @@ -18013,7 +17437,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHn" = ( /obj/structure/cable/white{ @@ -18034,7 +17458,7 @@ network = list("SS13","Engine"); pixel_x = 23 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHo" = ( /obj/structure/cable/white{ @@ -18043,12 +17467,11 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHp" = ( /obj/structure/cable{ @@ -18063,7 +17486,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHq" = ( /obj/structure/cable/white{ @@ -18081,7 +17504,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aHr" = ( /obj/structure/cable/white{ @@ -18090,26 +17513,13 @@ /obj/machinery/firealarm{ pixel_y = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/engineering) -"aHs" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/caution{ - dir = 1 - }, +/turf/open/floor/engine, /area/engine/engineering) "aHt" = ( /obj/structure/cable/white{ @@ -18118,14 +17528,13 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/caution{ +/obj/effect/turf_decal/stripes/line{ dir = 1 }, +/turf/open/floor/engine, /area/engine/engineering) "aHu" = ( /obj/structure/cable/white{ @@ -18134,13 +17543,13 @@ /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/caution{ +/obj/effect/turf_decal/stripes/line{ dir = 5 }, +/turf/open/floor/engine, /area/engine/engineering) "aHv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -18184,7 +17593,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 2 }, @@ -18278,7 +17686,6 @@ /turf/open/floor/plasteel/neutral/corner, /area/hallway/primary/central) "aHE" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -18286,10 +17693,11 @@ icon_state = "4-8" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "aHF" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -18306,22 +17714,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/port/central) -"aHG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aHH" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -18334,36 +17729,19 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/turf/open/floor/plasteel, /area/maintenance/port/central) "aHI" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/central) -"aHJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aHK" = ( /obj/effect/landmark/blobstart, @@ -18388,7 +17766,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating, /area/maintenance/port/central) "aHM" = ( /turf/closed/wall, @@ -18404,7 +17782,6 @@ name = "Hydroponic's Maintenance"; req_access_txt = "35" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -18418,7 +17795,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aHP" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -18487,19 +17864,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) -"aHX" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard/central) "aHY" = ( /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "aHZ" = ( /obj/item/twohanded/required/kirbyplants{ @@ -18549,19 +17921,18 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIg" = ( /obj/structure/cable{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/corner, /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, /obj/machinery/meter, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIh" = ( /obj/structure/cable{ @@ -18571,7 +17942,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIi" = ( /obj/structure/cable{ @@ -18581,13 +17952,12 @@ /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIj" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, @@ -18595,7 +17965,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIk" = ( /obj/structure/cable{ @@ -18605,12 +17975,11 @@ dir = 1; pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/manifold/green/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIl" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -18622,7 +17991,7 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIm" = ( /obj/machinery/button/door{ @@ -18641,13 +18010,12 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIn" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, @@ -18655,7 +18023,7 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIo" = ( /obj/structure/cable{ @@ -18665,7 +18033,7 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIp" = ( /obj/structure/cable{ @@ -18676,7 +18044,7 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIq" = ( /obj/structure/cable{ @@ -18688,18 +18056,17 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIr" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aIs" = ( /obj/structure/table/reinforced, @@ -18709,7 +18076,6 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Engineering Monitoring"; dir = 2; @@ -18730,14 +18096,12 @@ pixel_y = 24 }, /obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/engineering) "aIv" = ( /obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, /obj/item/paper_bin, /obj/item/pen, /obj/effect/turf_decal/bot, @@ -18824,31 +18188,33 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aID" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/janitor) "aIE" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 3; name = "3maintenance loot spawner" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, /turf/open/floor/plasteel, /area/maintenance/port/central) "aIF" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/port/central) "aIG" = ( /obj/item/crowbar/red, @@ -18863,22 +18229,20 @@ /obj/item/reagent_containers/glass/bucket, /obj/structure/closet/crate/hydroponics, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aIH" = ( /obj/structure/sink{ dir = 4; pixel_x = 12 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aII" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/airalarm{ pixel_y = 23 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -18911,8 +18275,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aIM" = ( /obj/machinery/chem_master/condimaster{ @@ -18926,7 +18289,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aIN" = ( /obj/machinery/vending/hydronutrients, @@ -18934,7 +18297,7 @@ pixel_y = 30 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aIO" = ( /obj/machinery/vending/hydroseeds, @@ -18950,7 +18313,7 @@ req_access_txt = "35" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/hydroponics) "aIP" = ( /obj/structure/table/reinforced, @@ -18969,19 +18332,20 @@ pixel_x = 32 }, /obj/structure/closet/crate/bin, -/turf/open/floor/plasteel/bar, +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, /area/crew_quarters/bar/atrium) "aIR" = ( /obj/structure/closet/secure_closet/freezer/meat, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/kitchen) "aIS" = ( /obj/structure/closet/chefcloset, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/kitchen) "aIT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -18993,8 +18357,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/kitchen) "aIU" = ( /obj/structure/sink/kitchen{ @@ -19028,10 +18391,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, /obj/structure/reagent_dispensers/cooking_oil, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aIX" = ( @@ -19117,7 +18478,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot_white/left, /turf/open/floor/plasteel/vault{ dir = 4 @@ -19145,7 +18505,6 @@ pixel_x = -24; pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/machinery/camera{ c_tag = "Gravity Generator Entry"; @@ -19193,7 +18552,6 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aJn" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/power/smes{ charge = 5e+006 @@ -19227,7 +18585,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aJq" = ( /obj/structure/cable{ @@ -19237,7 +18595,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aJr" = ( /obj/item/wrench, @@ -19245,7 +18603,7 @@ dir = 6 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aJs" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ @@ -19253,7 +18611,7 @@ }, /obj/machinery/meter, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aJt" = ( /obj/structure/sign/radiation, @@ -19263,43 +18621,23 @@ /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/closed/wall/r_wall, /area/engine/supermatter) -"aJv" = ( -/obj/machinery/door/airlock/glass_atmos{ - name = "Supermatter Chamber"; - req_access_txt = "24" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/engine/supermatter) "aJw" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "External Gas to Loop" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/engine/engineering) -"aJx" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "External Gas to Loop" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aJy" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aJz" = ( /obj/structure/cable/white{ @@ -19311,7 +18649,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aJA" = ( /obj/effect/spawner/structure/window/reinforced, @@ -19341,6 +18679,9 @@ /obj/item/grenade/chem_grenade/smart_metal_foam, /obj/item/grenade/chem_grenade/smart_metal_foam, /obj/item/crowbar, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/yellow/side{ dir = 8 }, @@ -19352,6 +18693,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aJD" = ( @@ -19359,6 +18703,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "aJE" = ( @@ -19367,6 +18714,9 @@ dir = 4 }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/engineering) "aJF" = ( @@ -19374,6 +18724,9 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "aJG" = ( @@ -19381,6 +18734,9 @@ dir = 4 }, /obj/effect/landmark/start/station_engineer, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aJH" = ( @@ -19390,6 +18746,7 @@ /obj/machinery/computer/apc_control{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/yellow/side{ dir = 4 }, @@ -19425,11 +18782,12 @@ c_tag = "Custodial Closet" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/janitor) "aJJ" = ( /obj/vehicle/ridden/janicart, -/obj/effect/decal/cleanable/dirt, /obj/item/storage/bag/trash, /obj/item/key/janitor, /obj/machinery/power/apc/highcap/five_k{ @@ -19445,8 +18803,6 @@ /turf/open/floor/plasteel, /area/janitor) "aJK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -19455,16 +18811,16 @@ /area/janitor) "aJL" = ( /obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet{ pixel_y = 26 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/janitor) "aJM" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -19479,7 +18835,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port/central) "aJN" = ( /obj/machinery/seed_extractor, @@ -19560,8 +18916,8 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) "aJX" = ( -/obj/machinery/vending/cola, -/turf/open/floor/plasteel/vault{ +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/crew_quarters/bar/atrium) @@ -19578,8 +18934,7 @@ dir = 4; network = list("MINE") }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/kitchen) "aKa" = ( /obj/machinery/airalarm{ @@ -19633,11 +18988,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/freezer, /area/crew_quarters/kitchen) "aKf" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -19650,12 +19003,17 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard/central) "aKg" = ( /obj/structure/closet/emcloset, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hallway/primary/central) "aKh" = ( /obj/structure/sign/nanotrasen, @@ -19675,11 +19033,9 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aKj" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -19701,7 +19057,7 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/escape) "aKo" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -19724,17 +19080,12 @@ "aKq" = ( /turf/open/floor/plasteel/vault, /area/engine/gravity_generator) -"aKr" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault, -/area/engine/gravity_generator) "aKs" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Gravity Generator Chamber"; req_access_txt = "19; 61" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -19750,8 +19101,6 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aKt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -19765,7 +19114,6 @@ /area/engine/gravity_generator) "aKu" = ( /obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -19778,7 +19126,6 @@ /turf/open/floor/plasteel/neutral, /area/engine/gravity_generator) "aKv" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/structure/cable/white{ icon_state = "1-4" @@ -19789,7 +19136,6 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aKw" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -19839,7 +19185,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aKz" = ( /obj/machinery/portable_atmospherics/scrubber, @@ -19847,7 +19193,7 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aKA" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -19858,21 +19204,13 @@ dir = 4; pixel_x = -23 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/engine, -/area/engine/supermatter) -"aKB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, /area/engine/supermatter) "aKC" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 2; - icon_state = "pump_map"; name = "Gas to Chamber" }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, /area/engine/supermatter) "aKD" = ( @@ -19885,17 +19223,7 @@ }, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/engineering) -"aKF" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aKG" = ( /obj/structure/cable/white{ @@ -19907,7 +19235,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aKH" = ( /obj/machinery/door/firedoor, @@ -19970,7 +19298,6 @@ /obj/item/stack/cable_coil/white, /obj/item/electronics/airlock, /obj/item/electronics/airlock, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -20001,6 +19328,9 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/neutral, /area/engine/engineering) "aKO" = ( @@ -20016,6 +19346,7 @@ /obj/machinery/computer/rdconsole/production{ dir = 8 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/yellow/side{ dir = 4 }, @@ -20034,7 +19365,9 @@ pixel_x = -32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/janitor) "aKQ" = ( /obj/effect/landmark/start/janitor, @@ -20059,7 +19392,6 @@ /area/janitor) "aKS" = ( /obj/structure/janitorialcart, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4 }, @@ -20067,12 +19399,17 @@ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/janitor) "aKT" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, /area/maintenance/port/central) "aKU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -20110,7 +19447,7 @@ }, /obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/neutral, /area/hydroponics) "aKY" = ( /obj/structure/table/glass, @@ -20124,7 +19461,7 @@ /obj/item/reagent_containers/glass/bottle/nutrient/rh, /obj/item/reagent_containers/dropper, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/neutral, /area/hydroponics) "aKZ" = ( /obj/structure/table/glass, @@ -20133,7 +19470,7 @@ /obj/item/grenade/chem_grenade/antiweed, /obj/item/grenade/chem_grenade/antiweed, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/neutral, /area/hydroponics) "aLa" = ( /obj/machinery/holopad, @@ -20142,7 +19479,7 @@ icon_state = "1-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/neutral, /area/hydroponics) "aLb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -20162,7 +19499,9 @@ /obj/item/seeds/wheat, /obj/item/reagent_containers/food/snacks/grown/tomato, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hydroponics) "aLd" = ( /obj/structure/table/glass, @@ -20177,7 +19516,9 @@ }, /obj/item/seeds/tower, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hydroponics) "aLe" = ( /obj/machinery/smartfridge, @@ -20191,16 +19532,15 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) "aLg" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack/random, /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/crew_quarters/bar/atrium) @@ -20216,6 +19556,9 @@ dir = 4 }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aLj" = ( @@ -20227,22 +19570,27 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aLk" = ( /obj/structure/kitchenspike, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, /obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "aLl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/closed/wall, +/turf/closed/wall/rust, /area/crew_quarters/kitchen) "aLm" = ( /obj/structure/extinguisher_cabinet{ @@ -20259,25 +19607,6 @@ dir = 5 }, /area/hallway/secondary/exit) -"aLu" = ( -/obj/structure/fans/tiny, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"aLv" = ( -/obj/machinery/door/airlock/external{ - name = "External Docking Port" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) "aLw" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -20308,7 +19637,6 @@ pixel_y = 3 }, /obj/item/lazarus_injector, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /mob/living/simple_animal/bot/medbot{ name = "\improper emergency medibot"; @@ -20346,8 +19674,6 @@ /turf/open/floor/plasteel/cmo, /area/shuttle/escape) "aLD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/port_gen/pacman, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -20358,7 +19684,6 @@ /obj/machinery/status_display{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -20370,7 +19695,6 @@ /obj/structure/table/reinforced, /obj/item/stack/sheet/plasteel/twenty, /obj/item/wrench, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20402,7 +19726,6 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aLI" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20427,13 +19750,11 @@ /area/engine/gravity_generator) "aLK" = ( /obj/structure/closet/radiation, -/obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/meson, /obj/machinery/airalarm{ dir = 1; pixel_y = -22 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -20455,7 +19776,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -20463,7 +19783,7 @@ dir = 1; filter_type = "n2" }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aLN" = ( /obj/structure/cable{ @@ -20478,7 +19798,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aLO" = ( /obj/machinery/ai_status_display, @@ -20495,10 +19815,10 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, -/turf/closed/wall/r_wall, +/turf/closed/wall/r_wall/rust, /area/engine/supermatter) "aLR" = ( -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Supermatter Chamber"; req_access_txt = "24" }, @@ -20528,13 +19848,12 @@ /obj/machinery/light{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aLW" = ( /obj/structure/cable/white{ @@ -20543,7 +19862,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aLX" = ( /obj/effect/spawner/structure/window/reinforced, @@ -20565,20 +19884,27 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aMc" = ( -/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/yellow, /area/engine/engineering) "aMd" = ( /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /obj/machinery/rnd/circuit_imprinter, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/yellow/side{ dir = 4 }, @@ -20591,14 +19917,13 @@ }, /obj/item/storage/box/lights/mixed, /obj/item/device/lightreplacer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ dir = 4; pixel_x = -23 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/janitor) "aMf" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, @@ -20624,26 +19949,23 @@ pixel_x = 12 }, /obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt, /obj/item/mop, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/janitor) "aMi" = ( /obj/machinery/shieldgen, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plasteel, /area/maintenance/port/central) "aMj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" @@ -20658,7 +19980,6 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -20747,38 +20068,6 @@ }, /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) -"aMv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard/central) -"aMw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard/central) "aMx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -20793,7 +20082,9 @@ icon_state = "plant-22" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "aMz" = ( /obj/item/twohanded/required/kirbyplants{ @@ -20816,7 +20107,6 @@ /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "aMC" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/brown{ dir = 4 }, @@ -20826,7 +20116,6 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /obj/machinery/light{ dir = 8 @@ -20840,7 +20129,6 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aMF" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -20863,14 +20151,12 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/device/radio, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aMH" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; name = "emergency shower" }, /turf/open/floor/plasteel/cmo, @@ -20936,7 +20222,6 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Engineering Port"; dir = 4; @@ -20948,35 +20233,20 @@ /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aMP" = ( /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) -"aMQ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/supermatter) "aMR" = ( /obj/machinery/camera{ c_tag = "Supermatter Chamber"; @@ -21036,20 +20306,6 @@ }, /turf/open/floor/engine, /area/engine/supermatter) -"aMY" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "engsm"; - name = "Radiation Chamber Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plating, -/area/engine/supermatter) "aMZ" = ( /obj/structure/cable{ icon_state = "1-8" @@ -21057,17 +20313,14 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aNa" = ( /obj/machinery/suit_storage_unit/engine, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = -26 @@ -21085,7 +20338,6 @@ /turf/open/floor/plasteel, /area/engine/engineering) "aNb" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/tank_dispenser, /obj/machinery/light, /obj/structure/extinguisher_cabinet{ @@ -21101,7 +20353,6 @@ /obj/machinery/status_display{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, /obj/item/clothing/glasses/meson/engine, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -21118,6 +20369,7 @@ pixel_y = -32 }, /obj/machinery/rnd/protolathe/department/engineering, +/obj/effect/turf_decal/stripes/box, /turf/open/floor/plasteel, /area/engine/engineering) "aNe" = ( @@ -21132,7 +20384,6 @@ /area/engine/engineering) "aNf" = ( /obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ dir = 1; pixel_y = -22 @@ -21145,7 +20396,6 @@ /area/engine/engineering) "aNg" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, @@ -21183,14 +20433,14 @@ "aNj" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ dir = 1; pixel_y = -26 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/janitor) "aNk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -21212,9 +20462,10 @@ /area/janitor) "aNm" = ( /obj/structure/closet/l3closet/janitor, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/janitor) "aNn" = ( /obj/structure/rack, @@ -21222,14 +20473,12 @@ /obj/item/crowbar/red, /obj/item/wrench, /obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/plasteel, /area/maintenance/port/central) "aNo" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/splatter, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ @@ -21248,11 +20497,12 @@ /obj/item/book/manual/hydroponics_pod_people, /obj/item/storage/box/syringes, /obj/item/paper/guides/jobs/hydroponics, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /obj/item/storage/box/disks_plantgene, /obj/item/toy/figure/botanist, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hydroponics) "aNq" = ( /obj/machinery/hydroponics/constructable, @@ -21282,7 +20532,6 @@ pixel_y = -24 }, /obj/machinery/light, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -21290,8 +20539,9 @@ /area/hydroponics) "aNt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hydroponics) "aNu" = ( /obj/structure/closet/crate/bin, @@ -21302,7 +20552,9 @@ network = list("SS13") }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/hydroponics) "aNv" = ( /obj/structure/window/reinforced{ @@ -21353,7 +20605,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar/atrium) "aNA" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -21373,7 +20624,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "aNC" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -21381,10 +20631,12 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/starboard/central) "aND" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -21436,7 +20688,6 @@ /area/hallway/secondary/exit) "aNH" = ( /obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, /obj/machinery/ai_status_display{ pixel_y = -32 }, @@ -21455,7 +20706,6 @@ /area/hallway/secondary/exit) "aNJ" = ( /obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, /obj/machinery/status_display{ pixel_y = -32 }, @@ -21484,13 +20734,11 @@ name = "Station Intercom"; pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) "aNM" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) @@ -21517,7 +20765,6 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/escape) @@ -21619,7 +20866,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/meter, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aNZ" = ( /obj/structure/cable{ @@ -21632,7 +20879,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aOa" = ( /obj/machinery/power/supermatter_shard/crystal/engine, @@ -21647,25 +20894,11 @@ name = "Radiation Chamber Shutters" }, /obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plating, /area/engine/supermatter) -"aOc" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, -/area/engine/engineering) "aOd" = ( /obj/machinery/power/apc{ dir = 4; @@ -21674,11 +20907,10 @@ pixel_x = 26 }, /obj/structure/cable/white, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aOe" = ( /obj/structure/sign/nanotrasen, @@ -21701,30 +20933,13 @@ }, /turf/open/floor/plasteel, /area/janitor) -"aOg" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/port/central) "aOh" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hydroponics) "aOi" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Hydroponics"; req_access_txt = "35" }, @@ -21793,8 +21008,6 @@ /turf/closed/wall, /area/maintenance/starboard/central) "aOu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -21809,7 +21022,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard/central) "aOv" = ( /obj/machinery/computer/message_monitor{ @@ -21858,14 +21071,13 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aOB" = ( /obj/structure/cable{ @@ -21923,12 +21135,11 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aOG" = ( /obj/machinery/firealarm{ @@ -21938,7 +21149,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aOH" = ( /turf/closed/wall/r_wall, @@ -21953,28 +21164,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/port) -"aOJ" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port) -"aOK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "aOL" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -21982,13 +21171,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/turf/open/floor/plasteel, /area/maintenance/port) "aOM" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -21996,13 +21184,11 @@ icon_state = "4-8" }, /obj/effect/turf_decal/stripes/line{ - dir = 2 + dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "aON" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -22022,7 +21208,6 @@ /turf/open/floor/plasteel, /area/maintenance/port) "aOO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -22032,6 +21217,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -22495,21 +21681,22 @@ /obj/structure/table, /obj/item/storage/briefcase, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "aPz" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aPA" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/table/wood, /obj/item/storage/secure/briefcase, /obj/item/restraints/handcuffs, /obj/item/grenade/smokebomb, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aPB" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/suit/jacket{ @@ -22530,11 +21717,11 @@ dir = 1 }, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aPC" = ( /obj/structure/dresser, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aPD" = ( /turf/closed/wall/mineral/plastitanium, /area/shuttle/escape) @@ -22546,15 +21733,6 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/escape) -"aPF" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/shuttle/engine/heater, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plating/airless, -/area/shuttle/escape) "aPG" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -22566,14 +21744,13 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aPJ" = ( /obj/machinery/light{ @@ -22585,7 +21762,7 @@ /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aPK" = ( /obj/structure/sign/electricshock, @@ -22606,7 +21783,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aPN" = ( /obj/machinery/newscaster{ @@ -22618,7 +21795,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aPO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -22627,8 +21804,6 @@ /turf/closed/wall/r_wall, /area/maintenance/port) "aPP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -22639,18 +21814,18 @@ /turf/open/floor/plating, /area/maintenance/port) "aPQ" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 3; name = "3maintenance loot spawner" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /turf/open/floor/plasteel, /area/maintenance/port) "aPR" = ( @@ -22661,40 +21836,43 @@ /turf/open/floor/plating, /area/maintenance/port) "aPS" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/maintenance/port) "aPT" = ( /obj/structure/rack, /obj/item/reagent_containers/food/drinks/bottle/whiskey, /obj/effect/spawner/lootdrop/maintenance, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/maintenance/port) "aPU" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/maintenance/port) "aPV" = ( @@ -22704,7 +21882,7 @@ /turf/closed/wall, /area/maintenance/port) "aPW" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack/random, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 @@ -22712,6 +21890,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -22988,7 +22167,9 @@ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "aQB" = ( /obj/structure/table/wood, @@ -23002,24 +22183,23 @@ /turf/open/floor/plasteel/vault{ dir = 5 }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aQC" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/chair/office/dark{ dir = 4 }, /obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aQD" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken" }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aQE" = ( /obj/structure/shuttle/engine/propulsion, /obj/effect/turf_decal/stripes/line, @@ -23029,6 +22209,10 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 6 }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -23062,7 +22246,7 @@ /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQK" = ( /obj/effect/turf_decal/stripes/line{ @@ -23071,7 +22255,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQM" = ( /obj/effect/turf_decal/stripes/line{ @@ -23080,7 +22264,7 @@ /obj/machinery/atmospherics/components/trinary/filter/critical{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQN" = ( /obj/effect/turf_decal/stripes/line{ @@ -23089,10 +22273,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Engineering Aft"; dir = 2; @@ -23102,9 +22285,10 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/obj/effect/turf_decal/loading_area{ + dir = 1 }, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aQP" = ( /obj/effect/turf_decal/stripes/line{ @@ -23113,20 +22297,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/plasteel, -/area/engine/engineering) -"aQQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQR" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -23134,7 +22307,7 @@ /obj/machinery/atmospherics/pipe/manifold/orange/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQS" = ( /obj/machinery/meter, @@ -23144,28 +22317,18 @@ /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQT" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aQU" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/maintenance/port) -"aQV" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/maintenance/port) "aQW" = ( /turf/closed/wall, /area/library) @@ -23269,14 +22432,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/medical/chemistry) -"aRj" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemisttop"; - name = "Chemistry Lobby Shutters" - }, -/turf/open/floor/plating, -/area/medical/chemistry) "aRk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ @@ -23353,8 +22508,6 @@ /turf/open/floor/plasteel, /area/science/research) "aRx" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -23369,19 +22522,17 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aRy" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aRz" = ( /turf/closed/wall, /area/maintenance/starboard) "aRA" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -23394,20 +22545,21 @@ dir = 1 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aRB" = ( -/turf/open/floor/plasteel/vault/telecomms{ - dir = 5 - }, +/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/item/clipboard, +/obj/item/storage/firstaid/o2, +/obj/item/crowbar, +/turf/open/floor/plasteel/vault/side, /area/tcommsat/server) "aRD" = ( /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/fans/tiny, -/turf/open/floor/plasteel/vault/telecomms{ - dir = 5 - }, +/turf/open/floor/plasteel/vault/side, /area/tcommsat/server) "aRE" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ @@ -23416,9 +22568,8 @@ on = 1; target_temperature = 80 }, -/turf/open/floor/plasteel/vault/telecomms{ - dir = 5 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side, /area/tcommsat/server) "aRF" = ( /obj/structure/cable/white{ @@ -23428,14 +22579,13 @@ name = "Station Intercom"; pixel_x = -28 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aRG" = ( /obj/structure/cable/white{ @@ -23449,7 +22599,7 @@ name = "Gas to Cooling Loop"; on = 1 }, -/turf/open/floor/plasteel/yellow, +/turf/open/floor/engine, /area/engine/engineering) "aRH" = ( /obj/structure/cable/white{ @@ -23458,7 +22608,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral, +/turf/open/floor/engine, /area/engine/engineering) "aRI" = ( /obj/structure/cable/white{ @@ -23467,7 +22617,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel/yellow, +/turf/open/floor/engine, /area/engine/engineering) "aRJ" = ( /obj/structure/cable/white{ @@ -23476,20 +22626,19 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 5 }, -/turf/open/floor/plasteel/neutral, +/turf/open/floor/engine, /area/engine/engineering) "aRK" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aRL" = ( /obj/structure/cable/white{ @@ -23498,9 +22647,8 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aRM" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ @@ -23509,31 +22657,26 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aRN" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; - icon_state = "pump_map"; name = "Freezer to Gas" }, -/turf/open/floor/plasteel/neutral, +/turf/open/floor/engine, /area/engine/engineering) "aRO" = ( /obj/effect/landmark/start/station_engineer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 9 }, -/turf/open/floor/plasteel/yellow, +/turf/open/floor/engine, /area/engine/engineering) "aRP" = ( /obj/machinery/holopad, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aRQ" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -23541,27 +22684,28 @@ name = "Gas to Cooling Loop"; on = 1 }, -/turf/open/floor/plasteel/yellow, +/turf/open/floor/engine, /area/engine/engineering) "aRR" = ( /obj/machinery/airalarm{ dir = 8; pixel_x = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aRS" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/port) "aRT" = ( /obj/structure/table/wood, @@ -23619,6 +22763,8 @@ /obj/machinery/light{ dir = 1 }, +/obj/item/paper_bin, +/obj/item/pen, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -23631,14 +22777,14 @@ /area/library) "aSa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aSb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aSc" = ( /obj/structure/table/wood, @@ -23659,9 +22805,8 @@ /obj/structure/bodycontainer/morgue, /obj/effect/landmark/revenantspawn, /obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/medical/morgue) "aSf" = ( @@ -23672,12 +22817,13 @@ /turf/open/floor/plasteel/vault, /area/medical/morgue) "aSg" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/nosmoking_2{ pixel_x = 32 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/medical/morgue) "aSh" = ( /turf/closed/wall, @@ -23731,13 +22877,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/structure/table/glass, +/obj/item/clipboard, +/obj/item/storage/bag/chemistry, +/obj/item/storage/pill_bottle/mutadone, /turf/open/floor/plasteel, /area/medical/chemistry) "aSm" = ( /obj/structure/chair/office/light{ dir = 1 }, -/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/medical/chemistry) @@ -23836,7 +22985,6 @@ "aSA" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/firealarm{ @@ -23847,21 +22995,18 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/end{ - dir = 8 - }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/research) "aSB" = ( /obj/machinery/shower{ dir = 8; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/science/research) "aSC" = ( @@ -23869,7 +23014,10 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, /area/maintenance/starboard) "aSD" = ( /obj/structure/girder, @@ -23882,29 +23030,25 @@ dir = 10 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSF" = ( /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSG" = ( /obj/machinery/portable_atmospherics/canister/air, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSH" = ( /obj/structure/sign/poster/contraband/random, /turf/closed/wall, /area/maintenance/starboard) "aSI" = ( /obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/photocopier, /obj/item/newspaper{ pixel_x = 3; @@ -23912,14 +23056,14 @@ }, /obj/item/newspaper, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSJ" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken2" }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSK" = ( /obj/structure/table/wood, /obj/item/storage/fancy/cigarettes/cigpack_uplift{ @@ -23930,7 +23074,7 @@ }, /obj/item/lighter, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aSM" = ( /obj/machinery/door/airlock/command{ cyclelinkeddir = 2; @@ -23963,17 +23107,11 @@ /turf/closed/wall/r_wall, /area/tcommsat/server) "aSP" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/wardrobe/engineering_yellow, /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel, -/area/engine/engineering) -"aSQ" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/caution, +/turf/open/floor/engine, /area/engine/engineering) "aSR" = ( /obj/structure/table/reinforced, @@ -23982,21 +23120,24 @@ pixel_y = -32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aSS" = ( /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/meson/engine, /obj/structure/table/reinforced, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aST" = ( /obj/structure/table/reinforced, /obj/item/storage/toolbox/mechanical, /obj/item/device/flashlight, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aSU" = ( /obj/effect/turf_decal/stripes/line{ @@ -24009,7 +23150,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aSV" = ( /obj/machinery/power/emitter/anchored{ @@ -24021,10 +23162,8 @@ /obj/machinery/status_display{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/dark, /area/engine/engineering) "aSW" = ( /obj/machinery/atmospherics/components/unary/thermomachine/freezer{ @@ -24039,11 +23178,12 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aSX" = ( /obj/structure/closet/crate/bin, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aSY" = ( /obj/structure/table/reinforced, @@ -24056,7 +23196,8 @@ /obj/item/device/geiger_counter, /obj/item/device/geiger_counter, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aSZ" = ( /obj/structure/table/reinforced, @@ -24064,15 +23205,15 @@ /obj/item/clothing/head/radiation, /obj/item/clothing/glasses/meson, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "aTa" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/secure_closet/engineering_personal, /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "aTb" = ( /obj/structure/cable/white{ @@ -24102,12 +23243,16 @@ /area/library) "aTf" = ( /obj/structure/table/wood, +/obj/item/clipboard, +/obj/item/storage/pill_bottle/dice, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/library) "aTg" = ( /obj/structure/table/wood, +/obj/item/folder, +/obj/item/pen/red, /turf/open/floor/plasteel/dark, /area/library) "aTh" = ( @@ -24132,13 +23277,14 @@ pixel_y = 3 }, /obj/item/storage/box/bodybags, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ dir = 4; locked = 0; pixel_x = -23 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/morgue) "aTk" = ( /obj/structure/cable/white{ @@ -24153,13 +23299,11 @@ }, /area/medical/morgue) "aTl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/morgue) "aTm" = ( @@ -24168,14 +23312,13 @@ }, /obj/machinery/shower{ dir = 4; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/newscaster{ pixel_y = 32 }, /obj/machinery/door/window/southleft, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/medical/medbay/zone3) "aTn" = ( /obj/machinery/light{ @@ -24186,12 +23329,12 @@ name = "Station Intercom"; pixel_y = 26 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/medical/medbay/zone3) "aTo" = ( /obj/structure/window/reinforced, /obj/machinery/clonepod, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side, /area/medical/medbay/zone3) "aTp" = ( /obj/effect/spawner/structure/window/reinforced, @@ -24222,34 +23365,13 @@ /area/medical/chemistry) "aTt" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/chem_master, /turf/open/floor/plasteel, /area/medical/chemistry) "aTu" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start/chemist, /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/turf/open/floor/plasteel, -/area/medical/chemistry) -"aTv" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/item/paper_bin, -/obj/item/pen, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chemistbot"; - name = "Chemistry Privacy Shutters" - }, -/obj/machinery/door/window/southleft{ - dir = 8; - name = "Chemistry Desk"; - req_access_txt = "5; 33" - }, -/obj/effect/turf_decal/delivery, +/obj/machinery/chem_master, /turf/open/floor/plasteel, /area/medical/chemistry) "aTw" = ( @@ -24355,7 +23477,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aTL" = ( /obj/effect/spawner/structure/window/reinforced, @@ -24388,7 +23510,6 @@ }, /area/science/research) "aTO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Science Maintenance"; req_access_txt = "47" @@ -24405,7 +23526,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/science/research) "aTP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, @@ -24418,26 +23539,11 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" }, -/area/maintenance/starboard) -"aTQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aTR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -24445,8 +23551,10 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/maintenance/starboard) "aTS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -24456,9 +23564,11 @@ icon_state = "4-8" }, /obj/effect/landmark/blobstart, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "aTT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -24466,9 +23576,11 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "aTU" = ( /obj/structure/table/wood, /obj/item/poster/random_contraband{ @@ -24481,24 +23593,25 @@ }, /obj/item/poster/random_contraband, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aTV" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken7" }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aTW" = ( /obj/structure/chair/comfy/black{ dir = 4 }, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aTX" = ( /obj/machinery/light{ dir = 8 }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -24510,6 +23623,7 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -24521,22 +23635,22 @@ /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, /area/tcommsat/server) "aUa" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/junction, -/turf/closed/wall/r_wall, +/turf/closed/wall/r_wall/rust, /area/engine/engineering) "aUb" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/blobstart, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating, /area/maintenance/port) "aUc" = ( /obj/machinery/power/apc{ @@ -24558,14 +23672,14 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUe" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -24574,7 +23688,10 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken5" + }, /area/library) "aUg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -24583,7 +23700,7 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -24593,15 +23710,13 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUi" = ( /obj/structure/cable/white{ icon_state = "2-8" }, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/library) "aUj" = ( /obj/machinery/photocopier, @@ -24610,16 +23725,15 @@ "aUk" = ( /obj/structure/bodycontainer/morgue, /obj/effect/landmark/revenantspawn, -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_x = -26 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/morgue) "aUl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -24630,8 +23744,8 @@ /area/medical/morgue) "aUm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/morgue) "aUn" = ( @@ -24672,7 +23786,9 @@ pixel_y = 5 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/chemistry) "aUt" = ( /obj/structure/cable/white{ @@ -24722,13 +23838,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aUB" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/science/lab) "aUC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -24736,7 +23852,9 @@ dir = 5 }, /obj/machinery/rnd/protolathe/department/science, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/science/lab) "aUD" = ( /obj/effect/landmark/event_spawn, @@ -24765,7 +23883,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aUF" = ( /obj/machinery/light{ @@ -24818,13 +23936,15 @@ /turf/closed/wall/r_wall, /area/science/research) "aUK" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard) +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, +/area/maintenance/starboard/aft) "aUL" = ( /obj/structure/table/wood, /obj/item/electronics/firelock, @@ -24833,13 +23953,13 @@ dir = 8 }, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aUM" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aUN" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -24849,14 +23969,21 @@ }, /obj/effect/landmark/xeno_spawn, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken5" }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aUO" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -24927,23 +24054,23 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUY" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aUZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aVa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -24952,7 +24079,7 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/wood, /area/library) "aVb" = ( /obj/structure/table/wood, @@ -24975,10 +24102,11 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/morgue) "aVd" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -24990,13 +24118,12 @@ }, /area/medical/morgue) "aVe" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/morgue) "aVf" = ( @@ -25051,12 +24178,8 @@ /obj/item/reagent_containers/glass/bottle/epinephrine, /obj/item/reagent_containers/dropper, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/medical/chemistry) -"aVk" = ( -/obj/effect/landmark/start/chemist, -/turf/open/floor/plasteel/whiteyellow/corner{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/medical/chemistry) "aVl" = ( @@ -25131,7 +24254,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aVu" = ( /obj/effect/landmark/start/scientist, @@ -25140,7 +24263,7 @@ icon_state = "2-8" }, /obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/science/lab) "aVv" = ( /obj/item/reagent_containers/glass/beaker/sulphuric, @@ -25149,7 +24272,9 @@ dir = 6 }, /obj/machinery/rnd/circuit_imprinter/department/science, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/science/lab) "aVw" = ( /turf/open/floor/plasteel/whitepurple/corner, @@ -25164,7 +24289,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aVy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -25222,16 +24347,14 @@ /turf/closed/wall/r_wall, /area/science/research) "aVF" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aVG" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -25247,26 +24370,27 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aVH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken" }, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aVI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aVJ" = ( /obj/machinery/vending/cigarette, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aVK" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 6 @@ -25286,13 +24410,14 @@ name = "Asteroid" }) "aVM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port) "aVN" = ( /obj/structure/table/wood, @@ -25367,17 +24492,15 @@ /area/library) "aVY" = ( /obj/structure/table, -/obj/effect/decal/cleanable/dirt, /obj/item/clothing/gloves/color/latex, -/obj/effect/decal/cleanable/dirt, /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/turf/open/floor/plasteel/vault, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/morgue) "aVZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -25392,9 +24515,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/structure/closet/l3closet, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/morgue) "aWb" = ( @@ -25458,7 +24580,7 @@ }, /obj/item/reagent_containers/dropper, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/corner, /area/medical/chemistry) "aWg" = ( /obj/structure/table/glass, @@ -25483,7 +24605,9 @@ }, /obj/machinery/light, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/medical/chemistry) "aWh" = ( /obj/structure/table/glass, @@ -25502,7 +24626,9 @@ /obj/item/grenade/chem_grenade, /obj/item/grenade/chem_grenade, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/medical/chemistry) "aWi" = ( /obj/structure/cable/white{ @@ -25510,7 +24636,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/medical/chemistry) "aWj" = ( /obj/structure/table/glass, @@ -25522,7 +24650,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/medical/chemistry) "aWk" = ( /obj/structure/table, @@ -25571,7 +24701,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/lab) "aWp" = ( /obj/machinery/status_display, @@ -25617,22 +24747,13 @@ }, /turf/open/floor/circuit/green/telecomms/mainframe, /area/science/research) -"aWv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/starboard) "aWw" = ( /obj/structure/table/wood, /obj/item/clipboard, /obj/item/electronics/airalarm, /obj/item/electronics/airlock, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aWx" = ( /obj/structure/table/wood, /obj/item/stack/cable_coil/white, @@ -25640,16 +24761,14 @@ /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, /obj/item/circuitboard/machine/microwave, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aWy" = ( /obj/structure/table/wood, /obj/item/storage/briefcase, /obj/item/device/taperecorder, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "aWz" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, /obj/structure/lattice, @@ -25712,7 +24831,6 @@ "aWH" = ( /obj/structure/bodycontainer/morgue, /obj/effect/landmark/revenantspawn, -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ dir = 2; name = "Morgue APC"; @@ -25722,11 +24840,11 @@ /obj/structure/cable/white{ icon_state = "0-4" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/medical/morgue) "aWI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/structure/cable/white{ icon_state = "1-8" @@ -25740,8 +24858,8 @@ dir = 8; network = list("SS13") }, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/morgue) "aWK" = ( @@ -25750,7 +24868,7 @@ /area/medical/medbay/zone3) "aWL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "cloningfoyer"; name = "Cloning Lab"; req_access_txt = "5" @@ -25771,7 +24889,7 @@ /area/medical/medbay/zone3) "aWN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33" @@ -25897,7 +25015,7 @@ name = "Xenobiology Containment Door" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Access"; req_access_txt = "30" }, @@ -25925,9 +25043,9 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, /area/maintenance/starboard) "aXc" = ( @@ -25936,13 +25054,6 @@ /area/ruin/unpowered{ name = "Asteroid" }) -"aXd" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port) "aXe" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole/bookmanagement, @@ -26127,6 +25238,9 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/science/research) "aXz" = ( @@ -26254,6 +25368,7 @@ dir = 8; pixel_x = 24 }, +/obj/item/clothing/suit/armor/reactive/teleport, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -26266,12 +25381,10 @@ /turf/open/floor/plating, /area/maintenance/starboard) "aXK" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/firecloset, /obj/machinery/light/small{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/maintenance/starboard) @@ -26291,8 +25404,6 @@ /turf/closed/wall, /area/library) "aXN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -26307,7 +25418,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "aXO" = ( /obj/structure/table/glass, @@ -26337,6 +25448,12 @@ network = list("SS13") }, /obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "aXP" = ( @@ -26365,6 +25482,7 @@ }, /obj/item/storage/box/syringes, /obj/item/gun/syringe, +/obj/item/reagent_containers/hypospray/CMO, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "aXR" = ( @@ -26519,6 +25637,9 @@ dir = 4 }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel, /area/science/research) "aYj" = ( @@ -26649,9 +25770,7 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard) "aYu" = ( /obj/machinery/door/airlock/maintenance_hatch{ @@ -26664,16 +25783,14 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aYv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -26681,10 +25798,8 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "aYw" = ( /obj/structure/destructible/cult/tome, /obj/item/book/codex_gigas, @@ -26694,14 +25809,17 @@ /obj/machinery/light_switch{ pixel_y = 24 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken6" + }, /area/library) "aYx" = ( /obj/effect/landmark/start/librarian, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aYy" = ( /obj/structure/bookcase{ @@ -26715,7 +25833,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aYz" = ( /obj/structure/cable/white{ @@ -26724,32 +25842,23 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plating, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, /area/maintenance/port) "aYA" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" }, /area/maintenance/port) -"aYB" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "aYC" = ( /obj/structure/cable/white{ icon_state = "4-8" @@ -26757,22 +25866,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/port) -"aYD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, /area/maintenance/port) "aYE" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ icon_state = "4-8" @@ -26780,8 +25877,10 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, /area/maintenance/port) "aYF" = ( /obj/structure/cable/white{ @@ -26790,10 +25889,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "aYG" = ( /obj/structure/table/glass, @@ -26815,6 +25911,11 @@ pixel_x = -22 }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastleft{ + name = "First-Aid Supplies"; + req_access_txt = "5"; + req_one_access_txt = "0" + }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "aYH" = ( @@ -26826,7 +25927,7 @@ /area/medical/medbay/zone3) "aYJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage"; req_access_txt = "5" }, @@ -26905,7 +26006,7 @@ /area/medical/medbay/zone3) "aYT" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -26975,7 +26076,6 @@ /area/science/robotics/mechbay) "aZd" = ( /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/research{ name = "Mech Bay"; req_access_txt = "29" @@ -27039,16 +26139,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/closed/wall/r_wall, +/turf/closed/wall/r_wall/rust, /area/science/robotics/lab) -"aZn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/starboard) "aZo" = ( /obj/structure/girder, /turf/open/floor/plating, @@ -27079,7 +26171,6 @@ pixel_y = 3 }, /obj/item/storage/secure/briefcase, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/vault{ dir = 4 @@ -27090,17 +26181,6 @@ /obj/structure/sign/poster/contraband/random, /turf/closed/wall, /area/maintenance/port) -"aZt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "aZu" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -27111,7 +26191,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "aZv" = ( /obj/structure/table/wood, @@ -27123,7 +26203,10 @@ name = "Station Intercom"; pixel_y = -26 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken" + }, /area/library) "aZw" = ( /obj/structure/table/wood, @@ -27138,23 +26221,13 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) -"aZx" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 - }, -/area/maintenance/port) "aZy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/turf/closed/wall, +/turf/closed/wall/rust, /area/maintenance/port) "aZz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -27164,7 +26237,6 @@ /turf/closed/wall, /area/maintenance/port) "aZA" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -27209,6 +26281,10 @@ icon_state = "2-4" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/eastright{ + name = "First-Aid Supplies"; + req_access_txt = "5" + }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "aZD" = ( @@ -27216,6 +26292,13 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/cmo, /area/medical/medbay/zone3) "aZE" = ( @@ -27229,7 +26312,7 @@ /area/medical/medbay/zone3) "aZF" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Storage"; req_access_txt = "5" }, @@ -27346,7 +26429,7 @@ /area/medical/medbay/zone3) "aZP" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; name = "Medbay"; req_access_txt = "5" @@ -27394,10 +26477,7 @@ /area/hallway/primary/central) "aZU" = ( /obj/machinery/recharge_station, -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/cyborg, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/airalarm{ dir = 4; locked = 0; @@ -27413,27 +26493,25 @@ icon_state = "0-2" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/mechbay) "aZV" = ( /obj/machinery/recharge_station, -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/cyborg, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/mechbay) "aZW" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/mechbay) "aZX" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/oil, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/mechbay) "aZY" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -27466,8 +26544,6 @@ }, /obj/item/device/multitool, /obj/item/clothing/head/welding, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/firealarm{ pixel_y = 24 }, @@ -27477,15 +26553,14 @@ network = list("SS13","RD") }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/lab) "bac" = ( /obj/machinery/mecha_part_fabricator, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/end{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/lab) "bad" = ( /obj/structure/rack, @@ -27493,20 +26568,11 @@ /obj/item/storage/belt/utility/full, /obj/item/circuitboard/mecha/ripley/main, /obj/item/circuitboard/mecha/ripley/peripherals, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light{ dir = 1 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/science/robotics/lab) -"bae" = ( -/obj/machinery/mecha_part_fabricator, -/obj/effect/turf_decal/stripes/end{ - dir = 1 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/lab) "baf" = ( /obj/item/stack/sheet/metal/fifty, @@ -27526,7 +26592,7 @@ pixel_y = 32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/lab) "bag" = ( /obj/item/paper_bin, @@ -27554,7 +26620,7 @@ pixel_x = 24 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side, /area/science/robotics/lab) "bah" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -27565,16 +26631,15 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/starboard) "baj" = ( /turf/closed/wall, /area/maintenance/port) "bak" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/maintenance/port) "bal" = ( @@ -27611,15 +26676,16 @@ /turf/open/floor/plasteel, /area/maintenance/port) "bao" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plating, /area/maintenance/port) "bap" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -27629,21 +26695,21 @@ /obj/structure/table/wood, /obj/item/clothing/suit/syndicatefake, /obj/item/clothing/head/syndicatefake, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/maintenance/port) "bar" = ( /turf/open/floor/plating, /area/maintenance/port) "bas" = ( /obj/structure/dresser, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 1 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/maintenance/port) "bat" = ( @@ -27669,6 +26735,10 @@ }, /obj/structure/cable/white, /obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "bau" = ( @@ -27682,6 +26752,7 @@ }, /obj/effect/turf_decal/bot, /obj/machinery/rnd/protolathe/department/medical, +/obj/effect/turf_decal/stripes/box, /turf/open/floor/plasteel, /area/medical/medbay/zone3) "bav" = ( @@ -27862,7 +26933,6 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "baO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable/white{ icon_state = "4-8" @@ -27899,7 +26969,6 @@ /area/science/robotics/mechbay) "baR" = ( /obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/research{ name = "Mech Bay"; req_access_txt = "29" @@ -27953,7 +27022,6 @@ /turf/open/floor/plating, /area/science/robotics/lab) "baV" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -27987,7 +27055,6 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "baZ" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/roboticist, /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -28006,17 +27073,10 @@ pixel_x = 24 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/science/robotics/lab) -"bbb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/maintenance/starboard) "bbc" = ( /obj/structure/table/wood, /obj/item/device/flashlight/lamp, @@ -28029,7 +27089,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port) "bbe" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -28041,8 +27100,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, /area/maintenance/port) "bbg" = ( /obj/structure/cable/white{ @@ -28054,7 +27113,6 @@ /turf/open/floor/plating, /area/maintenance/port) "bbh" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -28062,55 +27120,39 @@ dir = 4 }, /obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/port) -"bbi" = ( -/obj/structure/cable/white{ - icon_state = "4-8" +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, /area/maintenance/port) "bbj" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, /area/maintenance/port) "bbk" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "bbl" = ( /obj/structure/table/wood, /obj/item/clipboard, /obj/item/toy/syndicateballoon, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 1 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/maintenance/port) "bbm" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/revenantspawn, /turf/open/floor/plasteel/bar, /area/maintenance/port) @@ -28118,28 +27160,10 @@ /obj/machinery/vending/autodrobe{ req_access_txt = "0" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/vault{ - dir = 4 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/maintenance/port) -"bbo" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "bbp" = ( /obj/machinery/light{ dir = 8 @@ -28175,7 +27199,6 @@ "bbu" = ( /obj/machinery/firealarm{ dir = 4; - icon_state = "fire0"; pixel_x = 24 }, /obj/machinery/light{ @@ -28204,7 +27227,7 @@ /area/hallway/primary/central) "bbx" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Checkpoint"; req_access_txt = "63" }, @@ -28276,7 +27299,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bbC" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -28296,7 +27318,6 @@ /turf/open/floor/circuit, /area/science/robotics/mechbay) "bbE" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, @@ -28304,7 +27325,6 @@ /area/science/robotics/mechbay) "bbF" = ( /obj/machinery/mech_bay_recharge_port{ - icon_state = "recharge_port"; dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -28339,7 +27359,7 @@ /area/science/research) "bbI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; req_access_txt = "29" }, @@ -28370,7 +27390,6 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "bbK" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -28413,7 +27432,9 @@ /obj/machinery/computer/rdconsole{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/science/robotics/lab) "bbP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -28421,11 +27442,12 @@ icon_state = "1-2" }, /obj/effect/landmark/blobstart, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bbQ" = ( +/obj/machinery/vending/kink, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken5" }, /area/maintenance/port) @@ -28434,6 +27456,7 @@ /area/maintenance/port) "bbS" = ( /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken6" }, /area/maintenance/port) @@ -28443,25 +27466,6 @@ }, /turf/closed/wall, /area/maintenance/port) -"bbU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/barricade/wooden, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "bbV" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/barricade/wooden, @@ -28471,9 +27475,7 @@ /turf/open/floor/plating, /area/maintenance/port) "bbW" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -28501,9 +27503,7 @@ /turf/closed/wall, /area/maintenance/port) "bbZ" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/barricade/wooden, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -28525,8 +27525,10 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/port) "bcc" = ( /obj/structure/reagent_dispensers/watertank, @@ -28546,6 +27548,10 @@ req_access_txt = "0"; use_power = 0 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -28571,6 +27577,10 @@ /obj/item/clothing/mask/surgical, /obj/item/surgical_drapes, /obj/structure/table/reinforced, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -28588,8 +27598,8 @@ "bci" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, -/turf/open/floor/plasteel/vault{ - dir = 1 +/turf/open/floor/plasteel/vault/side{ + dir = 9 }, /area/medical/medbay/zone3) "bcj" = ( @@ -28608,7 +27618,7 @@ /area/medical/medbay/zone3) "bck" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay Desk"; req_access_txt = "5" }, @@ -28690,7 +27700,6 @@ id = "mechbay"; name = "Mech Bay Shutters" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -28726,7 +27735,6 @@ /turf/open/floor/plasteel/whitepurple/corner, /area/science/research) "bcy" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -28734,7 +27742,6 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "bcz" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" @@ -28758,11 +27765,12 @@ pixel_x = 24 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/science/robotics/lab) "bcD" = ( /obj/structure/rack, -/obj/effect/decal/cleanable/dirt, /obj/item/weldingtool, /obj/item/device/assembly/voice, /obj/item/clothing/head/welding, @@ -28771,18 +27779,16 @@ dir = 9 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bcE" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bcF" = ( /obj/machinery/computer/slot_machine, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -28797,6 +27803,7 @@ /area/maintenance/port) "bcI" = ( /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken2" }, /area/maintenance/port) @@ -28806,19 +27813,16 @@ /area/maintenance/port) "bcK" = ( /obj/machinery/computer/slot_machine, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/port) "bcL" = ( /obj/machinery/vending/cigarette, -/obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ pixel_x = -32 }, /turf/open/floor/plating, /area/maintenance/port) "bcM" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/vault{ dir = 5 @@ -28828,7 +27832,6 @@ /obj/structure/chair/comfy/black{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -28845,19 +27848,13 @@ "bcP" = ( /turf/open/floor/plasteel/bar, /area/maintenance/port) -"bcQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/bar, -/area/maintenance/port) "bcR" = ( /obj/structure/table/wood, /obj/item/device/instrument/guitar, /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/port) "bcS" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -28866,14 +27863,12 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/blobstart, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "bcT" = ( /obj/structure/rack, /obj/item/storage/toolbox/mechanical, /obj/item/clothing/head/welding, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4 }, @@ -28900,6 +27895,10 @@ /obj/structure/mirror{ pixel_x = -28 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -28921,6 +27920,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -28945,7 +27948,7 @@ "bcZ" = ( /obj/structure/bed/roller, /obj/machinery/iv_drip, -/turf/open/floor/plasteel/vault{ +/turf/open/floor/plasteel/vault/side{ dir = 8 }, /area/medical/medbay/zone3) @@ -28953,8 +27956,8 @@ /obj/machinery/computer/med_data{ dir = 4 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/medical/medbay/zone3) "bdb" = ( @@ -29064,7 +28067,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bdk" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/poddoor/shutters{ id = "mechbay"; name = "Mech Bay Shutters" @@ -29087,7 +28089,6 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "bdl" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, @@ -29097,14 +28098,12 @@ /turf/open/floor/plasteel, /area/science/robotics/mechbay) "bdm" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/circuit/green, /area/science/robotics/mechbay) "bdn" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -29146,11 +28145,10 @@ /turf/open/floor/plasteel/whitepurple/corner, /area/science/research) "bds" = ( -/turf/closed/wall, +/turf/closed/wall/rust, /area/science/robotics/lab) "bdt" = ( /obj/structure/closet/wardrobe/robotics_black, -/obj/effect/decal/cleanable/dirt, /obj/machinery/power/apc{ dir = 8; name = "Robotics Lab APC"; @@ -29162,7 +28160,7 @@ icon_state = "0-4" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/science/robotics/lab) "bdu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -29176,7 +28174,7 @@ icon_state = "1-8" }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault, /area/science/robotics/lab) "bdv" = ( /obj/structure/table/reinforced, @@ -29187,7 +28185,9 @@ /obj/item/surgical_drapes, /obj/item/cautery, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/science/robotics/lab) "bdw" = ( /obj/machinery/holopad, @@ -29209,7 +28209,9 @@ pixel_x = 32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/science/robotics/lab) "bdz" = ( /obj/structure/cable/white{ @@ -29218,10 +28220,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bdA" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; @@ -29236,28 +28236,26 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bdB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plating, -/area/maintenance/starboard) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard/aft) "bdC" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/item/storage/box/lights/mixed, /obj/effect/turf_decal/stripes/line{ dir = 4 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bdD" = ( /obj/structure/table/wood, /obj/item/storage/briefcase, @@ -29267,12 +28265,14 @@ /obj/structure/chair/stool/bar, /obj/effect/landmark/revenantspawn, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken" }, /area/maintenance/port) "bdF" = ( /obj/structure/chair/stool/bar, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken5" }, /area/maintenance/port) @@ -29280,6 +28280,7 @@ /obj/structure/chair/stool/bar, /obj/effect/landmark/revenantspawn, /turf/open/floor/wood{ + broken = 1; icon_state = "wood-broken2" }, /area/maintenance/port) @@ -29302,7 +28303,6 @@ pixel_y = 3 }, /obj/item/storage/briefcase, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 8 }, @@ -29322,7 +28322,6 @@ /obj/structure/chair/comfy/black{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -29353,8 +28352,6 @@ /obj/item/clothing/head/helmet/justice/escape{ name = "justice helmet" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4 }, @@ -29366,17 +28363,15 @@ }, /area/maintenance/port) "bdO" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, /area/maintenance/port) "bdP" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -29391,6 +28386,10 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -26 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -29410,6 +28409,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -29462,8 +28465,8 @@ dir = 8; network = list("SS13") }, -/turf/open/floor/plasteel/vault{ - dir = 4 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/medical/medbay/zone3) "bdX" = ( @@ -29478,8 +28481,8 @@ pixel_x = -26; pixel_y = -26 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/medical/medbay/zone3) "bdY" = ( @@ -29562,7 +28565,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "beg" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/device/radio/intercom{ name = "Station Intercom"; pixel_y = -24 @@ -29585,7 +28587,6 @@ /turf/open/floor/circuit/green, /area/science/robotics/mechbay) "bei" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/nosmoking_2{ pixel_y = -32 }, @@ -29593,7 +28594,6 @@ /area/science/robotics/mechbay) "bej" = ( /obj/machinery/mech_bay_recharge_port{ - icon_state = "recharge_port"; dir = 8 }, /obj/effect/turf_decal/stripes/line{ @@ -29604,6 +28604,9 @@ "bek" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/science/research) "bel" = ( @@ -29612,6 +28615,9 @@ icon_state = "1-2" }, /obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/science/research) "bem" = ( @@ -29623,20 +28629,21 @@ name = "Station Intercom"; pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/science/robotics/lab) "ben" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, /area/science/robotics/lab) "beo" = ( /obj/structure/table/reinforced, @@ -29651,7 +28658,9 @@ }, /obj/machinery/light, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/science/robotics/lab) "bep" = ( /obj/machinery/computer/operating{ @@ -29670,7 +28679,6 @@ /obj/machinery/status_display{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/whitepurple/corner, /area/science/robotics/lab) "ber" = ( @@ -29686,17 +28694,21 @@ pixel_x = 28 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/science/robotics/lab) "bes" = ( /obj/structure/rack, /obj/item/crowbar/red, /obj/item/wrench, /obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard) +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard/aft) "bet" = ( /obj/structure/rack, /obj/item/stack/sheet/metal{ @@ -29706,21 +28718,18 @@ /obj/item/stack/sheet/glass{ amount = 30 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "beu" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/port) "bev" = ( /obj/machinery/computer/slot_machine, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 @@ -29731,7 +28740,6 @@ /area/maintenance/port) "bew" = ( /obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, /obj/item/coin/iron{ icon_state = "coin_bananium_heads"; name = "arcade coin"; @@ -29756,7 +28764,6 @@ pixel_y = 5 }, /obj/item/reagent_containers/syringe, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/vault{ dir = 8 }, @@ -29765,12 +28772,9 @@ /obj/structure/table/wood, /obj/item/newspaper, /obj/item/clothing/head/bowler, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/port) "bez" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/contraband/random{ pixel_y = -32 }, @@ -29790,7 +28794,6 @@ name = "Theatre Stage"; req_access_txt = "0" }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/bar, /area/maintenance/port) "beC" = ( @@ -29808,26 +28811,12 @@ dir = 8 }, /area/maintenance/port) -"beD" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/port) "beE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/medical/medbay/zone3) "beF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Medbay Maintenance"; req_access_txt = "5" @@ -29960,7 +28949,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/starboard) "beQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -29969,7 +28958,6 @@ /turf/closed/wall/r_wall, /area/science/robotics/lab) "beR" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-4" }, @@ -29991,28 +28979,11 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/port) -"beT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port) -"beU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, /area/maintenance/port) "beV" = ( /obj/structure/cable/white{ @@ -30027,33 +28998,8 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/port) -"beW" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 - }, -/area/maintenance/port) -"beY" = ( -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 - }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, /area/maintenance/port) "beZ" = ( /obj/structure/cable/white{ @@ -30066,7 +29012,6 @@ /turf/open/floor/plating, /area/maintenance/port) "bfa" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, @@ -30077,9 +29022,10 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, /area/maintenance/port) "bfb" = ( /obj/structure/cable/white{ @@ -30088,25 +29034,17 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 4 +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" }, /area/maintenance/port) -"bfc" = ( -/obj/structure/cable/white{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port) "bfd" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/turf/open/floor/plasteel, /area/maintenance/port) "bfe" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -30124,7 +29062,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Security Checkpoint"; req_access_txt = "63" }, @@ -30148,46 +29086,6 @@ }, /turf/open/floor/plasteel/purple/corner, /area/hallway/primary/central) -"bfi" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/starboard) -"bfj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) -"bfk" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/landmark/blobstart, -/turf/open/floor/plating, -/area/maintenance/starboard) "bfl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -30198,7 +29096,7 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bfm" = ( /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable/white{ @@ -30213,10 +29111,9 @@ /obj/structure/cable/white{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bfn" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ @@ -30228,11 +29125,8 @@ /obj/structure/cable/white{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bfo" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -30240,8 +29134,13 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/neutral/corner, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard) "bfp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -30252,16 +29151,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) -"bfq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/starboard) "bfr" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable/white{ @@ -30270,10 +29159,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bfs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -30281,24 +29168,23 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, +/area/maintenance/starboard/aft) "bft" = ( /obj/structure/cable/white{ icon_state = "0-8" }, /obj/machinery/power/apc{ + areastring = "/area/maintenance/starboard/aft"; dir = 2; - name = "Starboard Maintenance APC"; - areastring = "/area/maintenance/starboard"; + name = "Starboard Quater Maintenance APC"; pixel_y = -26 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bfu" = ( /turf/closed/wall, /area/chapel/main) @@ -30330,6 +29216,7 @@ }, /obj/effect/decal/remains/human, /turf/open/floor/plating{ + burnt = 1; icon_state = "panelscorched" }, /area/chapel/main) @@ -30372,7 +29259,6 @@ name = "Maintenance Hatch"; req_access_txt = "12" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" @@ -30386,17 +29272,25 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "bfC" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/closed/wall, +/turf/closed/wall/rust, /area/chapel/main) "bfD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/item/storage/backpack, +/obj/item/crowbar, +/obj/item/wrench, +/obj/structure/rack, +/turf/open/floor/plasteel, /area/maintenance/port) "bfE" = ( /obj/structure/cable/white{ @@ -30407,27 +29301,33 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/blobstart, -/turf/open/floor/plasteel/neutral, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, /area/maintenance/port) "bfF" = ( /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral, +/obj/item/tank/internals/oxygen/red, +/obj/item/clothing/mask/gas, +/turf/open/floor/plating, /area/maintenance/port) "bfG" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/port) "bfH" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -30441,7 +29341,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/port) "bfI" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -30489,25 +29389,6 @@ }, /turf/open/floor/plasteel/neutral, /area/hallway/primary/central) -"bfM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/power/apc{ - aidisabled = 0; - dir = 1; - name = "Central Hall APC"; - areastring = "/area/hallway/primary/central"; - pixel_y = 24 - }, -/obj/structure/cable/white{ - icon_state = "4-8" - }, -/obj/structure/cable/white{ - icon_state = "0-8" - }, -/turf/open/floor/plasteel/neutral, -/area/hallway/primary/central) "bfO" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -30590,8 +29471,8 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/chapel/main) "bfU" = ( @@ -30627,9 +29508,8 @@ name = "Station Intercom"; pixel_y = 24 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 1 }, /area/chapel/main) "bfY" = ( @@ -30647,9 +29527,8 @@ /obj/structure/cable/white{ icon_state = "0-2" }, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 4 }, /area/chapel/main) "bfZ" = ( @@ -30659,18 +29538,16 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 1 }, /area/chapel/main) "bga" = ( /obj/structure/chair/wood/normal{ dir = 8 }, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 4 }, /area/chapel/main) "bgb" = ( @@ -30689,13 +29566,20 @@ }, /area/chapel/main) "bgc" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel, /area/maintenance/port) "bgd" = ( /obj/structure/closet/firecloset, -/turf/open/floor/plating, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/maintenance/port) "bge" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -30731,12 +29615,14 @@ /turf/open/floor/plasteel/neutral/side, /area/hallway/primary/central) "bgl" = ( -/obj/machinery/vending/cola, +/obj/machinery/vending/cola/random, /obj/machinery/newscaster{ pixel_x = 32 }, /obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "bgm" = ( /turf/open/floor/plasteel/vault{ @@ -30773,7 +29659,6 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bgq" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, @@ -30816,55 +29701,51 @@ "bgu" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/tea, -/obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/grown/tomato, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgv" = ( /obj/machinery/biogenerator, /obj/item/wrench, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgw" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgx" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bgy" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgz" = ( /obj/machinery/seed_extractor, /obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgA" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, -/obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/grown/cherries, /obj/item/shovel/spade, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side, +/area/maintenance/starboard/aft) "bgB" = ( /obj/structure/mirror{ pixel_x = 26 @@ -30908,8 +29789,8 @@ dir = 4; network = list("MINE") }, -/turf/open/floor/plasteel/vault{ - dir = 8 +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, /area/chapel/main) "bgE" = ( @@ -30925,7 +29806,7 @@ /area/chapel/main) "bgF" = ( /obj/machinery/status_display, -/turf/closed/wall, +/turf/closed/wall/rust, /area/chapel/main) "bgG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -30948,9 +29829,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel{ - dir = 8; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 8 }, /area/chapel/main) "bgJ" = ( @@ -30966,9 +29846,7 @@ /obj/structure/cable/white{ icon_state = "2-8" }, -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, +/turf/open/floor/plasteel/chapel, /area/chapel/main) "bgK" = ( /obj/structure/chair/wood/normal{ @@ -30977,15 +29855,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 }, -/turf/open/floor/plasteel{ - dir = 8; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 8 }, /area/chapel/main) "bgL" = ( -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, +/turf/open/floor/plasteel/chapel, /area/chapel/main) "bgM" = ( /obj/structure/table/wood, @@ -31008,7 +29883,6 @@ /turf/closed/wall, /area/hallway/secondary/entry) "bgO" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance_hatch{ name = "Maintenance Hatch"; req_access_txt = "12" @@ -31231,24 +30105,18 @@ /obj/structure/sign/nosmoking_2{ pixel_x = -32 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bhk" = ( -/turf/open/floor/plasteel/hydrofloor, -/area/maintenance/starboard) -"bhl" = ( -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/starboard) "bhm" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/xeno_spawn, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "bhn" = ( /obj/structure/sink{ dir = 4; @@ -31257,9 +30125,8 @@ /obj/structure/sign/botany{ pixel_x = 32 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bho" = ( /obj/machinery/door/airlock/silver{ name = "Bathroom" @@ -31478,7 +30345,9 @@ pixel_x = 24 }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/secondary/entry) "bhM" = ( /obj/structure/disposalpipe/trunk{ @@ -31548,46 +30417,52 @@ /obj/item/reagent_containers/food/snacks/grown/watermelon, /obj/item/cultivator, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) "bhU" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21"; pixel_x = -3; pixel_y = 3 }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) "bhV" = ( /obj/machinery/hydroponics/soil, /obj/item/reagent_containers/food/snacks/grown/wheat, /obj/item/reagent_containers/glass/bottle/nutrient/ez, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) "bhW" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "bhX" = ( /obj/machinery/hydroponics/soil, /obj/item/reagent_containers/food/snacks/grown/tea, /obj/item/hatchet, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) "bhY" = ( /obj/machinery/hydroponics/soil, /obj/item/seeds/tower, -/obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/glass/bottle/nutrient/rh, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/maintenance/starboard) +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) "bhZ" = ( /obj/structure/closet/wardrobe/chaplain_black, /obj/machinery/light_switch{ @@ -31688,9 +30563,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 1 }, /area/chapel/main) "bik" = ( @@ -31703,9 +30577,8 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 4 }, /area/chapel/main) "bil" = ( @@ -31715,9 +30588,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/turf/open/floor/plasteel{ - dir = 1; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 1 }, /area/chapel/main) "bim" = ( @@ -31725,9 +30597,8 @@ dir = 4 }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel{ - dir = 4; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 4 }, /area/chapel/main) "bin" = ( @@ -31873,7 +30744,6 @@ }, /area/hallway/secondary/entry) "biA" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ pixel_x = 32 }, @@ -31884,7 +30754,9 @@ name = "arrivals camera" }, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/secondary/entry) "biB" = ( /obj/structure/sign/biohazard, @@ -31893,7 +30765,6 @@ "biC" = ( /obj/machinery/shower{ dir = 4; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -31905,7 +30776,6 @@ "biD" = ( /obj/machinery/shower{ dir = 8; - icon_state = "shower"; name = "emergency shower" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -32032,9 +30902,8 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel{ - dir = 8; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 8 }, /area/chapel/main) "biQ" = ( @@ -32047,9 +30916,7 @@ /obj/structure/cable/white{ icon_state = "1-8" }, -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, +/turf/open/floor/plasteel/chapel, /area/chapel/main) "biR" = ( /obj/structure/chair/wood/normal{ @@ -32058,9 +30925,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/open/floor/plasteel{ - dir = 8; - icon_state = "chapel" +/turf/open/floor/plasteel/chapel{ + dir = 8 }, /area/chapel/main) "biS" = ( @@ -32073,9 +30939,7 @@ pixel_y = -24; req_access_txt = "0" }, -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, +/turf/open/floor/plasteel/chapel, /area/chapel/main) "biT" = ( /obj/structure/bookcase, @@ -32338,7 +31202,7 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bjv" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Xenobiology Kill Room"; req_access_txt = "47" }, @@ -32785,22 +31649,7 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/shuttle/arrival) -"bkh" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - name = "External Docking Port" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/entry) "bki" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/fans/tiny, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry) @@ -32906,7 +31755,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bku" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack/random, /obj/machinery/light{ dir = 1 }, @@ -32943,7 +31792,7 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bkz" = ( -/obj/machinery/vending/cola, +/obj/machinery/vending/cola/random, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry) @@ -33136,7 +31985,6 @@ /area/shuttle/arrival) "blb" = ( /obj/structure/closet/firecloset, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/hallway/secondary/entry) @@ -33194,7 +32042,7 @@ dir = 8; network = list("SS13") }, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plasteel/stairs/right, /area/hallway/primary/central) "bli" = ( /obj/structure/closet/firecloset, @@ -33203,8 +32051,10 @@ dir = 2; network = list("SS13") }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "blj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -33253,8 +32103,10 @@ dir = 2; network = list("SS13") }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, /area/hallway/primary/central) "bln" = ( /obj/structure/cable/white{ @@ -33268,7 +32120,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "blo" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -33405,6 +32257,9 @@ /obj/machinery/mass_driver{ id = "chapelgun" }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating, /area/chapel/main) "blD" = ( @@ -33420,12 +32275,16 @@ dir = 8; pixel_x = 25 }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, /area/chapel/main) "blF" = ( /obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/chapel/main) "blG" = ( @@ -33449,6 +32308,9 @@ pixel_x = 24; pixel_y = 8 }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault{ dir = 5 }, @@ -33471,10 +32333,9 @@ }, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; - icon_state = "pump_map"; name = "Gas to Loop" }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "blL" = ( /obj/machinery/door/airlock/public/glass{ @@ -33497,15 +32358,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"blN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) "blO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -33515,18 +32367,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) -"blU" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"blX" = ( -/turf/open/floor/plasteel, -/area/hallway/primary/central) "blY" = ( /obj/machinery/door/airlock/public/glass{ name = "Departure Lounge" @@ -33543,32 +32383,44 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bmb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"bmh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/turf/open/floor/plasteel/escape{ dir = 1 }, -/turf/open/floor/plasteel, /area/hallway/secondary/exit) -"bmw" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" +"bmh" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"bmC" = ( -/obj/machinery/light{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/escape{ + dir = 1 + }, +/area/hallway/secondary/exit) +"bmC" = ( +/obj/machinery/vending/snack/random, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, /area/hallway/secondary/exit) "bmG" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 }, -/turf/open/floor/plasteel, /area/hallway/secondary/exit) "bsv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -33663,13 +32515,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/escape, /area/hallway/secondary/exit) "bsE" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, @@ -33683,14 +32535,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/light, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/escape, /area/hallway/secondary/exit) "bsM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -33702,35 +32553,24 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit) -"bsN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Departure Lounge" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable/white{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/neutral/side{ dir = 4 }, -/turf/open/floor/plasteel, /area/hallway/secondary/exit) "bsO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/delivery, /obj/structure/cable/white{ icon_state = "4-8" }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bsP" = ( @@ -33763,19 +32603,28 @@ /obj/structure/cable/white{ icon_state = "2-8" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "bsS" = ( /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/escape{ + dir = 4 + }, /area/hallway/secondary/exit) "bsT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/neutral, /area/hallway/secondary/exit) "bsV" = ( @@ -33783,14 +32632,13 @@ /obj/structure/cable/white{ icon_state = "1-2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plasteel/escape, /area/hallway/secondary/exit) "bsX" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - name = "Cargo Port"; - req_access_txt = "48;50" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -33801,28 +32649,30 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Office"; + req_access_txt = "48;50" + }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bsY" = ( /obj/structure/cable/white{ icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bsZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ - name = "Cargo Port"; - req_access_txt = "48;50" - }, /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/effect/turf_decal/delivery, +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Office"; + req_access_txt = "48;50" }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) @@ -33868,7 +32718,7 @@ /obj/structure/window/reinforced/tinted/fulltile, /obj/structure/grille, /turf/open/floor/plating, -/area/maintenance/starboard) +/area/maintenance/starboard/aft) "btj" = ( /obj/docking_port/mobile/arrivals{ dir = 2; @@ -33888,7 +32738,6 @@ /turf/closed/wall/mineral/plastitanium, /area/shuttle/arrival) "btk" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ cyclelinkeddir = 4; name = "External Docking Port" @@ -33915,7 +32764,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "buy" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -33953,6 +32801,10 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 1 }, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -33972,6 +32824,12 @@ /area/tcommsat/server) "buI" = ( /obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -33984,6 +32842,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -34019,12 +32883,21 @@ /obj/machinery/status_display{ pixel_y = -32 }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, /area/tcommsat/server) "buS" = ( /obj/machinery/ntnet_relay, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -34035,6 +32908,9 @@ dir = 8; network = list("MINE") }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plasteel/vault/telecomms{ dir = 5 }, @@ -34053,13 +32929,6 @@ "buW" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) -"buZ" = ( -/obj/machinery/power/rad_collector/anchored, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/circuit/green, -/area/engine/supermatter) "bvd" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -34070,11 +32939,15 @@ name = "Asteroid" }) "bvh" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/airless/astplate, -/area/ruin/unpowered{ - name = "Asteroid" - }) +/obj/structure/closet/emcloset{ + anchored = 1 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/maintenance/starboard) "bvo" = ( /obj/structure/girder, /turf/open/floor/plating/airless, @@ -34237,13 +33110,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "bwW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/turf/closed/wall/r_wall, +/turf/closed/wall/r_wall/rust, /area/tcommsat/server) "bwX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -34271,7 +33144,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 9 }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "bxc" = ( /obj/structure/lattice/catwalk, @@ -34322,15 +33195,14 @@ /turf/closed/wall/r_wall, /area/tcommsat/server) "bxu" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/plasteel/caution, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/engine, /area/engine/engineering) "bxv" = ( /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -34340,10 +33212,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, +/turf/open/floor/engine, /area/engine/engineering) "bxw" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, /obj/structure/cable/white{ @@ -34357,8 +33228,8 @@ icon_state = "1-2" }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/vault{ - dir = 5 +/turf/open/floor/plasteel/vault/side{ + dir = 8 }, /area/bridge) "bxy" = ( @@ -34369,9 +33240,7 @@ dir = 4 }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/vault{ - dir = 5 - }, +/turf/open/floor/wood, /area/crew_quarters/heads/hop) "bxz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -34407,7 +33276,10 @@ icon_state = "4-8" }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral/corner, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard/central) "bxD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -34417,7 +33289,6 @@ }, /area/hallway/primary/central) "bxE" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/white{ icon_state = "1-2" }, @@ -34437,7 +33308,6 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) "bxH" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/neutral, /area/engine/atmos) @@ -34466,8 +33336,12 @@ /turf/open/floor/plasteel/bar, /area/crew_quarters/bar/atrium) "bxM" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/escape{ + dir = 1 + }, /area/hallway/secondary/exit) "bxN" = ( /obj/structure/cable/white{ @@ -34500,16 +33374,14 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral/corner{ - dir = 1 - }, +/turf/open/floor/plating, /area/maintenance/port) "bxS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/wood, /area/library) "bxT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -34518,14 +33390,6 @@ dir = 1 }, /area/medical/medbay/zone3) -"bxU" = ( -/obj/structure/cable/white{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/neutral/corner, -/area/maintenance/port) "bxV" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/circuit, @@ -34542,10 +33406,12 @@ /obj/structure/cable/white{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, -/turf/open/floor/plating, -/area/maintenance/starboard) +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) "bxY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -34560,7 +33426,7 @@ /turf/closed/wall, /area/maintenance/starboard/fore) "bye" = ( -/turf/closed/wall, +/turf/closed/wall/rust, /area/maintenance/fore) "byf" = ( /obj/structure/sign/vacuum, @@ -34568,7 +33434,6 @@ /area/maintenance/starboard/fore) "byg" = ( /obj/structure/closet/emcloset/anchored, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 1 }, @@ -34576,15 +33441,15 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "byi" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, /area/maintenance/starboard/fore) "byj" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ name = "External Airlock"; req_access_txt = "13" @@ -34601,8 +33466,6 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "byk" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -34612,7 +33475,6 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "byl" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/external{ name = "External Airlock"; req_access_txt = "13" @@ -34626,15 +33488,11 @@ /turf/open/floor/plasteel, /area/maintenance/starboard/fore) "bym" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable/white{ icon_state = "1-2" }, -/turf/open/floor/plasteel/neutral/corner{ - dir = 8; - heat_capacity = 1e+006 - }, +/turf/open/floor/plating, /area/maintenance/starboard/fore) "byn" = ( /obj/structure/closet/wardrobe/grey, @@ -34654,44 +33512,2485 @@ /obj/structure/sign/nanotrasen, /turf/closed/wall, /area/security/checkpoint) -"swr" = ( -/obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_nw"; - name = "northwest of station"; - turf_type = /turf/open/space; - width = 18 - }, -/turf/open/space/basic, -/area/space/nearstation) "sws" = ( /obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; id = "syndicate_sw"; name = "southwest of station"; turf_type = /turf/open/space; - width = 18 + width = 23 }, /turf/open/space, /area/space/nearstation) -"swt" = ( +"swv" = ( +/turf/closed/wall/r_wall/rust, +/area/bridge) +"swx" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/rnd/protolathe/department/service, -/turf/open/floor/plasteel/redyellow, +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, +/area/bridge) +"swy" = ( +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/bridge) +"swz" = ( +/turf/closed/wall/r_wall/rust, +/area/crew_quarters/heads/hop) +"swA" = ( +/turf/closed/wall/rust, +/area/maintenance/starboard/fore) +"swC" = ( +/turf/closed/wall/r_wall/rust, +/area/crew_quarters/heads/captain/private) +"swD" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/bridge) +"swF" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/rust, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"swG" = ( +/turf/closed/wall/rust, +/area/security/detectives_office) +"swJ" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/bridge) +"swK" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/bridge) +"swL" = ( +/turf/closed/wall/rust, +/area/quartermaster/storage) +"swM" = ( +/obj/machinery/status_display{ + name = "cargo display"; + supply_display = 1 + }, +/turf/closed/wall/rust, +/area/quartermaster/storage) +"swN" = ( +/turf/closed/wall/rust, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"swZ" = ( +/turf/closed/wall/r_wall/rust, +/area/security/brig) +"sxc" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"sxC" = ( +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/ai) +"syC" = ( +/turf/closed/wall/r_wall/rust, +/area/teleporter) +"syD" = ( +/turf/closed/wall/rust, +/area/quartermaster/miningdock) +"syS" = ( +/turf/closed/wall/rust, +/area/hallway/primary/central) +"syT" = ( +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/storage/eva) +"sAc" = ( +/turf/closed/wall/rust, +/area/storage/primary) +"sAx" = ( +/turf/closed/wall/r_wall/rust, +/area/engine/atmos) +"sAy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/engine/atmos) +"sAz" = ( +/turf/closed/wall/r_wall/rust, +/area/storage/primary) +"sAA" = ( +/turf/closed/wall/rust, /area/crew_quarters/bar/atrium) -"swu" = ( -/obj/machinery/rnd/protolathe/department/medical, +"sAX" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/starboard/central) +"sAY" = ( +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard) +"sBu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/security/brig) +"sBv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/rust, +/area/crew_quarters/theatre) +"sBw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/rust, +/area/crew_quarters/bar/atrium) +"sBx" = ( +/obj/effect/landmark/xeno_spawn, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sBy" = ( +/obj/machinery/door/airlock/external{ + name = "External Airlock"; + req_access_txt = "13" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sBW" = ( +/obj/structure/sign/vacuum, +/turf/closed/wall/rust, +/area/maintenance/starboard) +"sCr" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, +/area/maintenance/port/central) +"sCt" = ( +/obj/structure/easel, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sCQ" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + opened = 1 + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/sign/poster/contraband/random{ + pixel_x = 32 + }, +/obj/item/storage/box, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sDl" = ( +/turf/closed/wall/rust, +/area/crew_quarters/dorms) +"sDn" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"sDq" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/item/tank/internals/air, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sDK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/rust, +/area/crew_quarters/theatre) +"sDM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/rust, +/area/crew_quarters/bar/atrium) +"sDP" = ( +/turf/closed/wall/rust, +/area/hallway/secondary/exit) +"sEl" = ( +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sEm" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sEn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sEJ" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner, +/area/hallway/primary/central) +"sEK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sEL" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sEN" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Technology Storage"; + req_access_txt = "23" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/vault, +/area/maintenance/starboard) +"sEQ" = ( +/obj/structure/sign/securearea, /turf/closed/wall, +/area/maintenance/starboard) +"sFn" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/circuitboard/computer/cloning{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/circuitboard/machine/clonepod, +/obj/item/circuitboard/machine/clonescanner, +/obj/item/circuitboard/computer/med_data{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/maintenance/starboard) +"sFo" = ( +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, +/area/maintenance/starboard) +"sFp" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 5 + }, +/area/maintenance/starboard) +"sFq" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/table, +/obj/item/clipboard, +/obj/item/crowbar/red, +/obj/item/device/aicard, +/obj/item/device/analyzer, +/obj/item/device/assembly/flash/handheld, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/maintenance/starboard) +"sFs" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/hallway/secondary/exit) +"sFO" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/port/central) +"sFP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/crew_quarters/theatre) +"sFR" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/circuitboard/machine/autolathe{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/circuitboard/machine/microwave, +/obj/item/circuitboard/computer/secure_data{ + pixel_x = -3; + pixel_y = -3 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/maintenance/starboard) +"sFS" = ( +/turf/open/floor/plasteel/vault/side{ + dir = 10 + }, +/area/maintenance/starboard) +"sFT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/vault/side{ + dir = 6 + }, +/area/maintenance/starboard) +"sFU" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/obj/item/storage/toolbox/electrical, +/obj/item/electronics/apc, +/obj/item/electronics/airlock, +/obj/item/stock_parts/cell/high, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/maintenance/starboard) +"sFX" = ( +/obj/structure/table, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/suit/hazardvest{ + desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; + name = "emergency lifejacket" + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hallway/secondary/exit) +"sFY" = ( +/obj/structure/table, +/obj/effect/turf_decal/stripes/line, +/obj/item/crowbar, +/obj/item/crowbar, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hallway/secondary/exit) +"sGy" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Technology Storage"; + req_access_txt = "23" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault, +/area/maintenance/starboard) +"sGA" = ( +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard) +"sGC" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/escape{ + dir = 8 + }, +/area/hallway/secondary/exit) +"sGD" = ( +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sGU" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 8 + }, +/turf/closed/wall/r_wall/rust, +/area/engine/atmos) +"sGW" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, +/area/maintenance/port/central) +"sGY" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sHb" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard) +"sHd" = ( +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, +/area/maintenance/starboard) +"sHe" = ( +/obj/structure/cable/white{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sHf" = ( +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sHz" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/hallway/primary/central) +"sHB" = ( +/turf/open/floor/plasteel/escape{ + dir = 8 + }, +/area/hallway/secondary/exit) +"sHC" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/side{ + dir = 4 + }, +/area/hallway/secondary/exit) +"sHV" = ( +/turf/closed/wall/r_wall/rust, +/area/engine/engineering) +"sHZ" = ( +/turf/closed/wall/rust, +/area/crew_quarters/theatre) +"sIb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/status_display{ + pixel_y = 32 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sIc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/airalarm{ + pixel_y = 24 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sId" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/neutral/side{ + dir = 4 + }, +/area/hallway/secondary/exit) +"sIe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sIu" = ( +/turf/closed/wall/r_wall/rust, +/area/engine/gravity_generator) +"sIv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/escape, +/area/hallway/secondary/exit) +"sIw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = -28 + }, +/obj/machinery/camera{ + c_tag = "Departures Hallway"; + dir = 1 + }, +/turf/open/floor/plasteel/escape, +/area/hallway/secondary/exit) +"sIx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sIy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/escape/corner{ + dir = 8 + }, +/area/hallway/secondary/exit) +"sIA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/engine/engineering) +"sIB" = ( +/turf/closed/wall/rust, +/area/hydroponics) +"sIC" = ( +/turf/closed/wall/rust, +/area/crew_quarters/kitchen) +"sIG" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/newscaster{ + pixel_y = -30 + }, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hallway/secondary/exit) +"sII" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/engine/gravity_generator) +"sIK" = ( +/turf/closed/wall/rust, +/area/janitor) +"sIL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/starboard/central) +"sIN" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/rust, +/area/maintenance/starboard) +"sIO" = ( +/turf/open/space/basic, +/area/space/nearstation) +"sIP" = ( +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/bot, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/hallway/secondary/exit) +"sIR" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit) +"sIT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard) +"sIU" = ( +/obj/machinery/door/poddoor/shutters{ + id = "supplybridge" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sIY" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/rack, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/storage/toolbox/emergency, +/obj/item/crowbar/red, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sJa" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/neutral/corner{ + dir = 4 + }, +/area/hallway/primary/central) +"sJc" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/starboard) +"sJd" = ( +/obj/machinery/button/door{ + id = "supplybridge"; + name = "Shuttle Bay Space Bridge Control"; + pixel_y = 27; + req_access_txt = "0" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Bridge Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sJe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sJg" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard) +"sJi" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sJj" = ( +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sJk" = ( +/obj/machinery/light, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/escape{ + dir = 10 + }, +/area/hallway/secondary/exit) +"sJn" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/crew_quarters/bar/atrium) +"sJo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable/white{ + icon_state = "2-8" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/starboard/central) +"sJq" = ( +/obj/structure/sign/directions/engineering{ + desc = "A sign that shows there are doors here. There are doors everywhere!"; + icon_state = "doors"; + name = "WARNING: EXTERNAL AIRLOCK" + }, +/turf/closed/wall, +/area/maintenance/starboard) +"sJx" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hydroponics) +"sJy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/tcommsat/server) +"sJA" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side, +/area/hallway/primary/central) +"sJD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall/r_wall/rust, +/area/tcommsat/server) +"sJG" = ( +/turf/closed/wall/r_wall/rust, +/area/engine/supermatter) +"sJH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/maintenance/port) +"sJI" = ( +/turf/closed/wall/rust, +/area/library) +"sJJ" = ( +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hallway/primary/central) +"sJK" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/hallway/primary/central) +"sJL" = ( +/turf/closed/wall/r_wall, +/area/science/research) +"sJN" = ( +/turf/closed/wall/rust, +/area/maintenance/starboard) +"sJO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault/side, +/area/tcommsat/server) +"sJP" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side, +/area/tcommsat/server) +"sJR" = ( +/obj/structure/sign/poster/contraband/random, +/turf/closed/wall/rust, +/area/maintenance/starboard/aft) +"sJS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken7" + }, +/area/library) +"sJT" = ( +/turf/closed/wall/rust, +/area/medical/morgue) +"sJV" = ( +/turf/closed/wall/r_wall/rust, +/area/tcommsat/server) +"sJX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/library) +"sKa" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/science/research) +"sKd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken" + }, +/area/library) +"sKe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood{ + broken = 1; + icon_state = "wood-broken2" + }, +/area/library) +"sKf" = ( +/turf/closed/wall/rust, +/area/science/research) +"sKh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/science/research) +"sKj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault/telecomms{ + dir = 5 + }, +/area/tcommsat/server) +"sKn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/telecomms{ + dir = 5 + }, +/area/tcommsat/server) +"sKp" = ( +/turf/closed/wall/rust, /area/medical/medbay/zone3) -"swv" = ( +"sKx" = ( +/turf/closed/wall/r_wall/rust, +/area/maintenance/port) +"sKB" = ( +/turf/closed/wall/rust, +/area/security/checkpoint) +"sKE" = ( +/turf/closed/wall/rust, +/area/maintenance/port) +"sKH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/rust, +/area/maintenance/port) +"sKI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/rust, +/area/maintenance/port) +"sKJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/science/robotics/lab) +"sKL" = ( +/obj/structure/sign/poster/contraband/random, +/turf/closed/wall/rust, +/area/maintenance/port) +"sKP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/science/robotics/mechbay) +"sKQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/science/robotics/lab) +"sKW" = ( +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/port) +"sKZ" = ( +/turf/closed/wall/r_wall/rust, +/area/science/xenobiology) +"sLc" = ( +/obj/structure/barricade/wooden, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 2 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sLf" = ( +/turf/closed/wall/rust, +/area/chapel/main) +"sLg" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/maintenance/starboard/aft) +"sLm" = ( +/turf/closed/wall/rust, +/area/hallway/secondary/entry) +"sLw" = ( +/obj/structure/sign/electricshock, +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/ai) +"sLx" = ( +/obj/structure/table, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/camera{ + c_tag = "AI Chamber - Core"; + dir = 2; + name = "core camera"; + network = list("RD") + }, +/obj/machinery/cell_charger, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/ai) +"sLy" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLz" = ( +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/table, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/ai) +"sLA" = ( +/obj/structure/sign/electricshock, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) +"sLB" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/ai) +"sLC" = ( +/obj/machinery/porta_turret/ai{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) +"sLD" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLE" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLF" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLI" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/ai) +"sLJ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault/corner, +/area/ai_monitored/turret_protected/ai) +"sLL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AI Core shutters"; + name = "AI core shutters" + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/ai) +"sLM" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault/corner{ + dir = 8 + }, +/area/ai_monitored/turret_protected/ai) +"sLN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/ai) +"sLP" = ( +/obj/machinery/turretid{ + control_area = "/area/ai_monitored/turret_protected/ai"; + icon_state = "control_stun"; + name = "AI Chamber turret control"; + pixel_x = 3; + pixel_y = -23 + }, +/obj/machinery/door/window{ + base_state = "leftsecure"; + dir = 8; + obj_integrity = 300; + icon_state = "leftsecure"; + name = "Primary AI Core Access"; + req_access_txt = "16" + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 4; + pixel_y = 33 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel/vault{ + dir = 6 + }, +/area/ai_monitored/turret_protected/ai) +"sLQ" = ( +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 30; + pixel_y = 30 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = 23; + pixel_y = -23 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLR" = ( +/obj/machinery/door/window{ + base_state = "rightsecure"; + dir = 4; + obj_integrity = 300; + icon_state = "rightsecure"; + name = "Primary AI Core Access"; + req_access_txt = "16" + }, +/obj/machinery/camera{ + c_tag = "AI Chamber - Core"; + dir = 2; + name = "core camera"; + network = list("RD") + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/vault{ + dir = 10 + }, +/area/ai_monitored/turret_protected/ai) +"sLS" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/ai) +"sLT" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -28 + }, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLV" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + freerange = 1; + listening = 1; + name = "Common Channel"; + pixel_x = -27; + pixel_y = -7 + }, +/obj/item/device/radio/intercom{ + anyai = 1; + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_y = -27 + }, +/obj/item/device/radio/intercom{ + anyai = 1; + broadcasting = 0; + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 27; + pixel_y = -7 + }, +/obj/effect/landmark/start/ai, +/obj/machinery/button/door{ + id = "aicorewindow"; + name = "AI Core shutters control"; + pixel_x = 24; + pixel_y = -22; + req_access_txt = "16" + }, +/obj/machinery/button/door{ + id = "aicoredoor"; + name = "AI Chamber entrance shutters control"; + pixel_x = -23; + pixel_y = -23; + req_access_txt = "16" + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLX" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sLY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/ai) +"sLZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/ai) +"sMa" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/vault/corner{ + dir = 4 + }, +/area/ai_monitored/turret_protected/ai) +"sMc" = ( +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMd" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/camera{ + c_tag = "AI Chamber - Core"; + dir = 2; + name = "core camera"; + network = list("RD") + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/ai_monitored/turret_protected/ai) +"sMe" = ( +/obj/machinery/power/apc{ + aidisabled = 0; + dir = 1; + name = "AI Chamber APC"; + areastring = "/area/ai_monitored/turret_protected/ai"; + pixel_y = 24 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault/corner{ + tag = "icon-vaultcorner (NORTH)"; + icon_state = "vaultcorner"; + dir = 1 + }, +/area/ai_monitored/turret_protected/ai) +"sMg" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMl" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/ai) +"sMm" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMn" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/ai) +"sMq" = ( +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/aisat_interior) +"sMr" = ( +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sMv" = ( +/obj/item/crowbar, +/obj/item/wrench, +/obj/item/device/mmi, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ai_monitored/turret_protected/ai) +"sMw" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/ai) +"sMx" = ( +/obj/item/folder/blue, +/obj/item/device/assembly/flash/handheld, +/obj/structure/table, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ai_monitored/turret_protected/ai) +"sMD" = ( +/turf/closed/wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sME" = ( +/turf/closed/wall/rust, +/area/ai_monitored/turret_protected/aisat_interior) +"sMG" = ( +/obj/machinery/teleport/hub, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sMH" = ( +/obj/machinery/teleport/station, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sMI" = ( +/obj/machinery/computer/teleporter, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sMK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/aisat_interior) +"sML" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/highsecurity{ + locked = 1; + name = "MiniSat Chamber"; + req_access_txt = "16" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "aicoredoor"; + name = "AI Core Access" + }, +/obj/machinery/flasher{ + id = "AI"; + pixel_x = -26 + }, +/obj/item/device/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "AI Intercom"; + pixel_x = 28 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/vault{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sMO" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/structure/cable/white{ + icon_state = "2-4" + }, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sMP" = ( +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sMQ" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/sign/electricshock{ + pixel_y = 32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sMT" = ( +/obj/structure/closet/emcloset/anchored, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sMU" = ( +/obj/structure/sign/vacuum, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sMV" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/camera{ + c_tag = "AI Satellite - Access"; + dir = 4; + name = "ai camera"; + network = list("Sat"); + start_active = 1 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sMW" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sMX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/obj/item/device/radio/intercom{ + broadcasting = 1; + frequency = 1447; + listening = 0; + name = "AI Intercom"; + pixel_x = 26; + pixel_y = 26 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 5 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sMY" = ( +/obj/structure/sign/securearea, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sMZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/vault/side{ + dir = 9 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNa" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 1 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 5 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNc" = ( +/obj/structure/sign/securearea, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/turret_protected/aisat_interior) +"sNd" = ( +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/meter, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNe" = ( +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Waste Out"; + on = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNg" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sNh" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plating/airless/astplate, +/area/ai_monitored/turret_protected/aisat_interior) +"sNj" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNk" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "MiniSat External Access"; + req_access = null; + req_access_txt = "65" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNm" = ( +/obj/structure/transit_tube/station/reverse/flipped{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNn" = ( +/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNo" = ( +/obj/machinery/turretid{ + control_area = "/area/ai_monitored/turret_protected/aisat_interior"; + name = "AI Satellite turret control"; + pixel_x = 0; + pixel_y = -24 + }, +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber"; + req_one_access_txt = "32;19" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNq" = ( +/obj/machinery/ai_slipper{ + uses = 10 + }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/aisat_interior) +"sNr" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNs" = ( +/obj/machinery/door/airlock/hatch{ + name = "MiniSat Antechamber"; + req_one_access_txt = "32;19" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNt" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNu" = ( +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNv" = ( +/obj/machinery/camera{ + c_tag = "AI Satellite - Maintenance"; + dir = 8; + name = "ai camera"; + network = list("Sat"); + start_active = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNx" = ( +/obj/structure/sign/securearea, +/turf/closed/wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sNy" = ( +/obj/machinery/door/airlock/external{ + cyclelinkeddir = 1; + name = "MiniSat External Access"; + req_access = null; + req_access_txt = "65" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/vault, +/area/ai_monitored/turret_protected/aisat_interior) +"sNA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -28 + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 10 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNB" = ( +/obj/structure/transit_tube, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 6 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "AI Satellite - Antechamber"; + dir = 4; + name = "ai camera"; + network = list("Sat"); + start_active = 1 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 8 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNF" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/turret_protected/aisat_interior) +"sNG" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/ai_monitored/turret_protected/aisat_interior) +"sNI" = ( +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/mineral/plasma{ + amount = 20 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 + }, +/obj/machinery/power/apc{ + dir = 2; + name = "MiniSat APC"; + areastring = "/area/ai_monitored/turret_protected/aisat_interior"; + pixel_y = -27 + }, +/obj/structure/cable/white, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sNJ" = ( +/obj/machinery/recharge_station, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sNK" = ( +/obj/item/storage/toolbox/mechanical{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/electrical, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/firealarm{ + pixel_y = -26 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sNM" = ( +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/space/nearstation) +"sNP" = ( +/obj/structure/transit_tube, +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/ai_monitored/turret_protected/aisat_interior) +"sNQ" = ( +/obj/structure/sign/securearea, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/aisat_interior) +"sNS" = ( +/obj/machinery/porta_turret/ai{ + installation = /obj/item/gun/energy/e_gun + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sNT" = ( +/obj/item/stack/sheet/metal, +/obj/item/stack/sheet/glass{ + amount = 20; + pixel_x = 0; + pixel_y = 0 + }, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/assembly/flash/handheld, +/obj/item/device/mmi, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/structure/table, +/obj/machinery/status_display{ + pixel_y = -32 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sNU" = ( +/obj/machinery/porta_turret/ai{ + installation = /obj/item/gun/energy/e_gun + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm{ + pixel_y = -26 + }, +/turf/open/floor/plasteel/vault/side, +/area/ai_monitored/turret_protected/aisat_interior) +"sOb" = ( +/obj/structure/transit_tube, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, +/area/space/nearstation) +"sOj" = ( +/obj/structure/lattice/catwalk, +/obj/structure/transit_tube/crossing, +/turf/open/space/basic, +/area/space/nearstation) +"sOk" = ( +/obj/structure/sign/securearea, +/turf/closed/wall, +/area/space/nearstation) +"sOr" = ( +/obj/structure/transit_tube, +/obj/effect/spawner/structure/window/hollow/reinforced/middle, +/turf/open/floor/plating, +/area/bridge) +"sOs" = ( +/obj/machinery/door/airlock/command{ + name = "MiniSat Access"; + req_access_txt = "65" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"sOt" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/ai_status_display{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/bridge) +"sOu" = ( +/obj/structure/transit_tube, +/obj/effect/turf_decal/bot, +/turf/open/floor/plating, +/area/bridge) +"sOv" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/open/floor/plasteel/vault/side{ + dir = 4 + }, +/area/bridge) +"sOw" = ( +/obj/effect/turf_decal/bot, +/obj/structure/transit_tube/station/reverse{ + tag = "icon-closed_terminus0 (WEST)"; + icon_state = "closed_terminus0"; + dir = 8 + }, +/turf/open/floor/plating, +/area/bridge) +"sOx" = ( +/turf/closed/wall/r_wall, +/area/ai_monitored/nuke_storage) +"sOz" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/nuke_storage) +"sOA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/nuke_storage) +"sOB" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/circuit/green, +/area/ai_monitored/nuke_storage) +"sOD" = ( +/turf/closed/wall/r_wall/rust, +/area/ai_monitored/nuke_storage) +"sOF" = ( +/obj/structure/sign/directions/engineering{ + desc = "A direction sign, pointing out which way the Supply department is."; + dir = 4; + icon_state = "direction_supply"; + name = "supply department" + }, +/obj/structure/sign/directions/engineering{ + desc = "A direction sign, pointing out which way the Command department is."; + dir = 1; + icon_state = "direction_bridge"; + name = "command department"; + pixel_y = 8 + }, +/obj/structure/sign/directions/science{ + pixel_y = -8 + }, +/turf/closed/wall, +/area/maintenance/starboard) +"sOG" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall, +/area/maintenance/starboard) +"sOI" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/neutral/corner, +/area/hallway/primary/central) +"sOJ" = ( +/obj/structure/cable/white{ + icon_state = "0-8" + }, +/turf/open/floor/plating/airless/astplate, +/area/ruin/unpowered{ + name = "Asteroid" + }) +"sOK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/maintenance/starboard) +"sOL" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Maintenance Hatch"; + req_access_txt = "12" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) +"sOM" = ( +/turf/closed/wall, +/area/maintenance/starboard/aft) +"sON" = ( +/turf/closed/wall/rust, +/area/maintenance/starboard/aft) +"sOT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg2" + }, +/area/maintenance/starboard/aft) +"sOU" = ( +/obj/structure/girder, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sOV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sOY" = ( +/obj/structure/sign/poster/contraband/random, +/turf/closed/wall, +/area/maintenance/starboard/aft) +"sOZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sPa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) +"sPi" = ( +/obj/structure/closet/firecloset, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/maintenance/starboard/aft) +"sPk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/cable/white{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sPo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable/white{ + icon_state = "1-2" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg1" + }, +/area/maintenance/starboard/aft) +"sPI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + broken = 1; + icon_state = "platingdmg3" + }, +/area/maintenance/starboard/aft) +"sPK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, +/turf/open/floor/plating{ + burnt = 1; + icon_state = "panelscorched" + }, +/area/maintenance/starboard/aft) +"sPY" = ( +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"sPZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/stairs/right, +/area/hallway/primary/central) +"sQa" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ id_tag = "Dorm4"; @@ -34705,7 +36004,7 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"sww" = ( +"sQb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ id_tag = "Dorm1"; @@ -34719,7 +36018,7 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"swx" = ( +"sQc" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ id_tag = "Dorm2"; @@ -34733,13 +36032,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"swy" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/kink, -/turf/open/floor/plasteel/vault{ - dir = 8 - }, -/area/maintenance/port) (1,1,1) = {" aaa @@ -62097,11 +63389,11 @@ aad aad aad aGe +sIu aGe aGe aGe -aGe -aGe +sIu bwY abi aad @@ -62353,7 +63645,7 @@ aad aad aad aad -aGe +sIu aHe aIb aJh @@ -62611,14 +63903,14 @@ aad aad aad aGe -aHf +aId aIc aJi aKq aLE -bwY +sII afM -abP +abu afM abi aad @@ -62871,22 +64163,22 @@ aGe aHg aId aHe -aKr +aKq aLF bxj +sJy bxl -bxl -bxl +sJy aSO aMJ aMJ +sJV aMJ aMJ aMJ +sJV aMJ -aMJ -aMJ -abP +abu aad aad aaa @@ -63126,7 +64418,7 @@ aad aad aGe aGe -aGe +sIu aJj aKs aLG @@ -63141,10 +64433,10 @@ aTX buH buJ buO -aRB +sKn aMJ acG -ahu +sxc aad aac aaa @@ -63392,12 +64684,12 @@ aNU aOw buC bxp -aRB +sJO aPG aQG aUO buK -aRB +sKj buR aMJ afM @@ -63897,7 +65189,7 @@ aad aad aad afL -bwY +sII aJm aKv aLJ @@ -63906,12 +65198,12 @@ aNW aOx buC bxp -aRB +sJP aPG buG buI buK -aRB +sKj buR aMJ aad @@ -64150,7 +65442,7 @@ aAh aBp aCr aqz -ahu +sxc ahu ahu aaV @@ -64170,7 +65462,7 @@ blq buN buQ buU -aMJ +sJV agE afL aad @@ -64410,27 +65702,27 @@ aDn aEn aFq aGf -aHh +sIA aIe aJo aKx aLL aMN aMN -aMN +sJD aMN bxt bwW aMJ aMJ aMJ +sJV aMJ aMJ -aMJ -aMJ +sJV abi ahu -ahu +sxc aac aaa aaa @@ -64650,11 +65942,11 @@ aad aad abi ajQ -aqz +sAx arr -asy +awC atz -aus +ayb avy awC axj @@ -64903,7 +66195,7 @@ aaW abj abj abu -abP +abu aad aad acF @@ -64920,7 +66212,7 @@ azj aAk aBq aCu -aDp +sGU aEp aFs aGh @@ -65166,7 +66458,7 @@ abi abu awL art -asA +atB atB auu avA @@ -65186,8 +66478,8 @@ aIh aJr aKz aLO -aMQ -aMQ +aOB +aOB aOB aLU aQK @@ -65199,7 +66491,7 @@ aVL aUR aUQ bvo -ahu +sxc aad aac bvI @@ -65428,9 +66720,9 @@ atC auv avB awF -axl +awF aye -axl +awF aAm aBs aCw @@ -65446,7 +66738,7 @@ buW aMR aMX aMX -buW +sJG aQK aRI aSS @@ -65457,7 +66749,7 @@ aWz aVL bvo ahu -bvh +bvg bvg aad aad @@ -65681,7 +66973,7 @@ anx aqC arv asC -atD +auw auw auw auw @@ -65712,7 +67004,7 @@ aUR aUU aWz aUQ -bvh +bvg bvo aad aad @@ -65930,7 +67222,7 @@ abu abj aad aaV -abP +abu amG anx aoq @@ -65950,7 +67242,7 @@ aBu aCy aDp aEt -aEt +sHV aGg aHn aIk @@ -65970,7 +67262,7 @@ aUU aWz aVL bvg -bvh +bvg aad aad aad @@ -66188,7 +67480,7 @@ abj abj abu abu -adw +acF anx aor apv @@ -66211,8 +67503,8 @@ aFw aGk aHo aIl -aJv -aKB +aLR +aMU aLR aMU aOa @@ -66440,25 +67732,25 @@ aad aad aad abi -ail +ael abj abu abu alG -adw +acF anx aoq apw aqF ary asF -atG +azm auz avE awI axn ayi -azn +azo aAo aBw aCA @@ -66483,7 +67775,7 @@ aUS aUU aWz aVL -bvh +bvg aad aad aad @@ -66732,7 +68024,7 @@ aMW aMW aOD buW -aQQ +aQK aRN aSX aPL @@ -66963,7 +68255,7 @@ agE abi aad abi -awL +sAy arA asH atI @@ -66976,7 +68268,7 @@ azp aAq aBy aCC -aqz +sAx aEt aEt aGg @@ -67001,11 +68293,11 @@ bvo aOH aZo baj -baj +sKE baj aZo aZo -baj +sKE baj aad aad @@ -67237,12 +68529,12 @@ aDs aEx aFz aGm -aHs +aHl aIp -aJx +aJw aKE aLU -aMY +aOE aOb aOE aLO @@ -67255,15 +68547,15 @@ aUU aWz aUQ aad -aOH +sKx aZp bak bbc bbQ -swy +bcF bdD beu -baj +sKE aad aad aad @@ -67460,7 +68752,7 @@ aac aad aad aad -aah +swF aad aad aad @@ -67497,15 +68789,15 @@ aGn aHt aIq aJy -aKF +aJy aLV aMZ -aOc +aMZ aOF aPM aQS aRQ -aSQ +bxu aUa aUU aUU @@ -67517,7 +68809,7 @@ aZq bal bbd bbR -bbR +bcG bdE bev baj @@ -67727,16 +69019,16 @@ afL ahu agF agF +swZ agF agF agF -agF -agF +swZ agF agF aqH arC -arC +sBu arC auE avJ @@ -67766,7 +69058,7 @@ aTa aEt bvo bvg -bvh +bvg bvo bvo aOH @@ -67981,7 +69273,7 @@ aad aad abT agE -ahu +sxc aim aiR ajR @@ -68009,7 +69301,7 @@ aEA aDv aDv aHv -aEt +sHV aJA aKH aLX @@ -68017,14 +69309,14 @@ aEt aEt aOH aPO +sJH aQU aQU +sJH +sJH aQU aQU -aQU -aQU -aQU -aQU +sJH aQU aQU aZs @@ -68238,7 +69530,7 @@ aad aad afL abj -ahu +sxc ain aiS ajS @@ -68278,16 +69570,16 @@ bxR aRS aTb aUb -aRS +aVM aVM aTb -aXd -aQV aTb -aZt +aTb +aVM +aTb bao bbf -bbU +aZA bbR bdF bcK @@ -68529,7 +69821,7 @@ aKJ aLZ aNb aEt -aOJ +bbg aPQ aQW aQW @@ -68541,7 +69833,7 @@ aQW aQW aQW aQW -aQW +sJI aQW bbg aZz @@ -68747,7 +70039,7 @@ aad aad abi abi -abT +swN abi abT acG @@ -68768,7 +70060,7 @@ asM agF auI avN -aqz +sAx axw ayo azv @@ -68786,7 +70078,7 @@ aKK aMa aNc aEt -aOK +bbg aPR aQW aRT @@ -68801,11 +70093,11 @@ aYw aZu aQW aYA -aPV +sKH bcK bdH bex -baj +sKE aad aad aad @@ -69006,8 +70298,8 @@ aaW abj adv ael -abT -abP +swN +abu agF ahv aiq @@ -69042,14 +70334,14 @@ aJE aKL aMb aNd -aEt +sHV aOL aPS -aQW -aRU +sJI +aSc aTc aUd -aSa +sKd aVO aWB aVO @@ -69060,7 +70352,7 @@ aQW bbh aPV baj -bca +sKL baj aZo aad @@ -69265,7 +70557,7 @@ abu acF abi afN -agF +swZ ahw air aiW @@ -69300,7 +70592,7 @@ aKM aMa aNe aEt -aOL +aYA aPT aQW aRV @@ -69314,7 +70606,7 @@ aXM aYy aZw aQW -bbi +bbg bbV bcL bdI @@ -69518,7 +70810,7 @@ abj abj abS acD -adw +acF aem afb adw @@ -69570,7 +70862,7 @@ aVQ aQW aQW aQW -aQW +sJI bbj bbW bcM @@ -69776,9 +71068,9 @@ abj abu acE adx -aen +acF adz -afc +adw agF ahy ait @@ -69819,15 +71111,15 @@ aPV aQW aRX aTf -aUf +sJX aUX aVR aVQ aXg aQW aYz -aZx -aRS +aTb +aTb bbk bbV bcN @@ -69839,7 +71131,7 @@ aad aad abT abT -abT +swN abT abT aad @@ -70032,12 +71324,12 @@ aad aaW abu acF -ady +acF aeo abi -afO -agF +acF agF +swZ agF aiZ ajZ @@ -70076,13 +71368,13 @@ aPW aQW aRY aTg -aUf +sJX bxS aVS aWE aXh aQW -aYA +bbg aZy bap bap @@ -70090,10 +71382,10 @@ bbX bcO bdL beB -baj -bfu +sKE bfu bfu +sLf bfu bhZ biF @@ -70290,7 +71582,7 @@ abi abi acG adz -abT +swN abi acF agG @@ -70333,21 +71625,21 @@ aPX aQX aRZ aTh -aUf +sJX aUY aVT aVQ aXi aQW -aYB +bbg aZz baq bbl bbY bcP bdM -bcQ -baj +bcP +sKE bfv bfS bgB @@ -70546,13 +71838,13 @@ aad aad abT acH -acF +adw aep -afc acF +aem agH ahA -agF +swZ ajb akb ala @@ -70568,7 +71860,7 @@ agF auP avU anH -axC +sPZ axC axC aAC @@ -70591,17 +71883,17 @@ aQY aSa aSa aUg -aUX +sKe aVU aWE aXj -aQW +sJI aYC aZA bar bbm bbZ -bcQ +bcP bcP bcP baj @@ -70613,7 +71905,7 @@ bib biH bjh bfu -bfu +sLf bfu aac aaa @@ -70804,11 +72096,11 @@ aad abT abT abT +swN +swN abT abT -abT -abT -abT +swN agF ajc ajc @@ -70846,14 +72138,14 @@ aOR aPZ aQZ aSb -aSb +sJS aUh aUZ aVV aVQ aXk aQW -aYD +bbg aPV bas bbn @@ -71114,7 +72406,7 @@ aYE aZB bap bap -bap +sKI bap bap bap @@ -71338,7 +72630,7 @@ asT atN auS avX -awQ +sDl axE ayw azA @@ -71349,7 +72641,7 @@ aDD aEL awQ aGz -aHG +aGM aIB aJJ aKQ @@ -71368,13 +72660,13 @@ aWG aXl aQW aYF -bxU +bxR aRS -bbo +aTb bcb bcS -bdO -beD +aTb +aVM beR bfy bfT @@ -71385,7 +72677,7 @@ biG bjk bjA bjL -bfu +sLf aaa aaa aaa @@ -71572,7 +72864,7 @@ aac aac aad aad -abv +swG acK adC aes @@ -71585,7 +72877,7 @@ ajf ake ald abt -abt +syS abt abt apI @@ -71604,7 +72896,7 @@ aBP aCO aDE aEM -awQ +sDl aGA aHH aIC @@ -71617,7 +72909,7 @@ aOU aQc aRb aRb -aRb +sJT aRb aRb aRb @@ -71627,7 +72919,7 @@ aSh aSh aSh aSh -aSh +sKp bcc bcT bdP @@ -71639,7 +72931,7 @@ bgE bhr bif biL -bfu +sLf bfu bfu bfu @@ -71879,7 +73171,7 @@ aUk aVc aVY aWH -aSh +sKp aXO aYG aZC @@ -71889,7 +73181,7 @@ aSh aSh aSh aSh -beT +bbg bfA bfu bgF @@ -72102,7 +73394,7 @@ alU amP abt abt -apI +sAc aqU arR asW @@ -72112,7 +73404,7 @@ avZ awQ awQ awQ -awQ +sDl aAH bxK awQ @@ -72120,11 +73412,11 @@ awQ awQ awQ aGC -aHJ -aIB -aIB +aGK +sIK aIB aIB +sIK aIB aIB aOW @@ -72146,7 +73438,7 @@ bcd bcU bdQ aSh -beU +bbg bfA bfV bgG @@ -72346,7 +73638,7 @@ abv abv abv abv -abv +swG afi afU afU @@ -72357,7 +73649,7 @@ akh alf alV amQ -anK +anJ aoD apI aqV @@ -72366,16 +73658,16 @@ asX atR auV awa -awQ +sDl axH ayz azD aAH aBQ -sww +sQb aDG aEO -awQ +sDl aGD aHK aIE @@ -72402,7 +73694,7 @@ aSh bce bcV bdR -aSh +sKp beV bfB bfW @@ -72413,7 +73705,7 @@ biO bfu bfu bfu -bfu +sLf aaa aaa aaa @@ -72615,7 +73907,7 @@ abt alW amR abt -abt +syS apI aqW arT @@ -72640,7 +73932,7 @@ aJM aKU aMj aNo -aOg +aJM aOY aQf abt @@ -72660,7 +73952,7 @@ bcf bcW blt aSh -beW +aOL bfA bfX bgI @@ -72859,12 +74151,12 @@ aad abw abw abw -abw +swC abw abw afW abw -abw +swC abw ajk akj @@ -72893,14 +74185,14 @@ awQ bxN aHM aHM -aHM +sIB aHM aHM aHM aHM aOZ bxQ -ayV +sJJ aSh aTm aUo @@ -72917,7 +74209,7 @@ bcg bcX bdS aSh -bbg +aOL bfy bfY bgJ @@ -73113,7 +74405,7 @@ aad aad aad aad -abw +swC abX acO adG @@ -73126,12 +74418,12 @@ abw ajl akk alg -alg +syC alg alg alg apJ -apJ +sAz apI aHF atU @@ -73140,14 +74432,14 @@ apI awQ axJ ayB -swv +sQa aAH aBS -swx +sQc ayz aEQ -awQ -aGF +sDl +arY aHM aIG aJN @@ -73174,7 +74466,7 @@ aUn aWb bdT aSh -beY +bbg bfA bfZ bgK @@ -73410,11 +74702,11 @@ aIH aJO aKW aMl -aIH +sJx aOh aPb aQd -azU +sJK aSi aTo aUq @@ -73444,14 +74736,14 @@ aaa aaa aaa bgU -bkh +bkj bgU aae aaa aaa aae bgU -bkh +bkj bgU aaa aaa @@ -73641,7 +74933,7 @@ blf akm ali alZ -amU +anM bxB anM apL @@ -73653,16 +74945,16 @@ atc awe awQ awQ +sDl awQ awQ awQ -awQ -awQ +sDl awQ awQ awQ arY -aHM +sIB aII aJP aKX @@ -73695,7 +74987,7 @@ bgM bhx bin biT -bfu +sLf aae aae aae @@ -73906,18 +75198,18 @@ alg arX atd atW -atd -atd +sCr +aBU bxE -axL -ayD -atd -atd aBU -ayD -atd aBU -aFM +atd +atd +sFO +aBU +sGW +aBU +atd aGH aHM aIJ @@ -73945,7 +75237,7 @@ bci bcZ bdW aSh -beU +bbg bfA bfu bfu @@ -73968,7 +75260,7 @@ bgU bkj bgU bjY -bgP +sLm bgU bgU aae @@ -74156,7 +75448,7 @@ ako alj amb amW -anO +amW aoH apN alg @@ -74166,12 +75458,12 @@ ath auZ auZ auZ +sDK auZ auZ auZ auZ -auZ -auZ +sDK auZ auZ auZ @@ -74189,7 +75481,7 @@ aRf aSk aTr aUt -aVk +aVl aWg aRf aXr @@ -74418,7 +75710,7 @@ aoI apO alg arZ -atf +sBv atX ava awf @@ -74459,7 +75751,7 @@ aWK bda bdX aSh -bfc +aYF bfE bdO bgO @@ -74652,11 +75944,11 @@ aaf aaa aai aay -aak +swv aam aak abw -abw +swC abw abw abw @@ -74671,10 +75963,10 @@ alg amd amY alg +syC alg alg -alg -asa +arY atf atY avb @@ -74688,7 +75980,7 @@ aBW aCQ aDK aET -aAL +sHZ aGK aHP aIM @@ -74716,7 +76008,7 @@ bcj bdb bdY aSh -bar +sKW bfF aZo bgP @@ -74915,8 +76207,8 @@ abk aby acd acU -adM -adM +aby +aby bxx age agV @@ -74941,7 +76233,7 @@ axN ayG azG aAM -atZ +sFP aCR aDL aEU @@ -74956,7 +76248,7 @@ aNv aOh aPb aQg -aRj +aRg aSn aTu aUw @@ -75193,8 +76485,8 @@ ath aua avd awi -awi -awi +sDn +sDn ayH azH auZ @@ -75215,7 +76507,7 @@ aPh aQk aRf aRg -aTv +aRf aRg aRf aRg @@ -75230,7 +76522,7 @@ aSh aWK bea beG -baj +sKE bfH baj bgQ @@ -75433,7 +76725,7 @@ aak aak aak aak -aak +swv aak aak ajq @@ -75443,8 +76735,8 @@ ame ame abt aoL -apR -ara +arY +sAA ara ara aub @@ -75460,7 +76752,7 @@ aCT aDN aAL aAL -apS +aHF aHQ aIP aJV @@ -75685,14 +76977,14 @@ aba abm abB acg -acX +swJ adO aez afq agg agX ahP -adQ +sOx ajr akt alm @@ -75948,7 +77240,7 @@ aeA afr afr agY -ahQ +agi adO aji aku @@ -76200,9 +77492,9 @@ abo abD aci acZ -adQ +sOx aeB -adQ +sOz agh agZ ahR @@ -76251,7 +77543,7 @@ aWQ abt aYc aYW -byo +sKB baI bby bcn @@ -76459,7 +77751,7 @@ acj ada adR aeC -adQ +sOA agi aha ahS @@ -76709,14 +78001,14 @@ aal aau aaG aaR -abc -abo -abD +swx +swy +swD aci adb -adQ +sOx aeD -adQ +sOB agj ahb ahT @@ -76762,7 +78054,7 @@ aUy aUy aUy aWS -abt +syS aYe aYW byo @@ -76977,7 +78269,7 @@ afr afr ahc ahU -adQ +sOD ajv aky alr @@ -77028,7 +78320,7 @@ byo byo bdh byo -byo +sKB byo bfK avV @@ -77205,11 +78497,11 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +aac +aad +aad +aad +aac aaa aaa aaa @@ -77227,14 +78519,14 @@ abe abm abG acl -acX +swK adO aeF afs agk ahd ahV -adQ +sOx ajw akz als @@ -77264,7 +78556,7 @@ aHU aIQ aJX aLg -aAR +sJn ara aOr aPo @@ -77460,15 +78752,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aac +aad +aad +aad +aad +aad +aac +aac aaa aaa aaa @@ -77485,8 +78777,8 @@ aak abA acf add -aak -aak +swv +swv aak aak aak @@ -77521,9 +78813,9 @@ aCe aCe aJY aLh -aMv +aAT ayP -ayV +sJA aPp aQt blp @@ -77556,14 +78848,14 @@ aaa bjO bjZ bka -bkm +bkb bka bkb bkb bkb bkb bkG -bkm +bkb bka bka aaa @@ -77713,28 +79005,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aad +aad +aac +aad +aad +aad +aad +aad +sMD +sMD +sME +sNx +aae +aae +aae +aae +aae aaf aae aae -aak +swv aaK aaT abg @@ -77747,7 +79039,7 @@ aeG aft agl ahe -ahW +agl abq ajy akB @@ -77778,7 +79070,7 @@ aCe aIR aJZ aLh -aMw +aso ayP ayP aPq @@ -77806,7 +79098,7 @@ bgl bgX bhL biA -bgP +sLm aae aae aae @@ -77968,25 +79260,25 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aac +aad +aad +aad +aad +aad +aad +aad +aad +aad +sME +sMT +sNj +sNy +sNM +sNM +sNM +aae aaa aaa aae @@ -78002,7 +79294,7 @@ adf adT aeH afu -agm +acn ahf ahX aiC @@ -78035,7 +79327,7 @@ aHV aIS aKa aLh -aMx +sJo aNA ayP aPr @@ -78057,12 +79349,12 @@ bct bdl beg beL -bfi -bfP +aYu bfP bfP bfP bfP +sKZ bfP bfP bfP @@ -78224,26 +79516,26 @@ aaa aaa aaa aaa +aac +aac +aad +aad +aad +aad +aad +aad +aad +aad +aad +sMq +sMr +sMU +sNk +sMq +sMr aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae aaa aaa aae @@ -78251,10 +79543,10 @@ aaa aan aay aak -aaj +sOs aak abs -abs +swz abs abs aeI @@ -78269,10 +79561,10 @@ alu amn ane alu +syT alu alu -alu -asm +asp atm aui avn @@ -78293,7 +79585,7 @@ aIT aKb aLh aCe -asn +aso ayP aPs aQv @@ -78313,8 +79605,8 @@ bbD bxV bdm beh -beL -bfj +sKP +sOV bfP blu bgY @@ -78481,36 +79773,36 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaa +aac +aad +aad +aad +sxC +sxC +adQ +adQ +adQ +adQ +sxC +sMr +sMG +sMV +sNl +sNA +sMr aaa aaa aae aaa +aaa aae -abs +aaa +aaa +aaa +aak +sOt +sOv +swz aco adg adU @@ -78528,7 +79820,7 @@ anf anU aoW aqc -alu +syT bxC atm auj @@ -78538,7 +79830,7 @@ axb ara ayQ azN -aAU +asp aCe aCY aDV @@ -78550,7 +79842,7 @@ aIU aKc aLi aCe -asm +asp ayP aPt aQv @@ -78571,8 +79863,8 @@ bcv bdn bei beL -bfk -bfP +aTS +sKZ bgn bgZ bhM @@ -78580,7 +79872,7 @@ bfP bgn bgZ bhM -bfP +sKZ aad aad aad @@ -78737,37 +80029,37 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaf -aae -aag -aaf -aaf -aae -abJ +aac +aac +aad +aad +adQ +sLB +adQ +adQ +adQ +sxC +adQ +sLB +sMr +sMH +sMW +sNm +sNB +sNP +sOb +sOb +sOj +sOb +sOb +sOj +sOb +sOb +sOb +sOr +sOu +sOw +abs acp adh adV @@ -78828,7 +80120,7 @@ bcu bdo bej beL -aTR +sPI bfP bgo bha @@ -78994,37 +80286,37 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaf -aaa +aac +aad +aad +sxC +adQ +sLC +sLJ +ahQ +sLT +ahQ +sMa +sLC +sMr +sMI +sMX +sNn +sNC +sNQ aaa aaa aae aaa +aaa aae -abJ +aaa +aaa +aaa +aak +swv +aak +abs acq adi adW @@ -79044,7 +80336,7 @@ aoX aqe alu asp -atm +sBw aul avq awv @@ -79059,7 +80351,7 @@ aDX aFe aFW aGW -aCe +sIC aIW aKe aLk @@ -79085,7 +80377,7 @@ aZe bdp aZe beL -bfi +aYu bfP bgp bhb @@ -79250,28 +80542,28 @@ aaa aaa aaa aaa +aac +aac +aad +adQ +adQ +sLw +sLD +sLK +sLO +sLO +sLY +sMb +sLD +sMq +sMr +sMY +sNo +sMr +sMq +sMr aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aae aaa aaa aae @@ -79300,13 +80592,13 @@ anX ani aqf alu -asp +sAX atn aum avr aww aum -aum +sDM ayT azQ aAW @@ -79507,28 +80799,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aad +aad +adQ +adQ +sLx +ahQ +adQ +sLP +adQ +adQ +sMc +sMk +sMv +sMK +sMZ +sNp +sNE +sNS +sMr +aad +aae aaa aaa aae @@ -79538,7 +80830,7 @@ aaa aae aaa abs -abs +swz acs adk adX @@ -79557,27 +80849,27 @@ anY aoY aqg alu -asq +aMx ato aun avs awx axe -axU +ato axe azR aAX -axU -aDb axe -aFg -avs +aDb ato -aHX +aFg +axe avs +axe +sIL aKf ato -avs +axe aNE ayP blo @@ -79764,30 +81056,30 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aad +aad +sxC +adQ +sLy +sLE +sLL +sLQ +sLV +adQ +sMd +sMl +sMw +sML +sNa +sNq +sNF +sNT +sMr +aad +sOk +aae +aae aaf aaa aaa @@ -79802,14 +81094,14 @@ adX aeO afA agt -abs +swz aic aiG ajE akI alu alu -alu +syT alu alu alu @@ -79818,7 +81110,7 @@ abt abt abt abt -abt +syS abt abt abt @@ -79830,7 +81122,7 @@ abt abt abt abt -abt +syS abt abt abt @@ -79856,7 +81148,7 @@ baa bds baa aZl -bfi +aYu bfP bgs bhb @@ -80021,28 +81313,28 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aad +aad +adQ +sxC +sLz +sLF +adQ +sLR +adQ +adQ +sMe +sMm +sMx +sMr +sNb +sNr +sNG +sNU +sMq +aad +aad aaa aaa aae @@ -80051,12 +81343,12 @@ aaa aad aah aad +swz abs abs abs abs -abs -abs +swz abs abs abs @@ -80096,11 +81388,11 @@ aNF ank aPw aQz -aVA -aVA +sJL +sJL aTO aUH -aVA +sKf aVA aVA aXF @@ -80113,7 +81405,7 @@ bcy bdt bem beO -bfj +sOV bfP bgo bhe @@ -80279,27 +81571,27 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad +adQ +adQ +sLA +sLG +sLM +sLS +sLS +sLZ +sMf +sMn +sMr +sMr +sNc +sNs +sMr +sMr +sMq +aad +aad aaa aaa aae @@ -80308,7 +81600,7 @@ aad aad aad aad -bxZ +swA abL acu adm @@ -80317,7 +81609,7 @@ bym afB agu ahj -adY +bym aiH alz akK @@ -80329,32 +81621,32 @@ apa aqi blh arj -atp +sOI aup avu atp arj arj arj -arj +sEJ aBa aBa anl aDZ -aFh +alc aFY bsz aDZ aIY aDZ -aDZ +sJa arj arj anl aPx arj aRx -aSC +sOT aTP aUI aVB @@ -80380,7 +81672,7 @@ bjb bju bjH bfP -bfP +sKZ aad aad aad @@ -80537,26 +81829,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad +adQ +sxC +sLC +sLN +ahQ +sLX +ahQ +sMg +sLC +sMr +sMO +sNd +sNt +sNI +sMr +aad +aad +aad aaa aad aah @@ -80571,10 +81863,10 @@ byi adn adn adn +swL adn adn -adn -adn +swL adn ajH ado @@ -80584,36 +81876,36 @@ adp aob apb anQ -alt -ald +sOF +sOG atq -abt -abt -atq -abt -abt +aRz +aRz +sOK +aRz +aRz bli azU aBb aCh aDc aEa +sHz aFi -blX bsA aHY aIZ blm -ahZ +azU aMy aHY aDc aPy aQA -abt -aSD -aTQ -aUI +sOM +sOU +sOV +sKa aVC aWt aWZ @@ -80627,7 +81919,7 @@ bcA bdv beo aZl -bfo +sPK bfP bgm bhg @@ -80795,25 +82087,25 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad +adQ +sLI +adQ +adQ +adQ +adQ +sxC +sLB +sMr +sMP +sNe +sNu +sNJ +sMr +aad +aad +aac aaa aad aad @@ -80841,35 +82133,35 @@ ado aoc apc aqj -abt +aRz asr -atr -abt +bfp +aRz avv acx axf -abt -abt -abt -abt -abt -abt -axW +aRz +aRz +sEK +sJN +aRz +aRz +aRz +aRz blL -blY bsB -axW -abt -abt -abt -abt +aRz +aRz +aRz +sOL +aRz abt abt anQ anQ -abt +sON aSE -aTR +sOV aUI aVD aWu @@ -80877,19 +82169,19 @@ aXa aXI aYs aZj -bae +bac baY bbM bxW bdw bep aZl -bfp +sPI bfP bgm bhh bgm -bfP +sKZ bjd bjw bjI @@ -81053,24 +82345,24 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aad +aad +adQ +adQ +adQ +sxC +sxC +adQ +sxC +sMr +sMQ +sNf +sNv +sNK +sMq +aad +aad +aac aaa aaa aad @@ -81079,7 +82371,7 @@ aac aad aad aad -bxZ +swA byg byk adn @@ -81087,7 +82379,7 @@ aea aeQ afD agw -aeV +ajI aid aiJ agw @@ -81098,30 +82390,30 @@ anm aod apd aqk -abt +aRz ass -ats -abt +aTR +sJN avw awz axg -abt -aaa -aaa -aaa -aaa -aaa -axW -blM -blZ +aRz +sEl +sEL +aXb +bai +aSC +aYt +aRz +bxM bsC -axW -aaa -aaa -aaa -aaa -aaa -aaa +aSH +bvh +sIT +sJc +sJN +aae +aae aae aae aRy @@ -81129,10 +82421,10 @@ aSF aTS aUJ aVE +sKh aVE aVE -aVE -aVE +sKh aZk baf baZ @@ -81140,9 +82432,9 @@ bbN bcB bdx beq -aZl -bfo -bfP +sKQ +sOV +sKZ bgm bhi bgm @@ -81150,7 +82442,7 @@ bfP bje bjx bjI -bfP +sKZ aad aad aad @@ -81310,23 +82602,23 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aab -aaa -aaa -aaa -aaa +aad +aad +aad +aad +aad +aad +aad +aad +aad +sMq +sMr +sNg +sMq +sMr +sMr +aad +aad aaa aaa aaa @@ -81339,9 +82631,9 @@ aad bxZ byf byl -adn -aeb -aeR +swL +aed +aeT afE agx ahl @@ -81355,41 +82647,41 @@ ado aoc apc aql -abt +aRz ast -att -abt -abt -abt -abt -abt -aaa -aaa -aaa -aaa -aaa -axW -blN -blZ +bfo +aRz +aRz +aRz +sJN +aRz +bfp +aSD +aRz +aRz +aRz +sGY +aRz +sIb bsD -axW -aaa -aaa -aaa -aaa +aRz +sIN +aRz +sJd +sJq aaa bte aPz aPz -aRz +sOM aSG aTT aUK aVF -aWv -aXb -aXJ -aYt +sOZ +sPa +sOT +sPk aZl bag bba @@ -81400,7 +82692,7 @@ ber aZl bxX bfP -bfP +sKZ bfP bfP bfP @@ -81568,22 +82860,22 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +bvI +aad +aad +aad +aad +aad +aad +aad +aad +sNh +aad +aad +aad +aad +aac aaa aaa aaa @@ -81594,13 +82886,13 @@ aad aad aad bvg -bvh -bvh +bvg +bvg adn aec aeS afF -agy +agx ahm adp aiL @@ -81612,55 +82904,55 @@ adn aoe ape aqm -abt -abN +sJN +sAY acw -abt -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -axW -blO +aXJ +aSC +aXJ +bai +aXb +sEm +aRz +sFn +sFR +sJN +sGY +aRz bmb bsE axW -aaa -aaa -aaa -aaa -aaa +aae +sIU +sJe +sIU +aae bte aPA aQB -aRz -aSH -aRz -aSH +sOM +sJR +sON +sOY aVG -aSH -aRz -aSH +sJR +sOM +sOY aYu aZm bah bah bah -bah +sKJ bah bah beQ -bfp -aRz +sOV +sOM bgu bhj bhT -aRz +sOM aad bvg aac @@ -81826,18 +83118,18 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aac +aad +aac +aad +aad +aad +aad +aad +aac +aac +aad aaa aaa aaa @@ -81869,53 +83161,53 @@ ann aof apf aqn -abt +aRz abO -atv -abt -aad -aad -aad -aaa -aaa -aaa -aaa -aaa -aaa -azb -blM -blZ -bsC -azb -aaa -aaa -aaa -aaa +bfp +aSD +sCt +sCQ +sDq +aSD +sEn +sEN +sFo +sFS +aSH +sGY +aRz +sIc +sIv +sFs +sIO +sIU +sJe +sIU aaa bte aPB aQC -aRz +sOM aSI aTU aUL aVH aWw -aRz -aXK +sOM +sPi aYv -aZn -bai -bbb +sPa +sPo +sOZ bbP -aXb +aUK bdz -aXJ -aZn +sPa +sOZ bfr -aSH +sOY bgv -bhk +sPY bhU aRy bvg @@ -82086,13 +83378,13 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aac +aac +aad +aad +aad +aac +aac aaa aaa aaa @@ -82125,30 +83417,30 @@ amA ano aog apg -aqo -abt +aqk +aRz abN acy -abt -aad -aac -aac -aaa -aaa -aaa -aaa -aaa -aaa -azb -blM +aRz +sJN +aRz +aRz +aRz +aRz +aRz +sFp +sFT +sGy +sHb +aRz bxM bsC -azb -aaa -aaa -aaa -aaa -aaa +axW +aae +sIU +sJg +sIU +aae bte aPC aQD @@ -82158,21 +83450,21 @@ aTV aUM aVI aWx -aRz -aRz -aRz -aRz -aRz -aRz -aRz -aSH +sOM +sON +sOM +sON +sOM +sOM +sON +sOY bdA -aRz -aRz -bfq -aRz +sOM +sOM +sOV +sON bgw -bhl +sPY bhV aRy bvg @@ -82344,10 +83636,10 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa +aac +aac +aad +aad aaa aaa aaa @@ -82369,9 +83661,9 @@ aad aad ado aed -aeV +ajI afI -aeV +ajI ahp adn aiO @@ -82383,55 +83675,55 @@ ado acv aph aqp -abt +aRz bvh -bvh -bvg -aac -aac -aae -aaa -aaa -aaa -aaa -aaa -aaa -azb +sBx +aRz +aad +aad +aah +aad +aad +aSD +sFq +sFU +aRz +sGY +sJN blM -blZ -bsC -azb -aaa -aaa -aaa -aaa +sIw +axW +aRz +sJN +sJd +abN aaa bte aPz aPz -aRz +sOM aSK aTW aUN aVJ aWy -aRz +sOM aad aad aad aad aad -aRz +sOM bcD bdB bes -aRz +sOM bfs -aRA +sLc bgx bhm bhW -aRz +sON aac aaa aaa @@ -82603,7 +83895,7 @@ aaa aaa aaa aaa -aaa +aad aaa aaa aaa @@ -82624,15 +83916,15 @@ aaa aaa aaa aac -adp -aef -aeW +swM +aeh +agB ado agB ahq adp ado -adn +swL ado adn amC @@ -82642,51 +83934,51 @@ api amD amC amC +sBy +sBW +aad +aac bvg -aac -aae -aae -aae -aaa -aaa -aaa -aaa -aaa -aaa -azb -blM -blZ +aad +aad +sJN +aRz +aRz +aSD +sHd +aRz +bxM bsC -azb -aaa -aaa -aaa -aaa -aaa -aaa +sIG +aRz +sIY +sJi +aRz aae aae -aRz +aae +aae +sON aRy aRy aRy aRy aRy -aRz +sON aad aac aad aad aad -aRz +sOM bcE bdC bet -aRz +sOM bft -aRz +sOM bgy -bhk +sPY bhX aRy bvg @@ -82892,37 +84184,37 @@ aae aae aae aae -amC +syD anq aoi apj aqq ark amC -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axW +sOJ +bvg +aac +aac +aae +aac +aad +aRz +aXK +bhk +sGA +sHe +aRz blO -blZ bsJ axW -axW -axW -axW -axW -aaa -aaa -aaa -aaa +aRz +aSH +sJj +aRz +aae +aaf +aaf +aae aaa aaa aaa @@ -82935,16 +84227,16 @@ aaa aac aac aad -aRz -aRz -aRz -aRz -aRz -aRz -aRz +sOM +sON +sOM +sOM +sON +sOM +sOM bgz -bhk -bgw +sPY +sLg aRy bvg aac @@ -83140,9 +84432,9 @@ aaa aaa ado aeh -aeW +agB ado -aeW +agB ahq ado aaa @@ -83156,27 +84448,27 @@ apk aqr arl amC +bvg +aac +aac aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axW -blU +aae +aac +aac +sEQ +aRz +sJN +atq +aRz +aRz bmh -bsC -bmw -blZ +sIx +aKh +sIP bmC bmG axW -aaa +aae aaa aaa aaa @@ -83198,11 +84490,11 @@ aad aad aad aad -aRz +sOM bgA bhn bhY -aRz +sON aad aac aac @@ -83412,31 +84704,31 @@ aok apl aqs arm -amC +syD +aac aaa aaa aaa +aae aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axW +aac +bvg +sFs +sFX +sGC +sHf +sHB blM +sIy blZ -bsC +sHB blZ -blZ -blZ -blZ -axW -aaa -aaa -aaa +sJk +sDP +aae aaa +aaf +aaf aaa aaa aaa @@ -83455,11 +84747,11 @@ aac aac aad aad -aRz -aRz -aRz -aRz -aRz +sOM +sON +sOM +sOM +sOM aad aad aad @@ -83652,8 +84944,8 @@ aaa aaa abQ acz -adr -adr +afa +afa afa afK afa @@ -83674,26 +84966,26 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -axW -blM -blZ +aae +aae +bvg +bvg +sFs +sFY +sGD +bsS +sHC +sId bsM bsS -bsS +sIR bsS bsY axW -aaa -aaa -aaa -aaa +aae +aae +aae +aaf aaa aaa aaa @@ -83914,9 +85206,9 @@ aej ads ads ads -adt -aih -aiP +ads +aii +aiQ ajN akR aaa @@ -83927,21 +85219,21 @@ apn aqu amD aae -aaa -aaa -aaa -aaa -aaa -axW +aae +aaf +aaf +aae +aae axW +sDP azb axW axW axW azb -aFj -aFZ -bsN +blL +blY +bsB azb axW aKh @@ -83949,8 +85241,8 @@ bsZ azb axW axW -aaa -aaa +aae +aaf aaa aaa aaa @@ -84166,21 +85458,21 @@ aaa aaa abQ buy -adt -adt -adt ads -adt +ads +ads +ads +ads ads aii -aiP -ajO +aiQ +ajN akR aaa aae ant aom -apo +apn aqv ant aae @@ -84188,7 +85480,7 @@ aaa aaa aaa aaa -aaa +aae axW ayW azV @@ -84197,7 +85489,7 @@ aCi aDd aEb aFk -aDh +sIe bsO aHZ aJa @@ -84206,8 +85498,8 @@ bta aMz aNG azb -aaa -aaa +aae +aaf aaa aaa aaa @@ -84422,8 +85714,8 @@ aaa aaa aaa abQ -acB -adt +acA +ads ads ads ads @@ -84431,7 +85723,7 @@ ads ads aii aiQ -ajO +ajN akR aaa aaa @@ -84444,8 +85736,8 @@ aaa aaa aaa aaa -aaa -aaa +aaf +aae axW ayX azW @@ -84463,7 +85755,7 @@ btb aIa aNH axW -aaa +aae aaa aaa aaa @@ -84680,12 +85972,12 @@ aaa aaa abQ acC -adu aek -adu +aek +aek buz aek -adu +aek aij abQ abQ @@ -84701,8 +85993,8 @@ amE aaa aaa aaa -aaa -aaa +aaf +aae axW ayY azX @@ -84719,8 +86011,8 @@ aKj btc aMA aNI -axW -aaa +sDP +aae aaa aaa aaa @@ -84951,15 +86243,15 @@ aaa amE anu aon -apq +aon aqw arn amE aaa aaa aaa -aaa -aaa +aaf +aae axW ayZ azY @@ -84976,9 +86268,9 @@ bsX btd aMB aNJ -axW -aaa -aaa +sDP +aae +aaf aaa aaa aaa @@ -85216,7 +86508,7 @@ aaa aaa aaa aaa -aaa +aae axW aza azZ @@ -85234,8 +86526,8 @@ aLt aMC aNK axW -aaa -aaa +aae +aaf aaa aaa aaa @@ -85472,9 +86764,9 @@ amE aaa aaa aaa -aaa -aaa -axW +aaf +aae +sDP azb azb aBh @@ -85491,8 +86783,8 @@ aDi azb azb axW -aaa -aaa +aae +aaf aaa aaa aaa @@ -85729,26 +87021,26 @@ amE aaa aaa aaa -aaa -aaa +aaf +aae aae aae azb -aBi +aDh azb -aBi +aDh azb aae aae aae azb -aBi +aDh azb -aLu +aDh azb aae aae -aaa +aae aaa aaa aaa @@ -86001,7 +87293,7 @@ aaa azb aDi azb -aLv +aDi azb aaa aaa @@ -87033,7 +88325,7 @@ aLx aMF aNN axY -aPF +aPE aQE aaa aaa @@ -87290,7 +88582,7 @@ aLy aMG aNO axX -aPF +aPE aQE aaa aaa @@ -87804,7 +89096,7 @@ aLA aMH aNP axX -aPF +aPE aQE aaa aaa @@ -88061,7 +89353,7 @@ aLB aLB aNQ axY -aPF +aPE aQE aaa aaa @@ -88318,7 +89610,7 @@ aLB aLB aNR axY -aPF +aPE aQE aaa aaa diff --git a/_maps/map_files/OmegaStation/job_changes.dm b/_maps/map_files/OmegaStation/job_changes.dm index 7f6c24fe26..bef766da7b 100644 --- a/_maps/map_files/OmegaStation/job_changes.dm +++ b/_maps/map_files/OmegaStation/job_changes.dm @@ -164,4 +164,5 @@ MAP_REMOVE_JOB(geneticist) MAP_REMOVE_JOB(virologist) MAP_REMOVE_JOB(rd) MAP_REMOVE_JOB(warden) -MAP_REMOVE_JOB(lawyer) \ No newline at end of file +MAP_REMOVE_JOB(lawyer) +MAP_REMOVE_JOB(chemist) diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 7eb9a7ac7a..c4158d21b1 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -202,7 +202,7 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "AI Core"; req_access_txt = "65" }, @@ -241,7 +241,7 @@ /area/ai_monitored/turret_protected/ai) "act" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "AI Core"; req_access_txt = "65" }, @@ -502,7 +502,7 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "AI Core"; req_access_txt = "65" }, @@ -2136,7 +2136,7 @@ /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "ahm" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 2"; req_access_txt = "2" }, @@ -2156,7 +2156,7 @@ /turf/closed/wall, /area/security/prison) "ahp" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Long-Term Cell 1"; req_access_txt = "2" }, @@ -2864,7 +2864,6 @@ "aiY" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, -/obj/item/storage/box/mousetraps, /turf/open/floor/plating, /area/maintenance/department/security/brig) "aiZ" = ( @@ -2908,7 +2907,7 @@ /area/security/prison) "ajd" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -2925,7 +2924,7 @@ /area/security/prison) "ajf" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; req_access_txt = "1" }, @@ -3137,14 +3136,14 @@ /area/maintenance/department/crew_quarters/dorms) "ajA" = ( /obj/docking_port/stationary{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; id = "syndicate_ne"; name = "northeast of station"; turf_type = /turf/open/space; - width = 18 + width = 23 }, /turf/open/space, /area/space/nearstation) @@ -3537,6 +3536,7 @@ /area/maintenance/department/security/brig) "aks" = ( /obj/machinery/light/small, +/obj/item/storage/box/mousetraps, /turf/open/floor/plating, /area/maintenance/department/security/brig) "akt" = ( @@ -4407,7 +4407,7 @@ /turf/open/floor/plasteel/dark, /area/security/main) "amt" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Head of Security"; req_access_txt = "58" }, @@ -5810,7 +5810,7 @@ /turf/open/floor/plating, /area/security/warden) "apM" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Control"; req_access_txt = "3" }, @@ -6393,7 +6393,7 @@ /area/security/brig) "arj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock"; req_access_txt = "2" }, @@ -7453,7 +7453,7 @@ /turf/open/floor/plating, /area/security/brig) "atE" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -7478,7 +7478,7 @@ /turf/open/floor/plating, /area/security/brig) "atG" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 2; id_tag = "innerbrig"; name = "Brig"; @@ -7490,7 +7490,7 @@ }, /area/security/brig) "atH" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig Desk"; req_access_txt = "1" }, @@ -8781,7 +8781,7 @@ /area/shuttle/labor) "awH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock"; req_access_txt = "0" }, @@ -8828,7 +8828,7 @@ /area/security/brig) "awL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -8856,7 +8856,7 @@ /area/security/brig) "awN" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ cyclelinkeddir = 1; id_tag = "outerbrig"; name = "Brig"; @@ -10634,7 +10634,7 @@ /area/crew_quarters/heads/captain) "aBq" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 2; name = "Bridge"; req_access_txt = "19" @@ -10648,7 +10648,7 @@ "aBr" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 2; name = "Bridge"; req_access_txt = "19" @@ -10711,7 +10711,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 2; name = "Bridge"; req_access_txt = "19" @@ -12140,6 +12140,7 @@ "aED" = ( /obj/structure/table, /obj/item/aiModule/core/full/asimov, +/obj/effect/spawner/lootdrop/aimodule_harmless, /obj/item/aiModule/core/freeformcore, /obj/machinery/door/window{ base_state = "right"; @@ -12148,7 +12149,7 @@ name = "Core Modules"; req_access_txt = "20" }, -/obj/item/aiModule/core/full/corp, +/obj/effect/spawner/lootdrop/aimodule_neutral, /obj/item/aiModule/core/full/custom, /obj/structure/window/reinforced{ dir = 1; @@ -12197,7 +12198,7 @@ req_access_txt = "20" }, /obj/item/aiModule/reset/purge, -/obj/item/aiModule/core/full/antimov, +/obj/effect/spawner/lootdrop/aimodule_harmful, /obj/item/aiModule/supplied/protectStation, /obj/structure/window/reinforced{ dir = 1; @@ -13144,7 +13145,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 1; name = "Bridge"; req_access_txt = "19" @@ -13158,7 +13159,7 @@ }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 1; name = "Bridge"; req_access_txt = "19" @@ -13180,7 +13181,7 @@ /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ cyclelinkeddir = 1; name = "Bridge"; req_access_txt = "19" @@ -14829,7 +14830,7 @@ /area/storage/eva) "aLb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "EVA Storage"; req_access_txt = "18" }, @@ -14846,7 +14847,7 @@ "aLd" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Teleporter"; req_access_txt = "17" }, @@ -14925,7 +14926,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aLs" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, @@ -16434,7 +16435,7 @@ }, /area/security/checkpoint/supply) "aOR" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Cargo Security Post"; req_access_txt = "63" }, @@ -17395,7 +17396,7 @@ /area/security/checkpoint/supply) "aRg" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Cargo Security Post"; req_access_txt = "63" }, @@ -17820,7 +17821,7 @@ /area/quartermaster/office) "aSg" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Mailroom"; req_access_txt = "0"; req_one_access_txt = "48;50" @@ -18750,7 +18751,7 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "aUo" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Bay"; req_access_txt = "0"; req_one_access_txt = "31;48" @@ -20920,7 +20921,7 @@ /area/quartermaster/office) "aZl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Cargo Office"; req_access_txt = "50" }, @@ -21871,7 +21872,7 @@ /turf/open/floor/plating, /area/quartermaster/qm) "bbG" = ( -/obj/machinery/door/airlock/glass_mining{ +/obj/machinery/door/airlock/mining/glass{ name = "Quartermaster"; req_access_txt = "41" }, @@ -26577,7 +26578,7 @@ /area/medical/genetics) "bnw" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Cloning"; req_access_txt = "0"; @@ -26635,7 +26636,7 @@ /area/security/checkpoint/medical) "bnB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Medbay Security Post"; req_access_txt = "63" }, @@ -26775,7 +26776,7 @@ /area/science/server) "bnU" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Server Room"; req_access_txt = "30" }, @@ -28154,7 +28155,7 @@ /area/medical/genetics) "bra" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "GeneticsDoor"; name = "Cloning"; req_access_txt = "0"; @@ -29795,7 +29796,7 @@ /area/science/explab) "buA" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Experimentation Lab"; req_access_txt = "47" }, @@ -30019,7 +30020,7 @@ /area/science/xenobiology) "buV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Kill Room"; req_access_txt = "55" }, @@ -30070,7 +30071,7 @@ /turf/closed/wall/r_wall, /area/medical/genetics) "bvd" = ( -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Genetics"; req_access_txt = "9" }, @@ -30167,7 +30168,7 @@ /turf/open/floor/plasteel/whiteblue/corner, /area/medical/medbay/central) "bvq" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Chemistry Lab"; req_access_txt = "5; 33" @@ -31709,7 +31710,7 @@ /turf/open/floor/plating, /area/medical/sleeper) "byp" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Sleepers"; req_access_txt = "5" @@ -31721,7 +31722,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "byq" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Sleepers"; req_access_txt = "5" @@ -32985,7 +32986,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bBd" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = "MedbaySleepers"; name = "Sleepers"; req_access_txt = "5" @@ -33531,7 +33532,7 @@ }, /area/medical/medbay/central) "bCq" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Chief Medical Office"; req_access_txt = "40" }, @@ -34148,7 +34149,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Toxins Storage"; req_access_txt = "8" }, @@ -34189,7 +34190,7 @@ /area/science/research) "bDU" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_research{ +/obj/machinery/door/airlock/research/glass{ name = "Toxins Lab"; req_access_txt = "8" }, @@ -34431,6 +34432,10 @@ pixel_x = -3; pixel_y = -3 }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -34446,6 +34451,10 @@ pixel_x = -3; pixel_y = -3 }, +/obj/machinery/door/window/southleft{ + name = "First-Aid Supplies"; + req_access_txt = "5" + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -34461,6 +34470,10 @@ pixel_x = -3; pixel_y = -3 }, +/obj/machinery/door/window/southright{ + name = "First-Aid Supplies"; + req_access_txt = "5" + }, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -34476,6 +34489,7 @@ pixel_x = -3; pixel_y = -3 }, +/obj/structure/window/reinforced, /turf/open/floor/plasteel/whiteblue/side{ dir = 1 }, @@ -35158,7 +35172,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bFR" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "45" @@ -35242,7 +35256,7 @@ /turf/closed/wall, /area/hallway/primary/aft) "bGb" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Research Security Post"; req_access_txt = "63" }, @@ -35610,7 +35624,7 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bGY" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Medbay Storage"; req_access_txt = "45" @@ -35995,11 +36009,10 @@ /turf/open/floor/plasteel/dark, /area/maintenance/department/engine) "bHS" = ( -/obj/structure/table, -/obj/item/device/flashlight/lamp, /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" }, +/obj/machinery/vending/kink, /turf/open/floor/plasteel/dark, /area/maintenance/department/engine) "bHT" = ( @@ -36549,6 +36562,8 @@ /obj/structure/sign/poster/contraband/random{ pixel_x = 32 }, +/obj/structure/table, +/obj/item/device/flashlight/lamp, /turf/open/floor/plasteel/dark, /area/maintenance/department/engine) "bJi" = ( @@ -36618,7 +36633,7 @@ }, /area/medical/medbay/central) "bJq" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Recovery Room"; req_access_txt = "0" @@ -37043,7 +37058,7 @@ /area/medical/virology) "bKo" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation B"; req_access_txt = "39" }, @@ -37052,7 +37067,7 @@ /area/medical/virology) "bKp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_virology{ +/obj/machinery/door/airlock/virology/glass{ name = "Isolation A"; req_access_txt = "39" }, @@ -37738,7 +37753,7 @@ "bLX" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ cyclelinkeddir = 0; name = "Atmospherics"; req_access_txt = "24" @@ -38188,7 +38203,7 @@ dir = 4 }, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring"; req_access_txt = "24" }, @@ -38617,7 +38632,7 @@ dir = 4 }, /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ name = "Atmospherics Monitoring"; req_access_txt = "24" }, @@ -40513,7 +40528,7 @@ /area/hallway/primary/aft) "bSQ" = ( /obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/glass_atmos{ +/obj/machinery/door/airlock/atmos/glass{ cyclelinkeddir = 0; name = "Atmospherics Monitoring"; req_access_txt = "24" @@ -41456,7 +41471,7 @@ }, /area/security/checkpoint/engineering) "bUY" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Engineering Security Post"; req_access_txt = "63" }, @@ -42724,7 +42739,7 @@ /turf/open/floor/plating, /area/crew_quarters/heads/chief) "bYa" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Chief Engineer"; req_access_txt = "56" }, @@ -42771,7 +42786,7 @@ /area/engine/engine_smes) "bYh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Power Storage"; req_access_txt = "11"; req_one_access_txt = "0" @@ -47544,7 +47559,7 @@ }, /area/tcommsat/computer) "cmj" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Control Room"; req_access_txt = "19; 61" }, @@ -47673,7 +47688,7 @@ }, /area/tcommsat/computer) "cmw" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ cyclelinkeddir = 2; name = "Server Room"; req_access_txt = "61" @@ -47748,7 +47763,7 @@ /turf/open/floor/plating, /area/tcommsat/computer) "cmF" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ cyclelinkeddir = 1; name = "Server Room"; req_access_txt = "61" @@ -51363,8 +51378,10 @@ /area/maintenance/department/crew_quarters/dorms) "cCY" = ( /obj/machinery/vending/kink, -/turf/open/floor/plating, -/area/maintenance/department/engine) +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/department/cargo) "cCZ" = ( /obj/machinery/vending/kink, /turf/open/floor/plating, @@ -73873,7 +73890,7 @@ bvb bDj bEo bva -cCY +bva bHQ bJg bKl @@ -74129,7 +74146,7 @@ bnv bnv bDi bmf -bva +bsn bva bHS bJh @@ -100070,7 +100087,7 @@ aaa aaa aEj bkO -bgO +cCY bnn bom aEj diff --git a/_maps/map_files/debug/runtimestation.dmm b/_maps/map_files/debug/runtimestation.dmm index 0ef75448e6..a6ee357241 100644 --- a/_maps/map_files/debug/runtimestation.dmm +++ b/_maps/map_files/debug/runtimestation.dmm @@ -310,7 +310,7 @@ /turf/open/floor/plating, /area/engine/engineering) "aU" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0" @@ -339,7 +339,7 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "aX" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Gravity Generator"; req_access_txt = "11"; req_one_access_txt = "0" diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 27198fe072..1866665519 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2733,10 +2733,7 @@ }, /area/centcom/prison) "ir" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 6 - }, +/turf/closed/indestructible/fakeglass, /area/centcom/prison) "is" = ( /obj/structure/table/reinforced, @@ -4392,12 +4389,6 @@ /obj/structure/flora/grass/both, /turf/open/floor/plating/asteroid/snow/airless, /area/syndicate_mothership) -"mB" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 1 - }, -/area/syndicate_mothership/control) "mC" = ( /obj/item/disk/data, /obj/effect/light_emitter{ @@ -4618,12 +4609,6 @@ icon_state = "alien5" }, /area/abductor_ship) -"ng" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 1 - }, -/area/syndicate_mothership/control) "nh" = ( /obj/item/toy/figure/syndie, /obj/effect/light_emitter{ @@ -5648,12 +5633,6 @@ /obj/effect/turf_decal/bot_white, /turf/open/floor/plasteel/dark, /area/shuttle/syndicate/bridge) -"pE" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 6 - }, -/area/syndicate_mothership/control) "pF" = ( /obj/machinery/door/airlock/centcom{ name = "Auxillary Dock"; @@ -6094,27 +6073,6 @@ "qE" = ( /turf/closed/indestructible/riveted/uranium, /area/wizard_station) -"qF" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 8; - icon_state = "fakewindows" - }, -/area/wizard_station) -"qG" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 8; - icon_state = "fakewindows2" - }, -/area/wizard_station) -"qH" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 4; - icon_state = "fakewindows" - }, -/area/wizard_station) "qI" = ( /turf/open/floor/plasteel/vault/side, /area/shuttle/syndicate/bridge) @@ -6807,7 +6765,9 @@ /turf/open/floor/plating/airless, /area/syndicate_mothership/control) "sq" = ( -/obj/machinery/computer/shuttle/white_ship, +/obj/machinery/computer/shuttle/white_ship{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, @@ -7141,24 +7101,6 @@ dir = 5 }, /area/shuttle/syndicate/hallway) -"tb" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 9 - }, -/area/syndicate_mothership/control) -"tc" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 8 - }, -/area/syndicate_mothership/control) -"td" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 4 - }, -/area/syndicate_mothership/control) "te" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/pizzaslice/mushroom, @@ -7214,14 +7156,6 @@ }, /turf/open/floor/plating, /area/shuttle/assault_pod) -"tm" = ( -/turf/open/floor/plating/asteroid/snow/airless, -/obj/machinery/porta_turret/syndicate/pod, -/turf/closed/wall/mineral/plastitanium{ - dir = 1; - icon_state = "diagonalWall3" - }, -/area/shuttle/assault_pod) "tn" = ( /obj/effect/turf_decal/stripes/line{ dir = 10 @@ -7229,7 +7163,9 @@ /turf/open/floor/plating/airless, /area/syndicate_mothership/control) "to" = ( -/obj/machinery/computer/shuttle/ferry, +/obj/machinery/computer/shuttle/ferry{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -7520,13 +7456,6 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/centcom/evac) -"tW" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 6; - icon_state = "fakewindows2" - }, -/area/wizard_station) "tX" = ( /obj/machinery/door/airlock{ icon = 'icons/obj/doors/airlocks/station/uranium.dmi'; @@ -7568,11 +7497,16 @@ }, /area/shuttle/syndicate/hallway) "uc" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 4 +/obj/structure/chair{ + dir = 4; + name = "tactical chair" }, -/turf/closed/wall/mineral/plastitanium, -/area/shuttle/syndicate/hallway) +/obj/effect/turf_decal/bot_white, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/shuttle/syndicate/airlock) "ud" = ( /obj/machinery/door/poddoor/shutters{ id = "nukeop_ready"; @@ -7826,12 +7760,6 @@ }, /turf/open/floor/plating, /area/syndicate_mothership/control) -"uK" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 8 - }, -/area/syndicate_mothership/control) "uL" = ( /obj/machinery/button/door{ id = "nukeop_ready"; @@ -8076,47 +8004,6 @@ "vq" = ( /turf/closed/wall/mineral/plastitanium, /area/shuttle/syndicate/airlock) -"vr" = ( -/obj/docking_port/stationary{ - area_type = /area/syndicate_mothership; - baseturf_type = /turf/open/floor/plating/asteroid/snow; - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate_away"; - name = "syndicate recon outpost"; - turf_type = /turf/open/floor/plating/asteroid/snow; - width = 18 - }, -/obj/machinery/door/poddoor{ - id = "smindicate"; - name = "outer blast door" - }, -/obj/machinery/button/door{ - id = "smindicate"; - name = "external door control"; - pixel_x = -26; - req_access_txt = "150" - }, -/obj/docking_port/mobile{ - dheight = 9; - dir = 2; - dwidth = 5; - height = 24; - id = "syndicate"; - name = "syndicate infiltrator"; - port_direction = 1; - roundstart_move = "syndicate_away"; - hidden = 1; - width = 18 - }, -/obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) "vs" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -8434,14 +8321,6 @@ }, /turf/open/floor/carpet, /area/wizard_station) -"we" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'FOURTH WALL'."; - name = "\improper FOURTH WALL"; - pixel_x = -32 - }, -/turf/open/floor/plating/asteroid/snow/airless, -/area/syndicate_mothership) "wf" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/light{ @@ -8464,31 +8343,6 @@ dir = 8 }, /area/shuttle/syndicate/hallway) -"wi" = ( -/obj/item/storage/toolbox/syndicate, -/obj/item/crowbar/red, -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"wj" = ( -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) -"wk" = ( -/obj/structure/chair{ - name = "tactical chair" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/shuttle/syndicate/airlock) "wl" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -8778,21 +8632,6 @@ dir = 2 }, /area/syndicate_mothership/control) -"wZ" = ( -/turf/open/floor/plating/asteroid/snow/airless, -/obj/machinery/porta_turret/syndicate/pod, -/turf/closed/wall/mineral/plastitanium{ - icon_state = "diagonalWall3" - }, -/area/shuttle/assault_pod) -"xa" = ( -/turf/open/floor/plating/asteroid/snow/airless, -/obj/machinery/porta_turret/syndicate/pod, -/turf/closed/wall/mineral/plastitanium{ - dir = 4; - icon_state = "diagonalWall3" - }, -/area/shuttle/assault_pod) "xb" = ( /obj/docking_port/stationary{ dir = 8; @@ -8982,21 +8821,6 @@ /obj/structure/window/plastitanium, /turf/open/floor/plating, /area/shuttle/syndicate/airlock) -"xE" = ( -/obj/structure/chair{ - dir = 1; - name = "tactical chair" - }, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/airlock) -"xF" = ( -/obj/structure/rack, -/obj/item/clothing/suit/space/syndicate/black/red, -/obj/item/clothing/head/helmet/space/syndicate/black/red, -/obj/effect/turf_decal/bot_white, -/turf/open/floor/plasteel/dark, -/area/shuttle/syndicate/airlock) "xG" = ( /turf/open/floor/plasteel/dark, /area/syndicate_mothership/control) @@ -9622,7 +9446,7 @@ /turf/open/floor/plasteel, /area/centcom/ferry) "zk" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Infirmary" }, /obj/effect/turf_decal/stripes/line{ @@ -9640,13 +9464,6 @@ dir = 1 }, /area/centcom/evac) -"zn" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 1; - icon_state = "fakewindows" - }, -/area/wizard_station) "zo" = ( /obj/structure/destructible/cult/tome, /turf/open/floor/engine/cult, @@ -9808,13 +9625,6 @@ }, /turf/open/floor/plating/asteroid, /area/centcom/evac) -"zM" = ( -/turf/closed/indestructible/fakeglass{ - color = "#008000"; - dir = 1; - icon_state = "fakewindows2" - }, -/area/wizard_station) "zN" = ( /obj/structure/bookcase/random/reference, /turf/open/floor/engine/cult, @@ -13147,22 +12957,7 @@ }, /area/tdome/tdomeobserve) "Il" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 8 - }, -/area/tdome/tdomeobserve) -"Im" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 8 - }, -/area/tdome/tdomeobserve) -"In" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 4 - }, +/turf/closed/indestructible/fakeglass, /area/tdome/tdomeobserve) "Io" = ( /obj/item/storage/box/matches{ @@ -13323,13 +13118,6 @@ dir = 4 }, /area/tdome/arena) -"IK" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" - }, -/turf/open/floor/plasteel, -/area/tdome/arena) "IL" = ( /obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/stripes/line{ @@ -13351,13 +13139,6 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) -"IO" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" - }, -/turf/open/floor/plasteel, -/area/tdome/arena) "IP" = ( /obj/structure/rack, /obj/item/clothing/under/color/green, @@ -13638,13 +13419,6 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel, /area/tdome/arena) -"JE" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomehea"; - name = "Heavy Supply" - }, -/turf/open/floor/plasteel, -/area/tdome/arena) "JF" = ( /obj/machinery/computer/camera_advanced/abductor{ team_number = 1 @@ -13669,22 +13443,7 @@ /turf/open/floor/plasteel, /area/tdome/arena) "JI" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 8 - }, -/area/tdome/tdomeadmin) -"JJ" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows2"; - dir = 8 - }, -/area/tdome/tdomeadmin) -"JK" = ( -/turf/closed/indestructible/fakeglass{ - icon_state = "fakewindows"; - dir = 4 - }, +/turf/closed/indestructible/fakeglass, /area/tdome/tdomeadmin) "JL" = ( /obj/structure/rack, @@ -13769,11 +13528,11 @@ /area/tdome/tdomeadmin) "JV" = ( /turf/closed/wall/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "JW" = ( /obj/machinery/status_display, /turf/closed/wall/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "JX" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -13816,16 +13575,16 @@ /area/tdome/tdomeadmin) "Kd" = ( /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Ke" = ( /turf/open/floor/mineral/plastitanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Kf" = ( /obj/machinery/computer/emergency_shuttle{ dir = 8 }, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Kg" = ( /turf/closed/indestructible/fakedoor{ name = "Thunderdome Admin" @@ -13865,18 +13624,18 @@ }, /obj/docking_port/mobile/emergency/backup, /turf/open/floor/plating, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Kl" = ( /obj/structure/chair/office/light{ dir = 4 }, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Km" = ( /obj/structure/table/wood, /obj/item/paper/fluff/stations/centcom/broken_evac, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "Kn" = ( /obj/structure/bookcase/random, /turf/open/floor/plasteel/vault{ @@ -14012,7 +13771,7 @@ /obj/structure/table/wood, /obj/item/book/manual/random, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "KA" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, @@ -14044,13 +13803,13 @@ dir = 8 }, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "KF" = ( /obj/machinery/light{ dir = 4 }, /turf/open/floor/mineral/titanium, -/area/shuttle/escape) +/area/shuttle/escape/backup) "KG" = ( /obj/structure/flora/ausbushes/lavendergrass, /obj/structure/flora/ausbushes/sparsegrass, @@ -14132,8 +13891,11 @@ /turf/closed/wall/mineral/titanium/interior, /area/centcom/evac) "KT" = ( -/turf/closed/wall/mineral/titanium/interior, -/area/centcom/evac) +/obj/machinery/computer/camera_advanced{ + dir = 4 + }, +/turf/open/floor/wood, +/area/wizard_station) "KU" = ( /obj/structure/closet/emcloset, /turf/open/floor/mineral/titanium/blue, @@ -14412,7 +14174,9 @@ /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) "LP" = ( -/obj/machinery/computer/shuttle, +/obj/machinery/computer/shuttle{ + dir = 1 + }, /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) "LQ" = ( @@ -14541,106 +14305,97 @@ }, /turf/open/floor/plasteel, /area/tdome/arena) -"Mj" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" +"Mt" = ( +/obj/structure/chair{ + dir = 4; + name = "tactical chair" }, -/obj/effect/turf_decal/loading_area{ +/obj/effect/turf_decal/bot_white, +/turf/open/floor/plasteel/dark, +/area/shuttle/syndicate/airlock) +"Mu" = ( +/obj/structure/table/reinforced, +/obj/item/storage/toolbox/syndicate, +/obj/item/crowbar/red, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/airlock) +"Mw" = ( +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mk" = ( +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/airlock) +"My" = ( +/obj/docking_port/stationary{ + area_type = /area/syndicate_mothership; + baseturf_type = /turf/open/floor/plating/asteroid/snow; + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; + id = "syndicate_away"; + name = "syndicate recon outpost"; + turf_type = /turf/open/floor/plating/asteroid/snow; + width = 23 + }, /obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" + id = "smindicate"; + name = "outer blast door" }, -/obj/effect/turf_decal/loading_area{ - dir = 8 +/obj/machinery/button/door{ + id = "smindicate"; + name = "external door control"; + pixel_x = 0; + pixel_y = 26; + req_access_txt = "150" }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Ml" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" +/obj/docking_port/mobile{ + dheight = 1; + dir = 8; + dwidth = 12; + height = 17; + hidden = 1; + id = "syndicate"; + movement_force = list("KNOCKDOWN" = 0, "THROW" = 0); + name = "syndicate infiltrator"; + port_direction = 4; + roundstart_move = null; + width = 23 }, -/obj/effect/turf_decal/loading_area{ - dir = 8 +/obj/structure/fans/tiny, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mm" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/airlock) +"Mz" = ( +/turf/open/floor/plasteel/dark, +/area/shuttle/syndicate/airlock) +"MC" = ( +/obj/structure/rack, +/obj/item/clothing/suit/space/syndicate/black/red, +/obj/item/clothing/head/helmet/space/syndicate/black/red, +/obj/effect/turf_decal/bot_white, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, -/obj/effect/turf_decal/loading_area{ - dir = 8 +/turf/open/floor/mineral/plastitanium, +/area/shuttle/syndicate/airlock) +"MD" = ( +/obj/effect/light_emitter{ + set_cap = 1; + set_luminosity = 4 }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mn" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'FOURTH WALL'."; + name = "\improper FOURTH WALL"; + pixel_x = -32 }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mo" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mp" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mq" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Mr" = ( -/obj/machinery/door/poddoor{ - id = "thunderdome"; - name = "Thunderdome Blast Door" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) -"Ms" = ( -/obj/machinery/door/poddoor{ - id = "thunderdomegen"; - name = "General Supply" - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/tdome/arena) +/turf/open/floor/plating/asteroid/snow/airless, +/area/syndicate_mothership) (1,1,1) = {" aa @@ -19189,8 +18944,8 @@ lI lI qE qE -zn -zM +Ax +Ax Ax qE qE @@ -19451,7 +19206,7 @@ zN zo Bf qE -zn +Ax Ax qE lI @@ -19699,7 +19454,7 @@ lI lI qE qE -uC +KT vj ya qZ @@ -20231,7 +19986,7 @@ DZ Eh qE qE -tW +Ax qE lI lI @@ -20474,8 +20229,8 @@ vj xu qE qE -zn -zM +Ax +Ax Ax qE qE @@ -21233,11 +20988,11 @@ lI lI lI lI -qF +Ax qZ qZ qZ -tW +Ax qZ qZ qZ @@ -21249,7 +21004,7 @@ qZ qZ qZ qZ -tW +Ax qZ qZ qZ @@ -21490,7 +21245,7 @@ lI lI lI lI -qG +Ax ra qZ qZ @@ -21514,7 +21269,7 @@ DD uE Ec uE -tW +Ax EX qZ qZ @@ -21747,11 +21502,11 @@ lI lI lI lI -qH +Ax qZ qZ qZ -tW +Ax qZ qZ qZ @@ -21763,7 +21518,7 @@ qZ qZ qZ qZ -tW +Ax qZ qZ qZ @@ -22287,7 +22042,7 @@ Ee Em qE qE -tW +Ax qE qE qE @@ -22530,8 +22285,8 @@ uE xz qE qE -zn -zM +Ax +Ax Ax qE qE @@ -22785,13 +22540,13 @@ vn uE vl uE -qF +Ax yH yK zQ Az yK -qF +Ax qZ qZ qZ @@ -23042,13 +22797,13 @@ qE uF wQ wd -qG +Ax yI zq yI AA yI -qG +Ax qZ uE qZ @@ -23299,13 +23054,13 @@ qE qE vn uE -qH +Ax yJ zr yK zq yK -qH +Ax qZ qZ qE @@ -23563,7 +23318,7 @@ yI AB Bi qE -zn +Ax Ax qE lI @@ -26361,38 +26116,38 @@ hl hl hl hh -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh +hh aa aa aa @@ -26617,41 +26372,41 @@ hl hl hl hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +hl +kt +MD +kt +kt +kt +kt +kt +kt +kt +kt +kt +kt +hl hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh -hh +aa +aa aa aa aa @@ -26887,27 +26642,25 @@ hl hl hl hl +kt +kt +kt +kt +kt +kt +kt +yc +yd +yd +yd +yd +yd +yd +yd +yd +yd +kt hl -hl -hl -hl -hl -hl -hl -we -hl -kt -kt -kt -kt -kt -kt -kt -kt -kt -kt -kt -kt hh aa aa @@ -26977,6 +26730,8 @@ aa aa aa aa +aa +aa "} (49,1,1) = {" aa @@ -27144,27 +26899,25 @@ hl hl hl hl -hl -hl -hl -kt kt +tY +tZ +tZ +tZ +tZ +tZ +yd +yL +zs +yL +AC +Bj +BT +Cj +CS +Di kt hl -hl -hl -hl -yc -yd -yd -yd -yd -yd -yd -yd -yd -yd -kt hh aa aa @@ -27234,6 +26987,8 @@ aa aa aa aa +aa +aa "} (50,1,1) = {" aa @@ -27401,27 +27156,25 @@ hl hl hl hl -hl -hl -hl -hl -tY -tZ -tZ -tZ -tZ -tZ -yd -yL -zs -yL -AC -Bj -BT -Cj -CS -Di kt +tZ +uG +vo +vo +vo +xA +yd +yM +zt +zR +zR +Bk +zR +Ck +CS +Dj +kt +hl hh aa aa @@ -27491,6 +27244,8 @@ aa aa aa aa +aa +aa "} (51,1,1) = {" aa @@ -27652,33 +27407,31 @@ hl hl hl hl -hl -hl -hl -hl -hl -hl -hl -hl -hl +kt +kt +kt +kt +kt +kt kt tZ -uG -vo -vo -vo -xA -yd -yM +uH +uH +uH +uH +uH +ye +yN zt -zR -zR -Bk -zR -Ck +zS +AD +Bl +BU +Cl CS -Dj +Dk kt +hl hh aa aa @@ -27748,6 +27501,8 @@ aa aa aa aa +aa +aa "} (52,1,1) = {" aa @@ -27909,33 +27664,31 @@ hl hl my hl -hl -kt -kt +oS +oT +oT +oT +oT hl hl -hl -hl -hl -hl -kt tZ uH uH uH uH uH -ye -yN +yd +yO zt -zS -AD -Bl -BU -Cl -CS -Dk +zT +AE +Bm +yf +yd +yd +Dl kt +hl hh aa aa @@ -28005,6 +27758,8 @@ aa aa aa aa +aa +aa "} (53,1,1) = {" aa @@ -28166,33 +27921,31 @@ hl hl hl hl -hl -kt -hl -oS oT +px +pR +qI oT -oT -oT -hl +rY hl tZ -uH -uH -uH -uH -uH +uI +vp +wf +wR +xB yd -yO +yP zt zT AE -Bm -yf +Bn yd -yd -Dl +hl +hl kt +kt +hl hh aa aa @@ -28262,6 +28015,8 @@ aa aa aa aa +aa +aa "} (54,1,1) = {" aa @@ -28423,33 +28178,31 @@ hl hl hl hl -hl -kt -hl -oT -px -pR +oU +py +pS qI oT -rY -hl +rZ +rZ tZ -uI -vp -wf -wR -xB +tZ +tZ +tZ +wS +xC +yf +yQ +yQ +zU +yQ yd -yP -zt -zT -AE -Bn yd +rZ +rZ +kt hl hl -kt -kt hh aa aa @@ -28519,6 +28272,8 @@ aa aa aa aa +aa +aa "} (55,1,1) = {" aa @@ -28680,31 +28435,29 @@ hl hl hl nx -hl -kt -hl oU -py -pS +pz +pT qI -oT -rZ -rZ -tZ -tZ -tZ -tZ -wS -xC -yf -yQ -yQ -zU -yQ -yd -yd -rZ -rZ +rb +sa +sY +ua +sY +sY +wg +sb +sb +sb +sb +zu +zV +AF +Bo +BV +Cm +CT +kt hl hl hh @@ -28776,6 +28529,8 @@ aa aa aa aa +aa +aa "} (56,1,1) = {" aa @@ -28937,31 +28692,29 @@ hl hl hl hl -hl -kt -hl oU -pz -pT +pA +pU qI -rb -sa -sY -ua -sY -sY -wg +rc sb +sZ +sZ +sZ sb +wh sb -sb -zu +sZ +sZ +sZ +sZ zV AF Bo -BV +BW Cm -CT +CU +kt hl hl hh @@ -29033,6 +28786,8 @@ aa aa aa aa +aa +aa "} (57,1,1) = {" aa @@ -29194,31 +28949,29 @@ hl my hl hl -hl -kt -hl oU -pA -pU +pB +pT qI -rc +oT +sc +ta +ub +ta +ta +wg sb -sZ -sZ -sZ sb -wh sb -sZ -sZ -sZ -sZ +sb +zv zV AF Bo -BW +BV Cm -CU +CV +kt hl hl hh @@ -29290,6 +29043,8 @@ aa aa aa aa +aa +aa "} (58,1,1) = {" aa @@ -29451,31 +29206,29 @@ hl hl hl hl -hl -kt -hl oU -pB -pT +pC +pV qI oT -sc -ta -ub -ta -ta -wg -sb -sb -sb -sb -zv -zV -AF -Bo -BV -Cm -CV +rZ +rZ +vq +vq +vq +vq +wT +xD +yg +yR +yR +zW +yR +yh +yh +rZ +rZ +kt hl hl hh @@ -29547,6 +29300,8 @@ aa aa aa aa +aa +aa "} (59,1,1) = {" aa @@ -29708,32 +29463,30 @@ hl hl hl hl -hl -kt -hl -oU -pC -pV +oT +pD +pW qI oT -rZ -rZ -uc -rZ -vq -vq -wT -xD -yg -yR -yR -zW -yR -yh -yh -rZ -rZ +sd hl +vq +Mt +Mt +uc +Mz +Mt +yh +yS +zw +zX +AG +Bp +yh +hl +hl +kt +kt hl hh aa @@ -29804,6 +29557,8 @@ aa aa aa aa +aa +aa "} (60,1,1) = {" aa @@ -29965,33 +29720,31 @@ hl hl hl hl -hl -kt -hl +oV oT -pD -pW -qI oT -sd -tb -ng -nz +oT +oT +hl +hl vq -wi wU -xE +wU +wU +wU +wU yh -yS +yT zw zX AG -Bp +Bq +yg yh -hl -hl -kt +yh +Dm kt +hl hh aa aa @@ -30061,6 +29814,8 @@ aa aa aa aa +aa +aa "} (61,1,1) = {" aa @@ -30222,33 +29977,31 @@ hl mz hl my -hl kt -hl -oV -oT -oT -oT -oT -hl -tc -ll -uJ -vr -wj +kt +kt +kt +kt +kt +kt +vq wU -xE -yh -yT +wU +wU +wU +wU +yi +yU zw -zX -AG -Bq -yg -yh -yh -Dm +zY +AH +Br +zZ +Cn +CW +Dn kt +hl hh aa aa @@ -30318,6 +30071,8 @@ aa aa aa aa +aa +aa "} (62,1,1) = {" aa @@ -30480,32 +30235,30 @@ mA hl hl hl +hl +hl +nx +hl +hl kt -kt -kt -kt -kt -kt -kt -kt -tc -ll -uK -vs -wk -wU -xF -yi -yU +vq +Mu +Mw +Mw +Mw +MC +yh +yV zw -zY -AH -Br zZ -Cn +zZ +Bs +zZ +Co CW -Dn +Do kt +hl hh aa aa @@ -30575,6 +30328,8 @@ aa aa aa aa +aa +aa "} (63,1,1) = {" aa @@ -30737,32 +30492,30 @@ hl hl hl hl -my hl hl hl hl -nx hl kt -tc -ll -tc vt vq vq +My +vs vq yh -yV +yW zw -zZ -zZ -Bs -zZ -Co +Aa +AI +Bt +BX +Cn CW -Do +Dp kt +hl hh aa aa @@ -30832,6 +30585,8 @@ aa aa aa aa +aa +aa "} (64,1,1) = {" aa @@ -30999,27 +30754,25 @@ hl hl hl hl -hl -hl kt -tc -ll -tc -hl -hl -hl -vq +kt +kt +nz +uJ +nz +kt +yj +yh +yh +yh +yh +yh +yh +yh +yh yh -yW -zw -Aa -AI -Bt -BX -Cn -CW -Dp kt +hl hh aa aa @@ -31089,6 +30842,8 @@ aa aa aa aa +aa +aa "} (65,1,1) = {" aa @@ -31250,7 +31005,7 @@ kt hl hl hl -mz +hl hl hl hl @@ -31259,24 +31014,22 @@ hl hl hl kt -tc +nz ll -tc -hl -hl -hl -hl -yj -yh -yh -yh -yh -yh -yh -yh -yh -yh +nz kt +kt +kt +kt +kt +kt +kt +kt +kt +kt +kt +kt +hl hh aa aa @@ -31346,6 +31099,8 @@ aa aa aa aa +aa +aa "} (66,1,1) = {" aa @@ -31514,26 +31269,24 @@ hl kt kt kt -rd kt -td -ll -td +kt +nz +uJ +nz kt rd kt kt -kt -kt -kt -kt -kt -kt -kt -kt -kt -kt -kt +hl +hl +hl +hl +hl +hl +hl +hl +hl hh aa aa @@ -31603,6 +31356,8 @@ aa aa aa aa +aa +aa "} (67,1,1) = {" aa @@ -31789,8 +31544,6 @@ hl hl hl hl -hl -hl hh aa aa @@ -31860,6 +31613,8 @@ aa aa aa aa +aa +aa "} (68,1,1) = {" aa @@ -32046,8 +31801,6 @@ hl hl hl hl -hl -hl hh aa aa @@ -32117,6 +31870,8 @@ aa aa aa aa +aa +aa "} (69,1,1) = {" aa @@ -32303,8 +32058,6 @@ hl hl BY hl -hl -hl hh aa aa @@ -32374,6 +32127,8 @@ aa aa aa aa +aa +aa "} (70,1,1) = {" aa @@ -32539,7 +32294,7 @@ kt kt kt kt -pE +nz pY pZ rf @@ -32560,8 +32315,6 @@ hl BY Cp BY -hl -hl hh aa aa @@ -32631,6 +32384,8 @@ aa aa aa aa +aa +aa "} (71,1,1) = {" aa @@ -32817,8 +32572,6 @@ hl hl BY hl -hl -hl hh aa aa @@ -32888,6 +32641,8 @@ aa aa aa aa +aa +aa "} (72,1,1) = {" aa @@ -33074,8 +32829,6 @@ hl hl hl hl -hl -hl hh aa aa @@ -33145,6 +32898,8 @@ aa aa aa aa +aa +aa "} (73,1,1) = {" aa @@ -33303,8 +33058,8 @@ kR ll ku ku -mB -ng +nz +nz nz ku ku @@ -33323,7 +33078,7 @@ pZ ku ku ku -pE +nz ku ku hh @@ -33332,8 +33087,8 @@ hh hh hh hh -hh -hh +aa +aa aa aa aa @@ -34088,9 +33843,9 @@ rh ku ku ku -uK +nz uJ -uK +nz ku xH xG @@ -34345,9 +34100,9 @@ ri ri ku ku -tc +nz ll -tc +nz ku xI xG @@ -34602,9 +34357,9 @@ ri sj ku ku -tc +nz ll -tc +nz ku xJ xG @@ -34853,15 +34608,15 @@ hl mA hl pG -pE +nz qP rj ku ku ku -tc +nz ll -tc +nz ku xK xG @@ -35116,9 +34871,9 @@ ku ku ku ku -tc +nz ll -tc +nz ku ku ku @@ -35373,9 +35128,9 @@ ku sk sk sk -tc +nz ll -tc +nz sk sk sk @@ -35630,9 +35385,9 @@ ku sk th ue -tc +nz uJ -tc +nz ue xL sk @@ -56478,7 +56233,7 @@ Ep HM HW HN -Im +Il It It It @@ -56487,7 +56242,7 @@ It It It It -JJ +JI JQ Ka Ki @@ -56735,7 +56490,7 @@ Ep HN HW HN -Im +Il Iu IF IF @@ -56744,7 +56499,7 @@ IF IF IF Iu -JJ +JI JQ Ka Ki @@ -56992,7 +56747,7 @@ Ep HO HW Id -Im +Il It IG IG @@ -57001,7 +56756,7 @@ IG IG IG It -JJ +JI JR JY Ki @@ -57249,7 +57004,7 @@ Ep HN HW HN -Im +Il It IH IH @@ -57258,7 +57013,7 @@ IH IH IH It -JJ +JI JQ Ka Ki @@ -57506,7 +57261,7 @@ Ep HN HW HN -Im +Il It IH IH @@ -57515,7 +57270,7 @@ IH IH IH It -JJ +JI JQ Ka Ki @@ -57763,7 +57518,7 @@ Gy HN HW HN -Im +Il It IH IH @@ -57772,7 +57527,7 @@ Ji IH IH It -JJ +JI JR JY Ki @@ -58020,7 +57775,7 @@ Gx HL HW HN -Im +Il It IH IH @@ -58029,7 +57784,7 @@ Jq IH IH It -JJ +JI JS Kb Ki @@ -58277,7 +58032,7 @@ Ep HN HW HN -Im +Il It IH IH @@ -58286,7 +58041,7 @@ Ji IH IH It -JJ +JI JT JY Ki @@ -58534,7 +58289,7 @@ Ep HN HW HN -Im +Il It IH IH @@ -58543,7 +58298,7 @@ IH IH IH It -JJ +JI JQ Ka Ki @@ -58791,7 +58546,7 @@ Ep HN HW HN -Im +Il It IH IH @@ -58800,7 +58555,7 @@ IH IH IH It -JJ +JI JQ Ka Ki @@ -59048,7 +58803,7 @@ Ep HO HW Id -Im +Il It II II @@ -59057,7 +58812,7 @@ II II II It -JJ +JI JR JY Ki @@ -59305,7 +59060,7 @@ Ep HM HW HN -Im +Il Iu IF IF @@ -59314,7 +59069,7 @@ IF IF IF Iu -JJ +JI JQ Ka Ki @@ -59562,7 +59317,7 @@ Ep HN HW HN -Im +Il It It It @@ -59571,7 +59326,7 @@ It It It It -JJ +JI JQ Ka Ki @@ -59819,7 +59574,7 @@ Gx HL HW HW -In +Il Is IJ IY @@ -59828,7 +59583,7 @@ Jk Jt IJ Is -JK +JI JP Kc JY diff --git a/_maps/shuttles/emergency_asteroid.dmm b/_maps/shuttles/emergency_asteroid.dmm index dc75cd1fa6..3eba8d7a61 100644 --- a/_maps/shuttles/emergency_asteroid.dmm +++ b/_maps/shuttles/emergency_asteroid.dmm @@ -197,7 +197,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aP" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Brig"; req_access_txt = "2" }, @@ -297,7 +297,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "bg" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Emergency Shuttle Cockpit"; req_access_txt = "19" }, @@ -355,7 +355,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "bq" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "5" @@ -363,7 +363,7 @@ /turf/open/floor/mineral/titanium, /area/shuttle/escape) "br" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" diff --git a/_maps/shuttles/emergency_bar.dmm b/_maps/shuttles/emergency_bar.dmm index 6ba0875a66..b5104569ac 100644 --- a/_maps/shuttles/emergency_bar.dmm +++ b/_maps/shuttles/emergency_bar.dmm @@ -387,7 +387,7 @@ /turf/open/floor/plasteel/freezer, /area/shuttle/escape) "bq" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay" }, /turf/open/floor/mineral/titanium, diff --git a/_maps/shuttles/emergency_birdboat.dmm b/_maps/shuttles/emergency_birdboat.dmm index 3b2617bfe1..3b62aa9d7b 100644 --- a/_maps/shuttles/emergency_birdboat.dmm +++ b/_maps/shuttles/emergency_birdboat.dmm @@ -93,7 +93,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "as" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "bridge door"; req_access_txt = "19" }, @@ -134,7 +134,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "az" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "security airlock"; req_access_txt = "63" }, diff --git a/_maps/shuttles/emergency_cere.dmm b/_maps/shuttles/emergency_cere.dmm index 2090fbe199..f860593b6e 100644 --- a/_maps/shuttles/emergency_cere.dmm +++ b/_maps/shuttles/emergency_cere.dmm @@ -399,7 +399,7 @@ }, /area/shuttle/escape) "bn" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Brig"; req_access_txt = "2" }, @@ -717,7 +717,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "ce" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Emergency Shuttle Medbay" }, /turf/open/floor/plasteel/whiteblue, @@ -986,7 +986,7 @@ }, /area/shuttle/escape) "cP" = ( -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engine Room"; req_one_access_txt = "10;24" }, diff --git a/_maps/shuttles/emergency_delta.dmm b/_maps/shuttles/emergency_delta.dmm index e383e33e0b..6e22434fcd 100644 --- a/_maps/shuttles/emergency_delta.dmm +++ b/_maps/shuttles/emergency_delta.dmm @@ -306,7 +306,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aF" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -353,7 +353,6 @@ name = "emergency shower" }, /turf/open/floor/plasteel/whiteblue/side{ - baseturf = /turf/open/lava/smooth/lava_land_surface; dir = 4 }, /area/shuttle/escape) @@ -423,7 +422,7 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "aV" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -650,14 +649,14 @@ /turf/open/floor/plasteel, /area/shuttle/escape) "bt" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "2" }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "bu" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Cockpit"; req_access_txt = "19" }, diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 3ffdee6461..9824fec026 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -260,7 +260,7 @@ /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "aH" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Cockpit"; req_access_txt = "19" }, @@ -377,14 +377,14 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "aY" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Brig"; req_access_txt = "2" }, /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aZ" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" diff --git a/_maps/shuttles/emergency_meteor.dmm b/_maps/shuttles/emergency_meteor.dmm index 2b712a4943..6f9c0450d4 100644 --- a/_maps/shuttles/emergency_meteor.dmm +++ b/_maps/shuttles/emergency_meteor.dmm @@ -86,7 +86,7 @@ dwidth = 20; height = 40; movement_force = list("KNOCKDOWN" = 3, "THROW" = 6); - name = "a meteor with engines strapped to it"; + name = "\proper a meteor with engines strapped to it"; timid = 1; width = 40 }, diff --git a/_maps/shuttles/emergency_mini.dmm b/_maps/shuttles/emergency_mini.dmm index 13f4b803a8..6a4d35124c 100644 --- a/_maps/shuttles/emergency_mini.dmm +++ b/_maps/shuttles/emergency_mini.dmm @@ -82,14 +82,14 @@ /turf/open/floor/plating, /area/shuttle/escape) "o" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Escape Shuttle Cell"; req_access_txt = "2" }, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "p" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0" @@ -214,7 +214,7 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/escape) "I" = ( -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Escape Shuttle Cockpit"; req_access_txt = "19" }, diff --git a/_maps/shuttles/emergency_russiafightpit.dmm b/_maps/shuttles/emergency_russiafightpit.dmm index 1adc770925..b68eeba8e3 100644 --- a/_maps/shuttles/emergency_russiafightpit.dmm +++ b/_maps/shuttles/emergency_russiafightpit.dmm @@ -197,7 +197,7 @@ /turf/open/floor/mineral/plastitanium/brig, /area/shuttle/escape) "aI" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Brig"; req_access_txt = "2" }, @@ -231,7 +231,7 @@ /turf/open/floor/engine, /area/shuttle/escape) "aO" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Airlock"; req_access_txt = "2" }, @@ -280,7 +280,7 @@ name = "Box emergency shuttle"; timid = 1 }, -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Airlock" }, /turf/open/floor/plating, @@ -418,7 +418,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "br" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Airlock" }, /turf/open/floor/plating, @@ -438,7 +438,7 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/escape) "bu" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Cargo" }, /turf/open/floor/mineral/plastitanium, @@ -448,7 +448,7 @@ /turf/closed/wall, /area/shuttle/escape) "bw" = ( -/obj/machinery/door/airlock/glass_security{ +/obj/machinery/door/airlock/security/glass{ name = "Emergency Shuttle Infirmary" }, /turf/open/floor/mineral/plastitanium, diff --git a/_maps/shuttles/whiteship_delta.dmm b/_maps/shuttles/whiteship_delta.dmm index 78dabd2576..659408ffdf 100644 --- a/_maps/shuttles/whiteship_delta.dmm +++ b/_maps/shuttles/whiteship_delta.dmm @@ -201,7 +201,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_maintenance{ +/obj/machinery/door/airlock/maintenance/glass{ name = "Maintenance" }, /turf/open/floor/plasteel, @@ -252,7 +252,7 @@ }, /area/shuttle/abandoned) "aA" = ( -/obj/machinery/door/airlock/glass_maintenance{ +/obj/machinery/door/airlock/maintenance/glass{ name = "Maintenance" }, /turf/open/floor/plasteel, @@ -1014,7 +1014,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Infirmary"; req_access_txt = "0" @@ -1295,7 +1295,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_engineering{ +/obj/machinery/door/airlock/engineering/glass{ name = "Engineering Storage" }, /turf/open/floor/plasteel/neutral/side{ @@ -1614,7 +1614,7 @@ desc = "A thin layer of dust coating the floor."; name = "dust" }, -/obj/machinery/door/airlock/glass_command{ +/obj/machinery/door/airlock/command/glass{ name = "Bridge"; welded = 1 }, diff --git a/_maps/templates/pirate_ship.dmm b/_maps/templates/pirate_ship.dmm index e9be381c99..02da197578 100644 --- a/_maps/templates/pirate_ship.dmm +++ b/_maps/templates/pirate_ship.dmm @@ -538,7 +538,7 @@ /turf/open/floor/pod/dark, /area/shuttle/pirate/vault) "bs" = ( -/obj/machinery/door/airlock/glass_medical{ +/obj/machinery/door/airlock/medical/glass{ name = "Medbay" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 5a834b1f87..253e9f5888 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -61,7 +61,7 @@ //DNA - Because fuck you and your magic numbers being all over the codebase. #define DNA_BLOCK_SIZE 3 -#define DNA_UNI_IDENTITY_BLOCKS 19 +#define DNA_UNI_IDENTITY_BLOCKS 19 //CIT CHANGE - adds more DNA blocks for cit's mutant bodyparts. Update citadel_defines.dm if this gets changed. #define DNA_HAIR_COLOR_BLOCK 1 #define DNA_FACIAL_HAIR_COLOR_BLOCK 2 #define DNA_SKIN_TONE_BLOCK 3 @@ -69,19 +69,7 @@ #define DNA_GENDER_BLOCK 5 #define DNA_FACIAL_HAIR_STYLE_BLOCK 6 #define DNA_HAIR_STYLE_BLOCK 7 -#define DNA_EYE_COLOR_TWO_BLOCK 8 -#define DNA_EYE_COLOR_SWITCH_BLOCK 9 -#define DNA_EYE_COLOR_BLOCK 10 -#define DNA_COLOR_ONE_BLOCK 11 -#define DNA_COLOR_TWO_BLOCK 12 -#define DNA_COLOR_THR_BLOCK 13 -#define DNA_COLOR_SWITCH_BLOCK 14 -#define DNA_COLOR_SWITCH_MAX 7 //must be (2^(n+1))-1 -#define DNA_COCK_BLOCK 15 -#define DNA_MUTANTRACE_BLOCK 16 -#define DNA_MUTANTTAIL_BLOCK 17 -#define DNA_MUTANTWING_BLOCK 18 -#define DNA_WINGCOLOR_BLOCK 19 + #define DNA_STRUC_ENZYMES_BLOCKS 18 #define DNA_UNIQUE_ENZYMES_LEN 32 @@ -127,7 +115,7 @@ #define TOXINLOVER 24 #define DIGITIGRADE 25 //Uses weird leg sprites. Optional for Lizards, required for ashwalkers. Don't give it to other races unless you make sprites for this (see human_parts_greyscale.dmi) #define NO_UNDERWEAR 26 -#define NOLIVER 27 +#define NOLIVER 27 #define NOSTOMACH 28 #define NO_DNA_COPY 29 #define DRINKSBLOOD 30 @@ -135,11 +123,6 @@ #define SPECIES_INORGANIC 32 #define SPECIES_UNDEAD 33 #define SPECIES_ROBOTIC 34 -//citadel code -#define MUTCOLORS2 35 -#define MUTCOLORS3 36 -#define NOAROUSAL 37 //Stops all arousal effects -#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals #define ORGAN_SLOT_BRAIN "brain" #define ORGAN_SLOT_APPENDIX "appendix" diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 7622fc0ea7..2c60abb325 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -1,79 +1,5 @@ //A set of constants used to determine which type of mute an admin wishes to apply: //Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO etc = (MUTE_IC << 1) -//Therefore there needs to be a gap between the flags_1 for the automute flags_1 -#define MUTE_IC 1 -#define MUTE_OOC 2 -#define MUTE_PRAY 4 -#define MUTE_ADMINHELP 8 -#define MUTE_DEADCHAT 16 -#define MUTE_ALL 31 - -//Some constants for DB_Ban -#define BANTYPE_PERMA 1 -#define BANTYPE_TEMP 2 -#define BANTYPE_JOB_PERMA 3 -#define BANTYPE_JOB_TEMP 4 -#define BANTYPE_ANY_FULLBAN 5 //used to locate stuff to unban. - -#define BANTYPE_ADMIN_PERMA 7 -#define BANTYPE_ADMIN_TEMP 8 -#define BANTYPE_ANY_JOB 9 //used to remove jobbans - -//Please don't edit these values without speaking to Errorage first ~Carn -//Admin Permissions -#define R_BUILDMODE 1 -#define R_ADMIN 2 -#define R_BAN 4 -#define R_FUN 8 -#define R_SERVER 16 -#define R_DEBUG 32 -#define R_POSSESS 64 -#define R_PERMISSIONS 128 -#define R_STEALTH 256 -#define R_POLL 512 -#define R_VAREDIT 1024 -#define R_SOUNDS 2048 -#define R_SPAWN 4096 - -#if DM_VERSION > 512 -#error Remove the flag below , its been long enough -#endif -//legacy , remove post 512, it was replaced by R_POLL -#define R_REJUVINATE 2 - -#define R_MAXPERMISSION 4096 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. - -#define ADMIN_QUE(user) "(?)" -#define ADMIN_FLW(user) "(FLW)" -#define ADMIN_PP(user) "(PP)" -#define ADMIN_VV(atom) "(VV)" -#define ADMIN_SM(user) "(SM)" -#define ADMIN_TP(user) "(TP)" -#define ADMIN_KICK(user) "(KICK)" -#define ADMIN_CENTCOM_REPLY(user) "(RPLY)" -#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)" -#define ADMIN_SC(user) "(SC)" -#define ADMIN_SMITE(user) "(SMITE)" -#define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]" -#define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" -#define ADMIN_SET_SD_CODE "(SETCODE)" -#define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)] [ADMIN_INDIVIDUALLOG(user)] [ADMIN_SMITE(user)]" -#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]" -#define ADMIN_JMP(src) "(JMP)" -#define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" -#define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" -#define ADMIN_INDIVIDUALLOG(user) "(LOGS)" - -#define ADMIN_PUNISHMENT_LIGHTNING "Lightning bolt" -#define ADMIN_PUNISHMENT_BRAINDAMAGE "Brain damage" -#define ADMIN_PUNISHMENT_GIB "Gib" -#define ADMIN_PUNISHMENT_BSA "Bluespace Artillery Device" - -#define AHELP_ACTIVE 1 -#define AHELP_CLOSED 2 -#define AHELP_RESOLVED 3 -//A set of constants used to determine which type of mute an admin wishes to apply: -//Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO etc = (MUTE_IC << 1) //Therefore there needs to be a gap between the flags for the automute flags #define MUTE_IC 1 #define MUTE_OOC 2 diff --git a/code/__DEFINES/antagonists.dm b/code/__DEFINES/antagonists.dm index 17b6e60158..1fba96b1eb 100644 --- a/code/__DEFINES/antagonists.dm +++ b/code/__DEFINES/antagonists.dm @@ -9,10 +9,12 @@ #define ANTAG_DATUM_TRAITOR /datum/antagonist/traitor #define ANTAG_DATUM_TRAITOR_HUMAN /datum/antagonist/traitor/human #define ANTAG_DATUM_TRAITOR_AI /datum/antagonist/traitor/AI -#define ANTAG_DATUM_IAA /datum/antagonist/traitor/internal_affairs +#define ANTAG_DATUM_IAA /datum/antagonist/traitor/internal_affairs #define ANTAG_DATUM_IAA_HUMAN /datum/antagonist/traitor/human/internal_affairs -#define ANTAG_DATUM_IAA_AI /datum/antagonist/traitor/AI/internal_affairs +#define ANTAG_DATUM_IAA_AI /datum/antagonist/traitor/AI/internal_affairs #define ANTAG_DATUM_BROTHER /datum/antagonist/brother #define ANTAG_DATUM_ABDUCTOR /datum/antagonist/abductor -#define ANTAG_DATUM_ABDUCTOR_SCIENTIST /datum/antagonist/abductor/scientist -#define ANTAG_DATUM_ABDUCTOR_AGENT /datum/antagonist/abductor/agent +#define ANTAG_DATUM_ABDUCTOR_SCIENTIST /datum/antagonist/abductor/scientist +#define ANTAG_DATUM_ABDUCTOR_AGENT /datum/antagonist/abductor/agent +#define ANTAG_DATUM_MONKEY /datum/antagonist/monkey +#define ANTAG_DATUM_MONKEY_LEADER /datum/antagonist/monkey/leader \ No newline at end of file diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 1024bb1229..b0e0e483e6 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -14,9 +14,10 @@ //stuff you should probably leave well alone! #define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol) #define ONE_ATMOSPHERE 101.325 //kPa +#define TCMB 2.7 // -270.3degC +#define TCRYO 225 // -48.15degC #define T0C 273.15 // 0degC #define T20C 293.15 // 20degC -#define TCMB 2.7 // -270.3degC #define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC #define M_CELL_WITH_RATIO (MOLES_CELLSTANDARD * 0.005) //compared against for superconductivity @@ -87,6 +88,7 @@ #define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 //This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount. #define BODYTEMP_AUTORECOVERY_DIVISOR 12 //This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive. #define BODYTEMP_AUTORECOVERY_MINIMUM 10 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50. +#define BODYTEMP_NORMAL 310.15 //98.6F, or 37C, the normal temprature of the human body. #define BODYTEMP_COLD_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. #define BODYTEMP_HEAT_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. #define BODYTEMP_COOLING_MAX 30 //The maximum number of degrees that your body can cool in 1 tick, when in a cold area. @@ -129,38 +131,12 @@ #define MAX_OUTPUT_PRESSURE 4500 // (kPa) What pressure pumps and powered equipment max out at. #define MAX_TRANSFER_RATE 200 // (L/s) Maximum speed powered equipment can work at. -//used for device_type vars; used by DEVICE_TYPE_LOOP +//used for device_type vars #define UNARY 1 #define BINARY 2 #define TRINARY 3 #define QUATERNARY 4 -//TODO: finally remove this bullshit -//this is the standard for loop used by all sorts of atmos machinery procs -#define DEVICE_TYPE_LOOP var/I in 1 to device_type - -//defines for the various machinery lists -//NODE_I, AIR_I, PARENT_I are used within DEVICE_TYPE_LOOP - -//nodes list - all atmos machinery -#define NODE1 nodes[1] -#define NODE2 nodes[2] -#define NODE3 nodes[3] -#define NODE4 nodes[4] -#define NODE_I nodes[I] - -//airs list - components only -#define AIR1 airs[1] -#define AIR2 airs[2] -#define AIR3 airs[3] -#define AIR_I airs[I] - -//parents list - components only -#define PARENT1 parents[1] -#define PARENT2 parents[2] -#define PARENT3 parents[3] -#define PARENT_I parents[I] - //TANKS #define TANK_MELT_TEMPERATURE 1000000 //temperature in kelvins at which a tank will start to melt #define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) //Tank starts leaking diff --git a/code/__DEFINES/citadel_defines.dm b/code/__DEFINES/citadel_defines.dm index 4c8243cdc5..ff60d1c030 100644 --- a/code/__DEFINES/citadel_defines.dm +++ b/code/__DEFINES/citadel_defines.dm @@ -71,3 +71,31 @@ #define ADMIN_MARKREAD(client) "(MARK READ)"//marks an adminhelp as read and under investigation #define ADMIN_IC(client) "(IC)"//marks and adminhelp as an IC issue #define ADMIN_REJECT(client) "(REJT)"//Rejects an adminhelp for being unclear or otherwise unhelpful. resets their adminhelp timer + +//Damage stuffs +#define AROUSAL "arousal" + +//DNA stuffs. Remember to change this if upstream adds more snowflake options +#define DNA_EYE_COLOR_TWO_BLOCK 8 +#define DNA_EYE_COLOR_SWITCH_BLOCK 9 +#define DNA_EYE_COLOR_BLOCK 10 +#define DNA_COLOR_ONE_BLOCK 11 +#define DNA_COLOR_TWO_BLOCK 12 +#define DNA_COLOR_THR_BLOCK 13 +#define DNA_COLOR_SWITCH_BLOCK 14 +#define DNA_COLOR_SWITCH_MAX 7 //must be (2^(n+1))-1 +#define DNA_COCK_BLOCK 15 +#define DNA_MUTANTRACE_BLOCK 16 +#define DNA_MUTANTTAIL_BLOCK 17 +#define DNA_MUTANTWING_BLOCK 18 +#define DNA_WINGCOLOR_BLOCK 19 + + +//Species stuffs. Remember to change this if upstream updates species flags +#define MUTCOLORS2 35 +#define MUTCOLORS3 36 +#define NOAROUSAL 37 //Stops all arousal effects +#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals + +//Brainslugs +#define isborer(A) (istype(A, /mob/living/simple_animal/borer)) diff --git a/code/__DEFINES/cleaning.dm b/code/__DEFINES/cleaning.dm index 9f32992eb0..eed0ee5f54 100644 --- a/code/__DEFINES/cleaning.dm +++ b/code/__DEFINES/cleaning.dm @@ -4,4 +4,9 @@ #define CLEAN_MEDIUM 3 // Acceptable tools #define CLEAN_STRONG 4 // Industrial strength #define CLEAN_IMPRESSIVE 5 // Cleaning strong enough your granny would be proud -#define CLEAN_GOD 6 // Cleans things spotless down to the atomic structure \ No newline at end of file +#define CLEAN_GOD 6 // Cleans things spotless down to the atomic structure + +//How strong things have to be to wipe forensic evidence... +#define CLEAN_STRENGTH_FINGERPRINTS CLEAN_IMPRESSIVE +#define CLEAN_STRENGTH_BLOOD CLEAN_WEAK +#define CLEAN_STRENGTH_FIBERS CLEAN_IMPRESSIVE diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm new file mode 100644 index 0000000000..b8a9f0d6c4 --- /dev/null +++ b/code/__DEFINES/colors.dm @@ -0,0 +1,4 @@ +// This is eventualy for wjohn to add more color standardization stuff like I keep asking him >:( + +#define COLOR_INPUT_DISABLED "#F0F0F0" +#define COLOR_INPUT_ENABLED "#D3B5B5" \ No newline at end of file diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 3b08375d0d..582074fcba 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -11,9 +11,6 @@ #define STAMINA "stamina" #define BRAIN "brain" -//Citadel code -#define AROUSAL "arousal" - //bitflag damage defines used for suicide_act #define BRUTELOSS 1 #define FIRELOSS 2 @@ -22,9 +19,6 @@ #define SHAME 16 #define MANUAL_SUICIDE 32 //suicide_act will do the actual killing. -//Citadel code -#define AROUSAL 32 - #define STUN "stun" #define KNOCKDOWN "knockdown" #define UNCONSCIOUS "unconscious" diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 78ade5c650..b5f48f8217 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -27,6 +27,13 @@ #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) #define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob) +#define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides) + //Positions for overrides list + #define EXAMINE_POSITION_ARTICLE 1 + #define EXAMINE_POSITION_BEFORE 2 + #define EXAMINE_POSITION_NAME 3 + //End positions + #define COMPONENT_EXNAME_CHANGED 1 #define COMSIG_ATOM_ENTERED "atom_entered" //from base of atom/Entered(): (/atom/movable, /atom) #define COMSIG_ATOM_EX_ACT "atom_ex_act" //from base of atom/ex_act(): (severity, target) #define COMSIG_ATOM_EMP_ACT "atom_emp_act" //from base of atom/emp_act(): (severity) @@ -68,14 +75,6 @@ // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () -// /obj/item signals -#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (mob/living/target, mob/living/user) -#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (mob) -#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (obj, mob) - -// /obj/item/clothing signals -#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () - // /obj/machinery signals #define COMSIG_MACHINE_PROCESS "machine_process" //from machinery subsystem fire(): () #define COMSIG_MACHINE_PROCESS_ATMOS "machine_process_atmos" //from air subsystem process_atmos_machinery(): () diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index 965ee51502..8b3e74b96e 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define ON_BORDER_1 512 // item has priority to check when entering or leaving #define NOSLIP_1 1024 //prevents from slipping on wet floors, in space etc -#define CLEAN_ON_MOVE_1 2048 +#define _UNUSED_1 2048 // BLOCK_GAS_SMOKE_EFFECT_1 only used in masks at the moment. #define BLOCK_GAS_SMOKE_EFFECT_1 4096 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! diff --git a/code/__DEFINES/forensics.dm b/code/__DEFINES/forensics.dm new file mode 100644 index 0000000000..bb512edcde --- /dev/null +++ b/code/__DEFINES/forensics.dm @@ -0,0 +1,2 @@ +#define IF_HAS_BLOOD_DNA(__thing) GET_COMPONENT_FROM(__FR##__thing, /datum/component/forensics, __thing); if(__FR##__thing && length(__FR##__thing.blood_DNA)) +#define IF_HAS_BLOOD_DNA_AND(__thing, __conditions...) GET_COMPONENT_FROM(__FR##__thing, /datum/component/forensics, __thing); if(__FR##__thing && length(__FR##__thing.blood_DNA) && (##__conditions)) diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index a1842648ac..d2de6f9100 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -86,7 +86,7 @@ . = SLOT_POCKET -//Bit flags_1 for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. +//Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses. #define HIDEGLOVES 1 #define HIDESUITSTORAGE 2 #define HIDEJUMPSUIT 4 //these first four are only used in exterior suits @@ -134,17 +134,17 @@ #define THERMAL_PROTECTION_HAND_LEFT 0.025 #define THERMAL_PROTECTION_HAND_RIGHT 0.025 -//flags_1 for female outfits: How much the game can safely "take off" the uniform without it looking weird +//flags for female outfits: How much the game can safely "take off" the uniform without it looking weird #define NO_FEMALE_UNIFORM 0 #define FEMALE_UNIFORM_FULL 1 #define FEMALE_UNIFORM_TOP 2 -//flags_1 for alternate styles: These are hard sprited so don't set this if you didn't put the effort in +//flags for alternate styles: These are hard sprited so don't set this if you didn't put the effort in #define NORMAL_STYLE 0 #define ALT_STYLE 1 #define DIGITIGRADE_STYLE 2 -//flags_1 for outfits that have mutantrace variants (try not to use this): Currently only needed if you're trying to add tight fitting bootyshorts +//flags for outfits that have mutantrace variants (try not to use this): Currently only needed if you're trying to add tight fitting bootyshorts #define NO_MUTANTRACE_VARIATION 0 #define MUTANTRACE_VARIATION 1 @@ -152,9 +152,9 @@ #define FULL_DIGITIGRADE 1 #define SQUISHED_DIGITIGRADE 2 -//flags_1 for covering body parts +//flags for covering body parts #define GLASSESCOVERSEYES 1 -#define MASKCOVERSEYES 2 // get rid of some of the other retardation in these flags_1 +#define MASKCOVERSEYES 2 // get rid of some of the other retardation in these flags #define HEADCOVERSEYES 4 // feel free to realloc these numbers for other purposes #define MASKCOVERSMOUTH 8 // on other items, these are just for mask/head #define HEADCOVERSMOUTH 16 @@ -199,7 +199,8 @@ GLOBAL_LIST_INIT(detective_vest_allowed, typecacheof(list( /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/storage/fancy/cigarettes, - /obj/item/tank/internals/emergency_oxygen))) + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman))) GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( /obj/item/ammo_box, @@ -212,7 +213,8 @@ GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( /obj/item/melee/classic_baton/telescopic, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, - /obj/item/tank/internals/emergency_oxygen))) + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman))) GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( /obj/item/ammo_box, @@ -227,4 +229,5 @@ GLOBAL_LIST_INIT(security_wintercoat_allowed, typecacheof(list( /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman, /obj/item/toy))) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index da25d34880..addeca8739 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -4,7 +4,14 @@ #define islist(L) (istype(L, /list)) +#if DM_VERSION >= 512 +#define in_range(source, user) (get_dist(source, user) <= 1 && (get_step(source, 0)?:z) == (get_step(user, 0)?:z)) +#if DM_VERSION > 512 +#warn Remove this check. +#endif +#else #define in_range(source, user) (get_dist(source, user) <= 1) +#endif #define ismovableatom(A) (istype(A, /atom/movable)) @@ -95,8 +102,6 @@ #define isrevenant(A) (istype(A, /mob/living/simple_animal/revenant)) -#define isborer(A) (istype(A, /mob/living/simple_animal/borer)) - #define isbot(A) (istype(A, /mob/living/simple_animal/bot)) #define iscrab(A) (istype(A, /mob/living/simple_animal/crab)) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index b5d07646d7..7ea710dd3b 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -49,7 +49,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define FRIDAY_13TH "Friday the 13th" //Human Overlays Indexes///////// -//citadel code +//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS #define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc #define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer #define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts @@ -334,9 +334,9 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #endif #endif - // Consider these images/atoms as part of the UI/HUD +// Consider these images/atoms as part of the UI/HUD #define APPEARANCE_UI_IGNORE_ALPHA RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|RESET_ALPHA|PIXEL_SCALE -#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR +#define APPEARANCE_UI RESET_COLOR|RESET_TRANSFORM|NO_CLIENT_COLOR|PIXEL_SCALE //Just space #define SPACE_ICON_STATE "[((x + y) ^ ~(x * y) + z) % 25]" @@ -444,6 +444,7 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define GIBTONITE_ACTIVE 1 #define GIBTONITE_STABLE 2 #define GIBTONITE_DETONATE 3 + //for obj explosion block calculation #define EXPLOSION_BLOCK_PROC -1 @@ -452,8 +453,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define BEAT_SLOW 2 #define BEAT_NONE 0 -#define BEAT_CHANNEL 150 - //http://www.byond.com/docs/ref/info.html#/atom/var/mouse_opacity #define MOUSE_OPACITY_TRANSPARENT 0 #define MOUSE_OPACITY_ICON 1 @@ -484,9 +483,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define SYRINGE_DRAW 0 #define SYRINGE_INJECT 1 -#define RESEARCH_MATERIAL_RECLAMATION_ID "0" - - //gold slime core spawning #define NO_SPAWN 0 #define HOSTILE_SPAWN 1 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 707ef6a9c1..95a7b3c63d 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -108,6 +108,7 @@ #define AI_ON 1 #define AI_IDLE 2 #define AI_OFF 3 +#define AI_Z_OFF 4 //determines if a mob can smash through it #define ENVIRONMENT_SMASH_NONE 0 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index b6133df287..d7a5356f0f 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -1,52 +1,52 @@ - -//Preference toggles -#define SOUND_ADMINHELP 1 -#define SOUND_MIDI 2 -#define SOUND_AMBIENCE 4 -#define SOUND_LOBBY 8 -#define MEMBER_PUBLIC 16 -#define INTENT_STYLE 32 -#define MIDROUND_ANTAG 64 -#define SOUND_INSTRUMENTS 128 -#define SOUND_SHIP_AMBIENCE 256 -#define SOUND_PRAYERS 512 -#define ANNOUNCE_LOGIN 1024 -#define SOUND_ANNOUNCEMENTS 2048 -#define DISABLE_DEATHRATTLE 4096 -#define DISABLE_ARRIVALRATTLE 8192 - -#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS) - -//Chat toggles -#define CHAT_OOC 1 -#define CHAT_DEAD 2 -#define CHAT_GHOSTEARS 4 -#define CHAT_GHOSTSIGHT 8 -#define CHAT_PRAYER 16 -#define CHAT_RADIO 32 -#define CHAT_PULLR 64 -#define CHAT_GHOSTWHISPER 128 -#define CHAT_GHOSTPDA 256 -#define CHAT_GHOSTRADIO 512 -#define CHAT_LOOC 1024 - -#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC) - -#define PARALLAX_INSANE -1 //for show offs -#define PARALLAX_HIGH 0 //default. -#define PARALLAX_MED 1 -#define PARALLAX_LOW 2 -#define PARALLAX_DISABLE 3 //this option must be the highest number - -#define PARALLAX_DELAY_DEFAULT world.tick_lag -#define PARALLAX_DELAY_MED 1 -#define PARALLAX_DELAY_LOW 2 - -#define SEC_DEPT_NONE "None" -#define SEC_DEPT_RANDOM "Random" -#define SEC_DEPT_ENGINEERING "Engineering" -#define SEC_DEPT_MEDICAL "Medical" -#define SEC_DEPT_SCIENCE "Science" + +//Preference toggles +#define SOUND_ADMINHELP 1 +#define SOUND_MIDI 2 +#define SOUND_AMBIENCE 4 +#define SOUND_LOBBY 8 +#define MEMBER_PUBLIC 16 +#define INTENT_STYLE 32 +#define MIDROUND_ANTAG 64 +#define SOUND_INSTRUMENTS 128 +#define SOUND_SHIP_AMBIENCE 256 +#define SOUND_PRAYERS 512 +#define ANNOUNCE_LOGIN 1024 +#define SOUND_ANNOUNCEMENTS 2048 +#define DISABLE_DEATHRATTLE 4096 +#define DISABLE_ARRIVALRATTLE 8192 + +#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS) + +//Chat toggles +#define CHAT_OOC 1 +#define CHAT_DEAD 2 +#define CHAT_GHOSTEARS 4 +#define CHAT_GHOSTSIGHT 8 +#define CHAT_PRAYER 16 +#define CHAT_RADIO 32 +#define CHAT_PULLR 64 +#define CHAT_GHOSTWHISPER 128 +#define CHAT_GHOSTPDA 256 +#define CHAT_GHOSTRADIO 512 +#define CHAT_LOOC 1024 + +#define TOGGLES_DEFAULT_CHAT (CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_PULLR|CHAT_GHOSTWHISPER|CHAT_GHOSTPDA|CHAT_GHOSTRADIO|CHAT_LOOC) + +#define PARALLAX_INSANE -1 //for show offs +#define PARALLAX_HIGH 0 //default. +#define PARALLAX_MED 1 +#define PARALLAX_LOW 2 +#define PARALLAX_DISABLE 3 //this option must be the highest number + +#define PARALLAX_DELAY_DEFAULT world.tick_lag +#define PARALLAX_DELAY_MED 1 +#define PARALLAX_DELAY_LOW 2 + +#define SEC_DEPT_NONE "None" +#define SEC_DEPT_RANDOM "Random" +#define SEC_DEPT_ENGINEERING "Engineering" +#define SEC_DEPT_MEDICAL "Medical" +#define SEC_DEPT_SCIENCE "Science" #define SEC_DEPT_SUPPLY "Supply" // Playtime tracking system, see jobs_exp.dm diff --git a/code/__DEFINES/radio.dm b/code/__DEFINES/radio.dm index edacfb836a..e38fe9954b 100644 --- a/code/__DEFINES/radio.dm +++ b/code/__DEFINES/radio.dm @@ -1,5 +1,56 @@ -#define MIN_FREE_FREQ 1201 -#define MAX_FREE_FREQ 1599 +// Radios use a large variety of predefined frequencies. -#define MIN_FREQ 1441 -#define MAX_FREQ 1489 \ No newline at end of file +#define MIN_FREE_FREQ 1201 // ------------------------------------------------- +// Frequencies are always odd numbers and range from 1201 to 1599. + +#define FREQ_SYNDICATE 1213 // Nuke op comms frequency, dark brown +#define FREQ_CTF_RED 1215 // CTF red team comms frequency, red +#define FREQ_CTF_BLUE 1217 // CTF blue team comms frequency, blue +#define FREQ_CENTCOM 1337 // CentCom comms frequency, gray +#define FREQ_SUPPLY 1347 // Supply comms frequency, light brown +#define FREQ_SERVICE 1349 // Service comms frequency, green +#define FREQ_SCIENCE 1351 // Science comms frequency, plum +#define FREQ_COMMAND 1353 // Command comms frequency, gold +#define FREQ_MEDICAL 1355 // Medical comms frequency, soft blue +#define FREQ_ENGINEERING 1357 // Engineering comms frequency, orange +#define FREQ_SECURITY 1359 // Security comms frequency, red + +#define FREQ_STATUS_DISPLAYS 1435 +#define FREQ_ATMOS_ALARMS 1437 // air alarms <-> alert computers +#define FREQ_ATMOS_CONTROL 1439 // air alarms <-> vents and scrubbers + +#define MIN_FREQ 1441 // ------------------------------------------------------ +// Only the 1441 to 1489 range is freely available for general conversation. +// This represents 1/8th of the available spectrum. + +#define FREQ_ATMOS_STORAGE 1441 +#define FREQ_NAV_BEACON 1445 +#define FREQ_AI_PRIVATE 1447 // AI private comms frequency, magenta +#define FREQ_PRESSURE_PLATE 1447 +#define FREQ_AIRLOCK_CONTROL 1449 +#define FREQ_ELECTROPACK 1449 +#define FREQ_MAGNETS 1449 +#define FREQ_LOCATOR_IMPLANT 1451 +#define FREQ_SIGNALER 1457 // the default for new signalers +#define FREQ_COMMON 1459 // Common comms frequency, dark green + +#define MAX_FREQ 1489 // ------------------------------------------------------ + +#define MAX_FREE_FREQ 1599 // ------------------------------------------------- + +// Transmission types. +#define TRANSMISSION_WIRE 0 // some sort of wired connection, not used +#define TRANSMISSION_RADIO 1 // electromagnetic radiation (default) +#define TRANSMISSION_SUBSPACE 2 // subspace transmission (headsets only) +#define TRANSMISSION_SUPERSPACE 3 // reaches independent (CentCom) radios only + +// Filter types, used as an optimization to avoid unnecessary proc calls. +#define RADIO_TO_AIRALARM "to_airalarm" +#define RADIO_FROM_AIRALARM "from_airalarm" +#define RADIO_SIGNALER "signaler" +#define RADIO_ATMOSIA "atmosia" +#define RADIO_NAVBEACONS "navbeacons" +#define RADIO_AIRLOCK "airlock" +#define RADIO_MAGNETS "magnets" + +#define DEFAULT_SIGNALER_CODE 30 diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 14e6798528..bb2e232886 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -1,4 +1,8 @@ +#define RDCONSOLE_UI_MODE_NORMAL 1 +#define RDCONSOLE_UI_MODE_EXPERT 2 +#define RDCONSOLE_UI_MODE_LIST 3 + //RDSCREEN screens #define RDSCREEN_MENU 0 #define RDSCREEN_TECHDISK 1 @@ -59,3 +63,5 @@ //#define DEPARTMENTAL_FLAG_MINING 128 #define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" + +#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials" diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index 74a1669686..8f38acb203 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -17,6 +17,7 @@ #define MODE_HOLOPAD "holopad" #define MODE_CHANGELING "changeling" #define MODE_VOCALCORDS "cords" +#define MODE_MONKEY "monkeyhive" //Spans. Robot speech, italics, etc. Applied in compose_message(). #define SPAN_ROBOT "robot" diff --git a/code/__DEFINES/server_tools.dm b/code/__DEFINES/server_tools.dm index c0fc133ada..a444caf02a 100644 --- a/code/__DEFINES/server_tools.dm +++ b/code/__DEFINES/server_tools.dm @@ -5,7 +5,7 @@ //use this define if you want to do configuration outside of this file #ifndef SERVER_TOOLS_EXTERNAL_CONFIGURATION //Comment this out once you've filled in the below -//#error /tg/station server tools interface unconfigured +#error /tg/station server tools interface unconfigured //Required interfaces (fill in with your codebase equivalent): diff --git a/code/__DEFINES/shuttles.dm b/code/__DEFINES/shuttles.dm index b961c9bd44..e3f1731a13 100644 --- a/code/__DEFINES/shuttles.dm +++ b/code/__DEFINES/shuttles.dm @@ -61,7 +61,6 @@ #define DOCKING_NULL_DESTINATION 8 #define DOCKING_NULL_SOURCE 16 - //Docking turf movements #define MOVE_TURF 1 #define MOVE_AREA 2 @@ -75,3 +74,9 @@ #define SHUTTLE_DOCKER_LANDING_CLEAR 1 #define SHUTTLE_DOCKER_BLOCKED_BY_HIDDEN_PORT 2 #define SHUTTLE_DOCKER_BLOCKED 3 + +//Shuttle defaults +#define SHUTTLE_DEFAULT_TURF_TYPE /turf/open/space +#define SHUTTLE_DEFAULT_BASETURF_TYPE /turf/open/space +#define SHUTTLE_DEFAULT_SHUTTLE_AREA_TYPE /area/shuttle +#define SHUTTLE_DEFAULT_UNDERLYING_AREA /area/space \ No newline at end of file diff --git a/code/__DEFINES/sight.dm b/code/__DEFINES/sight.dm index 218afcafb7..d756cbaf1b 100644 --- a/code/__DEFINES/sight.dm +++ b/code/__DEFINES/sight.dm @@ -25,6 +25,6 @@ //for clothing visor toggles, these determine which vars to toggle #define VISOR_FLASHPROTECT 1 #define VISOR_TINT 2 -#define VISOR_VISIONFLAGS 4 //all following flags_1 only matter for glasses +#define VISOR_VISIONFLAGS 4 //all following flags only matter for glasses #define VISOR_DARKNESSVIEW 8 #define VISOR_INVISVIEW 16 diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 8b93c8e38f..6bd8596fb6 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -9,14 +9,14 @@ #define CHANNEL_BUZZ 1017 #define CHANNEL_BICYCLE 1016 -//Citadel code +//CIT CHANNELS - TRY NOT TO REGRESS #define CHANNEL_PRED 1015 #define CHANNEL_PREYLOOP 1014 //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1013 +#define CHANNEL_HIGHEST_AVAILABLE 1013 //CIT CHANGE - COMPENSATES FOR VORESOUND CHANNELS #define SOUND_MINIMUM_PRESSURE 10 diff --git a/code/__DEFINES/stat.dm b/code/__DEFINES/stat.dm index a23f050c13..96dceb6db2 100644 --- a/code/__DEFINES/stat.dm +++ b/code/__DEFINES/stat.dm @@ -10,17 +10,32 @@ //mob disabilities stat -#define BLIND 1 -#define MUTE 2 -#define DEAF 4 -#define NEARSIGHT 8 -#define FAT 32 -#define HUSK 64 -#define NOCLONE 128 -#define CLUMSY 256 -#define DUMB 512 -#define MONKEYLIKE 1024 //sets IsAdvancedToolUser to FALSE -#define PACIFISM 2048 +#define DISABILITY_BLIND "blind" +#define DISABILITY_MUTE "mute" +#define DISABILITY_DEAF "deaf" +#define DISABILITY_NEARSIGHT "nearsighted" +#define DISABILITY_FAT "fat" +#define DISABILITY_HUSK "husk" +#define DISABILITY_NOCLONE "noclone" +#define DISABILITY_CLUMSY "clumsy" +#define DISABILITY_DUMB "dumb" +#define DISABILITY_MONKEYLIKE "monkeylike" //sets IsAdvancedToolUser to FALSE +#define DISABILITY_PACIFISM "pacifism" + +// common disability sources +#define EYE_DAMAGE "eye_damage" +#define GENETIC_MUTATION "genetic" +#define OBESITY "obesity" +#define MAGIC_DISABILITY "magic" +#define STASIS_MUTE "stasis" +#define GENETICS_SPELL "genetics_spell" +#define TRAUMA_DISABILITY "trauma" +#define CHEMICAL_DISABILITY "chemical" + +// unique disability sources, still defines +#define STATUE_MUTE "statue" +#define CHANGELING_DRAIN "drain" +#define ABYSSAL_GAZE_BLIND "abyssal_gaze" // bitflags for machine stat variable #define BROKEN 1 diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 4f36ddbb1e..2e1524ebac 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -64,6 +64,8 @@ #define STATUS_EFFECT_KINDLE /datum/status_effect/kindle //A knockdown reduced by 1 second for every 3 points of damage the target takes. +#define STATUS_EFFECT_ICHORIAL_STAIN /datum/status_effect/ichorial_stain //Prevents a servant from being revived by vitality matrices for one minute. + ///////////// // NEUTRAL // ///////////// diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 5a0dded276..dcabb26e23 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -46,16 +46,17 @@ #define INIT_ORDER_DBCORE 18 #define INIT_ORDER_BLACKBOX 17 #define INIT_ORDER_SERVER_MAINT 16 -#define INIT_ORDER_RESEARCH 15 -#define INIT_ORDER_EVENTS 14 -#define INIT_ORDER_JOBS 13 -#define INIT_ORDER_TICKER 12 -#define INIT_ORDER_MAPPING 11 -#define INIT_ORDER_ATOMS 10 -#define INIT_ORDER_NETWORKS 9 -#define INIT_ORDER_LANGUAGE 8 -#define INIT_ORDER_MACHINES 7 -#define INIT_ORDER_CIRCUIT 6 +#define INIT_ORDER_INPUT 15 +#define INIT_ORDER_RESEARCH 14 +#define INIT_ORDER_EVENTS 13 +#define INIT_ORDER_JOBS 12 +#define INIT_ORDER_TICKER 11 +#define INIT_ORDER_MAPPING 10 +#define INIT_ORDER_ATOMS 9 +#define INIT_ORDER_NETWORKS 8 +#define INIT_ORDER_LANGUAGE 7 +#define INIT_ORDER_MACHINES 6 +#define INIT_ORDER_CIRCUIT 5 #define INIT_ORDER_TIMER 1 #define INIT_ORDER_DEFAULT 0 #define INIT_ORDER_AIR -1 @@ -70,6 +71,40 @@ #define INIT_ORDER_SQUEAK -40 #define INIT_ORDER_PERSISTENCE -100 +// Subsystem fire priority, from lowest to highest priority +// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child) + +#define FIRE_PRIORITY_IDLE_NPC 1 +#define FIRE_PRIORITY_SERVER_MAINT 1 + +#define FIRE_PRIORITY_GARBAGE 4 +#define FIRE_PRIORITY_RESEARCH 4 +#define FIRE_PRIORITY_AIR 5 +#define FIRE_PRIORITY_NPC 5 +#define FIRE_PRIORITY_PROCESS 6 +#define FIRE_PRIORITY_THROWING 6 +#define FIRE_PRIORITY_FLIGHTPACKS 7 +#define FIRE_PRIORITY_SPACEDRIFT 7 +#define FIRE_PRIOTITY_SMOOTHING 8 +#define FIRE_PRIORITY_ORBIT 8 +#define FIRE_PRIORITY_OBJ 9 +#define FIRE_PRIORUTY_FIELDS 9 +#define FIRE_PRIORITY_ACID 9 +#define FIRE_PRIOTITY_BURNING 9 +#define FIRE_PRIORITY_INBOUNDS 9 + +#define FIRE_PRIORITY_DEFAULT 10 + +#define FIRE_PRIORITY_PARALLAX 11 +#define FIRE_PRIORITY_NETWORKS 12 +#define FIRE_PRIORITY_MOBS 13 +#define FIRE_PRIORITY_TGUI 14 + +#define FIRE_PRIORITY_TICKER 19 +#define FIRE_PRIORITY_OVERLAYS 20 + +#define FIRE_PRIORITY_INPUT 100 // This must always always be the max highest priority. Player input must never be lost. + // SS runlevels #define RUNLEVEL_INIT 0 @@ -102,4 +137,4 @@ A.overlays.Cut();\ }\ A.flags_1 &= ~OVERLAY_QUEUED_1;\ - } + } \ No newline at end of file diff --git a/code/__DEFINES/turf_flags.dm b/code/__DEFINES/turf_flags.dm new file mode 100644 index 0000000000..fd89041207 --- /dev/null +++ b/code/__DEFINES/turf_flags.dm @@ -0,0 +1,3 @@ +#define CHANGETURF_DEFER_CHANGE 1 +#define CHANGETURF_IGNORE_AIR 2 +#define CHANGETURF_FORCEOP 4 \ No newline at end of file diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 3831349536..a9f5766eb6 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -30,7 +30,7 @@ GLOBAL_VAR_INIT(cmp_field, "name") return sorttext(a.ckey, b.ckey) /proc/cmp_subsystem_init(datum/controller/subsystem/a, datum/controller/subsystem/b) - return b.init_order - a.init_order + return initial(b.init_order) - initial(a.init_order) //uses initial() so it can be used on types /proc/cmp_subsystem_display(datum/controller/subsystem/a, datum/controller/subsystem/b) return sorttext(b.name, a.name) @@ -72,4 +72,3 @@ GLOBAL_VAR_INIT(cmp_field, "name") /proc/cmp_profile_count_dsc(list/A, list/B) return B[PROFILE_ITEM_COUNT] - A[PROFILE_ITEM_COUNT] - diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 17497e3cc0..0f7f4397db 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -30,7 +30,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.r_wings_list,roundstart = TRUE) - //citadel code +//CIT CHANGES START HERE, ADDS SNOWFLAKE BODYPARTS AND MORE //mammal bodyparts (fucking furries) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list) @@ -56,7 +56,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list) GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing. - +//END OF CIT CHANGES //Species for(var/spath in subtypesof(/datum/species)) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index fefc90f1ed..34de5d4590 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -267,6 +267,13 @@ if(!target_turf) return NULLTURF_BORDER + var/area/target_area = get_area(target_turf) + var/area/source_area = get_area(source) + if(source_area.canSmoothWithAreas && !is_type_in_typecache(target_area, source_area.canSmoothWithAreas)) + return null + if(target_area.canSmoothWithAreas && !is_type_in_typecache(source_area, target_area.canSmoothWithAreas)) + return null + if(source.canSmoothWith) var/atom/A if(source.smooth & SMOOTH_MORE) diff --git a/code/__HELPERS/level_traits.dm b/code/__HELPERS/level_traits.dm new file mode 100644 index 0000000000..e2a74cf8e0 --- /dev/null +++ b/code/__HELPERS/level_traits.dm @@ -0,0 +1,17 @@ +// Helpers for checking whether a z-level conforms to a specific requirement + +// Basic levels +#define is_centcom_level(z) ((z) == ZLEVEL_CENTCOM) + +#define is_station_level(z) ((z) in GLOB.station_z_levels) + +#define is_mining_level(z) ((z) == ZLEVEL_MINING) + +#define is_reebe(z) ((z) == ZLEVEL_CITYOFCOGS) + +#define is_transit_level(z) ((z) == ZLEVEL_TRANSIT) + +#define is_away_level(z) ((z) > ZLEVEL_SPACEMAX) + +// If true, the singularity cannot strip away asteroid turf on this Z +#define is_planet_level(z) (GLOB.z_is_planet["z"]) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index d3b62b67af..14092581b8 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -69,6 +69,7 @@ if(!GLOB.wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) + //CIT CHANGES - genitals and such if(!GLOB.cock_shapes_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list) if(!GLOB.vagina_shapes_list.len) @@ -90,6 +91,7 @@ womb = 1 breasts = 1 */ + //CIT CHANGE - changes this entire return to support cit's snowflake parts return(list( "mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), @@ -473,7 +475,7 @@ Proc for attack log creation, because really why not if(extra_args) new_args += extra_args - for(var/j in 1 to amount) + for(var/j in 1 to amount) var/atom/X = new spawn_type(arglist(new_args)) X.admin_spawned = admin_spawn diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 90205168b5..e019af213f 100644 --- a/code/__HELPERS/names.dm +++ b/code/__HELPERS/names.dm @@ -121,7 +121,6 @@ GLOBAL_VAR(command_name) return new_station_name /proc/syndicate_name() - var/name = "" // Prefix @@ -143,7 +142,7 @@ GLOBAL_VAR(command_name) else name += pick("-", "*", "") name += pick("Tech", "Sun", "Co", "Tek", "X", "Inc", "Gen", "Star", "Dyne", "Code", "Hive") - + return name diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 021dc55347..9b6b601e69 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -55,7 +55,7 @@ for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && M.can_hear()) - to_chat(M, "[title]
[message]

") + to_chat(M, "[title]
[message]

") if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) if(alert) SEND_SOUND(M, sound('sound/misc/notice1.ogg')) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index f009ff9c00..0ba19e795e 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -1,41 +1,27 @@ +#define POPCOUNT_SURVIVORS "survivors" //Not dead at roundend +#define POPCOUNT_ESCAPEES "escapees" //Not dead and on centcomm/shuttles marked as escaped +#define POPCOUNT_GHOSTS "ghosts" //Ghosts on roundend +#define POPCOUNT_HUMAN_ESCAPEES "human_escapees" //Same as escapees but human only +#define POPCOUNT_HUMAN_SURVIVORS "human_survivors" //Same as survivors but human only +#define POPCOUNT_SHUTTLE_ESCAPEES "shuttle_escapees" //Emergency shuttle only. + /datum/controller/subsystem/ticker/proc/gather_roundend_feedback() + //Survivor numbers var/clients = GLOB.player_list.len - var/surviving_humans = 0 - var/surviving_total = 0 - var/ghosts = 0 - var/escaped_humans = 0 - var/escaped_total = 0 + var/popcount = count_survivors() + SSblackbox.record_feedback("nested tally", "round_end_stats", clients, list("clients")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_GHOSTS], list("ghosts")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_HUMAN_SURVIVORS], list("survivors", "human")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_SURVIVORS], list("survivors", "total")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_HUMAN_ESCAPEES], list("escapees", "human")) + SSblackbox.record_feedback("nested tally", "round_end_stats", popcount[POPCOUNT_ESCAPEES], list("escapees", "total")) + //Antag information + gather_antag_data() - for(var/mob/M in GLOB.player_list) - if(ishuman(M)) - if(!M.stat) - surviving_humans++ - if(M.z == ZLEVEL_CENTCOM) - escaped_humans++ - if(!M.stat) - surviving_total++ - if(M.z == ZLEVEL_CENTCOM) - escaped_total++ + //Nuke disk + record_nuke_disk_location() - if(isobserver(M)) - ghosts++ - - if(clients) - SSblackbox.record_feedback("nested tally", "round_end_stats", clients, list("clients")) - if(ghosts) - SSblackbox.record_feedback("nested tally", "round_end_stats", ghosts, list("ghosts")) - if(surviving_humans) - SSblackbox.record_feedback("nested tally", "round_end_stats", surviving_humans, list("survivors", "human")) - if(surviving_total) - SSblackbox.record_feedback("nested tally", "round_end_stats", surviving_total, list("survivors", "total")) - if(escaped_humans) - SSblackbox.record_feedback("nested tally", "round_end_stats", escaped_humans, list("escapees", "human")) - if(escaped_total) - SSblackbox.record_feedback("nested tally", "round_end_stats", escaped_total, list("escapees", "total")) - - gather_antag_success_rate() - -/datum/controller/subsystem/ticker/proc/gather_antag_success_rate() +/datum/controller/subsystem/ticker/proc/gather_antag_data() var/team_gid = 1 var/list/team_ids = list() @@ -63,18 +49,64 @@ antag_info["objectives"] += list(list("objective_type"=O.type,"text"=O.explanation_text,"result"=result)) SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) +/datum/controller/subsystem/ticker/proc/record_nuke_disk_location() + var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list + if(N) + var/list/data = list() + var/turf/T = get_turf(N) + if(T) + data["x"] = T.x + data["y"] = T.y + data["z"] = T.z + var/atom/outer = get_atom_on_turf(N,/mob/living) + if(outer != N) + if(isliving(outer)) + var/mob/living/L = outer + data["holder"] = L.real_name + else + data["holder"] = outer.name + + SSblackbox.record_feedback("associative", "roundend_nukedisk", 1 , data) + +/datum/controller/subsystem/ticker/proc/gather_newscaster() + var/json_file = file("[GLOB.log_directory]/newscaster.json") + var/list/file_data = list() + var/pos = 1 + for(var/V in GLOB.news_network.network_channels) + var/datum/newscaster/feed_channel/channel = V + if(!istype(channel)) + stack_trace("Non-channel in newscaster channel list") + continue + file_data["[pos]"] = list("channel name" = "[channel.channel_name]", "author" = "[channel.author]", "censored" = channel.censored ? 1 : 0, "author censored" = channel.authorCensor ? 1 : 0, "messages" = list()) + for(var/M in channel.messages) + var/datum/newscaster/feed_message/message = M + if(!istype(message)) + stack_trace("Non-message in newscaster channel messages list") + continue + var/list/comment_data = list() + for(var/C in message.comments) + var/datum/newscaster/feed_comment/comment = C + if(!istype(comment)) + stack_trace("Non-message in newscaster message comments list") + continue + comment_data += list(list("author" = "[comment.author]", "time stamp" = "[comment.time_stamp]", "body" = "[comment.body]")) + file_data["[pos]"]["messages"] += list(list("author" = "[message.author]", "time stamp" = "[message.time_stamp]", "censored" = message.bodyCensor ? 1 : 0, "author censored" = message.authorCensor ? 1 : 0, "photo file" = "[message.photo_file]", "photo caption" = "[message.caption]", "body" = "[message.body]", "comments" = comment_data)) + pos++ + if(GLOB.news_network.wanted_issue.active) + file_data["wanted"] = list("author" = "[GLOB.news_network.wanted_issue.scannedUser]", "criminal" = "[GLOB.news_network.wanted_issue.criminal]", "description" = "[GLOB.news_network.wanted_issue.body]", "photo file" = "[GLOB.news_network.wanted_issue.photo_file]") + WRITE_FILE(json_file, json_encode(file_data)) /datum/controller/subsystem/ticker/proc/declare_completion() set waitfor = FALSE - to_chat(world, "


The round has ended.") + to_chat(world, "


The round has ended.") if(LAZYLEN(GLOB.round_end_notifiees)) send2irc("Notice", "[GLOB.round_end_notifiees.Join(", ")] the round has ended.") - /*for(var/client/C in GLOB.clients) + for(var/client/C in GLOB.clients) if(!C.credits) C.RollCredits() - C.playtitlemusic(40)*/ + C.playtitlemusic(40) display_report() @@ -95,7 +127,7 @@ send2irc("Server", "Round just ended.") - if(CONFIG_GET(string/cross_server_address)) + if(length(CONFIG_GET(keyed_string_list/cross_server))) send_news_report() CHECK_TICK @@ -169,29 +201,49 @@ return parts.Join() - -/datum/controller/subsystem/ticker/proc/survivor_report() - var/list/parts = list() +/datum/controller/subsystem/ticker/proc/count_survivors() + . = list() var/station_evacuated = EMERGENCY_ESCAPED_OR_ENDGAMED var/num_survivors = 0 var/num_escapees = 0 var/num_shuttle_escapees = 0 + var/num_ghosts = 0 + var/num_human_survivors = 0 + var/num_human_escapees = 0 //Player status report for(var/i in GLOB.mob_list) var/mob/Player = i if(Player.mind && !isnewplayer(Player)) + if(isobserver(Player)) + num_ghosts++ if(Player.stat != DEAD && !isbrain(Player)) num_survivors++ + if(ishuman(Player)) + num_human_survivors++ if(station_evacuated) //If the shuttle has already left the station var/list/area/shuttle_areas if(SSshuttle && SSshuttle.emergency) shuttle_areas = SSshuttle.emergency.shuttle_areas if(Player.onCentCom() || Player.onSyndieBase()) num_escapees++ + if(ishuman(Player)) + num_human_escapees++ if(shuttle_areas[get_area(Player)]) num_shuttle_escapees++ + .[POPCOUNT_SURVIVORS] = num_survivors + .[POPCOUNT_ESCAPEES] = num_escapees + .[POPCOUNT_SHUTTLE_ESCAPEES] = num_shuttle_escapees + .[POPCOUNT_HUMAN_SURVIVORS] = num_human_survivors + .[POPCOUNT_HUMAN_ESCAPEES] = num_human_escapees + .[POPCOUNT_GHOSTS] = num_ghosts + +/datum/controller/subsystem/ticker/proc/survivor_report() + var/list/parts = list() + var/station_evacuated = EMERGENCY_ESCAPED_OR_ENDGAMED + var/popcount = count_survivors() + //Round statistics report var/datum/station_state/end_state = new /datum/station_state() end_state.count() @@ -203,9 +255,9 @@ if(total_players) parts+= "[GLOB.TAB]Total Population: [total_players]" if(station_evacuated) - parts += "
[GLOB.TAB]Evacuation Rate: [num_escapees] ([PERCENT(num_escapees/total_players)]%)" - parts += "[GLOB.TAB](on emergency shuttle): [num_shuttle_escapees] ([PERCENT(num_shuttle_escapees/total_players)]%)" - parts += "[GLOB.TAB]Survival Rate: [num_survivors] ([PERCENT(num_survivors/total_players)]%)" + parts += "
[GLOB.TAB]Evacuation Rate: [popcount[POPCOUNT_ESCAPEES]] ([PERCENT(popcount[POPCOUNT_ESCAPEES]/total_players)]%)" + parts += "[GLOB.TAB](on emergency shuttle): [popcount[POPCOUNT_SHUTTLE_ESCAPEES]] ([PERCENT(popcount[POPCOUNT_SHUTTLE_ESCAPEES]/total_players)]%)" + parts += "[GLOB.TAB]Survival Rate: [popcount[POPCOUNT_SURVIVORS]] ([PERCENT(popcount[POPCOUNT_SURVIVORS]/total_players)]%)" return parts.Join("
") /datum/controller/subsystem/ticker/proc/show_roundend_report(client/C,common_report) @@ -343,7 +395,7 @@ currrent_category = A.roundend_category previous_category = A result += A.roundend_report() - result += "
" + result += "

" if(all_antagonists.len) var/datum/antagonist/last = all_antagonists[all_antagonists.len] @@ -382,7 +434,10 @@ /proc/printplayer(datum/mind/ply, fleecheck) - var/text = "[ply.key] was [ply.name] the [ply.assigned_role] and" + var/jobtext = "" + if(ply.assigned_role) + jobtext = " the [ply.assigned_role]" + var/text = "[ply.key] was [ply.name][jobtext] and" if(ply.current) if(ply.current.stat == DEAD) text += " died" @@ -390,7 +445,7 @@ text += " survived" if(fleecheck) var/turf/T = get_turf(ply.current) - if(!T || !(T.z in GLOB.station_z_levels)) + if(!T || !is_station_level(T.z)) text += " while fleeing the station" if(ply.current.real_name != ply.name) text += " as [ply.current.real_name]" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 2ebe24b85b..372dc64cab 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -139,7 +139,6 @@ return NORTH //returns the north-zero clockwise angle in degrees, given a direction - /proc/dir2angle(D) switch(D) if(NORTH) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 1fd60c2bd4..b7e30940ac 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -199,6 +199,8 @@ Turf and target are separate in case you want to teleport some distance from a t newname = C.prefs.custom_names[role] else switch(role) + if("human") + newname = random_unique_name(gender) if("clown") newname = pick(GLOB.clown_names) if("mime") @@ -524,7 +526,7 @@ Turf and target are separate in case you want to teleport some distance from a t processing_list.Cut(1, 2) //Byond does not allow things to be in multiple contents, or double parent-child hierarchies, so only += is needed //This is also why we don't need to check against assembled as we go along - processing_list += A.contents + processing_list += A.contents assembled += A return assembled @@ -1434,11 +1436,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) temp = ((temp + (temp>>3))&29127) % 63 //070707 return temp -//checks if a turf is in the planet z list. -/proc/turf_z_is_planet(turf/T) - return GLOB.z_is_planet["[T.z]"] - - //same as do_mob except for movables and it allows both to drift and doesn't draw progressbar /proc/do_atom(atom/movable/user , atom/movable/target, time = 30, uninterruptible = 0,datum/callback/extra_checks = null) if(!user || !target) @@ -1492,6 +1489,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) var/time_low = num2hex(world.time, 3) var/time_clock = num2hex(TICK_DELTA_TO_MS(world.tick_usage), 3) + return "{[time_high]-[time_mid]-[GUID_VERSION][time_low]-[GUID_VARIANT][time_clock]-[node_id]}" // \ref behaviour got changed in 512 so this is necesary to replicate old behaviour. diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index f16e9a16ed..100407d777 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -104,6 +104,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/storage/secure/briefcase = 3, /obj/item/storage/toolbox/artistic = 2, /obj/item/toy/eightball = 1, - /obj/item/storage/daki = 3, + /obj/item/storage/daki = 3, //VERY IMPORTANT CIT CHANGE - adds bodypillows to maint "" = 3 )) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 89e4481284..29d72d603f 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -22,11 +22,11 @@ GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subt GLOBAL_LIST_EMPTY(ai_list) GLOBAL_LIST_EMPTY(pai_list) GLOBAL_LIST_EMPTY(available_ai_shells) -GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list())) // One for each AI_* status define +GLOBAL_LIST_INIT(simple_animals, list(list(),list(),list(),list())) // One for each AI_* status define GLOBAL_LIST_EMPTY(spidermobs) //all sentient spider mobs GLOBAL_LIST_EMPTY(bots_list) GLOBAL_LIST_EMPTY(language_datum_instances) GLOBAL_LIST_EMPTY(all_languages) -GLOBAL_LIST_EMPTY(latejoiners) //All latejoining people, for traitor-target purposes. \ No newline at end of file +GLOBAL_LIST_EMPTY(latejoiners) //CIT CHANGE - All latejoining people, for traitor-target purposes. \ No newline at end of file diff --git a/code/_js/byjax.dm b/code/_js/byjax.dm index 5557440d32..9d96bbc412 100644 --- a/code/_js/byjax.dm +++ b/code/_js/byjax.dm @@ -45,3 +45,4 @@ Be sure to include required js functions in your page, or it'll raise an excepti receiver << output(argums,"[control_id]:replaceContent") return + diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index b831a8cbcb..ddff0b6bd3 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -1,104 +1,104 @@ -/* - Adjacency proc for determining touch range - - This is mostly to determine if a user can enter a square for the purposes of touching something. - Examples include reaching a square diagonally or reaching something on the other side of a glass window. - - This is calculated by looking for border items, or in the case of clicking diagonally from yourself, dense items. - This proc will NOT notice if you are trying to attack a window on the other side of a dense object in its turf. There is a window helper for that. - - Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you - to check that the mob is not inside of something -*/ -/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused - return 0 - -// Not a sane use of the function and (for now) indicative of an error elsewhere -/area/Adjacent(var/atom/neighbor) - CRASH("Call to /area/Adjacent(), unimplemented proc") - - -/* - Adjacency (to turf): - * If you are in the same turf, always true - * If you are vertically/horizontally adjacent, ensure there are no border objects - * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. - * Passing through in this case ignores anything with the LETPASSTHROW pass flag, such as tables, racks, and morgue trays. -*/ -/turf/Adjacent(atom/neighbor, atom/target = null, atom/movable/mover = null) - var/turf/T0 = get_turf(neighbor) - - if(T0 == src) //same turf - return 1 - - if(get_dist(src,T0) > 1) //too far - return 0 - - // Non diagonal case - if(T0.x == x || T0.y == y) - // Check for border blockages - return T0.ClickCross(get_dir(T0,src), border_only = 1, target_atom = target, mover = mover) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target, mover = mover) - - // Diagonal case - var/in_dir = get_dir(T0,src) // eg. northwest (1+8) = 9 (00001001) - var/d1 = in_dir&3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001) - var/d2 = in_dir&12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000) - - for(var/d in list(d1,d2)) - if(!T0.ClickCross(d, border_only = 1, target_atom = target, mover = mover)) - continue // could not leave T0 in that direction - - var/turf/T1 = get_step(T0,d) - if(!T1 || T1.density) - continue - if(!T1.ClickCross(get_dir(T1,src), border_only = 0, target_atom = target, mover = mover) || !T1.ClickCross(get_dir(T1,T0), border_only = 0, target_atom = target, mover = mover)) - continue // couldn't enter or couldn't leave T1 - - if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target, mover = mover)) - continue // could not enter src - - return 1 // we don't care about our own density - - return 0 - -/* - Adjacency (to anything else): - * Must be on a turf -*/ -/atom/movable/Adjacent(var/atom/neighbor) - if(neighbor == loc) - return TRUE - if(!isturf(loc)) - return FALSE - if(loc.Adjacent(neighbor,target = neighbor, mover = src)) - return TRUE - return FALSE - -// This is necessary for storage items not on your person. -/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) - if(neighbor == loc) - return 1 - if(isitem(loc)) - if(recurse > 0) - return loc.Adjacent(neighbor,recurse - 1) - return 0 - return ..() - -/* - This checks if you there is uninterrupted airspace between that turf and this one. - This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW. - The border_only flag allows you to not objects (for source and destination squares) -*/ -/turf/proc/ClickCross(target_dir, border_only, target_atom = null, atom/movable/mover = null) - for(var/obj/O in src) - if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density)) - continue - if(O == target_atom || O == mover || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf - continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) - - if( O.flags_1&ON_BORDER_1) // windows are on border, check them first - if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically - return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones - else if( !border_only ) // dense, not on border, cannot pass over - return 0 - return 1 +/* + Adjacency proc for determining touch range + + This is mostly to determine if a user can enter a square for the purposes of touching something. + Examples include reaching a square diagonally or reaching something on the other side of a glass window. + + This is calculated by looking for border items, or in the case of clicking diagonally from yourself, dense items. + This proc will NOT notice if you are trying to attack a window on the other side of a dense object in its turf. There is a window helper for that. + + Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you + to check that the mob is not inside of something +*/ +/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused + return 0 + +// Not a sane use of the function and (for now) indicative of an error elsewhere +/area/Adjacent(var/atom/neighbor) + CRASH("Call to /area/Adjacent(), unimplemented proc") + + +/* + Adjacency (to turf): + * If you are in the same turf, always true + * If you are vertically/horizontally adjacent, ensure there are no border objects + * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. + * Passing through in this case ignores anything with the LETPASSTHROW pass flag, such as tables, racks, and morgue trays. +*/ +/turf/Adjacent(atom/neighbor, atom/target = null, atom/movable/mover = null) + var/turf/T0 = get_turf(neighbor) + + if(T0 == src) //same turf + return TRUE + + if(get_dist(src, T0) > 1 || z != T0.z) //too far + return FALSE + + // Non diagonal case + if(T0.x == x || T0.y == y) + // Check for border blockages + return T0.ClickCross(get_dir(T0,src), border_only = 1, target_atom = target, mover = mover) && src.ClickCross(get_dir(src,T0), border_only = 1, target_atom = target, mover = mover) + + // Diagonal case + var/in_dir = get_dir(T0,src) // eg. northwest (1+8) = 9 (00001001) + var/d1 = in_dir&3 // eg. north (1+8)&3 (0000 0011) = 1 (0000 0001) + var/d2 = in_dir&12 // eg. west (1+8)&12 (0000 1100) = 8 (0000 1000) + + for(var/d in list(d1,d2)) + if(!T0.ClickCross(d, border_only = 1, target_atom = target, mover = mover)) + continue // could not leave T0 in that direction + + var/turf/T1 = get_step(T0,d) + if(!T1 || T1.density) + continue + if(!T1.ClickCross(get_dir(T1,src), border_only = 0, target_atom = target, mover = mover) || !T1.ClickCross(get_dir(T1,T0), border_only = 0, target_atom = target, mover = mover)) + continue // couldn't enter or couldn't leave T1 + + if(!src.ClickCross(get_dir(src,T1), border_only = 1, target_atom = target, mover = mover)) + continue // could not enter src + + return 1 // we don't care about our own density + + return 0 + +/* + Adjacency (to anything else): + * Must be on a turf +*/ +/atom/movable/Adjacent(var/atom/neighbor) + if(neighbor == loc) + return TRUE + if(!isturf(loc)) + return FALSE + if(loc.Adjacent(neighbor,target = neighbor, mover = src)) + return TRUE + return FALSE + +// This is necessary for storage items not on your person. +/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) + if(neighbor == loc) + return 1 + if(isitem(loc)) + if(recurse > 0) + return loc.Adjacent(neighbor,recurse - 1) + return 0 + return ..() + +/* + This checks if you there is uninterrupted airspace between that turf and this one. + This is defined as any dense ON_BORDER_1 object, or any dense object without LETPASSTHROW. + The border_only flag allows you to not objects (for source and destination squares) +*/ +/turf/proc/ClickCross(target_dir, border_only, target_atom = null, atom/movable/mover = null) + for(var/obj/O in src) + if((mover && O.CanPass(mover,get_step(src,target_dir))) || (!mover && !O.density)) + continue + if(O == target_atom || O == mover || (O.pass_flags & LETPASSTHROW)) //check if there's a dense object present on the turf + continue // LETPASSTHROW is used for anything you can click through (or the firedoor special case, see above) + + if( O.flags_1&ON_BORDER_1) // windows are on border, check them first + if( O.dir & target_dir || O.dir & (O.dir-1) ) // full tile windows are just diagonals mechanically + return 0 //O.dir&(O.dir-1) is false for any cardinal direction, but true for diagonal ones + else if( !border_only ) // dense, not on border, cannot pass over + return 0 + return 1 diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index dc06d17819..6d941589d3 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -104,7 +104,7 @@ #define ui_health "EAST-1:28,CENTER-1:15" #define ui_internal "EAST-1:28,CENTER:17" -//borgs +//borgs #define ui_borg_health "EAST-1:28,CENTER-1:15" //borgs have the health display where humans have the pressure damage indicator. //aliens diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm index 87a33afc13..b2af85d1b0 100644 --- a/code/_onclick/hud/ai.dm +++ b/code/_onclick/hud/ai.dm @@ -23,8 +23,7 @@ if(..()) return var/mob/living/silicon/ai/AI = usr - var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list() - AI.ai_camera_list(camera) + AI.show_camera_list() /obj/screen/ai/camera_track name = "Track With Camera" diff --git a/code/_onclick/hud/credits.dm b/code/_onclick/hud/credits.dm new file mode 100644 index 0000000000..dfdbf390c1 --- /dev/null +++ b/code/_onclick/hud/credits.dm @@ -0,0 +1,69 @@ +#define CREDIT_ROLL_SPEED 125 +#define CREDIT_SPAWN_SPEED 10 +#define CREDIT_ANIMATE_HEIGHT (14 * world.icon_size) +#define CREDIT_EASE_DURATION 22 +#define CREDITS_PATH "[GLOB.config_dir]contributors.dmi" + +/client/proc/RollCredits() + set waitfor = FALSE + if(!fexists(CREDITS_PATH)) + return + var/icon/credits_icon = new(CREDITS_PATH) + LAZYINITLIST(credits) + var/list/_credits = credits + verbs += /client/proc/ClearCredits + var/static/list/credit_order_for_this_round + if(isnull(credit_order_for_this_round)) + credit_order_for_this_round = list("Thanks for playing!") + (shuffle(icon_states(credits_icon)) - "Thanks for playing!") + for(var/I in credit_order_for_this_round) + if(!credits) + return + _credits += new /obj/screen/credit(null, I, src, credits_icon) + sleep(CREDIT_SPAWN_SPEED) + sleep(CREDIT_ROLL_SPEED - CREDIT_SPAWN_SPEED) + verbs -= /client/proc/ClearCredits + qdel(credits_icon) + +/client/proc/ClearCredits() + set name = "Hide Credits" + set category = "OOC" + verbs -= /client/proc/ClearCredits + QDEL_LIST(credits) + credits = null + +/obj/screen/credit + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + alpha = 0 + screen_loc = "12,1" + layer = SPLASHSCREEN_LAYER + var/client/parent + var/matrix/target + +/obj/screen/credit/Initialize(mapload, credited, client/P, icon/I) + . = ..() + icon = I + parent = P + icon_state = credited + maptext = credited + maptext_x = world.icon_size + 8 + maptext_y = (world.icon_size / 2) - 4 + maptext_width = world.icon_size * 3 + var/matrix/M = matrix(transform) + M.Translate(0, CREDIT_ANIMATE_HEIGHT) + animate(src, transform = M, time = CREDIT_ROLL_SPEED) + target = M + animate(src, alpha = 255, time = CREDIT_EASE_DURATION, flags = ANIMATION_PARALLEL) + addtimer(CALLBACK(src, .proc/FadeOut), CREDIT_ROLL_SPEED - CREDIT_EASE_DURATION) + QDEL_IN(src, CREDIT_ROLL_SPEED) + P.screen += src + +/obj/screen/credit/Destroy() + var/client/P = parent + P.screen -= src + icon = null + LAZYREMOVE(P.credits, src) + parent = null + return ..() + +/obj/screen/credit/proc/FadeOut() + animate(src, alpha = 0, transform = target, time = CREDIT_EASE_DURATION) diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 2047225589..65c4bd23c2 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -1,3 +1,4 @@ + /mob var/list/screens = list() @@ -174,4 +175,3 @@ layer = LIGHTING_LAYER blend_mode = BLEND_ADD show_when_dead = TRUE - diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 4d1ca2c778..fe53528155 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -280,10 +280,11 @@ healths = new /obj/screen/healths() infodisplay += healths - //citadel code + //CIT CHANGE - adds arousal to hud arousal = new /obj/screen/arousal() arousal.icon_state = (owner.canbearoused == 1 ? "arousal0" : "") infodisplay += arousal + //END OF CIT CHANGES healthdoll = new /obj/screen/healthdoll() infodisplay += healthdoll diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index 52319b7866..e3d1af79ed 100755 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -60,8 +60,6 @@ var/pref = C.prefs.parallax if (isnull(pref)) pref = PARALLAX_HIGH - if (C.byond_version < 511) - pref = PARALLAX_DISABLE switch(C.prefs.parallax) if (PARALLAX_INSANE) C.parallax_throttle = FALSE diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 2dddce8542..8a5b9ba519 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -58,8 +58,11 @@ SendSignal(COMSIG_ITEM_ATTACK, M, user) if(flags_1 & NOBLUDGEON_1) return - if(user.disabilities & PACIFISM) + + if(force && user.has_disability(DISABILITY_PACIFISM)) + to_chat(user, "You don't want to harm other living beings!") return + if(!force) playsound(loc, 'sound/weapons/tap.ogg', get_clamped_volume(), 1, -1) else if(hitsound) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 903f3c0790..87354d6f0b 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -78,7 +78,7 @@ var/mob/living/carbon/tk_user = null /obj/item/tk_grab/Initialize() - ..() + . = ..() START_PROCESSING(SSfastprocess, src) /obj/item/tk_grab/Destroy() diff --git a/code/citadel/cit_reagents.dm b/code/citadel/cit_reagents.dm index 12604f26f5..79ccfea936 100644 --- a/code/citadel/cit_reagents.dm +++ b/code/citadel/cit_reagents.dm @@ -21,7 +21,7 @@ S = new(T) S.reagents.add_reagent("semen", reac_volume) if(data["blood_DNA"]) - S.blood_DNA[data["blood_DNA"]] = data["blood_type"] + S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /obj/effect/decal/cleanable/semen name = "semen" @@ -62,17 +62,16 @@ icon = 'code/citadel/icons/effects.dmi' icon_state = "fem1" random_icon_states = list("fem1", "fem2", "fem3", "fem4") - blood_DNA = list() blood_state = null bloodiness = null /obj/effect/decal/cleanable/femcum/New() ..() dir = pick(1,2,4,8) + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/femcum/replace_decal(obj/effect/decal/cleanable/femcum/F) - if (F.blood_DNA) - blood_DNA |= F.blood_DNA.Copy() + F.add_blood_DNA(return_blood_DNA()) ..() /datum/reagent/consumable/femcum/reaction_turf(turf/T, reac_volume) @@ -86,7 +85,7 @@ S = new(T) S.reagents.add_reagent("femcum", reac_volume) if(data["blood_DNA"]) - S.blood_DNA[data["blood_DNA"]] = data["blood_type"] + S.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) //aphrodisiac & anaphrodisiac diff --git a/code/citadel/custom_loadout/custom_items.dm b/code/citadel/custom_loadout/custom_items.dm index 7cda1d9e5a..4e8e3b5e49 100644 --- a/code/citadel/custom_loadout/custom_items.dm +++ b/code/citadel/custom_loadout/custom_items.dm @@ -10,6 +10,14 @@ w_class = WEIGHT_CLASS_TINY flags_1 = NOBLUDGEON_1 +/obj/item/soap/cebu //real versions, for admin shenanigans. Adminspawn only + desc = "A bright blue bar of soap that smells of wolves" + icon = 'icons/obj/custom.dmi' + icon_state = "cebu" + +/obj/item/soap/cebu/fast //speedyquick cleaning version. Still not as fast as Syndiesoap. Adminspawn only. + cleanspeed = 15 + /*Inferno707*/ diff --git a/code/citadel/dogborgstuff.dm b/code/citadel/dogborgstuff.dm index 9a6a6581c9..2713b19976 100644 --- a/code/citadel/dogborgstuff.dm +++ b/code/citadel/dogborgstuff.dm @@ -259,7 +259,7 @@ to_chat(user,"You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - target.clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else if(ishuman(target)) if(src.emagged) var/mob/living/silicon/robot.R = user @@ -292,7 +292,7 @@ to_chat(user, "You clean \the [target.name].") var/obj/effect/decal/cleanable/C = locate() in target qdel(C) - target.clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) return diff --git a/code/citadel/organs/genitals.dm b/code/citadel/organs/genitals.dm index 1f46778aaf..79784a1eb8 100644 --- a/code/citadel/organs/genitals.dm +++ b/code/citadel/organs/genitals.dm @@ -260,7 +260,7 @@ for(var/L in relevant_layers) //Less hardcode H.remove_overlay(L) - if(H.disabilities & HUSK) + if(H.has_disability(DISABILITY_HUSK)) return //start scanning for genitals //var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index d2db743d91..d1be661f6a 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -53,8 +53,9 @@ . = !(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "ValidateAndSet" && GLOB.LastAdminCalledTargetRef == "[REF(src)]") if(!.) log_admin_private("Config set of [type] to [str_val] attempted by [key_name(usr)]") - + /datum/config_entry/proc/ValidateAndSet(str_val) + VASProcCallGuard(str_val) CRASH("Invalid config entry type!") /datum/config_entry/proc/ValidateKeyedList(str_val, list_mode, splitter) @@ -78,12 +79,12 @@ if(LIST_MODE_TEXT) temp = key_value continue_check = temp - if(continue_check && ValidateKeyName(key_name)) + if(continue_check && ValidateListEntry(key_name, temp)) value[key_name] = temp return TRUE return FALSE -/datum/config_entry/proc/ValidateKeyName(key_name) +/datum/config_entry/proc/ValidateListEntry(key_name, key_value) return TRUE /datum/config_entry/string @@ -95,6 +96,8 @@ return var_name != "auto_trim" && ..() /datum/config_entry/string/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE value = auto_trim ? trim(str_val) : str_val return TRUE @@ -106,6 +109,8 @@ var/min_val = -INFINITY /datum/config_entry/number/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE var/temp = text2num(trim(str_val)) if(!isnull(temp)) value = CLAMP(integer ? round(temp) : temp, min_val, max_val) @@ -123,6 +128,8 @@ abstract_type = /datum/config_entry/flag /datum/config_entry/flag/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE value = text2num(trim(str_val)) != 0 return TRUE @@ -131,6 +138,8 @@ value = list() /datum/config_entry/number_list/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE str_val = trim(str_val) var/list/new_list = list() var/list/values = splittext(str_val," ") @@ -150,6 +159,8 @@ dupes_allowed = TRUE /datum/config_entry/keyed_flag_list/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE return ValidateKeyedList(str_val, LIST_MODE_FLAG, " ") /datum/config_entry/keyed_number_list @@ -162,6 +173,8 @@ return var_name != "splitter" && ..() /datum/config_entry/keyed_number_list/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE return ValidateKeyedList(str_val, LIST_MODE_NUM, splitter) /datum/config_entry/keyed_string_list @@ -174,6 +187,8 @@ return var_name != "splitter" && ..() /datum/config_entry/keyed_string_list/ValidateAndSet(str_val) + if(!VASProcCallGuard(str_val)) + return FALSE return ValidateKeyedList(str_val, LIST_MODE_TEXT, splitter) #undef LIST_MODE_NUM diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index e5e999f003..fa55c9deb4 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -97,19 +97,13 @@ GLOBAL_PROTECT(config_dir) if(!entry) continue - if(entry == "$include") - if(!value) - log_config("Warning: Invalid $include directive: [value]") - else - LoadEntries(value, stack) - ++. - continue if(entry == "$include") if(!value) log_config("Warning: Invalid $include directive: [value]") else LoadEntries(value, stack) + ++. continue var/datum/config_entry/E = _entries[entry] diff --git a/code/controllers/configuration/entries/comms.dm b/code/controllers/configuration/entries/comms.dm index 56cec985f1..e720ed93fd 100644 --- a/code/controllers/configuration/entries/comms.dm +++ b/code/controllers/configuration/entries/comms.dm @@ -2,13 +2,21 @@ protection = CONFIG_ENTRY_HIDDEN /datum/config_entry/string/comms_key/ValidateAndSet(str_val) - return str_val != "default_pwd" && length(str_val) > 6 && ..() + return str_val != "default_pwd" && length(str_val) > 6 && ..() /datum/config_entry/keyed_string_list/cross_server protection = CONFIG_ENTRY_LOCKED -/datum/config_entry/string/cross_server_address/ValidateAndSet(str_val) - return str_val != "byond:\\address:port" && ..() +/datum/config_entry/keyed_string_list/cross_server/ValidateAndSet(str_val) + . = ..() + if(.) + var/list/newv = list() + for(var/I in value) + newv[replacetext(I, "+", " ")] = value[I] + value = newv + +/datum/config_entry/keyed_string_list/cross_server/ValidateListEntry(key_name, key_value) + return key_value != "byond:\\address:port" && ..() /datum/config_entry/string/cross_comms_name @@ -17,4 +25,4 @@ GLOBAL_VAR_INIT(medals_enabled, TRUE) //will be auto set to false if the game fa /datum/config_entry/string/medal_hub_address /datum/config_entry/string/medal_hub_password - protection = CONFIG_ENTRY_HIDDEN + protection = CONFIG_ENTRY_HIDDEN \ No newline at end of file diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index 2d96e3c64b..5b516f031a 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -2,27 +2,27 @@ /datum/config_entry/keyed_number_list/probability -/datum/config_entry/keyed_number_list/probability/ValidateKeyName(key_name) +/datum/config_entry/keyed_number_list/probability/ValidateListEntry(key_name) return key_name in config.modes /datum/config_entry/keyed_number_list/max_pop -/datum/config_entry/keyed_number_list/max_pop/ValidateKeyName(key_name) +/datum/config_entry/keyed_number_list/max_pop/ValidateListEntry(key_name) return key_name in config.modes /datum/config_entry/keyed_number_list/min_pop -/datum/config_entry/keyed_number_list/min_pop/ValidateKeyName(key_name) +/datum/config_entry/keyed_number_list/min_pop/ValidateListEntry(key_name, key_value) return key_name in config.modes /datum/config_entry/keyed_flag_list/continuous // which roundtypes continue if all antagonists die -/datum/config_entry/keyed_flag_list/continuous/ValidateKeyName(key_name) +/datum/config_entry/keyed_flag_list/continuous/ValidateListEntry(key_name, key_value) return key_name in config.modes /datum/config_entry/keyed_flag_list/midround_antag // which roundtypes use the midround antagonist system -/datum/config_entry/keyed_flag_list/midround_antag/ValidateKeyName(key_name) +/datum/config_entry/keyed_flag_list/midround_antag/ValidateListEntry(key_name, key_value) return key_name in config.modes /datum/config_entry/keyed_string_list/policy diff --git a/code/controllers/master.dm b/code/controllers/master.dm index b9950da7b9..92a94bf428 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -53,6 +53,8 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/static/restart_clear = 0 var/static/restart_timeout = 0 var/static/restart_count = 0 + + var/static/random_seed //current tick limit, assigned before running a subsystem. //used by CHECK_TICK as well so that the procs subsystems call can obey that SS's tick limits @@ -60,6 +62,11 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /datum/controller/master/New() // Highlander-style: there can only be one! Kill off the old and replace it with the new. + + if(!random_seed) + random_seed = rand(1, 1e9) + rand_seed(random_seed) + var/list/_subsystems = list() subsystems = _subsystems if (Master != src) diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm index 8d450e3a8e..c3779dc98f 100644 --- a/code/controllers/subsystem.dm +++ b/code/controllers/subsystem.dm @@ -4,7 +4,7 @@ name = "fire coderbus" //name of the subsystem var/init_order = INIT_ORDER_DEFAULT //order of initialization. Higher numbers are initialized first, lower numbers later. Use defines in __DEFINES/subsystems.dm for easy understanding of order. var/wait = 20 //time to wait (in deciseconds) between each call to fire(). Must be a positive integer. - var/priority = 50 //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep + var/priority = FIRE_PRIORITY_DEFAULT //When mutiple subsystems need to run in the same tick, higher priority subsystems will run first and be given a higher share of the tick before MC_TICK_CHECK triggers a sleep var/flags = 0 //see MC.dm in __DEFINES Most flags must be set on world start to take full effect. (You can also restart the mc to force them to process again) diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index a83afb3923..e3c415960b 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(acid) name = "Acid" - priority = 40 + priority = FIRE_PRIORITY_ACID flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 59b6fc34ef..240be1f212 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -9,7 +9,7 @@ SUBSYSTEM_DEF(air) name = "Atmospherics" init_order = INIT_ORDER_AIR - priority = 20 + priority = FIRE_PRIORITY_AIR wait = 5 flags = SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME @@ -394,4 +394,4 @@ SUBSYSTEM_DEF(air) #undef SSAIR_EXCITEDGROUPS #undef SSAIR_HIGHPRESSURE #undef SSAIR_HOTSPOT -#undef SSAIR_SUPERCONDUCTIVITY \ No newline at end of file +#undef SSAIR_SUPERCONDUCTIVITY diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index e638de668e..0877ba66c6 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -8,14 +8,14 @@ SUBSYSTEM_DEF(blackbox) var/list/feedback = list() //list of datum/feedback_variable var/triggertime = 0 var/sealed = FALSE //time to stop tracking stats? - var/list/research_levels = list() //list of highest tech levels attained that isn't lost lost by destruction of RD computers - var/list/versions = list("time_dilation_current" = 2, - "science_techweb_unlock" = 2, - "antagonists" = 3) //associative list of any feedback variables that have had their format changed since creation and their current version, remember to update this - + var/list/versions = list("antagonists" = 3, + "admin_secrets_fun_used" = 2, + "time_dilation_current" = 3, + "science_techweb_unlock" = 2) //associative list of any feedback variables that have had their format changed since creation and their current version, remember to update this /datum/controller/subsystem/blackbox/Initialize() triggertime = world.time + record_feedback("amount", "random_seed", Master.random_seed) . = ..() //poll population @@ -58,13 +58,11 @@ SUBSYSTEM_DEF(blackbox) /datum/controller/subsystem/blackbox/Shutdown() sealed = FALSE record_feedback("tally", "ahelp_stats", GLOB.ahelp_tickets.active_tickets.len, "unresolved") - for (var/obj/machinery/message_server/MS in GLOB.message_servers) + for (var/obj/machinery/telecomms/message_server/MS in GLOB.telecomms_list) if (MS.pda_msgs.len) record_feedback("tally", "radio_usage", MS.pda_msgs.len, "PDA") if (MS.rc_msgs.len) record_feedback("tally", "radio_usage", MS.rc_msgs.len, "request console") - if(research_levels.len) - SSblackbox.record_feedback("associative", "high_research_level", 1, research_levels) if (!SSdbcore.Connect()) return @@ -91,39 +89,35 @@ SUBSYSTEM_DEF(blackbox) sealed = TRUE return TRUE -/datum/controller/subsystem/blackbox/proc/log_research(tech, level) - if(!(tech in research_levels) || research_levels[tech] < level) - research_levels[tech] = level - /datum/controller/subsystem/blackbox/proc/LogBroadcast(freq) if(sealed) return switch(freq) - if(1459) + if(FREQ_COMMON) record_feedback("tally", "radio_usage", 1, "common") - if(GLOB.SCI_FREQ) + if(FREQ_SCIENCE) record_feedback("tally", "radio_usage", 1, "science") - if(GLOB.COMM_FREQ) + if(FREQ_COMMAND) record_feedback("tally", "radio_usage", 1, "command") - if(GLOB.MED_FREQ) + if(FREQ_MEDICAL) record_feedback("tally", "radio_usage", 1, "medical") - if(GLOB.ENG_FREQ) + if(FREQ_ENGINEERING) record_feedback("tally", "radio_usage", 1, "engineering") - if(GLOB.SEC_FREQ) + if(FREQ_SECURITY) record_feedback("tally", "radio_usage", 1, "security") - if(GLOB.SYND_FREQ) + if(FREQ_SYNDICATE) record_feedback("tally", "radio_usage", 1, "syndicate") - if(GLOB.SERV_FREQ) + if(FREQ_SERVICE) record_feedback("tally", "radio_usage", 1, "service") - if(GLOB.SUPP_FREQ) + if(FREQ_SUPPLY) record_feedback("tally", "radio_usage", 1, "supply") - if(GLOB.CENTCOM_FREQ) + if(FREQ_CENTCOM) record_feedback("tally", "radio_usage", 1, "centcom") - if(GLOB.AIPRIV_FREQ) + if(FREQ_AI_PRIVATE) record_feedback("tally", "radio_usage", 1, "ai private") - if(GLOB.REDTEAM_FREQ) + if(FREQ_CTF_RED) record_feedback("tally", "radio_usage", 1, "CTF red team") - if(GLOB.BLUETEAM_FREQ) + if(FREQ_CTF_BLUE) record_feedback("tally", "radio_usage", 1, "CTF blue team") else record_feedback("tally", "radio_usage", 1, "other") @@ -193,7 +187,7 @@ Versioning "gun_fired" = 2) */ /datum/controller/subsystem/blackbox/proc/record_feedback(key_type, key, increment, data, overwrite) - if(sealed || !key_type || !istext(key) || !isnum(increment || !data)) + if(sealed || !key_type || !istext(key) || !isnum(increment) || !data) return var/datum/feedback_variable/FV = find_feedback_datum(key, key_type) switch(key_type) diff --git a/code/controllers/subsystem/communications.dm b/code/controllers/subsystem/communications.dm index e86d32f76b..fcf7dba607 100644 --- a/code/controllers/subsystem/communications.dm +++ b/code/controllers/subsystem/communications.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(communications) /datum/controller/subsystem/communications/proc/send_message(datum/comm_message/sending,print = TRUE,unique = FALSE) for(var/obj/machinery/computer/communications/C in GLOB.machines) - if(!(C.stat & (BROKEN|NOPOWER)) && (C.z in GLOB.station_z_levels)) + if(!(C.stat & (BROKEN|NOPOWER)) && is_station_level(C.z)) if(unique) C.add_message(sending) else //We copy the message for each console, answers and deletions won't be shared diff --git a/code/controllers/subsystem/fire_burning.dm b/code/controllers/subsystem/fire_burning.dm index 73358000f1..db6dc6513e 100644 --- a/code/controllers/subsystem/fire_burning.dm +++ b/code/controllers/subsystem/fire_burning.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(fire_burning) name = "Fire Burning" - priority = 40 + priority = FIRE_PRIOTITY_BURNING flags = SS_NO_INIT|SS_BACKGROUND runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm index 6203f1b474..4faf234ffd 100644 --- a/code/controllers/subsystem/garbage.dm +++ b/code/controllers/subsystem/garbage.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(garbage) name = "Garbage" - priority = 15 + priority = FIRE_PRIORITY_GARBAGE wait = 2 SECONDS flags = SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY diff --git a/code/controllers/subsystem/icon_smooth.dm b/code/controllers/subsystem/icon_smooth.dm index 84df089973..d0ad2ffbc3 100644 --- a/code/controllers/subsystem/icon_smooth.dm +++ b/code/controllers/subsystem/icon_smooth.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(icon_smooth) name = "Icon Smoothing" init_order = INIT_ORDER_ICON_SMOOTHING wait = 1 - priority = 35 + priority = FIRE_PRIOTITY_SMOOTHING flags = SS_TICKER var/list/smooth_queue = list() diff --git a/code/controllers/subsystem/idlenpcpool.dm b/code/controllers/subsystem/idlenpcpool.dm index 49846e6c9d..a15237e5a7 100644 --- a/code/controllers/subsystem/idlenpcpool.dm +++ b/code/controllers/subsystem/idlenpcpool.dm @@ -1,15 +1,21 @@ SUBSYSTEM_DEF(idlenpcpool) name = "Idling NPC Pool" - flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 10 + flags = SS_POST_FIRE_TIMING|SS_BACKGROUND + priority = FIRE_PRIORITY_IDLE_NPC wait = 60 runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/currentrun = list() + var/static/list/idle_mobs_by_zlevel[][] /datum/controller/subsystem/idlenpcpool/stat_entry() var/list/idlelist = GLOB.simple_animals[AI_IDLE] - ..("IdleNPCS:[idlelist.len]") + var/list/zlist = GLOB.simple_animals[AI_Z_OFF] + ..("IdleNPCS:[idlelist.len]|Z:[zlist.len]") + +/datum/controller/subsystem/idlenpcpool/Initialize(start_timeofday) + idle_mobs_by_zlevel = new /list(world.maxz,0) + return ..() /datum/controller/subsystem/idlenpcpool/fire(resumed = FALSE) @@ -24,6 +30,9 @@ SUBSYSTEM_DEF(idlenpcpool) while(currentrun.len) var/mob/living/simple_animal/SA = currentrun[currentrun.len] --currentrun.len + if (!SA) + GLOB.simple_animals[AI_IDLE] -= SA + continue if(!SA.ckey) if(SA.stat != DEAD) diff --git a/code/controllers/subsystem/inbounds.dm b/code/controllers/subsystem/inbounds.dm index 16e0f53028..63063c258f 100644 --- a/code/controllers/subsystem/inbounds.dm +++ b/code/controllers/subsystem/inbounds.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(inbounds) name = "Inbounds" - priority = 40 + priority = FIRE_PRIORITY_INBOUNDS flags = SS_NO_INIT runlevels = RUNLEVEL_GAME diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 5dbb642f2e..6ffd12264f 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -1,10 +1,101 @@ SUBSYSTEM_DEF(input) name = "Input" wait = 1 //SS_TICKER means this runs every tick - flags = SS_TICKER | SS_NO_INIT - priority = 1000 + init_order = INIT_ORDER_INPUT + flags = SS_TICKER + priority = FIRE_PRIORITY_INPUT runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + var/list/macro_sets + +/datum/controller/subsystem/input/Initialize() + setup_default_macro_sets() + + initialized = TRUE + + refresh_client_macro_sets() + + return ..() + +// This is for when macro sets are eventualy datumized +/datum/controller/subsystem/input/proc/setup_default_macro_sets() + var/list/static/default_macro_sets + + if(default_macro_sets) + macro_sets = default_macro_sets + return + + default_macro_sets = list( + "default" = list( + "Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", + "O" = "ooc", + "T" = "say", + "M" = "me", + "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs + "Any" = "\"KeyDown \[\[*\]\]\"", + "Any+UP" = "\"KeyUp \[\[*\]\]\"", + ), + "old_default" = list( + "Tab" = "\".winset \\\"mainwindow.macro=old_hotkeys map.focus=true input.background-color=[COLOR_INPUT_DISABLED]\\\"\"", + "Ctrl+T" = "say", + "Ctrl+O" = "ooc", + ), + "old_hotkeys" = list( + "Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", + "O" = "ooc", + "T" = "say", + "M" = "me", + "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs + "Any" = "\"KeyDown \[\[*\]\]\"", + "Any+UP" = "\"KeyUp \[\[*\]\]\"", + ), + ) + + // Because i'm lazy and don't want to type all these out twice + var/list/old_default = default_macro_sets["old_default"] + + var/list/static/oldmode_keys = list( + "North", "East", "South", "West", + "Northeast", "Southeast", "Northwest", "Southwest", + "Insert", "Delete", "Ctrl", "Alt", + "F1", "F2", "F5", "F6", "F7", "F8", "F12", + ) + + for(var/i in 1 to oldmode_keys.len) + var/key = oldmode_keys[i] + old_default[key] = "\"KeyDown [key]\"" + old_default["[key]+UP"] = "\"KeyUp [key]\"" + + var/list/static/oldmode_ctrl_override_keys = list( + "W" = "W", "A" = "A", "S" = "S", "D" = "D", // movement + "1" = "1", "2" = "2", "3" = "3", "4" = "4", // intent + "B" = "B", // resist + "E" = "E", // quick equip + "F" = "F", // intent left + "G" = "G", // intent right + "H" = "H", // stop pulling + "Q" = "Q", // drop + "R" = "R", // throw + "X" = "X", // switch hands + "Y" = "Y", // activate item + "Z" = "Z", // activate item + ) + + for(var/i in 1 to oldmode_ctrl_override_keys.len) + var/key = oldmode_ctrl_override_keys[i] + var/override = oldmode_ctrl_override_keys[key] + old_default["Ctrl+[key]"] = "\"KeyDown [override]\"" + old_default["Ctrl+[key]+UP"] = "\"KeyUp [override]\"" + + macro_sets = default_macro_sets + +// Badmins just wanna have fun ♪ +/datum/controller/subsystem/input/proc/refresh_client_macro_sets() + var/list/clients = GLOB.clients + for(var/i in 1 to clients.len) + var/client/user = clients[i] + user.set_macros() + /datum/controller/subsystem/input/fire() var/list/clients = GLOB.clients // Let's sing the list cache song for(var/i in 1 to clients.len) diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index 5cfbeb9414..65d5f4befb 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -107,9 +107,6 @@ SUBSYSTEM_DEF(job) if(player.mind && job.title in player.mind.restricted_roles) Debug("FOC incompatible with antagonist role, Player: [player]") continue - if(CONFIG_GET(flag/enforce_human_authority) && !player.client.prefs.pref_species.qualifies_for_rank(job.title, player.client.prefs.features)) - Debug("FOC non-human failed, Player: [player]") - continue if(player.client.prefs.GetJobDepartment(job, level) & job.flag) Debug("FOC pass, Player: [player], Level:[level]") candidates += player @@ -144,11 +141,6 @@ SUBSYSTEM_DEF(job) Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue - if(CONFIG_GET(flag/enforce_human_authority) && !player.client.prefs.pref_species.qualifies_for_rank(job.title, player.client.prefs.features)) - Debug("GRJ non-human failed, Player: [player]") - continue - - if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("GRJ Random job given, Player: [player], Job: [job]") if(AssignRole(player, job.title)) @@ -319,10 +311,6 @@ SUBSYSTEM_DEF(job) Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue - if(CONFIG_GET(flag/enforce_human_authority) && !player.client.prefs.pref_species.qualifies_for_rank(job.title, player.client.prefs.features)) - Debug("DO non-human failed, Player: [player], Job:[job.title]") - continue - // If the player wants that job on this level, then try give it to him. if(player.client.prefs.GetJobDepartment(job, level) & job.flag) @@ -424,7 +412,8 @@ SUBSYSTEM_DEF(job) if(job && H) job.after_spawn(H, M) - handle_roundstart_items(H, M.ckey, H.mind.assigned_role, H.mind.special_role) + handle_roundstart_items(H, M.ckey, H.mind.assigned_role, H.mind.special_role) //CIT CHANGE - makes donators spawn with their items + return H diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 43565846fb..1ad3a8ab15 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -22,7 +22,7 @@ SUBSYSTEM_DEF(lighting) create_all_lighting_objects() initialized = TRUE - + fire(FALSE, TRUE) ..() diff --git a/code/controllers/subsystem/machines.dm b/code/controllers/subsystem/machines.dm index db6af6d686..e235afaaa4 100644 --- a/code/controllers/subsystem/machines.dm +++ b/code/controllers/subsystem/machines.dm @@ -62,4 +62,4 @@ SUBSYSTEM_DEF(machines) if (istype(SSmachines.processing)) processing = SSmachines.processing if (istype(SSmachines.powernets)) - powernets = SSmachines.powernets \ No newline at end of file + powernets = SSmachines.powernets diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 6b394c3a1f..07c08cda55 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -146,7 +146,7 @@ GLOBAL_LIST_EMPTY(the_station_areas) var/list/station_areas_blacklist = typecacheof(list(/area/space, /area/mine, /area/ruin)) for(var/area/A in world) var/turf/picked = safepick(get_area_turfs(A.type)) - if(picked && (picked.z in GLOB.station_z_levels)) + if(picked && is_station_level(picked.z)) if(!(A.type in GLOB.the_station_areas) && !is_type_in_typecache(A, station_areas_blacklist)) GLOB.the_station_areas.Add(A.type) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 463b82b13e..4bead36bb1 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -61,7 +61,7 @@ SUBSYSTEM_DEF(minimap) for(var/z in z_levels) send_asset(client, "minimap_[z].png") -/datum/controller/subsystem/minimap/proc/generate(z = 1, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy) +/datum/controller/subsystem/minimap/proc/generate(z, x1 = 1, y1 = 1, x2 = world.maxx, y2 = world.maxy) // Load the background. var/icon/minimap = new /icon('icons/minimap.dmi') // Scale it up to our target size. diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm index bcdb1af8ed..14ad19e1ea 100644 --- a/code/controllers/subsystem/mobs.dm +++ b/code/controllers/subsystem/mobs.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(mobs) name = "Mobs" - priority = 100 + priority = FIRE_PRIORITY_MOBS flags = SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/npcpool.dm b/code/controllers/subsystem/npcpool.dm index 6ee4626f25..334b44d081 100644 --- a/code/controllers/subsystem/npcpool.dm +++ b/code/controllers/subsystem/npcpool.dm @@ -6,7 +6,7 @@ SUBSYSTEM_DEF(npcpool) name = "NPC Pool" flags = SS_POST_FIRE_TIMING|SS_NO_INIT|SS_BACKGROUND - priority = 20 + priority = FIRE_PRIORITY_NPC runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME var/list/canBeUsed = list() @@ -135,12 +135,12 @@ SUBSYSTEM_DEF(npcpool) if(facCount == 1 && helpProb) helpProb = 100 - + if(prob(helpProb) && candidate.takeDelegate(check,FALSE)) --canBeUsed.len candidate.eye_color = "yellow" candidate.update_icons() - + if(!currentrun.len || MC_TICK_CHECK) //don't change SS state if it isn't necessary return diff --git a/code/controllers/subsystem/orbit.dm b/code/controllers/subsystem/orbit.dm index 6184bb005b..45d280b601 100644 --- a/code/controllers/subsystem/orbit.dm +++ b/code/controllers/subsystem/orbit.dm @@ -1,44 +1,44 @@ -SUBSYSTEM_DEF(orbit) - name = "Orbits" - priority = 35 - wait = 2 - flags = SS_NO_INIT|SS_TICKER - - var/list/currentrun = list() - var/list/processing = list() - -/datum/controller/subsystem/orbit/stat_entry() - ..("P:[processing.len]") - - -/datum/controller/subsystem/orbit/fire(resumed = 0) - if (!resumed) - src.currentrun = processing.Copy() - - //cache for sanic speed (lists are references anyways) - var/list/currentrun = src.currentrun - - while (currentrun.len) - var/datum/orbit/O = currentrun[currentrun.len] - currentrun.len-- - if (!O) - processing -= O - if (MC_TICK_CHECK) - return - continue - if (!O.orbiter) - qdel(O) - if (MC_TICK_CHECK) - return - continue - if (O.lastprocess >= world.time) //we already checked recently - if (MC_TICK_CHECK) - return - continue - var/targetloc = get_turf(O.orbiting) - if (targetloc != O.lastloc || O.orbiter.loc != targetloc) - O.Check(targetloc) - if (MC_TICK_CHECK) - return - - +SUBSYSTEM_DEF(orbit) + name = "Orbits" + priority = FIRE_PRIORITY_ORBIT + wait = 2 + flags = SS_NO_INIT|SS_TICKER + + var/list/currentrun = list() + var/list/processing = list() + +/datum/controller/subsystem/orbit/stat_entry() + ..("P:[processing.len]") + + +/datum/controller/subsystem/orbit/fire(resumed = 0) + if (!resumed) + src.currentrun = processing.Copy() + + //cache for sanic speed (lists are references anyways) + var/list/currentrun = src.currentrun + + while (currentrun.len) + var/datum/orbit/O = currentrun[currentrun.len] + currentrun.len-- + if (!O) + processing -= O + if (MC_TICK_CHECK) + return + continue + if (!O.orbiter) + qdel(O) + if (MC_TICK_CHECK) + return + continue + if (O.lastprocess >= world.time) //we already checked recently + if (MC_TICK_CHECK) + return + continue + var/targetloc = get_turf(O.orbiting) + if (targetloc != O.lastloc || O.orbiter.loc != targetloc) + O.Check(targetloc) + if (MC_TICK_CHECK) + return + + diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index d0b2e8c303..23edb3e487 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(overlays) name = "Overlay" flags = SS_TICKER wait = 1 - priority = 500 + priority = FIRE_PRIORITY_OVERLAYS init_order = INIT_ORDER_OVERLAY runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_SETUP diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 39d07ee676..f8f2d463ba 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT - priority = 65 + priority = FIRE_PRIORITY_PARALLAX runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun @@ -21,8 +21,8 @@ SUBSYSTEM_DEF(parallax) return continue var/atom/movable/A = C.eye - if(!A) - return + if(!istype(A)) + continue for (A; isloc(A.loc) && !isturf(A.loc); A = A.loc); if(A != C.movingmob) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index d310f46d2a..b98be937fc 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -250,4 +250,4 @@ SUBSYSTEM_DEF(persistence) var/list/file_data = list() file_data["data"] = saved_modes fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) \ No newline at end of file + WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/controllers/subsystem/processing/fields.dm b/code/controllers/subsystem/processing/fields.dm index 6a878fa142..b6996377b5 100644 --- a/code/controllers/subsystem/processing/fields.dm +++ b/code/controllers/subsystem/processing/fields.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(fields) name = "Fields" wait = 2 - priority = 40 + priority = FIRE_PRIORUTY_FIELDS flags = SS_KEEP_TIMING | SS_NO_INIT runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm index 1d85811878..2981789338 100644 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ b/code/controllers/subsystem/processing/flightpacks.dm @@ -1,6 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(flightpacks) name = "Flightpack Movement" - priority = 30 + priority = FIRE_PRIORITY_FLIGHTPACKS wait = 2 stat_tag = "FM" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 69c5fe1b2b..a3f01efd0c 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -1,36 +1,36 @@ -PROCESSING_SUBSYSTEM_DEF(networks) - name = "Networks" - priority = 80 - wait = 1 - stat_tag = "NET" - flags = SS_KEEP_TIMING - init_order = INIT_ORDER_NETWORKS - var/datum/ntnet/station/station_network - var/assignment_hardware_id = HID_RESTRICTED_END - var/list/networks_by_id = list() //id = network - var/list/interfaces_by_id = list() //hardware id = component interface - -/datum/controller/subsystem/processing/networks/Initialize() - station_network = new - station_network.register_map_supremecy() - . = ..() - -/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) - if(!networks_by_id[network.network_id]) - networks_by_id[network.network_id] = network - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) - networks_by_id -= network.network_id - return TRUE - -/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) - if(!interfaces_by_id[D.hardware_id]) - interfaces_by_id[D.hardware_id] = D - return TRUE - return FALSE - -/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) - interfaces_by_id -= D.hardware_id - return TRUE +PROCESSING_SUBSYSTEM_DEF(networks) + name = "Networks" + priority = FIRE_PRIORITY_NETWORKS + wait = 1 + stat_tag = "NET" + flags = SS_KEEP_TIMING + init_order = INIT_ORDER_NETWORKS + var/datum/ntnet/station/station_network + var/assignment_hardware_id = HID_RESTRICTED_END + var/list/networks_by_id = list() //id = network + var/list/interfaces_by_id = list() //hardware id = component interface + +/datum/controller/subsystem/processing/networks/Initialize() + station_network = new + station_network.register_map_supremecy() + . = ..() + +/datum/controller/subsystem/processing/networks/proc/register_network(datum/ntnet/network) + if(!networks_by_id[network.network_id]) + networks_by_id[network.network_id] = network + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_network(datum/ntnet/network) + networks_by_id -= network.network_id + return TRUE + +/datum/controller/subsystem/processing/networks/proc/register_interface(datum/component/ntnet_interface/D) + if(!interfaces_by_id[D.hardware_id]) + interfaces_by_id[D.hardware_id] = D + return TRUE + return FALSE + +/datum/controller/subsystem/processing/networks/proc/unregister_interface(datum/component/ntnet_interface/D) + interfaces_by_id -= D.hardware_id + return TRUE diff --git a/code/controllers/subsystem/processing/obj.dm b/code/controllers/subsystem/processing/obj.dm index 29fe277232..68f6f16cea 100644 --- a/code/controllers/subsystem/processing/obj.dm +++ b/code/controllers/subsystem/processing/obj.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(obj) name = "Objects" - priority = 40 + priority = FIRE_PRIORITY_OBJ flags = SS_NO_INIT var/list/processing = list() diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 0586975866..f6d45ebff2 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(processing) name = "Processing" - priority = 25 + priority = FIRE_PRIORITY_PROCESS flags = SS_BACKGROUND|SS_POST_FIRE_TIMING|SS_NO_INIT wait = 10 diff --git a/code/controllers/subsystem/processing/projectiles.dm b/code/controllers/subsystem/processing/projectiles.dm index ebf217c79a..cc2399e3df 100644 --- a/code/controllers/subsystem/processing/projectiles.dm +++ b/code/controllers/subsystem/processing/projectiles.dm @@ -1,6 +1,5 @@ PROCESSING_SUBSYSTEM_DEF(projectiles) name = "Projectiles" - priority = 25 wait = 1 stat_tag = "PP" flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING diff --git a/code/controllers/subsystem/radiation.dm b/code/controllers/subsystem/radiation.dm index 0b69e003fc..a6cd658bf6 100644 --- a/code/controllers/subsystem/radiation.dm +++ b/code/controllers/subsystem/radiation.dm @@ -1,7 +1,6 @@ PROCESSING_SUBSYSTEM_DEF(radiation) name = "Radiation" flags = SS_NO_INIT | SS_BACKGROUND - priority = 25 var/list/warned_atoms = list() diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm index 43803aa647..8299709392 100644 --- a/code/controllers/subsystem/radio.dm +++ b/code/controllers/subsystem/radio.dm @@ -14,35 +14,22 @@ SUBSYSTEM_DEF(radio) /datum/controller/subsystem/radio/proc/add_object(obj/device, new_frequency as num, filter = null as text|null) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - + frequencies[f_text] = frequency = new(new_frequency) frequency.add_listener(device, filter) return frequency /datum/controller/subsystem/radio/proc/remove_object(obj/device, old_frequency) var/f_text = num2text(old_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] - if(frequency) frequency.remove_listener(device) - - if(frequency.devices.len == 0) - qdel(frequency) - frequencies -= f_text - + // let's don't delete frequencies in case a non-listener keeps a reference return 1 /datum/controller/subsystem/radio/proc/return_frequency(new_frequency as num) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] - if(!frequency) - frequency = new - frequency.frequency = new_frequency - frequencies[f_text] = frequency - + frequencies[f_text] = frequency = new(new_frequency) return frequency diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index d1bcf31885..b1468a65c4 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(research) name = "Research" flags = SS_KEEP_TIMING - priority = 15 //My powergame is priority. + priority = FIRE_PRIORITY_RESEARCH wait = 10 init_order = INIT_ORDER_RESEARCH var/list/invalid_design_ids = list() //associative id = number of times @@ -20,7 +20,7 @@ SUBSYSTEM_DEF(research) var/list/techweb_point_items = list() //path = value var/list/errored_datums = list() //---------------------------------------------- - var/single_server_income = 40.7 + var/single_server_income = 54.3 var/multiserver_calculation = FALSE var/last_income = 0 //^^^^^^^^ ALL OF THESE ARE PER SECOND! ^^^^^^^^ @@ -54,6 +54,7 @@ SUBSYSTEM_DEF(research) bitcoins = single_server_income break //Just need one to work. var/income_time_difference = world.time - last_income + science_tech.last_bitcoins = bitcoins // Doesn't take tick drift into account bitcoins *= income_time_difference / 10 science_tech.research_points += bitcoins last_income = world.time diff --git a/code/controllers/subsystem/server_maint.dm b/code/controllers/subsystem/server_maint.dm index cb5a86bd75..dd68443bd7 100644 --- a/code/controllers/subsystem/server_maint.dm +++ b/code/controllers/subsystem/server_maint.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(server_maint) name = "Server Tasks" wait = 6 flags = SS_POST_FIRE_TIMING - priority = 10 + priority = FIRE_PRIORITY_SERVER_MAINT init_order = INIT_ORDER_SERVER_MAINT runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 35208d4137..048ec3c54c 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -54,7 +54,7 @@ SUBSYSTEM_DEF(shuttle) var/lockdown = FALSE //disallow transit after nuke goes off - var/auto_call = 99000 //time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3. + var/auto_call = 99000 //CIT CHANGE - time before in deciseconds in which the shuttle is auto called. Default is 2½ hours plus 15 for the shuttle. So total is 3. /datum/controller/subsystem/shuttle/Initialize(timeofday) if(!arrivals) @@ -158,7 +158,7 @@ SUBSYSTEM_DEF(shuttle) break /datum/controller/subsystem/shuttle/proc/CheckAutoEvac() - if(emergencyNoEscape || emergencyNoRecall || !emergency) + if(emergencyNoEscape || emergencyNoRecall || !emergency || !SSticker.HasRoundStarted()) return var/threshold = CONFIG_GET(number/emergency_shuttle_autocall_threshold) @@ -249,6 +249,7 @@ SUBSYSTEM_DEF(shuttle) emergency.request(null, signal_origin, html_decode(emergency_reason), 0) log_game("[key_name(user)] has called the shuttle.") + deadchat_broadcast("[user.name] has called the shuttle.", user) if(call_reason) SSblackbox.record_feedback("text", "shuttle_reason", 1, "[call_reason]") log_game("Shuttle call reason: [call_reason]") @@ -261,7 +262,7 @@ SUBSYSTEM_DEF(shuttle) if(!admiral_message) admiral_message = pick(GLOB.admiral_messages) - var/intercepttext = "NanoTrasen Update: Request For Shuttle.
\ + var/intercepttext = "Nanotrasen Update: Request For Shuttle.
\ To whom it may concern:

\ We have taken note of the situation upon [station_name()] and have come to the \ conclusion that it does not warrant the abandonment of the station.
\ @@ -286,6 +287,7 @@ SUBSYSTEM_DEF(shuttle) emergency.cancel(get_area(user)) log_game("[key_name(user)] has recalled the shuttle.") message_admins("[key_name_admin(user)] has recalled the shuttle.") + deadchat_broadcast("[user.name] has recalled the shuttle.", user) return 1 /datum/controller/subsystem/shuttle/proc/canRecall() @@ -325,7 +327,7 @@ SUBSYSTEM_DEF(shuttle) continue var/turf/T = get_turf(thing) - if(T && (T.z in GLOB.station_z_levels)) + if(T && is_station_level(T.z)) callShuttle = 0 break @@ -385,7 +387,7 @@ SUBSYSTEM_DEF(shuttle) emergency.setTimer(emergencyDockTime) priority_announce("Hostile environment resolved. \ You have 3 minutes to board the Emergency Shuttle.", - null, 'sound/AI/shuttledock.ogg', "Priority") + null, 'sound/ai/shuttledock.ogg', "Priority") //try to move/request to dockHome if possible, otherwise dockAway. Mainly used for admin buttons /datum/controller/subsystem/shuttle/proc/toggleShuttle(shuttleId, dockHome, dockAway, timed) @@ -400,7 +402,7 @@ SUBSYSTEM_DEF(shuttle) if(M.request(getDock(destination))) return 2 else - if(M.dock(getDock(destination)) != DOCKING_SUCCESS) + if(M.initiate_docking(getDock(destination)) != DOCKING_SUCCESS) return 2 return 0 //dock successful @@ -415,7 +417,7 @@ SUBSYSTEM_DEF(shuttle) if(M.request(D)) return 2 else - if(M.dock(D) != DOCKING_SUCCESS) + if(M.initiate_docking(D) != DOCKING_SUCCESS) return 2 return 0 //dock successful @@ -429,7 +431,8 @@ SUBSYSTEM_DEF(shuttle) if(!(M in transit_requesters)) transit_requesters += M -/datum/controller/subsystem/shuttle/proc/autoEnd() + +/datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end after 3 hours has passed. if(world.time > auto_call && EMERGENCY_IDLE_OR_RECALLED) //3 hours SSshuttle.emergency.request(null, 1.5) priority_announce("The shift has come to an end and the shuttle called.") diff --git a/code/controllers/subsystem/spacedrift.dm b/code/controllers/subsystem/spacedrift.dm index 8fe7cbe048..56a6786a20 100644 --- a/code/controllers/subsystem/spacedrift.dm +++ b/code/controllers/subsystem/spacedrift.dm @@ -1,6 +1,6 @@ SUBSYSTEM_DEF(spacedrift) name = "Space Drift" - priority = 30 + priority = FIRE_PRIORITY_SPACEDRIFT wait = 5 flags = SS_NO_INIT|SS_KEEP_TIMING runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/squeak.dm b/code/controllers/subsystem/squeak.dm index 0148011e8b..022b659d8a 100644 --- a/code/controllers/subsystem/squeak.dm +++ b/code/controllers/subsystem/squeak.dm @@ -1,6 +1,6 @@ // The Squeak // because this is about placement of mice mobs, and nothing to do with -// mice - the computer peripheral +// mice - the computer peripheral SUBSYSTEM_DEF(squeak) name = "Squeak" diff --git a/code/controllers/subsystem/stickyban.dm b/code/controllers/subsystem/stickyban.dm index 8251df0039..371cf22b3b 100644 --- a/code/controllers/subsystem/stickyban.dm +++ b/code/controllers/subsystem/stickyban.dm @@ -27,6 +27,6 @@ SUBSYSTEM_DEF(stickyban) ban["existing_user_matches_this_round"] = list() ban["admin_matches_this_round"] = list() cache[ckey] = ban - + for (var/bannedckey in cache) world.SetConfig("ban", bannedckey, list2stickyban(cache[bannedckey])) diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm index a9b307bc0d..e03299f57f 100644 --- a/code/controllers/subsystem/tgui.dm +++ b/code/controllers/subsystem/tgui.dm @@ -2,7 +2,7 @@ SUBSYSTEM_DEF(tgui) name = "tgui" wait = 9 flags = SS_NO_INIT - priority = 110 + priority = FIRE_PRIORITY_TGUI runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT var/list/currentrun = list() diff --git a/code/controllers/subsystem/throwing.dm b/code/controllers/subsystem/throwing.dm index ec21f3bab2..a080f1a159 100644 --- a/code/controllers/subsystem/throwing.dm +++ b/code/controllers/subsystem/throwing.dm @@ -3,7 +3,7 @@ SUBSYSTEM_DEF(throwing) name = "Throwing" - priority = 25 + priority = FIRE_PRIORITY_THROWING wait = 1 flags = SS_NO_INIT|SS_KEEP_TIMING|SS_TICKER runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0f06caa20d..df6ac28247 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -4,7 +4,7 @@ SUBSYSTEM_DEF(ticker) name = "Ticker" init_order = INIT_ORDER_TICKER - priority = 200 + priority = FIRE_PRIORITY_TICKER flags = SS_KEEP_TIMING runlevels = RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME @@ -631,6 +631,7 @@ SUBSYSTEM_DEF(ticker) world.Reboot() /datum/controller/subsystem/ticker/Shutdown() + gather_newscaster() //called here so we ensure the log is created even upon admin reboot if(!round_end_sound) round_end_sound = pick(\ 'sound/roundend/newroundsexy.ogg', diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index 17cfa6fc06..3b19ae31cd 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -35,4 +35,4 @@ SUBSYSTEM_DEF(time_track) last_tick_realtime = current_realtime last_tick_byond_time = current_byondtime last_tick_tickcount = current_tickcount - SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[time_dilation_current]" = "[SQLtime()]")) + SSblackbox.record_feedback("associative", "time_dilation_current", 1, list("[SQLtime()]" = list("current" = "[time_dilation_current]", "avg_fast" = "[time_dilation_avg_fast]", "avg" = "[time_dilation_avg]", "avg_slow" = "[time_dilation_avg_slow]"))) diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index 3a2ca82bcd..abd58467e4 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -411,4 +411,4 @@ SUBSYSTEM_DEF(timer) #undef BUCKET_LEN -#undef BUCKET_POS +#undef BUCKET_POS \ No newline at end of file diff --git a/code/controllers/subsystem/title.dm b/code/controllers/subsystem/title.dm index 4f1dbc37c7..a0bcb5feec 100644 --- a/code/controllers/subsystem/title.dm +++ b/code/controllers/subsystem/title.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(title) break file_path = "config/title_screens/images/[pick(title_screens)]" - + icon = new(fcopy_rsc(file_path)) if(splash_turf) diff --git a/code/datums/action.dm b/code/datums/action.dm index f941a00a54..fb1f2fb8cb 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -170,14 +170,15 @@ ..(current_button) else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid. var/obj/item/I = target - current_button.appearance_cache = I.appearance var/old_layer = I.layer var/old_plane = I.plane I.layer = FLOAT_LAYER //AAAH I.plane = FLOAT_PLANE //^ what that guy said - current_button.overlays = list(I) + current_button.cut_overlays() + current_button.add_overlay(I) I.layer = old_layer I.plane = old_plane + current_button.appearance_cache = I.appearance /datum/action/item_action/toggle_light name = "Toggle Light" @@ -344,6 +345,19 @@ /datum/action/item_action/change name = "Change" +/datum/action/item_action/nano_picket_sign + name = "Retext Nano Picket Sign" + var/obj/item/picket_sign/S + +/datum/action/item_action/nano_picket_sign/New(Target) + ..() + if(istype(Target, /obj/item/picket_sign)) + S = Target + +/datum/action/item_action/nano_picket_sign/Trigger() + if(istype(S)) + S.retext(owner) + /datum/action/item_action/adjust /datum/action/item_action/adjust/New(Target) @@ -477,6 +491,8 @@ return FALSE return TRUE +/datum/action/spell_action/spell + /datum/action/spell_action/spell/IsAvailable() if(!target) return FALSE diff --git a/code/datums/actions/beam_rifle.dm b/code/datums/actions/beam_rifle.dm new file mode 100644 index 0000000000..3af5d13690 --- /dev/null +++ b/code/datums/actions/beam_rifle.dm @@ -0,0 +1,12 @@ + +/datum/action/item_action/zoom_speed_action + name = "Toggle Zooming Speed" + icon_icon = 'icons/mob/actions/actions_spells.dmi' + button_icon_state = "projectile" + background_icon_state = "bg_tech" + +/datum/action/item_action/zoom_lock_action + name = "Switch Zoom Mode" + icon_icon = 'icons/mob/actions/actions_items.dmi' + button_icon_state = "zoom_mode" + background_icon_state = "bg_tech" diff --git a/code/datums/actions/flightsuit.dm b/code/datums/actions/flightsuit.dm index 3e78fa5332..cf249fed31 100644 --- a/code/datums/actions/flightsuit.dm +++ b/code/datums/actions/flightsuit.dm @@ -1,5 +1,3 @@ - - /datum/action/item_action/flightsuit icon_icon = 'icons/mob/actions/actions_flightsuit.dmi' diff --git a/code/datums/antagonists/blob.dm b/code/datums/antagonists/blob.dm new file mode 100644 index 0000000000..5689e6a567 --- /dev/null +++ b/code/datums/antagonists/blob.dm @@ -0,0 +1,59 @@ +/datum/antagonist/blob + name = "Blob" + roundend_category = "blobs" + job_rank = ROLE_BLOB + + var/datum/action/innate/blobpop/pop_action + var/starting_points_human_blob = 60 + var/point_rate_human_blob = 2 + +/datum/antagonist/blob/roundend_report() + var/basic_report = ..() + //Display max blobpoints for blebs that lost + if(isovermind(owner.current)) //embarrasing if not + var/mob/camera/blob/overmind = owner.current + if(!overmind.victory_in_progress) //if it won this doesn't really matter + var/point_report = "
[owner.name] took over [overmind.max_count] tiles at the height of its growth." + return basic_report+point_report + return basic_report + +/datum/antagonist/blob/greet() + if(!isovermind(owner.current)) + to_chat(owner,"You feel bloated.") + +/datum/antagonist/blob/on_gain() + create_objectives() + . = ..() + +/datum/antagonist/blob/proc/create_objectives() + var/datum/objective/blob_takeover/main = new + main.owner = owner + objectives += main + owner.objectives |= objectives + +/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override) + if(!isovermind(owner.current)) + if(!pop_action) + pop_action = new + pop_action.Grant(owner.current) + +/datum/objective/blob_takeover + explanation_text = "Reach critical mass!" + +//Non-overminds get this on blob antag assignment +/datum/action/innate/blobpop + name = "Pop" + desc = "Unleash the blob" + icon_icon = 'icons/mob/blob.dmi' + button_icon_state = "blob" + +/datum/action/innate/blobpop/Activate() + var/mob/old_body = owner + var/datum/antagonist/blob/blobtag = owner.mind.has_antag_datum(/datum/antagonist/blob) + if(!blobtag) + Remove() + return + var/mob/camera/blob/B = new /mob/camera/blob(get_turf(old_body), blobtag.starting_points_human_blob) + owner.mind.transfer_to(B) + old_body.gib() + B.place_blob_core(blobtag.point_rate_human_blob, pop_override = TRUE) \ No newline at end of file diff --git a/code/datums/antagonists/changeling.dm b/code/datums/antagonists/changeling.dm index 4f8af2dc8a..53d0c37143 100644 --- a/code/datums/antagonists/changeling.dm +++ b/code/datums/antagonists/changeling.dm @@ -78,7 +78,7 @@ . = ..() /datum/antagonist/changeling/on_removal() - remove_changeling_powers(FALSE) + remove_changeling_powers() owner.objectives -= objectives . = ..() @@ -100,11 +100,11 @@ chem_recharge_slowdown = initial(chem_recharge_slowdown) mimicing = "" -/datum/antagonist/changeling/proc/remove_changeling_powers(keep_free_powers=0) +/datum/antagonist/changeling/proc/remove_changeling_powers() if(ishuman(owner.current) || ismonkey(owner.current)) reset_properties() for(var/obj/effect/proc_holder/changeling/p in purchasedpowers) - if((p.dna_cost == 0 && keep_free_powers) || p.always_keep) + if(p.always_keep) continue purchasedpowers -= p p.on_refund(owner.current) @@ -116,13 +116,13 @@ /datum/antagonist/changeling/proc/reset_powers() if(purchasedpowers) - remove_changeling_powers(TRUE) - //Purchase free powers. + remove_changeling_powers() + //Repurchase free powers. for(var/path in all_powers) var/obj/effect/proc_holder/changeling/S = new path() if(!S.dna_cost) if(!has_sting(S)) - purchasedpowers+=S + purchasedpowers += S S.on_purchase(owner.current,TRUE) /datum/antagonist/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power) @@ -223,7 +223,7 @@ if(verbose) to_chat(user, "[target] is not compatible with our biology.") return - if((target.disabilities & NOCLONE) || (target.disabilities & HUSK)) + if((target.has_disability(DISABILITY_NOCLONE)) || (target.has_disability(DISABILITY_NOCLONE))) if(verbose) to_chat(user, "DNA of [target] is ruined beyond usability!") return diff --git a/code/datums/antagonists/cult.dm b/code/datums/antagonists/cult.dm index 916123ddff..cccc442c4d 100644 --- a/code/datums/antagonists/cult.dm +++ b/code/datums/antagonists/cult.dm @@ -131,7 +131,7 @@ SSticker.mode.cult -= owner SSticker.mode.update_cult_icons_removed(owner) if(!silent) - owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!", ignored_mob = owner.current) + owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!", ignored_mob = owner.current) to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG) if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) @@ -243,7 +243,7 @@ return sacced || completed /datum/objective/sacrifice/update_explanation_text() - if(target && !sacced) + if(target) explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it." else explanation_text = "The veil has already been weakened here, proceed to the final objective." @@ -257,7 +257,7 @@ var/sanity = 0 while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100) var/area/summon = pick(GLOB.sortedAreas - summon_spots) - if(summon && (summon.z in GLOB.station_z_levels) && summon.valid_territory) + if(summon && is_station_level(summon.z) && summon.valid_territory) summon_spots += summon sanity++ update_explanation_text() diff --git a/code/datums/antagonists/datum_traitor.dm b/code/datums/antagonists/datum_traitor.dm index 3ccdc7ddfb..420dae4650 100644 --- a/code/datums/antagonists/datum_traitor.dm +++ b/code/datums/antagonists/datum_traitor.dm @@ -127,6 +127,7 @@ if(prob(30)) objective_count += forge_single_objective() + for(var/i = objective_count, i < CONFIG_GET(number/traitor_objectives_amount), i++) var/datum/objective/assassinate/kill_objective = new kill_objective.owner = owner @@ -152,11 +153,6 @@ maroon_objective.owner = owner maroon_objective.find_target() add_objective(maroon_objective) - else if(prob(50)) - var/datum/objective/assassinate/late/late_objective = new - late_objective.owner = owner - late_objective.find_target() - add_objective(late_objective) else var/datum/objective/assassinate/kill_objective = new kill_objective.owner = owner @@ -305,11 +301,11 @@ var/TC_uses = 0 var/uplink_true = FALSE var/purchases = "" - for(var/datum/component/uplink/H in GLOB.uplinks) - if(H && H.owner && H.owner == owner.key) - TC_uses += H.spent_telecrystals - uplink_true = TRUE - purchases += H.purchase_log.generate_render(FALSE) + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key] + if(H) + TC_uses = H.total_spent + uplink_true = TRUE + purchases += H.generate_render(FALSE) var/objectives_text = "" if(objectives.len)//If the traitor had no objectives, don't need to process this. diff --git a/code/datums/antagonists/monkey.dm b/code/datums/antagonists/monkey.dm new file mode 100644 index 0000000000..518161b51b --- /dev/null +++ b/code/datums/antagonists/monkey.dm @@ -0,0 +1,169 @@ +#define MONKEYS_ESCAPED 1 +#define MONKEYS_LIVED 2 +#define MONKEYS_DIED 3 +#define DISEASE_LIVED 4 + +/datum/antagonist/monkey + name = "Monkey" + job_rank = ROLE_MONKEY + roundend_category = "monkeys" + var/datum/team/monkey/monkey_team + +/datum/antagonist/monkey/on_gain() + . = ..() + SSticker.mode.ape_infectees += owner + owner.special_role = "Infected Monkey" + + var/datum/disease/D = new /datum/disease/transformation/jungle_fever/monkeymode + if(!owner.current.HasDisease(D)) + owner.current.AddDisease(D) + else + QDEL_NULL(D) + +/datum/antagonist/monkey/greet() + to_chat(owner, "You are a monkey now!") + to_chat(owner, "Bite humans to infect them, follow the orders of the monkey leaders, and help fellow monkeys!") + to_chat(owner, "Ensure at least one infected monkey escapes on the Emergency Shuttle!") + to_chat(owner, "As an intelligent monkey, you know how to use technology and how to ventcrawl while wearing things.") + to_chat(owner, "You can use :k to talk to fellow monkeys!") + SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg')) + +/datum/antagonist/monkey/on_removal() + . = ..() + owner.special_role = null + SSticker.mode.ape_infectees -= owner + + var/datum/disease/D = (/datum/disease/transformation/jungle_fever in owner.current.viruses) + if(D) + D.cure() + +/datum/antagonist/monkey/create_team(datum/team/monkey/new_team) + if(!new_team) + for(var/datum/antagonist/monkey/N in get_antagonists(/datum/antagonist/monkey, TRUE)) + if(N.monkey_team) + monkey_team = N.monkey_team + return + monkey_team = new /datum/team/monkey + monkey_team.update_objectives() + return + if(!istype(new_team)) + stack_trace("Wrong team type passed to [type] initialization.") + monkey_team = new_team + +/datum/antagonist/monkey/proc/forge_objectives() + if(monkey_team) + owner.objectives |= monkey_team.objectives + +/datum/antagonist/monkey/leader + name = "Monkey Leader" + +/datum/antagonist/monkey/leader/on_gain() + . = ..() + var/obj/item/organ/heart/freedom/F = new + F.Insert(owner.current, drop_if_replaced = FALSE) + SSticker.mode.ape_leaders += owner + owner.special_role = "Monkey Leader" + +/datum/antagonist/monkey/leader/on_removal() + . = ..() + SSticker.mode.ape_leaders -= owner + var/obj/item/organ/heart/H = new + H.Insert(owner.current, drop_if_replaced = FALSE) //replace freedom heart with normal heart + +/datum/antagonist/monkey/leader/greet() + to_chat(owner, "You are the Jungle Fever patient zero!!") + to_chat(owner, "You have been planted onto this station by the Animal Rights Consortium.") + to_chat(owner, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.") + to_chat(owner, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.") + to_chat(owner, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.") + to_chat(owner, "As an initial infectee, you will be considered a 'leader' by your fellow monkeys.") + to_chat(owner, "You can use :k to talk to fellow monkeys!") + SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg')) + +/datum/objective/monkey + explanation_text = "Ensure that infected monkeys escape on the emergency shuttle!" + martyr_compatible = TRUE + var/monkeys_to_win = 1 + var/escaped_monkeys = 0 + +/datum/objective/monkey/check_completion() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if (M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + escaped_monkeys++ + if(escaped_monkeys >= monkeys_to_win) + return TRUE + return FALSE + +/datum/team/monkey + name = "Monkeys" + +/datum/team/monkey/proc/update_objectives() + objectives = list() + var/datum/objective/monkey/O = new /datum/objective/monkey() + O.team = src + objectives += O + return + +/datum/team/monkey/proc/infected_monkeys_alive() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if(M.HasDisease(D)) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_monkeys_escaped() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) + if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_humans_escaped() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/human/M in GLOB.alive_mob_list) + if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase())) + return TRUE + return FALSE + +/datum/team/monkey/proc/infected_humans_alive() + var/datum/disease/D = new /datum/disease/transformation/jungle_fever() + for(var/mob/living/carbon/human/M in GLOB.alive_mob_list) + if(M.HasDisease(D)) + return TRUE + return FALSE + +/datum/team/monkey/proc/get_result() + if(infected_monkeys_escaped()) + return MONKEYS_ESCAPED + if(infected_monkeys_alive()) + return MONKEYS_LIVED + if(infected_humans_alive() || infected_humans_escaped()) + return DISEASE_LIVED + return MONKEYS_DIED + +/datum/team/monkey/roundend_report() + var/list/parts = list() + switch(get_result()) + if(MONKEYS_ESCAPED) + parts += "Monkey Major Victory!" + parts += "Central Command and [station_name()] were taken over by the monkeys! Ook ook!" + if(MONKEYS_LIVED) + parts += "Monkey Minor Victory!" + parts += "[station_name()] was taken over by the monkeys! Ook ook!" + if(DISEASE_LIVED) + parts += "Monkey Minor Defeat!" + parts += "All the monkeys died, but the disease lives on! The future is uncertain." + if(MONKEYS_DIED) + parts += "Monkey Major Defeat!" + parts += "All the monkeys died, and Jungle Fever was wiped out!" + var/list/leaders = get_antagonists(/datum/antagonist/monkey/leader, TRUE) + var/list/monkeys = get_antagonists(/datum/antagonist/monkey, TRUE) + + if(LAZYLEN(leaders)) + parts += "The monkey leaders were:" + parts += printplayerlist(SSticker.mode.ape_leaders) + if(LAZYLEN(monkeys)) + parts += "The monkeys were:" + parts += printplayerlist(SSticker.mode.ape_infectees) + return "
[parts.Join("
")]
" \ No newline at end of file diff --git a/code/datums/antagonists/nukeop.dm b/code/datums/antagonists/nukeop.dm index 8b7fc7826f..99d273ac97 100644 --- a/code/datums/antagonists/nukeop.dm +++ b/code/datums/antagonists/nukeop.dm @@ -232,7 +232,7 @@ /datum/team/nuclear/proc/syndies_escaped() var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate") - return (S && (S.z == ZLEVEL_CENTCOM || S.z == ZLEVEL_TRANSIT)) + return S && (is_centcom_level(S.z) || is_transit_level(S.z)) /datum/team/nuclear/proc/get_result() var/evacuation = SSshuttle.emergency.mode == SHUTTLE_ENDGAME @@ -303,14 +303,10 @@ var/TC_uses = 0 for(var/I in members) var/datum/mind/syndicate = I - for(var/U in GLOB.uplinks) - var/datum/component/uplink/H = U - if(H.owner == syndicate.key) - TC_uses += H.purchase_log.total_spent - if(H.purchase_log) - purchases += H.purchase_log.generate_render(show_key = FALSE) - else - stack_trace("WARNING: Nuke Op uplink with no purchase_log Owner: [H.owner]") + var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key] + if(H) + TC_uses += H.total_spent + purchases += H.generate_render(show_key = FALSE) text += printplayerlist(members) text += "
" text += "(Syndicates used [TC_uses] TC) [purchases]" diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 7c2ba20a62..a28a108365 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -42,7 +42,7 @@ lose_text = "You feel smart again." /datum/brain_trauma/mild/dumbness/on_gain() - owner.disabilities |= DUMB + owner.add_disability(DISABILITY_DUMB, TRAUMA_DISABILITY) ..() /datum/brain_trauma/mild/dumbness/on_life() @@ -54,7 +54,7 @@ ..() /datum/brain_trauma/mild/dumbness/on_lose() - owner.disabilities &= ~DUMB + owner.remove_disability(DISABILITY_DUMB, TRAUMA_DISABILITY) owner.derpspeech = 0 ..() diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm index 313b693436..a775113491 100644 --- a/code/datums/brain_damage/phobia.dm +++ b/code/datums/brain_damage/phobia.dm @@ -68,7 +68,7 @@ return /datum/brain_trauma/mild/phobia/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.disabilities & DEAF || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* + if(owner.has_disability(DISABILITY_DEAF) || world.time < next_scare) //words can't trigger you if you can't hear them *taps head* return message for(var/word in trigger_words) if(findtext(message, word)) diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm index ceda917713..ba4eaa376e 100644 --- a/code/datums/brain_damage/severe.dm +++ b/code/datums/brain_damage/severe.dm @@ -12,17 +12,11 @@ lose_text = "You suddenly remember how to speak." /datum/brain_trauma/severe/mute/on_gain() - owner.disabilities |= MUTE - ..() - -//no fiddling with genetics to get out of this one -/datum/brain_trauma/severe/mute/on_life() - if(!(owner.disabilities & MUTE)) - on_gain() + owner.add_disability(DISABILITY_MUTE, TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/mute/on_lose() - owner.disabilities &= ~MUTE + owner.remove_disability(DISABILITY_MUTE, TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/aphasia @@ -56,17 +50,11 @@ lose_text = "Your vision returns." /datum/brain_trauma/severe/blindness/on_gain() - owner.become_blind() - ..() - -//no fiddling with genetics to get out of this one -/datum/brain_trauma/severe/blindness/on_life() - if(!(owner.disabilities & BLIND)) - on_gain() + owner.become_blind(TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/blindness/on_lose() - owner.cure_blind() + owner.cure_blind(TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/paralysis @@ -132,7 +120,7 @@ stress -= 4 /datum/brain_trauma/severe/monophobia/proc/check_alone() - if(owner.disabilities & BLIND) + if(owner.has_disability(DISABILITY_BLIND)) return TRUE for(var/mob/M in oview(owner, 7)) if(!isliving(M)) //ghosts ain't people @@ -194,11 +182,11 @@ lose_text = "You feel in control of your hands again." /datum/brain_trauma/severe/discoordination/on_gain() - owner.disabilities |= MONKEYLIKE + owner.add_disability(DISABILITY_MONKEYLIKE, TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/discoordination/on_lose() - owner.disabilities &= ~MONKEYLIKE + owner.remove_disability(DISABILITY_MONKEYLIKE, TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/pacifism @@ -209,9 +197,9 @@ lose_text = "You no longer feel compelled to not harm." /datum/brain_trauma/severe/pacifism/on_gain() - owner.disabilities |= PACIFISM + owner.add_disability(DISABILITY_PACIFISM, TRAUMA_DISABILITY) ..() /datum/brain_trauma/severe/pacifism/on_lose() - owner.disabilities &= ~PACIFISM + owner.remove_disability(DISABILITY_PACIFISM, TRAUMA_DISABILITY) ..() \ No newline at end of file diff --git a/code/datums/brain_damage/split_personality.dm b/code/datums/brain_damage/split_personality.dm index deed1c8406..dcb7fca3d1 100644 --- a/code/datums/brain_damage/split_personality.dm +++ b/code/datums/brain_damage/split_personality.dm @@ -192,7 +192,7 @@ return //no random switching /datum/brain_trauma/severe/split_personality/brainwashing/on_hear(message, speaker, message_language, raw_message, radio_freq) - if(owner.disabilities & DEAF || owner == speaker) + if(owner.has_disability(DISABILITY_DEAF) || owner == speaker) return message if(findtext(message, codeword)) message = replacetext(message, codeword, "[codeword]") diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index fcd4651459..46ffc25643 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -205,13 +205,13 @@ new_comp = new nt(arglist(args)) if(!QDELETED(new_comp)) old_comp.InheritComponent(new_comp, TRUE) - qdel(new_comp) + QDEL_NULL(new_comp) if(COMPONENT_DUPE_HIGHLANDER) if(!new_comp) new_comp = new nt(arglist(args)) if(!QDELETED(new_comp)) new_comp.InheritComponent(old_comp, FALSE) - qdel(old_comp) + QDEL_NULL(old_comp) if(COMPONENT_DUPE_UNIQUE_PASSARGS) if(!new_comp) var/list/arguments = args.Copy(2) diff --git a/code/datums/components/cleaning.dm b/code/datums/components/cleaning.dm new file mode 100644 index 0000000000..bab2461947 --- /dev/null +++ b/code/datums/components/cleaning.dm @@ -0,0 +1,36 @@ +/datum/component/cleaning + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + +/datum/component/cleaning/Initialize() + if(!ismovableatom(parent)) + . = COMPONENT_INCOMPATIBLE + CRASH("[type] added to a [parent.type]") + RegisterSignal(list(COMSIG_MOVABLE_MOVED), .proc/Clean) + +/datum/component/cleaning/proc/Clean() + var/atom/movable/AM = parent + var/turf/tile = AM.loc + if(!isturf(tile)) + return + + tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + for(var/A in tile) + if(is_cleanable(A)) + qdel(A) + else if(istype(A, /obj/item)) + var/obj/item/I = A + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + else if(ishuman(A)) + var/mob/living/carbon/human/cleaned_human = A + if(cleaned_human.lying) + if(cleaned_human.head) + cleaned_human.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + if(cleaned_human.wear_suit) + cleaned_human.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + else if(cleaned_human.w_uniform) + cleaned_human.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + if(cleaned_human.shoes) + cleaned_human.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + cleaned_human.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) + cleaned_human.wash_cream() + to_chat(cleaned_human, "[AM] cleans your face!") diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index a79de32898..6b7f846e83 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -6,19 +6,11 @@ var/mutable_appearance/pic /datum/component/decal/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_GOD, _color, _layer=TURF_LAYER, _description) - if(!isatom(parent) || !_icon || !_icon_state) + if(!isatom(parent) || !generate_appearance(_icon, _icon_state, _dir, _layer, _color)) . = COMPONENT_INCOMPATIBLE CRASH("A turf decal was applied incorrectly to [parent.type]: icon:[_icon ? _icon : "none"] icon_state:[_icon_state ? _icon_state : "none"]") - - // It has to be made from an image or dir breaks because of a byond bug - var/temp_image = image(_icon, null, _icon_state, _layer, _dir) - pic = new(temp_image) - pic.color = _color - - cleanable = _cleanable description = _description - - apply() + cleanable = _cleanable if(_dir) // If no dir is assigned at start then it follows the atom's dir RegisterSignal(COMSIG_ATOM_DIR_CHANGE, .proc/rotate_react) @@ -26,6 +18,7 @@ RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_react) if(_description) RegisterSignal(COMSIG_PARENT_EXAMINE, .proc/examine) + apply() /datum/component/decal/Destroy() remove() @@ -36,13 +29,26 @@ remove(thing) apply(thing) +/datum/component/decal/proc/generate_appearance(_icon, _icon_state, _dir, _layer, _color) + if(!_icon || !_icon_state) + return FALSE + // It has to be made from an image or dir breaks because of a byond bug + var/temp_image = image(_icon, null, _icon_state, _layer, _dir) + pic = new(temp_image) + pic.color = _color + return TRUE + /datum/component/decal/proc/apply(atom/thing) var/atom/master = thing || parent master.add_overlay(pic, TRUE) + if(isitem(master)) + addtimer(CALLBACK(master, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) /datum/component/decal/proc/remove(atom/thing) var/atom/master = thing || parent master.cut_overlay(pic, TRUE) + if(isitem(master)) + addtimer(CALLBACK(master, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) /datum/component/decal/proc/rotate_react(old_dir, new_dir) if(old_dir == new_dir) @@ -56,4 +62,4 @@ qdel(src) /datum/component/decal/proc/examine(mob/user) - to_chat(user, description) + to_chat(user, description) \ No newline at end of file diff --git a/code/datums/components/decals/blood.dm b/code/datums/components/decals/blood.dm new file mode 100644 index 0000000000..f2dc9a48d0 --- /dev/null +++ b/code/datums/components/decals/blood.dm @@ -0,0 +1,35 @@ +/datum/component/decal/blood + dupe_mode = COMPONENT_DUPE_UNIQUE + +/datum/component/decal/blood/Initialize(_icon, _icon_state, _dir, _cleanable=CLEAN_STRENGTH_BLOOD, _color, _layer=ABOVE_OBJ_LAYER) + if(!isitem(parent)) + . = COMPONENT_INCOMPATIBLE + CRASH("Warning: Blood decal attempted to be added to non-item of type [parent.type]") + . = ..() + RegisterSignal(COMSIG_ATOM_GET_EXAMINE_NAME, .proc/get_examine_name) + +/datum/component/decal/blood/generate_appearance(_icon, _icon_state, _dir, _layer, _color) + var/obj/item/I = parent + if(!_icon) + _icon = 'icons/effects/blood.dmi' + if(!_icon_state) + _icon_state = "itemblood" + if(!initial(I.icon) || !initial(I.icon_state)) + return FALSE + var/static/list/blood_splatter_appearances = list() + //try to find a pre-processed blood-splatter. otherwise, make a new one + var/index = "[REF(initial(I.icon))]-[initial(I.icon_state)]" + pic = blood_splatter_appearances[index] + if(!pic) + var/icon/blood_splatter_icon = icon(initial(I.icon), initial(I.icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object + blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) + blood_splatter_icon.Blend(icon(_icon, _icon_state), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant + pic = mutable_appearance(blood_splatter_icon, initial(I.icon_state), I.layer) + blood_splatter_appearances[index] = pic + return TRUE + +/datum/component/decal/blood/proc/get_examine_name(mob/user, list/override) + var/atom/A = parent + override[EXAMINE_POSITION_ARTICLE] = A.gender == PLURAL? "some" : "a" + override[EXAMINE_POSITION_BEFORE] = " blood-stained " + return COMPONENT_EXNAME_CHANGED diff --git a/code/datums/components/forensics.dm b/code/datums/components/forensics.dm new file mode 100644 index 0000000000..76baa057cc --- /dev/null +++ b/code/datums/components/forensics.dm @@ -0,0 +1,159 @@ +/datum/component/forensics + dupe_mode = COMPONENT_DUPE_UNIQUE + var/list/fingerprints //assoc print = print + var/list/hiddenprints //assoc ckey = realname/gloves/ckey + var/list/blood_DNA //assoc dna = bloodtype + var/list/fibers //assoc print = print + +/datum/component/forensics/InheritComponent(datum/component/forensics/F, original) //Use of | and |= being different here is INTENTIONAL. + fingerprints = fingerprints | F.fingerprints + hiddenprints = hiddenprints | F.hiddenprints + blood_DNA = blood_DNA | F.blood_DNA + fibers = fibers | F.fibers + check_blood() + return ..() + +/datum/component/forensics/Initialize(new_fingerprints, new_hiddenprints, new_blood_DNA, new_fibers) + if(!isatom(parent)) + . = COMPONENT_INCOMPATIBLE + CRASH("Forensics datum applied incorrectly to non-atom of type [parent.type]!") + fingerprints = new_fingerprints + hiddenprints = new_hiddenprints + blood_DNA = new_blood_DNA + fibers = new_fibers + check_blood() + RegisterSignal(COMSIG_COMPONENT_CLEAN_ACT, .proc/clean_act) + +/datum/component/forensics/proc/wipe_fingerprints() + fingerprints = null + return TRUE + +/datum/component/forensics/proc/wipe_hiddenprints() + return //no. + +/datum/component/forensics/proc/wipe_blood_DNA() + blood_DNA = null + if(isitem(parent)) + qdel(parent.GetComponent(/datum/component/decal/blood)) + return TRUE + +/datum/component/forensics/proc/wipe_fibers() + fibers = null + return TRUE + +/datum/component/forensics/proc/clean_act(strength) + if(strength >= CLEAN_STRENGTH_FINGERPRINTS) + wipe_fingerprints() + if(strength >= CLEAN_STRENGTH_BLOOD) + wipe_blood_DNA() + if(strength >= CLEAN_STRENGTH_FIBERS) + wipe_fibers() + +/datum/component/forensics/proc/add_fingerprint_list(list/_fingerprints) //list(text) + if(!length(_fingerprints)) + return + LAZYINITLIST(fingerprints) + for(var/i in _fingerprints) //We use an associative list, make sure we don't just merge a non-associative list into ours. + fingerprints[i] = i + return TRUE + +/datum/component/forensics/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE) + if(!M) + return + add_hiddenprint(M) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + add_fibers(H) + if(H.gloves) //Check if the gloves (if any) hide fingerprints + var/obj/item/clothing/gloves/G = H.gloves + if(G.transfer_prints) + ignoregloves = TRUE + if(!ignoregloves) + H.gloves.add_fingerprint(H, TRUE) //ignoregloves = 1 to avoid infinite loop. + return + var/full_print = md5(H.dna.uni_identity) + LAZYSET(fingerprints, full_print, full_print) + return TRUE + +/datum/component/forensics/proc/add_fiber_list(list/_fibertext) //list(text) + if(!length(_fibertext)) + return + LAZYINITLIST(fibers) + for(var/i in _fibertext) //We use an associative list, make sure we don't just merge a non-associative list into ours. + fibers[i] = i + return TRUE + +/datum/component/forensics/proc/add_fibers(mob/living/carbon/human/M) + var/fibertext + var/item_multiplier = isitem(src)?1.2:1 + if(M.wear_suit) + fibertext = "Material from \a [M.wear_suit]." + if(prob(10*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + if(!(M.wear_suit.body_parts_covered & CHEST)) + if(M.w_uniform) + fibertext = "Fibers from \a [M.w_uniform]." + if(prob(12*item_multiplier) && !LAZYACCESS(fibers, fibertext)) //Wearing a suit means less of the uniform exposed. + LAZYSET(fibers, fibertext, fibertext) + if(!(M.wear_suit.body_parts_covered & HANDS)) + if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + else if(M.w_uniform) + fibertext = "Fibers from \a [M.w_uniform]." + if(prob(15*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + // "Added fibertext: [fibertext]" + LAZYSET(fibers, fibertext, fibertext) + if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + else if(M.gloves) + fibertext = "Material from a pair of [M.gloves.name]." + if(prob(20*item_multiplier) && !LAZYACCESS(fibers, fibertext)) + LAZYSET(fibers, fibertext, fibertext) + return TRUE + +/datum/component/forensics/proc/add_hiddenprint_list(list/_hiddenprints) //list(ckey = text) + if(!length(_hiddenprints)) + return + LAZYINITLIST(hiddenprints) + for(var/i in _hiddenprints) //We use an associative list, make sure we don't just merge a non-associative list into ours. + hiddenprints[i] = _hiddenprints[i] + return TRUE + +/datum/component/forensics/proc/add_hiddenprint(mob/living/M) + if(!M || !M.key) + return + var/hasgloves = "" + if(ishuman(M)) + var/mob/living/carbon/human/H = M + if(H.gloves) + hasgloves = "(gloves)" + var/current_time = time_stamp() + if(!LAZYACCESS(hiddenprints, M.key)) + LAZYSET(hiddenprints, M.key, "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]") + else + var/laststamppos = findtext(LAZYACCESS(hiddenprints, M.key), " Last: ") + if(laststamppos) + LAZYSET(hiddenprints, M.key, copytext(hiddenprints[M.key], 1, laststamppos)) + hiddenprints[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" //made sure to be existing by if(!LAZYACCESS);else + parent.fingerprintslast = M.ckey + return TRUE + +/datum/component/forensics/proc/add_blood_DNA(list/dna) //list(dna_enzymes = type) + if(!length(dna)) + return + LAZYINITLIST(blood_DNA) + for(var/i in dna) + blood_DNA[i] = dna[i] + check_blood() + return TRUE + +/datum/component/forensics/proc/check_blood() + if(!isitem(parent)) + return + if(!length(blood_DNA)) + return + parent.LoadComponent(/datum/component/decal/blood) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index d8b3b058dd..2cdbf7196d 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -51,7 +51,7 @@ /datum/component/material_container/proc/OnAttackBy(obj/item/I, mob/living/user) var/list/tc = allowed_typecache - if(user.a_intent == INTENT_HARM) + if(user.a_intent != INTENT_HELP) return if((I.flags_2 & (HOLOGRAM_2 | NO_MAT_REDEMPTION_2)) || (tc && !is_type_in_typecache(I, tc))) to_chat(user, "[parent] won't accept [I]!") diff --git a/code/datums/components/spooky.dm b/code/datums/components/spooky.dm index 3f3b0341ee..a62b7dcaab 100644 --- a/code/datums/components/spooky.dm +++ b/code/datums/components/spooky.dm @@ -57,4 +57,4 @@ var/t = stripped_input(H, "Enter your new skeleton name", H.real_name, null, MAX_NAME_LEN) if(!t) t = "spooky skeleton" - H.fully_replace_character_name(H.real_name, t) + H.fully_replace_character_name(null, t) diff --git a/code/datums/components/squeek.dm b/code/datums/components/squeek.dm index 7b9a7866ca..7a362f0391 100644 --- a/code/datums/components/squeek.dm +++ b/code/datums/components/squeek.dm @@ -24,7 +24,8 @@ if(use_delay_override) use_delay = use_delay_override - RegisterSignal(list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_CROSSED, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) + RegisterSignal(list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_COLLIDE, COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_OBJ), .proc/play_squeak) + RegisterSignal(COMSIG_MOVABLE_CROSSED, .proc/play_squeak_turf) RegisterSignal(COMSIG_ITEM_ATTACK_SELF, .proc/use_squeak) RegisterSignal(COMSIG_SHOES_STEP_ACTION, .proc/step_squeak) @@ -42,6 +43,11 @@ else steps++ +/datum/component/squeak/proc/play_squeak_turf() + var/atom/current_parent = parent + if(isturf(current_parent.loc)) + play_squeak() + /datum/component/squeak/proc/use_squeak() if(last_use + use_delay < world.time) last_use = world.time diff --git a/code/datums/components/thermite.dm b/code/datums/components/thermite.dm index 11611cadfb..13ec5ed8f9 100644 --- a/code/datums/components/thermite.dm +++ b/code/datums/components/thermite.dm @@ -63,7 +63,7 @@ if(amount >= 50) var/burning_time = max(100, 100-amount) - master = master.ChangeTurf(master.baseturf) + master = master.ScrapeAway() master.burn_tile() if(user) master.add_hiddenprint(user) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 5f9cf3ad9a..c22af19396 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -1,3 +1,4 @@ + /datum/datacore var/medical[] = list() var/medicalPrintCount = 0 diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 4c08b1000d..6a3ad57878 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -17,6 +17,7 @@ /datum/proc/Destroy(force=FALSE, ...) tag = null weak_reference = null //ensure prompt GCing of weakref. + var/list/timers = active_timers active_timers = null for(var/thing in timers) @@ -24,6 +25,7 @@ if (timer.spent) continue qdel(timer) + var/list/dc = datum_components if(dc) var/all_components = dc[/datum/component] @@ -35,4 +37,11 @@ var/datum/component/C = all_components qdel(C, FALSE, TRUE) dc.Cut() + + var/list/focusers = src.focusers + if(focusers) + for(var/i in 1 to focusers.len) + var/mob/M = focusers[i] + M.set_focus(M) + return QDEL_HINT_QUEUE diff --git a/code/datums/diseases/_MobProcs.dm b/code/datums/diseases/_MobProcs.dm index 7c08a3908f..ffc20cc9cb 100644 --- a/code/datums/diseases/_MobProcs.dm +++ b/code/datums/diseases/_MobProcs.dm @@ -3,29 +3,29 @@ for(var/thing in viruses) var/datum/disease/DD = thing if(D.IsSame(DD)) - return 1 - return 0 + return TRUE + return FALSE /mob/proc/CanContractDisease(datum/disease/D) if(stat == DEAD) - return 0 + return FALSE if(D.GetDiseaseID() in resistances) - return 0 + return FALSE if(HasDisease(D)) - return 0 + return FALSE if(!(type in D.viable_mobtypes)) - return 0 + return FALSE - return 1 + return TRUE /mob/proc/ContactContractDisease(datum/disease/D) if(!CanContractDisease(D)) - return 0 + return FALSE AddDisease(D) @@ -53,12 +53,13 @@ else DD.vars[V] = D.vars[V] + DD.after_add() DD.affected_mob.med_hud_set_status() /mob/living/carbon/ContactContractDisease(datum/disease/D, target_zone) if(!CanContractDisease(D)) - return 0 + return FALSE var/obj/item/clothing/Cl = null var/passed = TRUE diff --git a/code/datums/diseases/_disease.dm b/code/datums/diseases/_disease.dm index 951edece23..5d49d7a523 100644 --- a/code/datums/diseases/_disease.dm +++ b/code/datums/diseases/_disease.dm @@ -60,14 +60,14 @@ /datum/disease/proc/has_cure() if(!(disease_flags & CURABLE)) - return 0 + return FALSE . = cures.len for(var/C_id in cures) if(!affected_mob.reagents.has_reagent(C_id)) .-- if(!. || (needs_all_cures && . < cures.len)) - return 0 + return FALSE //Airborne spreading /datum/disease/proc/spread(force_spread = 0) @@ -111,8 +111,8 @@ /datum/disease/proc/IsSame(datum/disease/D) if(istype(src, D.type)) - return 1 - return 0 + return TRUE + return FALSE /datum/disease/proc/Copy() @@ -120,6 +120,9 @@ D.strain_data = strain_data.Copy() return D +/datum/disease/proc/after_add() + return + /datum/disease/proc/GetDiseaseID() return "[type]" diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 60f90d61ad..c3970baee0 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -408,7 +408,7 @@ AD.Refresh() for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list)) - if(!(H.z in GLOB.station_z_levels)) + if(!is_station_level(H.z)) continue if(!H.HasDisease(D)) H.ForceContractDisease(D) diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index 1a197f0f34..d2f6a73365 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -1,59 +1,59 @@ -// Cold - +// Cold + /datum/disease/advance/cold/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) - name = "Cold" - symptoms = list(new/datum/symptom/sneeze) - ..(process, D, copy) - - -// Flu - + if(!D) + name = "Cold" + symptoms = list(new/datum/symptom/sneeze) + ..(process, D, copy) + + +// Flu + /datum/disease/advance/flu/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) - name = "Flu" - symptoms = list(new/datum/symptom/cough) - ..(process, D, copy) - - -// Voice Changing - + if(!D) + name = "Flu" + symptoms = list(new/datum/symptom/cough) + ..(process, D, copy) + + +// Voice Changing + /datum/disease/advance/voice_change/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) - name = "Epiglottis Mutation" - symptoms = list(new/datum/symptom/voice_change) - ..(process, D, copy) - - -// Toxin Filter - + if(!D) + name = "Epiglottis Mutation" + symptoms = list(new/datum/symptom/voice_change) + ..(process, D, copy) + + +// Toxin Filter + /datum/disease/advance/heal/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) - name = "Liver Enhancer" - symptoms = list(new/datum/symptom/heal) - ..(process, D, copy) - - + if(!D) + name = "Liver Enhancer" + symptoms = list(new/datum/symptom/heal) + ..(process, D, copy) + + // Hallucigen - + /datum/disease/advance/hallucigen/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) + if(!D) name = "Second Sight" - symptoms = list(new/datum/symptom/hallucigen) - ..(process, D, copy) - -// Sensory Restoration - + symptoms = list(new/datum/symptom/hallucigen) + ..(process, D, copy) + +// Sensory Restoration + /datum/disease/advance/mind_restoration/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) + if(!D) name = "Intelligence Booster" symptoms = list(new/datum/symptom/mind_restoration) - ..(process, D, copy) - -// Sensory Destruction - + ..(process, D, copy) + +// Sensory Destruction + /datum/disease/advance/narcolepsy/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE) - if(!D) + if(!D) name = "Experimental Insomnia Cure" symptoms = list(new/datum/symptom/narcolepsy) ..(process, D, copy) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/beard.dm b/code/datums/diseases/advance/symptoms/beard.dm index aa3919f3cf..c7a3ccec89 100644 --- a/code/datums/diseases/advance/symptoms/beard.dm +++ b/code/datums/diseases/advance/symptoms/beard.dm @@ -1,33 +1,33 @@ -/* -////////////////////////////////////// -Facial Hypertrichosis - - Very very Noticable. - Decreases resistance slightly. - Decreases stage speed. - Reduced transmittability - Intense Level. - -BONUS - Makes the mob grow a massive beard, regardless of gender. - -////////////////////////////////////// -*/ - -/datum/symptom/beard - - name = "Facial Hypertrichosis" +/* +////////////////////////////////////// +Facial Hypertrichosis + + Very very Noticable. + Decreases resistance slightly. + Decreases stage speed. + Reduced transmittability + Intense Level. + +BONUS + Makes the mob grow a massive beard, regardless of gender. + +////////////////////////////////////// +*/ + +/datum/symptom/beard + + name = "Facial Hypertrichosis" desc = "The virus increases hair production significantly, causing rapid beard growth." - stealth = -3 - resistance = -1 - stage_speed = -3 - transmittable = -1 - level = 4 - severity = 1 + stealth = -3 + resistance = -1 + stage_speed = -3 + transmittable = -1 + level = 4 + severity = 1 symptom_delay_min = 18 symptom_delay_max = 36 - -/datum/symptom/beard/Activate(datum/disease/advance/A) + +/datum/symptom/beard/Activate(datum/disease/advance/A) if(!..()) return var/mob/living/M = A.affected_mob diff --git a/code/datums/diseases/advance/symptoms/confusion.dm b/code/datums/diseases/advance/symptoms/confusion.dm index 209c7b0bf6..4ff69680ce 100644 --- a/code/datums/diseases/advance/symptoms/confusion.dm +++ b/code/datums/diseases/advance/symptoms/confusion.dm @@ -1,30 +1,30 @@ -/* -////////////////////////////////////// - -Confusion - - Little bit hidden. - Lowers resistance. - Decreases stage speed. - Not very transmittable. - Intense Level. - -Bonus - Makes the affected mob be confused for short periods of time. - -////////////////////////////////////// -*/ - -/datum/symptom/confusion - - name = "Confusion" +/* +////////////////////////////////////// + +Confusion + + Little bit hidden. + Lowers resistance. + Decreases stage speed. + Not very transmittable. + Intense Level. + +Bonus + Makes the affected mob be confused for short periods of time. + +////////////////////////////////////// +*/ + +/datum/symptom/confusion + + name = "Confusion" desc = "The virus interferes with the proper function of the neural system, leading to bouts of confusion and erratic movement." - stealth = 1 - resistance = -1 - stage_speed = -3 - transmittable = 0 - level = 4 - severity = 2 + stealth = 1 + resistance = -1 + stage_speed = -3 + transmittable = 0 + level = 4 + severity = 2 base_message_chance = 25 symptom_delay_min = 10 symptom_delay_max = 30 @@ -32,7 +32,7 @@ Bonus threshold_desc = "Resistance 6: Causes brain damage over time.
\ Transmission 6: Increases confusion duration.
\ Stealth 4: The symptom remains hidden until active." - + /datum/symptom/confusion/Start(datum/disease/advance/A) if(!..()) return @@ -42,20 +42,20 @@ Bonus power = 1.5 if(A.properties["stealth"] >= 4) suppress_warning = TRUE - -/datum/symptom/confusion/Activate(datum/disease/advance/A) + +/datum/symptom/confusion/Activate(datum/disease/advance/A) if(!..()) return var/mob/living/carbon/M = A.affected_mob switch(A.stage) if(1, 2, 3, 4) if(prob(base_message_chance) && !suppress_warning) - to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]") + to_chat(M, "[pick("Your head hurts.", "Your mind blanks for a moment.")]") else to_chat(M, "You can't think straight!") M.confused = min(100 * power, M.confused + 8) if(brain_damage) M.adjustBrainLoss(3 * power, 80) M.updatehealth() - - return + + return diff --git a/code/datums/diseases/advance/symptoms/dizzy.dm b/code/datums/diseases/advance/symptoms/dizzy.dm index bb83582425..c7f7198f6b 100644 --- a/code/datums/diseases/advance/symptoms/dizzy.dm +++ b/code/datums/diseases/advance/symptoms/dizzy.dm @@ -50,4 +50,4 @@ Bonus to_chat(M, "A wave of dizziness washes over you!") M.Dizzy(5) if(power >= 2) - M.set_drugginess(5) + M.set_drugginess(5) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/flesh_eating.dm b/code/datums/diseases/advance/symptoms/flesh_eating.dm index 2d5d22a63a..c38acc8e9e 100644 --- a/code/datums/diseases/advance/symptoms/flesh_eating.dm +++ b/code/datums/diseases/advance/symptoms/flesh_eating.dm @@ -127,4 +127,4 @@ Bonus M.reagents.add_reagent_list(list("heparin" = 2, "lipolicide" = 2)) if(zombie) M.reagents.add_reagent("romerol", 1) - return 1 + return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/headache.dm b/code/datums/diseases/advance/symptoms/headache.dm index 3a8c82beed..973de1455b 100644 --- a/code/datums/diseases/advance/symptoms/headache.dm +++ b/code/datums/diseases/advance/symptoms/headache.dm @@ -57,4 +57,4 @@ BONUS M.adjustStaminaLoss(25) if(power >= 3 && A.stage >= 5) to_chat(M, "[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]") - M.Stun(35) + M.Stun(35) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index 104a4c00c2..3f95fd6482 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -1,10 +1,10 @@ /datum/symptom/heal name = "Basic Healing (does nothing)" //warning for adminspawn viruses desc = "You should not be seeing this." - stealth = 1 - resistance = -4 - stage_speed = -4 - transmittable = -4 + stealth = 0 + resistance = 0 + stage_speed = 0 + transmittable = 0 level = 0 //not obtainable base_message_chance = 20 //here used for the overlays symptom_delay_min = 1 @@ -22,7 +22,6 @@ /datum/symptom/heal/Activate(datum/disease/advance/A) if(!..()) return - //100% chance to activate for slow but consistent healing var/mob/living/M = A.affected_mob switch(A.stage) if(4, 5) @@ -45,20 +44,20 @@ return TRUE -/datum/symptom/heal/toxin +/datum/symptom/heal/starlight name = "Starlight Condensation" - desc = "The virus reacts to direct starlight, producing regenerative chemicals that can cure toxin damage." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 + desc = "The virus reacts to direct starlight, producing regenerative chemicals. Works best against toxin-based damage." + stealth = -1 + resistance = -2 + stage_speed = 0 + transmittable = 1 level = 6 passive_message = "You miss the feeling of starlight on your skin." var/nearspace_penalty = 0.3 threshold_desc = "Stage Speed 6: Increases healing speed.
\ Transmission 6: Removes penalty for only being close to space." -/datum/symptom/heal/toxin/Start(datum/disease/advance/A) +/datum/symptom/heal/starlight/Start(datum/disease/advance/A) if(!..()) return if(A.properties["transmission"] >= 6) @@ -66,7 +65,7 @@ if(A.properties["stage_rate"] >= 6) power = 2 -/datum/symptom/heal/toxin/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/starlight/CanHeal(datum/disease/advance/A) var/mob/living/M = A.affected_mob if(istype(get_turf(M), /turf/open/space)) return power @@ -75,15 +74,25 @@ if(istype(T, /turf/open/space)) return power * nearspace_penalty -/datum/symptom/heal/toxin/Heal(mob/living/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/starlight/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = actual_power if(M.getToxLoss() && prob(5)) - to_chat(M, "Your skin tingles as the starlight purges toxins from your bloodstream.") - M.adjustToxLoss(-heal_amt) + to_chat(M, "Your skin tingles as the starlight seems to heal you.") + + M.adjustToxLoss(-(4 * heal_amt)) //most effective on toxins + + var/list/parts = M.get_damaged_bodyparts(1,1) + + if(!parts.len) + return + + for(var/obj/item/bodypart/L in parts) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len)) + M.update_damage_overlays() return 1 -/datum/symptom/heal/toxin/passive_message_condition(mob/living/M) - if(M.getToxLoss()) +/datum/symptom/heal/starlight/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss() || M.getToxLoss()) return TRUE return FALSE @@ -91,7 +100,7 @@ name = "Toxolysis" stealth = 0 resistance = -2 - stage_speed = -2 + stage_speed = 2 transmittable = -2 level = 7 var/food_conversion = FALSE @@ -153,58 +162,50 @@ to_chat(C, "You feel an odd gurgle in your stomach, as if it was working much faster than normal.") return 1 -/datum/symptom/heal/brute - name = "Cellular Molding" - desc = "The virus is able to shift cells around when in conditions of high heat, repairing existing physical damage." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 +/datum/symptom/heal/darkness + name = "Nocturnal Regeneration" + desc = "The virus is able to mend the host's flesh when in conditions of low light, repairing physical damage. More effective against brute damage." + stealth = 2 + resistance = -1 + stage_speed = -2 + transmittable = -1 level = 6 - passive_message = "You feel the flesh pulsing under your skin for a moment, but it's too cold to move." + passive_message = "You feel tingling on your skin as light passes over it." threshold_desc = "Stage Speed 8: Doubles healing speed." -/datum/symptom/heal/brute/Start(datum/disease/advance/A) +/datum/symptom/heal/darkness/Start(datum/disease/advance/A) if(!..()) return if(A.properties["stage_rate"] >= 8) power = 2 -/datum/symptom/heal/brute/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A) var/mob/living/M = A.affected_mob - switch(M.bodytemperature) - if(0 to 340) - return FALSE - if(340 to BODYTEMP_HEAT_DAMAGE_LIMIT) - . = 0.3 * power - if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400) - . = 0.75 * power - if(400 to 460) - . = power - else - . = 1.5 * power + var/light_amount = 0 + if(isturf(M.loc)) //else, there's considered to be no light + var/turf/T = M.loc + light_amount = min(1,T.get_lumcount()) - 0.5 + if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD) + return power - if(M.on_fire) - . *= 2 - -/datum/symptom/heal/brute/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/darkness/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 2 * actual_power - var/list/parts = M.get_damaged_bodyparts(1,0) //brute only + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len) return if(prob(5)) - to_chat(M, "You feel your flesh moving beneath your heated skin, mending your wounds.") + to_chat(M, "The darkness soothes and mends your wounds.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(heal_amt/parts.len, 0)) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len * 0.5)) //more effective on brute M.update_damage_overlays() return 1 -/datum/symptom/heal/brute/passive_message_condition(mob/living/M) - if(M.getBruteLoss()) +/datum/symptom/heal/darkness/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss()) return TRUE return FALSE @@ -212,8 +213,8 @@ name = "Regenerative Coma" desc = "The virus causes the host to fall into a death-like coma when severely damaged, then rapidly fixes the damage." stealth = 0 - resistance = 0 - stage_speed = -2 + resistance = 2 + stage_speed = -3 transmittable = -2 level = 8 passive_message = "The pain from your wounds makes you feel oddly sleepy..." @@ -283,20 +284,20 @@ return TRUE return FALSE -/datum/symptom/heal/burn +/datum/symptom/heal/water name = "Tissue Hydration" - desc = "The virus uses excess water inside and outside the body to repair burned tisue cells." - stealth = 1 - resistance = -3 - stage_speed = -3 - transmittable = -3 + desc = "The virus uses excess water inside and outside the body to repair damaged tissue cells. More effective against burns." + stealth = 0 + resistance = -1 + stage_speed = 0 + transmittable = 1 level = 6 - passive_message = "Your burned skin feels oddly dry..." + passive_message = "Your skin feels oddly dry..." var/absorption_coeff = 1 threshold_desc = "Resistance 5: Water is consumed at a much slower rate.
\ Stage Speed 7: Increases healing speed." -/datum/symptom/heal/burn/Start(datum/disease/advance/A) +/datum/symptom/heal/water/Start(datum/disease/advance/A) if(!..()) return if(A.properties["stage_rate"] >= 7) @@ -304,7 +305,7 @@ if(A.properties["stealth"] >= 2) absorption_coeff = 0.25 -/datum/symptom/heal/burn/CanHeal(datum/disease/advance/A) +/datum/symptom/heal/water/CanHeal(datum/disease/advance/A) . = 0 var/mob/living/M = A.affected_mob if(M.fire_stacks < 0) @@ -317,33 +318,33 @@ M.reagents.remove_reagent("water", 0.5 * absorption_coeff) . += power * 0.5 -/datum/symptom/heal/burn/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) +/datum/symptom/heal/water/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 2 * actual_power - var/list/parts = M.get_damaged_bodyparts(0,1) //burn only + var/list/parts = M.get_damaged_bodyparts(1,1) //more effective on burns if(!parts.len) return if(prob(5)) - to_chat(M, "You feel yourself absorbing the water around you to soothe your burned skin.") + to_chat(M, "You feel yourself absorbing the water around you to soothe your damaged skin.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(0, heal_amt/parts.len)) + if(L.heal_damage(heal_amt/parts.len * 0.5, heal_amt/parts.len)) M.update_damage_overlays() return 1 -/datum/symptom/heal/burn/passive_message_condition(mob/living/M) - if(M.getFireLoss()) +/datum/symptom/heal/water/passive_message_condition(mob/living/M) + if(M.getBruteLoss() || M.getFireLoss()) return TRUE return FALSE /datum/symptom/heal/plasma name = "Plasma Fixation" - desc = "The virus draws plasma from the atmosphere and from inside the body to stabilize body temperature and heal burns." + desc = "The virus draws plasma from the atmosphere and from inside the body to heal and stabilize body temperature." stealth = 0 - resistance = 0 + resistance = 3 stage_speed = -2 transmittable = -2 level = 8 @@ -379,38 +380,37 @@ /datum/symptom/heal/plasma/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power) var/heal_amt = 4 * actual_power - var/list/parts = M.get_damaged_bodyparts(0,1) //burn only - if(prob(5)) to_chat(M, "You feel yourself absorbing plasma inside and around you...") - if(M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT)) if(prob(5)) to_chat(M, "You feel less hot.") - else if(M.bodytemperature < 311) - M.bodytemperature = min(310, M.bodytemperature + (20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT)) + else if(M.bodytemperature < (BODYTEMP_NORMAL + 1)) + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (20 * temp_rate * TEMPERATURE_DAMAGE_COEFFICIENT)) if(prob(5)) to_chat(M, "You feel warmer.") + M.adjustToxLoss(-heal_amt) + + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len) return if(prob(5)) - to_chat(M, "The pain from your burns fades rapidly.") - + to_chat(M, "The pain from your wounds fades rapidly.") for(var/obj/item/bodypart/L in parts) - if(L.heal_damage(0, heal_amt/parts.len)) + if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len)) M.update_damage_overlays() return 1 - /datum/symptom/heal/radiation name = "Radioactive Resonance" desc = "The virus uses radiation to fix damage through dna mutations." stealth = -1 resistance = -2 - stage_speed = 0 + stage_speed = 2 transmittable = -3 level = 6 symptom_delay_min = 1 @@ -450,6 +450,8 @@ if(cellular_damage) M.adjustCloneLoss(-heal_amt * 0.5) + M.adjustToxLoss(-(2 * heal_amt)) + var/list/parts = M.get_damaged_bodyparts(1,1) if(!parts.len) diff --git a/code/datums/diseases/advance/symptoms/itching.dm b/code/datums/diseases/advance/symptoms/itching.dm index 1c356247ee..1da9f5e8d7 100644 --- a/code/datums/diseases/advance/symptoms/itching.dm +++ b/code/datums/diseases/advance/symptoms/itching.dm @@ -51,4 +51,4 @@ BONUS var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart) M.visible_message("[can_scratch ? "[M] scratches [M.p_their()] [bodypart.name]." : ""]", "Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]") if(can_scratch) - bodypart.receive_damage(0.5) + bodypart.receive_damage(0.5) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/sensory.dm b/code/datums/diseases/advance/symptoms/sensory.dm index 746844f7cb..911ffd7e26 100644 --- a/code/datums/diseases/advance/symptoms/sensory.dm +++ b/code/datums/diseases/advance/symptoms/sensory.dm @@ -1,44 +1,27 @@ -/* -////////////////////////////////////// -Sensory-Restoration - Very very very very noticable. - Lowers resistance tremendously. - Decreases stage speed tremendously. - Decreases transmittablity tremendously. - Fatal. -Bonus - The body generates Sensory restorational chemicals. - inacusiate for ears - antihol for removal of alcohol - synaphydramine to purge sensory hallucigens and histamine based impairment - mannitol to kickstart the mind - -////////////////////////////////////// -*/ /datum/symptom/mind_restoration name = "Mind Restoration" desc = "The virus strengthens the bonds between neurons, reducing the duration of any ailments of the mind." stealth = -1 - resistance = -4 - stage_speed = -4 + resistance = -2 + stage_speed = 1 transmittable = -3 level = 5 symptom_delay_min = 5 symptom_delay_max = 10 var/purge_alcohol = FALSE - var/brain_heal = FALSE - var/trauma_heal = FALSE - threshold_desc = "Resistance 6: Heals brain damage.
\ - Resistance 9: Heals brain traumas.
\ + var/trauma_heal_mild = FALSE + var/trauma_heal_severe = FALSE + threshold_desc = "Resistance 6: Heals minor brain traumas.
\ + Resistance 9: Heals severe brain traumas.
\ Transmission 8: Purges alcohol in the bloodstream." /datum/symptom/mind_restoration/Start(datum/disease/advance/A) if(!..()) return if(A.properties["resistance"] >= 6) //heal brain damage - brain_heal = TRUE - if(A.properties["resistance"] >= 9) //heal brain traumas - trauma_heal = TRUE + trauma_heal_mild = TRUE + if(A.properties["resistance"] >= 9) //heal severe traumas + trauma_heal_severe = TRUE if(A.properties["transmittable"] >= 8) //purge alcohol purge_alcohol = TRUE @@ -46,8 +29,7 @@ Bonus if(!..()) return var/mob/living/M = A.affected_mob - if(A.stage >= 2) - M.restoreEars() + if(A.stage >= 3) M.dizziness = max(0, M.dizziness - 2) @@ -68,11 +50,59 @@ Bonus M.reagents.remove_reagent("histamine", 5) M.hallucination = max(0, M.hallucination - 10) - if(brain_heal && A.stage >= 5) + if(A.stage >= 5) M.adjustBrainLoss(-3) - if(trauma_heal && iscarbon(M)) + if(trauma_heal_mild && iscarbon(M)) var/mob/living/carbon/C = M if(prob(30) && C.has_trauma_type(BRAIN_TRAUMA_SPECIAL)) C.cure_trauma_type(BRAIN_TRAUMA_SPECIAL) if(prob(10) && C.has_trauma_type(BRAIN_TRAUMA_MILD)) C.cure_trauma_type(BRAIN_TRAUMA_MILD) + if(trauma_heal_severe && prob(10) && C.has_trauma_type(BRAIN_TRAUMA_SEVERE)) + C.cure_trauma_type(BRAIN_TRAUMA_SEVERE) + + + +/datum/symptom/sensory_restoration + name = "Sensory Restoration" + desc = "The virus stimulates the production and replacement of sensory tissues, causing the host to regenerate eyes and ears when damaged." + stealth = 0 + resistance = 1 + stage_speed = -2 + transmittable = 2 + level = 4 + base_message_chance = 7 + symptom_delay_min = 1 + symptom_delay_max = 1 + +/datum/symptom/sensory_restoration/Activate(datum/disease/advance/A) + if(!..()) + return + var/mob/living/M = A.affected_mob + var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) + if (!eyes) + return + switch(A.stage) + if(4, 5) + M.restoreEars() + + if(M.has_disability(DISABILITY_BLIND, EYE_DAMAGE)) + if(prob(20)) + to_chat(M, "Your vision slowly returns...") + M.cure_blind(EYE_DAMAGE) + M.cure_nearsighted(EYE_DAMAGE) + M.blur_eyes(35) + + else if(M.has_disability(DISABILITY_NEARSIGHT, EYE_DAMAGE)) + to_chat(M, "You can finally focus your eyes on distant objects.") + M.cure_nearsighted(EYE_DAMAGE) + M.blur_eyes(10) + + else if(M.eye_blind || M.eye_blurry) + M.set_blindness(0) + M.set_blurriness(0) + else if(eyes.eye_damage > 0) + M.adjust_eye_damage(-1) + else + if(prob(base_message_chance)) + to_chat(M, "[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]") \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index a578289e17..c5bbb6bc7b 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -1,39 +1,39 @@ -/* -////////////////////////////////////// -Alopecia - +/* +////////////////////////////////////// +Alopecia + Not Noticeable. Increases resistance slightly. - Reduces stage speed slightly. - Transmittable. - Intense Level. - -BONUS - Makes the mob lose hair. - -////////////////////////////////////// -*/ - -/datum/symptom/shedding - name = "Alopecia" + Reduces stage speed slightly. + Transmittable. + Intense Level. + +BONUS + Makes the mob lose hair. + +////////////////////////////////////// +*/ + +/datum/symptom/shedding + name = "Alopecia" desc = "The virus causes rapid shedding of head and body hair." stealth = 0 resistance = 1 - stage_speed = -1 + stage_speed = -1 transmittable = 3 - level = 4 - severity = 1 + level = 4 + severity = 1 base_message_chance = 50 symptom_delay_min = 45 symptom_delay_max = 90 - -/datum/symptom/shedding/Activate(datum/disease/advance/A) + +/datum/symptom/shedding/Activate(datum/disease/advance/A) if(!..()) return var/mob/living/M = A.affected_mob if(prob(base_message_chance)) - to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") + to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") if(ishuman(M)) var/mob/living/carbon/human/H = M switch(A.stage) @@ -45,11 +45,11 @@ BONUS if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald")) to_chat(H, "Your hair starts to fall out in clumps...") addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50) - -/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald) - if(fullbald) - H.facial_hair_style = "Shaved" - H.hair_style = "Bald" - else - H.hair_style = "Balding Hair" + +/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald) + if(fullbald) + H.facial_hair_style = "Shaved" + H.hair_style = "Bald" + else + H.hair_style = "Balding Hair" H.update_hair() \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/shivering.dm b/code/datums/diseases/advance/symptoms/shivering.dm index bad9062eb5..591626e530 100644 --- a/code/datums/diseases/advance/symptoms/shivering.dm +++ b/code/datums/diseases/advance/symptoms/shivering.dm @@ -56,4 +56,4 @@ Bonus M.bodytemperature = min(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1) else M.bodytemperature -= (get_cold * A.stage) - return 1 + return 1 \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/sneeze.dm b/code/datums/diseases/advance/symptoms/sneeze.dm index 8b5b59f71a..3648f5d707 100644 --- a/code/datums/diseases/advance/symptoms/sneeze.dm +++ b/code/datums/diseases/advance/symptoms/sneeze.dm @@ -46,7 +46,6 @@ Bonus if(1, 2, 3) if(!suppress_warning) M.emote("sniff") - else - M.emote("sneeze") - A.spread(5) - return + else + M.emote("sneeze") + A.spread(4 + power) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/vision.dm b/code/datums/diseases/advance/symptoms/vision.dm index 728dfa01d0..279ce51417 100644 --- a/code/datums/diseases/advance/symptoms/vision.dm +++ b/code/datums/diseases/advance/symptoms/vision.dm @@ -58,77 +58,15 @@ Bonus M.blur_eyes(20) M.adjust_eye_damage(5) if(eyes.eye_damage >= 10) - M.become_nearsighted() + M.become_nearsighted(EYE_DAMAGE) if(prob(eyes.eye_damage - 10 + 1)) if(!remove_eyes) - if(M.become_blind()) + if(!M.has_disability(DISABILITY_BLIND)) to_chat(M, "You go blind!") + M.become_blind(EYE_DAMAGE) else M.visible_message("[M]'s eyes fall off their sockets!", "Your eyes fall off their sockets!") eyes.Remove(M) eyes.forceMove(get_turf(M)) else - to_chat(M, "Your eyes burn horrifically!") - - - -/* -////////////////////////////////////// - -Ocular Restoration - - Noticable. - Lowers resistance significantly. - Decreases stage speed moderately.. - Decreases transmittablity tremendously. - High level. - -Bonus - Restores eyesight. - -////////////////////////////////////// -*/ - -/datum/symptom/visionaid - - name = "Ocular Restoration" - desc = "The virus stimulates the production and replacement of eye cells, causing the host to regenerate its eyes when damaged." - stealth = -1 - resistance = -3 - stage_speed = -2 - transmittable = -4 - level = 4 - base_message_chance = 7 - symptom_delay_min = 1 - symptom_delay_max = 1 - -/datum/symptom/visionaid/Activate(datum/disease/advance/A) - if(!..()) - return - var/mob/living/M = A.affected_mob - var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) - if (!eyes) - return - switch(A.stage) - if(4, 5) //basically oculine - if(M.disabilities & BLIND) - if(prob(20)) - to_chat(M, "Your vision slowly returns...") - M.cure_blind() - M.cure_nearsighted() - M.blur_eyes(35) - - else if(M.disabilities & NEARSIGHT) - to_chat(M, "The blackness in your peripheral vision fades.") - M.cure_nearsighted() - M.blur_eyes(10) - - else if(M.eye_blind || M.eye_blurry) - M.set_blindness(0) - M.set_blurriness(0) - else if(eyes.eye_damage > 0) - M.adjust_eye_damage(-1) - else - if(prob(base_message_chance)) - to_chat(M, "[pick("Your eyes feel great.", "You are now blinking manually.", "You don't feel the need to blink.")]") - return + to_chat(M, "Your eyes burn horrifically!") \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/weight.dm b/code/datums/diseases/advance/symptoms/weight.dm index 7052e90bf7..c97667733d 100644 --- a/code/datums/diseases/advance/symptoms/weight.dm +++ b/code/datums/diseases/advance/symptoms/weight.dm @@ -48,4 +48,4 @@ Bonus else to_chat(M, "[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]") M.overeatduration = max(M.overeatduration - 100, 0) - M.nutrition = max(M.nutrition - 100, 0) + M.nutrition = max(M.nutrition - 100, 0) \ No newline at end of file diff --git a/code/datums/diseases/advance/symptoms/youth.dm b/code/datums/diseases/advance/symptoms/youth.dm index 6be34684e7..927be03ed9 100644 --- a/code/datums/diseases/advance/symptoms/youth.dm +++ b/code/datums/diseases/advance/symptoms/youth.dm @@ -1,35 +1,35 @@ -/* -////////////////////////////////////// -Eternal Youth - - Moderate stealth boost. - Increases resistance tremendously. - Increases stage speed tremendously. - Reduces transmission tremendously. - Critical Level. - -BONUS - Gives you immortality and eternal youth!!! - Can be used to buff your virus - -////////////////////////////////////// -*/ - -/datum/symptom/youth - - name = "Eternal Youth" +/* +////////////////////////////////////// +Eternal Youth + + Moderate stealth boost. + Increases resistance tremendously. + Increases stage speed tremendously. + Reduces transmission tremendously. + Critical Level. + +BONUS + Gives you immortality and eternal youth!!! + Can be used to buff your virus + +////////////////////////////////////// +*/ + +/datum/symptom/youth + + name = "Eternal Youth" desc = "The virus becomes symbiotically connected to the cells in the host's body, preventing and reversing aging. \ The virus, in turn, becomes more resistant, spreads faster, and is harder to spot, although it doesn't thrive as well without a host." - stealth = 3 - resistance = 4 - stage_speed = 4 - transmittable = -4 - level = 5 + stealth = 3 + resistance = 4 + stage_speed = 4 + transmittable = -4 + level = 5 base_message_chance = 100 symptom_delay_min = 25 symptom_delay_max = 50 - -/datum/symptom/youth/Activate(datum/disease/advance/A) + +/datum/symptom/youth/Activate(datum/disease/advance/A) if(!..()) return var/mob/living/M = A.affected_mob diff --git a/code/datums/diseases/beesease.dm b/code/datums/diseases/beesease.dm index 80ec0abe6b..dc848ab622 100644 --- a/code/datums/diseases/beesease.dm +++ b/code/datums/diseases/beesease.dm @@ -36,4 +36,4 @@ affected_mob.visible_message("[affected_mob] coughs up a swarm of bees!", \ "You cough up a swarm of bees!") new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc) - return + return \ No newline at end of file diff --git a/code/datums/diseases/cold.dm b/code/datums/diseases/cold.dm index 5915a784ea..e9f02b91b6 100644 --- a/code/datums/diseases/cold.dm +++ b/code/datums/diseases/cold.dm @@ -50,4 +50,4 @@ if(!affected_mob.resistances.Find(/datum/disease/flu)) var/datum/disease/Flu = new /datum/disease/flu(0) affected_mob.ForceContractDisease(Flu) - cure() + cure() \ No newline at end of file diff --git a/code/datums/diseases/cold9.dm b/code/datums/diseases/cold9.dm index 4b65fee700..6a21dbfd54 100644 --- a/code/datums/diseases/cold9.dm +++ b/code/datums/diseases/cold9.dm @@ -36,4 +36,4 @@ if(prob(1)) to_chat(affected_mob, "Your throat feels sore.") if(prob(10)) - to_chat(affected_mob, "You feel stiff.") + to_chat(affected_mob, "You feel stiff.") \ No newline at end of file diff --git a/code/datums/diseases/gbs.dm b/code/datums/diseases/gbs.dm index 71e4064676..6d77acd3ae 100644 --- a/code/datums/diseases/gbs.dm +++ b/code/datums/diseases/gbs.dm @@ -1,6 +1,6 @@ /datum/disease/gbs name = "GBS" - max_stages = 5 + max_stages = 4 spread_text = "On contact" spread_flags = VIRUS_SPREAD_BLOOD | VIRUS_SPREAD_CONTACT_SKIN | VIRUS_SPREAD_CONTACT_FLUIDS cure_text = "Synaptizine & Sulfur" @@ -16,25 +16,15 @@ ..() switch(stage) if(2) - if(prob(45)) - affected_mob.adjustToxLoss(5) - affected_mob.updatehealth() - if(prob(1)) - affected_mob.emote("sneeze") - if(3) if(prob(5)) affected_mob.emote("cough") - else if(prob(5)) + if(3) + if(prob(5)) affected_mob.emote("gasp") if(prob(10)) - to_chat(affected_mob, "You're starting to feel very weak...") + to_chat(affected_mob, "Your body hurts all over!") if(4) - if(prob(10)) - affected_mob.emote("cough") - affected_mob.adjustToxLoss(5) - affected_mob.updatehealth() - if(5) - to_chat(affected_mob, "Your body feels as if it's trying to rip itself open...") + to_chat(affected_mob, "Your body feels as if it's trying to rip itself apart!") if(prob(50)) affected_mob.gib() else diff --git a/code/datums/diseases/magnitis.dm b/code/datums/diseases/magnitis.dm index 4430eee19d..91ce1ca71e 100644 --- a/code/datums/diseases/magnitis.dm +++ b/code/datums/diseases/magnitis.dm @@ -65,4 +65,4 @@ var/iter = rand(1,3) for(i=0,iYou feel like monkeying around.") /datum/disease/transformation/jungle_fever/do_disease_transformation(mob/living/carbon/affected_mob) - if(!ismonkey(affected_mob)) - SSticker.mode.add_monkey(affected_mob.mind) - affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) + if(affected_mob.mind && !is_monkey(affected_mob)) + add_monkey(affected_mob.mind) + if(ishuman(affected_mob)) + var/mob/living/carbon/monkey/M = affected_mob.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) + M.ventcrawler = VENTCRAWLER_ALWAYS + /datum/disease/transformation/jungle_fever/stage_act() ..() @@ -107,9 +110,18 @@ affected_mob.say(pick("Eeek, ook ook!", "Eee-eeek!", "Eeee!", "Ungh, ungh.")) /datum/disease/transformation/jungle_fever/cure() - SSticker.mode.remove_monkey(affected_mob.mind) + remove_monkey(affected_mob.mind) ..() +/datum/disease/transformation/jungle_fever/monkeymode + visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC + disease_flags = CAN_CARRY //no vaccines! no cure! + +/datum/disease/transformation/jungle_fever/monkeymode/after_add() + if(affected_mob && !is_monkey_leader(affected_mob.mind)) + visibility_flags = NONE + + /datum/disease/transformation/robot diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 2e5bd580bf..b452eff382 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -16,8 +16,9 @@ var/emote_type = EMOTE_VISIBLE //Whether the emote is visible or audible var/restraint_check = FALSE //Checks if the mob is restrained before performing the emote var/muzzle_ignore = FALSE //Will only work if the emote is EMOTE_AUDIBLE - var/list/mob_type_allowed_typecache //Types that are allowed to use that emote + var/list/mob_type_allowed_typecache = list(/mob) //Types that are allowed to use that emote var/list/mob_type_blacklist_typecache //Types that are NOT allowed to use that emote + var/list/mob_type_ignore_stat_typecache var/stat_allowed = CONSCIOUS var/static/list/emote_list = list() @@ -26,6 +27,7 @@ emote_list[key_third_person] = src mob_type_allowed_typecache = typecacheof(mob_type_allowed_typecache) mob_type_blacklist_typecache = typecacheof(mob_type_blacklist_typecache) + mob_type_ignore_stat_typecache = typecacheof(mob_type_ignore_stat_typecache) /datum/emote/proc/run_emote(mob/user, params, type_override) . = TRUE @@ -37,9 +39,10 @@ msg = replace_pronoun(user, msg) - var/mob/living/L = user - for(var/obj/item/implant/I in L.implants) - I.trigger(key, L) + if(isliving(user)) + var/mob/living/L = user + for(var/obj/item/implant/I in L.implants) + I.trigger(key, L) if(!msg) return @@ -97,7 +100,7 @@ return FALSE if(is_type_in_typecache(user, mob_type_blacklist_typecache)) return FALSE - if(status_check) + if(status_check && !is_type_in_typecache(user, mob_type_ignore_stat_typecache)) if(user.stat > stat_allowed || (user.status_flags & FAKEDEATH)) to_chat(user, "You cannot [key] while unconscious.") return FALSE diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 73b76a9155..9b5cd18774 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -55,6 +55,8 @@ GLOBAL_LIST_EMPTY(explosions) var/orig_heavy_range = heavy_impact_range var/orig_light_range = light_impact_range + var/orig_max_distance = max(devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range) + //Zlevel specific bomb cap multiplier var/cap_multiplier = 1 switch(epicenter.z) @@ -116,14 +118,21 @@ GLOBAL_LIST_EMPTY(explosions) var/turf/M_turf = get_turf(M) if(M_turf && M_turf.z == z0) var/dist = get_dist(M_turf, epicenter) + var/baseshakeamount + if(orig_max_distance - dist > 0) + baseshakeamount = sqrt((orig_max_distance - dist)*0.1) // If inside the blast radius + world.view - 2 if(dist <= round(max_range + world.view - 2, 1)) M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound) + if(baseshakeamount > 0) + shake_camera(M, 25, CLAMP(baseshakeamount, 0, 10)) // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. else if(dist <= far_dist) var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound) + if(baseshakeamount > 0) + shake_camera(M, 10, CLAMP(baseshakeamount*0.25, 0, 2.5)) EX_PREPROCESS_CHECK_TICK //postpone processing for a bit @@ -189,6 +198,15 @@ GLOBAL_LIST_EMPTY(explosions) //------- EX_ACT AND TURF FIRES ------- + if(T == epicenter) // Ensures explosives detonating from bags trigger other explosives in that bag + var/list/items = list() + for(var/I in T) + var/atom/A = I + items += A.GetAllContents() + for(var/O in items) + var/atom/A = O + A.ex_act(dist) + if(flame_dist && prob(40) && !isspaceturf(T) && !T.density) new /obj/effect/hotspot(T) //Mostly for ambience! diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index ec39bcec67..b24622df6e 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -28,7 +28,6 @@ else log_world(originmastercommit) - /datum/getrev/proc/GetTestMergeInfo(header = TRUE) if(!testmerge.len) return "" @@ -45,6 +44,8 @@ set name = "Show Server Revision" set desc = "Check the current server code revision" + if(GLOB.round_id) + to_chat(src, "Round ID: [GLOB.round_id]") if(GLOB.revdata.originmastercommit) to_chat(src, "Server revision compiled on: [GLOB.revdata.date]") var/prefix = "" diff --git a/code/datums/helper_datums/topic_input.dm b/code/datums/helper_datums/topic_input.dm index d27f259159..3e43905f1f 100644 --- a/code/datums/helper_datums/topic_input.dm +++ b/code/datums/helper_datums/topic_input.dm @@ -1,62 +1,62 @@ -/datum/topic_input - var/href - var/list/href_list - -/datum/topic_input/New(thref,list/thref_list) - href = thref - href_list = thref_list.Copy() - return - -/datum/topic_input/proc/get(i) - return listgetindex(href_list,i) - -/datum/topic_input/proc/getAndLocate(i) - var/t = get(i) - if(t) - t = locate(t) - if (istext(t)) - t = null - return t || null - -/datum/topic_input/proc/getNum(i) - var/t = get(i) - if(t) - t = text2num(t) - return isnum(t) ? t : null - -/datum/topic_input/proc/getObj(i) - var/t = getAndLocate(i) - return isobj(t) ? t : null - -/datum/topic_input/proc/getMob(i) - var/t = getAndLocate(i) - return ismob(t) ? t : null - -/datum/topic_input/proc/getTurf(i) - var/t = getAndLocate(i) - return isturf(t) ? t : null - -/datum/topic_input/proc/getAtom(i) +/datum/topic_input + var/href + var/list/href_list + +/datum/topic_input/New(thref,list/thref_list) + href = thref + href_list = thref_list.Copy() + return + +/datum/topic_input/proc/get(i) + return listgetindex(href_list,i) + +/datum/topic_input/proc/getAndLocate(i) + var/t = get(i) + if(t) + t = locate(t) + if (istext(t)) + t = null + return t || null + +/datum/topic_input/proc/getNum(i) + var/t = get(i) + if(t) + t = text2num(t) + return isnum(t) ? t : null + +/datum/topic_input/proc/getObj(i) + var/t = getAndLocate(i) + return isobj(t) ? t : null + +/datum/topic_input/proc/getMob(i) + var/t = getAndLocate(i) + return ismob(t) ? t : null + +/datum/topic_input/proc/getTurf(i) + var/t = getAndLocate(i) + return isturf(t) ? t : null + +/datum/topic_input/proc/getAtom(i) return getType(i, /atom) - -/datum/topic_input/proc/getArea(i) - var/t = getAndLocate(i) - return isarea(t) ? t : null - -/datum/topic_input/proc/getStr(i)//params should always be text, but... - var/t = get(i) - return istext(t) ? t : null - -/datum/topic_input/proc/getType(i,type) - var/t = getAndLocate(i) - return istype(t,type) ? t : null - -/datum/topic_input/proc/getPath(i) - var/t = get(i) - if(t) - t = text2path(t) - return ispath(t) ? t : null - -/datum/topic_input/proc/getList(i) - var/t = getAndLocate(i) - return islist(t) ? t : null + +/datum/topic_input/proc/getArea(i) + var/t = getAndLocate(i) + return isarea(t) ? t : null + +/datum/topic_input/proc/getStr(i)//params should always be text, but... + var/t = get(i) + return istext(t) ? t : null + +/datum/topic_input/proc/getType(i,type) + var/t = getAndLocate(i) + return istype(t,type) ? t : null + +/datum/topic_input/proc/getPath(i) + var/t = get(i) + if(t) + t = text2path(t) + return ispath(t) ? t : null + +/datum/topic_input/proc/getList(i) + var/t = getAndLocate(i) + return islist(t) ? t : null diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index f3a1f53dd2..aeaf477ef1 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -197,7 +197,7 @@ /obj/item/twohanded/bostaff/attack(mob/target, mob/living/user) add_fingerprint(user) - if((CLUMSY in user.disabilities) && prob(50)) + if((user.has_disability(DISABILITY_CLUMSY)) && prob(50)) to_chat(user, "You club yourself over the head with [src].") user.Knockdown(60) if(ishuman(user)) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 231ce66f28..b3545813ac 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -110,6 +110,7 @@ var/mob/living/old_current = current current = new_character //associate ourself with our new body new_character.mind = src //and associate our new body with ourself + old_current.transfer_observers_to(current) //transfer anyone observing the old character to the new one for(var/a in antag_datums) //Makes sure all antag datums effects are applied in the new body var/datum/antagonist/A = a A.on_body_transfer(old_current, current) @@ -121,6 +122,8 @@ transfer_martial_arts(new_character) if(active || force_key_move) new_character.key = key //now transfer the key to link the client to our new body + +//CIT CHANGE - makes arousal update when transfering bodies if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs. var/mob/living/L = new_character if(L.client && L.client.prefs) @@ -201,7 +204,6 @@ remove_antag_datum(ANTAG_DATUM_BROTHER) SSticker.mode.update_brother_icons_removed(src) - /datum/mind/proc/remove_nukeop() var/datum/antagonist/nukeop/nuke = has_antag_datum(/datum/antagonist/nukeop,TRUE) if(nuke) @@ -224,6 +226,7 @@ remove_antag_datum(rev.type) special_role = null + /datum/mind/proc/remove_antag_equip() var/list/Mob_Contents = current.get_contents() for(var/obj/item/I in Mob_Contents) @@ -461,20 +464,27 @@ text = uppertext(text) text = "[text]: " if (ishuman(current)) - text += "healthy | infected | HUMAN | other" + if(is_monkey_leader(src)) + text += "healthy | infected LEADER | human | other" + else + text += "healthy | infected | leader | HUMAN | other" else if(ismonkey(current)) var/found = FALSE for(var/datum/disease/transformation/jungle_fever/JF in current.viruses) found = TRUE break - if(found) - text += "healthy | INFECTED | human | other" + var/isLeader = is_monkey_leader(src) + + if(isLeader) + text += "healthy | infected LEADER | human | other" + else if(found) + text += "healthy | INFECTED | leader | human | other" else - text += "HEALTHY | infected | human | other" + text += "HEALTHY | infected | leader | human | other" else - text += "healthy | infected | human | OTHER" + text += "healthy | infected | leader | human | OTHER" if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special)) text += " | Enabled in Prefs" @@ -545,7 +555,7 @@ if(I == src) continue var/mob/M = I.current - if(M && (M.z in GLOB.station_z_levels) && !M.stat) + if(M && is_station_level(M.z) && !M.stat) last_healthy_headrev = FALSE break text += "head | not mindshielded | employee | [last_healthy_headrev ? "LAST " : ""]HEADREV | rev" @@ -578,8 +588,8 @@ sections["revolution"] = text - /** Abductors **/ - text = "Abductor" + /** ABDUCTION **/ + text = "abductor" if(SSticker.mode.config_tag == "abductor") text = uppertext(text) text = "[text]: " @@ -806,7 +816,7 @@ else target_antag = target - var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "late-assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom") + var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom") if (!new_obj_type) return @@ -841,12 +851,6 @@ //Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops. new_objective.update_explanation_text() - if ("late-assassinate") - new_objective = new /datum/objective/assassinate/late - new_objective.owner = src - new_objective.target = null - new_objective.find_target() //This will begin the "find-target" loop and update their explanation text - if ("destroy") var/list/possible_targets = active_ais(1) if(possible_targets.len) @@ -904,7 +908,7 @@ switch(new_obj_type) if("download") new_objective = new /datum/objective/download - new_objective.explanation_text = "Download [target_number] research levels." + new_objective.explanation_text = "Download [target_number] research node\s." if("capture") new_objective = new /datum/objective/capture new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more." @@ -1255,11 +1259,17 @@ else if (istype(M) && length(M.viruses)) for(var/thing in M.viruses) var/datum/disease/D = thing - D.cure(0) + D.cure(FALSE) + if("leader") + if(check_rights(R_ADMIN, 0)) + add_monkey_leader(src) + log_admin("[key_name(usr)] made [key_name(current)] a monkey leader!") + message_admins("[key_name_admin(usr)] made [key_name_admin(current)] a monkey leader!") if("infected") - if (check_rights(R_ADMIN, 0)) + if(check_rights(R_ADMIN, 0)) var/mob/living/carbon/human/H = current var/mob/living/carbon/monkey/M = current + add_monkey(src) if (istype(H)) log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]") message_admins("[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]") @@ -1277,6 +1287,7 @@ for(var/datum/disease/transformation/jungle_fever/JF in M.viruses) JF.cure(0) stoplag() //because deleting of virus is doing throught spawn(0) //What + remove_monkey(src) log_admin("[key_name(usr)] attempting to humanize [key_name(current)]") message_admins("[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]") H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG) diff --git a/code/datums/mutations.dm b/code/datums/mutations.dm index 170c0a2a7f..a171cf91da 100644 --- a/code/datums/mutations.dm +++ b/code/datums/mutations.dm @@ -8,7 +8,6 @@ GLOBAL_LIST_EMPTY(mutations_list) GLOB.mutations_list[name] = src /datum/mutation/human - var/dna_block var/quality var/get_chance = 100 diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index 23b91add58..ee75402e03 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -85,12 +85,12 @@ /datum/mutation/human/clumsy/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.disabilities |= CLUMSY + owner.add_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) /datum/mutation/human/clumsy/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.disabilities &= ~CLUMSY + owner.remove_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) //Tourettes causes you to randomly stand in place and shout. @@ -124,12 +124,12 @@ /datum/mutation/human/deaf/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.disabilities |= DEAF + owner.add_disability(DISABILITY_DEAF, GENETIC_MUTATION) /datum/mutation/human/deaf/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.disabilities &= ~DEAF + owner.remove_disability(DISABILITY_DEAF, GENETIC_MUTATION) //Monified turns you into a monkey. diff --git a/code/datums/mutations/hulk.dm b/code/datums/mutations/hulk.dm index 666c910557..9340361930 100644 --- a/code/datums/mutations/hulk.dm +++ b/code/datums/mutations/hulk.dm @@ -5,7 +5,7 @@ get_chance = 15 lowest_value = 256 * 12 text_gain_indication = "Your muscles hurt!" - species_allowed = list("fly") //no skeleton/lizard hulk + species_allowed = list("human") //no skeleton/lizard hulk health_req = 25 /datum/mutation/human/hulk/on_acquiring(mob/living/carbon/human/owner) diff --git a/code/datums/mutations/sight.dm b/code/datums/mutations/sight.dm index dee26166dd..60f5d75c5e 100644 --- a/code/datums/mutations/sight.dm +++ b/code/datums/mutations/sight.dm @@ -7,12 +7,12 @@ /datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.become_nearsighted() + owner.become_nearsighted(GENETIC_MUTATION) /datum/mutation/human/nearsight/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.cure_nearsighted() + owner.cure_nearsighted(GENETIC_MUTATION) //Blind makes you blind. Who knew? @@ -24,12 +24,12 @@ /datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.become_blind() + owner.become_blind(GENETIC_MUTATION) /datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.cure_blind() + owner.cure_blind(GENETIC_MUTATION) //X-Ray Vision lets you see through walls. diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index 3b4b38bbcc..989a9221b0 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -30,12 +30,12 @@ /datum/mutation/human/mute/on_acquiring(mob/living/carbon/human/owner) if(..()) return - owner.disabilities |= MUTE + owner.add_disability(DISABILITY_MUTE, GENETIC_MUTATION) /datum/mutation/human/mute/on_losing(mob/living/carbon/human/owner) if(..()) return - owner.disabilities &= ~MUTE + owner.remove_disability(DISABILITY_MUTE, GENETIC_MUTATION) /datum/mutation/human/smile diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm new file mode 100644 index 0000000000..2a98d57efd --- /dev/null +++ b/code/datums/position_point_vector.dm @@ -0,0 +1,239 @@ +//Designed for things that need precision trajectories like projectiles. +//Don't use this for anything that you don't absolutely have to use this with (like projectiles!) because it isn't worth using a datum unless you need accuracy down to decimal places in pixels. + +#define RETURN_PRECISE_POSITION(A) new /datum/position(A) +#define RETURN_PRECISE_POINT(A) new /datum/point(A) + +/datum/position //For positions with map x/y/z and pixel x/y so you don't have to return lists. Could use addition/subtraction in the future I guess. + var/x = 0 + var/y = 0 + var/z = 0 + var/pixel_x = 0 + var/pixel_y = 0 + +/datum/position/proc/valid() + return x && y && z && !isnull(pixel_x) && !isnull(pixel_y) + +/datum/position/New(_x = 0, _y = 0, _z = 0, _pixel_x = 0, _pixel_y = 0) //first argument can also be a /datum/point. + if(istype(_x, /datum/point)) + var/datum/point/P = _x + var/turf/T = P.return_turf() + _x = T.x + _y = T.y + _z = T.z + _pixel_x = P.return_px() + _pixel_y = P.return_py() + else if(isatom(_x)) + var/atom/A = _x + _x = A.x + _y = A.y + _z = A.z + _pixel_x = A.pixel_x + _pixel_y = A.pixel_y + x = _x + y = _y + z = _z + pixel_x = _pixel_x + pixel_y = _pixel_y + +/datum/position/proc/return_turf() + return locate(x, y, z) + +/datum/position/proc/return_px() + return pixel_x + +/datum/position/proc/return_py() + return pixel_y + +/datum/position/proc/return_point() + return new /datum/point(src) + +/proc/point_midpoint_points(datum/point/a, datum/point/b) //Obviously will not support multiZ calculations! Same for the two below. + var/datum/point/P = new + P.x = round(a.x + (b.x - a.x) / 2, 1) + P.y = round(a.y + (b.y - a.y) / 2, 1) + P.z = a.z + return P + +/proc/pixel_length_between_points(datum/point/a, datum/point/b) + return sqrt(((b.x - a.x) ** 2) + ((b.y - a.y) ** 2)) + +/proc/angle_between_points(datum/point/a, datum/point/b) + return ATAN2((b.y - a.y), (b.x - a.x)) + +/datum/point //A precise point on the map in absolute pixel locations based on world.icon_size. Pixels are FROM THE EDGE OF THE MAP! + var/x = 0 + var/y = 0 + var/z = 0 + +/datum/point/proc/valid() + return x && y && z + +/datum/point/proc/copy_to(datum/point/p = new) + p.x = x + p.y = y + p.z = z + return p + +/datum/point/New(_x, _y, _z, _pixel_x = 0, _pixel_y = 0) //first argument can also be a /datum/position or /atom. + if(istype(_x, /datum/position)) + var/datum/position/P = _x + _x = P.x + _y = P.y + _z = P.z + _pixel_x = P.pixel_x + _pixel_y = P.pixel_y + else if(istype(_x, /atom)) + var/atom/A = _x + _x = A.x + _y = A.y + _z = A.z + _pixel_x = A.pixel_x + _pixel_y = A.pixel_y + initialize_location(_x, _y, _z, _pixel_x, _pixel_y) + +/datum/point/proc/initialize_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) + if(!isnull(tile_x)) + x = ((tile_x - 1) * world.icon_size) + world.icon_size / 2 + p_x + if(!isnull(tile_y)) + y = ((tile_y - 1) * world.icon_size) + world.icon_size / 2+ p_y + if(!isnull(tile_z)) + z = tile_z + +/datum/point/proc/return_turf() + return locate(CEILING(x / world.icon_size, 1), CEILING(y / world.icon_size, 1), z) + +/datum/point/proc/return_coordinates() //[turf_x, turf_y, z] + return list(CEILING(x / world.icon_size, 1), CEILING(y / world.icon_size, 1), z) + +/datum/point/proc/return_position() + return new /datum/position(src) + +/datum/point/proc/return_px() + return MODULUS(x, world.icon_size) - 16 + +/datum/point/proc/return_py() + return MODULUS(y, world.icon_size) - 16 + +/datum/point/proc/mapcheck() + . = FALSE + var/maxx = world.icon_size * world.maxx + var/maxy = world.icon_size * world.maxy + var/move_zx = 0 + var/move_zy = 0 + if(x < 0) + x += maxx + move_zx -= 1 + if(y < 0) + y += maxy + move_zy -= 1 + if(x > maxx) + x -= maxx + move_zx += 1 + if(y > maxy) + y -= maxy + move_zy += 1 + var/datum/space_level/S = GLOB.z_levels_list["[z]"] + if(move_zx != 0) + var/datum/space_level/L = S.neigbours["[move_zx < 0? WEST : EAST]"] + z = L.z_value + . = TRUE + if(move_zy != 0) + var/datum/space_level/L = S.neigbours["[move_zy < 0? SOUTH : NORTH]"] + z = L.z_value + . = TRUE + +/datum/point/vector + var/speed = 32 //pixels per iteration + var/iteration = 0 + var/angle = 0 + var/mpx = 0 //calculated x/y movement amounts to prevent having to do trig every step. + var/mpy = 0 + var/starting_x = 0 //just like before, pixels from EDGE of map! This is set in initialize_location(). + var/starting_y = 0 + var/starting_z = 0 + +/datum/point/vector/New(_x, _y, _z, _pixel_x = 0, _pixel_y = 0, _angle, _speed) + ..() + initialize_trajectory(_speed, _angle) + +/datum/point/vector/initialize_location(tile_x, tile_y, tile_z, p_x = 0, p_y = 0) + . = ..() + starting_x = x + starting_y = y + starting_z = z + +/datum/point/vector/copy_to(datum/point/vector/v = new) + ..(v) + v.speed = speed + v.iteration = iteration + v.angle = angle + v.mpx = mpx + v.mpy = mpy + v.starting_x = starting_x + v.starting_y = starting_y + v.starting_z = starting_z + return v + +/datum/point/vector/proc/initialize_trajectory(pixel_speed, new_angle) + if(!isnull(pixel_speed)) + speed = pixel_speed + set_angle(new_angle) + +/datum/point/vector/proc/set_angle(new_angle) //calculations use "byond angle" where north is 0 instead of 90, and south is 180 instead of 270. + if(isnull(angle)) + return + angle = new_angle + update_offsets() + +/datum/point/vector/proc/update_offsets() + mpx = sin(angle) * speed + mpy = cos(angle) * speed + +/datum/point/vector/proc/set_speed(new_speed) + if(isnull(new_speed) || speed == new_speed) + return + speed = new_speed + update_offsets() + +/datum/point/vector/proc/increment(multiplier = 1) + iteration++ + x += mpx * 1 + y += mpy * 1 + if(mapcheck()) + on_z_change() + +/datum/point/vector/proc/return_vector_after_increments(amount = 7, multiplier = 1, force_simulate = FALSE) + var/datum/point/vector/v = copy_to() + if(force_simulate) + for(var/i in 1 to amount) + v.increment(multiplier) + else + v.increment(multiplier * amount) + return v + +/datum/point/vector/proc/on_z_change() + return + +/datum/point/vector/processed //pixel_speed is per decisecond. + var/last_process = 0 + var/last_move = 0 + var/paused = FALSE + +/datum/point/vector/processed/Destroy() + STOP_PROCESSING(SSprojectiles, src) + +/datum/point/vector/processed/proc/start() + last_process = world.time + last_move = world.time + START_PROCESSING(SSprojectiles, src) + +/datum/point/vector/processed/process() + if(paused) + last_move += world.time - last_process + last_process = world.time + return + var/needed_time = world.time - last_move + last_process = world.time + last_move = world.time + increment(needed_time) diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index e372d5c0b2..176c762e9c 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -33,7 +33,7 @@ if(LINGHIVE_LING) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) var/msg = "[changeling.changelingID]: [message]" - log_talk(src,"[changeling.changelingID]/[user.key] : [message]",LOGSAY) + log_talk(user,"[changeling.changelingID]/[user.key] : [message]",LOGSAY) for(var/_M in GLOB.mob_list) var/mob/M = _M if(M in GLOB.dead_mob_list) @@ -110,3 +110,25 @@ AI.holopad_talk(message, language) return FALSE return TRUE + +/datum/saymode/monkey + key = "k" + mode = MODE_MONKEY + +/datum/saymode/monkey/handle_message(mob/living/user, message, datum/language/language) + var/datum/mind = user.mind + if(!mind) + return TRUE + if(is_monkey_leader(mind) || (ismonkey(user) && is_monkey(mind))) + log_talk(user, "(MONKEY) [user]/[user.key]: [message]",LOGSAY) + if(prob(75) && ismonkey(user)) + user.visible_message("\The [user] chimpers.") + var/msg = "\[[is_monkey_leader(mind) ? "Monkey Leader" : "Monkey"]\] [user]: [message]" + for(var/_M in GLOB.mob_list) + var/mob/M = _M + if(M in GLOB.dead_mob_list) + var/link = FOLLOW_LINK(M, user) + to_chat(M, "[link] [msg]") + if((is_monkey_leader(M.mind) || ismonkey(M)) && (M.mind in SSticker.mode.ape_infectees)) + to_chat(M, msg) + return FALSE diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index cc64cc2eb8..22868f855f 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -479,3 +479,27 @@ desc = "Blinding light dances in your vision, stunning and silencing you. Any damage taken will shorten the light's effects!" icon_state = "kindle" alerttooltipstyle = "clockcult" + + +//Ichorial Stain: Applied to servants revived by a vitality matrix. Prevents them from being revived by one again until the effect fades. +/datum/status_effect/ichorial_stain + id = "ichorial_stain" + status_type = STATUS_EFFECT_UNIQUE + duration = 600 + examine_text = "SUBJECTPRONOUN is drenched in thick, blue ichor!" + alert_type = /obj/screen/alert/status_effect/ichorial_stain + +/datum/status_effect/ichorial_stain/on_apply() + owner.visible_message("[owner] gets back up, [owner.p_their()] body dripping blue ichor!", \ + "Thick blue ichor covers your body; you can't be revived like this again until it dries!") + return TRUE + +/datum/status_effect/ichorial_stain/on_remove() + owner.visible_message("The blue ichor on [owner]'s body dries out!", \ + "The ichor on your body is dry - you can now be revived by vitality matrices again!") + +/obj/screen/alert/status_effect/ichorial_stain + name = "Ichorial Stain" + desc = "Your body is covered in blue ichor! You can't be revived by vitality matrices." + icon_state = "ichorial_stain" + alerttooltipstyle = "clockcult" diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 688c921a73..0e18b01cf8 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -21,7 +21,7 @@ /datum/status_effect/freon/tick() owner.update_canmove() - if(can_melt && owner.bodytemperature >= 310.055) + if(can_melt && owner.bodytemperature >= BODYTEMP_NORMAL) qdel(src) /datum/status_effect/freon/on_remove() diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 19bd880a77..e24359d18c 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -9,6 +9,7 @@ var/mob/living/owner //The mob affected by the status effect. var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another var/on_remove_on_mob_delete = FALSE //if we call on_remove() when the mob is deleted + var/examine_text //If defined, this text will appear when the mob is examined - to use he, she etc. use "SUBJECTPRONOUN" and replace it in the examines themselves var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description var/obj/screen/alert/status_effect/linked_alert = null //the alert itself, if it exists diff --git a/code/datums/weakrefs.dm b/code/datums/weakrefs.dm index 2347d0f831..d8adba652c 100644 --- a/code/datums/weakrefs.dm +++ b/code/datums/weakrefs.dm @@ -16,3 +16,4 @@ /datum/weakref/proc/resolve() var/datum/D = locate(reference) return (!QDELETED(D) && D.weak_reference == src) ? D : null + diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 995936e429..ab8f019d7c 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -25,7 +25,7 @@ /datum/weather/rad_storm/telegraph() ..() - status_alarm("alert") + status_alarm(TRUE) /datum/weather/rad_storm/weather_act(mob/living/L) @@ -49,24 +49,19 @@ if(..()) return priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert") - status_alarm() - sleep(300) - revoke_maint_all_access() // Need to make this a timer at some point. - -/datum/weather/rad_storm/proc/status_alarm(command) //Makes the status displays show the radiation warning for those who missed the announcement. - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + status_alarm(FALSE) +/datum/weather/rad_storm/proc/status_alarm(active) //Makes the status displays show the radiation warning for those who missed the announcement. + var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) if(!frequency) return - var/datum/signal/status_signal = new - var/atom/movable/virtualspeaker/virt = new /atom/movable/virtualspeaker(null) - status_signal.source = virt - status_signal.transmission_method = 1 - status_signal.data["command"] = "shuttle" + var/datum/signal/signal = new + if (active) + signal.data["command"] = "alert" + signal.data["picture_state"] = "radiation" + else + signal.data["command"] = "shuttle" - if(command == "alert") - status_signal.data["command"] = "alert" - status_signal.data["picture_state"] = "radiation" - - frequency.post_signal(src, status_signal) + var/atom/movable/virtualspeaker/virt = new(null) + frequency.post_signal(virt, signal) diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index b7b5e0d2c9..37d44a1bb0 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -11,8 +11,7 @@ /datum/wires/radio/interactable(mob/user) var/obj/item/device/radio/R = holder - if(R.b_stat) - return TRUE + return R.unscrewed /datum/wires/radio/on_pulse(index) var/obj/item/device/radio/R = holder diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index ef7b1f2776..93193f964a 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -75,14 +75,14 @@ C.AnnouncePR(final_composed) /datum/world_topic/ahelp_relay - keyword = "ahelp_relay" + keyword = "Ahelp" require_comms_key = TRUE /datum/world_topic/ahelp_relay/Run(list/input) relay_msg_admins("HELP: [input["source"]] [input["message_sender"]]: [input["message"]]") /datum/world_topic/comms_console - keyword = "comms_console" + keyword = "Comms_Console" require_comms_key = TRUE /datum/world_topic/comms_console/Run(list/input) @@ -91,7 +91,7 @@ CM.overrideCooldown() /datum/world_topic/news_report - keyword = "news_report" + keyword = "News_Report" require_comms_key = TRUE /datum/world_topic/news_report/Run(list/input) diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 901a8610a6..712b3425e0 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -78,6 +78,7 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) QDEL_NULL(ghost_appearance) /datum/atom_hud/alternate_appearance/basic/add_to_hud(atom/A) + LAZYINITLIST(A.hud_list) A.hud_list[appearance_key] = theImage . = ..() diff --git a/code/game/area/ai_monitored.dm b/code/game/area/ai_monitored.dm index a5216fb44c..9d42b67bf9 100644 --- a/code/game/area/ai_monitored.dm +++ b/code/game/area/ai_monitored.dm @@ -28,4 +28,4 @@ for(var/X in motioncameras) var/obj/machinery/camera/cam = X cam.lostTargetRef(WEAKREF(O)) - return + return \ No newline at end of file diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index 28209558d7..f4965fea13 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -62,6 +62,7 @@ var/list/firealarms var/firedoors_last_closed_on = 0 var/xenobiology_compatible = FALSE //Can the Xenobio management console transverse this area by default? + var/list/canSmoothWithAreas //typecache to limit the areas that atoms in this area can smooth with /*Adding a wizard area teleport list because motherfucking lag -- Urist*/ /*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/ @@ -75,7 +76,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) if(GLOB.teleportlocs[AR.name]) continue var/turf/picked = safepick(get_area_turfs(AR.type)) - if (picked && (picked.z in GLOB.station_z_levels)) + if (picked && is_station_level(picked.z)) GLOB.teleportlocs[AR.name] = AR sortTim(GLOB.teleportlocs, /proc/cmp_text_dsc) @@ -105,6 +106,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) uid = ++global_uid related = list(src) map_name = name // Save the initial (the name set in the map) name of the area. + canSmoothWithAreas = typecacheof(canSmoothWithAreas) if(requires_power) luminosity = 0 diff --git a/code/game/area/areas/holodeck.dm b/code/game/area/areas/holodeck.dm index 51399ca7e1..10e3249d64 100644 --- a/code/game/area/areas/holodeck.dm +++ b/code/game/area/areas/holodeck.dm @@ -123,4 +123,4 @@ /area/holodeck/rec_center/thunderdome1218 name = "Holodeck - 1218 AD" - restricted = 1 \ No newline at end of file + restricted = 1 diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index d322e8644c..4fd3204040 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -32,9 +32,44 @@ /area/ruin/powered/seedvault icon_state = "dk_yellow" -/area/ruin/powered/syndicate_lava_base +/area/ruin/unpowered/syndicate_lava_base name = "Secret Base" icon_state = "dk_yellow" + ambientsounds = HIGHSEC + +/area/ruin/unpowered/syndicate_lava_base/engineering + name = "Syndicate Lavaland Engineering" + +/area/ruin/unpowered/syndicate_lava_base/medbay + name = "Syndicate Lavaland Medbay" + +/area/ruin/unpowered/syndicate_lava_base/arrivals + name = "Syndicate Lavaland Arrivals" + +/area/ruin/unpowered/syndicate_lava_base/bar + name = "Syndicate Lavaland Bar" + +/area/ruin/unpowered/syndicate_lava_base/main + name = "Syndicate Lavaland Primary Hallway" + +/area/ruin/unpowered/syndicate_lava_base/cargo + name = "Syndicate Lavaland Cargo Bay" + +/area/ruin/unpowered/syndicate_lava_base/chemistry + name = "Syndicate Lavaland Chemistry" + +/area/ruin/unpowered/syndicate_lava_base/virology + name = "Syndicate Lavaland Virology" + +/area/ruin/unpowered/syndicate_lava_base/testlab + name = "Syndicate Lavaland Experimentation Lab" + +/area/ruin/unpowered/syndicate_lava_base/dormitories + name = "Syndicate Lavaland Dormitories" + +/area/ruin/unpowered/syndicate_lava_base/telecomms + name = "Syndicate Lavaland Telecommunications" + //Xeno Nest diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm index 8a29d1b2ac..d27b4600c9 100644 --- a/code/game/area/areas/shuttles.dm +++ b/code/game/area/areas/shuttles.dm @@ -11,6 +11,11 @@ valid_territory = FALSE icon_state = "shuttle" +/area/shuttle/Initialize() + if(!canSmoothWithAreas) + canSmoothWithAreas = type + . = ..() + ////////////////////////////Multi-area shuttles//////////////////////////// ////////////////////////////Syndicate infiltrator//////////////////////////// @@ -19,6 +24,7 @@ name = "Syndicate Infiltrator" blob_allowed = FALSE ambientsounds = HIGHSEC + canSmoothWithAreas = /area/shuttle/syndicate /area/shuttle/syndicate/bridge name = "Syndicate Infiltrator Control" @@ -37,6 +43,18 @@ /area/shuttle/syndicate/airlock name = "Syndicate Infiltrator Airlock" +////////////////////////////Pirate Shuttle//////////////////////////// + +/area/shuttle/pirate + name = "Pirate Shuttle" + blob_allowed = FALSE + requires_power = TRUE + canSmoothWithAreas = /area/shuttle/pirate + +/area/shuttle/pirate/vault + name = "Pirate Shuttle Vault" + requires_power = FALSE + ////////////////////////////Single-area shuttles//////////////////////////// /area/shuttle/transit @@ -76,6 +94,9 @@ /area/shuttle/escape name = "Emergency Shuttle" +/area/shuttle/escape/backup + name = "Backup Emergency Shuttle" + /area/shuttle/escape/luxury name = "Luxurious Emergency Shuttle" noteleport = TRUE @@ -111,12 +132,3 @@ /area/shuttle/syndicate_scout name = "Syndicate Scout" blob_allowed = FALSE - -/area/shuttle/pirate - name = "Pirate Shuttle" - blob_allowed = FALSE - requires_power = TRUE - -/area/shuttle/pirate/vault - name = "Pirate Shuttle Vault" - requires_power = FALSE \ No newline at end of file diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 211f9dea59..eb63ca147f 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -5,10 +5,6 @@ var/flags_1 = 0 var/flags_2 = 0 - - var/list/fingerprints - var/list/fingerprintshidden - var/list/blood_DNA var/container_type = NONE var/admin_spawned = 0 //was this spawned by an admin? used for stat tracking stuff. var/datum/reagents/reagents = null @@ -113,7 +109,7 @@ if(!T) return FALSE - if(T.z == ZLEVEL_TRANSIT) + if(is_transit_level(T.z)) for(var/A in SSshuttle.mobile) var/obj/docking_port/mobile/M = A if(M.launch_status == ENDGAME_TRANSIT) @@ -122,7 +118,7 @@ if(T in shuttle_area) return TRUE - if(T.z != ZLEVEL_CENTCOM)//if not, don't bother + if(!is_centcom_level(T.z))//if not, don't bother return FALSE //Check for centcom itself @@ -141,15 +137,15 @@ /atom/proc/onSyndieBase() var/turf/T = get_turf(src) if(!T) - return 0 + return FALSE - if(T.z != ZLEVEL_CENTCOM)//if not, don't bother - return 0 + if(!is_centcom_level(T.z))//if not, don't bother + return FALSE - if(istype(T.loc, /area/shuttle/syndicate) || istype(T.loc, /area/syndicate_mothership)) - return 1 + if(istype(T.loc, /area/shuttle/syndicate) || istype(T.loc, /area/syndicate_mothership) || istype(T.loc, /area/shuttle/assault_pod)) + return TRUE - return 0 + return FALSE /atom/proc/attack_hulk(mob/living/carbon/human/user, does_attack_animation = 0) SendSignal(COMSIG_ATOM_HULK_ATTACK, user) @@ -232,21 +228,22 @@ /atom/proc/in_contents_of(container)//can take class or object instance as argument if(ispath(container)) if(istype(src.loc, container)) - return 1 + return TRUE else if(src in container) - return 1 + return TRUE + return FALSE + +/atom/proc/get_examine_name(mob/user) + . = "\a [src]" + var/list/override = list(gender == PLURAL? "some" : "a" , " ", "[name]") + if(SendSignal(COMSIG_ATOM_GET_EXAMINE_NAME, user, override) & COMPONENT_EXNAME_CHANGED) + . = override.Join("") + +/atom/proc/get_examine_string(mob/user, thats = FALSE) + . = "[icon2html(src, user)] [thats? "That's ":""][get_examine_name(user)]" /atom/proc/examine(mob/user) - //This reformat names to get a/an properly working on item descriptions when they are bloody - var/f_name = "\a [src]." - if(src.blood_DNA && !istype(src, /obj/effect/decal)) - if(gender == PLURAL) - f_name = "some " - else - f_name = "a " - f_name += "blood-stained [name]!" - - to_chat(user, "[icon2html(src, user)] That's [f_name]") + to_chat(user, get_examine_string(user, TRUE)) if(desc) to_chat(user, desc) @@ -303,11 +300,6 @@ if(AM && isturf(AM.loc)) step(AM, turn(AM.dir, 180)) -GLOBAL_LIST_EMPTY(blood_splatter_icons) - -/atom/proc/blood_splatter_index() - return "[REF(initial(icon))]-[initial(icon_state)]" - //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() if(get_blood_id() != "blood") @@ -332,100 +324,28 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) // Returns 0 if we have that blood already var/new_blood_dna = L.get_blood_dna_list() if(!new_blood_dna) - return 0 - if(!blood_DNA) //if our list of DNA doesn't exist yet, initialise it. - blood_DNA = list() - var/old_length = blood_DNA.len - blood_DNA |= new_blood_dna - if(blood_DNA.len == old_length) - return 0 - return 1 - -//to add blood dna info to the object's blood_DNA list -/atom/proc/transfer_blood_dna(list/blood_dna) - if(!blood_DNA) - blood_DNA = list() - var/old_length = blood_DNA.len - blood_DNA |= blood_dna - if(blood_DNA.len > old_length) - return 1//some new blood DNA was added - + return FALSE + var/old_length = blood_DNA_length() + add_blood_DNA(new_blood_dna) + if(blood_DNA_length() == old_length) + return FALSE + return TRUE //to add blood from a mob onto something, and transfer their dna info /atom/proc/add_mob_blood(mob/living/M) var/list/blood_dna = M.get_blood_dna_list() if(!blood_dna) - return 0 - return add_blood(blood_dna) - -//to add blood onto something, with blood dna info to include. -/atom/proc/add_blood(list/blood_dna) - return 0 - -/obj/add_blood(list/blood_dna) - return transfer_blood_dna(blood_dna) - -/obj/item/add_blood(list/blood_dna) - var/blood_count = !blood_DNA ? 0 : blood_DNA.len - if(!..()) - return 0 - if(!blood_count)//apply the blood-splatter overlay if it isn't already in there - add_blood_overlay() - return 1 //we applied blood to the item - -/obj/item/proc/add_blood_overlay() - if(initial(icon) && initial(icon_state)) - //try to find a pre-processed blood-splatter. otherwise, make a new one - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(!blood_splatter_icon) - blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object - blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - blood_splatter_icon = fcopy_rsc(blood_splatter_icon) - GLOB.blood_splatter_icons[index] = blood_splatter_icon - add_overlay(blood_splatter_icon) - -/obj/item/clothing/gloves/add_blood(list/blood_dna) - . = ..() - transfer_blood = rand(2, 4) - -/turf/add_blood(list/blood_dna, list/datum/disease/diseases) - var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src - if(!B) - B = new /obj/effect/decal/cleanable/blood/splatter(src, diseases) - B.transfer_blood_dna(blood_dna) //give blood info to the blood decal. - return 1 //we bloodied the floor - -/mob/living/carbon/human/add_blood(list/blood_dna) - if(wear_suit) - wear_suit.add_blood(blood_dna) - update_inv_wear_suit() - else if(w_uniform) - w_uniform.add_blood(blood_dna) - update_inv_w_uniform() - if(gloves) - var/obj/item/clothing/gloves/G = gloves - G.add_blood(blood_dna) - else - transfer_blood_dna(blood_dna) - bloody_hands = rand(2, 4) - update_inv_gloves() //handles bloody hands overlays and updating - return 1 - -/atom/proc/clean_blood() - if(islist(blood_DNA)) - blood_DNA = null - return 1 + return FALSE + return add_blood_DNA(blood_dna) /atom/proc/wash_cream() - return 1 + return TRUE /atom/proc/isinspace() if(isspaceturf(get_turf(src))) - return 1 + return TRUE else - return 0 + return FALSE /atom/proc/handle_fall() return diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index ddb768488a..83012750e0 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -132,44 +132,12 @@ if (orbiting) orbiting.Check() - if(flags_1 & CLEAN_ON_MOVE_1) - clean_on_move() - var/datum/proximity_monitor/proximity_monitor = src.proximity_monitor if(proximity_monitor) proximity_monitor.HandleMove() return 1 -/atom/movable/proc/clean_on_move() - var/turf/tile = loc - if(isturf(tile)) - tile.clean_blood() - for(var/A in tile) - if(is_cleanable(A)) - qdel(A) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(ishuman(A)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - if(cleaned_human.head) - cleaned_human.head.clean_blood() - cleaned_human.update_inv_head() - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit() - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform() - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes() - cleaned_human.clean_blood() - cleaned_human.wash_cream() - to_chat(cleaned_human, "[src] cleans your face!") - /atom/movable/Destroy(force) var/inform_admins = (flags_2 & INFORM_ADMINS_ON_RELOCATE_2) var/stationloving = (flags_2 & STATIONLOVING_2) @@ -611,8 +579,8 @@ /atom/movable/proc/in_bounds() . = FALSE - var/turf/currentturf = get_turf(src) - if(currentturf && (currentturf.z == ZLEVEL_CENTCOM || (currentturf.z in GLOB.station_z_levels) || currentturf.z == ZLEVEL_TRANSIT)) + var/turf/T = get_turf(src) + if (T && (is_centcom_level(T.z) || is_station_level(T.z) || is_transit_level(T.z))) . = TRUE @@ -712,4 +680,4 @@ return FALSE if(anchored || throwing) return FALSE - return TRUE \ No newline at end of file + return TRUE diff --git a/code/game/communications.dm b/code/game/communications.dm index d60a5d8301..212a99f966 100644 --- a/code/game/communications.dm +++ b/code/game/communications.dm @@ -86,109 +86,55 @@ GLOBAL_LIST_EMPTY(all_radios) for(var/freq in GLOB.all_radios) GLOB.all_radios["[freq]"] -= radio -/* -Frequency range: 1200 to 1600 -Radiochat range: 1441 to 1489 (most devices refuse to be tune to other frequency, even during mapmaking) - -Radio: -1459 - standard radio chat -1351 - Science -1353 - Command -1355 - Medical -1357 - Engineering -1359 - Security -1337 - death squad -1443 - Confession Intercom -1349 - Miners -1347 - Cargo techs -1447 - AI Private - -Devices: -1451 - tracking implant -1457 - RSD default - -On the map: -1311 for prison shuttle console (in fact, it is not used) -1435 for status displays -1437 for atmospherics/fire alerts -1439 for engine components -1439 for air pumps, air scrubbers, atmo control -1441 for atmospherics - supply tanks -1443 for atmospherics - distribution loop/mixed air tank -1445 for bot nav beacons -1447 for mulebot, secbot and ed209 control -1449 for airlock controls, electropack, magnets -1451 for toxin lab access -1453 for engineering access -1455 for AI access -*/ +// For information on what objects or departments use what frequencies, +// see __DEFINES/radio.dm. Mappers may also select additional frequencies for +// use in maps, such as in intercoms. GLOBAL_LIST_INIT(radiochannels, list( - "Common" = 1459, - "Science" = 1351, - "Command" = 1353, - "Medical" = 1355, - "Engineering" = 1357, - "Security" = 1359, - "CentCom" = 1337, - "Syndicate" = 1213, - "Supply" = 1347, - "Service" = 1349, - "AI Private" = 1447, - "Red Team" = 1215, - "Blue Team" = 1217 + "Common" = FREQ_COMMON, + "Science" = FREQ_SCIENCE, + "Command" = FREQ_COMMAND, + "Medical" = FREQ_MEDICAL, + "Engineering" = FREQ_ENGINEERING, + "Security" = FREQ_SECURITY, + "CentCom" = FREQ_CENTCOM, + "Syndicate" = FREQ_SYNDICATE, + "Supply" = FREQ_SUPPLY, + "Service" = FREQ_SERVICE, + "AI Private" = FREQ_AI_PRIVATE, + "Red Team" = FREQ_CTF_RED, + "Blue Team" = FREQ_CTF_BLUE )) GLOBAL_LIST_INIT(reverseradiochannels, list( - "1459" = "Common", - "1351" = "Science", - "1353" = "Command", - "1355" = "Medical", - "1357" = "Engineering", - "1359" = "Security", - "1337" = "CentCom", - "1213" = "Syndicate", - "1347" = "Supply", - "1349" = "Service", - "1447" = "AI Private", - "1215" = "Red Team", - "1217" = "Blue Team" + "[FREQ_COMMON]" = "Common", + "[FREQ_SCIENCE]" = "Science", + "[FREQ_COMMAND]" = "Command", + "[FREQ_MEDICAL]" = "Medical", + "[FREQ_ENGINEERING]" = "Engineering", + "[FREQ_SECURITY]" = "Security", + "[FREQ_CENTCOM]" = "CentCom", + "[FREQ_SYNDICATE]" = "Syndicate", + "[FREQ_SUPPLY]" = "Supply", + "[FREQ_SERVICE]" = "Service", + "[FREQ_AI_PRIVATE]" = "AI Private", + "[FREQ_CTF_RED]" = "Red Team", + "[FREQ_CTF_BLUE]" = "Blue Team" )) -//depenging helpers -GLOBAL_VAR_CONST(SYND_FREQ, 1213) //nuke op frequency, coloured dark brown in chat window -GLOBAL_VAR_CONST(SUPP_FREQ, 1347) //supply, coloured light brown in chat window -GLOBAL_VAR_CONST(SERV_FREQ, 1349) //service, coloured green in chat window -GLOBAL_VAR_CONST(SCI_FREQ, 1351) //science, coloured plum in chat window -GLOBAL_VAR_CONST(COMM_FREQ, 1353) //command, colored gold in chat window -GLOBAL_VAR_CONST(MED_FREQ, 1355) //medical, coloured blue in chat window -GLOBAL_VAR_CONST(ENG_FREQ, 1357) //engineering, coloured orange in chat window -GLOBAL_VAR_CONST(SEC_FREQ, 1359) //security, coloured red in chat window -GLOBAL_VAR_CONST(CENTCOM_FREQ, 1337) //centcom frequency, coloured grey in chat window -GLOBAL_VAR_CONST(AIPRIV_FREQ, 1447) //AI private, colored magenta in chat window -GLOBAL_VAR_CONST(REDTEAM_FREQ, 1215) // red team (CTF) frequency, coloured red -GLOBAL_VAR_CONST(BLUETEAM_FREQ, 1217) // blue team (CTF) frequency, coloured blue - -#define TRANSMISSION_WIRE 0 -#define TRANSMISSION_RADIO 1 - -/* filters */ -GLOBAL_VAR_INIT(RADIO_TO_AIRALARM, "1") -GLOBAL_VAR_INIT(RADIO_FROM_AIRALARM, "2") -GLOBAL_VAR_INIT(RADIO_CHAT, "3") //deprecated -GLOBAL_VAR_INIT(RADIO_ATMOSIA, "4") -GLOBAL_VAR_INIT(RADIO_NAVBEACONS, "5") -GLOBAL_VAR_INIT(RADIO_AIRLOCK, "6") -GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") - /datum/radio_frequency - var/frequency as num var/list/list/obj/devices = list() +/datum/radio_frequency/New(freq) + frequency = freq + //If range > 0, only post to devices on the same z_level and within range //Use range = -1, to restrain to the same z_level without limiting range /datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, filter = null as text|null, range = null as num|null) + // Ensure the signal's data is fully filled + signal.source = source + signal.frequency = frequency //Apply filter to the signal. If none supply, broadcast to every devices //_default channel is always checked @@ -217,7 +163,7 @@ GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") continue if(start_point.z != end_point.z || (range > 0 && get_dist(start_point, end_point) > range)) continue - device.receive_signal(signal, TRANSMISSION_RADIO, frequency) + device.receive_signal(signal) /datum/radio_frequency/proc/add_listener(obj/device, filter as text|null) if (!filter) @@ -225,8 +171,7 @@ GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") var/list/devices_line = devices[filter] if(!devices_line) - devices_line = list() - devices[filter] = devices_line + devices[filter] = devices_line = list() devices_line += device @@ -240,70 +185,15 @@ GLOBAL_VAR_INIT(RADIO_MAGNETS, "9") devices -= devices_filter - - - -/client/proc/print_pointers() - set name = "Debug Signals" - set category = "Debug" - - if(!holder) - return - - var/datum/signal/S - to_chat(src, "There are [S.pointers.len] pointers:") - for(var/p in S.pointers) - to_chat(src, p) - S = locate(p) - if(istype(S)) - to_chat(src, S.debug_print()) - -/obj/proc/receive_signal(datum/signal/signal, receive_method, receive_param) +/obj/proc/receive_signal(datum/signal/signal) return /datum/signal var/obj/source - - var/transmission_method = 0 - //0 = wire - //1 = radio transmission - //2 = subspace transmission - - var/data = list() - var/encryption - var/frequency = 0 - var/static/list/pointers = list() + var/transmission_method + var/list/data -/datum/signal/New() - ..() - pointers += "[REF(src)]" - -/datum/signal/Destroy() - pointers -= "[REF(src)]" - return ..() - -/datum/signal/proc/copy_from(datum/signal/model) - source = model.source - transmission_method = model.transmission_method - data = model.data - encryption = model.encryption - frequency = model.frequency - -/datum/signal/proc/debug_print() - if (source) - . = "signal = {source = '[source]' [COORD(source)]\n" - else - . = "signal = {source = '[source]' ()\n" - for (var/i in data) - . += "data\[\"[i]\"\] = \"[data[i]]\"\n" - if(islist(data[i])) - var/list/L = data[i] - for(var/t in L) - . += "data\[\"[i]\"\] list has: [t]" - -/datum/signal/proc/sanitize_data() - for(var/d in data) - var/val = data[d] - if(istext(val)) - data[d] = html_encode(val) +/datum/signal/New(data, transmission_method = TRANSMISSION_RADIO) + src.data = data || list() + src.transmission_method = transmission_method diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index b047ff92ea..447a87ce20 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -48,4 +48,6 @@ newhud.join_hud(current) /datum/mind/proc/leave_all_antag_huds() - for(var/datum/atom_hud/antag/hud in GLOB.huds) \ No newline at end of file + for(var/datum/atom_hud/antag/hud in GLOB.huds) + if(hud.hudusers[current]) + hud.leave_hud(current) \ No newline at end of file diff --git a/code/game/gamemodes/antag_spawner.dm b/code/game/gamemodes/antag_spawner.dm index d8ba1f5fa1..3b8937d9fb 100644 --- a/code/game/gamemodes/antag_spawner.dm +++ b/code/game/gamemodes/antag_spawner.dm @@ -108,7 +108,7 @@ if(!user.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) to_chat(user, "AUTHENTICATION FAILURE. ACCESS DENIED.") return FALSE - if(user.z != ZLEVEL_CENTCOM) + if(!user.onSyndieBase()) to_chat(user, "[src] is out of range! It can only be used at your base!") return FALSE return TRUE @@ -125,7 +125,7 @@ return used = TRUE var/mob/dead/observer/theghost = pick(nuke_candidates) - spawn_antag(theghost.client, get_turf(src), "syndieborg") + spawn_antag(theghost.client, get_turf(src), "syndieborg", user.mind) do_sparks(4, TRUE, src) qdel(src) else @@ -208,7 +208,7 @@ /obj/item/antag_spawner/slaughter_demon/attack_self(mob/user) - if(!(user.z in GLOB.station_z_levels)) + if(!is_station_level(user.z)) to_chat(user, "You should probably wait until you reach the station.") return if(used) @@ -219,7 +219,7 @@ return used = 1 var/mob/dead/observer/theghost = pick(demon_candidates) - spawn_antag(theghost.client, get_turf(src), initial(demon_type.name)) + spawn_antag(theghost.client, get_turf(src), initial(demon_type.name),user.mind) to_chat(user, shatter_msg) to_chat(user, veil_msg) playsound(user.loc, 'sound/effects/glassbr1.ogg', 100, 1) @@ -237,15 +237,15 @@ S.mind.special_role = S.name SSticker.mode.traitors += S.mind var/datum/objective/assassinate/new_objective - if(usr) + if(user) new_objective = new /datum/objective/assassinate new_objective.owner = S.mind - new_objective.target = usr.mind - new_objective.explanation_text = "[objective_verb] [usr.real_name], the one who summoned you." + new_objective.target = user + new_objective.explanation_text = "[objective_verb] [user.name], the one who summoned you." S.mind.objectives += new_objective var/datum/objective/new_objective2 = new /datum/objective new_objective2.owner = S.mind - new_objective2.explanation_text = "[objective_verb] everyone[usr ? " else while you're at it":""]." + new_objective2.explanation_text = "[objective_verb] everyone[user ? " else while you're at it":""]." S.mind.objectives += new_objective2 S.mind.add_antag_datum(/datum/antagonist/auto_custom) to_chat(S, S.playstyle_string) diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index fedc2eb6ab..551ec5d418 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -30,4 +30,4 @@ name = initial(name) desc = initial(desc) atmosblock = TRUE - air_update_turf(1) \ No newline at end of file + air_update_turf(1) diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 878b747ea9..a37a8d5c22 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -4,6 +4,7 @@ GLOBAL_LIST_EMPTY(blob_cores) GLOBAL_LIST_EMPTY(overminds) GLOBAL_LIST_EMPTY(blob_nodes) + /mob/camera/blob name = "Blob Overmind" real_name = "Blob Overmind" @@ -33,10 +34,12 @@ GLOBAL_LIST_EMPTY(blob_nodes) var/manualplace_min_time = 600 //in deciseconds //a minute, to get bearings var/autoplace_max_time = 3600 //six minutes, as long as should be needed var/list/blobs_legit = list() + var/max_count = 0 //The biggest it got before death var/blobwincount = 400 var/victory_in_progress = FALSE /mob/camera/blob/Initialize(mapload, starting_points = 60) + validate_location() blob_points = starting_points manualplace_min_time += world.time autoplace_max_time += world.time @@ -50,11 +53,27 @@ GLOBAL_LIST_EMPTY(blob_nodes) color = blob_reagent_datum.complementary_color if(blob_core) blob_core.update_icon() - SSshuttle.registerHostileEnvironment(src) - .= ..() +/mob/camera/blob/proc/validate_location() + var/turf/T = get_turf(src) + if(!is_valid_turf(T) && LAZYLEN(GLOB.blobstart)) + var/list/blobstarts = shuffle(GLOB.blobstart) + for(var/_T in blobstarts) + if(is_valid_turf(_T)) + T = _T + break + if(!T) + CRASH("No blobspawnpoints and blob spawned in nullspace.") + forceMove(T) + +/mob/camera/blob/proc/is_valid_turf(turf/T) + var/area/A = get_area(T) + if((A && !A.blob_allowed) || !T || !is_station_level(T.z) || isspaceturf(T)) + return FALSE + return TRUE + /mob/camera/blob/Life() if(!blob_core) if(!placed) @@ -73,6 +92,9 @@ GLOBAL_LIST_EMPTY(blob_nodes) max_blob_points = INFINITY blob_points = INFINITY addtimer(CALLBACK(src, .proc/victory), 450) + + if(!victory_in_progress && max_count < blobs_legit.len) + max_count = blobs_legit.len ..() @@ -82,7 +104,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) for(var/i in GLOB.mob_living_list) var/mob/living/L = i var/turf/T = get_turf(L) - if(!T || !(T.z in GLOB.station_z_levels)) + if(!T || !is_station_level(T.z)) continue if(L in GLOB.overminds || (L.pass_flags & PASSBLOB)) @@ -111,6 +133,11 @@ GLOBAL_LIST_EMPTY(blob_nodes) A.layer = BELOW_MOB_LAYER A.invisibility = 0 A.blend_mode = 0 + var/datum/antagonist/blob/B = mind.has_antag_datum(/datum/antagonist/blob) + if(B) + var/datum/objective/blob_takeover/main_objective = locate() in B.objectives + if(main_objective) + main_objective.completed = TRUE to_chat(world, "[real_name] consumed the station in an unstoppable tide!") SSticker.news_report = BLOB_WIN SSticker.force_ending = 1 @@ -134,7 +161,6 @@ GLOBAL_LIST_EMPTY(blob_nodes) /mob/camera/blob/Login() ..() - sync_mind() to_chat(src, "You are the overmind!") blob_help() update_health_hud() @@ -224,3 +250,9 @@ GLOBAL_LIST_EMPTY(blob_nodes) return 0 forceMove(NewLoc) return 1 + +/mob/camera/blob/mind_initialize() + . = ..() + var/datum/antagonist/blob/B = mind.has_antag_datum(/datum/antagonist/blob) + if(!B) + mind.add_antag_datum(/datum/antagonist/blob) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 2ef047506f..e88cc8fb96 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -7,22 +7,23 @@ // Power verbs -/mob/camera/blob/proc/place_blob_core(point_rate, placement_override) +/mob/camera/blob/proc/place_blob_core(point_rate, placement_override , pop_override = FALSE) if(placed && placement_override != -1) return 1 if(!placement_override) - for(var/mob/living/M in range(7, src)) - if("blob" in M.faction) - continue - if(M.client) - to_chat(src, "There is someone too close to place your blob core!") - return 0 - for(var/mob/living/M in view(13, src)) - if("blob" in M.faction) - continue - if(M.client) - to_chat(src, "Someone could see your blob core from here!") - return 0 + if(!pop_override) + for(var/mob/living/M in range(7, src)) + if("blob" in M.faction) + continue + if(M.client) + to_chat(src, "There is someone too close to place your blob core!") + return 0 + for(var/mob/living/M in view(13, src)) + if("blob" in M.faction) + continue + if(M.client) + to_chat(src, "Someone could see your blob core from here!") + return 0 var/turf/T = get_turf(src) if(T.density) to_chat(src, "This spot is too dense to place a blob core on!") @@ -37,7 +38,7 @@ else if(O.density) to_chat(src, "This spot is too dense to place a blob core on!") return 0 - if(world.time <= manualplace_min_time && world.time <= autoplace_max_time) + if(!pop_override && world.time <= manualplace_min_time && world.time <= autoplace_max_time) to_chat(src, "It is too early to place your blob core!") return 0 else if(placement_override == 1) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 0c642692f0..b9a8ee6046 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -348,4 +348,4 @@ icon_state = "blob" name = "blob" desc = "A thick wall of writhing tendrils." - brute_resist = 0.25 \ No newline at end of file + brute_resist = 0.25 diff --git a/code/game/gamemodes/brother/traitor_bro.dm b/code/game/gamemodes/brother/traitor_bro.dm index 609f5bb6ab..5052fa0cf5 100644 --- a/code/game/gamemodes/brother/traitor_bro.dm +++ b/code/game/gamemodes/brother/traitor_bro.dm @@ -43,6 +43,7 @@ possible_brothers -= bro antag_candidates -= bro team.add_member(bro) + bro.special_role = "brother" bro.restricted_roles = restricted_jobs log_game("[bro.key] (ckey) has been selected as a Brother") pre_brother_teams += team diff --git a/code/game/gamemodes/changeling/powers/headcrab.dm b/code/game/gamemodes/changeling/powers/headcrab.dm index e7f23bc07b..7a219407a4 100644 --- a/code/game/gamemodes/changeling/powers/headcrab.dm +++ b/code/game/gamemodes/changeling/powers/headcrab.dm @@ -8,6 +8,8 @@ /obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user) set waitfor = FALSE + if(alert("Are we sure we wish to kill ourself and create a headslug?",,"Yes", "No") == "No") + return var/datum/mind/M = user.mind var/list/organs = user.getorganszone("head", 1) @@ -35,4 +37,4 @@ if(crab.origin) crab.origin.active = 1 crab.origin.transfer_to(crab) - to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") \ No newline at end of file + to_chat(crab, "You burst out of the remains of your former body in a shower of gore!") diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 4e8db74ac8..829b0a8512 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -10,17 +10,6 @@ /obj/effect/proc_holder/changeling/panacea/sting_action(mob/user) to_chat(user, "We cleanse impurities from our form.") - - var/mob/living/simple_animal/borer/B = user.has_brain_worms() - if(B) - if(B.controlling) - B.detatch() - B.leave_victim() - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.vomit(0, toxic = TRUE) - to_chat(user, "A parasite exits our form.") - var/list/bad_organs = list( user.getorgan(/obj/item/organ/body_egg), user.getorgan(/obj/item/organ/zombie_infection)) diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 4fdd84040e..450a482822 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -20,7 +20,7 @@ to_chat(user, "We prepare our sting, use alt+click or middle mouse button on target to sting them.") var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chosen_sting = src - + user.hud_used.lingstingdisplay.icon_state = sting_icon user.hud_used.lingstingdisplay.invisibility = 0 @@ -28,7 +28,7 @@ to_chat(user, "We retract our sting, we can't sting anyone for now.") var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) changeling.chosen_sting = null - + user.hud_used.lingstingdisplay.icon_state = null user.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT @@ -90,7 +90,7 @@ /obj/effect/proc_holder/changeling/sting/transformation/can_sting(mob/user, mob/living/carbon/target) if(!..()) return - if((target.disabilities & HUSK) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) + if((target.has_disability(DISABILITY_HUSK)) || !iscarbon(target) || (NOTRANSSTING in target.dna.species.species_traits)) to_chat(user, "Our sting appears ineffective against its DNA.") return 0 return 1 @@ -129,9 +129,11 @@ /obj/effect/proc_holder/changeling/sting/false_armblade/can_sting(mob/user, mob/target) if(!..()) return - if((target.disabilities & HUSK) || !target.has_dna()) - to_chat(user, "Our sting appears ineffective against its DNA.") - return 0 + if(isliving(target)) + var/mob/living/L = target + if((L.has_disability(DISABILITY_HUSK)) || !L.has_dna()) + to_chat(user, "Our sting appears ineffective against its DNA.") + return 0 return 1 /obj/effect/proc_holder/changeling/sting/false_armblade/sting_action(mob/user, mob/target) @@ -207,7 +209,7 @@ /obj/effect/proc_holder/changeling/sting/blind/sting_action(mob/user, mob/living/carbon/target) add_logs(user, target, "stung", "blind sting") to_chat(target, "Your eyes burn horrifically!") - target.become_nearsighted() + target.become_nearsighted(EYE_DAMAGE) target.blind_eyes(20) target.blur_eyes(40) return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index e4f75ea563..f5484e91f5 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -196,7 +196,7 @@ Credit where due: /datum/game_mode/clockwork_cult/proc/check_clockwork_victory() return main_clockcult.check_clockwork_victory() -/datum/game_mode/clock_cult/set_round_result() +/datum/game_mode/clockwork_cult/set_round_result() ..() if(GLOB.clockwork_gateway_activated) SSticker.news_report = CLOCK_SUMMON diff --git a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm index 29655a0ac9..e60b72073f 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/clock_sigils.dm @@ -278,7 +278,8 @@ animate(src, alpha = 255, time = 10, flags = ANIMATION_END_NOW) //we may have a previous animation going. finish it first, then do this one without delay. sleep(10) //as long as they're still on the sigil and are either not a servant or they're a servant AND it has remaining vitality - while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src)) + var/consumed_vitality + while(L && (!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && (GLOB.ratvar_awakens || GLOB.clockwork_vitality))) && get_turf(L) == get_turf(src) && !L.buckled) sigil_active = TRUE if(animation_number >= 4) new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) @@ -286,7 +287,8 @@ animation_number++ if(!is_servant_of_ratvar(L)) var/vitality_drained = 0 - if(L.stat == DEAD) + if(L.stat == DEAD && !consumed_vitality) + consumed_vitality = TRUE //Prevent the target from being consumed multiple times vitality_drained = L.maxHealth var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) animate(V, alpha = 0, transform = matrix()*2, time = 8) @@ -313,21 +315,28 @@ revival_cost = 0 var/mob/dead/observer/ghost = L.get_ghost(TRUE) if(GLOB.clockwork_vitality >= revival_cost && (ghost || (L.mind && L.mind.active))) - if(ghost) - ghost.reenter_corpse() - L.revive(1, 1) - var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) - animate(V, alpha = 0, transform = matrix()*2, time = 8) - playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) - L.visible_message("[L] suddenly gets back up, [L.p_their()] body dripping blue ichor!", "\"[text2ratvar("You will be okay, child.")]\"") - GLOB.clockwork_vitality -= revival_cost + if(L.has_status_effect(STATUS_EFFECT_ICHORIAL_STAIN)) + visible_message("[src] strains, but nothing happens...") + if(L.pulledby) + to_chat(L.pulledby, "[L] was already revived recently by a vitality matrix! Wait a bit longer!") + break + else + if(ghost) + ghost.reenter_corpse() + L.revive(1, 1) + var/obj/effect/temp_visual/ratvar/sigil/vitality/V = new /obj/effect/temp_visual/ratvar/sigil/vitality(get_turf(src)) + animate(V, alpha = 0, transform = matrix()*2, time = 8) + playsound(L, 'sound/magic/staff_healing.ogg', 50, 1) + to_chat(L, "\"[text2ratvar("You will be okay, child.")]\"") + L.apply_status_effect(STATUS_EFFECT_ICHORIAL_STAIN) + GLOB.clockwork_vitality -= revival_cost break if(!L.client || L.client.is_afk()) set waitfor = FALSE var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [L.name], an inactive clock cultist?", "[name]", null, "Clock Cultist", 50, L) var/mob/dead/observer/theghost = null if(candidates.len) - to_chat(L, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!") + to_chat(L, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form!") message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(L)]) to replace an inactive clock cultist.") L.ghostize(0) L.key = theghost.key diff --git a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm index 194747cefc..47ef4bf476 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/servant_blocker.dm @@ -14,7 +14,7 @@ /obj/effect/clockwork/servant_blocker/CanPass(atom/movable/M, turf/target) var/list/target_contents = M.GetAllContents() + M for(var/mob/living/L in target_contents) - if(is_servant_of_ratvar(L) && get_dir(M, src) != dir) //Unless we're on the side the arrow is pointing directly away from, no-go + if(is_servant_of_ratvar(L) && get_dir(M, src) != dir && L.stat != DEAD) //Unless we're on the side the arrow is pointing directly away from, no-go to_chat(L, "The space beyond here can't be accessed by you or other servants.") return return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm index 50076e0919..3d41d8aa8a 100644 --- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm +++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm @@ -98,12 +98,12 @@ if(severity == 1 && uses) uses = 0 visible_message("[src] is disrupted!") - animate(src, alpha = 0, transform = matrix()*2, time = 10, flags_1 = ANIMATION_END_NOW) + animate(src, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW) deltimer(timerid) timerid = QDEL_IN(src, 10) linked_gateway.uses = 0 linked_gateway.visible_message("[linked_gateway] is disrupted!") - animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 10, flags_1 = ANIMATION_END_NOW) + animate(linked_gateway, alpha = 0, transform = matrix()*2, time = 10, flags = ANIMATION_END_NOW) deltimer(linked_gateway.timerid) linked_gateway.timerid = QDEL_IN(linked_gateway, 10) return TRUE @@ -144,13 +144,13 @@ uses = max(0, uses - 1) linked_gateway.uses = max(0, linked_gateway.uses - 1) if(!uses) - animate(src, transform = matrix() * 0.1, time = 10, flags_1 = ANIMATION_END_NOW) - animate(linked_gateway, transform = matrix() * 0.1, time = 10, flags_1 = ANIMATION_END_NOW) + animate(src, transform = matrix() * 0.1, time = 10, flags = ANIMATION_END_NOW) + animate(linked_gateway, transform = matrix() * 0.1, time = 10, flags = ANIMATION_END_NOW) density = FALSE linked_gateway.density = FALSE else - animate(src, transform = matrix() / 1.5, time = 10, flags_1 = ANIMATION_END_NOW) - animate(linked_gateway, transform = matrix() / 1.5, time = 10, flags_1 = ANIMATION_END_NOW) + animate(src, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) + animate(linked_gateway, transform = matrix() / 1.5, time = 10, flags = ANIMATION_END_NOW) addtimer(CALLBACK(src, .proc/check_uses), 10) return TRUE @@ -165,13 +165,13 @@ var/list/teleportnames = list() for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects) - if(!O.Adjacent(invoker) && O != src && (O.z <= ZLEVEL_SPACEMAX) && O.anchored) //don't list obelisks that we're next to + if(!O.Adjacent(invoker) && O != src && !is_away_level(O.z) && O.anchored) //don't list obelisks that we're next to var/area/A = get_area(O) var/locname = initial(A.name) possible_targets[avoid_assoc_duplicate_keys("[locname] [O.name]", teleportnames)] = O for(var/mob/living/L in GLOB.alive_mob_list) - if(!L.stat && is_servant_of_ratvar(L) && !L.Adjacent(invoker) && (L.z <= ZLEVEL_SPACEMAX)) //People right next to the invoker can't be portaled to, for obvious reasons + if(!L.stat && is_servant_of_ratvar(L) && !L.Adjacent(invoker) && !is_away_level(L.z)) //People right next to the invoker can't be portaled to, for obvious reasons possible_targets[avoid_assoc_duplicate_keys("[L.name] ([L.real_name])", teleportnames)] = L if(!possible_targets.len) diff --git a/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm b/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm index 74f7119193..570f6527f8 100644 --- a/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm +++ b/code/game/gamemodes/clock_cult/clock_helpers/fabrication_helpers.dm @@ -132,7 +132,7 @@ var/doortype = /obj/machinery/door/airlock/clockwork if(glass) doortype = /obj/machinery/door/airlock/clockwork/brass - return list("operation_time" = 60, "new_obj_type" = doortype, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = dir) + return list("operation_time" = 60, "new_obj_type" = doortype, "power_cost" = POWER_WALL_TOTAL, "spawn_dir" = dir, "transfer_name" = TRUE) /obj/machinery/door/airlock/clockwork/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) return FALSE @@ -188,7 +188,7 @@ //Windoor conversion /obj/machinery/door/window/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) - return list("operation_time" = 30, "new_obj_type" = /obj/machinery/door/window/clockwork, "power_cost" = POWER_STANDARD, "spawn_dir" = dir, "dir_in_new" = TRUE) + return list("operation_time" = 30, "new_obj_type" = /obj/machinery/door/window/clockwork, "power_cost" = POWER_STANDARD, "spawn_dir" = dir, "dir_in_new" = TRUE, "transfer_name" = TRUE) /obj/machinery/door/window/clockwork/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent) return FALSE diff --git a/code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm b/code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm index 1b2b867aa5..2656d430d1 100644 --- a/code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm +++ b/code/game/gamemodes/clock_cult/clock_items/construct_chassis.dm @@ -40,6 +40,9 @@ if(!SSticker.mode) to_chat(user, "You cannot use that before the game has started.") return + if(QDELETED(src)) + to_chat(user, "You were too late! Better luck next time.") + return user.forceMove(get_turf(src)) //If we attack through the alert, jump to the chassis so we know what we're getting into if(alert(user, "Become a [construct_name]? You can no longer be cloned!", construct_name, "Yes", "Cancel") == "Cancel") return @@ -83,6 +86,7 @@ construct_type = /mob/living/simple_animal/drone/cogscarab w_class = WEIGHT_CLASS_SMALL var/infinite_resources = TRUE + var/static/obj/item/seasonal_hat //Share it with all other scarabs, since we're from the same cult! /obj/item/clockwork/construct_chassis/cogscarab/Initialize() . = ..() @@ -93,6 +97,12 @@ if(infinite_resources) //During rounds where they can't interact with the station, let them experiment with builds construct_type = /mob/living/simple_animal/drone/cogscarab/ratvar + if(!seasonal_hat) + var/obj/item/drone_shell/D = locate() in GLOB.poi_list + if(D && D.possible_seasonal_hats.len) + seasonal_hat = pick(D.possible_seasonal_hats) + else + seasonal_hat = "none" /obj/item/clockwork/construct_chassis/cogscarab/post_spawn(mob/living/construct) if(infinite_resources) //Allow them to build stuff and recite scripture @@ -101,3 +111,6 @@ F.uses_power = FALSE for(var/obj/item/clockwork/slab/S in cached_stuff) S.no_cost = TRUE + if(seasonal_hat && seasonal_hat != "none") + var/obj/item/hat = new seasonal_hat(construct) + construct.equip_to_slot_or_del(hat, slot_head) diff --git a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm index 44fa24c134..fc11da9971 100644 --- a/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm +++ b/code/game/gamemodes/clock_cult/clock_items/replica_fabricator.dm @@ -94,7 +94,7 @@ fabrication_values["power_cost"] = 0 var/turf/Y = get_turf(user) - if(!Y || (!(Y.z in GLOB.station_z_levels) && Y.z != ZLEVEL_CENTCOM && Y.z != ZLEVEL_MINING && Y.z != ZLEVEL_LAVALAND)) + if(!Y || (!is_centcom_level(Y.z) && !is_station_level(Y.z) && !is_mining_level(Y.z))) fabrication_values["operation_time"] *= 2 if(fabrication_values["power_cost"] > 0) fabrication_values["power_cost"] *= 2 @@ -144,10 +144,14 @@ else if(new_thing_type) if(fabrication_values["dir_in_new"]) - new new_thing_type(get_turf(target), fabrication_values["spawn_dir"]) //please verify that your new object actually wants to get a dir in New() + var/atom/A = new new_thing_type(get_turf(target), fabrication_values["spawn_dir"]) //please verify that your new object actually wants to get a dir in New() + if(fabrication_values["transfer_name"]) + A.name = target.name else var/atom/A = new new_thing_type(get_turf(target)) A.setDir(fabrication_values["spawn_dir"]) + if(fabrication_values["transfer_name"]) + A.name = target.name if(!fabrication_values["no_target_deletion"]) //for some cases where fabrication_vals() modifies the object but doesn't want it deleted qdel(target) adjust_clockwork_power(-fabrication_values["power_cost"]) diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm index fc734ac426..60f95d6716 100644 --- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm +++ b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm @@ -32,7 +32,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/H = loc if(src == H.glasses && !up) - if(H.disabilities & BLIND) + if(H.has_disability(DISABILITY_BLIND)) to_chat(H, "\"You're blind, idiot. Stop embarrassing yourself.\"") return if(blind_cultist(H)) @@ -51,7 +51,7 @@ to_chat(victim, "\"It looks like Nar-Sie's dogs really don't value their eyes.\"") to_chat(victim, "Your eyes explode with horrific pain!") victim.emote("scream") - victim.become_blind() + victim.become_blind(EYE_DAMAGE) victim.adjust_blurriness(30) victim.adjust_blindness(30) return TRUE @@ -76,7 +76,7 @@ ..() if(slot != slot_glasses || up) return - if(user.disabilities & BLIND) + if(user.has_disability(DISABILITY_BLIND)) to_chat(user, "\"You're blind, idiot. Stop embarrassing yourself.\"" ) return if(blind_cultist(user)) //Cultists instantly go blind @@ -115,11 +115,11 @@ var/obj/item/clothing/glasses/wraith_spectacles/WS = L.glasses desc = "[glasses_right && !WS.up ? "":""]You are [glasses_right ? "":"not "]wearing wraith spectacles[glasses_right && !WS.up ? "!":"."]
\ You have taken [W.eye_damage_done] eye damage from them.
" - if(L.disabilities & NEARSIGHT) + if(L.has_disability(DISABILITY_NEARSIGHT)) desc += "You are nearsighted!
" else if(glasses_right && !WS.up) desc += "You will become nearsighted at [W.nearsight_breakpoint] eye damage.
" - if(L.disabilities & BLIND) + if(L.has_disability(DISABILITY_BLIND)) desc += "You are blind!" else if(glasses_right && !WS.up) desc += "You will become blind at [W.blind_breakpoint] eye damage." @@ -142,8 +142,8 @@ apply_eye_damage(H) else if(GLOB.ratvar_awakens) - H.cure_nearsighted() - H.cure_blind() + H.cure_nearsighted(list(EYE_DAMAGE)) + H.cure_blind(list(EYE_DAMAGE)) H.adjust_eye_damage(-eye_damage_done) eye_damage_done = 0 else if(prob(50) && eye_damage_done) @@ -153,17 +153,20 @@ qdel(src) /datum/status_effect/wraith_spectacles/proc/apply_eye_damage(mob/living/carbon/human/H) - if(H.disabilities & BLIND) + if(H.has_disability(DISABILITY_BLIND)) return H.adjust_eye_damage(0.5) eye_damage_done += 0.5 if(eye_damage_done >= 20) H.adjust_blurriness(2) if(eye_damage_done >= nearsight_breakpoint) - if(H.become_nearsighted()) - to_chat(H, "Your vision doubles, then trebles. Darkness begins to close in. You can't keep this up!") + if(!H.has_disability(DISABILITY_NEARSIGHT)) + to_chat(H, "Your vision doubles, then trembles. Darkness begins to close in. You can't keep this up!") + H.become_nearsighted(EYE_DAMAGE) if(eye_damage_done >= blind_breakpoint) - if(H.become_blind()) + if(!H.has_disability(DISABILITY_BLIND)) to_chat(H, "A piercing white light floods your vision. Suddenly, all goes dark!") + H.become_blind(EYE_DAMAGE) + if(prob(min(20, 5 + eye_damage_done))) to_chat(H, "Your eyes continue to burn.") diff --git a/code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm b/code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm index 8416e4651d..b53caee281 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs/_eminence.dm @@ -1,3 +1,7 @@ +//Helper proc to get an Eminence mob if it exists +/proc/get_eminence() + return locate(/mob/camera/eminence) in servants_and_ghosts() + //The Eminence is a unique mob that functions like the leader of the cult. It's incorporeal but can interact with the world in several ways. /mob/camera/eminence name = "\the Emininence" @@ -12,6 +16,7 @@ layer = FLY_LAYER faction = list("ratvar") lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + var/turf/last_failed_turf var/static/superheated_walls = 0 /mob/camera/eminence/CanPass(atom/movable/mover, turf/target) @@ -20,25 +25,38 @@ /mob/camera/eminence/Move(NewLoc, direct) var/OldLoc = loc if(NewLoc && !istype(NewLoc, /turf/open/indestructible/reebe_void)) - forceMove(get_turf(NewLoc)) + var/turf/T = get_turf(NewLoc) + if(T.flags_1 & NOJAUNT_1) + if(last_failed_turf != T) + T.visible_message("[T] suddenly emits a ringing sound!", ignore_mob = src) + playsound(T, 'sound/machines/clockcult/ark_damage.ogg', 75, FALSE) + last_failed_turf = T + to_chat(src, "This turf is consecrated and can't be crossed!") + return + if(!GLOB.ratvar_awakens && istype(get_area(T), /area/chapel)) + to_chat(src, "The Chapel is hallowed ground under a heretical deity, and can't be accessed!") + return + forceMove(T) Moved(OldLoc, direct) if(GLOB.ratvar_awakens) for(var/turf/T in range(5, src)) if(prob(166 - (get_dist(src, T) * 33))) T.ratvar_act() //Causes moving to leave a swath of proselytized area behind the Eminence +/mob/camera/eminence/Process_Spacemove(movement_dir = 0) + return TRUE + /mob/camera/eminence/Login() ..() + add_servant_of_ratvar(src, TRUE) var/datum/antagonist/clockcult/C = mind.has_antag_datum(/datum/antagonist/clockcult,TRUE) - if(!C) - add_servant_of_ratvar(src, TRUE) - C = mind.has_antag_datum(/datum/antagonist/clockcult,TRUE) - if(C && C.clock_team) - if(C.clock_team.eminence) - remove_servant_of_ratvar(src,TRUE) - qdel(src) - else - C.clock_team.eminence = src + if(C && C.clock_team) + if(C.clock_team.eminence && C.clock_team.eminence != src) + remove_servant_of_ratvar(src,TRUE) + qdel(src) + return + else + C.clock_team.eminence = src to_chat(src, "You have been selected as the Eminence!") to_chat(src, "As the Eminence, you lead the servants. Anything you say will be heard by the entire cult.") to_chat(src, "Though you can move through walls, you're also incorporeal, and largely can't interact with the world except for a few ways.") @@ -53,6 +71,12 @@ E.Grant(src) /mob/camera/eminence/say(message) + if(client) + if(client.prefs.muted & MUTE_IC) + to_chat(src, "You cannot send IC messages (muted).") + return + if(client.handle_spam_prevention(message,MUTE_IC)) + return message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) if(!message) return @@ -60,10 +84,16 @@ if(GLOB.ratvar_awakens) visible_message("You feel light slam into your mind and form words: \"[capitalize(message)]\"") playsound(src, 'sound/machines/clockcult/ark_scream.ogg', 50, FALSE) - hierophant_message("The Eminence: \"[message]\"") + message = "The [GLOB.ratvar_awakens ? "Radiance" : "Eminence"]: \"[message]\"" + for(var/mob/M in servants_and_ghosts()) + if(isobserver(M)) + var/link = FOLLOW_LINK(M, src) + to_chat(M, "[link] [message]") + else + to_chat(M, message) /mob/camera/eminence/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) - if(z == ZLEVEL_CITYOFCOGS || is_servant_of_ratvar(speaker) || GLOB.ratvar_approaches || GLOB.ratvar_awakens) //Away from Reebe, the Eminence can't hear anything + if(is_reebe(z) || is_servant_of_ratvar(speaker) || GLOB.ratvar_approaches || GLOB.ratvar_awakens) //Away from Reebe, the Eminence can't hear anything to_chat(src, message) return to_chat(src, "[speaker] says something, but you can't understand any of it...") @@ -233,7 +263,7 @@ button_icon_state = "warp_down" /datum/action/innate/eminence/station_jump/Activate() - if(owner.z == ZLEVEL_CITYOFCOGS) + if(is_reebe(owner.z)) owner.forceMove(get_turf(pick(GLOB.generic_event_spawns))) owner.playsound_local(owner, 'sound/magic/magic_missile.ogg', 50, TRUE) flash_color(owner, flash_color = "#AF0AAF", flash_time = 25) diff --git a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm index 562814dfeb..73bcd6b47f 100644 --- a/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm +++ b/code/game/gamemodes/clock_cult/clock_mobs/clockwork_marauder.dm @@ -21,7 +21,7 @@ loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) light_range = 2 light_power = 1.1 - playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \ + playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \ unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!

Obey the Servants and do as they \ tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.
" empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable." diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm index 94983923f9..046196f03a 100644 --- a/code/game/gamemodes/clock_cult/clock_scripture.dm +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -126,7 +126,7 @@ Applications: 8 servants, 3 caches, and 100 CV /datum/clockwork_scripture/proc/check_offstation_penalty() var/turf/T = get_turf(invoker) - if(!T || (!(T.z in GLOB.station_z_levels) && T.z != ZLEVEL_CENTCOM && T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND && T.z != ZLEVEL_CITYOFCOGS)) + if(!T || (!is_centcom_level(T.z) && !is_station_level(T.z) && !is_mining_level(T.z) && !is_reebe(T.z))) channel_time *= 2 power_cost *= 2 return TRUE @@ -262,7 +262,7 @@ Applications: 8 servants, 3 caches, and 100 CV to_chat(invoker, "There are too many constructs of this type ([constructs])! You may only have [round(construct_limit)] at once.") return var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar - if(G && !G.active && combat_construct && invoker.z == ZLEVEL_CITYOFCOGS && !confirmed) //Putting marauders on the base during the prep phase is a bad idea mmkay + if(G && !G.active && combat_construct && is_reebe(invoker.z) && !confirmed) //Putting marauders on the base during the prep phase is a bad idea mmkay if(alert(invoker, "This is a combat construct, and you cannot easily get it to the station. Are you sure you want to make one here?", "Construct Alert", "Yes", "Cancel") == "Cancel") return if(!is_servant_of_ratvar(invoker) || !invoker.canUseTopic(slab)) diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm index 8275e4d20e..7e05e6a187 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm @@ -209,7 +209,7 @@ quickbind_desc = "Returns you to Reebe." /datum/clockwork_scripture/abscond/check_special_requirements() - if(invoker.z == ZLEVEL_CITYOFCOGS) + if(is_reebe(invoker.z)) to_chat(invoker, "You're already at Reebe.") return return TRUE diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm index 09cfeb99d3..c4774fe0ad 100644 --- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm +++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm @@ -70,6 +70,12 @@ quickbind = TRUE quickbind_desc = "Creates a Vitality Matrix, which drains non-Servants on it to heal Servants that cross it." +/datum/clockwork_scripture/create_object/vitality_matrix/check_special_requirements() + if(locate(object_path) in range(1, invoker)) + to_chat(invoker, "Vitality matrices placed next to each other could interfere and cause a feedback loop! Move away from the other ones!") + return FALSE + return ..() + //Judicial Visor: Creates a judicial visor, which can smite an area. /datum/clockwork_scripture/create_object/judicial_visor diff --git a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm index 63fea1eeb6..36a74ec62b 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ark_of_the_clockwork_justicar.dm @@ -1,5 +1,11 @@ #define ARK_GRACE_PERIOD 300 //In seconds, how long the crew has before the Ark truly "begins" +/proc/clockwork_ark_active() //A helper proc so the Ark doesn't have to be typecast every time it's checked; returns null if there is no Ark and its active var otherwise + var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar + if(!G) + return + return G.active + //The gateway to Reebe, from which Ratvar emerges. /obj/structure/destructible/clockwork/massive/celestial_gateway name = "\improper Ark of the Clockwork Justicar" @@ -63,7 +69,7 @@ /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/cry_havoc() visible_message("[src] shudders and roars to life, its parts beginning to whirr and screech!") - hierophant_message("The Ark is activating! Get back to the base!") + hierophant_message("The Ark is activating! You will be transported there soon!") for(var/mob/M in GLOB.player_list) if(is_servant_of_ratvar(M) || isobserver(M) || M.z == z) M.playsound_local(M, 'sound/magic/clockwork/ark_activation_sequence.ogg', 30, FALSE, pressure_affected = FALSE) @@ -86,6 +92,8 @@ var/datum/stack_recipe/R = V if(R.title == "wall gear") R.time *= 2 //Building walls becomes slower when the Ark activates + mass_recall() + recalls_remaining++ //So it doesn't use up a charge /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/open_portal(turf/T) new/obj/effect/clockwork/city_of_cogs_rift(T) @@ -113,7 +121,7 @@ /obj/structure/destructible/clockwork/massive/celestial_gateway/proc/mass_recall() for(var/V in SSticker.mode.servants_of_ratvar) var/datum/mind/M = V - if(!M.current.stat) + if(M.current.stat != DEAD) M.current.forceMove(get_turf(src)) M.current.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) M.current.clear_fullscreen("flash", 5) @@ -261,6 +269,12 @@ if(!step_away(O, src, 2) || get_dist(O, src) < 2) O.take_damage(50, BURN, "bomb") O.update_icon() + for(var/V in GLOB.player_list) + var/mob/M = V + if(is_servant_of_ratvar(M) && M.z != z) + M.forceMove(get_step(src, SOUTH)) + M.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + M.clear_fullscreen("flash", 5) if(grace_period) grace_period-- return diff --git a/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm b/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm index 495bfaeaa8..2edaba3b23 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/eminence_spire.dm @@ -38,7 +38,6 @@ /obj/structure/destructible/clockwork/eminence_spire/attack_ghost(mob/user) if(!IsAdminGhost(user)) return - var/datum/antagonist/clockcult/random_cultist = locate() in GLOB.antagonists //if theres no cultists new team without eminence will be created anyway. if(random_cultist && random_cultist.clock_team && random_cultist.clock_team.eminence) to_chat(user, "There's already an Eminence - too late!") diff --git a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm index c7aea3df7e..7e538765f3 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm @@ -110,7 +110,7 @@ if(!(BI.resistance_flags & ON_FIRE)) BI.fire_act() continue - if(is_servant_of_ratvar(L) || (L.disabilities & BLIND) || L.null_rod_check()) + if(is_servant_of_ratvar(L) || (L.has_disability(DISABILITY_BLIND)) || L.null_rod_check()) continue if(L.stat || L.restrained() || L.buckled || L.lying) continue diff --git a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm b/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm index f6a7b8e347..fffabe8f5c 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/trap_triggers/pressure_sensor.dm @@ -3,7 +3,7 @@ name = "pressure sensor" desc = "A thin plate of brass, barely visible but clearly distinct." clockwork_desc = "A trigger that will activate when a non-servant runs across it." - max_integrity = 25 + max_integrity = 5 icon_state = "pressure_sensor" alpha = 80 layer = LOW_ITEM_LAYER diff --git a/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm b/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm index d79ca88ecb..c91cf594e8 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/traps/brass_skewer.dm @@ -21,9 +21,10 @@ STOP_PROCESSING(SSfastprocess, src) if(buckled_mobs && buckled_mobs.len) var/mob/living/L = buckled_mobs[1] - L.Knockdown(100) - L.visible_message("[L] is maimed as the skewer shatters while still in their body!") - L.adjustBruteLoss(15) + if(iscarbon(L)) + L.Knockdown(100) + L.visible_message("[L] is maimed as the skewer shatters while still in their body!") + L.adjustBruteLoss(15) unbuckle_mob(L) return ..() @@ -48,14 +49,22 @@ /obj/structure/destructible/clockwork/trap/brass_skewer/activate() if(density) return - var/mob/living/carbon/squirrel = locate() in get_turf(src) + var/mob/living/squirrel = locate() in get_turf(src) if(squirrel) - squirrel.visible_message("A massive brass spike erupts from the ground, impaling [squirrel]!", \ - "A massive brass spike rams through your chest, hoisting you into the air!") - squirrel.emote("scream") - playsound(squirrel, 'sound/effects/splat.ogg', 50, TRUE) - playsound(squirrel, 'sound/misc/desceration-03.ogg', 50, TRUE) - squirrel.apply_damage(20, BRUTE, "chest") + if(iscyborg(squirrel)) + if(!squirrel.stat) + squirrel.visible_message("A massive brass spike erupts from the ground, rending [squirrel]'s chassis but shattering into pieces!", \ + "A massive brass spike rips through your chassis and bursts into shrapnel in your casing!") + squirrel.adjustBruteLoss(50) + squirrel.Stun(20) + addtimer(CALLBACK(src, .proc/take_damage, max_integrity), 1) + else + squirrel.visible_message("A massive brass spike erupts from the ground, impaling [squirrel]!", \ + "A massive brass spike rams through your chest, hoisting you into the air!") + squirrel.emote("scream") + playsound(squirrel, 'sound/effects/splat.ogg', 50, TRUE) + playsound(squirrel, 'sound/misc/desceration-03.ogg', 50, TRUE) + squirrel.apply_damage(20, BRUTE, "chest") mouse_opacity = MOUSE_OPACITY_OPAQUE //So players can interact with the tile it's on to pull them off buckle_mob(squirrel, TRUE) else diff --git a/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm b/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm index 1463ca6ac0..b1734b3aef 100644 --- a/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm +++ b/code/game/gamemodes/clock_cult/clock_structures/wall_gear.dm @@ -59,9 +59,9 @@ brass_floor = TRUE if(W.use(2 - brass_floor)) if(anchored) - T.ChangeTurf(/turf/closed/wall/clockwork) + T.PlaceOnTop(/turf/closed/wall/clockwork) else - T.ChangeTurf(/turf/open/floor/clockwork) + T.PlaceOnTop(/turf/open/floor/clockwork) new /obj/structure/falsewall/brass(T) qdel(src) else diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index da222fe521..1ce45eaace 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -163,7 +163,7 @@ /obj/item/twohanded/required/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) . = ..() - if(dash_toggled && jaunt.IsAvailable()) + if(dash_toggled) jaunt.Teleport(user, target) return if(!proximity) @@ -577,21 +577,21 @@ if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) return if(!cultist_to_receive) - to_chat(user, "You require a destination!") + to_chat(user, "You require a destination!") log_game("Void torch failed - no target") return if(cultist_to_receive.stat == DEAD) - to_chat(user, "[cultist_to_receive] has died!") + to_chat(user, "[cultist_to_receive] has died!") log_game("Void torch failed - target died") return if(!iscultist(cultist_to_receive)) - to_chat(user, "[cultist_to_receive] is not a follower of the Geometer!") + to_chat(user, "[cultist_to_receive] is not a follower of the Geometer!") log_game("Void torch failed - target was deconverted") return if(A in user.GetAllContents()) - to_chat(user, "[A] must be on a surface in order to teleport it!") + to_chat(user, "[A] must be on a surface in order to teleport it!") return - to_chat(user, "You ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!") + to_chat(user, "You ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!") cultist_to_receive.put_in_hands(A) charges-- to_chat(user, "\The [src] now has [charges] charge\s.") diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 440dfaede6..a921868f22 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -10,7 +10,7 @@ ..() to_chat(user, "\The [src] is [anchored ? "":"not "]secured to the floor.") if((iscultist(user) || isobserver(user)) && cooldowntime > world.time) - to_chat(user, "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") + to_chat(user, "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") /obj/structure/destructible/cult/examine_status(mob/user) if(iscultist(user) || isobserver(user)) @@ -62,10 +62,10 @@ to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it.") return if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with a tome first.") + to_chat(user, "You need to anchor [src] to the floor with a tome first.") return if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") + to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") return var/choice = alert(user,"You study the schematics etched into the forge...",,"Eldritch Whetstone","Zealot's Blindfold","Flask of Unholy Water") var/pickedtype @@ -79,7 +79,7 @@ if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) - to_chat(user, "You kneel before the altar and your faith is rewarded with an [N]!") + to_chat(user, "You kneel before the altar and your faith is rewarded with an [N]!") /obj/structure/destructible/cult/forge @@ -95,15 +95,14 @@ to_chat(user, "The heat radiating from [src] pushes you back.") return if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with a tome first.") + to_chat(user, "You need to anchor [src] to the floor with a tome first.") return if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") + to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") return - var/option = "Shielded Robe" - option = input(user, "You study the schematics etched into the forge...", "[src]", option) as null|anything in list("Shielded Robe", "Flagellant's Robe", "Bastard Sword", "Nar-Sien Hardsuit") + var/choice = alert(user,"You study the schematics etched into the forge...",,"Shielded Robe","Flagellant's Robe","Bastard Sword") var/pickedtype - switch(option) + switch(choice) if("Shielded Robe") pickedtype = /obj/item/clothing/suit/hooded/cultrobes/cult_shield if("Flagellant's Robe") @@ -113,16 +112,13 @@ pickedtype = /obj/item/twohanded/required/cult_bastard else cooldowntime = 12000 - (world.time - SSticker.round_start_time) - to_chat(user, "The forge fires are not yet hot enough for this weapon, give it another [DisplayTimeText(cooldowntime)].") + to_chat(user, "The forge fires are not yet hot enough for this weapon, give it another [DisplayTimeText(cooldowntime)].") cooldowntime = 0 return - if("Nar-Sien Hardsuit") - pickedtype = /obj/item/clothing/suit/space/hardsuit/cult - if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) cooldowntime = world.time + 2400 var/obj/item/N = new pickedtype(get_turf(src)) - to_chat(user, "You work the forge as dark knowledge guides your hands, creating [N]!") + to_chat(user, "You work the forge as dark knowledge guides your hands, creating [N]!") @@ -212,10 +208,10 @@ to_chat(user, "All of these books seem to be gibberish.") return if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with a tome first.") + to_chat(user, "You need to anchor [src] to the floor with a tome first.") return if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") + to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") return var/choice = alert(user,"You flip through the black pages of the archives...",,"Supply Talisman","Shuttle Curse","Veil Walker Set") var/list/pickedtype = list() @@ -231,7 +227,7 @@ cooldowntime = world.time + 2400 for(var/N in pickedtype) var/obj/item/D = new N(get_turf(src)) - to_chat(user, "You summon [D] from the archives!") + to_chat(user, "You summon [D] from the archives!") /obj/effect/gateway name = "gateway" diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index f0934b524f..3f05cb4bfe 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -203,7 +203,7 @@ This file contains the arcane tome files. A = get_area(src) if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) return - + //AAAAAAAAAAAAAAAH, i'm rewriting enough for now so TODO: remove this shit if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) if(!summon_objective) @@ -266,7 +266,7 @@ This file contains the arcane tome files. to_chat(user, "There is already a rune here.") return FALSE - if(!(T.z in GLOB.station_z_levels) && T.z != ZLEVEL_MINING) + if(!is_station_level(T.z) && !is_mining_level(T.z)) to_chat(user, "The veil is not weak enough here.") return FALSE diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ff85499029..2ddf5b05ee 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -115,7 +115,7 @@ structure_check() searches for nearby cultist structures required for the invoca continue if(ishuman(L)) var/mob/living/carbon/human/H = L - if((H.disabilities & MUTE) || H.silent) + if((H.has_disability(DISABILITY_MUTE)) || H.silent) continue if(L.stat) continue @@ -140,7 +140,7 @@ structure_check() searches for nearby cultist structures required for the invoca L.say(invocation, language = /datum/language/common, ignore_spam = TRUE) if(invoke_damage) L.apply_damage(invoke_damage, BRUTE) - to_chat(L, "[src] saps your strength!") + to_chat(L, "[src] saps your strength!") do_invoke_glow() /obj/effect/rune/proc/do_invoke_glow() @@ -201,12 +201,12 @@ structure_check() searches for nearby cultist structures required for the invoca var/obj/item/paper/talisman/talisman_type var/list/possible_talismans = list() if(!papers_on_rune.len) - to_chat(user, "There must be a blank paper on top of [src]!") + to_chat(user, "There must be a blank paper on top of [src]!") fail_invoke() log_game("Talisman Creation rune failed - no blank papers on rune") return if(rune_in_use) - to_chat(user, "[src] can only support one ritual at a time!") + to_chat(user, "[src] can only support one ritual at a time!") fail_invoke() log_game("Talisman Creation rune failed - already in use") return @@ -222,7 +222,7 @@ structure_check() searches for nearby cultist structures required for the invoca return papers_on_rune = checkpapers() if(!papers_on_rune.len) - to_chat(user, "There must be a blank paper on top of [src]!") + to_chat(user, "There must be a blank paper on top of [src]!") fail_invoke() log_game("Talisman Creation rune failed - no blank papers on rune") return @@ -268,7 +268,7 @@ structure_check() searches for nearby cultist structures required for the invoca var/list/teleportnames = list() for(var/R in GLOB.teleport_runes) var/obj/effect/rune/teleport/T = R - if(T != src && (T.z <= ZLEVEL_SPACEMAX)) + if(T != src && !is_away_level(T.z)) potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T if(!potential_runes.len) @@ -277,8 +277,9 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return - if(user.z > ZLEVEL_SPACEMAX) - to_chat(user, "You are not in the right dimension!") + var/turf/T = get_turf(src) + if(is_away_level(T.z)) + to_chat(user, "You are not in the right dimension!") log_game("Teleport rune failed - user in away mission") fail_invoke() return @@ -289,7 +290,6 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return - var/turf/T = get_turf(src) var/turf/target = get_turf(actual_selected_rune) if(is_blocked_turf(target, TRUE)) to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") @@ -394,9 +394,9 @@ structure_check() searches for nearby cultist structures required for the invoca SSticker.mode.add_cultist(convertee.mind, 1) new /obj/item/tome(get_turf(src)) convertee.mind.special_role = "Cultist" - to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ + to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ and something evil takes root.") - to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ + to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ ") return 1 @@ -412,7 +412,7 @@ structure_check() searches for nearby cultist structures required for the invoca var/big_sac = FALSE if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) for(var/M in invokers) - to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") + to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") log_game("Offer rune failed - not enough acolytes and target is living or sac target") return FALSE if(sacrificial.mind) @@ -479,13 +479,14 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/narsie/invoke(var/list/invokers) if(used) return - if(!(z in GLOB.station_z_levels)) + if(!is_station_level(z)) return if(locate(/obj/singularity/narsie) in GLOB.poi_list) for(var/M in invokers) - to_chat(M, "Nar-Sie is already on this plane!") - log_game("Summon Nar-Sie rune failed - already summoned") + to_chat(M, "[src] fizzles uselessly, Nar-Sie is already on this plane!") + playsound(src, 'sound/items/welder.ogg', 50, 1) + log_game("Summon Nar-Sie rune at [COORD(src)] failed - already summoned") return //BEGIN THE SUMMONING used = TRUE @@ -493,6 +494,10 @@ structure_check() searches for nearby cultist structures required for the invoca sound_to_playing_players('sound/effects/dimensional_rend.ogg') var/turf/T = get_turf(src) sleep(40) + if(locate(/obj/singularity/narsie) in GLOB.poi_list) + T.visible_message("A faint fizzle could be heard echoing along with a soft chorus of screams and chanting...") + playsound(T, 'sound/items/welder.ogg', 25, 1) + return if(src) color = RUNE_COLOR_RED new /obj/singularity/narsie/large/cult(T) //Causes Nar-Sie to spawn even if the rune has been removed @@ -510,10 +515,10 @@ structure_check() searches for nearby cultist structures required for the invoca message_admins("[key_name_admin(user)] erased a Narsie rune with a null rod") ..() -//Rite of Resurrection: Requires the corpse of a cultist and that there have been less revives than the number of people GLOB.sacrificed +//Rite of Resurrection: Requires a dead or inactive cultist. When reviving the dead, you can only perform one revival for every sacrifice your cult has carried out. /obj/effect/rune/raise_dead - cultist_name = "Resurrect Cultist" - cultist_desc = "requires the corpse of a cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be revived." + cultist_name = "Revive Cultist" + cultist_desc = "requires a dead, mindless, or inactive cultist placed upon the rune. Provided there have been sufficient sacrifices, they will be given a new life." invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below icon_state = "1" color = RUNE_COLOR_MEDIUMRED @@ -534,16 +539,11 @@ structure_check() searches for nearby cultist structures required for the invoca return rune_in_use = TRUE for(var/mob/living/M in T.contents) - if(iscultist(M) && M.stat == DEAD) + if(iscultist(M) && (M.stat == DEAD || !M.client || M.client.is_afk())) potential_revive_mobs |= M if(!potential_revive_mobs.len) - to_chat(user, "There are no dead cultists on the rune!") - log_game("Raise Dead rune failed - no corpses to revive") - fail_invoke() - rune_in_use = FALSE - return - if(LAZYLEN(GLOB.sacrificed) <= revives_used) - to_chat(user, "You have sacrificed too few people to revive a cultist!") + to_chat(user, "There are no dead cultists on the rune!") + log_game("Raise Dead rune failed - no cultists to revive") fail_invoke() rune_in_use = FALSE return @@ -559,9 +559,25 @@ structure_check() searches for nearby cultist structures required for the invoca else invocation = initial(invocation) ..() - revives_used++ - mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it! - mob_to_revive.grab_ghost() + if(mob_to_revive.stat == DEAD) + if(LAZYLEN(GLOB.sacrificed) <= revives_used) + to_chat(user, "Your cult must carry out another sacrifice before it can revive a cultist!") + fail_invoke() + rune_in_use = FALSE + return + revives_used++ + mob_to_revive.revive(1, 1) //This does remove disabilities and such, but the rune might actually see some use because of it! + mob_to_revive.grab_ghost() + else if(!mob_to_revive.client || mob_to_revive.client.is_afk()) + set waitfor = FALSE + var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", "[name]", null, "Blood Cultist", 50, mob_to_revive) + var/mob/dead/observer/theghost = null + if(candidates.len) + theghost = pick(candidates) + to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.") + message_admins("[key_name_admin(theghost)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.") + mob_to_revive.ghostize(0) + mob_to_revive.key = theghost.key to_chat(mob_to_revive, "\"PASNAR SAVRAE YAM'TOTH. Arise.\"") mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes.", \ "You awaken suddenly from the void. You're alive!") @@ -577,13 +593,13 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return FALSE if(!(target_mob in T.contents)) - to_chat(user, "The cultist to revive has been moved!") + to_chat(user, "The cultist to revive has been moved!") fail_invoke() log_game("Raise Dead rune failed - revival target moved") return FALSE var/mob/dead/observer/ghost = target_mob.get_ghost(TRUE) if(!ghost && (!target_mob.mind || !target_mob.mind.active)) - to_chat(user, "The corpse to revive has no spirit!") + to_chat(user, "The corpse to revive has no spirit!") fail_invoke() log_game("Raise Dead rune failed - revival target has no ghost") return FALSE @@ -650,16 +666,16 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/spirit/examine(mob/user) ..() if(affecting) - to_chat(user, "A translucent field encases [affecting] above the rune!") + to_chat(user, "A translucent field encases [affecting] above the rune!") /obj/effect/rune/spirit/can_invoke(mob/living/user) if(rune_in_use) - to_chat(user, "[src] cannot support more than one body!") + to_chat(user, "[src] cannot support more than one body!") log_game("Spirit Sight rune failed - more than one user") return list() var/turf/T = get_turf(src) if(!(user in T)) - to_chat(user, "You must be standing on top of [src]!") + to_chat(user, "You must be standing on top of [src]!") log_game("Spirit Sight rune failed - user not standing on rune") return list() return ..() @@ -689,11 +705,11 @@ structure_check() searches for nearby cultist structures required for the invoca if(affecting.stat == UNCONSCIOUS) if(prob(1)) var/mob/dead/observer/G = affecting.get_ghost() - to_chat(G, "You feel the link between you and your body weakening... you must hurry!") + to_chat(G, "You feel the link between you and your body weakening... you must hurry!") else if(affecting.stat == DEAD) affecting.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED) var/mob/dead/observer/G = affecting.get_ghost() - to_chat(G, "You suddenly feel your physical form pass on. [src]'s exertion has killed you!") + to_chat(G, "You suddenly feel your physical form pass on. [src]'s exertion has killed you!") break sleep(1) affecting = null @@ -717,7 +733,7 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/wall/examine(mob/user) ..() if(density) - to_chat(user, "There is a barely perceptible shimmering of the air above [src].") + to_chat(user, "There is a barely perceptible shimmering of the air above [src].") /obj/effect/rune/wall/Destroy() density = FALSE @@ -739,7 +755,7 @@ structure_check() searches for nearby cultist structures required for the invoca spread_density() var/carbon_user = iscarbon(user) user.visible_message("[user] [carbon_user ? "places [user.p_their()] hands on":"stares intently at"] [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].", \ - "You channel [carbon_user ? "your life ":""]energy into [src], [density ? "temporarily preventing" : "allowing"] passage above it.") + "You channel [carbon_user ? "your life ":""]energy into [src], [density ? "temporarily preventing" : "allowing"] passage above it.") if(carbon_user) var/mob/living/carbon/C = user C.apply_damage(2, BRUTE, pick("l_arm", "r_arm")) @@ -801,27 +817,27 @@ structure_check() searches for nearby cultist structures required for the invoca if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) return if(!cultist_to_summon) - to_chat(user, "You require a summoning target!") + to_chat(user, "You require a summoning target!") fail_invoke() log_game("Summon Cultist rune failed - no target") return if(cultist_to_summon.stat == DEAD) - to_chat(user, "[cultist_to_summon] has died!") + to_chat(user, "[cultist_to_summon] has died!") fail_invoke() log_game("Summon Cultist rune failed - target died") return if(!iscultist(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not a follower of the Geometer!") + to_chat(user, "[cultist_to_summon] is not a follower of the Geometer!") fail_invoke() log_game("Summon Cultist rune failed - target was deconverted") return - if(cultist_to_summon.z > ZLEVEL_SPACEMAX) - to_chat(user, "[cultist_to_summon] is not in our dimension!") + if(is_away_level(cultist_to_summon.z)) + to_chat(user, "[cultist_to_summon] is not in our dimension!") fail_invoke() log_game("Summon Cultist rune failed - target in away mission") return cultist_to_summon.visible_message("[cultist_to_summon] suddenly disappears in a flash of red light!", \ - "Overwhelming vertigo consumes you as you are hurled through the air!") + "Overwhelming vertigo consumes you as you are hurled through the air!") ..() visible_message("A foggy shape materializes atop [src] and solidifes into [cultist_to_summon]!") cultist_to_summon.forceMove(get_turf(src)) @@ -909,17 +925,17 @@ structure_check() searches for nearby cultist structures required for the invoca /obj/effect/rune/manifest/can_invoke(mob/living/user) if(!(user in get_turf(src))) - to_chat(user, "You must be standing on [src]!") + to_chat(user, "You must be standing on [src]!") fail_invoke() log_game("Manifest rune failed - user not standing on rune") return list() if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) - to_chat(user, "Ghosts can't summon more ghosts!") + to_chat(user, "Ghosts can't summon more ghosts!") fail_invoke() log_game("Manifest rune failed - user is a ghost") return list() if(ghosts >= ghost_limit) - to_chat(user, "You are sustaining too many ghosts to summon more!") + to_chat(user, "You are sustaining too many ghosts to summon more!") fail_invoke() log_game("Manifest rune failed - too many summoned ghosts") return list() @@ -928,7 +944,7 @@ structure_check() searches for nearby cultist structures required for the invoca if(O.client && !jobban_isbanned(O, ROLE_CULTIST)) ghosts_on_rune += O if(!ghosts_on_rune.len) - to_chat(user, "There are no spirits near [src]!") + to_chat(user, "There are no spirits near [src]!") fail_invoke() log_game("Manifest rune failed - no nearby ghosts") return list() @@ -950,13 +966,13 @@ structure_check() searches for nearby cultist structures required for the invoca ghosts++ playsound(src, 'sound/magic/exit_blood.ogg', 50, 1) visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") - to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") + to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") var/turf/T = get_turf(src) var/obj/structure/emergency_shield/invoker/N = new(T) new_human.key = ghost_to_spawn.key SSticker.mode.add_cultist(new_human.mind, 0) - to_chat(new_human, "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar-Sie, and you are to serve them at all costs.") + to_chat(new_human, "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar-Sie, and you are to serve them at all costs.") while(!QDELETED(src) && !QDELETED(user) && !QDELETED(new_human) && (user in T)) if(user.stat || new_human.InCritical()) diff --git a/code/game/gamemodes/cult/talisman.dm b/code/game/gamemodes/cult/talisman.dm index e3792b6be4..588b45d5f6 100644 --- a/code/game/gamemodes/cult/talisman.dm +++ b/code/game/gamemodes/cult/talisman.dm @@ -39,7 +39,7 @@ invocation = "Ra'sha yoka!" /obj/item/paper/talisman/malformed/invoke(mob/living/user, successfuluse = 1) - to_chat(user, "You feel a pain in your head. The Geometer is displeased.") + to_chat(user, "You feel a pain in your head. The Geometer is displeased.") if(iscarbon(user)) var/mob/living/carbon/C = user C.apply_damage(10, BRUTE, "head") @@ -65,8 +65,8 @@ log_game("Teleport talisman failed - no other teleport runes") return ..(user, 0) - if(user.z > ZLEVEL_SPACEMAX) - to_chat(user, "You are not in the right dimension!") + if(is_away_level(user.z)) + to_chat(user, "You are not in the right dimension!") log_game("Teleport talisman failed - user in away mission") return ..(user, 0) @@ -79,7 +79,7 @@ to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") return ..(user, 0) user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \ - "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") + "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") user.forceMove(target) target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") return ..() @@ -96,10 +96,10 @@ /obj/item/paper/talisman/summon_tome/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("[user]'s hand glows red for a moment.", \ - "You speak the words of the talisman!") + "You speak the words of the talisman!") new /obj/item/tome(get_turf(user)) user.visible_message("A tome appears at [user]'s feet!", \ - "An arcane tome materializes at your feet.") + "An arcane tome materializes at your feet.") /obj/item/paper/talisman/true_sight cultist_name = "Talisman of Veiling" @@ -115,14 +115,14 @@ . = ..() if(!revealing) user.visible_message("Thin grey dust falls from [user]'s hand!", \ - "You speak the words of the talisman, hiding nearby runes.") + "You speak the words of the talisman, hiding nearby runes.") invocation = "Nikt'o barada kla'atu!" revealing = TRUE for(var/obj/effect/rune/R in range(4,user)) R.talismanhide() else user.visible_message("A flash of light shines from [user]'s hand!", \ - "You speak the words of the talisman, revealing nearby runes.") + "You speak the words of the talisman, revealing nearby runes.") for(var/obj/effect/rune/R in range(3,user)) R.talismanreveal() @@ -137,7 +137,7 @@ /obj/item/paper/talisman/emp/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("[user]'s hand flashes a bright blue!", \ - "You speak the words of the talisman, emitting an EMP blast.") + "You speak the words of the talisman, emitting an EMP blast.") empulse(src, 4, 8) @@ -162,7 +162,7 @@ if(iscultist(user)) invoke(user, 1) user.visible_message("[user] holds up [src], which explodes in a flash of red light!", \ - "You stun [target] with the talisman!") + "You stun [target] with the talisman!") var/obj/item/nullrod/N = locate() in target if(N) target.visible_message("[target]'s holy weapon absorbs the talisman's light!", \ @@ -197,7 +197,7 @@ /obj/item/paper/talisman/armor/invoke(mob/living/user, successfuluse = 1) . = ..() user.visible_message("Otherworldly armor suddenly appears on [user]!", \ - "You speak the words of the talisman, arming yourself!") + "You speak the words of the talisman, arming yourself!") user.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head) user.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit) user.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes) @@ -226,7 +226,7 @@ /obj/item/paper/talisman/horror/afterattack(mob/living/target, mob/living/user) if(iscultist(user) && (get_dist(user, target) < 7)) if(iscarbon(target)) - to_chat(user, "You disturb [target] with visions of madness!") + to_chat(user, "You disturb [target] with visions of madness!") var/mob/living/carbon/H = target H.reagents.add_reagent("mindbreaker", 12) if(is_servant_of_ratvar(target)) @@ -254,7 +254,7 @@ /obj/item/paper/talisman/construction/attack(obj/M,mob/living/user) if(iscultist(user)) - to_chat(user, "This talisman will only work on a stack of metal or plasteel sheets!") + to_chat(user, "This talisman will only work on a stack of metal or plasteel sheets!") log_game("Construct talisman failed - not a valid target") else ..() @@ -306,7 +306,7 @@ /obj/item/paper/talisman/shackle/attack(mob/living/carbon/target, mob/living/user) if(iscultist(user) && istype(target)) if(target.stat == DEAD) - user.visible_message("This talisman's magic does not affect the dead!") + user.visible_message("This talisman's magic does not affect the dead!") return CuffAttack(target, user) return diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm index 70ed6dfc1d..88ff9f1668 100644 --- a/code/game/gamemodes/devil/imp/imp.dm +++ b/code/game/gamemodes/devil/imp/imp.dm @@ -34,7 +34,7 @@ var/boost = 0 bloodcrawl = BLOODCRAWL_EAT var/list/consumed_mobs = list() - var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ + var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ of intentionally harming a fellow devil." diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm index 10f0b3393f..c1197a5742 100644 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ b/code/game/gamemodes/devil/true_devil/_true_devil.dm @@ -67,10 +67,7 @@ //Left hand items for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It is holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It is holding [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Braindead if(!client && stat != DEAD) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 743a4aea3c..6013b48016 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -1,7 +1,7 @@ /proc/power_failure() priority_announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", 'sound/ai/poweroff.ogg') for(var/obj/machinery/power/smes/S in GLOB.machines) - if(istype(get_area(S), /area/ai_monitored/turret_protected) || !(S.z in GLOB.station_z_levels)) + if(istype(get_area(S), /area/ai_monitored/turret_protected) || !is_station_level(S.z)) continue S.charge = 0 S.output_level = 0 @@ -22,7 +22,7 @@ break if(A.contents) for(var/atom/AT in A.contents) - if(!(AT.z in GLOB.station_z_levels)) //Only check one, it's enough. + if(!is_station_level(AT.z)) //Only check one, it's enough. skip = 1 break if(skip) @@ -33,7 +33,7 @@ A.power_change() for(var/obj/machinery/power/apc/C in GLOB.apcs_list) - if(C.cell && (C.z in GLOB.station_z_levels)) + if(C.cell && is_station_level(C.z)) var/area/A = C.area var/skip = 0 @@ -50,11 +50,11 @@ priority_announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') for(var/obj/machinery/power/apc/C in GLOB.machines) - if(C.cell && (C.z in GLOB.station_z_levels)) + if(C.cell && is_station_level(C.z)) C.cell.charge = C.cell.maxcharge C.failure_timer = 0 for(var/obj/machinery/power/smes/S in GLOB.machines) - if(!(S.z in GLOB.station_z_levels)) + if(!is_station_level(S.z)) continue S.charge = S.capacity S.output_level = S.output_level_max @@ -72,7 +72,7 @@ priority_announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') for(var/obj/machinery/power/smes/S in GLOB.machines) - if(!(S.z in GLOB.station_z_levels)) + if(!is_station_level(S.z)) continue S.charge = S.capacity S.output_level = S.output_level_max diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 1c17893a28..8962476491 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -233,7 +233,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/nuke_station/Activate() var/turf/T = get_turf(owner) - if(!istype(T) || !(T.z in GLOB.station_z_levels)) + if(!istype(T) || !is_station_level(T.z)) to_chat(owner, "You cannot activate the doomsday device while off-station!") return if(alert(owner, "Send arming signal? (true = arm, false = cancel)", "purge_all_life()", "confirm = TRUE;", "confirm = FALSE;") != "confirm = TRUE;") @@ -304,7 +304,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( sleep(30) if(!owner || QDELETED(owner)) return - priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg') + priority_announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/ai/aimalf.ogg') set_security_level("delta") var/obj/machinery/doomsday_device/DOOM = new(owner_AI) owner_AI.nuking = TRUE @@ -356,7 +356,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /obj/machinery/doomsday_device/process() var/turf/T = get_turf(src) - if(!T || !(T.z in GLOB.station_z_levels)) + if(!T || !is_station_level(T.z)) minor_announce("DOOMSDAY DEVICE OUT OF STATION RANGE, ABORTING", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) SSshuttle.clearHostileEnvironment(src) qdel(src) @@ -367,18 +367,18 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( var/sec_left = seconds_remaining() if(!sec_left) timing = FALSE - detonate(T.z) + detonate() else if(world.time >= next_announce) minor_announce("[sec_left] SECONDS UNTIL DOOMSDAY DEVICE ACTIVATION!", "ERROR ER0RR $R0RRO$!R41.%%!!(%$^^__+ @#F0E4", TRUE) next_announce += DOOMSDAY_ANNOUNCE_INTERVAL -/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION_PRIMARY) +/obj/machinery/doomsday_device/proc/detonate() sound_to_playing_players('sound/machines/alarm.ogg') sleep(100) for(var/i in GLOB.mob_living_list) var/mob/living/L = i var/turf/T = get_turf(L) - if(!T || !(T.z in GLOB.station_z_levels)) + if(!T || !is_station_level(T.z)) continue if(issilicon(L)) continue @@ -425,7 +425,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/lockdown/Activate() for(var/obj/machinery/door/D in GLOB.airlocks) - if(!(D.z in GLOB.station_z_levels)) + if(!is_station_level(D.z)) continue INVOKE_ASYNC(D, /obj/machinery/door.proc/hostile_lockdown, owner) addtimer(CALLBACK(D, /obj/machinery/door.proc/disable_lockdown), 900) @@ -503,7 +503,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/break_fire_alarms/Activate() for(var/obj/machinery/firealarm/F in GLOB.machines) - if(!(F.z in GLOB.station_z_levels)) + if(!is_station_level(F.z)) continue F.emagged = TRUE to_chat(owner, "All thermal sensors on the station have been disabled. Fire alerts will no longer be recognized.") @@ -530,7 +530,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/break_air_alarms/Activate() for(var/obj/machinery/airalarm/AA in GLOB.machines) - if(!(AA.z in GLOB.station_z_levels)) + if(!is_station_level(AA.z)) continue AA.emagged = TRUE to_chat(owner, "All air alarm safeties on the station have been overriden. Air alarms may now use the Flood environmental mode.") @@ -753,7 +753,7 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list( /datum/action/innate/ai/emergency_lights/Activate() for(var/obj/machinery/light/L in GLOB.machines) - if(L.z in GLOB.station_z_levels) + if(is_station_level(L.z)) L.no_emergency = TRUE INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE) CHECK_TICK diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 780be71694..9e0c965271 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/Move() if(z != z_original || loc == dest) qdel(src) - return + return FALSE . = ..() //process movement... @@ -317,7 +317,6 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event /obj/effect/meteor/meaty/xeno/New() meteordrop += subtypesof(/obj/item/organ/alien) - meteordrop -= /obj/item/organ/alien/eggsac ..() /obj/effect/meteor/meaty/xeno/ram_turf(turf/T) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 3e7e5f01ef..e74f0c00d7 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -576,8 +576,8 @@ Congratulations! You are now trained for invasive xenobiology research!"} flags_1 = DROPDEL_1 /obj/item/restraints/handcuffs/energy/used/dropped(mob/user) - user.visible_message("[user]'s [src] break in a discharge of energy!", \ - "[user]'s [src] break in a discharge of energy!") + user.visible_message("[user]'s [name] breaks in a discharge of energy!", \ + "[user]'s [name] breaks in a discharge of energy!") var/datum/effect_system/spark_spread/S = new S.set_up(4,0,user.loc) S.start() diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index 508f4e9f13..7e49415834 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -300,11 +300,10 @@ /obj/item/organ/heart/gland/plasma/activate() to_chat(owner, "You feel bloated.") - sleep(150) - if(!owner) - return - to_chat(owner, "A massive stomachache overcomes you.") - sleep(50) + addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, owner, "A massive stomachache overcomes you."), 150) + addtimer(CALLBACK(src, .proc/vomit_plasma), 200) + +/obj/item/organ/heart/gland/plasma/proc/vomit_plasma() if(!owner) return owner.visible_message("[owner] vomits a cloud of plasma!") diff --git a/code/game/gamemodes/miniantags/borer/borer_event.dm b/code/game/gamemodes/miniantags/borer/borer_event.dm index 567adddf53..e036c2a474 100644 --- a/code/game/gamemodes/miniantags/borer/borer_event.dm +++ b/code/game/gamemodes/miniantags/borer/borer_event.dm @@ -27,7 +27,7 @@ if(QDELETED(temp_vent)) continue if(temp_vent.loc.z == ZLEVEL_STATION_PRIMARY && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 3fe32a7f33..729a273c53 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -322,10 +322,6 @@ to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") return FALSE -/obj/machinery/message_server/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") - return FALSE - /obj/machinery/deepfryer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) to_chat(S, "This kitchen appliance should be preserved, it will make delicious unhealthy snacks for our masters in the future. Aborting.") return FALSE @@ -454,7 +450,7 @@ if(target == src) return - if(!(z in GLOB.station_z_levels) && z != ZLEVEL_LAVALAND) + if(!is_station_level(z) && !is_mining_level(z)) to_chat(src, "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area.") return diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm index ff426ab625..15ae0a7fe1 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -1,8 +1,8 @@ /datum/round_event_control/spawn_swarmer name = "Spawn Swarmer Shell" typepath = /datum/round_event/spawn_swarmer - weight = 0 - max_occurrences = 0 //Only once okay fam + weight = 7 + max_occurrences = 1 //Only once okay fam earliest_start = 18000 //30 minutes min_players = 15 @@ -16,7 +16,7 @@ return 0 new /obj/effect/mob_spawn/swarmer(get_turf(GLOB.the_gateway)) if(prob(25)) //25% chance to announce it to the crew - var/swarmer_report = "[command_name()] High-Priority Update" + var/swarmer_report = "[command_name()] High-Priority Update" swarmer_report += "

Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come through." print_command_report(swarmer_report, announce=TRUE) diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/miniantags/monkey/monkey.dm index 8e02d41441..71afe1c823 100644 --- a/code/game/gamemodes/miniantags/monkey/monkey.dm +++ b/code/game/gamemodes/miniantags/monkey/monkey.dm @@ -1,5 +1,6 @@ /datum/game_mode var/list/ape_infectees = list() + var/list/ape_leaders = list() /datum/game_mode/monkey name = "monkey" @@ -21,6 +22,9 @@ var/players_per_carrier = 30 + var/datum/team/monkey/monkey_team + + /datum/game_mode/monkey/pre_setup() carriers_to_make = max(round(num_players()/players_per_carrier, 1), 1) @@ -30,79 +34,59 @@ break var/datum/mind/carrier = pick(antag_candidates) carriers += carrier - carrier.special_role = "monkey" + carrier.special_role = "Monkey Leader" carrier.restricted_roles = restricted_jobs log_game("[carrier.key] (ckey) has been selected as a Jungle Fever carrier") antag_candidates -= carrier if(!carriers.len) - return 0 - return 1 + return FALSE + return TRUE /datum/game_mode/monkey/announce() to_chat(world, "The current game mode is - Monkey!") to_chat(world, "One or more crewmembers have been infected with Jungle Fever! Crew: Contain the outbreak. None of the infected monkeys may escape alive to CentCom. Monkeys: Ensure that your kind lives on! Rise up against your captors!") - -/datum/game_mode/monkey/proc/greet_carrier(datum/mind/carrier) - to_chat(carrier.current, "You are the Jungle Fever patient zero!!
") - to_chat(carrier.current, "You have been planted onto this station by the Animal Rights Consortium.") - to_chat(carrier.current, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.") - to_chat(carrier.current, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.") - to_chat(carrier.current, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.") - carrier.current.playsound_local(get_turf(carrier.current), 'sound/ambience/antag/monkey.ogg', 100, FALSE, pressure_affected = FALSE) - return - /datum/game_mode/monkey/post_setup() for(var/datum/mind/carriermind in carriers) - greet_carrier(carriermind) - ape_infectees += carriermind - - var/datum/disease/D = new /datum/disease/transformation/jungle_fever - D.visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC - D.affected_mob = carriermind.current - carriermind.current.viruses += D - ..() + var/datum/antagonist/monkey/M = add_monkey_leader(carriermind, monkey_team) + if(M) + monkey_team = M.monkey_team + return ..() /datum/game_mode/monkey/check_finished() if((SSshuttle.emergency.mode == SHUTTLE_ENDGAME) || station_was_nuked) - return 1 + return TRUE if(!round_converted) for(var/datum/mind/monkey_mind in ape_infectees) - continuous_sanity_checked = 1 + continuous_sanity_checked = TRUE if(monkey_mind.current && monkey_mind.current.stat != DEAD) - return 0 + return FALSE var/datum/disease/D = new /datum/disease/transformation/jungle_fever() //ugly but unfortunately needed for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(H.mind && H.stat != DEAD) + if(!is_station_level(H.z)) + continue + if(H.mind && H.client && H.stat != DEAD) if(H.HasDisease(D)) - return 0 + return FALSE - ..() + return ..() /datum/game_mode/monkey/proc/check_monkey_victory() if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME) - return 0 + return FALSE var/datum/disease/D = new /datum/disease/transformation/jungle_fever() for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list) if (M.HasDisease(D)) if(M.onCentCom() || M.onSyndieBase()) escaped_monkeys++ if(escaped_monkeys >= monkeys_to_win) - return 1 + return TRUE else - return 0 - -/datum/game_mode/proc/add_monkey(datum/mind/monkey_mind) - ape_infectees |= monkey_mind - monkey_mind.special_role = "Infected Monkey" - -/datum/game_mode/proc/remove_monkey(datum/mind/monkey_mind) - ape_infectees.Remove(monkey_mind) - monkey_mind.special_role = null + return FALSE /datum/game_mode/monkey/set_round_result() @@ -120,3 +104,29 @@ /datum/game_mode/monkey/generate_report() return "Reports of an ancient [pick("retrovirus", "flesh eating bacteria", "disease", "magical curse blamed on viruses", "banana blight")] outbreak that turn humans into monkeys has been reported in your quadrant. Any such infections may be treated with banana juice. If an outbreak occurs, ensure the station is quarantined to prevent a largescale outbreak at CentCom." + +/proc/add_monkey_leader(datum/mind/monkey_mind) + if(is_monkey_leader(monkey_mind)) + return FALSE + var/datum/antagonist/monkey/leader/M = monkey_mind.add_antag_datum(ANTAG_DATUM_MONKEY_LEADER) + return M + +/proc/add_monkey(datum/mind/monkey_mind) + if(is_monkey(monkey_mind)) + return FALSE + var/datum/antagonist/monkey/M = monkey_mind.add_antag_datum(ANTAG_DATUM_MONKEY) + return M + +/proc/remove_monkey(datum/mind/monkey_mind) + if(!is_monkey(monkey_mind)) + return FALSE + var/datum/antagonist/monkey/M = monkey_mind.has_antag_datum(ANTAG_DATUM_MONKEY) + M.on_removal() + return TRUE + +/proc/is_monkey_leader(datum/mind/monkey_mind) + return monkey_mind && monkey_mind.has_antag_datum(ANTAG_DATUM_MONKEY_LEADER) + +/proc/is_monkey(datum/mind/monkey_mind) + return monkey_mind && (monkey_mind.has_antag_datum(ANTAG_DATUM_MONKEY) || is_monkey_leader(monkey_mind)) + diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index 2ebc21adac..158ba09d43 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/morph, /obj/effect)) - var/playstyle_string = "You are a morph, an abomination of science created primarily with changeling cells. \ + var/playstyle_string = "You are a morph, an abomination of science created primarily with changeling cells. \ You may take the form of anything nearby by shift-clicking it. This process will alert any nearby \ observers, and can only be performed once every five seconds. While morphed, you move faster, but do \ less damage. In addition, anyone within three tiles will note an uncanny wrongness if examining you. \ diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 441689fb9b..002e1b3809 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -64,7 +64,7 @@ /mob/living/simple_animal/revenant/Login() ..() - to_chat(src, "You are a revenant.") + to_chat(src, "You are a revenant.") to_chat(src, "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.") to_chat(src, "You are not dead, not alive, but somewhere in between. You are capable of limited interaction with both worlds.") to_chat(src, "You are invincible and invisible to everyone but other ghosts. Most abilities will reveal you, rendering you vulnerable.") diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 8739ba22eb..e8eb95aa7b 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -35,7 +35,7 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE var/boost = 0 bloodcrawl = BLOODCRAWL_EAT - var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ + var/playstyle_string = "You are a slaughter demon, a terrible creature from another realm. You have a single desire: To kill. \ You may use the \"Blood Crawl\" ability near blood pools to travel through them, appearing and disappearing from the station at will. \ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. " @@ -136,8 +136,8 @@ // Keep the people we hug! var/list/consumed_mobs = list() - playstyle_string = "You are a laughter \ - demon, a wonderful creature from another realm. You have a single \ + playstyle_string = "You are a laughter \ + demon, a wonderful creature from another realm. You have a single \ desire: To hug and tickle.
\ You may use the \"Blood Crawl\" ability near blood pools to travel \ through them, appearing and disappearing from the station at will. \ diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 890a3bb456..f131046cac 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -141,8 +141,8 @@ /datum/outfit/syndicate/post_equip(mob/living/carbon/human/H) var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.SYND_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_SYNDICATE) + R.freqlock = TRUE if(command_radio) R.command = TRUE diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 58128b89ce..ce750e6a88 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -67,7 +67,7 @@ if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) to_chat(user, "The enemy crew is too small to be worth declaring war on.") return FALSE - if(user.z != ZLEVEL_CENTCOM) + if(!user.onSyndieBase()) to_chat(user, "You have to be at your base to use this.") return FALSE if(world.time-SSticker.round_start_time > CHALLENGE_TIME_LIMIT) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index d6d14a3f84..68340a1da3 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -451,12 +451,12 @@ var/off_station = 0 var/turf/bomb_location = get_turf(src) var/area/A = get_area(bomb_location) - if(bomb_location && (bomb_location.z in GLOB.station_z_levels)) + if(bomb_location && is_station_level(bomb_location.z)) if(istype(A, /area/space)) off_station = NUKE_NEAR_MISS if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE))) off_station = NUKE_NEAR_MISS - else if((istype(A, /area/syndicate_mothership) || (istype(A, /area/shuttle/syndicate)) && bomb_location.z == ZLEVEL_CENTCOM)) + else if(bomb_location.onSyndieBase()) off_station = NUKE_SYNDICATE_BASE else off_station = NUKE_MISS_STATION @@ -556,7 +556,7 @@ This is here to make the tiles around the station mininuke change when it's arme addtimer(CALLBACK(user, /atom/proc/add_atom_colour, (i % 2)? "#00FF00" : "#FF0000", ADMIN_COLOUR_PRIORITY), i) addtimer(CALLBACK(src, .proc/manual_suicide, user), 101) return MANUAL_SUICIDE - + /obj/item/disk/proc/manual_suicide(mob/living/user) user.remove_atom_colour(ADMIN_COLOUR_PRIORITY) user.visible_message("[user] was destroyed by the nuclear blast!") @@ -564,8 +564,8 @@ This is here to make the tiles around the station mininuke change when it's arme user.death(0) /obj/item/disk/fakenucleardisk - name = "cheap plastic imitation of the nuclear authentication disk" - desc = "Broken dreams and a faint odor of cheese." + name = "nuclear authentication disk" + desc = "Better keep this safe." icon_state = "nucleardisk" /obj/item/disk/fakenucleardisk/suicide_act(mob/user) @@ -573,3 +573,8 @@ This is here to make the tiles around the station mininuke change when it's arme playsound(src, 'sound/machines/alarm.ogg', 30, -1, 1) addtimer(CALLBACK(src, .proc/manual_suicide, user), 101) return MANUAL_SUICIDE + +/obj/item/disk/fakenucleardisk/examine(mob/user) + ..() + if(Adjacent(user)) + to_chat(user, "Wait, this is a fake!") diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 46f96961c9..4b147e9446 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -1,6 +1,6 @@ /datum/objective var/datum/mind/owner //The primary owner of the objective. !!SOMEWHAT DEPRECATED!! Prefer using 'team' for new code. - var/datum/objective_team/team //An alternative to 'owner': a team. Use this when writing new code. + var/datum/team/team //An alternative to 'owner': a team. Use this when writing new code. var/explanation_text = "Nothing" //What that person is supposed to do. var/team_explanation_text //For when there are multiple owners. var/datum/mind/target = null //If they are focused on a particular person. @@ -47,9 +47,9 @@ . = list() for(var/V in GLOB.data_core.locked) var/datum/data/record/R = V - var/mob/M = R.fields["reference"] - if(M && M.mind) - . += M.mind + var/datum/mind/M = R.fields["mindref"] + if(M) + . += M /datum/objective/proc/find_target() var/list/datum/mind/owners = get_owners() @@ -154,7 +154,7 @@ if(!target || !considered_alive(target) || considered_afk(target)) return TRUE var/turf/T = get_turf(target.current) - return T && !(T.z in GLOB.station_z_levels) + return T && !is_station_level(T.z) /datum/objective/mutiny/update_explanation_text() ..() @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/list/otherwise = M.GetAllContents() for(var/obj/item/disk/tech_disk/TD in otherwise) TD.stored_research.copy_research_to(checking) - return checking.researched_nodes.len >= target + return checking.researched_nodes.len >= target_amount /datum/objective/capture @@ -537,25 +537,25 @@ GLOBAL_LIST_EMPTY(possible_items_special) var/captured_amount = 0 var/area/centcom/holding/A = locate() in GLOB.sortedAreas for(var/mob/living/carbon/human/M in A)//Humans. - if(M.stat==2)//Dead folks are worth less. + if(M.stat == DEAD)//Dead folks are worth less. captured_amount+=0.5 continue captured_amount+=1 for(var/mob/living/carbon/monkey/M in A)//Monkeys are almost worthless, you failure. captured_amount+=0.1 for(var/mob/living/carbon/alien/larva/M in A)//Larva are important for research. - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=0.5 continue captured_amount+=1 for(var/mob/living/carbon/alien/humanoid/M in A)//Aliens are worth twice as much as humans. if(istype(M, /mob/living/carbon/alien/humanoid/royal/queen))//Queens are worth three times as much as humans. - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=1.5 else captured_amount+=3 continue - if(M.stat==2) + if(M.stat == DEAD) captured_amount+=1 continue captured_amount+=2 diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index f20e16b36b..71947fc682 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -164,7 +164,7 @@ /datum/game_mode/revolution/proc/check_heads_victory() for(var/datum/mind/rev_mind in revolution.head_revolutionaries()) var/turf/T = get_turf(rev_mind.current) - if(!considered_afk(rev_mind) && considered_alive(rev_mind) && (T.z in GLOB.station_z_levels)) + if(!considered_afk(rev_mind) && considered_alive(rev_mind) && is_station_level(T.z)) if(ishuman(rev_mind.current)) return FALSE return TRUE diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 101a33e551..13b4234622 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -27,7 +27,7 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE) //items that shouldn't spawn on the floor because they would bug or act weird var/global/list/spawn_forbidden = list( /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you - /obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai, + /obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/device/pda/ai, /obj/item/smallDelivery, /obj/item/projectile, /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 21de0fc2f9..6c662fbc18 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -213,7 +213,7 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' var/mob/living/carbon/human/target = null var/list/mob/living/carbon/human/possible = list() - var/obj/item/linked_item = null + var/obj/item/voodoo_link = null var/cooldown_time = 30 //3s var/cooldown = 0 max_integrity = 10 @@ -237,10 +237,10 @@ cooldown = world.time +cooldown_time return - if(!linked_item) + if(!voodoo_link) if(I.loc == user && istype(I) && I.w_class <= WEIGHT_CLASS_SMALL) if (user.transferItemToLoc(I,src)) - linked_item = I + voodoo_link = I to_chat(user, "You attach [I] to the doll.") update_targets() @@ -255,11 +255,11 @@ return if(user.zone_selected == "chest") - if(linked_item) + if(voodoo_link) target = null - linked_item.forceMove(drop_location()) - to_chat(user, "You remove the [linked_item] from the doll.") - linked_item = null + voodoo_link.forceMove(drop_location()) + to_chat(user, "You remove the [voodoo_link] from the doll.") + voodoo_link = null update_targets() return @@ -291,10 +291,13 @@ /obj/item/voodoo/proc/update_targets() possible = list() - if(!linked_item) + if(!voodoo_link) return + var/list/prints = voodoo_link.return_fingerprints() + if(!length(prints)) + return FALSE for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(md5(H.dna.uni_identity) in linked_item.fingerprints) + if(prints[md5(H.dna.uni_identity)]) possible |= H /obj/item/voodoo/proc/GiveHint(mob/victim,force=0) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 8b80b9ab69..bea6d41685 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -11,11 +11,11 @@ slot_flags = SLOT_BELT var/usability = 0 - var/reusable = TRUE + var/old_shard = FALSE var/spent = FALSE /obj/item/device/soulstone/proc/was_used() - if(!reusable) + if(old_shard) spent = TRUE name = "dull [name]" desc = "A fragment of the legendary treasure known simply as \ @@ -27,7 +27,7 @@ /obj/item/device/soulstone/anybody/chaplain name = "mysterious old shard" - reusable = FALSE + old_shard = TRUE /obj/item/device/soulstone/pickup(mob/living/user) ..() @@ -38,7 +38,10 @@ /obj/item/device/soulstone/examine(mob/user) ..() if(usability || iscultist(user) || iswizard(user) || isobserver(user)) - to_chat(user, "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.") + if (old_shard) + to_chat(user, "A soulstone, used to capture a soul, either from dead humans or from freed shades.") + else + to_chat(user, "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades.") to_chat(user, "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade.") if(spent) to_chat(user, "This shard is spent; it is now just a creepy rock.") @@ -151,7 +154,7 @@ if(contents.len) to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") else - if(T.stat != CONSCIOUS) + if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD)) if(T.client == null) to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") getCultGhost(T,user) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 0d9655ae8e..1d423802d1 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -47,7 +47,7 @@ for(var/datum/mind/wizard in wizards) if(isliving(wizard.current) && wizard.current.stat!=DEAD) return FALSE - + for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead() if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard)) return FALSE @@ -55,7 +55,7 @@ if(SSevents.wizardmode) //If summon events was active, turn it off SSevents.toggleWizardmode() SSevents.resetFrequency() - + return TRUE /datum/game_mode/wizard/set_round_result() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 61a5d7271d..52702868f7 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -15,7 +15,7 @@ state_open = TRUE circuit = /obj/item/circuitboard/machine/sleeper var/efficiency = 1 - var/min_health = 30 + var/min_health = -25 var/list/available_chems var/controls_inside = FALSE var/list/possible_chems = list( @@ -42,7 +42,7 @@ I += M.rating efficiency = initial(efficiency)* E - min_health = initial(min_health) - (10*E) + min_health = initial(min_health) - (10*(E-1)) // CIT CHANGE - changes min health equation to be min_health - (matterbin rating * 10) available_chems = list() for(var/i in 1 to I) available_chems |= possible_chems[i] diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 01651e6e08..2170636f43 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -8,7 +8,7 @@ /obj/machinery/door/airlock/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) + if(!signal) return if(id_tag != signal.data["tag"] || !signal.data["command"]) @@ -52,15 +52,13 @@ /obj/machinery/door/airlock/proc/send_status() if(radio_connection) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - - signal.data["door_status"] = density?("closed"):("open") - signal.data["lock_status"] = locked?("locked"):("unlocked") - - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) + var/datum/signal/signal = new(list( + "tag" = id_tag, + "timestamp" = world.time, + "door_status" = density ? "closed" : "open", + "lock_status" = locked ? "locked" : "unlocked" + )) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) /obj/machinery/door/airlock/open(surpress_send) @@ -79,10 +77,10 @@ SSradio.remove_object(src, frequency) if(new_frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) /obj/machinery/door/airlock/Destroy() - if(frequency && SSradio) + if(frequency) SSradio.remove_object(src,frequency) return ..() @@ -97,7 +95,7 @@ var/id_tag var/master_tag - var/frequency = 1449 + var/frequency = FREQ_AIRLOCK_CONTROL var/datum/radio_frequency/radio_connection @@ -115,36 +113,34 @@ icon_state = "airlock_sensor_off" /obj/machinery/airlock_sensor/attack_hand(mob/user) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = master_tag - signal.data["command"] = "cycle" + var/datum/signal/signal = new(list( + "tag" = master_tag, + "command" = "cycle" + )) - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) flick("airlock_sensor_cycle", src) /obj/machinery/airlock_sensor/process() if(on) - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data["tag"] = id_tag - signal.data["timestamp"] = world.time - var/datum/gas_mixture/air_sample = return_air() - var/pressure = round(air_sample.return_pressure(),0.1) alert = (pressure < ONE_ATMOSPHERE*0.8) - signal.data["pressure"] = num2text(pressure) + var/datum/signal/signal = new(list( + "tag" = id_tag, + "timestamp" = world.time, + "pressure" = num2text(pressure) + )) - radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = GLOB.RADIO_AIRLOCK) + radio_connection.post_signal(src, signal, range = AIRLOCK_CONTROL_RANGE, filter = RADIO_AIRLOCK) update_icon() /obj/machinery/airlock_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_AIRLOCK) + radio_connection = SSradio.add_object(src, frequency, RADIO_AIRLOCK) /obj/machinery/airlock_sensor/Initialize() . = ..() @@ -152,4 +148,4 @@ /obj/machinery/airlock_sensor/Destroy() SSradio.remove_object(src,frequency) - return ..() + return ..() \ No newline at end of file diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 1e0b41bca0..d34c800716 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -149,8 +149,6 @@ if(href_list["make"]) - var/turf/T = loc - ///////////////// //href protection being_built = stored_research.isDesignResearchedID(href_list["make"]) @@ -174,34 +172,8 @@ use_power(power) icon_state = "autolathe" flick("autolathe_n",src) - if(is_stack) - spawn(32*coeff) - use_power(power) - var/list/materials_used = list(MAT_METAL=metal_cost*multiplier, MAT_GLASS=glass_cost*multiplier) - materials.use_amount(materials_used) - - var/obj/item/stack/N = new being_built.build_path(T, multiplier) - N.update_icon() - N.autolathe_crafted(src) - - for(var/obj/item/stack/S in T.contents - N) - if(istype(S, N.merge_type)) - N.merge(S) - busy = FALSE - updateUsrDialog() - - else - spawn(32*coeff*multiplier) - use_power(power) - var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier) - materials.use_amount(materials_used) - for(var/i=1, i<=multiplier, i++) - var/obj/item/new_item = new being_built.build_path(T) - for(var/mat in materials_used) - new_item.materials[mat] = materials_used[mat] / multiplier - new_item.autolathe_crafted(src) - busy = FALSE - updateUsrDialog() + var/time = is_stack ? 32 : 32*coeff*multiplier + addtimer(CALLBACK(src, .proc/make_item, power, metal_cost, glass_cost, multiplier, coeff, is_stack), time) if(href_list["search"]) matching_designs.Cut() @@ -218,6 +190,27 @@ return +/obj/machinery/autolathe/proc/make_item(power, metal_cost, glass_cost, multiplier, coeff, is_stack) + GET_COMPONENT(materials, /datum/component/material_container) + var/atom/A = drop_location() + use_power(power) + var/list/materials_used = list(MAT_METAL=metal_cost*coeff*multiplier, MAT_GLASS=glass_cost*coeff*multiplier) + materials.use_amount(materials_used) + + if(is_stack) + var/obj/item/stack/N = new being_built.build_path(A, multiplier) + N.update_icon() + N.autolathe_crafted(src) + else + for(var/i=1, i<=multiplier, i++) + var/obj/item/new_item = new being_built.build_path(A) + for(var/mat in materials_used) + new_item.materials[mat] = materials_used[mat] / multiplier + new_item.autolathe_crafted(src) + + busy = FALSE + updateDialog() + /obj/machinery/autolathe/RefreshParts() var/T = 0 for(var/obj/item/stock_parts/matter_bin/MB in component_parts) diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index b8d20b0c59..6be865788b 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -59,7 +59,7 @@ if(..()) return src.add_fingerprint(usr) - var/dat = "[world.name] secure vault. Authorized personnel only.
" + var/dat = "[station_name()] secure vault. Authorized personnel only.
" dat += "Current Balance: [SSshuttle.points] credits.
" if(!siphoning) dat += "Siphon Credits
" diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index af1a168a3b..4742172108 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -53,23 +53,21 @@ LAZYADD(myarea.cameras, src) proximity_monitor = new(src, 1) - if(mapload && (z in GLOB.station_z_levels) && prob(3) && !start_active) + if(mapload && is_station_level(z) && prob(3) && !start_active) toggle_cam() /obj/machinery/camera/Destroy() - toggle_cam(null, 0) //kick anyone viewing out + if(can_use()) + toggle_cam(null, 0) //kick anyone viewing out and remove from the camera chunks + GLOB.cameranet.cameras -= src if(isarea(myarea)) LAZYREMOVE(myarea.cameras, src) - if(assembly) - qdel(assembly) - assembly = null + QDEL_NULL(assembly) if(bug) bug.bugged_cameras -= src.c_tag if(bug.current == src) bug.current = null bug = null - GLOB.cameranet.removeCamera(src) //Will handle removal from the camera network and the chunks, so we don't need to worry about that - GLOB.cameranet.cameras -= src return ..() /obj/machinery/camera/emp_act(severity) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 6a5d8eb9bc..db8479a413 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -1,10 +1,4 @@ /mob/living/silicon/ai/proc/get_camera_list() - - track.cameras.Cut() - - if(src.stat == DEAD) - return - var/list/L = list() for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) L.Add(C) @@ -18,25 +12,18 @@ if (tempnetwork.len) T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - track.cameras = T return T - -/mob/living/silicon/ai/proc/ai_camera_list(camera) - if (!camera) - return 0 - - var/obj/machinery/camera/C = track.cameras[camera] - src.eyeobj.setLoc(C) - - return +/mob/living/silicon/ai/proc/show_camera_list() + var/list/cameras = get_camera_list() + var/camera = input(src, "Choose which camera you want to view", "Cameras") as null|anything in cameras + switchCamera(cameras[camera]) /datum/trackable var/list/names = list() var/list/namecounts = list() var/list/humans = list() var/list/others = list() - var/list/cameras = list() /mob/living/silicon/ai/proc/trackable_mobs() @@ -143,13 +130,9 @@ /obj/machinery/camera/attack_ai(mob/living/silicon/ai/user) if (!istype(user)) return - if (!src.can_use()) + if (!can_use()) return - user.eyeobj.setLoc(get_turf(src)) - - -/mob/living/silicon/ai/attack_ai(mob/user) - ai_camera_list() + user.switchCamera(src) /proc/camera_sort(list/L) var/obj/machinery/camera/a diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 4cd7e7f0fe..b216d1752f 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -53,7 +53,7 @@ radio = new(src) radio.keyslot = new radio_key - radio.subspace_transmission = 1 + radio.subspace_transmission = TRUE radio.canhear_range = 0 radio.recalculateChannels() diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 89a4e8b130..9c28be28b7 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -44,8 +44,7 @@ /obj/item/grenade/chem_grenade/glitter/blue = 1, /obj/item/grenade/chem_grenade/glitter/white = 1, /obj/item/toy/eightball = 2, - /obj/item/toy/windupToolbox = 2, - /obj/item/toy/sword/cx = 2) + /obj/item/toy/windupToolbox = 2) light_color = LIGHT_COLOR_GREEN @@ -418,17 +417,17 @@ dat += "
You ran out of food and starved." if(emagged) user.nutrition = 0 //yeah you pretty hongry - to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") + to_chat(user, "Your body instantly contracts to that of one who has not eaten in months. Agonizing cramps seize you as you fall to the floor.") if(fuel <= 0) dat += "
You ran out of fuel, and drift, slowly, into a star." if(emagged) var/mob/living/M = user M.adjust_fire_stacks(5) M.IgniteMob() //flew into a star, so you're on fire - to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") + to_chat(user, "You feel an immense wave of heat emanate from the arcade machine. Your skin bursts into flames.") if(emagged) - to_chat(user, "You're never going to make it to Orion...") + to_chat(user, "You're never going to make it to Orion...") user.death() emagged = FALSE //removes the emagged status after you lose gameStatus = ORION_STATUS_START @@ -528,7 +527,7 @@ playsound(loc, 'sound/effects/bang.ogg', 100, 1) var/turf/open/floor/F for(F in orange(1, src)) - F.ChangeTurf(F.baseturf) + F.ScrapeAway() say("Something slams into the floor around [src], exposing it to space!") if(hull) sleep(10) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index f5115c7e2a..94f5e63afb 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -6,7 +6,7 @@ icon_keyboard = "atmos_key" var/list/priority_alarms = list() var/list/minor_alarms = list() - var/receive_frequency = 1437 + var/receive_frequency = FREQ_ATMOS_ALARMS var/datum/radio_frequency/radio_connection light_color = LIGHT_COLOR_CYAN @@ -57,10 +57,10 @@ /obj/machinery/computer/atmos_alert/proc/set_frequency(new_frequency) SSradio.remove_object(src, receive_frequency) receive_frequency = new_frequency - radio_connection = SSradio.add_object(src, receive_frequency, GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, receive_frequency, RADIO_ATMOSIA) /obj/machinery/computer/atmos_alert/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) + if(!signal) return var/zone = signal.data["zone"] diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index a4881546cf..3c53c395f4 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -11,7 +11,7 @@ var/on = TRUE var/id_tag - var/frequency = 1441 + var/frequency = FREQ_ATMOS_STORAGE var/datum/radio_frequency/radio_connection /obj/machinery/air_sensor/update_icon() @@ -19,31 +19,29 @@ /obj/machinery/air_sensor/process_atmos() if(on) - var/datum/signal/signal = new var/datum/gas_mixture/air_sample = return_air() - signal.transmission_method = 1 //radio signal - signal.data = list( + var/datum/signal/signal = new(list( "sigtype" = "status", "id_tag" = id_tag, "timestamp" = world.time, "pressure" = air_sample.return_pressure(), "temperature" = air_sample.temperature, "gases" = list() - ) + )) var/total_moles = air_sample.total_moles() if(total_moles) for(var/gas_id in air_sample.gases) var/gas_name = air_sample.gases[gas_id][GAS_META][META_GAS_NAME] signal.data["gases"][gas_name] = air_sample.gases[gas_id][MOLES] / total_moles * 100 - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/air_sensor/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/air_sensor/Initialize() . = ..() @@ -66,7 +64,7 @@ icon_keyboard = "atmos_key" circuit = /obj/item/circuitboard/computer/atmos_control - var/frequency = 1441 + var/frequency = FREQ_ATMOS_STORAGE var/list/sensors = list( "n2_sensor" = "Nitrogen Tank", "o2_sensor" = "Oxygen Tank", @@ -117,7 +115,7 @@ return data /obj/machinery/computer/atmos_control/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) + if(!signal) return var/id_tag = signal.data["id_tag"] @@ -129,7 +127,7 @@ /obj/machinery/computer/atmos_control/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) ///////////////////////////////////////////////////////////// // LARGE TANK CONTROL @@ -138,7 +136,7 @@ /obj/machinery/computer/atmos_control/tank var/input_tag var/output_tag - frequency = 1441 + frequency = FREQ_ATMOS_STORAGE circuit = /obj/item/circuitboard/computer/atmos_control/tank var/list/input_info @@ -147,7 +145,7 @@ // This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this /obj/machinery/computer/atmos_control/tank/proc/reconnect(mob/user) var/list/IO = list() - var/datum/radio_frequency/freq = SSradio.return_frequency(1441) + var/datum/radio_frequency/freq = SSradio.return_frequency(FREQ_ATMOS_STORAGE) var/list/devices = freq.devices["_default"] for(var/obj/machinery/atmospherics/components/unary/vent_pump/U in devices) var/list/text = splittext(U.id_tag, "_") @@ -194,10 +192,7 @@ /obj/machinery/computer/atmos_control/tank/ui_act(action, params) if(..() || !radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 - signal.source = src - signal.data = list("sigtype" = "command") + var/datum/signal/signal = new(list("sigtype" = "command")) switch(action) if("reconnect") reconnect(usr) @@ -214,10 +209,10 @@ target = CLAMP(target, 0, 50 * ONE_ATMOSPHERE) signal.data += list("tag" = output_tag, "set_internal_pressure" = target) . = TRUE - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/computer/atmos_control/tank/receive_signal(datum/signal/signal) - if(!signal || signal.encryption) + if(!signal) return var/id_tag = signal.data["tag"] @@ -227,4 +222,4 @@ else if(output_tag == id_tag) output_info = signal.data else - ..(signal) \ No newline at end of file + ..(signal) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 7831437dc2..41f093a6d2 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -121,7 +121,7 @@ to_chat(user, "You remove the glass panel.") state = 3 icon_state = "3" - var/obj/item/stack/sheet/glass/G = new (drop_location(), 2) + var/obj/item/stack/sheet/glass/G = new(drop_location(), 2) G.add_fingerprint(user) return if(istype(P, /obj/item/screwdriver)) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index 8bab6a9d9a..73e629e561 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -124,7 +124,7 @@ /obj/machinery/computer/security/proc/get_available_cameras() var/list/L = list() for (var/obj/machinery/camera/C in GLOB.cameranet.cameras) - if((z > ZLEVEL_SPACEMAX || C.z > ZLEVEL_SPACEMAX) && (C.z != z))//if on away mission, can only recieve feed from same z_level cameras + if((is_away_level(z) || is_away_level(C.z)) && (C.z != z))//if on away mission, can only recieve feed from same z_level cameras continue L.Add(C) diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index 44d6d5abe4..7c790f63de 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -83,12 +83,23 @@ if(!eyeobj.eye_initialized) var/camera_location - for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) - if(!C.can_use() || z_lock.len && !(C.z in z_lock)) - continue - if(C.network & networks) - camera_location = get_turf(C) - break + var/turf/myturf = get_turf(src) + if(eyeobj.use_static) + if((!z_lock.len || (myturf.z in z_lock)) && GLOB.cameranet.checkTurfVis(myturf)) + camera_location = myturf + else + for(var/obj/machinery/camera/C in GLOB.cameranet.cameras) + if(!C.can_use() || z_lock.len && !(C.z in z_lock)) + continue + var/list/network_overlap = networks & C.network + if(network_overlap.len) + camera_location = get_turf(C) + break + else + camera_location = myturf + if(z_lock.len && !(myturf.z in z_lock)) + camera_location = locate(round(world.maxx/2), round(world.maxy/2), z_lock[1]) + if(camera_location) eyeobj.eye_initialized = TRUE give_eye_control(L) @@ -272,6 +283,9 @@ if(!is_servant_of_ratvar(user)) to_chat(user, "[src]'s keys are in a language foreign to you, and you don't understand anything on its screen.") return + if(clockwork_ark_active()) + to_chat(user, "The Ark is active, and [src] has shut down.") + return . = ..() /datum/action/innate/servant_warp @@ -292,7 +306,7 @@ var/mob/camera/aiEye/remote/remote_eye = user.remote_control var/obj/machinery/computer/camera_advanced/ratvar/R = target var/turf/T = get_turf(remote_eye) - if(user.z != ZLEVEL_CITYOFCOGS || !(T.z in GLOB.station_z_levels)) + if(!is_reebe(user.z) || !is_station_level(T.z)) return if(isclosedturf(T)) to_chat(user, "You can't teleport into a wall.") @@ -300,6 +314,9 @@ else if(isspaceturf(T)) to_chat(user, "[prob(1) ? "Servant cannot into space." : "You can't teleport into space."]") return + else if(T.flags_1 & NOJAUNT_1) + to_chat(user, "This tile is blessed by holy water and deflects the warp.") + return var/area/AR = get_area(T) if(!AR.clockwork_warp_allowed) to_chat(user, "[AR.clockwork_warp_fail]") diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 7814e05138..944d8d5213 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -449,7 +449,7 @@ scantemp = "Subject's brain is not responding to scanning stimuli." playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - if((mob_occupant.disabilities & NOCLONE) && (src.scanner.scan_level < 2)) + if((mob_occupant.has_disability(DISABILITY_NOCLONE)) && (src.scanner.scan_level < 2)) scantemp = "Subject no longer contains the fundamental materials required to create a living clone." playsound(src, 'sound/machines/terminal_alert.ogg', 50, 0) return diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 6223011736..9823df5fc8 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -9,7 +9,7 @@ var/authenticated = 0 var/auth_id = "Unknown" //Who is currently logged in? var/list/datum/comm_message/messages = list() - var/datum/comm_message/currmsg + var/datum/comm_message/currmsg var/datum/comm_message/aicurrmsg var/state = STATE_DEFAULT var/aistate = STATE_DEFAULT @@ -28,7 +28,6 @@ var/const/STATE_TOGGLE_EMERGENCY = 10 var/const/STATE_PURCHASE = 11 - var/status_display_freq = "1435" var/stat_msg1 var/stat_msg2 @@ -53,7 +52,7 @@ /obj/machinery/computer/communications/Topic(href, href_list) if(..()) return - if(!(z in GLOB.station_z_levels) && z != ZLEVEL_CENTCOM) //Can only use on centcom and SS13 + if(!is_station_level(z) && !is_centcom_level(z)) //Can only use on centcom and SS13 to_chat(usr, "Unable to establish a connection: \black You're too far away from the station!") return usr.set_machine(src) @@ -112,9 +111,11 @@ if(GLOB.security_level != old_level) to_chat(usr, "Authorization confirmed. Modifying security level.") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) - //Only notify the admins if an actual change happened - log_game("[key_name(usr)] has changed the security level to [get_security_level()].") - message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") + //Only notify people if an actual change happened + var/security_level = get_security_level() + log_game("[key_name(usr)] has changed the security level to [security_level].") + message_admins("[key_name_admin(usr)] has changed the security level to [security_level].") + deadchat_broadcast("[usr.name] has changed the security level to [security_level].", usr) tmp_alertlevel = 0 else to_chat(usr, "You are not authorized to do this!") @@ -136,7 +137,8 @@ to_chat(usr, "Arrays recycling. Please stand by.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, 0) return - var/input = stripped_multiline_input(usr, "Please choose a message to transmit to an allied station. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "") + + var/input = stripped_multiline_input(usr, "Please choose a message to transmit to allied stations. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "") if(!input || !(usr in view(1,src))) return playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) @@ -144,6 +146,7 @@ minor_announce(input, title = "Outgoing message to allied station") log_talk(usr,"[key_name(usr)] has sent a message to the other server: [input]",LOGSAY) message_admins("[key_name_admin(usr)] has sent a message to the other server.") + deadchat_broadcast("[usr.name] has sent an outgoing message to the other station(s).", usr) CM.lastTimeUsed = world.time if("purchase_menu") @@ -228,7 +231,7 @@ log_game("[key_name(usr)] answered [currmsg.title] comm message. Answer : [currmsg.answered]") if(currmsg) currmsg.answer_callback.Invoke() - + state = STATE_VIEWMESSAGE if("status") state = STATE_STATUSDISPLAY @@ -246,11 +249,13 @@ make_maint_all_access() log_game("[key_name(usr)] enabled emergency maintenance access.") message_admins("[key_name_admin(usr)] enabled emergency maintenance access.") + deadchat_broadcast("[usr.name] enabled emergency maintenance access.", usr) state = STATE_DEFAULT if("disableemergency") revoke_maint_all_access() log_game("[key_name(usr)] disabled emergency maintenance access.") message_admins("[key_name_admin(usr)] disabled emergency maintenance access.") + deadchat_broadcast("[usr.name] disabled emergency maintenance access.", usr) state = STATE_DEFAULT // Status display stuff @@ -284,9 +289,9 @@ CentCom_announce(input, usr) to_chat(usr, "Message transmitted to Central Command.") log_talk(usr,"[key_name(usr)] has made a CentCom announcement: [input]",LOGSAY) + deadchat_broadcast("[usr.name] has messaged CentComm: [input]", usr) CM.lastTimeUsed = world.time - // OMG SYNDICATE ...LETTERHEAD if("MessageSyndicate") if((authenticated==2) && (emagged)) @@ -301,6 +306,7 @@ Syndicate_announce(input, usr) to_chat(usr, "SYSERR @l(19833)of(transmit.dm): !@$ MESSAGE TRANSMITTED TO SYNDICATE COMMAND.") log_talk(usr,"[key_name(usr)] has made a Syndicate announcement: [input]",LOGSAY) + deadchat_broadcast("[usr.name] has messaged the Syndicate: [input]", usr) CM.lastTimeUsed = world.time if("RestoreBackup") @@ -379,9 +385,11 @@ tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this set_security_level(tmp_alertlevel) if(GLOB.security_level != old_level) - //Only notify the admins if an actual change happened - log_game("[key_name(usr)] has changed the security level to [get_security_level()].") - message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") + //Only notify people if an actual change happened + var/security_level = get_security_level() + log_game("[key_name(usr)] has changed the security level to [security_level].") + message_admins("[key_name_admin(usr)] has changed the security level to [security_level].") + deadchat_broadcast("[usr.name] has changed the security level to [security_level].", usr) tmp_alertlevel = 0 aistate = STATE_DEFAULT if("ai-changeseclevel") @@ -392,11 +400,13 @@ make_maint_all_access() log_game("[key_name(usr)] enabled emergency maintenance access.") message_admins("[key_name_admin(usr)] enabled emergency maintenance access.") + deadchat_broadcast("[usr.name] enabled emergency maintenance access.", usr) aistate = STATE_DEFAULT if("ai-disableemergency") revoke_maint_all_access() log_game("[key_name(usr)] disabled emergency maintenance access.") message_admins("[key_name_admin(usr)] disabled emergency maintenance access.") + deadchat_broadcast("[usr.name] disabled emergency maintenance access.", usr) aistate = STATE_DEFAULT updateUsrDialog() @@ -464,8 +474,9 @@ if (authenticated==2) dat += "

Captain Functions" dat += "
\[ Make a Captain's Announcement \]" - if(CONFIG_GET(string/cross_server_address)) - dat += "
\[ Send a message to an allied station \]" + var/cross_servers_count = length(CONFIG_GET(keyed_string_list/cross_server)) + if(cross_servers_count) + dat += "
\[ Send a message to [cross_servers_count == 1 ? "an " : ""]allied station[cross_servers_count > 1 ? "s" : ""] \]" if(SSmapping.config.allow_custom_shuttles) dat += "
\[ Purchase Shuttle \]" dat += "
\[ Change Alert Level \]" @@ -690,19 +701,16 @@ if(!input || !user.canUseTopic(src)) return SScommunications.make_announcement(user, is_silicon, input) + deadchat_broadcast("[user.name] made an priority announcement.", user) /obj/machinery/computer/communications/proc/post_status(command, data1, data2) - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) if(!frequency) return - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - + var/datum/signal/status_signal = new(list("command" = command)) switch(command) if("message") status_signal.data["msg1"] = data1 @@ -739,4 +747,4 @@ if(content) content = new_content if(new_possible_answers) - possible_answers = new_possible_answers \ No newline at end of file + possible_answers = new_possible_answers diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index 7bbd545981..5bdd6a7b27 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -81,7 +81,7 @@ if(connected && connected.is_operational()) if(connected.occupant) //set occupant_status message viable_occupant = connected.occupant - if(viable_occupant.has_dna() && (!(RADIMMUNE in viable_occupant.dna.species.species_traits)) && (!(viable_occupant.disabilities & NOCLONE) || (connected.scan_level == 3))) //occupant is viable for dna modification + if(viable_occupant.has_dna() && (!(RADIMMUNE in viable_occupant.dna.species.species_traits)) && (!(viable_occupant.has_disability(DISABILITY_NOCLONE)) || (connected.scan_level == 3))) //occupant is viable for dna modification occupant_status += "[viable_occupant.name] => " switch(viable_occupant.stat) if(CONSCIOUS) @@ -108,9 +108,9 @@ else scanner_status = "Closed" if(connected.locked) - scanner_status += " (Locked)" + scanner_status += "(Locked)" else - scanner_status += " (Unlocked)" + scanner_status += "(Unlocked)" else @@ -143,27 +143,27 @@ status += "
Pulse Duration:
[radduration]
" status += "
  \> Accuracy:
[chance_to_hit]
" status += "
" // Close statusDisplay div - var/list/buttons = list("Scan ") + var/list/buttons = list("Scan") if(connected) - buttons += " [connected.state_open ? "Close" : "Open"] Scanner " + buttons += "[connected.state_open ? "Close" : "Open"] Scanner" if (connected.state_open) - buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner " + buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner" else - buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner " + buttons += "[connected.locked ? "Unlock" : "Lock"] Scanner" else - buttons += "Open Scanner Lock Scanner " + buttons += "Open Scanner Lock Scanner" if(viable_occupant) - buttons += "Inject Rejuvenators " + buttons += "Inject Rejuvenators" else - buttons += "Inject Rejuvenators " + buttons += "Inject Rejuvenators" if(diskette) - buttons += "Eject Disk " + buttons += "Eject Disk" else - buttons += "Eject Disk " + buttons += "Eject Disk" if(current_screen == "buffer") - buttons += "Radiation Emitter Menu " + buttons += "Radiation Emitter Menu" else - buttons += "Buffer Menu " + buttons += "Buffer Menu" switch(current_screen) if("working") @@ -182,15 +182,15 @@ if( !buffer_slot || !buffer_slot.len || !buffer_slot["name"] || !((buffer_slot["UI"] && buffer_slot["UE"]) || buffer_slot["SE"]) ) temp_html += "
\tNo Data" if(viable_occupant) - temp_html += "
Save to Buffer " + temp_html += "
Save to Buffer" else - temp_html += "
Save to Buffer " - temp_html += "Clear Buffer " + temp_html += "
Save to Buffer" + temp_html += "Clear Buffer" if(diskette) - temp_html += "Load from Disk " + temp_html += "Load from Disk" else - temp_html += "Load from Disk " - temp_html += "Save to Disk " + temp_html += "Load from Disk" + temp_html += "Save to Disk" else var/ui = buffer_slot["UI"] var/se = buffer_slot["SE"] @@ -204,10 +204,10 @@ temp_html += "
\tBlood Type: [blood_type]" temp_html += "
\tUE: [ue] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant" else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed" if(injectorready < world.time) temp_html += "Injector" else @@ -218,10 +218,10 @@ if(ui) temp_html += "
\tUI: [ui] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant" else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed" if(injectorready < world.time) temp_html += "Injector" else @@ -231,10 +231,10 @@ if(ue && name && blood_type && ui) temp_html += "
\tUI+UE: [ui]/[ue] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant" else temp_html += "Occupant" - temp_html += "Occupant:Delayed " + temp_html += "Occupant:Delayed" if(injectorready < world.time) temp_html += "UI+UE Injector" else @@ -242,10 +242,10 @@ if(se) temp_html += "
\tSE: [se] " if(viable_occupant) - temp_html += "Occupant " + temp_html += "Occupant" else - temp_html += "Occupant " - temp_html += "Occupant:Delayed " + temp_html += "Occupant" + temp_html += "Occupant:Delayed" if(injectorready < world.time ) temp_html += "Injector" else @@ -253,18 +253,18 @@ else temp_html += "
\tSE: No Data" if(viable_occupant) - temp_html += "
Save to Buffer " + temp_html += "
Save to Buffer" else - temp_html += "
Save to Buffer " - temp_html += "Clear Buffer " + temp_html += "
Save to Buffer" + temp_html += "Clear Buffer" if(diskette) - temp_html += "Load from Disk " + temp_html += "Load from Disk" else - temp_html += "Load from Disk " + temp_html += "Load from Disk" if(diskette && !diskette.read_only) - temp_html += "Save to Disk " + temp_html += "Save to Disk" else - temp_html += "Save to Disk " + temp_html += "Save to Disk" else temp_html += status temp_html += buttons @@ -528,7 +528,7 @@ var/mob/living/carbon/viable_occupant = null if(connected) viable_occupant = connected.occupant - if(!istype(viable_occupant) || !viable_occupant.dna || (viable_occupant.disabilities & NOCLONE)) + if(!istype(viable_occupant) || !viable_occupant.dna || (RADIMMUNE in viable_occupant.dna.species.species_traits) || (viable_occupant.has_disability(DISABILITY_NOCLONE))) viable_occupant = null return viable_occupant diff --git a/code/game/machinery/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 5068955849..525c474bd9 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -56,7 +56,7 @@ var/loc_display = "Unknown" var/mob/living/M = T.imp_in - if((Tr.z in GLOB.station_z_levels) && !isspaceturf(M.loc)) + if(is_station_level(Tr.z) && !isspaceturf(M.loc)) var/turf/mob_loc = get_turf(M) loc_display = mob_loc.loc diff --git a/code/game/machinery/computer/telecrystalconsoles.dm b/code/game/machinery/computer/telecrystalconsoles.dm index 8679652a10..08210bf706 100644 --- a/code/game/machinery/computer/telecrystalconsoles.dm +++ b/code/game/machinery/computer/telecrystalconsoles.dm @@ -156,8 +156,6 @@ GLOBAL_LIST_INIT(possible_uplinker_IDs, list("Alfa","Bravo","Charlie","Delta","E ..() var/list/nukeops = get_antagonists(/datum/antagonist/nukeop) var/danger = GLOB.joined_player_list.len - nukeops.len -// var/list/nukeops = get_antagonists(/datum/antagonist/nukeop) -// var/danger = GLOB.joined_player_list.len - nukeops.len danger = CEILING(danger, 10) scaleTC(danger) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 7261c44fc5..9f9791beec 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -161,12 +161,9 @@ var/list/areaindex = list() if(regime_set == "Teleporter") for(var/obj/item/device/radio/beacon/R in GLOB.teleportbeacons) - var/turf/T = get_turf(R) - if(!T) - continue - if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) - continue - L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R + if(is_eligible(R)) + var/area/A = get_area(R) + L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R for(var/obj/item/implant/tracking/I in GLOB.tracked_implants) if(!I.imp_in || !ismob(I.loc)) @@ -176,12 +173,8 @@ if(M.stat == DEAD) if(M.timeofdeath + 6000 < world.time) continue - var/turf/T = get_turf(M) - if(!T) - continue - if(T.z == ZLEVEL_CENTCOM) - continue - L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = I + if(is_eligible(I)) + L[avoid_assoc_duplicate_keys(M.real_name, areaindex)] = I var/desc = input("Please select a location to lock in.", "Locking Computer") as null|anything in L target = L[desc] @@ -192,12 +185,9 @@ to_chat(user, "No connected stations located.") return for(var/obj/machinery/teleport/station/R in S) - var/turf/T = get_turf(R) - if(!T || !R.teleporter_hub || !R.teleporter_console) - continue - if(T.z == ZLEVEL_CENTCOM || T.z > ZLEVEL_SPACEMAX) - continue - L[avoid_assoc_duplicate_keys(T.loc.name, areaindex)] = R + if(is_eligible(R)) + var/area/A = get_area(R) + L[avoid_assoc_duplicate_keys(A.name, areaindex)] = R var/desc = input("Please select a station to lock in.", "Locking Computer") as null|anything in L target = L[desc] if(target) @@ -209,4 +199,15 @@ trg.teleporter_hub.update_icon() if(trg.teleporter_console) trg.teleporter_console.stat &= ~NOPOWER - trg.teleporter_console.update_icon() \ No newline at end of file + trg.teleporter_console.update_icon() + +/obj/machinery/computer/teleporter/proc/is_eligible(atom/movable/AM) + var/turf/T = get_turf(AM) + if(!T) + return FALSE + if(is_centcom_level(T.z) || is_away_level(T.z)) + return FALSE + var/area/A = get_area(T) + if(!A || A.noteleport) + return FALSE + return TRUE diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 4328a22222..97830393bd 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -257,4 +257,5 @@ for(var/X in components) var/obj/item/I = X I.forceMove(loc) + ..() diff --git a/code/game/machinery/dna_scanner.dm b/code/game/machinery/dna_scanner.dm index d1189ff8b8..343dd69cb2 100644 --- a/code/game/machinery/dna_scanner.dm +++ b/code/game/machinery/dna_scanner.dm @@ -100,7 +100,7 @@ var/mob/living/mob_occupant = get_mob_or_brainmob(occupant) if(istype(mob_occupant)) if(locate_computer(/obj/machinery/computer/cloning)) - if(!mob_occupant.suiciding && !(mob_occupant.disabilities & NOCLONE) && !mob_occupant.hellbound) + if(!mob_occupant.suiciding && !(mob_occupant.has_disability(DISABILITY_NOCLONE)) && !mob_occupant.hellbound) mob_occupant.notify_ghost_cloning("Your corpse has been placed into a cloning scanner. Re-enter your corpse if you want to be cloned!", source = src) // DNA manipulators cannot operate on severed heads or brains diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 775c9dd894..b36cc1e4c4 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -34,7 +34,7 @@ #define AIRLOCK_INTEGRITY_N 300 // Normal airlock integrity #define AIRLOCK_INTEGRITY_MULTIPLIER 1.5 // How much reinforced doors health increases -#define AIRLOCK_DAMAGE_DEFLECTION_N 20 // Normal airlock damage deflection +#define AIRLOCK_DAMAGE_DEFLECTION_N 20 // Normal airlock damage deflection // CIT CHANGE - CHANGES DEFAULT AIRLOCK DEFLECTION FROM 21 TO 20 #define AIRLOCK_DAMAGE_DEFLECTION_R 30 // Reinforced airlock damage deflection #define NOT_ELECTRIFIED 0 @@ -135,7 +135,7 @@ for(var/turf/closed/T in range(2, src)) here.ChangeTurf(T.type) return INITIALIZE_HINT_QDEL - here.ChangeTurf(/turf/closed/wall) + here.PlaceOnTop(/turf/closed/wall) if(9 to 11) lights = FALSE locked = TRUE @@ -209,23 +209,27 @@ /obj/machinery/door/airlock/narsie_act() var/turf/T = get_turf(src) var/runed = prob(20) + var/obj/machinery/door/airlock/cult/A if(glass) if(runed) - new/obj/machinery/door/airlock/cult/glass(T) + A = new/obj/machinery/door/airlock/cult/glass(T) else - new/obj/machinery/door/airlock/cult/unruned/glass(T) + A = new/obj/machinery/door/airlock/cult/unruned/glass(T) else if(runed) - new/obj/machinery/door/airlock/cult(T) + A = new/obj/machinery/door/airlock/cult(T) else - new/obj/machinery/door/airlock/cult/unruned(T) + A = new/obj/machinery/door/airlock/cult/unruned(T) + A.name = name qdel(src) /obj/machinery/door/airlock/ratvar_act() //Airlocks become pinion airlocks that only allow servants + var/obj/machinery/door/airlock/clockwork/A if(glass) - new/obj/machinery/door/airlock/clockwork/brass(get_turf(src)) + A = new/obj/machinery/door/airlock/clockwork/brass(get_turf(src)) else - new/obj/machinery/door/airlock/clockwork(get_turf(src)) + A = new/obj/machinery/door/airlock/clockwork(get_turf(src)) + A.name = name qdel(src) /obj/machinery/door/airlock/Destroy() @@ -251,16 +255,13 @@ note = null update_icon() -/obj/machinery/door/airlock/proc/unzap() //for addtimer - justzap = FALSE - /obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite if(!issilicon(usr)) if(isElectrified()) if(!justzap) if(shock(user, 100)) justzap = TRUE - addtimer(CALLBACK(src, .proc/unzap), 10) + addtimer(VARSET_CALLBACK(src, justzap, FALSE) , 10) return else return @@ -568,6 +569,8 @@ /obj/machinery/door/airlock/examine(mob/user) ..() + if(emagged) + to_chat(user, "Its access panel is smoking slightly.") if(charge && !panel_open && in_range(user, src)) to_chat(user, "The maintenance panel seems haphazardly fastened.") if(charge && panel_open) @@ -680,7 +683,7 @@ if(ishuman(user) && prob(40) && src.density) var/mob/living/carbon/human/H = user - if((H.disabilities & DUMB) && Adjacent(user)) + if((H.has_disability(DISABILITY_DUMB)) && Adjacent(user)) playsound(src.loc, 'sound/effects/bang.ogg', 25, 1) if(!istype(H.head, /obj/item/clothing/head/helmet)) H.visible_message("[user] headbutts the airlock.", \ @@ -1231,7 +1234,6 @@ if(!open()) update_icon(AIRLOCK_CLOSED, 1) emagged = TRUE - desc = "Its access panel is smoking slightly." lights = FALSE locked = TRUE loseMainPower() diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index f303b892b3..08e5b42a46 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -79,69 +79,49 @@ opacity = 0 glass = TRUE -/obj/machinery/door/airlock/glass_command - icon = 'icons/obj/doors/airlocks/station/command.dmi' +/obj/machinery/door/airlock/command/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_com glass = TRUE normal_integrity = 400 -/obj/machinery/door/airlock/glass_engineering - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' +/obj/machinery/door/airlock/engineering/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_eng glass = TRUE -/obj/machinery/door/airlock/glass_security - icon = 'icons/obj/doors/airlocks/station/security.dmi' +/obj/machinery/door/airlock/security/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_sec glass = TRUE normal_integrity = 400 -/obj/machinery/door/airlock/glass_security/abandoned +/obj/machinery/door/airlock/security/glass/abandoned abandoned = TRUE -/obj/machinery/door/airlock/glass_medical - icon = 'icons/obj/doors/airlocks/station/medical.dmi' +/obj/machinery/door/airlock/medical/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_med glass = TRUE -/obj/machinery/door/airlock/glass_research - icon = 'icons/obj/doors/airlocks/station/research.dmi' +/obj/machinery/door/airlock/research/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_research glass = TRUE -/obj/machinery/door/airlock/glass_mining - icon = 'icons/obj/doors/airlocks/station/mining.dmi' +/obj/machinery/door/airlock/mining/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_min glass = TRUE -/obj/machinery/door/airlock/glass_atmos - icon = 'icons/obj/doors/airlocks/station/atmos.dmi' +/obj/machinery/door/airlock/atmos/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_atmo glass = TRUE -/obj/machinery/door/airlock/glass_science - icon = 'icons/obj/doors/airlocks/station/science.dmi' +/obj/machinery/door/airlock/science/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_science glass = TRUE -/obj/machinery/door/airlock/glass_virology - icon = 'icons/obj/doors/airlocks/station/virology.dmi' +/obj/machinery/door/airlock/virology/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_viro glass = TRUE -/obj/machinery/door/airlock/glass_maintenance - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' +/obj/machinery/door/airlock/maintenance/glass opacity = 0 - assemblytype = /obj/structure/door_assembly/door_assembly_mai glass = TRUE /obj/machinery/door/airlock/maintenance/external/glass diff --git a/code/game/machinery/doors/alarmlock.dm b/code/game/machinery/doors/alarmlock.dm index 5630b3ffb0..1649082138 100644 --- a/code/game/machinery/doors/alarmlock.dm +++ b/code/game/machinery/doors/alarmlock.dm @@ -7,7 +7,7 @@ glass = TRUE var/datum/radio_frequency/air_connection - var/air_frequency = 1437 + var/air_frequency = FREQ_ATMOS_ALARMS autoclose = FALSE /obj/machinery/door/airlock/alarmlock/New() @@ -22,7 +22,7 @@ /obj/machinery/door/airlock/alarmlock/Initialize() . = ..() SSradio.remove_object(src, air_frequency) - air_connection = SSradio.add_object(src, air_frequency, GLOB.RADIO_TO_AIRALARM) + air_connection = SSradio.add_object(src, air_frequency, RADIO_TO_AIRALARM) open() /obj/machinery/door/airlock/alarmlock/receive_signal(datum/signal/signal) @@ -41,4 +41,4 @@ close() if("minor", "clear") autoclose = FALSE - open() + open() \ No newline at end of file diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index a622f0af3d..bf3baf8b6f 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -112,8 +112,8 @@ return 0 if(!forced) - Radio.set_frequency(GLOB.SEC_FREQ) - Radio.talk_into(src, "Timer has expired. Releasing prisoner.", GLOB.SEC_FREQ, get_default_language()) + Radio.set_frequency(FREQ_SECURITY) + Radio.talk_into(src, "Timer has expired. Releasing prisoner.", FREQ_SECURITY) timing = FALSE activation_time = null diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 30ae436289..85ec73cdc6 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -32,11 +32,27 @@ var/datum/effect_system/spark_spread/spark_system var/damage_deflection = 10 var/real_explosion_block //ignore this, just use explosion_block + var/red_alert_access = FALSE //if TRUE, this door will always open on red alert /obj/machinery/door/examine(mob/user) ..() + if(red_alert_access) + if(GLOB.security_level >= SEC_LEVEL_RED) + to_chat(user, "Due to a security threat, its access requirements have been lifted!") + else + to_chat(user, "In the event of a red alert, its access requirements will automatically lift.") to_chat(user, "Its maintenance panel is screwed in place.") +/obj/machinery/door/check_access(access) + if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED) + return TRUE + return ..() + +/obj/machinery/door/check_access_list(list/access_list) + if(red_alert_access && GLOB.security_level >= SEC_LEVEL_RED) + return TRUE + return ..() + /obj/machinery/door/New() ..() if(density) @@ -96,7 +112,7 @@ /obj/machinery/door/Move() var/turf/T = loc - ..() + . = ..() move_update_air(T) /obj/machinery/door/CanPass(atom/movable/mover, turf/target) @@ -195,7 +211,7 @@ /obj/machinery/door/emp_act(severity) if(prob(20/severity) && (istype(src, /obj/machinery/door/airlock) || istype(src, /obj/machinery/door/window)) ) INVOKE_ASYNC(src, .proc/open) - if(prob(40/severity)) + if(prob(severity*10 - 20)) if(secondsElectrified == 0) secondsElectrified = -1 shockedby += "\[[time_stamp()]\]EM Pulse" diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index fd66892048..67280cc762 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -1,66 +1,68 @@ -/obj/machinery/door/poddoor - name = "blast door" - desc = "A heavy duty blast door that opens mechanically." - icon = 'icons/obj/doors/blastdoor.dmi' - icon_state = "closed" - var/id = 1 +/obj/machinery/door/poddoor + name = "blast door" + desc = "A heavy duty blast door that opens mechanically." + icon = 'icons/obj/doors/blastdoor.dmi' + icon_state = "closed" + var/id = 1 sub_door = TRUE - explosion_block = 3 + explosion_block = 3 heat_proof = TRUE safe = FALSE - max_integrity = 600 - armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 100, acid = 70) - resistance_flags = FIRE_PROOF - damage_deflection = 70 - -/obj/machinery/door/poddoor/preopen - icon_state = "open" + max_integrity = 600 + armor = list(melee = 50, bullet = 100, laser = 100, energy = 100, bomb = 50, bio = 100, rad = 100, fire = 100, acid = 70) + resistance_flags = FIRE_PROOF + damage_deflection = 70 + +/obj/machinery/door/poddoor/preopen + icon_state = "open" density = FALSE - opacity = 0 - -/obj/machinery/door/poddoor/ert - desc = "A heavy duty blast door that only opens for dire emergencies." - -//special poddoors that open when emergency shuttle docks at centcom -/obj/machinery/door/poddoor/shuttledock - var/checkdir = 4 //door won't open if turf in this dir is `turftype` - var/turftype = /turf/open/space - -/obj/machinery/door/poddoor/shuttledock/proc/check() - var/turf/T = get_step(src, checkdir) - if(!istype(T, turftype)) - INVOKE_ASYNC(src, .proc/open) - else - INVOKE_ASYNC(src, .proc/close) - + opacity = 0 + +/obj/machinery/door/poddoor/ert + desc = "A heavy duty blast door that only opens for dire emergencies." + +//special poddoors that open when emergency shuttle docks at centcom +/obj/machinery/door/poddoor/shuttledock + var/checkdir = 4 //door won't open if turf in this dir is `turftype` + var/turftype = /turf/open/space + +/obj/machinery/door/poddoor/shuttledock/proc/check() + var/turf/T = get_step(src, checkdir) + if(!istype(T, turftype)) + INVOKE_ASYNC(src, .proc/open) + else + INVOKE_ASYNC(src, .proc/close) + /obj/machinery/door/poddoor/CollidedWith(atom/movable/AM) - if(density) - return 0 - else - return ..() - -//"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. -/obj/machinery/door/poddoor/ex_act(severity, target) - if(severity == 3) - return - ..() - -/obj/machinery/door/poddoor/do_animate(animation) - switch(animation) - if("opening") - flick("opening", src) - if("closing") - flick("closing", src) - -/obj/machinery/door/poddoor/update_icon() - if(density) - icon_state = "closed" - else - icon_state = "open" - -/obj/machinery/door/poddoor/try_to_activate_door(mob/user) - return - -/obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) - if(stat & NOPOWER) - open(1) + if(density) + return 0 + else + return ..() + +//"BLAST" doors are obviously stronger than regular doors when it comes to BLASTS. +/obj/machinery/door/poddoor/ex_act(severity, target) + if(severity == 3) + return + ..() + +/obj/machinery/door/poddoor/do_animate(animation) + switch(animation) + if("opening") + flick("opening", src) + playsound(src, 'sound/machines/blastdoor.ogg', 30, 1) + if("closing") + flick("closing", src) + playsound(src, 'sound/machines/blastdoor.ogg', 30, 1) + +/obj/machinery/door/poddoor/update_icon() + if(density) + icon_state = "closed" + else + icon_state = "open" + +/obj/machinery/door/poddoor/try_to_activate_door(mob/user) + return + +/obj/machinery/door/poddoor/try_to_crowbar(obj/item/I, mob/user) + if(stat & NOPOWER) + open(1) diff --git a/code/game/machinery/doors/shutters.dm b/code/game/machinery/doors/shutters.dm index 0cd33b1925..77267a49a4 100644 --- a/code/game/machinery/doors/shutters.dm +++ b/code/game/machinery/doors/shutters.dm @@ -26,4 +26,4 @@ /obj/machinery/door/poddoor/shutters/close(ignorepower = 0) ..() - layer = CLOSED_DOOR_LAYER + layer = CLOSED_DOOR_LAYER \ No newline at end of file diff --git a/code/game/machinery/doors/unpowered.dm b/code/game/machinery/doors/unpowered.dm index 4b7ec4b3dd..2960335813 100644 --- a/code/game/machinery/doors/unpowered.dm +++ b/code/game/machinery/doors/unpowered.dm @@ -1,25 +1,25 @@ -/obj/machinery/door/unpowered - +/obj/machinery/door/unpowered + /obj/machinery/door/unpowered/CollidedWith(atom/movable/AM) - if(src.locked) - return - ..() - return - - -/obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) - if(locked) - return - else - return ..() - -/obj/machinery/door/unpowered/emag_act() - return - -/obj/machinery/door/unpowered/shuttle - icon = 'icons/turf/shuttle.dmi' - name = "door" - icon_state = "door1" - opacity = 1 + if(src.locked) + return + ..() + return + + +/obj/machinery/door/unpowered/attackby(obj/item/I, mob/user, params) + if(locked) + return + else + return ..() + +/obj/machinery/door/unpowered/emag_act() + return + +/obj/machinery/door/unpowered/shuttle + icon = 'icons/turf/shuttle.dmi' + name = "door" + icon_state = "door1" + opacity = 1 density = TRUE explosion_block = 1 \ No newline at end of file diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index dce884b794..bd1a553863 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -192,7 +192,8 @@ add_atom_colour("#7D1919", FIXED_COLOUR_PRIORITY) /obj/machinery/door/window/ratvar_act() - new/obj/machinery/door/window/clockwork(src.loc, dir) + var/obj/machinery/door/window/clockwork/C = new(loc, dir) + C.name = name qdel(src) /obj/machinery/door/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index c13dfc9b88..cdfb72a6ef 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -19,6 +19,10 @@ GLOBAL_LIST_EMPTY(doppler_arrays) GLOB.doppler_arrays -= src return ..() +/obj/machinery/doppler_array/examine(mob/user) + ..() + to_chat(user, "Its dish is facing to the [dir2text(dir)].") + /obj/machinery/doppler_array/process() return PROCESS_KILL diff --git a/code/game/machinery/embedded_controller/airlock_controller.dm b/code/game/machinery/embedded_controller/airlock_controller.dm index f34191370d..35b700801d 100644 --- a/code/game/machinery/embedded_controller/airlock_controller.dm +++ b/code/game/machinery/embedded_controller/airlock_controller.dm @@ -17,7 +17,7 @@ var/target_state = AIRLOCK_STATE_CLOSED var/sensor_pressure = null -/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal, receive_method, receive_param) +/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal) var/receive_tag = signal.data["tag"] if(!receive_tag) return @@ -68,19 +68,17 @@ state = AIRLOCK_STATE_CLOSED process_again = 1 else - var/datum/signal/signal = new - signal.data["tag"] = interior_door_tag - signal.data["command"] = "secure_close" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = interior_door_tag, + "command" = "secure_close" + ))) else if(memory["pump_status"] != "off") - var/datum/signal/signal = new - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, "power" = 0, - "sigtype"="command" - ) - post_signal(signal) + "sigtype" = "command" + ))) if(AIRLOCK_STATE_PRESSURIZE) if(target_state < state) @@ -89,16 +87,15 @@ state = AIRLOCK_STATE_INOPEN process_again = 1 else - var/datum/signal/signal = new - signal.data["tag"] = interior_door_tag - signal.data["command"] = "secure_open" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = interior_door_tag, + "command" = "secure_open" + ))) else - var/datum/signal/signal = new - signal.data = list( + var/datum/signal/signal = new(list( "tag" = airpump_tag, - "sigtype"="command" - ) + "sigtype" = "command" + )) if(memory["pump_status"] == "siphon") signal.data["stabalize"] = 1 else if(memory["pump_status"] != "release") @@ -114,29 +111,27 @@ state = AIRLOCK_STATE_DEPRESSURIZE process_again = 1 else - var/datum/signal/signal = new - signal.data["tag"] = interior_door_tag - signal.data["command"] = "secure_close" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = interior_door_tag, + "command" = "secure_close" + ))) else if(target_state < state) if(memory["exterior_status"] == "closed") state = AIRLOCK_STATE_PRESSURIZE process_again = 1 else - var/datum/signal/signal = new - signal.data["tag"] = exterior_door_tag - signal.data["command"] = "secure_close" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = exterior_door_tag, + "command" = "secure_close" + ))) else if(memory["pump_status"] != "off") - var/datum/signal/signal = new - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, "power" = 0, - "sigtype"="command" - ) - post_signal(signal) + "sigtype" = "command" + ))) if(AIRLOCK_STATE_DEPRESSURIZE) var/target_pressure = ONE_ATMOSPHERE*0.05 @@ -148,10 +143,10 @@ if(memory["exterior_status"] == "open") state = AIRLOCK_STATE_OUTOPEN else - var/datum/signal/signal = new - signal.data["tag"] = exterior_door_tag - signal.data["command"] = "secure_open" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = exterior_door_tag, + "command" = "secure_open" + ))) else if(target_state < state) state = AIRLOCK_STATE_CLOSED process_again = 1 @@ -159,12 +154,10 @@ state = AIRLOCK_STATE_CLOSED process_again = 1 else - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data = list( + var/datum/signal/signal = new(list( "tag" = airpump_tag, - "sigtype"="command" - ) + "sigtype" = "command" + )) if(memory["pump_status"] == "release") signal.data["purge"] = 1 else if(memory["pump_status"] != "siphon") @@ -181,19 +174,17 @@ state = AIRLOCK_STATE_CLOSED process_again = 1 else - var/datum/signal/signal = new - signal.data["tag"] = exterior_door_tag - signal.data["command"] = "secure_close" - post_signal(signal) + post_signal(new /datum/signal(list( + "tag" = exterior_door_tag, + "command" = "secure_close" + ))) else if(memory["pump_status"] != "off") - var/datum/signal/signal = new - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, "power" = 0, - "sigtype"="command" - ) - post_signal(signal) + "sigtype" = "command" + ))) memory["sensor_pressure"] = sensor_pressure memory["processing"] = state != target_state @@ -209,7 +200,7 @@ name = "airlock console" density = FALSE - frequency = 1449 + frequency = FREQ_AIRLOCK_CONTROL power_channel = ENVIRON // Setup parameters only @@ -293,4 +284,4 @@ [state_options]"} - return output + return output \ No newline at end of file diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 16691160f2..2ead1d99d7 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -11,7 +11,7 @@ /datum/computer/file/embedded_program/proc/receive_user_command(command) -/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param) +/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal) return null /datum/computer/file/embedded_program/process() @@ -43,13 +43,9 @@ /obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line) return 0 -/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param) - if(!signal || signal.encryption) - return - - if(program) - program.receive_signal(signal, receive_method, receive_param) - //spawn(5) program.process() //no, program.process sends some signals and machines respond and we here again and we lag -rastaf0 +/obj/machinery/embedded_controller/receive_signal(datum/signal/signal) + if(istype(signal) && program) + program.receive_signal(signal) /obj/machinery/embedded_controller/Topic(href, href_list) if(..()) diff --git a/code/game/machinery/embedded_controller/simple_vent_controller.dm b/code/game/machinery/embedded_controller/simple_vent_controller.dm index af945c7ccb..2a5faef0e1 100644 --- a/code/game/machinery/embedded_controller/simple_vent_controller.dm +++ b/code/game/machinery/embedded_controller/simple_vent_controller.dm @@ -5,34 +5,27 @@ /datum/computer/file/embedded_program/simple_vent_controller/receive_user_command(command) switch(command) if("vent_inactive") - var/datum/signal/signal = new - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, - "sigtype"="command" - ) - signal.data["power"] = 0 - post_signal(signal) + "sigtype" = "command", + "power" = 0 + ))) if("vent_pump") - var/datum/signal/signal = new - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, - "sigtype"="command" - ) - signal.data["stabalize"] = 1 - signal.data["power"] = 1 - post_signal(signal) + "sigtype" = "command", + "stabalize" = 1, + "power" = 1 + ))) if("vent_clear") - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.data = list( + post_signal(new /datum/signal(list( "tag" = airpump_tag, - "sigtype"="command" - ) - signal.data["purge"] = 1 - signal.data["power"] = 1 - post_signal(signal) + "sigtype" = "command", + "purge" = 1, + "power" = 1 + ))) /datum/computer/file/embedded_program/simple_vent_controller/process() return 0 @@ -45,7 +38,7 @@ name = "vent controller" density = FALSE - frequency = 1229 + frequency = FREQ_ATMOS_CONTROL power_channel = ENVIRON // Setup parameters only diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index ae4af4072d..5a306cac50 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -70,7 +70,7 @@ if(stat & NOPOWER) return - if(src.z in GLOB.station_z_levels) + if(is_station_level(z)) add_overlay("overlay_[GLOB.security_level]") else add_overlay("overlay_[SEC_LEVEL_GREEN]") @@ -124,7 +124,7 @@ var/list/data = list() data["emagged"] = emagged - if(src.z in GLOB.station_z_levels) + if(is_station_level(z)) data["seclevel"] = get_security_level() else data["seclevel"] = "green" diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index 198d368d59..7aa3859cdf 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -213,4 +213,4 @@ to_chat(user, "[attached ? attached : "No one"] is attached.") #undef IV_TAKING -#undef IV_INJECTING +#undef IV_INJECTING \ No newline at end of file diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index aa3bf465f2..8263795c60 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -15,7 +15,7 @@ use_power = IDLE_POWER_USE idle_power_usage = 50 - var/freq = 1449 // radio frequency + var/freq = FREQ_MAGNETS // radio frequency var/electricity_level = 1 // intensity of the magnetic pull var/magnetic_field = 1 // the range of magnetic attraction var/code = 0 // frequency code, they should be different unless you have a group of magnets working together or something @@ -33,7 +33,7 @@ var/turf/T = loc hide(T.intact) center = T - SSradio.add_object(src, freq, GLOB.RADIO_MAGNETS) + SSradio.add_object(src, freq, RADIO_MAGNETS) return INITIALIZE_HINT_LATELOAD /obj/machinery/magnetic_module/LateInitialize() @@ -198,7 +198,7 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 45 - var/frequency = 1449 + var/frequency = FREQ_MAGNETS var/code = 0 var/list/magnets = list() var/title = "Magnetic Control Console" @@ -224,7 +224,7 @@ if(path) // check for default path filter_path() // renders rpath - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_MAGNETS) + radio_connection = SSradio.add_object(src, frequency, RADIO_MAGNETS) /obj/machinery/magnetic_controller/Destroy() SSradio.remove_object(src, frequency) @@ -278,11 +278,7 @@ if(href_list["radio-op"]) // Prepare signal beforehand, because this is a radio operation - var/datum/signal/signal = new - signal.transmission_method = 1 // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["code"] = code + var/datum/signal/signal = new(list("code" = code)) // Apply any necessary commands switch(href_list["radio-op"]) @@ -302,7 +298,7 @@ // Broadcast the signal - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS) + radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) spawn(1) updateUsrDialog() // pretty sure this increases responsiveness @@ -345,11 +341,7 @@ looping = 1 // Prepare the radio signal - var/datum/signal/signal = new - signal.transmission_method = 1 // radio transmission - signal.source = src - signal.frequency = frequency - signal.data["code"] = code + var/datum/signal/signal = new(list("code" = code)) if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list! pathpos = 1 @@ -370,7 +362,7 @@ // Broadcast the signal spawn() - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_MAGNETS) + radio_connection.post_signal(src, signal, filter = RADIO_MAGNETS) if(speed == 10) sleep(1) @@ -393,4 +385,4 @@ if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore rpath += copytext(path, i, i+1) // else, add to list - // there doesn't HAVE to be separators but it makes paths syntatically visible \ No newline at end of file + // there doesn't HAVE to be separators but it makes paths syntatically visible diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index e62d25e5fa..fe2926f150 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -15,7 +15,7 @@ var/open = FALSE // true if cover is open var/locked = TRUE // true if controls are locked - var/freq = 1445 // radio frequency + var/freq = FREQ_NAV_BEACON var/location = "" // location response text var/list/codes // assoc. list of transponder codes var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value" @@ -205,4 +205,4 @@ Transponder Codes:
    "} codes[newkey] = newval - updateDialog() + updateDialog() \ No newline at end of file diff --git a/code/game/machinery/newscaster.dm b/code/game/machinery/newscaster.dm index ee9b1ff31a..541c931593 100644 --- a/code/game/machinery/newscaster.dm +++ b/code/game/machinery/newscaster.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(allCasters) var/creationTime var/authorCensor var/bodyCensor + var/photo_file /datum/newscaster/feed_message/proc/returnAuthor(censor) if(censor == -1) @@ -97,6 +98,7 @@ GLOBAL_LIST_EMPTY(allCasters) var/scannedUser var/isAdminMsg var/icon/img + var/photo_file /datum/newscaster/feed_network var/list/datum/newscaster/feed_channel/network_channels = list() @@ -126,6 +128,7 @@ GLOBAL_LIST_EMPTY(allCasters) if(photo) newMsg.img = photo.img newMsg.caption = photo.scribble + newMsg.photo_file = save_photo(photo.img) for(var/datum/newscaster/feed_channel/FC in network_channels) if(FC.channel_name == channel_name) FC.messages += newMsg @@ -143,6 +146,7 @@ GLOBAL_LIST_EMPTY(allCasters) wanted_issue.isAdminMsg = adminMsg if(photo) wanted_issue.img = photo.img + wanted_issue.photo_file = save_photo(photo.img) if(newMessage) for(var/obj/machinery/newscaster/N in GLOB.allCasters) N.newsAlert() @@ -157,7 +161,12 @@ GLOBAL_LIST_EMPTY(allCasters) for(var/obj/machinery/newscaster/NEWSCASTER in GLOB.allCasters) NEWSCASTER.update_icon() - +/datum/newscaster/feed_network/proc/save_photo(icon/photo) + var/photo_file = copytext(md5("\icon[photo]"), 1, 6) + if(!fexists("[GLOB.log_directory]/photos/[photo_file].png")) + var/icon/p = icon(photo, frame = 1) + fcopy(p, "[GLOB.log_directory]/photos/[photo_file].png") + return photo_file /obj/item/wallframe/newscaster name = "newscaster frame" diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index a67ce24c9c..f3d3933428 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -154,11 +154,8 @@ to_chat(usr, "There's not enough room to build that here!") qdel(C) return - - if(href_list["dir"]) C.setDir(text2num(href_list["dir"])) - C.add_fingerprint(usr) C.update_icon() wait = world.time + 15 diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index bf3c94646c..6a04ca0886 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -15,17 +15,17 @@ var/teleporting = 0 //if it's in the process of teleporting var/power_efficiency = 1 var/obj/machinery/quantumpad/linked_pad - + //mapping var/static/list/mapped_quantum_pads = list() var/map_pad_id = "" as text //what's my name var/map_pad_link_id = "" as text //who's my friend - + /obj/machinery/quantumpad/Initialize() . = ..() if(map_pad_id) mapped_quantum_pads[map_pad_id] = src - + /obj/machinery/quantumpad/Destroy() mapped_quantum_pads -= map_pad_id return ..() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index f0e6eb2df0..c65b9a321a 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -315,13 +315,13 @@ GLOBAL_LIST_EMPTY(allConsoles) var/radio_freq switch(text2num(href_list["emergency"])) if(1) //Security - radio_freq = GLOB.SEC_FREQ + radio_freq = FREQ_SECURITY emergency = "Security" if(2) //Engineering - radio_freq = GLOB.ENG_FREQ + radio_freq = FREQ_ENGINEERING emergency = "Engineering" if(3) //Medical - radio_freq = GLOB.MED_FREQ + radio_freq = FREQ_MEDICAL emergency = "Medical" if(radio_freq) Radio.set_frequency(radio_freq) @@ -341,28 +341,28 @@ GLOBAL_LIST_EMPTY(allConsoles) sending += "
    " screen = 7 //if it's successful, this will get overrwritten (7 = unsufccessfull, 6 = successfull) if (sending) - var/pass = 0 - for (var/obj/machinery/message_server/MS in GLOB.machines) - if(!MS.active) - continue - MS.send_rc_message(href_list["department"],department,log_msg,msgStamped,msgVerified,priority) - pass = 1 + var/pass = FALSE + var/datum/data_rc_msg/log = new(href_list["department"], department, log_msg, msgStamped, msgVerified, priority) + for (var/obj/machinery/telecomms/message_server/MS in GLOB.telecomms_list) + if (MS.toggled) + MS.rc_msgs += log + pass = TRUE if(pass) var/radio_freq = 0 switch(href_list["department"]) if("bridge") - radio_freq = GLOB.COMM_FREQ + radio_freq = FREQ_COMMAND if("medbay") - radio_freq = GLOB.MED_FREQ + radio_freq = FREQ_MEDICAL if("science") - radio_freq = GLOB.SCI_FREQ + radio_freq = FREQ_SCIENCE if("engineering") - radio_freq = GLOB.ENG_FREQ + radio_freq = FREQ_ENGINEERING if("security") - radio_freq = GLOB.SEC_FREQ + radio_freq = FREQ_SECURITY if("cargobay" || "mining") - radio_freq = GLOB.SUPP_FREQ + radio_freq = FREQ_SUPPLY Radio.set_frequency(radio_freq) var/authentic if(msgVerified || msgStamped) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index cdbdb195cc..b681845a10 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -22,7 +22,7 @@ /obj/structure/emergency_shield/Move() var/turf/T = loc - ..() + . = ..() move_update_air(T) /obj/structure/emergency_shield/emp_act(severity) @@ -180,19 +180,25 @@ anchored = FALSE else if(W.GetID()) - if(allowed(user)) + if(allowed(user) && !emagged) locked = !locked to_chat(user, "You [locked ? "lock" : "unlock"] the controls.") + else if(emagged) + to_chat(user, "Error, access controller damaged!") else to_chat(user, "Access denied.") else return ..() -/obj/machinery/shieldgen/emag_act() - if(!(stat & BROKEN)) - stat |= BROKEN - update_icon() +/obj/machinery/shieldgen/emag_act(mob/user) + if(emagged) + to_chat(user, "The access controller is damaged!") + return + emagged = TRUE + locked = FALSE + playsound(src, "sparks", 100, 1) + to_chat(user, "You short out the access controller.") /obj/machinery/shieldgen/update_icon() if(active) @@ -337,9 +343,11 @@ default_unfasten_wrench(user, W, 0) else if(W.GetID()) - if(allowed(user)) + if(allowed(user) && !emagged) locked = !locked to_chat(user, "You [src.locked ? "lock" : "unlock"] the controls.") + else if(emagged) + to_chat(user, "Error, access controller damaged!") else to_chat(user, "Access denied.") @@ -372,6 +380,14 @@ update_activity() add_fingerprint(user) +/obj/machinery/shieldwallgen/emag_act(mob/user) + if(emagged) + to_chat(user, "The access controller is damaged!") + return + emagged = TRUE + locked = FALSE + playsound(src, "sparks", 100, 1) + to_chat(user, "You short out the access controller.") //////////////Containment Field START /obj/machinery/shieldwall diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 83681475fd..706e14cae6 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -32,7 +32,7 @@ var/index1 // display index for scrolling messages or 0 if non-scrolling var/index2 - var/frequency = 1435 // radio frequency + var/frequency = FREQ_STATUS_DISPLAYS var/supply_display = 0 // true if a supply shuttle display var/shuttle_id // Id used for "generic shuttle timer" mode @@ -107,7 +107,7 @@ var/line1 var/line2 if(SSshuttle.supply.mode == SHUTTLE_IDLE) - if(SSshuttle.supply.z in GLOB.station_z_levels) + if(is_station_level(SSshuttle.supply.z)) line1 = "CARGO" line2 = "Docked" else @@ -140,7 +140,7 @@ var/obj/docking_port/mobile/shuttle = SSshuttle.supply var/shuttleMsg = null if (shuttle.mode == SHUTTLE_IDLE) - if (shuttle.z in GLOB.station_z_levels) + if (is_station_level(shuttle.z)) shuttleMsg = "Docked" else shuttleMsg = "[shuttle.getModeStr()]: [shuttle.getTimerStr()]" diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 53c0b746bd..307107d517 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -236,8 +236,7 @@ visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") playsound(src, 'sound/machines/airlockclose.ogg', 25, 1) for(var/obj/item/I in src) //Scorches away blood and forensic evidence, although the SSU itself is unaffected - I.clean_blood() - I.fingerprints = list() + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRONG) var/datum/component/radioactive/contamination = I.GetComponent(/datum/component/radioactive) if(contamination) qdel(contamination) diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index aebccdddd2..7d795c9ce2 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -53,132 +53,141 @@ **/ +// Subtype of /datum/signal with additional processing information. +/datum/signal/subspace + transmission_method = TRANSMISSION_SUBSPACE + var/server_type = /obj/machinery/telecomms/server + var/datum/signal/subspace/original + var/list/levels -/proc/Broadcast_Message(var/atom/movable/AM, - var/vmask, var/obj/item/device/radio/radio, - var/message, var/name, var/job, var/realname, - var/data, var/compression, var/list/level, var/freq, var/list/spans, - var/verb_say, var/verb_ask, var/verb_exclaim, var/verb_yell, var/datum/language/language) +/datum/signal/subspace/New(data) + src.data = data || list() +/datum/signal/subspace/proc/copy() + var/datum/signal/subspace/copy = new + copy.original = src + copy.source = source + copy.levels = levels + copy.frequency = frequency + copy.server_type = server_type + copy.transmission_method = transmission_method + copy.data = data.Copy() + return copy + +/datum/signal/subspace/proc/mark_done() + var/datum/signal/subspace/current = src + while (current) + current.data["done"] = TRUE + current = current.original + +/datum/signal/subspace/proc/send_to_receivers() + for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) + R.receive_signal(src) + for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) + R.receive_signal(src) + +/datum/signal/subspace/proc/broadcast() set waitfor = FALSE - message = copytext(message, 1, MAX_BROADCAST_LEN) +// Vocal transmissions (i.e. using saycode). +// Despite "subspace" in the name, these transmissions can also be RADIO +// (intercoms and SBRs) or SUPERSPACE (CentCom). +/datum/signal/subspace/vocal + var/atom/movable/virtualspeaker/virt + var/datum/language/language +/datum/signal/subspace/vocal/New( + obj/source, // the originating radio + frequency, // the frequency the signal is taking place on + atom/movable/virtualspeaker/speaker, // representation of the method's speaker + datum/language/language, // the langauge of the message + message, // the text content of the message + spans // the list of spans applied to the message +) + src.source = source + src.frequency = frequency + src.language = language + virt = speaker + var/datum/language/lang_instance = GLOB.language_datum_instances[language] + data = list( + "name" = speaker.name, + "job" = speaker.job, + "message" = message, + "compression" = rand(35, 65), + "language" = lang_instance.name, + "spans" = spans + ) + var/turf/T = get_turf(source) + levels = list(T.z) + +/datum/signal/subspace/vocal/copy() + var/datum/signal/subspace/vocal/copy = new(source, frequency, virt, language) + copy.original = src + copy.data = data.Copy() + copy.levels = levels + return copy + +// This is the meat function for making radios hear vocal transmissions. +/datum/signal/subspace/vocal/broadcast() + set waitfor = FALSE + + // Perform final composition steps on the message. + var/message = copytext(data["message"], 1, MAX_BROADCAST_LEN) if(!message) return - - var/list/radios = list() - - var/atom/movable/virtualspeaker/virt = new /atom/movable/virtualspeaker(null) - virt.name = name - virt.job = job - virt.source = AM - virt.radio = radio - virt.verb_say = verb_say - virt.verb_ask = verb_ask - virt.verb_exclaim = verb_exclaim - virt.verb_yell = verb_yell - + var/compression = data["compression"] if(compression > 0) message = Gibberish(message, compression + 40) - // --- Broadcast only to intercom devices --- + // Assemble the list of radios + var/list/radios = list() + switch (transmission_method) + if (TRANSMISSION_SUBSPACE) + // Reaches any radios on the levels + for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"]) + if(R.can_receive(frequency, levels)) + radios += R - if(data == 1) - for(var/obj/item/device/radio/intercom/R in GLOB.all_radios["[freq]"]) - if(R.receive_range(freq, level) > -1) - radios += R + // Syndicate radios can hear all well-known radio channels + if (num2text(frequency) in GLOB.reverseradiochannels) + for(var/obj/item/device/radio/R in GLOB.all_radios["[FREQ_SYNDICATE]"]) + if(R.can_receive(FREQ_SYNDICATE, list(R.z))) + radios |= R - // --- Broadcast only to intercoms and station-bounced radios --- + if (TRANSMISSION_RADIO) + // Only radios not currently in subspace mode + for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"]) + if(!R.subspace_transmission && R.can_receive(frequency, levels)) + radios += R - else if(data == 2) + if (TRANSMISSION_SUPERSPACE) + // Only radios which are independent + for(var/obj/item/device/radio/R in GLOB.all_radios["[frequency]"]) + if(R.independent && R.can_receive(frequency, levels)) + radios += R - for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) - if(R.subspace_transmission) - continue + // From the list of radios, find all mobs who can hear those. + var/list/receive = get_mobs_in_radio_ranges(radios) - if(R.receive_range(freq, level) > -1) - radios += R - - // --- This space left blank for Syndicate data --- - - // --- CentCom radio, yo. --- - - else if(data == 5) - - for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) - if(!R.independent) - continue - - if(R.receive_range(freq, level) > -1) - radios += R - - // --- Broadcast to ALL radio devices --- - - else - for(var/obj/item/device/radio/R in GLOB.all_radios["[freq]"]) - if(R.receive_range(freq, level) > -1) - radios += R - - var/freqtext = num2text(freq) - for(var/obj/item/device/radio/R in GLOB.all_radios["[GLOB.SYND_FREQ]"]) //syndicate radios use magic that allows them to hear everything. this was already the case, now it just doesn't need the allinone anymore. solves annoying bugs that aren't worth solving. - if(R.receive_range(GLOB.SYND_FREQ, list(R.z)) > -1 && freqtext in GLOB.reverseradiochannels) - radios |= R - - // Get a list of mobs who can hear from the radios we collected. - var/list/receive = get_mobs_in_radio_ranges(radios) //this includes all hearers. - - for(var/mob/R in receive) //Filter receiver list. - if (R.client && R.client.holder && !(R.client.prefs.chat_toggles & CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios. + // Cut out mobs with clients who are admins and have radio chatter disabled. + for(var/mob/R in receive) + if (R.client && R.client.holder && !(R.client.prefs.chat_toggles & CHAT_RADIO)) receive -= R - for(var/mob/M in GLOB.player_list) - if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTRADIO)) + // Add observers who have ghost radio enabled. + for(var/mob/dead/observer/M in GLOB.player_list) + if(M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTRADIO)) receive |= M - var/rendered = virt.compose_message(virt, language, message, freq, spans) //Always call this on the virtualspeaker to advoid issues. + // Render the message and have everybody hear it. + // Always call this on the virtualspeaker to avoid issues. + var/spans = data["spans"] + var/rendered = virt.compose_message(virt, language, message, frequency, spans) for(var/atom/movable/hearer in receive) - hearer.Hear(rendered, virt, language, message, freq, spans) + hearer.Hear(rendered, virt, language, message, frequency, spans) + // This following recording is intended for research and feedback in the use of department radio channels if(length(receive)) - // --- This following recording is intended for research and feedback in the use of department radio channels --- - SSblackbox.LogBroadcast(freq) + SSblackbox.LogBroadcast(frequency) - sleep(50) - if(!QDELETED(virt)) //It could happen to YOU - qdel(virt) - -//Use this to test if an obj can communicate with a Telecommunications Network - -/atom/proc/test_telecomms() - var/datum/signal/signal = telecomms_process() - var/turf/position = get_turf(src) - return (position.z in signal.data["level"] && signal.data["done"]) - -/atom/proc/telecomms_process() - - // First, we want to generate a new radio signal - var/datum/signal/signal = new - signal.transmission_method = 2 // 2 would be a subspace transmission. - var/turf/pos = get_turf(src) - - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "message" = "TEST", - "compression" = rand(45, 50), // If the signal is compressed, compress our message too. - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = 4, // determines what type of radio input it is: test broadcast - "reject" = 0, - "done" = 0, - "level" = pos.z // The level it is being broadcasted at. - ) - signal.frequency = 1459// Common channel - - //#### Sending the signal to all subspace receivers ####// - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(signal) - - sleep(rand(10,25)) - - return signal + QDEL_IN(virt, 50) // Make extra sure the virtualspeaker gets qdeleted diff --git a/code/game/machinery/telecomms/computers/message.dm b/code/game/machinery/telecomms/computers/message.dm new file mode 100644 index 0000000000..3a4ee731ce --- /dev/null +++ b/code/game/machinery/telecomms/computers/message.dm @@ -0,0 +1,456 @@ +/* + The monitoring computer for the messaging server. + Lets you read PDA and request console messages. +*/ + +// The monitor itself. +/obj/machinery/computer/message_monitor + name = "message monitor console" + desc = "Used to monitor the crew's PDA messages, as well as request console messages." + icon_screen = "comm_logs" + circuit = /obj/item/circuitboard/computer/message_monitor + //Server linked to. + var/obj/machinery/telecomms/message_server/linkedServer = null + //Sparks effect - For emag + var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread + //Messages - Saves me time if I want to change something. + var/noserver = "ALERT: No server detected." + var/incorrectkey = "ALERT: Incorrect decryption key!" + var/defaultmsg = "Welcome. Please select an option." + var/rebootmsg = "%$&(�: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!" + //Computer properties + var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message + var/hacking = 0 // Is it being hacked into by the AI/Cyborg + var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. + var/auth = 0 // Are they authenticated? + var/optioncount = 7 + // Custom Message Properties + var/customsender = "System Administrator" + var/obj/item/device/pda/customrecepient = null + var/customjob = "Admin" + var/custommessage = "This is a test, please ignore." + + light_color = LIGHT_COLOR_GREEN + +/obj/machinery/computer/message_monitor/attackby(obj/item/O, mob/living/user, params) + if(istype(O, /obj/item/screwdriver) && emagged) + //Stops people from just unscrewing the monitor and putting it back to get the console working again. + to_chat(user, "It is too hot to mess with!") + else + return ..() + +/obj/machinery/computer/message_monitor/emag_act(mob/user) + if(emagged) + return + if(!isnull(linkedServer)) + emagged = TRUE + screen = 2 + spark_system.set_up(5, 0, src) + src.spark_system.start() + var/obj/item/paper/monitorkey/MK = new(loc, linkedServer) + // Will help make emagging the console not so easy to get away with. + MK.info += "

    �%@%(*$%&(�&?*(%&�/{}" + var/time = 100 * length(linkedServer.decryptkey) + addtimer(CALLBACK(src, .proc/UnmagConsole), time) + message = rebootmsg + else + to_chat(user, "A no server error appears on the screen.") + +/obj/machinery/computer/message_monitor/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD + +/obj/machinery/computer/message_monitor/LateInitialize() + //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. + if(!linkedServer) + for(var/obj/machinery/telecomms/message_server/S in GLOB.telecomms_list) + linkedServer = S + break + +/obj/machinery/computer/message_monitor/attack_hand(mob/living/user) + if(..()) + return + //If the computer is being hacked or is emagged, display the reboot message. + if(hacking || emagged) + message = rebootmsg + var/dat = "
    /
    " + + if(auth) + dat += "

    \[Authenticated\] /" + dat += " Server Power: [src.linkedServer && src.linkedServer.toggled ? "\[On\]":"\[Off\]"]

    " + else + dat += "

    \[Unauthenticated\] /" + dat += " Server Power: [src.linkedServer && src.linkedServer.toggled ? "\[On\]":"\[Off\]"]

    " + + if(hacking || emagged) + screen = 2 + else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + screen = 0 + + switch(screen) + //Main menu + if(0) + // = TAB + var/i = 0 + dat += "
    [++i]. Link To A Server
    " + if(auth) + if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) + dat += "
    ERROR: Server not found!
    " + else + dat += "
    [++i]. View Message Logs
    " + dat += "
    [++i]. View Request Console Logs
    " + dat += "
    [++i]. Clear Message Logs
    " + dat += "
    [++i]. Clear Request Console Logs
    " + dat += "
    [++i]. Set Custom Key
    " + dat += "
    [++i]. Send Admin Message
    " + else + for(var/n = ++i; n <= optioncount; n++) + dat += "
    [n]. ---------------
    " + if(issilicon(usr) && is_special_character(usr)) + //Malf/Traitor AIs can bruteforce into the system to gain the Key. + dat += "
    *&@#. Bruteforce Key
    " + else + dat += "
    " + + //Bottom message + if(!auth) + dat += "

    Please authenticate with the server in order to show additional options." + else + dat += "

    Reg, #514 forbids sending messages to a Head of Staff containing Erotic Rendering Properties." + + //Message Logs + if(1) + var/index = 0 + dat += "
    Back - Refresh

    " + dat += "" + for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs) + index++ + if(index > 3000) + break + // Del - Sender - Recepient - Message + // X - Al Green - Your Mom - WHAT UP!? + dat += "" + dat += "
    XSenderRecipientMessage
    X
    [pda.sender][pda.recipient][pda.message][pda.photo ? " (Photo)":""]
    " + //Hacking screen. + if(2) + if(isAI(user) || iscyborg(user)) + dat += "Brute-forcing for server key.
    It will take 20 seconds for every character that the password has." + dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time." + else + //It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever. + dat += {"01000010011100100111010101110100011001010010110
    + 10110011001101111011100100110001101101001011011100110011
    + 10010000001100110011011110111001000100000011100110110010
    + 10111001001110110011001010111001000100000011010110110010
    + 10111100100101110001000000100100101110100001000000111011
    + 10110100101101100011011000010000001110100011000010110101
    + 10110010100100000001100100011000000100000011100110110010
    + 10110001101101111011011100110010001110011001000000110011
    + 00110111101110010001000000110010101110110011001010111001
    + 00111100100100000011000110110100001100001011100100110000
    + 10110001101110100011001010111001000100000011101000110100
    + 00110000101110100001000000111010001101000011001010010000
    + 00111000001100001011100110111001101110111011011110111001
    + 00110010000100000011010000110000101110011001011100010000
    + 00100100101101110001000000111010001101000011001010010000
    + 00110110101100101011000010110111001110100011010010110110
    + 10110010100101100001000000111010001101000011010010111001
    + 10010000001100011011011110110111001110011011011110110110
    + 00110010100100000011000110110000101101110001000000111001
    + 00110010101110110011001010110000101101100001000000111100
    + 10110111101110101011100100010000001110100011100100111010
    + 10110010100100000011010010110111001110100011001010110111
    + 00111010001101001011011110110111001110011001000000110100
    + 10110011000100000011110010110111101110101001000000110110
    + 00110010101110100001000000111001101101111011011010110010
    + 10110111101101110011001010010000001100001011000110110001
    + 10110010101110011011100110010000001101001011101000010111
    + 00010000001001101011000010110101101100101001000000111001
    + 10111010101110010011001010010000001101110011011110010000
    + 00110100001110101011011010110000101101110011100110010000
    + 00110010101101110011101000110010101110010001000000111010
    + 00110100001100101001000000111001001101111011011110110110
    + 10010000001100100011101010111001001101001011011100110011
    + 10010000001110100011010000110000101110100001000000111010
    + 001101001011011010110010100101110"} + + //Fake messages + if(3) + dat += "
    Back - Reset

    " + + dat += {" + + + + "} + //Sender - Sender's Job - Recepient - Message + //Al Green- Your Dad - Your Mom - WHAT UP!? + + dat += {" + + + "} + dat += "
    SenderSender's JobRecipientMessage
    [customsender][customjob][customrecepient ? customrecepient.owner : "NONE"][custommessage]

    Send" + + //Request Console Logs + if(4) + + var/index = 0 + /* data_rc_msg + X - 5% + var/rec_dpt = "Unspecified" //name of the person - 15% + var/send_dpt = "Unspecified" //name of the sender- 15% + var/message = "Blank" //transferred message - 300px + var/stamp = "Unstamped" - 15% + var/id_auth = "Unauthenticated" - 15% + var/priority = "Normal" - 10% + */ + dat += "
    Back - Refresh

    " + dat += {" + "} + for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs) + index++ + if(index > 3000) + break + // Del - Sender - Recepient - Message + // X - Al Green - Your Mom - WHAT UP!? + dat += {" + "} + dat += "
    XSending Dep.Receiving Dep.MessageStampID Auth.Priority.
    X
    [rc.send_dpt][rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]
    " + + message = defaultmsg + var/datum/browser/popup = new(user, "hologram_console", name, 700, 700) + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open() + return + +/obj/machinery/computer/message_monitor/proc/BruteForce(mob/user) + if(isnull(linkedServer)) + to_chat(user, "Could not complete brute-force: Linked Server Disconnected!") + else + var/currentKey = src.linkedServer.decryptkey + to_chat(user, "Brute-force completed! The key is '[currentKey]'.") + src.hacking = 0 + src.screen = 0 // Return the screen back to normal + +/obj/machinery/computer/message_monitor/proc/UnmagConsole() + emagged = FALSE + +/obj/machinery/computer/message_monitor/proc/ResetMessage() + customsender = "System Administrator" + customrecepient = null + custommessage = "This is a test, please ignore." + customjob = "Admin" + +/obj/machinery/computer/message_monitor/Topic(href, href_list) + if(..()) + return + + if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc)) || issilicon(usr)) + //Authenticate + if (href_list["auth"]) + if(!linkedServer || linkedServer.stat & (NOPOWER|BROKEN)) + message = noserver + else + if(auth) + auth = 0 + screen = 0 + else + var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) + if(dkey && dkey != "") + if(src.linkedServer.decryptkey == dkey) + auth = 1 + else + message = incorrectkey + + //Turn the server on/off. + if (href_list["active"]) + if(auth) + linkedServer.toggled = !linkedServer.toggled + //Find a server + if (href_list["find"]) + var/list/message_servers = list() + for (var/obj/machinery/telecomms/message_server/M in GLOB.telecomms_list) + message_servers += M + + if(message_servers.len > 1) + linkedServer = input(usr, "Please select a server.", "Select a server.", null) as null|anything in message_servers + message = "NOTICE: Server selected." + else if(message_servers.len > 0) + linkedServer = message_servers[1] + message = "NOTICE: Only Single Server Detected - Server selected." + else + message = noserver + + //View the logs - KEY REQUIRED + if (href_list["view"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 1 + + //Clears the logs - KEY REQUIRED + if (href_list["clear"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.linkedServer.pda_msgs = list() + message = "NOTICE: Logs cleared." + //Clears the request console logs - KEY REQUIRED + if (href_list["clearr"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.linkedServer.rc_msgs = list() + message = "NOTICE: Logs cleared." + //Change the password - KEY REQUIRED + if (href_list["pass"]) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + var/dkey = trim(stripped_input(usr, "Please enter the decryption key.")) + if(dkey && dkey != "") + if(src.linkedServer.decryptkey == dkey) + var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) + if(length(newkey) <= 3) + message = "NOTICE: Decryption key too short!" + else if(length(newkey) > 16) + message = "NOTICE: Decryption key too long!" + else if(newkey && newkey != "") + src.linkedServer.decryptkey = newkey + message = "NOTICE: Decryption key set." + else + message = incorrectkey + + //Hack the Console to get the password + if (href_list["hack"]) + if(issilicon(usr) && is_special_character(usr)) + src.hacking = 1 + src.screen = 2 + //Time it takes to bruteforce is dependant on the password length. + spawn(100*length(src.linkedServer.decryptkey)) + if(src && src.linkedServer && usr) + BruteForce(usr) + //Delete the log. + if (href_list["delete"]) + //Are they on the view logs screen? + if(screen == 1) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else //if(istype(href_list["delete"], /datum/data_pda_msg)) + src.linkedServer.pda_msgs -= locate(href_list["delete"]) + message = "NOTICE: Log Deleted!" + //Delete the request console log. + if (href_list["deleter"]) + //Are they on the view logs screen? + if(screen == 4) + if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else //if(istype(href_list["delete"], /datum/data_pda_msg)) + src.linkedServer.rc_msgs -= locate(href_list["deleter"]) + message = "NOTICE: Log Deleted!" + //Create a custom message + if (href_list["msg"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 3 + //Fake messaging selection - KEY REQUIRED + if (href_list["select"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + screen = 0 + else + switch(href_list["select"]) + + //Reset + if("Reset") + ResetMessage() + + //Select Your Name + if("Sender") + customsender = stripped_input(usr, "Please enter the sender's name.") || customsender + + //Select Receiver + if("Recepient") + //Get out list of viable PDAs + var/list/obj/item/device/pda/sendPDAs = get_viewable_pdas() + if(GLOB.PDAs && GLOB.PDAs.len > 0) + customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sortNames(sendPDAs) + else + customrecepient = null + + //Enter custom job + if("RecJob") + customjob = stripped_input(usr, "Please enter the sender's job.") || customjob + + //Enter message + if("Message") + custommessage = stripped_input(usr, "Please enter your message.") || custommessage + + //Send message + if("Send") + if(isnull(customsender) || customsender == "") + customsender = "UNKNOWN" + + if(isnull(customrecepient)) + message = "NOTICE: No recepient selected!" + return src.attack_hand(usr) + + if(isnull(custommessage) || custommessage == "") + message = "NOTICE: No message entered!" + return src.attack_hand(usr) + + var/datum/signal/subspace/pda/signal = new(src, list( + "name" = "[customsender]", + "job" = "[customjob]", + "message" = custommessage, + "targets" = list("[customrecepient.owner] ([customrecepient.ownjob])") + )) + // this will log the signal and transmit it to the target + linkedServer.receive_information(signal, null) + + + //Request Console Logs - KEY REQUIRED + if(href_list["viewr"]) + if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) + message = noserver + else + if(auth) + src.screen = 4 + + if (href_list["back"]) + src.screen = 0 + + return src.attack_hand(usr) + + +/obj/item/paper/monitorkey + name = "monitor decryption key" + +/obj/item/paper/monitorkey/Initialize(mapload, obj/machinery/telecomms/message_server/server) + ..() + if (server) + print(server) + return INITIALIZE_HINT_NORMAL + else + return INITIALIZE_HINT_LATELOAD + +/obj/item/paper/monitorkey/proc/print(obj/machinery/telecomms/message_server/server) + info = "

    Daily Key Reset


    The new message monitor key is '[server.decryptkey]'.
    Please keep this a secret and away from the clown.
    If necessary, change the password to a more secure one." + info_links = info + add_overlay("paper_words") + +/obj/item/paper/monitorkey/LateInitialize() + for (var/obj/machinery/telecomms/message_server/server in GLOB.telecomms_list) + if (server.decryptkey) + print(server) + break diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm index 74774f2670..9eb25b9bed 100644 --- a/code/game/machinery/telecomms/machine_interactions.dm +++ b/code/game/machinery/telecomms/machine_interactions.dm @@ -102,23 +102,8 @@ dat += "
    " temp = "" user << browse(dat, "window=tcommachine;size=520x500;can_resize=0") - onclose(user, "dormitory") - - -// Off-Site Relays -// -// You are able to send/receive signals from the station's z level (changeable in the ZLEVEL_STATION_PRIMARY #define) if - - -/obj/machinery/telecomms/relay/proc/toggle_level() - - var/turf/position = get_turf(src) - - // Toggle on/off getting signals from the station or the current Z level - if(listening_level in GLOB.station_z_levels) // equals the station - listening_level = position.z - return TRUE - return FALSE + onclose(user, "tcommachine") + return TRUE // Returns a multitool from a user depending on their mobtype. @@ -234,7 +219,7 @@ if(newfreq && canAccess(usr)) if(findtext(num2text(newfreq), ".")) newfreq *= 10 // shift the decimal one place - if(newfreq == GLOB.SYND_FREQ) + if(newfreq == FREQ_SYNDICATE) temp = "-% Error: Interference preventing filtering frequency: \"[newfreq] GHz\" %-" else if(!(newfreq in freq_listening) && newfreq < 10000) diff --git a/code/game/machinery/telecomms/machines/allinone.dm b/code/game/machinery/telecomms/machines/allinone.dm index f881e18d35..ca0812f1de 100644 --- a/code/game/machinery/telecomms/machines/allinone.dm +++ b/code/game/machinery/telecomms/machines/allinone.dm @@ -11,50 +11,31 @@ anchored = TRUE use_power = NO_POWER_USE idle_power_usage = 0 - machinetype = 6 - var/intercept = FALSE // if TRUE, broadcasts all syndie messages to syndicate channel + var/intercept = FALSE // If true, only works on the Syndicate frequency. -/obj/machinery/telecomms/allinone/receive_signal(datum/signal/signal) +/obj/machinery/telecomms/allinone/Initialize() + ..() + if (intercept) + freq_listening = list(FREQ_SYNDICATE) - if(!on) // has to be on to receive messages +/obj/machinery/telecomms/allinone/receive_signal(datum/signal/subspace/signal) + if(!istype(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) // receives on subspace only + return + if(!on || !is_freq_listening(signal)) // has to be on to receive messages + return + if (!intercept && !(z in signal.levels) && !(0 in signal.levels)) // has to be syndicate or on the right level return - if(is_freq_listening(signal)) // detect subspace signals + // Decompress the signal and mark it done + if (intercept) + signal.levels += 0 // Signal is broadcast to agents anywhere - signal.data["done"] = 1 // mark the signal as being broadcasted - signal.data["compression"] = 0 - - // Search for the original signal and mark it as done as well - var/datum/signal/original = signal.data["original"] - if(original) - original.data["done"] = 1 - - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary - - - - - /* ###### Copy all syndie communications to the Syndicate Frequency ###### */ - if(intercept && signal.frequency == GLOB.SYND_FREQ) - Broadcast_Message(signal.data["mob"], - signal.data["vmask"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"],, signal.data["compression"], list(0, z), GLOB.SYND_FREQ, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], - signal.data["language"]) - /* ###### Broadcast a message using signal.data ###### */ - else if(!intercept) - Broadcast_Message(signal.data["mob"], - signal.data["vmask"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"],, signal.data["compression"], list(0, z), signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], - signal.data["language"]) + signal.data["compression"] = 0 + signal.mark_done() + if(signal.data["slow"] > 0) + sleep(signal.data["slow"]) // simulate the network lag if necessary + signal.broadcast() /obj/machinery/telecomms/allinone/attackby(obj/item/P, mob/user, params) - if(istype(P, /obj/item/device/multitool)) attack_hand(user) diff --git a/code/game/machinery/telecomms/machines/broadcaster.dm b/code/game/machinery/telecomms/machines/broadcaster.dm index 246c1fa047..89e2d38de1 100644 --- a/code/game/machinery/telecomms/machines/broadcaster.dm +++ b/code/game/machinery/telecomms/machines/broadcaster.dm @@ -16,70 +16,45 @@ GLOBAL_VAR_INIT(message_delay, 0) // To make sure restarting the recentmessages anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 25 - machinetype = 5 circuit = /obj/item/circuitboard/machine/telecomms/broadcaster -/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) +/obj/machinery/telecomms/broadcaster/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) // Don't broadcast rejected signals + if(!istype(signal)) + return if(signal.data["reject"]) return + if(!signal.data["message"]) + return - if(signal.data["message"]) + // Prevents massive radio spam + signal.mark_done() + var/datum/signal/subspace/original = signal.original + if(original && ("compression" in signal.data)) + original.data["compression"] = signal.data["compression"] + var/turf/T = get_turf(src) + if (T) + signal.levels |= T.z - // Prevents massive radio spam - signal.data["done"] = 1 // mark the signal as being broadcasted - // Search for the original signal and mark it as done as well - var/datum/signal/original = signal.data["original"] - if(original) - original.data["done"] = 1 - original.data["compression"] = signal.data["compression"] - original.data["level"] = signal.data["level"] + var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["name"]]" + if(signal_message in GLOB.recentmessages) + return + GLOB.recentmessages.Add(signal_message) - var/signal_message = "[signal.frequency]:[signal.data["message"]]:[signal.data["realname"]]" - if(signal_message in GLOB.recentmessages) - return - GLOB.recentmessages.Add(signal_message) + if(signal.data["slow"] > 0) + sleep(signal.data["slow"]) // simulate the network lag if necessary - if(signal.data["slow"] > 0) - sleep(signal.data["slow"]) // simulate the network lag if necessary + signal.broadcast() - signal.data["level"] |= listening_level + if(!GLOB.message_delay) + GLOB.message_delay = 1 + spawn(10) + GLOB.message_delay = 0 + GLOB.recentmessages = list() - /** #### - Normal Broadcast - #### **/ - - if(signal.data["type"] == 0) - - /* ###### Broadcast a message using signal.data ###### */ - Broadcast_Message(signal.data["mob"], - signal.data["vmask"], signal.data["radio"], - signal.data["message"], signal.data["name"], signal.data["job"], signal.data["realname"], - 0, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"]) - - - /** #### - Artificial Broadcast - #### **/ - // (Imitates a mob) - - if(signal.data["type"] == 2) - - /* ###### Broadcast a message using signal.data ###### */ - // Parameter "data" as 4: AI can't track this person/mob - Broadcast_Message(signal.data["mob"], - signal.data["vmask"], - signal.data["radio"], signal.data["message"], - signal.data["name"], signal.data["job"], - signal.data["realname"], 4, signal.data["compression"], signal.data["level"], signal.frequency, signal.data["spans"], - signal.data["verb_say"], signal.data["verb_ask"], signal.data["verb_exclaim"], signal.data["verb_yell"], signal.data["language"]) - - if(!GLOB.message_delay) - GLOB.message_delay = 1 - spawn(10) - GLOB.message_delay = 0 - GLOB.recentmessages = list() - - /* --- Do a snazzy animation! --- */ - flick("broadcaster_send", src) + /* --- Do a snazzy animation! --- */ + flick("broadcaster_send", src) /obj/machinery/telecomms/broadcaster/Destroy() // In case message_delay is left on 1, otherwise it won't reset the list and people can't say the same thing twice anymore. diff --git a/code/game/machinery/telecomms/machines/bus.dm b/code/game/machinery/telecomms/machines/bus.dm index 252a285d2a..6f9757eb45 100644 --- a/code/game/machinery/telecomms/machines/bus.dm +++ b/code/game/machinery/telecomms/machines/bus.dm @@ -16,68 +16,65 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 50 - machinetype = 2 netspeed = 40 circuit = /obj/item/circuitboard/machine/telecomms/bus var/change_frequency = 0 -/obj/machinery/telecomms/bus/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) +/obj/machinery/telecomms/bus/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) + if(!istype(signal) || !is_freq_listening(signal)) + return - if(is_freq_listening(signal)) - if(change_frequency) - if(signal.frequency != GLOB.SYND_FREQ) - signal.frequency = change_frequency + if(change_frequency && signal.frequency != FREQ_SYNDICATE) + signal.frequency = change_frequency - if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it - // send to one linked processor unit - var/send_to_processor = relay_information(signal, "/obj/machinery/telecomms/processor") + if(!istype(machine_from, /obj/machinery/telecomms/processor) && machine_from != src) // Signal must be ready (stupid assuming machine), let's send it + // send to one linked processor unit + if(relay_information(signal, /obj/machinery/telecomms/processor)) + return - if(send_to_processor) - return - // failed to send to a processor, relay information anyway - signal.data["slow"] += rand(1, 5) // slow the signal down only slightly - src.receive_information(signal, src) + // failed to send to a processor, relay information anyway + signal.data["slow"] += rand(1, 5) // slow the signal down only slightly - // Try sending it! - var/list/try_send = list("/obj/machinery/telecomms/server", "/obj/machinery/telecomms/hub", "/obj/machinery/telecomms/broadcaster", "/obj/machinery/telecomms/bus") - var/i = 0 - for(var/send in try_send) - if(i) - signal.data["slow"] += rand(0, 1) // slow the signal down only slightly - i++ - var/can_send = relay_information(signal, send) - if(can_send) - break + // Try sending it! + var/list/try_send = list(signal.server_type, /obj/machinery/telecomms/hub, /obj/machinery/telecomms/broadcaster, /obj/machinery/telecomms/bus) + + var/i = 0 + for(var/send in try_send) + if(i) + signal.data["slow"] += rand(0, 1) // slow the signal down only slightly + i++ + if(relay_information(signal, send)) + break //Preset Buses /obj/machinery/telecomms/bus/preset_one id = "Bus 1" network = "tcommsat" - freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ) + freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL) autolinkers = list("processor1", "science", "medical") /obj/machinery/telecomms/bus/preset_two id = "Bus 2" network = "tcommsat" - freq_listening = list(GLOB.SUPP_FREQ,GLOB.SERV_FREQ) + freq_listening = list(FREQ_SUPPLY, FREQ_SERVICE) autolinkers = list("processor2", "supply", "service") /obj/machinery/telecomms/bus/preset_three id = "Bus 3" network = "tcommsat" - freq_listening = list(GLOB.SEC_FREQ, GLOB.COMM_FREQ) + freq_listening = list(FREQ_SECURITY, FREQ_COMMAND) autolinkers = list("processor3", "security", "command") /obj/machinery/telecomms/bus/preset_four id = "Bus 4" network = "tcommsat" - freq_listening = list(GLOB.ENG_FREQ) + freq_listening = list(FREQ_ENGINEERING) autolinkers = list("processor4", "engineering", "common") /obj/machinery/telecomms/bus/preset_four/Initialize() . = ..() - for(var/i = 1441, i < 1489, i += 2) + for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) freq_listening |= i /obj/machinery/telecomms/bus/preset_one/birdstation diff --git a/code/game/machinery/telecomms/machines/hub.dm b/code/game/machinery/telecomms/machines/hub.dm index bec9c5dfc7..7a481b2069 100644 --- a/code/game/machinery/telecomms/machines/hub.dm +++ b/code/game/machinery/telecomms/machines/hub.dm @@ -1,4 +1,3 @@ - /* The HUB idles until it receives information. It then passes on that information depending on where it came from. @@ -17,20 +16,22 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 80 - machinetype = 7 - long_range_link = 1 + long_range_link = TRUE netspeed = 40 circuit = /obj/item/circuitboard/machine/telecomms/hub /obj/machinery/telecomms/hub/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(is_freq_listening(signal)) - if(istype(machine_from, /obj/machinery/telecomms/receiver)) - //If the signal is compressed, send it to the bus. - relay_information(signal, "/obj/machinery/telecomms/bus", 1) // ideally relay the copied information to bus units - else - // Get a list of relays that we're linked to, then send the signal to their levels. - relay_information(signal, "/obj/machinery/telecomms/relay", 1) - relay_information(signal, "/obj/machinery/telecomms/broadcaster", 1) // Send it to a broadcaster. + if(!is_freq_listening(signal)) + return + + if(istype(machine_from, /obj/machinery/telecomms/receiver)) + // It's probably compressed so send it to the bus. + relay_information(signal, /obj/machinery/telecomms/bus, TRUE) + else + // Send it to each relay so their levels get added... + relay_information(signal, /obj/machinery/telecomms/relay) + // Then broadcast that signal to + relay_information(signal, /obj/machinery/telecomms/broadcaster) //Preset HUB diff --git a/code/game/machinery/telecomms/machines/message_server.dm b/code/game/machinery/telecomms/machines/message_server.dm new file mode 100644 index 0000000000..37c891e542 --- /dev/null +++ b/code/game/machinery/telecomms/machines/message_server.dm @@ -0,0 +1,180 @@ +/* + The equivalent of the server, for PDA and request console messages. + Without it, PDA and request console messages cannot be transmitted. + PDAs require the rest of the telecomms setup, but request consoles only + require the message server. +*/ + +// A decorational representation of SSblackbox, usually placed alongside the message server. +/obj/machinery/blackbox_recorder + icon = 'icons/obj/stationobjs.dmi' + icon_state = "blackbox" + name = "Blackbox Recorder" + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + armor = list(melee = 25, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 70) + + +// The message server itself. +/obj/machinery/telecomms/message_server + icon = 'icons/obj/machines/research.dmi' + icon_state = "server" + name = "Messaging Server" + desc = "A machine that attempts to gather the secret knowledge of the universe." + density = TRUE + anchored = TRUE + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 100 + + id = "Messaging Server" + network = "tcommsat" + autolinkers = list("common") + + var/list/datum/data_pda_msg/pda_msgs = list() + var/list/datum/data_rc_msg/rc_msgs = list() + var/decryptkey + +/obj/machinery/telecomms/message_server/Initialize() + . = ..() + if (!decryptkey) + decryptkey = GenerateKey() + pda_msgs += new /datum/data_pda_msg("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") + +/obj/machinery/telecomms/message_server/proc/GenerateKey() + var/newKey + newKey += pick("the", "if", "of", "as", "in", "a", "you", "from", "to", "an", "too", "little", "snow", "dead", "drunk", "rosebud", "duck", "al", "le") + newKey += pick("diamond", "beer", "mushroom", "assistant", "clown", "captain", "twinkie", "security", "nuke", "small", "big", "escape", "yellow", "gloves", "monkey", "engine", "nuclear", "ai") + newKey += pick("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") + return newKey + +/obj/machinery/telecomms/message_server/process() + if(toggled && (stat & (BROKEN|NOPOWER))) + toggled = FALSE + update_icon() + +/obj/machinery/telecomms/message_server/receive_information(datum/signal/subspace/pda/signal, obj/machinery/telecomms/machine_from) + // can't log non-PDA signals + if(!istype(signal) || !signal.data["message"] || !toggled) + return + + // log the signal + var/datum/data_pda_msg/M = new(signal.format_target(), "[signal.data["name"]] ([signal.data["job"]])", signal.data["message"], signal.data["photo"]) + pda_msgs += M + signal.logged = M + + // pass it along to either the hub or the broadcaster + if(!relay_information(signal, /obj/machinery/telecomms/hub)) + relay_information(signal, /obj/machinery/telecomms/broadcaster) + +/obj/machinery/telecomms/message_server/update_icon() + if((stat & (BROKEN|NOPOWER))) + icon_state = "server-nopower" + else if (!toggled) + icon_state = "server-off" + else + icon_state = "server-on" + + +// Repath for maps +/obj/machinery/message_server + parent_type = /obj/machinery/telecomms/message_server + + +// PDA signal datum +/datum/signal/subspace/pda + frequency = FREQ_COMMON + server_type = /obj/machinery/telecomms/message_server + var/datum/data_pda_msg/logged + +/datum/signal/subspace/pda/New(source, data) + src.source = source + src.data = data + var/turf/T = get_turf(source) + levels = list(T.z) + +/datum/signal/subspace/pda/copy() + var/datum/signal/subspace/pda/copy = new(source, data.Copy()) + copy.original = src + copy.levels = levels + return copy + +/datum/signal/subspace/pda/proc/format_target() + if (length(data["targets"]) > 1) + return "Everyone" + return data["targets"][1] + +/datum/signal/subspace/pda/proc/format_message() + if (logged && data["photo"]) + return "\"[data["message"]]\" (Photo)" + return "\"[data["message"]]\"" + +/datum/signal/subspace/pda/broadcast() + if (!logged) // Can only go through if a message server logs it + return + for (var/obj/item/device/pda/P in GLOB.PDAs) + if ("[P.owner] ([P.ownjob])" in data["targets"]) + P.receive_message(src) + + +// Log datums stored by the message server. +/datum/data_pda_msg + var/sender = "Unspecified" + var/recipient = "Unspecified" + var/message = "Blank" // transferred message + var/icon/photo // attached photo + +/datum/data_pda_msg/New(param_rec, param_sender, param_message, param_photo) + if(param_rec) + recipient = param_rec + if(param_sender) + sender = param_sender + if(param_message) + message = param_message + if(param_photo) + photo = param_photo + +/datum/data_pda_msg/Topic(href,href_list) + ..() + if(href_list["photo"]) + var/mob/M = usr + M << browse_rsc(photo, "pda_photo.png") + M << browse("PDA Photo" \ + + "" \ + + "" \ + + "", "window=pdaphoto;size=192x192") + onclose(M, "pdaphoto") + +/datum/data_rc_msg + var/rec_dpt = "Unspecified" // receiving department + var/send_dpt = "Unspecified" // sending department + var/message = "Blank" + var/stamp = "Unstamped" + var/id_auth = "Unauthenticated" + var/priority = "Normal" + +/datum/data_rc_msg/New(param_rec, param_sender, param_message, param_stamp, param_id_auth, param_priority) + if(param_rec) + rec_dpt = param_rec + if(param_sender) + send_dpt = param_sender + if(param_message) + message = param_message + if(param_stamp) + stamp = param_stamp + if(param_id_auth) + id_auth = param_id_auth + if(param_priority) + switch(param_priority) + if(1) + priority = "Normal" + if(2) + priority = "High" + if(3) + priority = "Extreme" + else + priority = "Undetermined" + diff --git a/code/game/machinery/telecomms/machines/processor.dm b/code/game/machinery/telecomms/machines/processor.dm index fb791cf03e..8b7e0f8672 100644 --- a/code/game/machinery/telecomms/machines/processor.dm +++ b/code/game/machinery/telecomms/machines/processor.dm @@ -1,4 +1,3 @@ - /* The processor is a very simple machine that decompresses subspace signals and transfers them back to the original bus. It is essential in producing audible @@ -15,24 +14,23 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 30 - machinetype = 3 circuit = /obj/item/circuitboard/machine/telecomms/processor var/process_mode = 1 // 1 = Uncompress Signals, 0 = Compress Signals -/obj/machinery/telecomms/processor/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) +/obj/machinery/telecomms/processor/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) + if(!is_freq_listening(signal)) + return - if(is_freq_listening(signal)) + if (!process_mode) + signal.data["compression"] = 100 // even more compressed signal + else if (signal.data["compression"]) + signal.data["compression"] = 0 // uncompress subspace signal - if(process_mode) - signal.data["compression"] = 0 // uncompress subspace signal - else - signal.data["compression"] = 100 // even more compressed signal - - if(istype(machine_from, /obj/machinery/telecomms/bus)) - relay_direct_information(signal, machine_from) // send the signal back to the machine - else // no bus detected - send the signal to servers instead - signal.data["slow"] += rand(5, 10) // slow the signal down - relay_information(signal, "/obj/machinery/telecomms/server") + if(istype(machine_from, /obj/machinery/telecomms/bus)) + relay_direct_information(signal, machine_from) // send the signal back to the machine + else // no bus detected - send the signal to servers instead + signal.data["slow"] += rand(5, 10) // slow the signal down + relay_information(signal, signal.server_type) //Preset Processors @@ -57,4 +55,4 @@ autolinkers = list("processor4") /obj/machinery/telecomms/processor/preset_one/birdstation - name = "Processor" \ No newline at end of file + name = "Processor" diff --git a/code/game/machinery/telecomms/machines/receiver.dm b/code/game/machinery/telecomms/machines/receiver.dm index 79ab125878..527c0e6d8f 100644 --- a/code/game/machinery/telecomms/machines/receiver.dm +++ b/code/game/machinery/telecomms/machines/receiver.dm @@ -1,4 +1,3 @@ - /* The receiver idles and receives messages from subspace-compatible radio equipment; primarily headsets. They then just relay this information to all linked devices, @@ -15,40 +14,30 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 30 - machinetype = 1 circuit = /obj/item/circuitboard/machine/telecomms/receiver -/obj/machinery/telecomms/receiver/receive_signal(datum/signal/signal) - - if(!on) // has to be on to receive messages +/obj/machinery/telecomms/receiver/receive_signal(datum/signal/subspace/signal) + if(!on || !istype(signal) || !check_receive_level(signal) || signal.transmission_method != TRANSMISSION_SUBSPACE) return - if(!signal) + if(!is_freq_listening(signal)) return - if(!check_receive_level(signal)) - return - if(signal.transmission_method == 2) - if(is_freq_listening(signal)) // detect subspace signals + signal.levels = list() - //Remove the level and then start adding levels that it is being broadcasted in. - signal.data["level"] = list() + // send the signal to the hub if possible, or a bus otherwise + if(!relay_information(signal, /obj/machinery/telecomms/hub)) + relay_information(signal, /obj/machinery/telecomms/bus) - var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub") // ideally relay the copied information to relays - if(!can_send) - relay_information(signal, "/obj/machinery/telecomms/bus") // Send it to a bus instead, if it's linked to one +/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/subspace/signal) + if (z in signal.levels) + return TRUE -/obj/machinery/telecomms/receiver/proc/check_receive_level(datum/signal/signal) + for(var/obj/machinery/telecomms/hub/H in links) + for(var/obj/machinery/telecomms/relay/R in H.links) + if(R.can_receive(signal) && R.z in signal.levels) + return TRUE - if(signal.data["level"] != listening_level) - for(var/obj/machinery/telecomms/hub/H in links) - var/list/connected_levels = list() - for(var/obj/machinery/telecomms/relay/R in H.links) - if(R.can_receive(signal)) - connected_levels |= R.listening_level - if(signal.data["level"] in connected_levels) - return 1 - return 0 - return 1 + return FALSE //Preset Receivers @@ -58,7 +47,7 @@ id = "Receiver A" network = "tcommsat" autolinkers = list("receiverA") // link to relay - freq_listening = list(GLOB.SCI_FREQ, GLOB.MED_FREQ, GLOB.SUPP_FREQ, GLOB.SERV_FREQ) // science, medical, supply, service + freq_listening = list(FREQ_SCIENCE, FREQ_MEDICAL, FREQ_SUPPLY, FREQ_SERVICE) //--PRESET RIGHT--// @@ -67,14 +56,14 @@ id = "Receiver B" network = "tcommsat" autolinkers = list("receiverB") // link to relay - freq_listening = list(GLOB.COMM_FREQ, GLOB.ENG_FREQ, GLOB.SEC_FREQ) //command, engineering, security + freq_listening = list(FREQ_COMMAND, FREQ_ENGINEERING, FREQ_SECURITY) //Common and other radio frequencies for people to freely use /obj/machinery/telecomms/receiver/preset_right/Initialize() . = ..() - for(var/i = 1441, i < 1489, i += 2) + for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) freq_listening |= i /obj/machinery/telecomms/receiver/preset_left/birdstation name = "Receiver" - freq_listening = list() \ No newline at end of file + freq_listening = list() diff --git a/code/game/machinery/telecomms/machines/relay.dm b/code/game/machinery/telecomms/machines/relay.dm index 4aadeed4f5..1a436e56d5 100644 --- a/code/game/machinery/telecomms/machines/relay.dm +++ b/code/game/machinery/telecomms/machines/relay.dm @@ -14,17 +14,17 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 30 - machinetype = 8 netspeed = 5 long_range_link = 1 circuit = /obj/item/circuitboard/machine/telecomms/relay var/broadcasting = 1 var/receiving = 1 -/obj/machinery/telecomms/relay/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) +/obj/machinery/telecomms/relay/receive_information(datum/signal/subspace/signal, obj/machinery/telecomms/machine_from) // Add our level and send it back - if(can_send(signal)) - signal.data["level"] |= listening_level + var/turf/T = get_turf(src) + if(can_send(signal) && T) + signal.levels |= T.z // Checks to see if it can send/receive. @@ -52,7 +52,6 @@ /obj/machinery/telecomms/relay/preset/station id = "Station Relay" - listening_level = 1 autolinkers = list("s_relay") /obj/machinery/telecomms/relay/preset/telecomms diff --git a/code/game/machinery/telecomms/machines/server.dm b/code/game/machinery/telecomms/machines/server.dm index a328333b36..18a498efe6 100644 --- a/code/game/machinery/telecomms/machines/server.dm +++ b/code/game/machinery/telecomms/machines/server.dm @@ -1,4 +1,3 @@ - /* The server logs all traffic and signal data. Once it records the signal, it sends it to the subspace broadcaster. @@ -6,7 +5,6 @@ Store a maximum of 100 logs and then deletes them. */ - /obj/machinery/telecomms/server name = "telecommunication server" icon_state = "comm_server" @@ -15,112 +13,57 @@ anchored = TRUE use_power = IDLE_POWER_USE idle_power_usage = 15 - machinetype = 4 circuit = /obj/item/circuitboard/machine/telecomms/server var/list/log_entries = list() - var/list/stored_names = list() - var/list/TrafficActions = list() - var/logs = 0 // number of logs var/totaltraffic = 0 // gigabytes (if > 1024, divide by 1024 -> terrabytes) - var/list/memory = list() // stored memory - - var/encryption = "null" // encryption key: ie "password" - var/salt = "null" // encryption salt: ie "123comsat" - // would add up to md5("password123comsat") - var/language = "human" - var/obj/item/device/radio/headset/server_radio = null - var/last_signal = 0 // Last time it sent a signal - /obj/machinery/telecomms/server/Initialize() . = ..() - server_radio = new -/obj/machinery/telecomms/server/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) - if(signal.data["message"]) +/obj/machinery/telecomms/server/receive_information(datum/signal/subspace/vocal/signal, obj/machinery/telecomms/machine_from) + // can't log non-vocal signals + if(!istype(signal) || !signal.data["message"] || !is_freq_listening(signal)) + return - if(is_freq_listening(signal)) + if(traffic > 0) + totaltraffic += traffic // add current traffic to total traffic - if(traffic > 0) - totaltraffic += traffic // add current traffic to total traffic + // Delete particularly old logs + if (log_entries.len >= 400) + log_entries.Cut(1, 2) - //Is this a test signal? Bypass logging - if(signal.data["type"] != 4) - - // If signal has a message and appropriate frequency - - update_logs() - - var/datum/comm_log_entry/log = new - - // Copy the signal.data entries we want - log.parameters["mobtype"] = signal.data["mobtype"] - log.parameters["job"] = signal.data["job"] - log.parameters["key"] = signal.data["key"] - log.parameters["message"] = signal.data["message"] - log.parameters["name"] = signal.data["name"] - log.parameters["realname"] = signal.data["realname"] - - //log.parameters["uspeech"] = signal.data["languages"] & HUMAN //good enough - // TODO languages: ^ I don't know what this does - - // If the signal is still compressed, make the log entry gibberish - if(signal.data["compression"] > 0) - log.parameters["message"] = Gibberish(signal.data["message"], signal.data["compression"] + 50) - log.parameters["job"] = Gibberish(signal.data["job"], signal.data["compression"] + 50) - log.parameters["name"] = Gibberish(signal.data["name"], signal.data["compression"] + 50) - log.parameters["realname"] = Gibberish(signal.data["realname"], signal.data["compression"] + 50) - log.input_type = "Corrupt File" - - // Log and store everything that needs to be logged - log_entries.Add(log) - if(!(signal.data["name"] in stored_names)) - stored_names.Add(signal.data["name"]) - logs++ - signal.data["server"] = src - - // Give the log a name - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "data packet ([md5(identifier)])" - - var/can_send = relay_information(signal, "/obj/machinery/telecomms/hub") - if(!can_send) - relay_information(signal, "/obj/machinery/telecomms/broadcaster") - -/obj/machinery/telecomms/server/proc/update_logs() - // start deleting the very first log entry - if(logs >= 400) - for(var/i = 1, i <= logs, i++) // locate the first garbage collectable log entry and remove it - var/datum/comm_log_entry/L = log_entries[i] - if(L.garbage_collector) - log_entries.Remove(L) - logs-- - break - -/obj/machinery/telecomms/server/proc/add_entry(content, input) var/datum/comm_log_entry/log = new - var/identifier = num2text( rand(-1000,1000) + world.time ) - log.name = "[input] ([md5(identifier)])" - log.input_type = input - log.parameters["message"] = content - log_entries.Add(log) - update_logs() + log.parameters["mobtype"] = signal.virt.source.type + log.parameters["name"] = signal.data["name"] + log.parameters["job"] = signal.data["job"] + log.parameters["message"] = signal.data["message"] + // If the signal is still compressed, make the log entry gibberish + var/compression = signal.data["compression"] + if(compression > 0) + log.input_type = "Corrupt File" + log.parameters["name"] = Gibberish(signal.data["name"], compression + 50) + log.parameters["job"] = Gibberish(signal.data["job"], compression + 50) + log.parameters["message"] = Gibberish(signal.data["message"], compression + 50) + + // Give the log a name and store it + var/identifier = num2text( rand(-1000,1000) + world.time ) + log.name = "data packet ([md5(identifier)])" + log_entries.Add(log) + + var/can_send = relay_information(signal, /obj/machinery/telecomms/hub) + if(!can_send) + relay_information(signal, /obj/machinery/telecomms/broadcaster) // Simple log entry datum - /datum/comm_log_entry - var/parameters = list() // carbon-copy to signal.data[] - var/name = "data packet (#)" - var/garbage_collector = 1 // if set to 0, will not be garbage collected var/input_type = "Speech File" + var/name = "data packet (#)" + var/parameters = list() // copied from signal.data above - - -//Preset Servers - +// Preset Servers /obj/machinery/telecomms/server/presets network = "tcommsat" @@ -131,22 +74,22 @@ /obj/machinery/telecomms/server/presets/science id = "Science Server" - freq_listening = list(GLOB.SCI_FREQ) + freq_listening = list(FREQ_SCIENCE) autolinkers = list("science") /obj/machinery/telecomms/server/presets/medical id = "Medical Server" - freq_listening = list(GLOB.MED_FREQ) + freq_listening = list(FREQ_MEDICAL) autolinkers = list("medical") /obj/machinery/telecomms/server/presets/supply id = "Supply Server" - freq_listening = list(GLOB.SUPP_FREQ) + freq_listening = list(FREQ_SUPPLY) autolinkers = list("supply") /obj/machinery/telecomms/server/presets/service id = "Service Server" - freq_listening = list(GLOB.SERV_FREQ) + freq_listening = list(FREQ_SERVICE) autolinkers = list("service") /obj/machinery/telecomms/server/presets/common @@ -154,26 +97,25 @@ freq_listening = list() autolinkers = list("common") - //Common and other radio frequencies for people to freely use - // 1441 to 1489 +//Common and other radio frequencies for people to freely use /obj/machinery/telecomms/server/presets/common/Initialize() . = ..() - for(var/i = 1441, i < 1489, i += 2) + for(var/i = MIN_FREQ, i <= MAX_FREQ, i += 2) freq_listening |= i /obj/machinery/telecomms/server/presets/command id = "Command Server" - freq_listening = list(GLOB.COMM_FREQ) + freq_listening = list(FREQ_COMMAND) autolinkers = list("command") /obj/machinery/telecomms/server/presets/engineering id = "Engineering Server" - freq_listening = list(GLOB.ENG_FREQ) + freq_listening = list(FREQ_ENGINEERING) autolinkers = list("engineering") /obj/machinery/telecomms/server/presets/security id = "Security Server" - freq_listening = list(GLOB.SEC_FREQ) + freq_listening = list(FREQ_SECURITY) autolinkers = list("security") /obj/machinery/telecomms/server/presets/common/birdstation/Initialize() diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm index 62f53f73ad..b68d348539 100644 --- a/code/game/machinery/telecomms/telecomunications.dm +++ b/code/game/machinery/telecomms/telecomunications.dm @@ -26,15 +26,13 @@ GLOBAL_LIST_EMPTY(telecomms_list) var/list/freq_listening = list() // list of frequencies to tune into: if none, will listen to all - var/machinetype = 0 // just a hacky way of preventing alike machines from pairing - var/toggled = TRUE // Is it toggled on var/on = TRUE - var/long_range_link = 0 // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) - var/hide = 0 // Is it a hidden machine? - var/listening_level = 0 // 0 = auto set in New() - this is the z level that the machine is listening to. + var/toggled = TRUE // Is it toggled on + var/long_range_link = FALSE // Can you link it across Z levels or on the otherside of the map? (Relay & Hub) + var/hide = FALSE // Is it a hidden machine? -/obj/machinery/telecomms/proc/relay_information(datum/signal/signal, filter, copysig, amount = 20) +/obj/machinery/telecomms/proc/relay_information(datum/signal/subspace/signal, filter, copysig, amount = 20) // relay signal to all linked machinery that are of type [filter]. If signal has been sent [amount] times, stop sending if(!on) @@ -46,70 +44,26 @@ GLOBAL_LIST_EMPTY(telecomms_list) if(netlag > signal.data["slow"]) signal.data["slow"] = netlag -// Loop through all linked machines and send the signal or copy. + // Loop through all linked machines and send the signal or copy. for(var/obj/machinery/telecomms/machine in links) - if(filter && !istype( machine, text2path(filter) )) + if(filter && !istype( machine, filter )) continue if(!machine.on) continue if(amount && send_count >= amount) break - if(machine.loc.z != listening_level) - if(long_range_link == 0 && machine.long_range_link == 0) - continue - // If we're sending a copy, be sure to create the copy for EACH machine and paste the data - var/datum/signal/copy = new - if(copysig) - - copy.transmission_method = 2 - copy.frequency = signal.frequency - // Copy the main data contents! Workaround for some nasty bug where the actual array memory is copied and not its contents. - copy.data = list( - - "mob" = signal.data["mob"], - "mobtype" = signal.data["mobtype"], - "realname" = signal.data["realname"], - "name" = signal.data["name"], - "job" = signal.data["job"], - "key" = signal.data["key"], - "vmask" = signal.data["vmask"], - "compression" = signal.data["compression"], - "message" = signal.data["message"], - "radio" = signal.data["radio"], - "slow" = signal.data["slow"], - "traffic" = signal.data["traffic"], - "type" = signal.data["type"], - "server" = signal.data["server"], - "reject" = signal.data["reject"], - "level" = signal.data["level"], - "spans" = signal.data["spans"], - "verb_say" = signal.data["verb_say"], - "verb_ask" = signal.data["verb_ask"], - "verb_exclaim" = signal.data["verb_exclaim"], - "verb_yell" = signal.data["verb_yell"], - "language" = signal.data["language"] - ) - - // Keep the "original" signal constant - if(!signal.data["original"]) - copy.data["original"] = signal - else - copy.data["original"] = signal.data["original"] - - else - copy = null - + if(z != machine.loc.z && !long_range_link && !machine.long_range_link) + continue send_count++ if(machine.is_freq_listening(signal)) machine.traffic++ - if(copysig && copy) - machine.receive_information(copy, src) + if(copysig) + machine.receive_information(signal.copy(), src) else machine.receive_information(signal, src) - if(send_count > 0 && is_freq_listening(signal)) traffic++ @@ -121,28 +75,16 @@ GLOBAL_LIST_EMPTY(telecomms_list) /obj/machinery/telecomms/proc/receive_information(datum/signal/signal, obj/machinery/telecomms/machine_from) // receive information from linked machinery - ..() /obj/machinery/telecomms/proc/is_freq_listening(datum/signal/signal) // return TRUE if found, FALSE if not found - if(!signal) - return FALSE - if((signal.frequency in freq_listening) || (!freq_listening.len)) - return TRUE - else - return FALSE + return signal && (!freq_listening.len || (signal.frequency in freq_listening)) /obj/machinery/telecomms/New() GLOB.telecomms_list += src ..() - //Set the listening_level if there's none. - if(!listening_level) - //Defaults to our Z level! - var/turf/position = get_turf(src) - listening_level = position.z - /obj/machinery/telecomms/Initialize(mapload) . = ..() if(mapload && autolinkers.len) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 868c9ee728..e72964c79d 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -42,7 +42,7 @@ return power_station /obj/machinery/teleport/hub/CollidedWith(atom/movable/AM) - if(z == ZLEVEL_CENTCOM) + if(is_centcom_level(z)) to_chat(AM, "You can't use this here.") return if(is_ready()) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index d3598d4866..1d0228d737 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -684,10 +684,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C desc = "Uh oh!" /obj/machinery/vending/snack/random/Initialize() - ..() - var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) - new T(get_turf(src)) - return INITIALIZE_HINT_QDEL + ..() + var/T = pick(subtypesof(/obj/machinery/vending/snack) - /obj/machinery/vending/snack/random) + new T(loc) + return INITIALIZE_HINT_QDEL /obj/machinery/vending/snack/blue icon_state = "snackblue" @@ -737,10 +737,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C desc = "Uh oh!" /obj/machinery/vending/cola/random/Initialize() - . = ..() - var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) - new T(get_turf(src)) - return INITIALIZE_HINT_QDEL + ..() + var/T = pick(subtypesof(/obj/machinery/vending/cola) - /obj/machinery/vending/cola/random) + new T(loc) + return INITIALIZE_HINT_QDEL /obj/machinery/vending/cola/blue icon_state = "Cola_Machine" diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index f1384c0ea3..b48f14e508 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -12,6 +12,10 @@ var/obj/item/color_source var/max_wash_capacity = 5 +/obj/machinery/washing_machine/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + /obj/machinery/washing_machine/examine(mob/user) ..() to_chat(user, "Alt-click it to start a wash cycle.") @@ -36,20 +40,17 @@ busy = TRUE update_icon() - sleep(200) - wash_cycle() + addtimer(CALLBACK(src, .proc/wash_cycle), 200) -/obj/machinery/washing_machine/clean_blood() - ..() +/obj/machinery/washing_machine/proc/clean_blood() if(!busy) - bloody_mess = 0 + bloody_mess = FALSE update_icon() - /obj/machinery/washing_machine/proc/wash_cycle() for(var/X in contents) var/atom/movable/AM = X - AM.clean_blood() + AM.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) AM.machine_wash(src) busy = FALSE diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 626c405284..5e7ddb6497 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -24,3 +24,5 @@ if(occupant && occupant.client && occupant.client.mouse_pointer_icon == 'icons/mecha/mecha_mouse.dmi') occupant.client.mouse_pointer_icon = initial(occupant.client.mouse_pointer_icon) ..() + + diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index d5228b9130..56e3ccc6c3 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -63,3 +63,4 @@ /obj/mecha/combat/gygax/dark/RemoveActions(mob/living/user, human_occupant = 0) ..() thrusters_action.Remove(user) + diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index ceb88aa9b0..7424a30fcc 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -141,3 +141,5 @@ for (var/i=0;i<6;i++) color = color+pick(colors) return color + + diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 731aa2cec9..7be8fb6246 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -1,90 +1,90 @@ -/obj/mecha/combat/marauder - desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." - name = "\improper Marauder" - icon_state = "marauder" - step_in = 5 - max_integrity = 500 - deflect_chance = 25 - armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) - max_temperature = 60000 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - infra_luminosity = 3 +/obj/mecha/combat/marauder + desc = "Heavy-duty, combat exosuit, developed after the Durand model. Rarely found among civilian populations." + name = "\improper Marauder" + icon_state = "marauder" + step_in = 5 + max_integrity = 500 + deflect_chance = 25 + armor = list(melee = 50, bullet = 55, laser = 40, energy = 30, bomb = 30, bio = 0, rad = 0, fire = 100, acid = 100) + max_temperature = 60000 + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF + infra_luminosity = 3 operation_req_access = list(ACCESS_CENT_SPECOPS) - wreckage = /obj/structure/mecha_wreckage/marauder - add_req_access = 0 - internal_damage_threshold = 25 - force = 45 - max_equip = 4 - bumpsmash = 1 - -/obj/mecha/combat/marauder/GrantActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Grant(user, src) - thrusters_action.Grant(user, src) - zoom_action.Grant(user, src) - -/obj/mecha/combat/marauder/RemoveActions(mob/living/user, human_occupant = 0) - ..() - smoke_action.Remove(user) - thrusters_action.Remove(user) - zoom_action.Remove(user) - -/obj/mecha/combat/marauder/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - -/obj/mecha/combat/marauder/seraph - desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." - name = "\improper Seraph" - icon_state = "seraph" + wreckage = /obj/structure/mecha_wreckage/marauder + add_req_access = 0 + internal_damage_threshold = 25 + force = 45 + max_equip = 4 + bumpsmash = 1 + +/obj/mecha/combat/marauder/GrantActions(mob/living/user, human_occupant = 0) + ..() + smoke_action.Grant(user, src) + thrusters_action.Grant(user, src) + zoom_action.Grant(user, src) + +/obj/mecha/combat/marauder/RemoveActions(mob/living/user, human_occupant = 0) + ..() + smoke_action.Remove(user) + thrusters_action.Remove(user) + zoom_action.Remove(user) + +/obj/mecha/combat/marauder/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/seraph + desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." + name = "\improper Seraph" + icon_state = "seraph" operation_req_access = list(ACCESS_CENT_SPECOPS) - step_in = 3 + step_in = 3 max_integrity = 550 - wreckage = /obj/structure/mecha_wreckage/seraph - internal_damage_threshold = 20 - force = 55 - max_equip = 5 - -/obj/mecha/combat/marauder/seraph/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - -/obj/mecha/combat/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." - name = "\improper Mauler" - icon_state = "mauler" + wreckage = /obj/structure/mecha_wreckage/seraph + internal_damage_threshold = 20 + force = 55 + max_equip = 5 + +/obj/mecha/combat/marauder/seraph/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/mauler + desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." + name = "\improper Mauler" + icon_state = "mauler" operation_req_access = list(ACCESS_SYNDICATE) - wreckage = /obj/structure/mecha_wreckage/mauler - max_equip = 5 - -/obj/mecha/combat/marauder/mauler/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - - + wreckage = /obj/structure/mecha_wreckage/mauler + max_equip = 5 + +/obj/mecha/combat/marauder/mauler/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + + diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 26384824d0..14891835c5 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -1,28 +1,28 @@ -/obj/mecha/combat/reticence - desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins." - name = "\improper reticence" - icon_state = "reticence" - step_in = 2 - dir_in = 1 //Facing North. - max_integrity = 100 - deflect_chance = 3 - armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) - max_temperature = 15000 - wreckage = /obj/structure/mecha_wreckage/reticence +/obj/mecha/combat/reticence + desc = "A silent, fast, and nigh-invisible miming exosuit. Popular among mimes and mime assassins." + name = "\improper reticence" + icon_state = "reticence" + step_in = 2 + dir_in = 1 //Facing North. + max_integrity = 100 + deflect_chance = 3 + armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100) + max_temperature = 15000 + wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_THEATRE) - add_req_access = 0 - internal_damage_threshold = 25 - max_equip = 2 - step_energy_drain = 3 - color = "#87878715" - stepsound = null - turnsound = null - opacity = 0 - -/obj/mecha/combat/reticence/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/rcd //HAHA IT MAKES WALLS GET IT - ME.attach(src) - return + add_req_access = 0 + internal_damage_threshold = 25 + max_equip = 2 + step_energy_drain = 3 + color = "#87878715" + stepsound = null + turnsound = null + opacity = 0 + +/obj/mecha/combat/reticence/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/rcd //HAHA IT MAKES WALLS GET IT + ME.attach(src) + return diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 385d112542..b82a46b7e0 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -13,7 +13,7 @@ range = RANGED /obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) + if(!action_checks(target) || is_centcom_level(loc.z)) return var/turf/T = get_turf(target) if(T) @@ -34,7 +34,7 @@ /obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) + if(!action_checks(target) || is_centcom_level(loc.z)) return var/list/theareas = get_areas_in_range(100, chassis) if(!theareas.len) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index f076b723ae..a52c8d1438 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -222,14 +222,14 @@ occupant_message("Deconstructing [W]...") if(do_after_cooldown(W)) chassis.spark_system.start() - W.ChangeTurf(/turf/open/floor/plating) + W.ScrapeAway() playsound(W, 'sound/items/deconstruct.ogg', 50, 1) else if(isfloorturf(target)) var/turf/open/floor/F = target occupant_message("Deconstructing [F]...") if(do_after_cooldown(target)) chassis.spark_system.start() - F.ChangeTurf(F.baseturf) + F.ScrapeAway() playsound(F, 'sound/items/deconstruct.ogg', 50, 1) else if (istype(target, /obj/machinery/door/airlock)) occupant_message("Deconstructing [target]...") @@ -242,14 +242,14 @@ var/turf/open/space/S = target occupant_message("Building Floor...") if(do_after_cooldown(S)) - S.ChangeTurf(/turf/open/floor/plating) + S.PlaceOnTop(/turf/open/floor/plating) playsound(S, 'sound/items/deconstruct.ogg', 50, 1) chassis.spark_system.start() else if(isfloorturf(target)) var/turf/open/floor/F = target occupant_message("Building Wall...") if(do_after_cooldown(F)) - F.ChangeTurf(/turf/closed/wall) + F.PlaceOnTop(/turf/closed/wall) playsound(F, 'sound/items/deconstruct.ogg', 50, 1) chassis.spark_system.start() if(2) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index ccacd133e8..aabf382ff2 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -4,7 +4,7 @@ icon_state = "recharge_floor" // Some people just want to watch the world burn i guess /turf/open/floor/mech_bay_recharge_floor/break_tile() - src.ChangeTurf(/turf/open/floor/plating) + ScrapeAway() /turf/open/floor/mech_bay_recharge_floor/airless icon_state = "recharge_floor_asteroid" diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 6ef98120f5..8654f9854e 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -34,15 +34,13 @@ "Misc" ) - var/datum/component/material_container/materials - /obj/machinery/mecha_part_fabricator/Initialize() - materials = AddComponent(/datum/component/material_container, - list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, - FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) - materials.precise_insertion = TRUE - stored_research = new - return ..() + var/datum/component/material_container/materials = AddComponent(/datum/component/material_container, + list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, + FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) + materials.precise_insertion = TRUE + stored_research = new + return ..() /obj/machinery/mecha_part_fabricator/RefreshParts() var/T = 0 diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2d148b4ff4..ded6aec5c5 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -247,7 +247,7 @@ radio.name = "[src] radio" radio.icon = icon radio.icon_state = icon_state - radio.subspace_transmission = 1 + radio.subspace_transmission = TRUE /obj/mecha/proc/can_use(mob/user) if(user != occupant) diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm index 54b44f89f9..4c1bceca28 100644 --- a/code/game/mecha/mecha_topic.dm +++ b/code/game/mecha/mecha_topic.dm @@ -284,7 +284,7 @@ if(href_list["rfreq"]) var/new_frequency = (radio.frequency + afilter.getNum("rfreq")) - if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) + if (!radio.freerange || (radio.frequency < MIN_FREE_FREQ || radio.frequency > MAX_FREE_FREQ)) new_frequency = sanitize_frequency(new_frequency) radio.set_frequency(new_frequency) send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") diff --git a/code/game/objects/effects/anomalies.dm b/code/game/objects/effects/anomalies.dm index 76fd5e5cbf..2f8aff3a13 100644 --- a/code/game/objects/effects/anomalies.dm +++ b/code/game/objects/effects/anomalies.dm @@ -26,6 +26,7 @@ aSignal = new(src) aSignal.name = "[name] core" aSignal.code = rand(1,100) + aSignal.frequency = rand(MIN_FREE_FREQ, MAX_FREE_FREQ) if(ISMULTIPLE(aSignal.frequency, 2))//signaller frequencies are always uneven! aSignal.frequency++ diff --git a/code/game/objects/effects/bump_teleporter.dm b/code/game/objects/effects/bump_teleporter.dm index 8eb4c986de..42f59cc535 100644 --- a/code/game/objects/effects/bump_teleporter.dm +++ b/code/game/objects/effects/bump_teleporter.dm @@ -19,6 +19,7 @@ LAZYREMOVE(AllTeleporters, src) return ..() + /obj/effect/bump_teleporter/singularity_act() return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index f06525863d..d6b70604af 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -79,14 +79,11 @@ add_blood = bloodiness bloodiness -= add_blood S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS,S.bloody_shoes[blood_state]+add_blood) - if(blood_DNA && blood_DNA.len) - S.add_blood(blood_DNA) + S.add_blood_DNA(return_blood_DNA()) S.blood_state = blood_state update_icon() H.update_inv_shoes() - - /obj/effect/decal/cleanable/proc/can_bloodcrawl_in() if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) return bloodiness diff --git a/code/game/objects/effects/decals/cleanable/aliens.dm b/code/game/objects/effects/decals/cleanable/aliens.dm index 333da7f48a..55d5d32ffc 100644 --- a/code/game/objects/effects/decals/cleanable/aliens.dm +++ b/code/game/objects/effects/decals/cleanable/aliens.dm @@ -6,10 +6,13 @@ icon = 'icons/effects/blood.dmi' icon_state = "xfloor1" random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - blood_DNA = list("UNKNOWN DNA" = "X*") bloodiness = MAX_SHOE_BLOODINESS blood_state = BLOOD_STATE_XENO +/obj/effect/decal/cleanable/xenoblood/Initialize() + . = ..() + add_blood_DNA(list("UNKNOWN DNA" = "X*")) + /obj/effect/decal/cleanable/xenoblood/xsplatter random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") @@ -62,4 +65,7 @@ /obj/effect/decal/cleanable/blood/xtracks icon_state = "xtracks" random_icon_states = null - blood_DNA = list("UNKNOWN DNA" = "X*") + +/obj/effect/decal/cleanable/blood/xtracks/Initialize() + . = ..() + add_blood_DNA(list("Unknown DNA" = "X*")) diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 42aec1582e..fbcf22fb90 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -4,13 +4,11 @@ icon = 'icons/effects/blood.dmi' icon_state = "floor1" random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") - blood_DNA = list() blood_state = BLOOD_STATE_HUMAN bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/blood/replace_decal(obj/effect/decal/cleanable/blood/C) - if (C.blood_DNA) - blood_DNA |= C.blood_DNA.Copy() + add_blood_DNA(C.return_blood_DNA()) ..() /obj/effect/decal/cleanable/blood/old @@ -21,7 +19,7 @@ /obj/effect/decal/cleanable/blood/old/Initialize(mapload, list/datum/disease/diseases) . = ..() icon_state += "-old" //This IS necessary because the parent /blood type uses icon randomization. - blood_DNA["Non-human DNA"] = "A+" + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/blood/splatter random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") @@ -37,11 +35,9 @@ desc = "Your instincts say you shouldn't be following these." random_icon_states = null var/list/existing_dirs = list() - blood_DNA = list() /obj/effect/decal/cleanable/trail_holder/can_bloodcrawl_in() - return 1 - + return TRUE /obj/effect/decal/cleanable/blood/gibs name = "gibs" @@ -100,8 +96,7 @@ . = ..() setDir(pick(1,2,4,8)) icon_state += "-old" - blood_DNA["Non-human DNA"] = "A+" - + add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/blood/drip name = "drips of blood" @@ -111,9 +106,8 @@ bloodiness = 0 var/drips = 1 - /obj/effect/decal/cleanable/blood/drip/can_bloodcrawl_in() - return 1 + return TRUE //BLOODY FOOTPRINTS @@ -151,7 +145,7 @@ if (!(exited_dirs & H.dir)) exited_dirs |= H.dir update_icon() - + /obj/effect/decal/cleanable/blood/footprints/update_icon() cut_overlays() diff --git a/code/game/objects/effects/decals/crayon.dm b/code/game/objects/effects/decals/crayon.dm index 4362957a76..b9a7701960 100644 --- a/code/game/objects/effects/decals/crayon.dm +++ b/code/game/objects/effects/decals/crayon.dm @@ -4,6 +4,7 @@ icon = 'icons/effects/crayondecal.dmi' icon_state = "rune1" gender = NEUTER + mergeable_decal = FALSE var/do_icon_rotate = TRUE var/rotation = 0 var/paint_colour = "#FFFFFF" @@ -14,7 +15,6 @@ if(e_name) name = e_name desc = "A [name] vandalizing the station." - if(alt_icon) icon = alt_icon if(type) @@ -28,3 +28,4 @@ if(main) paint_colour = main add_atom_colour(paint_colour, FIXED_COLOUR_PRIORITY) + diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index f04484c8a3..06c3b9a689 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -3,6 +3,14 @@ anchored = TRUE resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/effect/decal/Initialize() + . = ..() + if(!isturf(loc) || NeverShouldHaveComeHere(loc)) + return INITIALIZE_HINT_QDEL + +/obj/effect/decal/proc/NeverShouldHaveComeHere(turf/T) + return isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || ischasm(T) + /obj/effect/decal/ex_act(severity, target) qdel(src) @@ -12,7 +20,7 @@ /obj/effect/decal/HandleTurfChange(turf/T) ..() - if(T == loc && (isspaceturf(T) || isclosedturf(T) || islava(T) || istype(T, /turf/open/water) || ischasm(T))) + if(T == loc && NeverShouldHaveComeHere(T)) qdel(src) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 3459bfc954..f5754029eb 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -76,7 +76,7 @@ if(metal) var/turf/T = get_turf(src) if(isspaceturf(T)) //Block up any exposed space - T.ChangeTurf(/turf/open/floor/plating/foam) + T.PlaceOnTop(/turf/open/floor/plating/foam) for(var/direction in GLOB.cardinals) var/turf/cardinal_turf = get_step(T, direction) if(get_area(cardinal_turf) != get_area(T)) //We're at an area boundary, so let's block off this turf! @@ -236,7 +236,7 @@ /obj/structure/foamedmetal/Move() var/turf/T = loc - ..() + . = ..() move_update_air(T) /obj/structure/foamedmetal/attack_paw(mob/user) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index caeb1f168c..90408e7d3f 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -16,7 +16,7 @@ /obj/effect/landmark/start name = "start" - icon = 'icons/mob/screen_gen.dmi' + icon = 'icons/mob/landmarks.dmi' icon_state = "x" anchored = TRUE var/jobspawn_override = FALSE @@ -40,9 +40,9 @@ // START LANDMARKS FOLLOW. Don't change the names unless // you are refactoring shitty landmark code. - /obj/effect/landmark/start/assistant name = "Assistant" + icon_state = "Assistant" /obj/effect/landmark/start/assistant/override jobspawn_override = TRUE @@ -50,102 +50,135 @@ /obj/effect/landmark/start/janitor name = "Janitor" + icon_state = "Janitor" /obj/effect/landmark/start/cargo_technician name = "Cargo Technician" + icon_state = "Cargo Technician" /obj/effect/landmark/start/bartender name = "Bartender" + icon_state = "Bartender" /obj/effect/landmark/start/clown name = "Clown" + icon_state = "Clown" /obj/effect/landmark/start/mime name = "Mime" + icon_state = "Mime" /obj/effect/landmark/start/quartermaster name = "Quartermaster" + icon_state = "Quartermaster" /obj/effect/landmark/start/atmospheric_technician name = "Atmospheric Technician" + icon_state = "Atmospheric Technician" /obj/effect/landmark/start/cook name = "Cook" + icon_state = "Cook" /obj/effect/landmark/start/shaft_miner name = "Shaft Miner" + icon_state = "Shaft Miner" /obj/effect/landmark/start/security_officer name = "Security Officer" + icon_state = "Security Officer" /obj/effect/landmark/start/botanist name = "Botanist" + icon_state = "Botanist" /obj/effect/landmark/start/head_of_security name = "Head of Security" - -/obj/effect/landmark/start/ai - name = "AI" - delete_after_roundstart = FALSE + icon_state = "Head of Security" /obj/effect/landmark/start/captain name = "Captain" + icon_state = "Captain" /obj/effect/landmark/start/detective name = "Detective" + icon_state = "Detective" /obj/effect/landmark/start/warden name = "Warden" + icon_state = "Warden" /obj/effect/landmark/start/chief_engineer name = "Chief Engineer" - -/obj/effect/landmark/start/cyborg - name = "Cyborg" + icon_state = "Chief Engineer" /obj/effect/landmark/start/head_of_personnel name = "Head of Personnel" + icon_state = "Head of Personnel" /obj/effect/landmark/start/librarian name = "Curator" + icon_state = "Curator" /obj/effect/landmark/start/lawyer name = "Lawyer" + icon_state = "Lawyer" /obj/effect/landmark/start/station_engineer name = "Station Engineer" + icon_state = "Station Engineer" /obj/effect/landmark/start/medical_doctor name = "Medical Doctor" + icon_state = "Medical Doctor" /obj/effect/landmark/start/scientist name = "Scientist" + icon_state = "Scientist" /obj/effect/landmark/start/chemist name = "Chemist" + icon_state = "Chemist" /obj/effect/landmark/start/roboticist name = "Roboticist" + icon_state = "Roboticist" /obj/effect/landmark/start/research_director name = "Research Director" + icon_state = "Research Director" /obj/effect/landmark/start/geneticist name = "Geneticist" + icon_state = "Geneticist" /obj/effect/landmark/start/chief_medical_officer name = "Chief Medical Officer" + icon_state = "Chief Medical Officer" /obj/effect/landmark/start/virologist name = "Virologist" + icon_state = "Virologist" /obj/effect/landmark/start/chaplain name = "Chaplain" + icon_state = "Chaplain" + +/obj/effect/landmark/start/cyborg + name = "Cyborg" + icon_state = "Cyborg" + +/obj/effect/landmark/start/ai + name = "AI" + icon_state = "AI" + delete_after_roundstart = FALSE + //Department Security spawns /obj/effect/landmark/start/depsec name = "department_sec" + icon_state = "Security Officer" /obj/effect/landmark/start/depsec/New() ..() @@ -358,4 +391,4 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) /obj/effect/landmark/ruin/Destroy() GLOB.ruin_landmarks -= src ruin_template = null - . = ..() \ No newline at end of file + . = ..() diff --git a/code/game/objects/effects/misc.dm b/code/game/objects/effects/misc.dm index d7d36acde1..1178cd43f8 100644 --- a/code/game/objects/effects/misc.dm +++ b/code/game/objects/effects/misc.dm @@ -65,3 +65,4 @@ /obj/effect/abstract/marker/at name = "active turf marker" + diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index 427e9eefe2..51a5778383 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -1,3 +1,4 @@ + /proc/create_portal_pair(turf/source, turf/destination, _creator = null, _lifespan = 300, accuracy = 0, newtype = /obj/effect/portal) if(!istype(source) || !istype(destination)) return @@ -41,6 +42,7 @@ /obj/effect/portal/attackby(obj/item/W, mob/user, params) if(user && Adjacent(user)) user.forceMove(get_turf(src)) + return TRUE /obj/effect/portal/Crossed(atom/movable/AM, oldloc) if(isobserver(AM)) @@ -169,3 +171,4 @@ else real_target = get_turf(linked) return real_target + diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index 43f10dc45e..e99a2fcbc6 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -30,9 +30,9 @@ digester.stomach_contents += gib if(MobDNA) - gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.blood_type + else if(istype(src, /obj/effect/gibspawner/generic)) // Probably a monkey - gib.blood_DNA["Non-human DNA"] = "A+" + gib.add_blood_DNA(list("Non-human DNA" = "A+")) var/list/directions = gibdirections[i] if(isturf(loc)) if(directions.len) @@ -43,7 +43,7 @@ /obj/effect/gibspawner/generic - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/core) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(2,2,1) /obj/effect/gibspawner/generic/Initialize() @@ -52,7 +52,7 @@ . = ..() /obj/effect/gibspawner/human - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up,/obj/effect/decal/cleanable/blood/gibs/down,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/decal/cleanable/blood/gibs/body,/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood/gibs/core) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/up, /obj/effect/decal/cleanable/blood/gibs/down, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/body, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/gibs/core) gibamounts = list(1,1,1,1,1,1,1) /obj/effect/gibspawner/human/Initialize() @@ -62,7 +62,7 @@ /obj/effect/gibspawner/humanbodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core,/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/core, /obj/effect/decal/cleanable/blood/gibs, /obj/effect/decal/cleanable/blood/gibs/torso) gibamounts = list(1, 1, 1, 1, 1, 1) /obj/effect/gibspawner/humanbodypartless/Initialize() @@ -72,7 +72,7 @@ /obj/effect/gibspawner/xeno - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core) + gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up, /obj/effect/decal/cleanable/xenoblood/xgibs/down, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/body, /obj/effect/decal/cleanable/xenoblood/xgibs/limb, /obj/effect/decal/cleanable/xenoblood/xgibs/core) gibamounts = list(1,1,1,1,1,1,1) /obj/effect/gibspawner/xeno/Initialize() @@ -82,7 +82,7 @@ /obj/effect/gibspawner/xenobodypartless //only the gibs that don't look like actual full bodyparts (except torso). - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core,/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso) + gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/core, /obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/xenoblood/xgibs/torso) gibamounts = list(1, 1, 1, 1, 1, 1) @@ -111,7 +111,7 @@ /obj/effect/gibspawner/robot sparks = 1 - gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb) + gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up, /obj/effect/decal/cleanable/robot_debris/down, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/robot_debris/limb) gibamounts = list(1,1,1,1,1,1) /obj/effect/gibspawner/robot/Initialize() diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 34e6793d5b..90f8fee507 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -5,19 +5,29 @@ var/lootcount = 1 //how many items will be spawned var/lootdoubles = TRUE //if the same item can be spawned twice var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect) + var/fan_out_items = FALSE //Whether the items should be distributed to offsets 0,3,-3,6,-6,9,-9.. This overrides pixel_x/y on the spawner itself /obj/effect/spawner/lootdrop/Initialize(mapload) ..() if(loot && loot.len) var/turf/T = get_turf(src) - while(lootcount && loot.len) + var/loot_spawned = 0 + while((lootcount-loot_spawned) && loot.len) var/lootspawn = pickweight(loot) if(!lootdoubles) loot.Remove(lootspawn) if(lootspawn) - new lootspawn(T) - lootcount-- + var/atom/movable/spawned_loot = new lootspawn(T) + if (!fan_out_items) + if (pixel_x != 0) + spawned_loot.pixel_x = pixel_x + if (pixel_y != 0) + spawned_loot.pixel_y = pixel_y + else + if (loot_spawned) + spawned_loot.pixel_x = spawned_loot.pixel_y = ((!(loot_spawned%2)*loot_spawned/2)*-3)+((loot_spawned%2)*(loot_spawned+1)/2*3) + loot_spawned++ return INITIALIZE_HINT_QDEL /obj/effect/spawner/lootdrop/armory_contraband @@ -192,5 +202,6 @@ /obj/item/aiModule/core/full/antimov, /obj/item/aiModule/core/full/balance, /obj/item/aiModule/core/full/tyrant, - /obj/item/aiModule/core/full/thermurderdynamic + /obj/item/aiModule/core/full/thermurderdynamic, + /obj/item/aiModule/core/full/damaged ) diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm index 0b39f3a5a5..9bdf0a673e 100644 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ b/code/game/objects/effects/spawners/vaultspawner.dm @@ -20,9 +20,9 @@ for(var/j = lowBoundY,j<=hiBoundY,j++) var/turf/T = locate(i,j,z) if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY) - T.ChangeTurf(/turf/closed/wall/vault) + T.PlaceOnTop(/turf/closed/wall/vault) else - T.ChangeTurf(/turf/open/floor/vault) + T.PlaceOnTop(/turf/open/floor/vault) T.icon_state = "[type]vault" qdel(src) diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4ecba7c982..83d24a26ee 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -133,7 +133,7 @@ else if(entry_vent) if(get_dist(src, entry_vent) <= 1) var/list/vents = list() - var/datum/pipeline/entry_vent_parent = entry_vent.PARENT1 + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in entry_vent_parent.other_atmosmch) vents.Add(temp_vent) if(!vents.len) diff --git a/code/game/objects/effects/temporary_visuals/clockcult.dm b/code/game/objects/effects/temporary_visuals/clockcult.dm index d9861d827d..59c4e23283 100644 --- a/code/game/objects/effects/temporary_visuals/clockcult.dm +++ b/code/game/objects/effects/temporary_visuals/clockcult.dm @@ -86,8 +86,8 @@ transform = matrix()*2 var/matrix/M = transform M.Turn(90) - animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags_1 = ANIMATION_PARALLEL) - animate(src, transform = M, time = duration, flags_1 = ANIMATION_PARALLEL) + animate(src, alpha = 20, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL) + animate(src, transform = M, time = duration, flags = ANIMATION_PARALLEL) /obj/effect/temp_visual/ratvar/ocular_warden name = "warden's gaze" diff --git a/code/game/objects/effects/temporary_visuals/cult.dm b/code/game/objects/effects/temporary_visuals/cult.dm index 125904604f..a649763435 100644 --- a/code/game/objects/effects/temporary_visuals/cult.dm +++ b/code/game/objects/effects/temporary_visuals/cult.dm @@ -65,8 +65,8 @@ var/matrix/M = transform M.Turn(turnedness) transform = M - animate(src, alpha = 255, time = duration, easing = BOUNCE_EASING, flags_1 = ANIMATION_PARALLEL) - animate(src, transform = oldtransform, time = duration, flags_1 = ANIMATION_PARALLEL) + animate(src, alpha = 255, time = duration, easing = BOUNCE_EASING, flags = ANIMATION_PARALLEL) + animate(src, transform = oldtransform, time = duration, flags = ANIMATION_PARALLEL) /obj/effect/temp_visual/cult/rune_spawn/rune1 icon_state = "rune1words" diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 0928fd9ca6..0203cb66c3 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -378,7 +378,7 @@ M = size_matrix*0.1 else M = size_matrix*2 - animate(src, alpha = 20, transform = M, time = duration, flags_1 = ANIMATION_PARALLEL) + animate(src, alpha = 20, transform = M, time = duration, flags = ANIMATION_PARALLEL) /obj/effect/temp_visual/bleed/explode icon_state = "bleed10" diff --git a/code/game/objects/effects/temporary_visuals/projectile_beam.dm b/code/game/objects/effects/temporary_visuals/projectile_beam.dm new file mode 100644 index 0000000000..af621e29da --- /dev/null +++ b/code/game/objects/effects/temporary_visuals/projectile_beam.dm @@ -0,0 +1,70 @@ +/proc/generate_projectile_beam_between_points(datum/point/starting, datum/point/ending, beam_type, color, qdel_in = 5) //Do not pass z-crossing points as that will not be properly (and likely will never be properly until it's absolutely needed) supported! + if(!istype(starting) || !istype(ending) || !ispath(beam_type)) + return + var/datum/point/midpoint = point_midpoint_points(starting, ending) + var/obj/effect/projectile_beam/PB = new beam_type + PB.apply_vars(angle_between_points(starting, ending), midpoint.return_px(), midpoint.return_py(), color, pixel_length_between_points(starting, ending) / world.icon_size, midpoint.return_turf(), 0) + . = PB + if(qdel_in) + QDEL_IN(PB, qdel_in) + +/obj/effect/projectile_beam + icon = 'icons/obj/projectiles.dmi' + layer = ABOVE_MOB_LAYER + anchored = TRUE + light_power = 1 + light_range = 2 + light_color = "#00ffff" + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + flags_1 = ABSTRACT_1 + appearance_flags = 0 + +/obj/effect/projectile_beam/singularity_pull() + return + +/obj/effect/projectile_beam/singularity_act() + return + +/obj/effect/projectile_beam/proc/scale_to(nx,ny,override=TRUE) + var/matrix/M + if(!override) + M = transform + else + M = new + M.Scale(nx,ny) + transform = M + +/obj/effect/projectile_beam/proc/turn_to(angle,override=TRUE) + var/matrix/M + if(!override) + M = transform + else + M = new + M.Turn(angle) + transform = M + +/obj/effect/projectile_beam/New(angle_override, p_x, p_y, color_override, scaling = 1) + if(angle_override && p_x && p_y && color_override && scaling) + apply_vars(angle_override, p_x, p_y, color_override, scaling) + return ..() + +/obj/effect/projectile_beam/proc/apply_vars(angle_override, p_x = 0, p_y = 0, color_override, scaling = 1, new_loc, increment = 0) + var/mutable_appearance/look = new(src) + look.pixel_x = p_x + look.pixel_y = p_y + if(color_override) + look.color = color_override + appearance = look + scale_to(1,scaling, FALSE) + turn_to(angle_override, FALSE) + if(!isnull(new_loc)) //If you want to null it just delete it... + forceMove(new_loc) + for(var/i in 1 to increment) + pixel_x += round((sin(angle_override)+16*sin(angle_override)*2), 1) + pixel_y += round((cos(angle_override)+16*cos(angle_override)*2), 1) + +/obj/effect/projectile_beam/tracer + icon_state = "tracer_beam" + +/obj/effect/projectile_beam/tracer/aiming + icon_state = "gbeam" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 823a91cead..19c1b6e03d 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -117,7 +117,7 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/trigger_guard = TRIGGER_GUARD_NONE - var/icon_override = null + var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322 //Grinder vars var/list/grind_results //A reagent list containing the reagents this item produces when ground up in a grinder - this can be an empty list to allow for reagent transferring only @@ -202,31 +202,39 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(!user.research_scanner) return - var/list/input = techweb_item_boost_check(src) - if(input) - var/list/output = list("Research Boost Data:") - var/list/res = list("Already researched:") - var/list/boosted = list("Already boosted:") - for(var/datum/techweb_node/N in input) - var/str = "[N.display_name]: [input[N]] points.
    " - if(SSresearch.science_tech.researched_nodes[N]) - res += str - else if(SSresearch.science_tech.boosted_nodes[N]) - boosted += str - if(SSresearch.science_tech.visible_nodes[N]) //JOY OF DISCOVERY! - output += str - var/list/combine = output + res + boosted - var/strout = combine.Join("
    ") - to_chat(user, strout) - var/list/msg = list("*--------*
    Extractable materials:") - if(materials.len) + // Research prospects, including boostable nodes and point values. + // Deliver to a console to know whether the boosts have already been used. + var/list/research_msg = list("Research prospects: ") + var/sep = "" + var/list/boostable_nodes = techweb_item_boost_check(src) + if (boostable_nodes) + for(var/id in boostable_nodes) + var/datum/techweb_node/node = SSresearch.techweb_nodes[id] + research_msg += sep + research_msg += node.display_name + sep = ", " + var/points = techweb_item_point_check(src) + if (points) + research_msg += sep + research_msg += "[points] points" + sep = ", " + + if (!sep) // nothing was shown + research_msg += "None" + + // Extractable materials. Only shows the names, not the amounts. + research_msg += ".
    Extractable materials: " + if (materials.len) + sep = "" for(var/mat in materials) - msg += "[CallMaterialName(mat)]" //Capitize first word, remove the "$" + research_msg += sep + research_msg += CallMaterialName(mat) + sep = ", " else - msg += "No extractable materials detected." - msg += "*--------*" - to_chat(user, msg.Join("
    ")) + research_msg += "None" + research_msg += "." + to_chat(user, research_msg.Join()) /obj/item/proc/speechModification(message) //for message modding by mask slot. return message @@ -539,9 +547,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.adjust_blurriness(15) if(M.stat != DEAD) to_chat(M, "Your eyes start to bleed profusely!") - if(!(M.disabilities & (NEARSIGHT | BLIND))) - if(M.become_nearsighted()) - to_chat(M, "You become nearsighted!") + if(!(M.has_disability(DISABILITY_BLIND) || M.has_disability(DISABILITY_NEARSIGHT))) + to_chat(M, "You become nearsighted!") + M.become_nearsighted(EYE_DAMAGE) if(prob(50)) if(M.stat != DEAD) if(M.drop_all_held_items()) @@ -550,22 +558,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) M.Unconscious(20) M.Knockdown(40) if (prob(eyes.eye_damage - 10 + 1)) - if(M.become_blind()) - to_chat(M, "You go blind!") - -/obj/item/clean_blood() - . = ..() - if(.) - if(initial(icon) && initial(icon_state)) - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(blood_splatter_icon) - cut_overlay(blood_splatter_icon) - -/obj/item/clothing/gloves/clean_blood() - . = ..() - if(.) - transfer_blood = 0 + M.become_blind(EYE_DAMAGE) + to_chat(M, "You go blind!") /obj/item/singularity_pull(S, current_size) ..() @@ -608,6 +602,36 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/proc/get_belt_overlay() //Returns the icon used for overlaying the object on a belt return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', icon_state) +/obj/item/proc/update_slot_icon() + if(!ismob(loc)) + return + var/mob/owner = loc + var/flags = slot_flags + if(flags & SLOT_OCLOTHING) + owner.update_inv_wear_suit() + if(flags & SLOT_ICLOTHING) + owner.update_inv_w_uniform() + if(flags & SLOT_GLOVES) + owner.update_inv_gloves() + if(flags & SLOT_EYES) + owner.update_inv_glasses() + if(flags & SLOT_EARS) + owner.update_inv_ears() + if(flags & SLOT_MASK) + owner.update_inv_wear_mask() + if(flags & SLOT_HEAD) + owner.update_inv_head() + if(flags & SLOT_FEET) + owner.update_inv_shoes() + if(flags & SLOT_ID) + owner.update_inv_wear_id() + if(flags & SLOT_BELT) + owner.update_inv_belt() + if(flags & SLOT_BACK) + owner.update_inv_back() + if(flags & SLOT_NECK) + owner.update_inv_neck() + /obj/item/proc/is_hot() return heat diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 1e9c71bd01..8b9b24fe65 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -173,7 +173,7 @@ AI MODULES /******************** OneHuman ********************/ /obj/item/aiModule/zeroth/oneHuman - name = "'OneCrew' AI Module" + name = "'OneCrew' AI Module"//CIT CHANGE - changes onehuman to onecrew var/targetName = "" laws = list("Only SUBJECT is crew.") @@ -554,3 +554,16 @@ AI MODULES /obj/item/aiModule/core/full/peacekeeper name = "'Peacekeeper' Core AI Module" law_id = "peacekeeper" + +// Bad times ahead + +/obj/item/aiModule/core/full/damaged + name = "damaged Core AI Module" + desc = "An AI Module for programming laws to an AI. It looks slightly damaged." + +/obj/item/aiModule/core/full/damaged/install(datum/ai_laws/law_datum, mob/user) + laws += generate_ion_law() + while (prob(75)) + laws += generate_ion_law() + ..() + laws = list() diff --git a/code/game/objects/items/RCD.dm b/code/game/objects/items/RCD.dm index 1a7b347514..97025c4b63 100644 --- a/code/game/objects/items/RCD.dm +++ b/code/game/objects/items/RCD.dm @@ -291,25 +291,25 @@ ARCD if("Public") airlock_type = /obj/machinery/door/airlock/public/glass if("Engineering") - airlock_type = /obj/machinery/door/airlock/glass_engineering + airlock_type = /obj/machinery/door/airlock/engineering/glass if("Atmospherics") - airlock_type = /obj/machinery/door/airlock/glass_atmos + airlock_type = /obj/machinery/door/airlock/atmos/glass if("Security") - airlock_type = /obj/machinery/door/airlock/glass_security + airlock_type = /obj/machinery/door/airlock/security/glass if("Command") - airlock_type = /obj/machinery/door/airlock/glass_command + airlock_type = /obj/machinery/door/airlock/command/glass if("Medical") - airlock_type = /obj/machinery/door/airlock/glass_medical + airlock_type = /obj/machinery/door/airlock/medical/glass if("Research") - airlock_type = /obj/machinery/door/airlock/glass_research + airlock_type = /obj/machinery/door/airlock/research/glass if("Science") - airlock_type = /obj/machinery/door/airlock/glass_science + airlock_type = /obj/machinery/door/airlock/science/glass if("Virology") - airlock_type = /obj/machinery/door/airlock/glass_virology + airlock_type = /obj/machinery/door/airlock/virology/glass if("Mining") - airlock_type = /obj/machinery/door/airlock/glass_mining + airlock_type = /obj/machinery/door/airlock/mining/glass if("Maintenance") - airlock_type = /obj/machinery/door/airlock/glass_maintenance + airlock_type = /obj/machinery/door/airlock/maintenance/glass if("External") airlock_type = /obj/machinery/door/airlock/external/glass if("External Maintenance") diff --git a/code/game/objects/items/RCL.dm b/code/game/objects/items/RCL.dm index 8958ade484..f842c579c1 100644 --- a/code/game/objects/items/RCL.dm +++ b/code/game/objects/items/RCL.dm @@ -169,15 +169,20 @@ loaded.item_color = colors[current_color_index] last = loaded.place_turf(get_turf(src), user, turn(user.dir, 180)) is_empty(user) //If we've run out, display message + update_icon() -/obj/item/twohanded/rcl/pre_loaded/Initialize () //Comes preloaded with cable, for testing stuff +/obj/item/twohanded/rcl/pre_loaded/Initialize() //Comes preloaded with cable, for testing stuff . = ..() loaded = new() loaded.max_amount = max_amount loaded.amount = max_amount update_icon() +/obj/item/twohanded/rcl/Initialize() + . = ..() + update_icon() + /obj/item/twohanded/rcl/ui_action_click(mob/user, action) if(istype(action, /datum/action/item_action/rcl)) current_color_index++; @@ -203,4 +208,4 @@ item_state = "rcl" else icon_state = "rclg-1" - item_state = "rclg-1" \ No newline at end of file + item_state = "rclg-1" diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 6e515264ca..72481f335d 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -1,3 +1,4 @@ + /obj/item/bodybag name = "body bag" desc = "A folded bag designed for the storage and transportation of cadavers." @@ -79,4 +80,3 @@ return loc.visible_message("[user] suddenly appears in front of [loc]!", "[user] breaks free of [src]!") qdel(src) - diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 0f65281328..0358aa3188 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -155,11 +155,6 @@ update_label("John Doe", "Clowny") name = "agent card" access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE) var/anyone = FALSE //Can anyone forge the ID or just syndicate? - -/obj/item/card/id/syndicate/nuke_leader - name = "lead agent card" - access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER) - /obj/item/card/id/syndicate/Initialize() . = ..() @@ -202,6 +197,10 @@ update_label("John Doe", "Clowny") /obj/item/card/id/syndicate/anyone anyone = TRUE +/obj/item/card/id/syndicate/nuke_leader + name = "lead agent card" + 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." @@ -355,4 +354,4 @@ update_label("John Doe", "Clowny") name = "APC Access ID" desc = "Special ID card to allow access to APCs." icon_state = "centcom" - access = list(ACCESS_ENGINE_EQUIP) + access = list(ACCESS_ENGINE_EQUIP) \ No newline at end of file diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index e033670880..1228cf2011 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -261,28 +261,29 @@ /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/glass = 1) +#define PATH_FREEZER /obj/machinery/atmospherics/components/unary/thermomachine/freezer +#define PATH_HEATER /obj/machinery/atmospherics/components/unary/thermomachine/heater + /obj/item/circuitboard/machine/thermomachine/Initialize() . = ..() - if(prob(50)) - name = "Freezer (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer - else - name = "Heater (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater - -#define FREEZER /obj/item/circuitboard/machine/thermomachine/freezer -#define HEATER /obj/item/circuitboard/machine/thermomachine/heater + if(!build_path) + if(prob(50)) + name = "Freezer (Machine Board)" + build_path = PATH_FREEZER + else + name = "Heater (Machine Board)" + build_path = PATH_HEATER /obj/item/circuitboard/machine/thermomachine/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/screwdriver)) var/obj/item/circuitboard/new_type var/new_setting switch(build_path) - if(FREEZER) - new_type = HEATER + if(PATH_FREEZER) + new_type = /obj/item/circuitboard/machine/thermomachine/heater new_setting = "Heater" - if(HEATER) - new_type = FREEZER + if(PATH_HEATER) + new_type = /obj/item/circuitboard/machine/thermomachine/freezer new_setting = "Freezer" name = initial(new_type.name) build_path = initial(new_type.build_path) @@ -291,16 +292,16 @@ else return ..() -#undef FREEZER -#undef HEATER - /obj/item/circuitboard/machine/thermomachine/heater name = "Heater (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/heater + build_path = PATH_HEATER /obj/item/circuitboard/machine/thermomachine/freezer name = "Freezer (Machine Board)" - build_path = /obj/machinery/atmospherics/components/unary/thermomachine/freezer + build_path = PATH_FREEZER + +#undef PATH_FREEZER +#undef PATH_HEATER /obj/item/circuitboard/machine/deep_fryer name = "circuit board (Deep Fryer)" diff --git a/code/game/objects/items/clown_items.dm b/code/game/objects/items/clown_items.dm index f2a804e9e9..e9ccda03ea 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -86,7 +86,7 @@ var/obj/effect/decal/cleanable/C = locate() in target qdel(C) target.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - target.clean_blood() + target.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) target.wash_cream() return diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index a3ad685406..3e322ea0fa 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -8,7 +8,6 @@ var/colour = "red" var/open = FALSE - /obj/item/lipstick/purple name = "purple lipstick" colour = "purple" @@ -22,7 +21,6 @@ name = "black lipstick" colour = "black" - /obj/item/lipstick/random name = "lipstick" icon_state = "random_lipstick" @@ -33,8 +31,6 @@ colour = pick("red","purple","lime","black","green","blue","white") name = "[colour] lipstick" - - /obj/item/lipstick/attack_self(mob/user) cut_overlays() to_chat(user, "You twist \the [src] [open ? "closed" : "open"].") @@ -103,7 +99,6 @@ else ..() - /obj/item/razor name = "electric razor" desc = "The latest and greatest power razor born from the science of shaving." @@ -112,7 +107,6 @@ flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY - /obj/item/razor/proc/shave(mob/living/carbon/human/H, location = "mouth") if(location == "mouth") H.facial_hair_style = "Shaved" @@ -188,4 +182,4 @@ else ..() else - ..() + ..() \ No newline at end of file diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 56bad47963..0759656423 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -39,7 +39,7 @@ var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6") var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED, RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER) - var/list/graffiti_large_h = list("secborg", "paint") + var/list/graffiti_large_h = list("secborg", "paint") // CIT CHANGE - removes yiff in hell graffiti var/list/all_drawables @@ -240,7 +240,7 @@ out += a return jointext(out,"") -/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity) +/obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity, params) if(!proximity || !check_allowed_items(target)) return @@ -276,6 +276,7 @@ else if(drawing in numerals) temp = "number" + var/graf_rot if(drawing in oriented) switch(user.dir) @@ -288,6 +289,14 @@ else graf_rot = 0 + var/list/click_params = params2list(params) + var/clickx + var/clicky + + if(click_params && click_params["icon-x"] && click_params["icon-y"]) + clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + if(!instant) to_chat(user, "You start drawing a [temp] on the [target.name]...") @@ -316,6 +325,8 @@ if(PAINT_NORMAL) var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot) C.add_hiddenprint(user) + C.pixel_x = clickx + C.pixel_y = clicky affected_turfs += target if(PAINT_LARGE_HORIZONTAL) var/turf/left = locate(target.x-1,target.y,target.z) @@ -617,9 +628,6 @@ spray_overlay.color = paint_color add_overlay(spray_overlay) - pre_noise = FALSE - post_noise = TRUE - /obj/item/toy/crayon/spraycan/borg name = "cyborg spraycan" desc = "A metallic container containing shiny synthesised paint." diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 25fbb49c9b..6ee50f5524 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -393,7 +393,7 @@ /obj/item/twohanded/shockpaddles/proc/can_defib(mob/living/carbon/human/H) var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) - return (!H.suiciding && !(H.disabilities & NOCLONE) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain) + return (!H.suiciding && !(H.has_disability(DISABILITY_NOCLONE)) && !H.hellbound && ((world.time - H.timeofdeath) < tlimit) && (H.getBruteLoss() < 180) && (H.getFireLoss() < 180) && H.getorgan(/obj/item/organ/heart) && BR && !BR.damaged_brain) /obj/item/twohanded/shockpaddles/proc/shock_touching(dmg, mob/H) if(isliving(H.pulledby)) //CLEAR! @@ -514,7 +514,7 @@ shock_touching(30, H) var/failed - if (H.suiciding || (H.disabilities & NOCLONE)) + if (H.suiciding || (H.has_disability(DISABILITY_NOCLONE))) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." else if (H.hellbound) failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existence. Further attempts futile." diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index f2bc8b5686..9c6cd9e8ee 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -94,8 +94,10 @@ GLOBAL_LIST_EMPTY(PDAs) update_icon() /obj/item/device/pda/equipped(mob/user, slot) + . = ..() if(!equipped) if(user.client) + background_color = user.client.prefs.pda_color switch(user.client.prefs.pda_style) if(MONO) font_index = MODE_MONO @@ -112,7 +114,7 @@ GLOBAL_LIST_EMPTY(PDAs) else font_index = MODE_MONO font_mode = FONT_MONO - equipped = TRUE + equipped = TRUE /obj/item/device/pda/proc/update_label() name = "PDA-[owner] ([ownjob])" //Name generalisation @@ -245,7 +247,7 @@ GLOBAL_LIST_EMPTY(PDAs) dat += "
  • Bots Access
  • " if (cartridge.access & CART_JANITOR) dat += "
  • Custodial Locator
  • " - if (istype(cartridge.radio, /obj/item/radio/integrated/signal)) + if (istype(cartridge.radio)) dat += "
  • Signaler System
  • " if (cartridge.access & CART_NEWSCASTER) dat += "
  • Newscaster Access
  • " @@ -511,8 +513,7 @@ GLOBAL_LIST_EMPTY(PDAs) U << browse(null, "window=pda") return if("Message") - var/obj/item/device/pda/P = locate(href_list["target"]) - src.create_message(U, P) + src.create_message(U, locate(href_list["target"])) if("MessageAll") src.send_to_all(U) @@ -594,49 +595,57 @@ GLOBAL_LIST_EMPTY(PDAs) t = Gibberish(t, 100) return t -/obj/item/device/pda/proc/send_message(mob/living/user = usr,list/obj/item/device/pda/targets) +/obj/item/device/pda/proc/send_message(mob/living/user, list/obj/item/device/pda/targets) var/message = msg_input(user) - if(!message || !targets.len) return - if(last_text && world.time < last_text + 5) return - var/multiple = targets.len > 1 + // Send the signal + var/list/string_targets = list() + for (var/obj/item/device/pda/P in targets) + if (P.owner && P.ownjob) // != src is checked by the UI + string_targets += "[P.owner] ([P.ownjob])" + for (var/obj/machinery/computer/message_monitor/M in targets) + // In case of "Reply" to a message from a console, this will make the + // message be logged successfully. If the console is impersonating + // someone by matching their name and job, the reply will reach the + // impersonated PDA. + string_targets += "[M.customsender] ([M.customjob])" + if (!string_targets.len) + return - var/datum/data_pda_msg/last_sucessful_msg - for(var/obj/item/device/pda/P in targets) - if(P == src) - continue - var/obj/machinery/message_server/MS = null - MS = can_send(P) - if(MS) - var/datum/data_pda_msg/msg = MS.send_pda_message("[P.owner]","[owner]","[message]",photo) - if(msg) - last_sucessful_msg = msg - if(!multiple) - show_to_sender(msg) - P.show_recieved_message(msg,src) - if(!multiple) - show_to_ghosts(user,msg) - log_talk(user,"[key_name(user)] (PDA: [initial(name)]) sent \"[message]\" to [P.name]",LOGPDA) - else - if(!multiple) - to_chat(user, "ERROR: Server isn't responding.") - return + var/datum/signal/subspace/pda/signal = new(src, list( + "name" = "[owner]", + "job" = "[ownjob]", + "message" = message, + "targets" = string_targets + )) + if (photo) + signal.data["photo"] = photo + signal.send_to_receivers() + + // If it didn't reach, note that fact + if (!signal.data["done"]) + to_chat(user, "ERROR: Server isn't responding.") + return + + var/target_text = signal.format_target() + // Log it in our logs + tnote += "→ To [target_text]:
    [signal.format_message()]
    " + // Show it to ghosts + var/ghost_message = "[owner] PDA Message --> [target_text]: [signal.format_message()]" + for(var/mob/M in GLOB.player_list) + if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) + to_chat(M, "[FOLLOW_LINK(M, user)] [ghost_message]") + // Log in the talk log + log_talk(user, "[key_name(user)] (PDA: [initial(name)]) sent \"[message]\" to [target_text]", LOGPDA) + // Reset the photo photo = null - if(multiple) - show_to_sender(last_sucessful_msg,1) - show_to_ghosts(user,last_sucessful_msg,1) - log_talk(user,"[user] (PDA: [initial(name)]) sent \"[message]\" to Everyone",LOGPDA) - -/obj/item/device/pda/proc/show_to_sender(datum/data_pda_msg/msg,multiple = 0) - tnote += "→ To [multiple ? "Everyone" : msg.recipient]:
    [msg.message][msg.get_photo_ref()]
    " - -/obj/item/device/pda/proc/show_recieved_message(datum/data_pda_msg/msg,obj/item/device/pda/source) - tnote += "← From [source.owner] ([source.ownjob]):
    [msg.message][msg.get_photo_ref()]
    " +/obj/item/device/pda/proc/receive_message(datum/signal/subspace/pda/signal) + tnote += "← From [signal.data["name"]] ([signal.data["job"]]):
    [signal.format_message()]
    " if (!silent) playsound(loc, 'sound/machines/twobeep.ogg', 50, 1) @@ -650,59 +659,21 @@ GLOBAL_LIST_EMPTY(PDAs) L = get(src, /mob/living/silicon) if(L && L.stat != UNCONSCIOUS) - var/hrefstart var/hrefend if (isAI(L)) - hrefstart = "" + hrefstart = "" hrefend = "" - to_chat(L, "[icon2html(src)] Message from [hrefstart][source.owner] ([source.ownjob])[hrefend], \"[msg.message]\"[msg.get_photo_ref()] (Reply)") + to_chat(L, "[icon2html(src)] Message from [hrefstart][signal.data["name"]] ([signal.data["job"]])[hrefend], [signal.format_message()] (Reply)") update_icon() add_overlay(icon_alert) -/obj/item/device/pda/proc/show_to_ghosts(mob/living/user, datum/data_pda_msg/msg,multiple = 0) - for(var/mob/M in GLOB.player_list) - if(isobserver(M) && M.client && (M.client.prefs.chat_toggles & CHAT_GHOSTPDA)) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [msg.sender] PDA Message --> [multiple ? "Everyone" : msg.recipient]: [msg.message][msg.get_photo_ref()]
    ") - -/obj/item/device/pda/proc/can_send(obj/item/device/pda/P) - if(!P || QDELETED(P) || P.toff) - return null - - var/obj/machinery/message_server/useMS = null - if(GLOB.message_servers) - for (var/obj/machinery/message_server/MS in GLOB.message_servers) - //PDAs are now dependant on the Message Server. - if(MS.active) - useMS = MS - break - - var/datum/signal/signal = src.telecomms_process() - - if(!P || QDELETED(P) || P.toff) //in case the PDA or mob gets destroyed during telecomms_process() - return null - - var/useTC = 0 - if(signal) - if(signal.data["done"]) - useTC = 1 - var/turf/pos = get_turf(P) - if(pos.z in signal.data["level"]) - useTC = 2 - - if(useTC == 2) - return useMS - else - return null - - -/obj/item/device/pda/proc/send_to_all(mob/living/U = usr) +/obj/item/device/pda/proc/send_to_all(mob/living/U) send_message(U,get_viewable_pdas()) -/obj/item/device/pda/proc/create_message(mob/living/U = usr, obj/item/device/pda/P) +/obj/item/device/pda/proc/create_message(mob/living/U, obj/item/device/pda/P) send_message(U,list(P)) /obj/item/device/pda/AltClick() diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index b1a4a9f6f8..e972f1822b 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -6,7 +6,7 @@ icon_state = "pda-clown" desc = "A portable microcomputer by Thinktronic Systems, LTD. The surface is coated with polytetrafluoroethylene and banana drippings." ttone = "honk" - var/slipvictims = list() + var/slipvictims = list() //CIT CHANGE - makes clown PDAs track unique people slipped /obj/item/device/pda/clown/Initialize() . = ..() @@ -14,7 +14,7 @@ /obj/item/device/pda/clown/proc/AfterSlip(mob/living/carbon/human/M) if (istype(M) && (M.real_name != owner)) - slipvictims |=M + slipvictims |= M //CIT CHANGE - makes clown PDAs track unique people slipped var/obj/item/cartridge/virus/clown/cart = cartridge if(istype(cart) && cart.charges < 5) cart.charges++ diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 1b9e2c0e14..318aaa9e24 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -25,13 +25,13 @@ righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' w_class = WEIGHT_CLASS_TINY - var/obj/item/radio/integrated/radio = null + var/obj/item/integrated_signaler/radio = null - var/access = 0 //Bit flags_1 for cartridge access + var/access = 0 //Bit flags for cartridge access var/remote_door_id = "" - var/bot_access_flags = 0 //Bit flags_1. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT + var/bot_access_flags = 0 //Bit flags. Selection: SEC_BOT | MULE_BOT | FLOOR_BOT | CLEAN_BOT | MED_BOT var/spam_enabled = 0 //Enables "Send to All" Option var/obj/item/device/pda/host_pda = null @@ -127,7 +127,7 @@ /obj/item/cartridge/signal/Initialize() . = ..() - radio = new /obj/item/radio/integrated/signal(src) + radio = new(src) @@ -176,7 +176,7 @@ /obj/item/cartridge/rd/Initialize() . = ..() - radio = new /obj/item/radio/integrated/signal(src) + radio = new(src) /obj/item/cartridge/captain name = "\improper Value-PAK cartridge" @@ -188,20 +188,16 @@ /obj/item/cartridge/captain/New() ..() - radio = new /obj/item/radio/integrated/signal(src) + radio = new(src) /obj/item/cartridge/proc/post_status(command, data1, data2) - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) if(!frequency) return - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - + var/datum/signal/status_signal = new(list("command" = command)) switch(command) if("message") status_signal.data["msg1"] = data1 @@ -217,7 +213,6 @@ return switch(host_pda.mode) if(40) //signaller - var/obj/item/radio/integrated/signal/S = radio menu = "

    Remote Signaling System

    " menu += {" @@ -225,14 +220,14 @@ Frequency: - - -[format_frequency(S.frequency)] +[format_frequency(radio.frequency)] + +

    Code: - - -[S.code] +[radio.code] + +
    "} if (41) //crew manifest @@ -430,14 +425,14 @@ Code: switch(SSshuttle.supply.mode) if(SHUTTLE_CALL) menu += "Moving to " - if(!(SSshuttle.supply.z in GLOB.station_z_levels)) + if(!is_station_level(SSshuttle.supply.z)) menu += "station" else menu += "centcom" menu += " ([SSshuttle.supply.timeLeft(600)] Mins)" else menu += "At " - if(!(SSshuttle.supply.z in GLOB.station_z_levels)) + if(!is_station_level(SSshuttle.supply.z)) menu += "centcom" else menu += "station" @@ -571,22 +566,17 @@ Code: active1 = null if("Send Signal") - spawn( 0 ) - var/obj/item/radio/integrated/signal/S = radio - S.send_signal("ACTIVATE") - return + INVOKE_ASYNC(radio, /obj/item/integrated_signaler.proc/send_activation) if("Signal Frequency") - var/obj/item/radio/integrated/signal/S = radio - var/new_frequency = sanitize_frequency(S.frequency + text2num(href_list["sfreq"])) - S.set_frequency(new_frequency) + var/new_frequency = sanitize_frequency(radio.frequency + text2num(href_list["sfreq"])) + radio.set_frequency(new_frequency) if("Signal Code") - var/obj/item/radio/integrated/signal/S = radio - S.code += text2num(href_list["scode"]) - S.code = round(S.code) - S.code = min(100, S.code) - S.code = max(1, S.code) + radio.code += text2num(href_list["scode"]) + radio.code = round(radio.code) + radio.code = min(100, radio.code) + radio.code = max(1, radio.code) if("Status") switch(href_list["statdisp"]) diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 2c4fc8fa48..7e1a1be7e3 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -1,48 +1,31 @@ -/obj/item/radio/integrated +// Radio Cartridge, essentially a remote signaler with limited spectrum. +/obj/item/integrated_signaler name = "\improper PDA radio module" - desc = "An electronic radio system of nanotrasen origin." + desc = "An electronic radio system of Nanotrasen origin." icon = 'icons/obj/module.dmi' icon_state = "power_mod" - var/on = FALSE //Are we currently active?? - var/menu_message = "" - -/obj/item/radio/integrated/Initialize() - . = ..() - -/obj/item/radio/integrated/Destroy() - return ..() - -/* - * Radio Cartridge, essentially a signaler. - */ - - -/obj/item/radio/integrated/signal - var/frequency = 1457 - var/code = 30 +/obj/item/integrated_signaler + var/frequency = FREQ_SIGNALER + var/code = DEFAULT_SIGNALER_CODE var/last_transmission var/datum/radio_frequency/radio_connection -/obj/item/radio/integrated/signal/Destroy() - SSradio.remove_object(src, frequency) +/obj/item/integrated_signaler/Destroy() radio_connection = null return ..() -/obj/item/radio/integrated/signal/Initialize() +/obj/item/integrated_signaler/Initialize() . = ..() - if (src.frequency < 1200 || src.frequency > 1600) - src.frequency = sanitize_frequency(src.frequency) - + if (frequency < MIN_FREE_FREQ || frequency > MAX_FREE_FREQ) + frequency = sanitize_frequency(frequency) set_frequency(frequency) -/obj/item/radio/integrated/signal/proc/set_frequency(new_frequency) - SSradio.remove_object(src, frequency) +/obj/item/integrated_signaler/proc/set_frequency(new_frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency) - -/obj/item/radio/integrated/signal/proc/send_signal(message="ACTIVATE") + radio_connection = SSradio.return_frequency(frequency) +/obj/item/integrated_signaler/proc/send_activation() if(last_transmission && world.time < (last_transmission + 5)) return last_transmission = world.time @@ -51,11 +34,5 @@ var/turf/T = get_turf(src) GLOB.lastsignalers.Add("[time] : [usr.key] used [src] @ location ([T.x],[T.y],[T.z]) : [format_frequency(frequency)]/[code]") - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = message - - radio_connection.post_signal(src, signal) - - return + var/datum/signal/signal = new(list("code" = code)) + radio_connection.post_signal(src, signal, filter = RADIO_SIGNALER) diff --git a/code/game/objects/items/devices/camera_bug.dm b/code/game/objects/items/devices/camera_bug.dm index 1b9978f472..87163dea1e 100644 --- a/code/game/objects/items/devices/camera_bug.dm +++ b/code/game/objects/items/devices/camera_bug.dm @@ -1,3 +1,4 @@ + #define BUGMODE_LIST 0 #define BUGMODE_MONITOR 1 #define BUGMODE_TRACK 2 diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index f656d55afd..7fc8df79ee 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -48,7 +48,7 @@ add_fingerprint(user) if(istype(M) && on && user.zone_selected in list("eyes", "mouth")) - if((user.disabilities & (CLUMSY | DUMB)) && prob(50)) //too dumb to use flashlight properly + if((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50)) //too dumb to use flashlight properly return ..() //just hit them in the head if(!user.IsAdvancedToolUser()) @@ -82,7 +82,7 @@ else user.visible_message("[user] directs [src] to [M]'s eyes.", \ "You direct [src] to [M]'s eyes.") - if(M.stat == DEAD || (M.disabilities & BLIND) || !M.flash_act(visual = 1)) //mob is dead or fully blind + if(M.stat == DEAD || (M.has_disability(DISABILITY_BLIND)) || !M.flash_act(visual = 1)) //mob is dead or fully blind to_chat(user, "[M]'s pupils don't react to the light!") else if(M.dna && M.dna.check_mutation(XRAY)) //mob has X-RAY vision to_chat(user, "[M]'s pupils give an eerie glow!") @@ -493,7 +493,7 @@ color = null /obj/item/device/flashlight/glowstick/random/Initialize() - . = ..() + ..() var/T = pick(typesof(/obj/item/device/flashlight/glowstick) - /obj/item/device/flashlight/glowstick/random) new T(loc) return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm index 8f3eeeec71..a2b1ce2056 100644 --- a/code/game/objects/items/devices/multitool.dm +++ b/code/game/objects/items/devices/multitool.dm @@ -158,4 +158,4 @@ desc = "An omni-technological interface." icon = 'icons/obj/abductor.dmi' icon_state = "multitool" - toolspeed = 0.1 + toolspeed = 0.1 \ No newline at end of file diff --git a/code/game/objects/items/devices/pressureplates.dm b/code/game/objects/items/devices/pressureplates.dm index 183e960a08..d1ecf9ee28 100644 --- a/code/game/objects/items/devices/pressureplates.dm +++ b/code/game/objects/items/devices/pressureplates.dm @@ -11,7 +11,7 @@ var/sound/trigger_sound = 'sound/effects/pressureplate.ogg' var/obj/item/device/assembly/signaler/sigdev = null var/roundstart_signaller = FALSE - var/roundstart_signaller_freq = 1447 + var/roundstart_signaller_freq = FREQ_PRESSURE_PLATE var/roundstart_signaller_code = 30 var/roundstart_hide = FALSE var/removable_signaller = TRUE diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 69b603d213..e7d3d9d9e6 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -19,10 +19,6 @@ /obj/item/device/radio/beacon/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) return -/obj/item/device/radio/beacon/send_hear() - return null - - /obj/item/device/radio/beacon/verb/alter_signal(t as text) set name = "Alter Beacon's Signal" set category = "Object" diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 19226e5d9a..307b493281 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -12,7 +12,7 @@ materials = list(MAT_METAL=10000, MAT_GLASS=2500) var/on = TRUE var/code = 2 - var/frequency = 1449 + var/frequency = FREQ_ELECTROPACK var/shock_cooldown = 0 /obj/item/device/electropack/suicide_act(mob/user) @@ -21,7 +21,7 @@ /obj/item/device/electropack/Initialize() . = ..() - SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + SSradio.add_object(src, frequency, RADIO_SIGNALER) /obj/item/device/electropack/Destroy() SSradio.remove_object(src, frequency) @@ -67,7 +67,7 @@ if(href_list["freq"]) SSradio.remove_object(src, frequency) frequency = sanitize_frequency(frequency + text2num(href_list["freq"])) - SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + SSradio.add_object(src, frequency, RADIO_SIGNALER) else if(href_list["code"]) code += text2num(href_list["code"]) @@ -98,7 +98,7 @@ return /obj/item/device/electropack/receive_signal(datum/signal/signal) - if(!signal || signal.encryption != code) + if(!signal || signal.data["code"] != code) return if(isliving(loc) && on) @@ -144,80 +144,3 @@ Code: user << browse(dat, "window=radio") onclose(user, "radio") return - -/obj/item/device/electropack/shockcollar - name = "shock collar" - desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.." - icon = 'icons/obj/clothing/neck.dmi' - icon_state = "shockcollar" - item_state = "shockcollar" - body_parts_covered = NECK - slot_flags = SLOT_NECK - w_class = WEIGHT_CLASS_SMALL - strip_delay = 60 - equip_delay_other = 60 - materials = list(MAT_METAL=5000, MAT_GLASS=2000) - var/tagname = null - -/obj/item/device/electropack/shockcollar/attack_hand(mob/user) - if(loc == user) - if(slot_flags == SLOT_NECK) - if(user.get_item_by_slot(slot_neck)) - to_chat(user, "The collar is fastened tight! You'll need help taking this off!") - return - ..() - -/obj/item/device/electropack/shockcollar/receive_signal(datum/signal/signal) - if(!signal || signal.encryption != code) - return - - if(isliving(loc) && on) - if(shock_cooldown != 0) - return - shock_cooldown = 1 - spawn(100) - shock_cooldown = 0 - var/mob/living/L = loc - step(L, pick(GLOB.cardinals)) - - to_chat(L, "You feel a sharp shock from the collar!") - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, L) - s.start() - - L.Knockdown(100) - - if(master) - master.receive_signal() - return - -/obj/item/device/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle.. - var/option = "Change Name" - option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency") - switch(option) - if("Change Name") - var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text - if(t) - tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) - name = "[initial(name)] - [tagname]" - if("Change Frequency") - if(!ishuman(user)) - return - user.set_machine(src) - var/dat = {"
    - Frequency/Code for shock collar:
    - Frequency: - - - - [format_frequency(frequency)] - + - +
    - Code: - - - - [code] - + - +
    -
    "} - - user << browse(dat, "window=radio") - onclose(user, "radio") - return diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 028c6ba27f..2d3d869676 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -4,8 +4,8 @@ icon = 'icons/obj/radio.dmi' icon_state = "cypherkey" w_class = WEIGHT_CLASS_TINY - var/translate_binary = 0 - var/syndie = 0 + var/translate_binary = FALSE + var/syndie = FALSE var/independent = FALSE var/list/channels = list() @@ -20,7 +20,7 @@ name = "binary translator key" desc = "An encryption key for a radio headset. To access the binary channel, use :b." icon_state = "bin_cypherkey" - translate_binary = 1 + translate_binary = TRUE /obj/item/device/encryptionkey/headset_sec name = "security radio encryption key" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index 750e1f0511..13846a84fd 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -4,7 +4,7 @@ icon_state = "headset" item_state = "headset" materials = list(MAT_METAL=75) - subspace_transmission = 1 + subspace_transmission = TRUE canhear_range = 0 // can't hear headsets from very far away slot_flags = SLOT_EARS @@ -22,10 +22,7 @@ recalculateChannels() /obj/item/device/radio/headset/Destroy() - qdel(keyslot) - qdel(keyslot2) - keyslot = null - keyslot2 = null + QDEL_NULL(keyslot2) return ..() /obj/item/device/radio/headset/talk_into(mob/living/M, message, channel, list/spans,datum/language/language) @@ -33,14 +30,14 @@ return ITALICS | REDUCE_RANGE return ..() -/obj/item/device/radio/headset/receive_range(freq, level, AIuser) +/obj/item/device/radio/headset/can_receive(freq, level, AIuser) if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc if(H.ears == src) return ..(freq, level) else if(AIuser) return ..(freq, level) - return -1 + return FALSE /obj/item/device/radio/headset/syndicate //disguised to look like a normal headset for stealth ops @@ -209,32 +206,24 @@ keyslot2 = new /obj/item/device/encryptionkey/ai command = TRUE -/obj/item/device/radio/headset/ai/receive_range(freq, level) - return ..(freq, level, 1) +/obj/item/device/radio/headset/ai/can_receive(freq, level) + return ..(freq, level, TRUE) /obj/item/device/radio/headset/attackby(obj/item/W, mob/user, params) user.set_machine(src) if(istype(W, /obj/item/screwdriver)) if(keyslot || keyslot2) - - for(var/ch_name in channels) SSradio.remove_object(src, GLOB.radiochannels[ch_name]) secure_radio_connections[ch_name] = null - - if(keyslot) - var/turf/T = get_turf(user) - if(T) + var/turf/T = user.drop_location() + if(T) + if(keyslot) keyslot.forceMove(T) keyslot = null - - - - if(keyslot2) - var/turf/T = get_turf(user) - if(T) + if(keyslot2) keyslot2.forceMove(T) keyslot2 = null @@ -244,7 +233,7 @@ else to_chat(user, "This headset doesn't have any unique encryption keys! How useless...") - else if(istype(W, /obj/item/device/encryptionkey/)) + else if(istype(W, /obj/item/device/encryptionkey)) if(keyslot && keyslot2) to_chat(user, "The headset can't hold another key!") return @@ -269,26 +258,19 @@ ..() if(keyslot2) for(var/ch_name in keyslot2.channels) - if(ch_name in src.channels) - continue - src.channels += ch_name - src.channels[ch_name] = keyslot2.channels[ch_name] + if(!(ch_name in src.channels)) + channels[ch_name] = keyslot2.channels[ch_name] if(keyslot2.translate_binary) - src.translate_binary = 1 - + translate_binary = TRUE if(keyslot2.syndie) - src.syndie = 1 - + syndie = TRUE if (keyslot2.independent) independent = TRUE - for(var/ch_name in channels) secure_radio_connections[ch_name] = add_radio(src, GLOB.radiochannels[ch_name]) - return - /obj/item/device/radio/headset/AltClick(mob/living/user) if(!istype(user) || !Adjacent(user) || user.incapacitated()) return diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 3e9ce8c341..77d1795b6b 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -101,25 +101,27 @@ ..() ui_interact(user, state = GLOB.default_state) -/obj/item/device/radio/intercom/receive_range(freq, level) +/obj/item/device/radio/intercom/can_receive(freq, level) if(!on) - return -1 + return FALSE if(wires.is_cut(WIRE_RX)) - return -1 + return FALSE if(!(0 in level)) var/turf/position = get_turf(src) if(isnull(position) || !(position.z in level)) - return -1 + return FALSE if(!src.listening) - return -1 - if(freq == GLOB.SYND_FREQ) + return FALSE + if(freq == FREQ_SYNDICATE) if(!(src.syndie)) - return -1//Prevents broadcast of messages over devices lacking the encryption + return FALSE//Prevents broadcast of messages over devices lacking the encryption - return canhear_range + return TRUE /obj/item/device/radio/intercom/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans, message_mode) + if (message_mode == MODE_INTERCOM) + return // Avoid hearing the same thing twice if(!anyai && !(speaker in ai)) return ..() @@ -139,8 +141,8 @@ else icon_state = initial(icon_state) -/obj/item/device/radio/intercom/add_blood(list/blood_dna) - return 0 +/obj/item/device/radio/intercom/add_blood_DNA(list/blood_dna) + return FALSE //Created through the autolathe or through deconstructing intercoms. Can be applied to wall to make a new intercom on it! /obj/item/wallframe/intercom diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 8227d75069..98af604812 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,32 +1,11 @@ /obj/item/device/radio icon = 'icons/obj/radio.dmi' name = "station bounced radio" - suffix = "\[3\]" icon_state = "walkietalkie" item_state = "walkietalkie" desc = "A basic handheld radio that communicates with local telecommunication networks." dog_fashion = /datum/dog_fashion/back - var/on = TRUE // 0 for off - var/last_transmission - var/frequency = 1459 //common chat - var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies - var/canhear_range = 3 // the range which mobs can hear this radio from - var/list/secure_radio_connections - var/prison_radio = 0 - var/b_stat = 0 - var/broadcasting = 0 - var/listening = 1 - var/translate_binary = 0 - var/freerange = 0 // 0 - Sanitize frequencies, 1 - Full range - var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h - var/obj/item/device/encryptionkey/keyslot //To allow the radio to accept encryption keys. - var/subspace_switchable = 0 - var/subspace_transmission = 0 - var/syndie = 0//Holder to see if it's a syndicate encrpyed radio - var/independent = FALSE // If true, bypasses any tcomms machinery. - var/freqlock = 0 //Frequency lock to stop the user from untuning specialist radios. - var/emped = 0 //Highjacked to track the number of consecutive EMPs on the radio, allowing consecutive EMP's to stack properly. -// "Example" = FREQ_LISTENING|FREQ_BROADCASTING + flags_1 = CONDUCT_1 | HEAR_1 flags_2 = NO_EMP_WIRES_2 slot_flags = SLOT_BELT @@ -35,12 +14,33 @@ w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=75, MAT_GLASS=25) - var/const/TRANSMISSION_DELAY = 5 // only 2/second/radio - var/const/FREQ_LISTENING = 1 - //FREQ_BROADCASTING = 2 + var/on = TRUE + var/frequency = FREQ_COMMON + var/traitor_frequency = 0 // If tuned to this frequency, uplink will be unlocked. + var/canhear_range = 3 // The range around the radio in which mobs can hear what it receives. + var/emped = 0 // Tracks the number of EMPs currently stacked. - var/command = FALSE //If we are speaking into a command headset, our text can be BOLD - var/use_command = FALSE + var/broadcasting = FALSE // Whether the radio will transmit dialogue it hears nearby. + var/listening = TRUE // 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. + var/subspace_transmission = FALSE // If true, the radio transmits and receives on subspace exclusively. + var/subspace_switchable = FALSE // If true, subspace_transmission can be toggled at will. + var/freqlock = FALSE // Frequency lock to stop the user from untuning specialist radios. + var/use_command = FALSE // If true, broadcasts will be large and BOLD. + var/command = FALSE // If true, use_command can be toggled at will. + + // Encryption key handling + var/obj/item/device/encryptionkey/keyslot + var/translate_binary = FALSE // If true, can hear the special binary channel. + var/independent = FALSE // If true, can say/hear on the special CentCom channel. + var/syndie = FALSE // If true, hears all well-known channels automatically, and can say/hear on the Syndicate channel. + var/list/channels = list() // Map from name (see communications.dm) to on/off. First entry is current department (:h). + var/list/secure_radio_connections + + var/const/FREQ_LISTENING = 1 + //FREQ_BROADCASTING = 2 /obj/item/device/radio/proc/set_frequency(new_frequency) remove_radio(src, frequency) @@ -48,23 +48,19 @@ /obj/item/device/radio/proc/recalculateChannels() channels = list() - translate_binary = 0 - syndie = 0 + translate_binary = FALSE + syndie = FALSE independent = FALSE if(keyslot) for(var/ch_name in keyslot.channels) - if(ch_name in src.channels) - continue - channels += ch_name - channels[ch_name] = keyslot.channels[ch_name] + if(!(ch_name in channels)) + channels[ch_name] = keyslot.channels[ch_name] if(keyslot.translate_binary) - translate_binary = 1 - + translate_binary = TRUE if(keyslot.syndie) - syndie = 1 - + syndie = TRUE if(keyslot.independent) independent = TRUE @@ -78,10 +74,9 @@ recalculateChannels() /obj/item/device/radio/Destroy() - qdel(wires) - wires = null remove_radio_all(src) //Just to be sure - keyslot = null + QDEL_NULL(wires) + QDEL_NULL(keyslot) return ..() /obj/item/device/radio/Initialize() @@ -99,7 +94,7 @@ /obj/item/device/radio/interact(mob/user) if (..()) return - if(b_stat && !isAI(user)) + if(unscrewed && !isAI(user)) wires.interact(user) else ui_interact(user) @@ -192,41 +187,33 @@ spans = M.get_spans() if(!language) language = M.get_default_language() - INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans, language) + INVOKE_ASYNC(src, .proc/talk_into_impl, M, message, channel, spans.Copy(), language) return ITALICS | REDUCE_RANGE /obj/item/device/radio/proc/talk_into_impl(atom/movable/M, message, channel, list/spans, datum/language/language) if(!on) return // the device has to be on - // Fix for permacell radios, but kinda eh about actually fixing them. if(!M || !message) return - - if(wires.is_cut(WIRE_TX)) + if(wires.is_cut(WIRE_TX)) // Permacell and otherwise tampered-with radios return - if(!M.IsVocal()) return if(use_command) spans |= SPAN_COMMAND - /* Quick introduction: - This new radio system uses a very robust FTL signaling technology unoriginally - dubbed "subspace" which is somewhat similar to 'blue-space' but can't - actually transmit large mass. Headsets are the only radio devices capable - of sending subspace transmissions to the Communications Satellite. - - A headset sends a signal to a subspace listener/reciever elsewhere in space, - the signal gets processed and logged, and an audible transmission gets sent - to each individual headset. - */ - /* - be prepared to disregard any comments in all of tcomms code. i tried my best to keep them somewhat up-to-date, but eh + Roughly speaking, radios attempt to make a subspace transmittion (which + is received, processed, and rebroadcast by the telecomms satellite) and + if that fails, they send a mundane radio transmission. + + Headsets cannot send/receive mundane transmissions, only subspace. + Syndicate radios can hear transmissions on all well-known frequencies. + CentCom radios can hear the CentCom frequency no matter what. */ - //get the frequency you buttface. radios no longer use the SSradio. confusing for future generations, convenient for me. + // From the channel, determine the frequency and get a reference to it. var/freq if(channel && channels && channels.len > 0) if(channel == "department") @@ -238,271 +225,95 @@ freq = frequency channel = null - var/freqnum = text2num(freq) //Why should we call text2num three times when we can just do it here? + // Nearby active jammers severely gibberish the message var/turf/position = get_turf(src) - - var/jammed = FALSE for(var/obj/item/device/jammer/jammer in GLOB.active_jammers) if(get_dist(position,get_turf(jammer)) < jammer.range) - jammed = TRUE + message = Gibberish(message,100) break - //#### Tagging the signal with all appropriate identity values ####// + // Determine the identity information which will be attached to the signal. + var/atom/movable/virtualspeaker/speaker = new(null, M, src) - // ||-- The mob's name identity --|| - var/real_name = M.name // mob's real name - var/mobkey = "none" // player key associated with mob - var/voicemask = 0 // the speaker is wearing a voice mask - var/voice = M.GetVoice() // Why reinvent the wheel when there is a proc that does nice things already - if(ismob(M)) - var/mob/speaker = M - real_name = speaker.real_name - if(speaker.client) - mobkey = speaker.key // assign the mob's key + // Construct the signal + var/datum/signal/subspace/vocal/signal = new(src, freq, speaker, language, message, spans) - - var/jobname // the mob's "job" - - if(jammed) - message = Gibberish(message,100) - - // --- Human: use their job as seen on the crew manifest - makes it unneeded to carry an ID for an AI to see their job - if(ishuman(M)) - var/datum/data/record/findjob = find_record("name", voice, GLOB.data_core.general) - - if(voice != real_name) - voicemask = 1 - if(findjob) - jobname = findjob.fields["rank"] - else - jobname = "Unknown" - - // --- Carbon Nonhuman --- - else if(iscarbon(M)) // Nonhuman carbon mob - jobname = "No id" - - // --- AI --- - else if(isAI(M)) - jobname = "AI" - - // --- Cyborg --- - else if(iscyborg(M)) - var/mob/living/silicon/robot/B = M - jobname = "[B.designation] Cyborg" - - // --- Personal AI (pAI) --- - else if(istype(M, /mob/living/silicon/pai)) - jobname = "Personal AI" - - // --- Cold, emotionless machines. --- - else if(isobj(M)) - jobname = "Machine" - - // --- Unidentifiable mob --- - else - jobname = "Unknown" - - /* ###### `independent` radios bypass all comms relays. ###### */ - - if(independent) - var/datum/signal/signal = new - signal.transmission_method = 2 - signal.data = list( - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mas - - "compression" = 0, // uncompressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, - "traffic" = 0, - "type" = 0, - "server" = null, - "reject" = 0, - "level" = 0, - "language" = language, - "spans" = spans, - "verb_say" = M.verb_say, - "verb_ask" = M.verb_ask, - "verb_exclaim" = M.verb_exclaim, - "verb_yell" = M.verb_yell, - ) - signal.frequency = freqnum // Quick frequency set - Broadcast_Message(M, voicemask, - src, message, voice, jobname, real_name, - 5, signal.data["compression"], list(position.z, 0), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell, language) + // Independent radios, on the CentCom frequency, reach all independent radios + if (independent && (freq == FREQ_CENTCOM || freq == FREQ_CTF_RED || freq == FREQ_CTF_BLUE)) + signal.data["compression"] = 0 + signal.transmission_method = TRANSMISSION_SUPERSPACE + signal.levels = list(0) // reaches all Z-levels + signal.broadcast() return - /* ###### Radio headsets can only broadcast through subspace ###### */ + // All radios make an attempt to use the subspace system first + signal.send_to_receivers() - if(subspace_transmission) - // First, we want to generate a new radio signal - var/datum/signal/signal = new - signal.transmission_method = 2 // 2 would be a subspace transmission. - // transmission_method could probably be enumerated through #define. Would be neater. - // --- Finally, tag the actual signal with the appropriate values --- - signal.data = list( - // Identity-associated tags: - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mask - - // We store things that would otherwise be kept in the actual mob - // so that they can be logged even AFTER the mob is deleted or something - - // Other tags: - "compression" = rand(35,65), // compressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, // how much to sleep() before broadcasting - simulates net lag - "traffic" = 0, // dictates the total traffic sum that the signal went through - "type" = 0, // determines what type of radio input it is: normal broadcast - "server" = null, // the last server to log this signal - "reject" = 0, // if nonzero, the signal will not be accepted by any broadcasting machinery - "level" = position.z, // The source's z level - "language" = language, - "spans" = spans, //the span classes of this message. - "verb_say" = M.verb_say, //the verb used when talking normally - "verb_ask" = M.verb_ask, //the verb used when asking - "verb_exclaim" = M.verb_exclaim, //the verb used when exclaiming - "verb_yell" = M.verb_yell //the verb used when yelling - ) - signal.frequency = freq - - //#### Sending the signal to all subspace receivers ####// - - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. - for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) - R.receive_signal(signal) - - // Receiving code can be located in Telecommunications.dm + // If the radio is subspace-only, that's all it can do + if (subspace_transmission) return + // Non-subspace radios will check in a couple of seconds, and if the signal + // was never received, send a mundane broadcast (no headsets). + addtimer(CALLBACK(src, .proc/backup_transmission, signal), 20) - /* ###### Intercoms and station-bounced radios ###### */ +/obj/item/device/radio/proc/backup_transmission(datum/signal/subspace/vocal/signal) + var/turf/T = get_turf(src) + if (signal.data["done"] && (T.z in signal.levels)) + return - var/filter_type = 2 - - var/datum/signal/signal = new - signal.transmission_method = 2 - - - /* --- Try to send a normal subspace broadcast first */ - - signal.data = list( - "mob" = M, // store a reference to the mob - "mobtype" = M.type, // the mob's type - "realname" = real_name, // the mob's real name - "name" = voice, // the mob's voice name - "job" = jobname, // the mob's job - "key" = mobkey, // the mob's key - "vmask" = voicemask, // 1 if the mob is using a voice gas mas - - "compression" = 0, // uncompressed radio signal - "message" = message, // the actual sent message - "radio" = src, // stores the radio used for transmission - "slow" = 0, - "traffic" = 0, - "type" = 0, - "server" = null, - "reject" = 0, - "level" = position.z, - "language" = language, - "spans" = spans, - "verb_say" = M.verb_say, - "verb_ask" = M.verb_ask, - "verb_exclaim" = M.verb_exclaim, - "verb_yell" = M.verb_yell - ) - signal.frequency = freqnum // Quick frequency set - for(var/obj/machinery/telecomms/receiver/R in GLOB.telecomms_list) - R.receive_signal(signal) - - // Allinone can act as receivers. (Unless of course whoever coded this last time forgot to put it in somewhere!) - for(var/obj/machinery/telecomms/allinone/R in GLOB.telecomms_list) - R.receive_signal(signal) - - spawn(20) // wait a little... - - if(signal.data["done"] && position.z in signal.data["level"]) - // we're done here. - return - - // Oh my god; the comms are down or something because the signal hasn't been broadcasted yet in our level. - // Send a mundane broadcast with limited targets: - Broadcast_Message(M, voicemask, - src, message, voice, jobname, real_name, - filter_type, signal.data["compression"], list(position.z), freq, spans, - verb_say, verb_ask, verb_exclaim, verb_yell, language) + // Okay, the signal was never processed, send a mundane broadcast. + signal.data["compression"] = 0 + signal.transmission_method = TRANSMISSION_RADIO + signal.levels = list(T.z) + signal.broadcast() /obj/item/device/radio/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - if(radio_freq) + if(radio_freq || !broadcasting || get_dist(src, speaker) > canhear_range) return - if(broadcasting) - if(get_dist(src, speaker) <= canhear_range) - if(message_mode == MODE_WHISPER || message_mode == MODE_WHISPER_CRIT) - raw_message = stars(raw_message) - talk_into(speaker, raw_message, , spans, language=message_language) -/obj/item/device/radio/proc/receive_range(freq, level) - // check if this radio can receive on the given frequency, and if so, - // what the range is in which mobs will hear the radio - // returns: -1 if can't receive, range otherwise + if(message_mode == MODE_WHISPER || message_mode == MODE_WHISPER_CRIT) + // radios don't pick up whispers very well + raw_message = stars(raw_message) + else if(message_mode == MODE_L_HAND || message_mode == MODE_R_HAND) + // try to avoid being heard double + if (loc == speaker && ismob(speaker)) + var/mob/M = speaker + var/idx = M.get_held_index_of_item(src) + // left hands are odd slots + if (idx && (idx % 2) == (message_mode == MODE_L_HAND)) + return - if (wires.is_cut(WIRE_RX)) - return -1 - if(!listening) - return -1 - if(!(0 in level)) + talk_into(speaker, raw_message, , spans, language=message_language) + +// Checks if this radio can receive on the given frequency. +/obj/item/device/radio/proc/can_receive(freq, level) + // deny checks + if (!on || !listening || wires.is_cut(WIRE_RX)) + return FALSE + if (freq == FREQ_SYNDICATE && !syndie) + return FALSE + if (freq == FREQ_CENTCOM) + return independent // hard-ignores the z-level check + if (!(0 in level)) var/turf/position = get_turf(src) if(!position || !(position.z in level)) - return -1 - if(freq == GLOB.SYND_FREQ) - if(!(src.syndie)) //Checks to see if it's allowed on that frequency, based on the encryption keys - return -1 - if(freq == GLOB.CENTCOM_FREQ) - if(!independent) - return -1 - if (!on) - return -1 - if (!freq) //received on main frequency - if (!listening) - return -1 - else - var/accept = (freq==frequency && listening) - if (!accept) - for(var/ch_name in channels) - if(channels[ch_name] & FREQ_LISTENING) - if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) //the GLOB.radiochannels list is located in communications.dm - accept = 1 - break - if (!accept) - return -1 - return canhear_range + return FALSE -/obj/item/device/radio/proc/send_hear(freq, level) - - var/range = receive_range(freq, level) - if(range > -1) - return get_hearers_in_view(canhear_range, src) + // allow checks: are we listening on that frequency? + if (freq == frequency) + return TRUE + for(var/ch_name in channels) + if(channels[ch_name] & FREQ_LISTENING) + //the GLOB.radiochannels list is located in communications.dm + if(GLOB.radiochannels[ch_name] == text2num(freq) || syndie) + return TRUE + return FALSE /obj/item/device/radio/examine(mob/user) ..() - if (b_stat) + if (unscrewed) to_chat(user, "It can be attached and modified.") else to_chat(user, "It cannot be modified or attached.") @@ -510,8 +321,8 @@ /obj/item/device/radio/attackby(obj/item/W, mob/user, params) add_fingerprint(user) if(istype(W, /obj/item/screwdriver)) - b_stat = !b_stat - if(b_stat) + unscrewed = !unscrewed + if(unscrewed) to_chat(user, "The radio can now be attached and modified!") else to_chat(user, "The radio can no longer be modified or attached!") @@ -523,8 +334,8 @@ var/curremp = emped //Remember which EMP this was if (listening && ismob(loc)) // if the radio is turned on and on someone's person they notice to_chat(loc, "\The [src] overloads.") - broadcasting = 0 - listening = 0 + broadcasting = FALSE + listening = FALSE for (var/ch_name in channels) channels[ch_name] = 0 on = FALSE @@ -542,7 +353,7 @@ /obj/item/device/radio/borg name = "cyborg radio" - subspace_switchable = 1 + subspace_switchable = TRUE dog_fashion = null flags_2 = NO_EMP_WIRES_2 @@ -555,7 +366,7 @@ /obj/item/device/radio/borg/syndicate/Initialize() . = ..() - set_frequency(GLOB.SYND_FREQ) + set_frequency(FREQ_SYNDICATE) /obj/item/device/radio/borg/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 9a60bb0edb..48396c2ffd 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -85,7 +85,7 @@ GAS ANALYZER /obj/item/device/healthanalyzer/attack(mob/living/M, mob/living/carbon/human/user) // Clumsiness/brain damage check - if ((user.disabilities & (CLUMSY | DUMB)) && prob(50)) + if ((user.has_disability(DISABILITY_CLUMSY) || user.has_disability(DISABILITY_DUMB)) && prob(50)) to_chat(user, "You stupidly try to analyze the floor's vitals!") user.visible_message("[user] has analyzed the floor's vitals!") to_chat(user, "Analyzing results for The floor:\n\tOverall status: Healthy") @@ -126,11 +126,6 @@ GAS ANALYZER if(H.undergoing_liver_failure() && H.stat != DEAD) to_chat(user, "Subject suffering from liver failure: apply corazone and begin a liver transplant immediately!") - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(C.has_brain_worms()) - to_chat(user, "Foreign organism detected in subject's cranium. Recommended treatment: Dosage of sucrose solution and removal of object via surgery.") - to_chat(user, "Analyzing results for [M]:\n\tOverall status: [mob_status]") // Damage descriptions @@ -181,9 +176,12 @@ GAS ANALYZER to_chat(user, "\t==EAR STATUS==") if(istype(ears)) var/healthy = TRUE - if(C.disabilities & DEAF) + if(C.has_disability(DISABILITY_DEAF, GENETIC_MUTATION)) healthy = FALSE to_chat(user, "\tSubject is genetically deaf.") + else if(C.has_disability(DISABILITY_DEAF)) + healthy = FALSE + to_chat(user, "\tSubject is deaf.") else if(ears.ear_damage) to_chat(user, "\tSubject has [ears.ear_damage > UNHEALING_EAR_DAMAGE? "permanent ": "temporary "]hearing damage.") @@ -199,10 +197,10 @@ GAS ANALYZER to_chat(user, "\t==EYE STATUS==") if(istype(eyes)) var/healthy = TRUE - if(C.disabilities & BLIND) + if(C.has_disability(DISABILITY_BLIND)) to_chat(user, "\tSubject is blind.") healthy = FALSE - if(C.disabilities & NEARSIGHT) + if(C.has_disability(DISABILITY_NEARSIGHT)) to_chat(user, "\tSubject is nearsighted.") healthy = FALSE if(eyes.eye_damage > 30) @@ -396,6 +394,7 @@ GAS ANALYZER to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %") to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C") + /obj/item/device/slime_scanner name = "slime scanner" desc = "A device that analyzes a slime's internal composition and measures its stats." diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 9644d827ea..f2741e4715 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -31,7 +31,7 @@ /obj/item/dnainjector/proc/inject(mob/living/carbon/M, mob/user) prepare() - if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.disabilities & NOCLONE)) + if(M.has_dna() && !(RADIMMUNE in M.dna.species.species_traits) && !(M.has_disability(DISABILITY_NOCLONE))) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" for(var/datum/mutation/human/HM in remove_mutations) @@ -313,7 +313,7 @@ to_chat(user, "You can't modify [M]'s DNA while [M.p_theyre()] dead.") return FALSE - if(M.has_dna() && !(M.disabilities & NOCLONE)) + if(M.has_dna() && !(M.has_disability(DISABILITY_NOCLONE))) M.radiation += rand(20/(damage_coeff ** 2),50/(damage_coeff ** 2)) var/log_msg = "[key_name(user)] injected [key_name(M)] with the [name]" var/endtime = world.time+duration diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm index 5f582b9e15..009bc211b4 100644 --- a/code/game/objects/items/extinguisher.dm +++ b/code/game/objects/items/extinguisher.dm @@ -1,4 +1,3 @@ - /obj/item/extinguisher name = "fire extinguisher" desc = "A traditional red fire extinguisher." diff --git a/code/game/objects/items/flamethrower.dm b/code/game/objects/items/flamethrower.dm index 3a351a6514..8cc6d6b179 100644 --- a/code/game/objects/items/flamethrower.dm +++ b/code/game/objects/items/flamethrower.dm @@ -233,7 +233,7 @@ /obj/item/flamethrower/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) var/obj/item/projectile/P = hitby if(damage && attack_type == PROJECTILE_ATTACK && P.damage_type != STAMINA && prob(15)) - owner.visible_message("[attack_text] hits the fueltank on [owner]'s [src], rupturing it! What a shot!") + owner.visible_message("\The [attack_text] hits the fueltank on [owner]'s [name], rupturing it! What a shot!") var/target_turf = get_turf(owner) igniter.ignite_turf(src,target_turf, release_amount = 100) qdel(ptank) diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 1e3e9ccd73..0fe53f293c 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -7,6 +7,9 @@ /* * Gifts */ + +GLOBAL_LIST_EMPTY(possible_gifts) + /obj/item/a_gift name = "gift" desc = "PRESENTS!!!! eek!" @@ -30,6 +33,14 @@ to_chat(M, "You're supposed to be spreading gifts, not opening them yourself!") return + var/gift_type = get_gift_type() + + qdel(src) + var/obj/item/I = new gift_type(M) + M.put_in_hands(I) + I.add_fingerprint(M) + +/obj/item/a_gift/proc/get_gift_type() var/gift_type_list = list(/obj/item/sord, /obj/item/storage/wallet, /obj/item/storage/photo_album, @@ -72,10 +83,21 @@ var/gift_type = pick(gift_type_list) - if(!ispath(gift_type, /obj/item)) - return + return gift_type - qdel(src) - var/obj/item/I = new gift_type(M) - M.put_in_hands(I) - I.add_fingerprint(M) + +/obj/item/a_gift/anything + name = "christmas gift" + desc = "It could be anything!" + +/obj/item/a_gift/anything/get_gift_type() + if(!GLOB.possible_gifts.len) + var/list/gift_types_list = subtypesof(/obj/item) + for(var/V in gift_types_list) + var/obj/item/I = V + if((!initial(I.icon_state)) || (!initial(I.item_state)) || (initial(I.flags_1) & ABSTRACT_1)) + gift_types_list -= V + GLOB.possible_gifts = gift_types_list + var/gift_type = pick(GLOB.possible_gifts) + + return gift_type diff --git a/code/game/objects/items/grenades/flashbang.dm b/code/game/objects/items/grenades/flashbang.dm index 8533d579c4..9b2cd0eb2b 100644 --- a/code/game/objects/items/grenades/flashbang.dm +++ b/code/game/objects/items/grenades/flashbang.dm @@ -13,10 +13,13 @@ for(var/mob/living/M in get_hearers_in_view(7, flashbang_turf)) bang(get_turf(M), M) + //START OF CIT CHANGES - makes flashbangs damage blobs for(var/obj/structure/blob/B in get_hear(8,flashbang_turf)) //Blob damage here var/distance = get_dist(B, get_turf(src)) var/damage = round(100/(distance*distance)+1) B.take_damage(damage, BURN, "energy") + //END OF CIT CHANGES + qdel(src) /obj/item/grenade/flashbang/proc/bang(turf/T , mob/living/M) diff --git a/code/game/objects/items/grenades/ghettobomb.dm b/code/game/objects/items/grenades/ghettobomb.dm index fadf9d34de..5b96b74f41 100644 --- a/code/game/objects/items/grenades/ghettobomb.dm +++ b/code/game/objects/items/grenades/ghettobomb.dm @@ -1,60 +1,60 @@ -//improvised explosives// - -/obj/item/grenade/iedcasing - name = "improvised firebomb" - desc = "A weak, improvised incendiary device." - w_class = WEIGHT_CLASS_SMALL - icon = 'icons/obj/grenade.dmi' - icon_state = "improvised_grenade" - item_state = "flashbang" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - throw_speed = 3 - throw_range = 7 - flags_1 = CONDUCT_1 - slot_flags = SLOT_BELT - active = 0 - det_time = 50 - display_timer = 0 - var/range = 3 - var/list/times - -/obj/item/grenade/iedcasing/Initialize() - . = ..() - add_overlay("improvised_grenade_filled") - add_overlay("improvised_grenade_wired") - times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] - det_time = text2num(pickweight(times)) - if(det_time < 0) //checking for 'duds' - range = 1 - det_time = rand(30,80) - else - range = pick(2,2,2,3,3,3,4) - -/obj/item/grenade/iedcasing/CheckParts(list/parts_list) - ..() - var/obj/item/reagent_containers/food/drinks/soda_cans/can = locate() in contents - if(can) - can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED - can.pixel_y = 0 - var/mutable_appearance/can_underlay = new(can) - can_underlay.layer = FLOAT_LAYER - can_underlay.plane = FLOAT_PLANE - underlays += can_underlay - - -/obj/item/grenade/iedcasing/attack_self(mob/user) // - if(!active) - if(clown_check(user)) - to_chat(user, "You light the [name]!") - cut_overlay("improvised_grenade_filled") +//improvised explosives// + +/obj/item/grenade/iedcasing + name = "improvised firebomb" + desc = "A weak, improvised incendiary device." + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/grenade.dmi' + icon_state = "improvised_grenade" + item_state = "flashbang" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + throw_speed = 3 + throw_range = 7 + flags_1 = CONDUCT_1 + slot_flags = SLOT_BELT + active = 0 + det_time = 50 + display_timer = 0 + var/range = 3 + var/list/times + +/obj/item/grenade/iedcasing/Initialize() + . = ..() + add_overlay("improvised_grenade_filled") + add_overlay("improvised_grenade_wired") + times = list("5" = 10, "-1" = 20, "[rand(30,80)]" = 50, "[rand(65,180)]" = 20)// "Premature, Dud, Short Fuse, Long Fuse"=[weighting value] + det_time = text2num(pickweight(times)) + if(det_time < 0) //checking for 'duds' + range = 1 + det_time = rand(30,80) + else + range = pick(2,2,2,3,3,3,4) + +/obj/item/grenade/iedcasing/CheckParts(list/parts_list) + ..() + var/obj/item/reagent_containers/food/drinks/soda_cans/can = locate() in contents + if(can) + can.pixel_x = 0 //Reset the sprite's position to make it consistent with the rest of the IED + can.pixel_y = 0 + var/mutable_appearance/can_underlay = new(can) + can_underlay.layer = FLOAT_LAYER + can_underlay.plane = FLOAT_PLANE + underlays += can_underlay + + +/obj/item/grenade/iedcasing/attack_self(mob/user) // + if(!active) + if(clown_check(user)) + to_chat(user, "You light the [name]!") + cut_overlay("improvised_grenade_filled") preprime(user, null, FALSE) - -/obj/item/grenade/iedcasing/prime() //Blowing that can up - update_mob() - explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. - qdel(src) - -/obj/item/grenade/iedcasing/examine(mob/user) - ..() - to_chat(user, "You can't tell when it will explode!") + +/obj/item/grenade/iedcasing/prime() //Blowing that can up + update_mob() + explosion(src.loc,-1,-1,2, flame_range = 4) // small explosion, plus a very large fireball. + qdel(src) + +/obj/item/grenade/iedcasing/examine(mob/user) + ..() + to_chat(user, "You can't tell when it will explode!") diff --git a/code/game/objects/items/grenades/grenade.dm b/code/game/objects/items/grenades/grenade.dm index e444ecce25..c19ce4620d 100644 --- a/code/game/objects/items/grenades/grenade.dm +++ b/code/game/objects/items/grenades/grenade.dm @@ -24,7 +24,7 @@ qdel(src) /obj/item/grenade/proc/clown_check(mob/living/carbon/human/user) - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "Huh? How does this thing work?") preprime(user, 5, FALSE) return FALSE diff --git a/code/game/objects/items/grenades/syndieminibomb.dm b/code/game/objects/items/grenades/syndieminibomb.dm index e1866a3e69..723c578a68 100644 --- a/code/game/objects/items/grenades/syndieminibomb.dm +++ b/code/game/objects/items/grenades/syndieminibomb.dm @@ -48,4 +48,4 @@ for(var/mob/living/carbon/L in T) L.adjustStaminaLoss(stamina_damage) L.bodytemperature -= 230 - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 886a248c8c..8c09e87b6a 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -1,6 +1,19 @@ /obj/item/restraints breakouttime = 600 +/obj/item/restraints/Destroy() + if(iscarbon(loc)) + var/mob/living/carbon/M = loc + if(M.handcuffed == src) + M.handcuffed = null + M.update_handcuffed() + if(M.buckled && M.buckled.buckle_requires_restraints) + M.buckled.unbuckle_mob(M) + if(M.legcuffed == src) + M.legcuffed = null + M.update_inv_legcuffed() + return ..() + //Handcuffs /obj/item/restraints/handcuffs @@ -26,7 +39,7 @@ /obj/item/restraints/handcuffs/attack(mob/living/carbon/C, mob/living/carbon/human/user) if(!istype(C)) return - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "Uh... how do those things work?!") apply_cuffs(user,user) return @@ -167,11 +180,6 @@ desc = "Fake handcuffs meant for gag purposes." breakouttime = 10 //Deciseconds = 1s -/obj/item/restraints/handcuffs/fake/kinky - name = "kinky handcuffs" - desc = "Fake handcuffs meant for erotic roleplay." - icon_state = "handcuffGag" - /obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user, params) ..() if(istype(I, /obj/item/stack/rods)) @@ -379,4 +387,3 @@ B.Crossed(hit_atom) qdel(src) ..() - diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index cde3f127ed..21e3f26cd7 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -9,8 +9,8 @@ throw_speed = 3 throw_range = 4 throwforce = 10 - unique_rename = TRUE w_class = WEIGHT_CLASS_TINY + unique_rename = TRUE var/reskinned = FALSE /obj/item/nullrod/suicide_act(mob/user) @@ -354,6 +354,11 @@ w_class = WEIGHT_CLASS_HUGE sharpness = IS_SHARP +/obj/item/nullrod/armblade/tentacle + name = "unholy blessing" + icon_state = "tentacle" + item_state = "tentacle" + /obj/item/nullrod/carp name = "carp-sie plushie" desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie." diff --git a/code/game/objects/items/implants/implant_misc.dm b/code/game/objects/items/implants/implant_misc.dm index 32e0d937bd..2141fba7e8 100644 --- a/code/game/objects/items/implants/implant_misc.dm +++ b/code/game/objects/items/implants/implant_misc.dm @@ -77,3 +77,40 @@ if (!healthstring) healthstring = "ERROR" return healthstring + +/obj/item/implant/radio + name = "internal radio implant" + desc = "Are you there God? It's me, Syndicate Comms Agent." + activated = TRUE + var/obj/item/device/radio/radio + var/radio_key = /obj/item/device/encryptionkey/syndicate + icon = 'icons/obj/radio.dmi' + icon_state = "walkietalkie" + +/obj/item/implant/radio/activate() + // needs to be GLOB.deep_inventory_state otherwise it won't open + radio.ui_interact(usr, "main", null, FALSE, null, GLOB.deep_inventory_state) + +/obj/item/implant/radio/Initialize(mapload) + . = ..() + + radio = new(src) + // almost like an internal headset, but without the + // "must be in ears to hear" restriction. + radio.name = "internal radio" + radio.subspace_transmission = TRUE + radio.canhear_range = 0 + radio.keyslot = new radio_key + radio.recalculateChannels() + + +/obj/item/implant/radio/get_data() + var/dat = {"Implant Specifications:
    + Name: Internal Radio Implant
    + Life: 24 hours
    + Implant Details: Allows user to use an internal radio, useful if user expects equipment loss, or cannot equip conventional radios."} + return dat + +/obj/item/implanter/radio + name = "implanter (internal radio)" + imp_type = /obj/item/implant/radio diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 5a8fcda09b..b23ac46823 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -44,7 +44,7 @@ forkload = null else if(user.zone_selected == "eyes") - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) M = user return eyestab(M,user) else @@ -70,7 +70,7 @@ /obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user) if(user.zone_selected == "eyes") - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) M = user return eyestab(M,user) else diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 6eaf3f08bd..146bcbb3c3 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -20,8 +20,8 @@ user.visible_message("[user] is [pick("slitting [user.p_their()] stomach open with", "falling on")] [src]! It looks like [user.p_theyre()] trying to commit seppuku!") return (BRUTELOSS|FIRELOSS) -/obj/item/melee/transforming/energy/add_blood(list/blood_dna) - return 0 +/obj/item/melee/transforming/energy/add_blood_DNA(list/blood_dna) + return FALSE /obj/item/melee/transforming/energy/is_sharp() return active * sharpness diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 6e21251b6e..3f1b5cd54e 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -99,7 +99,7 @@ return ..() add_fingerprint(user) - if((CLUMSY in user.disabilities) && prob(50)) + if((user.has_disability(DISABILITY_CLUMSY)) && prob(50)) to_chat(user, "You club yourself over the head.") user.Knockdown(60 * force) if(ishuman(user)) @@ -275,17 +275,18 @@ consume_turf(target) /obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - if(istype(T, T.baseturf)) - return //Can't void the void, baby! + var/oldtype = T.type + var/turf/newT = T.ScrapeAway() + if(newT.type == oldtype) + return playsound(T, 'sound/effects/supermatter.ogg', 50, 1) T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ "You hear a loud crack as you are washed with a wave of heat.") shard.Consume() - T.ChangeTurf(T.baseturf) T.CalculateAdjacentTurfs() -/obj/item/melee/supermatter_sword/add_blood(list/blood_dna) - return 0 +/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) + return FALSE /obj/item/melee/curator_whip name = "curator's whip" diff --git a/code/game/objects/items/melee/transforming.dm b/code/game/objects/items/melee/transforming.dm index b63c5bcefa..ca0c36f97e 100644 --- a/code/game/objects/items/melee/transforming.dm +++ b/code/game/objects/items/melee/transforming.dm @@ -72,6 +72,6 @@ to_chat(user, "[src] [active ? "is now active":"can now be concealed"].") /obj/item/melee/transforming/proc/clumsy_transform_effect(mob/living/user) - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") user.take_bodypart_damage(5,5) diff --git a/code/game/objects/items/mop.dm b/code/game/objects/items/mop.dm index e47cafdea9..19e8560d4d 100644 --- a/code/game/objects/items/mop.dm +++ b/code/game/objects/items/mop.dm @@ -3,6 +3,8 @@ name = "mop" icon = 'icons/obj/janitor.dmi' icon_state = "mop" + lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' force = 3 throwforce = 5 throw_speed = 3 @@ -23,7 +25,6 @@ /obj/item/mop/proc/clean(turf/A) if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1)) - A.clean_blood() A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) for(var/obj/effect/O in A) if(is_cleanable(O)) diff --git a/code/game/objects/items/paiwire.dm b/code/game/objects/items/paiwire.dm index a20f89bc2b..994082c5fa 100644 --- a/code/game/objects/items/paiwire.dm +++ b/code/game/objects/items/paiwire.dm @@ -10,4 +10,4 @@ if(!user.transferItemToLoc(src, M)) return user.visible_message("[user] inserts [src] into a data port on [M].", "You insert [src] into a data port on [M].", "You hear the satisfying click of a wire jack fastening into place.") - machine = M + machine = M \ No newline at end of file diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index d291a7ca7d..a6d0d285bf 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -54,6 +54,7 @@ return if(!target) add_overlay("pinon[alert ? "alert" : ""]null") + return var/turf/here = get_turf(src) var/turf/there = get_turf(target) if(here.z != there.z) @@ -110,7 +111,8 @@ var/crewmember_name = "Unknown" if(H.wear_id) var/obj/item/card/id/I = H.wear_id.GetID() - crewmember_name = I.registered_name + if(I && I.registered_name) + crewmember_name = I.registered_name while(crewmember_name in name_counts) name_counts[crewmember_name]++ diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index 8bd5d570e2..649293a7de 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -504,4 +504,4 @@ item_state = "plushie_slime" attack_verb = list("blorbled", "slimed", "absorbed") squeak_override = list('sound/effects/blobattack.ogg' = 1) - gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy + gender = FEMALE //given all the jokes and drawings, I'm not sure the xenobiologists would make a slimeboy \ No newline at end of file diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 8baeee3550..8d32f95e8f 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -125,14 +125,14 @@ loadedWeightClass += I.w_class return TRUE -/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/carbon/human/user, flag, params) +/obj/item/pneumatic_cannon/afterattack(atom/target, mob/living/user, flag, params) if(flag && user.a_intent == INTENT_HARM) //melee attack return if(!istype(user)) return Fire(user, target) -/obj/item/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, var/atom/target) +/obj/item/pneumatic_cannon/proc/Fire(mob/living/user, var/atom/target) if(!istype(user) && !target) return var/discharge = 0 @@ -147,9 +147,10 @@ if(tank && !tank.air_contents.remove(gasPerThrow * pressureSetting)) to_chat(user, "\The [src] lets out a weak hiss and doesn't react!") return - if(user.disabilities & CLUMSY && prob(75) && clumsyCheck) - user.visible_message("[user] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") - user.dropItemToGround(src, TRUE) + if(user.has_disability(DISABILITY_CLUMSY) && prob(75) && clumsyCheck && iscarbon(user)) + var/mob/living/carbon/C = user + C.visible_message("[C] loses their grip on [src], causing it to go off!", "[src] slips out of your hands and goes off!") + C.dropItemToGround(src, TRUE) if(prob(10)) target = get_turf(user) else @@ -163,9 +164,10 @@ var/turf/T = get_target(target, get_turf(src)) playsound(src.loc, 'sound/weapons/sonic_jackhammer.ogg', 50, 1) fire_items(T, user) - if(pressureSetting >= 3 && user) - user.visible_message("[user] is thrown down by the force of the cannon!", "[src] slams into your shoulder, knocking you down!") - user.Knockdown(60) + if(pressureSetting >= 3 && iscarbon(user)) + var/mob/living/carbon/C = user + C.visible_message("[C] is thrown down by the force of the cannon!", "[src] slams into your shoulder, knocking you down!") + C.Knockdown(60) /obj/item/pneumatic_cannon/proc/fire_items(turf/target, mob/user) if(fire_mode == PCANNON_FIREALL) @@ -271,3 +273,10 @@ selfcharge = TRUE charge_type = /obj/item/reagent_containers/food/snacks/pie/cream maxWeightClass = 60 //20 pies. + +/obj/item/pneumatic_cannon/pie/selfcharge/cyborg + name = "low velocity pie cannon" + automatic = FALSE + charge_type = /obj/item/reagent_containers/food/snacks/pie/cream/nostun + maxWeightClass = 6 //2 pies + charge_ticks = 2 //4 second/pie diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index d2f1d2a31b..aae0937bb7 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -355,6 +355,9 @@ var/hitdamage = 0 var/emaggedhitdamage = 3 +/obj/item/borg/lollipop/clown + emaggedhitdamage = 0 + /obj/item/borg/lollipop/equipped() check_amount() @@ -724,4 +727,4 @@ /obj/item/borg/sight/hud/sec/New() ..() hud = new /obj/item/clothing/glasses/hud/security(src) - return \ No newline at end of file + return diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 57306f498c..e2493ff613 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -78,7 +78,7 @@ return (active) /obj/item/shield/energy/attack_self(mob/living/carbon/human/user) - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "You beat yourself in the head with [src].") user.take_bodypart_damage(5) active = !active diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 586d21555c..c0500f5d21 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -21,7 +21,7 @@ cut_overlays() /obj/item/target/Move() - ..() + . = ..() if(pinnedLoc) pinnedLoc.forceMove(loc) diff --git a/code/game/objects/items/signs.dm b/code/game/objects/items/signs.dm index 350daa0fc3..65716f2f30 100644 --- a/code/game/objects/items/signs.dm +++ b/code/game/objects/items/signs.dm @@ -10,13 +10,23 @@ var/label = "" var/last_wave = 0 +/obj/item/picket_sign/cyborg + name = "metallic nano-sign" + desc = "A high tech picket sign used by silicons that can reprogram its surface at will. Probably hurts to get hit by, too." + force = 13 + resistance_flags = NONE + actions_types = list(/datum/action/item_action/nano_picket_sign) + +/obj/item/picket_sign/proc/retext(mob/user) + var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30) + if(txt && Adjacent(user)) + label = txt + name = "[label] sign" + desc = "It reads: [label]" + /obj/item/picket_sign/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen) || istype(W, /obj/item/toy/crayon)) - var/txt = stripped_input(user, "What would you like to write on the sign?", "Sign Label", null , 30) - if(txt) - label = txt - src.name = "[label] sign" - desc = "It reads: [label]" + retext(user) else return ..() diff --git a/code/game/objects/items/stacks/bscrystal.dm b/code/game/objects/items/stacks/bscrystal.dm index 978966706e..b7df34ca08 100644 --- a/code/game/objects/items/stacks/bscrystal.dm +++ b/code/game/objects/items/stacks/bscrystal.dm @@ -9,7 +9,7 @@ points = 50 var/blink_range = 8 // The teleport range when crushed/thrown at someone. refined_type = /obj/item/stack/sheet/bluespace_crystal - grind_results = list("bluespace" = 2) + grind_results = list("bluespace" = 20) /obj/item/ore/bluespace_crystal/refined name = "refined bluespace crystal" @@ -49,7 +49,7 @@ blink_range = 4 // Not as good as the organic stuff! points = 0 //nice try refined_type = null - grind_results = list("bluespace" = 1, "silicon" = 2) + grind_results = list("bluespace" = 10, "silicon" = 20) //Polycrystals, aka stacks /obj/item/stack/sheet/bluespace_crystal @@ -60,7 +60,7 @@ materials = list(MAT_BLUESPACE=MINERAL_MATERIAL_AMOUNT) attack_verb = list("bluespace polybashed", "bluespace polybattered", "bluespace polybludgeoned", "bluespace polythrashed", "bluespace polysmashed") novariants = TRUE - grind_results = list("bluespace" = 2) + grind_results = list("bluespace" = 20) var/crystal_type = /obj/item/ore/bluespace_crystal/refined /obj/item/stack/sheet/bluespace_crystal/attack_self(mob/user)// to prevent the construction menu from ever happening diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 7a0f85a8f2..7ebf623218 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -111,7 +111,7 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' heal_brute = 40 self_delay = 20 - grind_results = list("styptic_powder" = 1) + grind_results = list("styptic_powder" = 10) /obj/item/stack/medical/bruise_pack/suicide_act(mob/user) user.visible_message("[user] is bludgeoning [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide!") @@ -148,4 +148,4 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' heal_burn = 40 self_delay = 20 - grind_results = list("silver_sulfadiazine" = 1) + grind_results = list("silver_sulfadiazine" = 10) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index 8cc6a60efa..15cfc12773 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -22,7 +22,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/glass - grind_results = list("silicon" = 1) + grind_results = list("silicon" = 20) /obj/item/stack/sheet/glass/cyborg materials = list() @@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmaglass - grind_results = list("silicon" = 1, "plasma" = 1) + grind_results = list("silicon" = 20, "plasma" = 10) /obj/item/stack/sheet/plasmaglass/fifty amount = 50 @@ -130,7 +130,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 70, acid = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/rglass - grind_results = list("silicon" = 1, "iron" = 1) + grind_results = list("silicon" = 20, "iron" = 10) /obj/item/stack/sheet/rglass/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -171,7 +171,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plasmarglass - grind_results = list("silicon" = 1, "plasma" = 1, "iron" = 1) + grind_results = list("silicon" = 20, "plasma" = 10, "iron" = 10) /obj/item/stack/sheet/plasmarglass/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.prglass_recipes diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index 051d8326b8..b4482a72db 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -11,7 +11,7 @@ throw_range = 7 flags_1 = CONDUCT_1 max_amount = 60 - grind_results = list("silicon" = 1, "copper" = 1) + grind_results = list("silicon" = 20, "copper" = 5) /obj/item/stack/light_w/attackby(obj/item/O, mob/user, params) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 36b9cf210a..b57199cb12 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -19,10 +19,15 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("chair", /obj/structure/chair, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, one_per_turf = TRUE, on_floor = TRUE), \ - new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, one_per_turf = TRUE, on_floor = TRUE), \ - new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, one_per_turf = TRUE, on_floor = TRUE), \ - new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = TRUE, on_floor = TRUE), \ + + //CIT CHANGE - adds sofas to metal recipe list + new/datum/stack_recipe_list("sofas", list( \ + new /datum/stack_recipe("sofa (middle)", /obj/structure/chair/sofa, one_per_turf = TRUE, on_floor = TRUE), \ + new /datum/stack_recipe("sofa (left)", /obj/structure/chair/sofa/left, one_per_turf = TRUE, on_floor = TRUE), \ + new /datum/stack_recipe("sofa (right)", /obj/structure/chair/sofa/right, one_per_turf = TRUE, on_floor = TRUE), \ + new /datum/stack_recipe("sofa (corner)", /obj/structure/chair/sofa/corner, one_per_turf = TRUE, on_floor = TRUE), \ + )), \ + //END OF CIT CHANGES null, \ new/datum/stack_recipe_list("office chairs", list( \ new/datum/stack_recipe("dark office chair", /obj/structure/chair/office/dark, 5, one_per_turf = TRUE, on_floor = TRUE), \ @@ -325,7 +330,7 @@ GLOBAL_LIST_INIT(runed_metal_recipes, list ( \ sheettype = "runed" merge_type = /obj/item/stack/sheet/runed_metal novariants = TRUE - grind_results = list("iron" = 0.5, "blood" = 1.5) + grind_results = list("iron" = 5, "blood" = 15) /obj/item/stack/sheet/runed_metal/ratvar_act() new /obj/item/stack/tile/brass(loc, amount) @@ -389,7 +394,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ throw_range = 3 turf_type = /turf/open/floor/clockwork novariants = FALSE - grind_results = list("iron" = 0.5, "teslium" = 1.5) + grind_results = list("iron" = 5, "teslium" = 15) /obj/item/stack/tile/brass/narsie_act() new /obj/item/stack/sheet/runed_metal(loc, amount) @@ -440,7 +445,7 @@ GLOBAL_LIST_INIT(brass_recipes, list ( \ w_class = WEIGHT_CLASS_NORMAL throw_speed = 1 throw_range = 3 - grind_results = list("carbon" = 1) + grind_results = list("carbon" = 10) GLOBAL_LIST_INIT(plastic_recipes, list( new /datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 5, one_per_turf = TRUE, on_floor = TRUE, time = 40), \ diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5e80353db9..7463c69b4d 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -109,7 +109,7 @@ if (recipes_sublist && recipe_list[recipes_sublist] && istype(recipe_list[recipes_sublist], /datum/stack_recipe_list)) var/datum/stack_recipe_list/srl = recipe_list[recipes_sublist] recipe_list = srl.recipes - var/t1 = "Amount Left: [amount]
    " + var/t1 = "Amount Left: [get_amount()]
    " for(var/i in 1 to length(recipe_list)) var/E = recipe_list[i] if (isnull(E)) @@ -161,8 +161,8 @@ if (href_list["sublist"] && !href_list["make"]) interact(usr, text2num(href_list["sublist"])) if (href_list["make"]) - if (get_amount() < 1) - qdel(src) //Never should happen + if (get_amount() < 1 && !is_cyborg) + qdel(src) var/list/recipes_list = recipes if (href_list["sublist"]) @@ -336,10 +336,10 @@ else . = ..() -/obj/item/stack/proc/copy_evidences(obj/item/stack/from as obj) - blood_DNA = from.blood_DNA - fingerprints = from.fingerprints - fingerprintshidden = from.fingerprintshidden +/obj/item/stack/proc/copy_evidences(obj/item/stack/from) + add_blood_DNA(from.return_blood_DNA()) + add_fingerprint_list(from.return_fingerprints()) + add_hiddenprint_list(from.return_hiddenprints()) fingerprintslast = from.fingerprintslast //TODO bloody overlay diff --git a/code/game/objects/items/stacks/wrap.dm b/code/game/objects/items/stacks/wrap.dm index baa462e907..19172673af 100644 --- a/code/game/objects/items/stacks/wrap.dm +++ b/code/game/objects/items/stacks/wrap.dm @@ -27,6 +27,7 @@ /obj/item/stack/packageWrap name = "package wrapper" + singular_name = "wrapping sheet" desc = "You can use this to wrap items in." icon = 'icons/obj/stack_objects.dmi' icon_state = "deliveryPaper" diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 533858b748..84cd51fe22 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -72,7 +72,7 @@ /obj/item/storage/backpack/holding/handle_item_insertion(obj/item/W, prevent_warning = 0, mob/living/user) if((istype(W, /obj/item/storage/backpack/holding) || count_by_type(W.GetAllContents(), /obj/item/storage/backpack/holding))) var/turf/loccheck = get_turf(src) - if(loccheck.z == ZLEVEL_CITYOFCOGS) + if(is_reebe(loccheck.z)) user.visible_message("An unseen force knocks [user] to the ground!", "\"I think not!\"") user.Knockdown(60) return diff --git a/code/game/objects/items/storage/book.dm b/code/game/objects/items/storage/book.dm index ef04fc48f5..25b123e75c 100644 --- a/code/game/objects/items/storage/book.dm +++ b/code/game/objects/items/storage/book.dm @@ -94,7 +94,7 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", to_chat(user, "You don't have the dexterity to do this!") return - if (user.disabilities & CLUMSY && prob(50)) + if (user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "[src] slips out of your hand and hits your head.") user.take_bodypart_damage(10) user.Unconscious(400) @@ -213,5 +213,5 @@ GLOBAL_LIST_INIT(bibleitemstates, list("bible", "koran", "scrapbook", "bible", else return ..(M,user,heal_mode = FALSE) -/obj/item/storage/book/bible/syndicate/add_blood(list/blood_dna) +/obj/item/storage/book/bible/syndicate/add_blood_DNA(list/blood_dna) return FALSE diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index df40b2898c..0703eba47a 100644 --- a/code/game/objects/items/storage/briefcase.dm +++ b/code/game/objects/items/storage/briefcase.dm @@ -54,3 +54,4 @@ new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) new /obj/item/suppressor/specialoffer(src) + diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index 6ea3529b3b..3c1789fb7f 100644 --- a/code/game/objects/items/storage/storage.dm +++ b/code/game/objects/items/storage/storage.dm @@ -182,6 +182,8 @@ var/cy = ty boxes.screen_loc = "[tx]:,[ty] to [mx],[my]" for(var/obj/O in contents) + if(QDELETED(O)) + continue O.screen_loc = "[cx],[cy]" O.layer = ABOVE_HUD_LAYER O.plane = ABOVE_HUD_PLANE @@ -211,6 +213,8 @@ cy-- else for(var/obj/O in contents) + if(QDELETED(O)) + continue O.mouse_opacity = MOUSE_OPACITY_OPAQUE //This is here so storage items that spawn with contents correctly have the "click around item to equip" O.screen_loc = "[cx]:16,[cy]:16" O.maptext = "" @@ -244,6 +248,8 @@ numbered_contents = list() adjusted_contents = 0 for(var/obj/item/I in contents) + if(QDELETED(I)) + continue var/found = 0 for(var/datum/numbered_display/ND in numbered_contents) if(ND.sample_object.type == I.type) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 3718ca1a0f..fb44d094c7 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -1,307 +1,310 @@ -/obj/item/storage/box/syndicate - -/obj/item/storage/box/syndicate/PopulateContents() - switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) - if("bloodyspai") // 27 tc now this is more right - new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set - new /obj/item/clothing/mask/chameleon(src) // Goes with above - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/clothing/shoes/chameleon(src) // 2 tc - new /obj/item/device/camera_bug(src) // 1 tc - new /obj/item/device/multitool/ai_detect(src) // 1 tc - new /obj/item/device/encryptionkey/syndicate(src) // 2 tc - new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/switchblade(src) //I'll count this as 2 tc - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals - new /obj/item/device/flashlight/emp(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - - if("stealth") // 31 tc - new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) - new /obj/item/pen/sleepy(src) - new /obj/item/device/healthanalyzer/rad_laser(src) - new /obj/item/device/chameleon(src) - new /obj/item/soap/syndie(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - - if("bond") // 29 tc - new /obj/item/gun/ballistic/automatic/pistol(src) - new /obj/item/suppressor(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/ammo_box/magazine/m10mm(src) - new /obj/item/clothing/under/chameleon(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/reagent_containers/syringe/stimulants(src) - - if("screwed") // 29 tc - new /obj/item/device/sbeacondrop/bomb(src) - new /obj/item/grenade/syndieminibomb(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/device/encryptionkey/syndicate(src) - - if("guns") // 28 tc now - new /obj/item/gun/ballistic/revolver(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/ammo_box/a357(src) - new /obj/item/card/emag(src) - new /obj/item/grenade/plastic/c4(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("murder") // 28 tc now - new /obj/item/melee/transforming/energy/sword/saber(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/card/emag(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/device/encryptionkey/syndicate(src) - new /obj/item/grenade/syndieminibomb(src) - - if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? - new /obj/item/implanter/freedom(src) - new /obj/item/implanter/uplink/precharged(src) - new /obj/item/implanter/emp(src) - new /obj/item/implanter/adrenalin(src) - new /obj/item/implanter/explosive(src) - new /obj/item/implanter/storage(src) - - if("hacker") // 26 tc - new /obj/item/aiModule/syndicate(src) - new /obj/item/card/emag(src) - new /obj/item/device/encryptionkey/binary(src) - new /obj/item/aiModule/toyAI(src) - new /obj/item/device/multitool/ai_detect(src) - - if("lordsingulo") // 24 tc - new /obj/item/device/sbeacondrop(src) - new /obj/item/clothing/suit/space/syndicate/black/red(src) - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - new /obj/item/card/emag(src) - - if("sabotage") // 26 tc now - new /obj/item/grenade/plastic/c4 (src) - new /obj/item/grenade/plastic/c4 (src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/doorCharge(src) - new /obj/item/device/camera_bug(src) - new /obj/item/device/sbeacondrop/powersink(src) - new /obj/item/cartridge/virus/syndicate(src) - new /obj/item/storage/toolbox/syndicate(src) //To actually get to those places - new /obj/item/pizzabox/bomb - - if("darklord") //20 tc + tk + summon item close enough for now - new /obj/item/twohanded/dualsaber(src) - new /obj/item/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/card/id/syndicate(src) - new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks - new /obj/item/spellbook/oneuse/summonitem(src) - - if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks - new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc - new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) - new /obj/item/clothing/glasses/thermal/syndi(src) - new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/clothing/mask/gas/clown_hat(src) - new /obj/item/clothing/under/suit_jacket/really_black(src) - - if("metaops") // 30 tc - new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc - new /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc - new /obj/item/implanter/explosive(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc - new /obj/item/grenade/plastic/c4 (src) // 1 tc - new /obj/item/grenade/plastic/c4 (src) // 1 tc - new /obj/item/card/emag(src) // 6 tc - - if("ninja") // 33 tc worth - new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? - new /obj/item/implanter/adrenalin(src) // 8 tc - new /obj/item/throwing_star(src) // ~5 tc for all 6 - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc - new /obj/item/card/id/syndicate(src) // 2 tc - new /obj/item/device/chameleon(src) // 7 tc - -/obj/item/storage/box/syndie_kit - name = "box" - desc = "A sleek, sturdy box." - icon_state = "syndiebox" - illustration = "writing_syndie" - -/obj/item/storage/box/syndie_kit/imp_freedom - name = "boxed freedom implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/freedom(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_microbomb - name = "Microbomb Implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/explosive(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_macrobomb - name = "Macrobomb Implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/explosive/macro(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_uplink - name = "boxed uplink implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents() - ..() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/uplink(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/bioterror - name = "bioterror syringe box" - -/obj/item/storage/box/syndie_kit/bioterror/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/syringe/bioterror(src) - -/obj/item/storage/box/syndie_kit/imp_adrenal - name = "boxed adrenal implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents() - var/obj/item/implanter/O = new(src) - O.imp = new /obj/item/implant/adrenalin(O) - O.update_icon() - -/obj/item/storage/box/syndie_kit/imp_storage - name = "boxed storage implant (with injector)" - -/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents() - new /obj/item/implanter/storage(src) - -/obj/item/storage/box/syndie_kit/space - name = "boxed space suit and helmet" - can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) - max_w_class = WEIGHT_CLASS_NORMAL - -/obj/item/storage/box/syndie_kit/space/PopulateContents() - new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now - new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) - -/obj/item/storage/box/syndie_kit/emp - name = "boxed EMP kit" - -/obj/item/storage/box/syndie_kit/emp/PopulateContents() - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/implanter/emp(src) - -/obj/item/storage/box/syndie_kit/chemical - name = "boxed chemical kit" - storage_slots = 14 - -/obj/item/storage/box/syndie_kit/chemical/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/polonium(src) - new /obj/item/reagent_containers/glass/bottle/venom(src) - new /obj/item/reagent_containers/glass/bottle/neurotoxin2(src) - new /obj/item/reagent_containers/glass/bottle/formaldehyde(src) - new /obj/item/reagent_containers/glass/bottle/spewium(src) - new /obj/item/reagent_containers/glass/bottle/cyanide(src) - new /obj/item/reagent_containers/glass/bottle/histamine(src) - new /obj/item/reagent_containers/glass/bottle/initropidril(src) - new /obj/item/reagent_containers/glass/bottle/pancuronium(src) - new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src) - new /obj/item/reagent_containers/glass/bottle/coniine(src) - new /obj/item/reagent_containers/glass/bottle/curare(src) - new /obj/item/reagent_containers/glass/bottle/amanitin(src) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/syndie_kit/nuke - name = "box" - -/obj/item/storage/box/syndie_kit/nuke/PopulateContents() - new /obj/item/screwdriver/nuke(src) - new /obj/item/nuke_core_container(src) - new /obj/item/paper/guides/antag/nuke_instructions(src) - -/obj/item/storage/box/syndie_kit/supermatter - name = "box" - -/obj/item/storage/box/syndie_kit/supermatter/PopulateContents() - new /obj/item/scalpel/supermatter(src) - new /obj/item/hemostat/supermatter(src) - new /obj/item/nuke_core_container/supermatter(src) - new /obj/item/paper/guides/antag/supermatter_sliver(src) - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade - name = "boxed virus grenade kit" - -/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() - new /obj/item/grenade/chem_grenade/tuberculosis(src) - for(var/i in 1 to 5) - new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src) - -/obj/item/storage/box/syndie_kit/chameleon - name = "chameleon kit" - -/obj/item/storage/box/syndie_kit/chameleon/PopulateContents() - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/suit/chameleon(src) - new /obj/item/clothing/gloves/chameleon(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/clothing/glasses/chameleon(src) - new /obj/item/clothing/head/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/storage/backpack/chameleon(src) - new /obj/item/device/radio/headset/chameleon(src) - new /obj/item/stamp/chameleon(src) - new /obj/item/device/pda/chameleon(src) - new /obj/item/gun/energy/laser/chameleon(src) - -//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. -//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) -/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents() - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - new /obj/item/restraints/legcuffs/bola/tactical(src) - -/obj/item/storage/box/syndie_kit/cutouts/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/cardboard_cutout/adaptive(src) - new/obj/item/toy/crayon/rainbow(src) - -/obj/item/storage/box/syndie_kit/romerol/PopulateContents() - new /obj/item/reagent_containers/glass/bottle/romerol(src) - new /obj/item/reagent_containers/syringe(src) - new /obj/item/reagent_containers/dropper(src) - -/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents() - for(var/i in 1 to 3) - new/obj/item/grenade/chem_grenade/ez_clean(src) - -/obj/item/storage/box/hug/reverse_revolver/PopulateContents() - new /obj/item/gun/ballistic/revolver/reverse(src) - -/obj/item/storage/box/syndie_kit/mimery/PopulateContents() - new /obj/item/spellbook/oneuse/mimery_blockade(src) - new /obj/item/spellbook/oneuse/mimery_guns(src) +/obj/item/storage/box/syndicate + +/obj/item/storage/box/syndicate/PopulateContents() + switch (pickweight(list("bloodyspai" = 3, "stealth" = 2, "bond" = 2, "screwed" = 2, "sabotage" = 3, "guns" = 2, "murder" = 2, "implant" = 1, "hacker" = 3, "darklord" = 1, "sniper" = 1, "metaops" = 1, "ninja" = 1))) + if("bloodyspai") // 27 tc now this is more right + new /obj/item/clothing/under/chameleon(src) // 2 tc since it's not the full set + new /obj/item/clothing/mask/chameleon(src) // Goes with above + new /obj/item/card/id/syndicate(src) // 2 tc + new /obj/item/clothing/shoes/chameleon(src) // 2 tc + new /obj/item/device/camera_bug(src) // 1 tc + new /obj/item/device/multitool/ai_detect(src) // 1 tc + new /obj/item/device/encryptionkey/syndicate(src) // 2 tc + new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc + new /obj/item/switchblade(src) //I'll count this as 2 tc + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals + new /obj/item/device/flashlight/emp(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + + if("stealth") // 31 tc + new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) + new /obj/item/pen/sleepy(src) + new /obj/item/device/healthanalyzer/rad_laser(src) + new /obj/item/device/chameleon(src) + new /obj/item/soap/syndie(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + + if("bond") // 29 tc + new /obj/item/gun/ballistic/automatic/pistol(src) + new /obj/item/suppressor(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/ammo_box/magazine/m10mm(src) + new /obj/item/clothing/under/chameleon(src) + new /obj/item/card/id/syndicate(src) + new /obj/item/reagent_containers/syringe/stimulants(src) + + if("screwed") // 29 tc + new /obj/item/device/sbeacondrop/bomb(src) + new /obj/item/grenade/syndieminibomb(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/device/encryptionkey/syndicate(src) + + if("guns") // 28 tc now + new /obj/item/gun/ballistic/revolver(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/ammo_box/a357(src) + new /obj/item/card/emag(src) + new /obj/item/grenade/plastic/c4(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("murder") // 28 tc now + new /obj/item/melee/transforming/energy/sword/saber(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/card/emag(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/device/encryptionkey/syndicate(src) + new /obj/item/grenade/syndieminibomb(src) + + if("implant") // 55+ tc holy shit what the fuck this is a lottery disguised as fun boxes isn't it? + new /obj/item/implanter/freedom(src) + new /obj/item/implanter/uplink/precharged(src) + new /obj/item/implanter/emp(src) + new /obj/item/implanter/adrenalin(src) + new /obj/item/implanter/explosive(src) + new /obj/item/implanter/storage(src) + + if("hacker") // 26 tc + new /obj/item/aiModule/syndicate(src) + new /obj/item/card/emag(src) + new /obj/item/device/encryptionkey/binary(src) + new /obj/item/aiModule/toyAI(src) + new /obj/item/device/multitool/ai_detect(src) + + if("lordsingulo") // 24 tc + new /obj/item/device/sbeacondrop(src) + new /obj/item/clothing/suit/space/syndicate/black/red(src) + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + new /obj/item/card/emag(src) + + if("sabotage") // 26 tc now + new /obj/item/grenade/plastic/c4 (src) + new /obj/item/grenade/plastic/c4 (src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/doorCharge(src) + new /obj/item/device/camera_bug(src) + new /obj/item/device/sbeacondrop/powersink(src) + new /obj/item/cartridge/virus/syndicate(src) + new /obj/item/storage/toolbox/syndicate(src) //To actually get to those places + new /obj/item/pizzabox/bomb + + if("darklord") //20 tc + tk + summon item close enough for now + new /obj/item/twohanded/dualsaber(src) + new /obj/item/dnainjector/telemut/darkbundle(src) + new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) + new /obj/item/card/id/syndicate(src) + new /obj/item/clothing/shoes/chameleon(src) //because slipping while being a dark lord sucks + new /obj/item/spellbook/oneuse/summonitem(src) + + if("sniper") //This shit is unique so can't really balance it around tc, also no silencer because getting killed without ANY indicator on what killed you sucks + new /obj/item/gun/ballistic/automatic/sniper_rifle(src) // 12 tc + new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) + new /obj/item/clothing/glasses/thermal/syndi(src) + new /obj/item/clothing/gloves/color/latex/nitrile(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/clothing/under/suit_jacket/really_black(src) + + if("metaops") // 30 tc + new /obj/item/clothing/suit/space/hardsuit/syndi(src) // 8 tc + new /obj/item/gun/ballistic/automatic/shotgun/bulldog/unrestricted(src) // 8 tc + new /obj/item/implanter/explosive(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/ammo_box/magazine/m12g/buckshot(src) // 2 tc + new /obj/item/grenade/plastic/c4 (src) // 1 tc + new /obj/item/grenade/plastic/c4 (src) // 1 tc + new /obj/item/card/emag(src) // 6 tc + + if("ninja") // 33 tc worth + new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? + new /obj/item/implanter/adrenalin(src) // 8 tc + new /obj/item/throwing_star(src) // ~5 tc for all 6 + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/storage/belt/chameleon(src) // Unique but worth at least 2 tc + new /obj/item/card/id/syndicate(src) // 2 tc + new /obj/item/device/chameleon(src) // 7 tc + +/obj/item/storage/box/syndie_kit + name = "box" + desc = "A sleek, sturdy box." + icon_state = "syndiebox" + illustration = "writing_syndie" + +/obj/item/storage/box/syndie_kit/imp_freedom + name = "boxed freedom implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_freedom/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/freedom(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_microbomb + name = "Microbomb Implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_microbomb/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/explosive(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_macrobomb + name = "Macrobomb Implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_macrobomb/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/explosive/macro(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_uplink + name = "boxed uplink implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_uplink/PopulateContents() + ..() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/uplink(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/bioterror + name = "bioterror syringe box" + +/obj/item/storage/box/syndie_kit/bioterror/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/syringe/bioterror(src) + +/obj/item/storage/box/syndie_kit/imp_adrenal + name = "boxed adrenal implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_adrenal/PopulateContents() + var/obj/item/implanter/O = new(src) + O.imp = new /obj/item/implant/adrenalin(O) + O.update_icon() + +/obj/item/storage/box/syndie_kit/imp_storage + name = "boxed storage implant (with injector)" + +/obj/item/storage/box/syndie_kit/imp_storage/PopulateContents() + new /obj/item/implanter/storage(src) + +/obj/item/storage/box/syndie_kit/space + name = "boxed space suit and helmet" + can_hold = list(/obj/item/clothing/suit/space/syndicate, /obj/item/clothing/head/helmet/space/syndicate) + max_w_class = WEIGHT_CLASS_NORMAL + +/obj/item/storage/box/syndie_kit/space/PopulateContents() + new /obj/item/clothing/suit/space/syndicate/black/red(src) // Black and red is so in right now + new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) + +/obj/item/storage/box/syndie_kit/emp + name = "boxed EMP kit" + +/obj/item/storage/box/syndie_kit/emp/PopulateContents() + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/implanter/emp(src) + +/obj/item/storage/box/syndie_kit/chemical + name = "boxed chemical kit" + storage_slots = 14 + +/obj/item/storage/box/syndie_kit/chemical/PopulateContents() + new /obj/item/reagent_containers/glass/bottle/polonium(src) + new /obj/item/reagent_containers/glass/bottle/venom(src) + new /obj/item/reagent_containers/glass/bottle/neurotoxin2(src) + new /obj/item/reagent_containers/glass/bottle/formaldehyde(src) + new /obj/item/reagent_containers/glass/bottle/spewium(src) + new /obj/item/reagent_containers/glass/bottle/cyanide(src) + new /obj/item/reagent_containers/glass/bottle/histamine(src) + new /obj/item/reagent_containers/glass/bottle/initropidril(src) + new /obj/item/reagent_containers/glass/bottle/pancuronium(src) + new /obj/item/reagent_containers/glass/bottle/sodium_thiopental(src) + new /obj/item/reagent_containers/glass/bottle/coniine(src) + new /obj/item/reagent_containers/glass/bottle/curare(src) + new /obj/item/reagent_containers/glass/bottle/amanitin(src) + new /obj/item/reagent_containers/syringe(src) + +/obj/item/storage/box/syndie_kit/nuke + name = "box" + +/obj/item/storage/box/syndie_kit/nuke/PopulateContents() + new /obj/item/screwdriver/nuke(src) + new /obj/item/nuke_core_container(src) + new /obj/item/paper/guides/antag/nuke_instructions(src) + +/obj/item/storage/box/syndie_kit/supermatter + name = "box" + +/obj/item/storage/box/syndie_kit/supermatter/PopulateContents() + new /obj/item/scalpel/supermatter(src) + new /obj/item/hemostat/supermatter(src) + new /obj/item/nuke_core_container/supermatter(src) + new /obj/item/paper/guides/antag/supermatter_sliver(src) + +/obj/item/storage/box/syndie_kit/tuberculosisgrenade + name = "boxed virus grenade kit" + +/obj/item/storage/box/syndie_kit/tuberculosisgrenade/PopulateContents() + new /obj/item/grenade/chem_grenade/tuberculosis(src) + for(var/i in 1 to 5) + new /obj/item/reagent_containers/hypospray/medipen/tuberculosiscure(src) + new /obj/item/reagent_containers/syringe(src) + new /obj/item/reagent_containers/glass/bottle/tuberculosiscure(src) + +/obj/item/storage/box/syndie_kit/chameleon + name = "chameleon kit" + +/obj/item/storage/box/syndie_kit/chameleon/PopulateContents() + new /obj/item/clothing/under/chameleon(src) + new /obj/item/clothing/suit/chameleon(src) + new /obj/item/clothing/gloves/chameleon(src) + new /obj/item/clothing/shoes/chameleon(src) + new /obj/item/clothing/glasses/chameleon(src) + new /obj/item/clothing/head/chameleon(src) + new /obj/item/clothing/mask/chameleon(src) + new /obj/item/storage/backpack/chameleon(src) + new /obj/item/device/radio/headset/chameleon(src) + new /obj/item/stamp/chameleon(src) + new /obj/item/device/pda/chameleon(src) + new /obj/item/gun/energy/laser/chameleon(src) + +//5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. +//Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) +/obj/item/storage/box/syndie_kit/throwing_weapons/PopulateContents() + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/throwing_star(src) + new /obj/item/restraints/legcuffs/bola/tactical(src) + new /obj/item/restraints/legcuffs/bola/tactical(src) + +/obj/item/storage/box/syndie_kit/cutouts/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/cardboard_cutout/adaptive(src) + new/obj/item/toy/crayon/rainbow(src) + +/obj/item/storage/box/syndie_kit/romerol/PopulateContents() + new /obj/item/reagent_containers/glass/bottle/romerol(src) + new /obj/item/reagent_containers/syringe(src) + new /obj/item/reagent_containers/dropper(src) + +/obj/item/storage/box/syndie_kit/ez_clean/PopulateContents() + for(var/i in 1 to 3) + new/obj/item/grenade/chem_grenade/ez_clean(src) + +/obj/item/storage/box/hug/reverse_revolver/PopulateContents() + new /obj/item/gun/ballistic/revolver/reverse(src) + +/obj/item/storage/box/syndie_kit/mimery/PopulateContents() + new /obj/item/spellbook/oneuse/mimery_blockade(src) + new /obj/item/spellbook/oneuse/mimery_guns(src) + +/obj/item/storage/box/syndie_kit/imp_radio/PopulateContents() + new /obj/item/implanter/radio(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/stunbaton.dm index ab82f92c2d..951d897835 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/stunbaton.dm @@ -108,7 +108,7 @@ add_fingerprint(user) /obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user) - if(status && user.disabilities & CLUMSY && prob(50)) + if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50)) user.visible_message("[user] accidentally hits themself with [src]!", \ "You accidentally hit yourself with [src]!") user.Knockdown(stunforce*3) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 8a3dc21dbe..f1cc7c7c25 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -327,7 +327,7 @@ /obj/effect/resin_container/proc/Smoke() var/obj/effect/particle_effect/foam/metal/resin/S = new /obj/effect/particle_effect/foam/metal/resin(get_turf(loc)) - S.amount = 3 + S.amount = 4 playsound(src,'sound/effects/bamf.ogg',100,1) qdel(src) diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index 93876164b4..c3022a7758 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -1,3 +1,4 @@ + #define SOURCE_PORTAL 1 #define DESTINATION_PORTAL 2 @@ -16,7 +17,7 @@ icon = 'icons/obj/device.dmi' icon_state = "locator" var/temp = null - var/frequency = 1451 + var/frequency = FREQ_LOCATOR_IMPLANT var/broadcasting = null var/listening = 1 flags_1 = CONDUCT_1 @@ -52,7 +53,7 @@ Frequency: if (usr.stat || usr.restrained()) return var/turf/current_location = get_turf(usr)//What turf is the user on? - if(!current_location || current_location.z == ZLEVEL_CENTCOM)//If turf was not found or they're on CentCom + if(!current_location || is_centcom_level(current_location.z))//If turf was not found or they're on CentCom to_chat(usr, "[src] is malfunctioning.") return if(usr.contents.Find(src) || (in_range(src, usr) && isturf(loc))) @@ -167,7 +168,7 @@ Frequency: /obj/item/hand_tele/attack_self(mob/user) var/turf/current_location = get_turf(user)//What turf is the user on? var/area/current_area = current_location.loc - if(!current_location || current_area.noteleport || current_location.z > ZLEVEL_SPACEMAX || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf + if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf to_chat(user, "\The [src] is malfunctioning.") return var/list/L = list( ) @@ -205,9 +206,9 @@ Frequency: return current_location = get_turf(user) //Recheck. current_area = current_location.loc - if(!current_location || current_area.noteleport || current_location.z > ZLEVEL_SPACEMAX || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf + if(!current_location || current_area.noteleport || is_away_level(current_location.z) || !isturf(user.loc))//If turf was not found or they're on z level 2 or >7 which does not currently exist. or if user is not located on a turf to_chat(user, "\The [src] is malfunctioning.") - return + return user.show_message("Locked In.", 2) var/list/obj/effect/portal/created = create_portal_pair(current_location, get_teleport_turf(get_turf(T)), src, 300, 1) if(!(LAZYLEN(created) == 2)) diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/teleprod.dm index 92e7a8e9ba..646c0aa4fb 100644 --- a/code/game/objects/items/teleprod.dm +++ b/code/game/objects/items/teleprod.dm @@ -8,7 +8,7 @@ /obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit ..() - if(status && user.disabilities & CLUMSY && prob(50)) + if(status && user.has_disability(DISABILITY_CLUMSY) && prob(50)) user.visible_message("[user] accidentally hits themself with [src]!", \ "You accidentally hit yourself with [src]!") if(do_teleport(user, get_turf(user), 50))//honk honk diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index e00513a47a..95d209585f 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -138,7 +138,7 @@ return FALSE forceMove(tongs) tongs.sliver = src - tongs.icon_state = "supermatter_tongs_loaded" + tongs.update_icon() to_chat(user, "You carefully pick up [src] with [tongs].") else if(istype(W, /obj/item/scalpel/supermatter) || istype(W, /obj/item/nuke_core_container/supermatter/)) // we don't want it to dust return @@ -217,6 +217,12 @@ QDEL_NULL(sliver) return ..() +/obj/item/hemostat/supermatter/update_icon() + if(sliver) + icon_state = "supermatter_tongs_loaded" + else + icon_state = "supermatter_tongs" + /obj/item/hemostat/supermatter/afterattack(atom/O, mob/user, proximity) if(!sliver) return @@ -224,12 +230,14 @@ Consume(O) to_chat(usr, "\The [sliver] is dusted along with \the [O]!") QDEL_NULL(sliver) + update_icon() /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom) // no instakill supermatter javelins if(sliver) sliver.forceMove(loc) to_chat(usr, "\The [sliver] falls out of \the [src] as you throw them.") sliver = null + update_icon() ..() /obj/item/hemostat/supermatter/proc/Consume(atom/movable/AM, mob/user) @@ -247,6 +255,5 @@ radiation_pulse(user, 500, 2) playsound(src, 'sound/effects/supermatter.ogg', 50, 1) user.dust() - icon_state = "supermatter_tongs" QDEL_NULL(sliver) - + update_icon() diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 08f22b7e46..fb1a9c8787 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -75,7 +75,7 @@ return ..() if(user.zone_selected != "eyes" && user.zone_selected != "head") return ..() - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) M = user return eyestab(M,user) @@ -105,7 +105,7 @@ item_state = "drill" lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) //done for balance reasons, making them high value for research, but harder to get force = 8 //might or might not be too high, subject to change w_class = WEIGHT_CLASS_SMALL throwforce = 8 diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index 12c056c9af..289b4dc5e2 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -342,4 +342,4 @@ nextrefueltick = world.time + 10 reagents.add_reagent("welding_fuel", 1) -#undef WELDER_FUEL_BURN_INTERVAL +#undef WELDER_FUEL_BURN_INTERVAL \ No newline at end of file diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index c03469164e..910b98b27a 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -14,7 +14,8 @@ materials = list(MAT_METAL=80) attack_verb = list("pinched", "nipped") hitsound = 'sound/items/wirecutter.ogg' - usesound = 'sound/items/wirecutter.ogg' + usesound = 'sound/items/wirecutter.ogg' + tool_behaviour = TOOL_WIRECUTTER toolspeed = 1 armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 30) @@ -32,10 +33,6 @@ if(istype(C) && C.handcuffed && istype(C.handcuffed, /obj/item/restraints/handcuffs/cable)) user.visible_message("[user] cuts [C]'s restraints with [src]!") qdel(C.handcuffed) - C.handcuffed = null - if(C.buckled && C.buckled.buckle_requires_restraints) - C.buckled.unbuckle_mob(C) - C.update_handcuffed() return else ..() @@ -58,7 +55,8 @@ desc = "Extremely sharp wirecutters, made out of a silvery-green metal." icon = 'icons/obj/abductor.dmi' icon_state = "cutters" - toolspeed = 0.1 + toolspeed = 0.1 + random_color = FALSE /obj/item/wirecutters/cyborg @@ -70,7 +68,8 @@ name = "jaws of life" desc = "A set of jaws of life, compressed through the magic of science. It's fitted with a cutting head." icon_state = "jaws_cutter" - item_state = "jawsoflife" + item_state = "jawsoflife" + materials = list(MAT_METAL=150,MAT_SILVER=50,MAT_TITANIUM=25) usesound = 'sound/items/jaws_cut.ogg' toolspeed = 0.25 @@ -92,4 +91,12 @@ var/obj/item/crowbar/power/pryjaws = new /obj/item/crowbar/power to_chat(user, "You attach the pry jaws to [src].") qdel(src) - user.put_in_active_hand(pryjaws) \ No newline at end of file + user.put_in_active_hand(pryjaws) + +/obj/item/wirecutters/power/attack(mob/living/carbon/C, mob/user) + if(istype(C) && C.handcuffed) + user.visible_message("[user] cuts [C]'s restraints with [src]!") + qdel(C.handcuffed) + return + else + ..() diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index b1313ef84f..7d371102c3 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -81,4 +81,4 @@ /obj/item/trash/coal/burn() visible_message("[src] fuses into a diamond! Someone wasn't so naughty after all...") new /obj/item/ore/diamond(loc) - qdel(src) + qdel(src) \ No newline at end of file diff --git a/code/game/objects/items/twohanded.dm b/code/game/objects/items/twohanded.dm index 58758668c3..8618d090bf 100644 --- a/code/game/objects/items/twohanded.dm +++ b/code/game/objects/items/twohanded.dm @@ -122,6 +122,10 @@ flags_1 = ABSTRACT_1 | NODROP_1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF +/obj/item/twohanded/offhand/Destroy() + wielded = FALSE + return ..() + /obj/item/twohanded/offhand/unwield() if(wielded)//Only delete if we're wielded wielded = FALSE @@ -293,7 +297,7 @@ icon_state = "dualsaber[item_color][wielded]" else icon_state = "dualsaber0" - clean_blood()//blood overlays get weird otherwise, because the sprite changes. + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/item/twohanded/dualsaber/attack(mob/target, mob/living/carbon/human/user) if(user.has_dna()) @@ -302,7 +306,7 @@ unwield() return ..() - if(user.disabilities & CLUMSY && (wielded) && prob(40)) + if(user.has_disability(DISABILITY_CLUMSY) && (wielded) && prob(40)) impale(user) return if((wielded) && prob(50)) diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 37d0c6cb0e..2656079557 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -409,7 +409,7 @@ righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' flags_1 = NODROP_1 | ABSTRACT_1 | DROPDEL_1 w_class = WEIGHT_CLASS_HUGE - force = 21 + force = 24 throwforce = 0 throw_range = 0 throw_speed = 0 diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index ff8bcc3e1e..c20c01cc42 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -1,10 +1,10 @@ //the essential proc to call when an obj must receive damage of any kind. -/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) +/obj/proc/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) if(sound_effect) play_attack_sound(damage_amount, damage_type, damage_flag) if(!(resistance_flags & INDESTRUCTIBLE) && obj_integrity > 0) - damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir) + damage_amount = run_obj_armor(damage_amount, damage_type, damage_flag, attack_dir, armour_penetration) if(damage_amount >= 0.1) . = damage_amount var/old_integ = obj_integrity @@ -19,7 +19,7 @@ obj_break(damage_flag) //returns the damage value of the attack after processing the obj's various armor protections -/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) +/obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) switch(damage_type) if(BRUTE) if(BURN) @@ -28,6 +28,8 @@ var/armor_protection = 0 if(damage_flag) armor_protection = armor[damage_flag] + if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. + armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, 0.1) //the sound played when the obj is damaged. @@ -72,7 +74,7 @@ . = ..() playsound(src, P.hitsound, 50, 1) visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE) - take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180)) + take_damage(P.damage, P.damage_type, P.flag, 0, turn(P.dir, 180), P.armour_penetration) /obj/proc/hulk_damage() return 150 //the damage hulks do on punches to this object, is affected by melee armor @@ -97,10 +99,10 @@ return take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) -/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1) //used by attack_alien, attack_animal, and attack_slime +/obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) - return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user)) + return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) /obj/attack_alien(mob/living/carbon/alien/humanoid/user) if(attack_generic(user, 60, BRUTE, "melee", 0)) @@ -115,9 +117,9 @@ if(M.environment_smash) play_soundeffect = 0 if(M.obj_damage) - . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect) + . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) else - . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect) + . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) if(. && !play_soundeffect) playsound(src, 'sound/effects/meteorimpact.ogg', 100, 1) diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index ae79c7e86d..b053b987ca 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -70,7 +70,7 @@ /obj/structure/alien/resin/Move() var/turf/T = loc - ..() + . = ..() move_update_air(T) /obj/structure/alien/resin/wall diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index aabbba6b2f..f4af05c9c9 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -30,7 +30,7 @@ //Stick to the easel like glue /obj/structure/easel/Move() var/turf/T = get_turf(src) - ..() + . = ..() if(painting && painting.loc == T) //Only move if it's near us. painting.forceMove(get_turf(src)) else diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 1a09c9c4c2..56a38cb688 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -21,6 +21,10 @@ var/buildstacktype = /obj/item/stack/sheet/metal var/buildstackamount = 2 +/obj/structure/bed/examine(mob/user) + ..() + to_chat(user, "It's held together by a couple of bolts.") + /obj/structure/bed/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) if(buildstacktype) @@ -145,7 +149,7 @@ /obj/item/roller/robo/examine(mob/user) ..() - to_chat(user, "The dock is [loaded ? "loaded" : "empty"]") + to_chat(user, "The dock is [loaded ? "loaded" : "empty"].") /obj/item/roller/robo/deploy_roller(mob/user, atom/location) if(loaded) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index aa9acae22c..e97aedaf98 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -231,10 +231,10 @@ LINEN BINS desc = "If you're reading this description ingame, something has gone wrong! Honk!" /obj/item/bedsheet/random/Initialize() - . = INITIALIZE_HINT_QDEL ..() var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random) new type(loc) + return INITIALIZE_HINT_QDEL /obj/structure/bedsheetbin name = "linen bin" diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 1dc4764bcf..c56a0c5008 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -1,107 +1,107 @@ -/obj/structure/closet/cabinet - name = "cabinet" - desc = "Old will forever be in fashion." - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - -/obj/structure/closet/acloset - name = "strange closet" - desc = "It looks alien!" - icon_state = "alien" - - -/obj/structure/closet/gimmick - name = "administrative supply closet" - desc = "It's a storage unit for things that have no right being here." - icon_state = "syndicate" - -/obj/structure/closet/gimmick/russian - name = "russian surplus closet" - desc = "It's a storage unit for Russian standard-issue surplus." - -/obj/structure/closet/gimmick/russian/PopulateContents() - ..() - for(var/i in 1 to 5) - new /obj/item/clothing/head/ushanka(src) - for(var/i in 1 to 5) - new /obj/item/clothing/under/soviet(src) - -/obj/structure/closet/gimmick/tacticool - name = "tacticool gear closet" - desc = "It's a storage unit for Tacticool gear." - -/obj/structure/closet/gimmick/tacticool/PopulateContents() - ..() - new /obj/item/clothing/glasses/eyepatch(src) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/head/helmet/swat(src) - new /obj/item/clothing/head/helmet/swat(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/clothing/mask/gas/sechailer/swat(src) - new /obj/item/clothing/shoes/combat/swat(src) - new /obj/item/clothing/shoes/combat/swat(src) - new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) - new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) - new /obj/item/clothing/under/syndicate/tacticool(src) - new /obj/item/clothing/under/syndicate/tacticool(src) - - -/obj/structure/closet/thunderdome - name = "\improper Thunderdome closet" - desc = "Everything you need!" +/obj/structure/closet/cabinet + name = "cabinet" + desc = "Old will forever be in fashion." + icon_state = "cabinet" + resistance_flags = FLAMMABLE + max_integrity = 70 + +/obj/structure/closet/acloset + name = "strange closet" + desc = "It looks alien!" + icon_state = "alien" + + +/obj/structure/closet/gimmick + name = "administrative supply closet" + desc = "It's a storage unit for things that have no right being here." + icon_state = "syndicate" + +/obj/structure/closet/gimmick/russian + name = "russian surplus closet" + desc = "It's a storage unit for Russian standard-issue surplus." + +/obj/structure/closet/gimmick/russian/PopulateContents() + ..() + for(var/i in 1 to 5) + new /obj/item/clothing/head/ushanka(src) + for(var/i in 1 to 5) + new /obj/item/clothing/under/soviet(src) + +/obj/structure/closet/gimmick/tacticool + name = "tacticool gear closet" + desc = "It's a storage unit for Tacticool gear." + +/obj/structure/closet/gimmick/tacticool/PopulateContents() + ..() + new /obj/item/clothing/glasses/eyepatch(src) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/head/helmet/swat(src) + new /obj/item/clothing/head/helmet/swat(src) + new /obj/item/clothing/mask/gas/sechailer/swat(src) + new /obj/item/clothing/mask/gas/sechailer/swat(src) + new /obj/item/clothing/shoes/combat/swat(src) + new /obj/item/clothing/shoes/combat/swat(src) + new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) + new /obj/item/clothing/suit/space/hardsuit/deathsquad(src) + new /obj/item/clothing/under/syndicate/tacticool(src) + new /obj/item/clothing/under/syndicate/tacticool(src) + + +/obj/structure/closet/thunderdome + name = "\improper Thunderdome closet" + desc = "Everything you need!" anchored = TRUE - -/obj/structure/closet/thunderdome/tdred - name = "red-team Thunderdome closet" - icon_door = "red" - -/obj/structure/closet/thunderdome/tdred/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/tdome/red(src) - for(var/i in 1 to 3) + +/obj/structure/closet/thunderdome/tdred + name = "red-team Thunderdome closet" + icon_door = "red" + +/obj/structure/closet/thunderdome/tdred/PopulateContents() + ..() + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/tdome/red(src) + for(var/i in 1 to 3) new /obj/item/melee/transforming/energy/sword/saber(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser(src) - for(var/i in 1 to 3) - new /obj/item/melee/baton/loaded(src) - for(var/i in 1 to 3) - new /obj/item/storage/box/flashbangs(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/thunderdome(src) - -/obj/structure/closet/thunderdome/tdgreen - name = "green-team Thunderdome closet" - icon_door = "green" - -/obj/structure/closet/thunderdome/tdgreen/PopulateContents() - ..() - for(var/i in 1 to 3) - new /obj/item/clothing/suit/armor/tdome/green(src) - for(var/i in 1 to 3) + for(var/i in 1 to 3) + new /obj/item/gun/energy/laser(src) + for(var/i in 1 to 3) + new /obj/item/melee/baton/loaded(src) + for(var/i in 1 to 3) + new /obj/item/storage/box/flashbangs(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/thunderdome(src) + +/obj/structure/closet/thunderdome/tdgreen + name = "green-team Thunderdome closet" + icon_door = "green" + +/obj/structure/closet/thunderdome/tdgreen/PopulateContents() + ..() + for(var/i in 1 to 3) + new /obj/item/clothing/suit/armor/tdome/green(src) + for(var/i in 1 to 3) new /obj/item/melee/transforming/energy/sword/saber(src) - for(var/i in 1 to 3) - new /obj/item/gun/energy/laser(src) - for(var/i in 1 to 3) - new /obj/item/melee/baton/loaded(src) - for(var/i in 1 to 3) - new /obj/item/storage/box/flashbangs(src) - for(var/i in 1 to 3) - new /obj/item/clothing/head/helmet/thunderdome(src) - -/obj/structure/closet/malf/suits - desc = "It's a storage unit for operational gear." - icon_state = "syndicate" - -/obj/structure/closet/malf/suits/PopulateContents() - ..() - new /obj/item/tank/jetpack/void(src) - new /obj/item/clothing/mask/breath(src) - new /obj/item/clothing/head/helmet/space/nasavoid(src) - new /obj/item/clothing/suit/space/nasavoid(src) - new /obj/item/crowbar(src) - new /obj/item/stock_parts/cell(src) - new /obj/item/device/multitool(src) + for(var/i in 1 to 3) + new /obj/item/gun/energy/laser(src) + for(var/i in 1 to 3) + new /obj/item/melee/baton/loaded(src) + for(var/i in 1 to 3) + new /obj/item/storage/box/flashbangs(src) + for(var/i in 1 to 3) + new /obj/item/clothing/head/helmet/thunderdome(src) + +/obj/structure/closet/malf/suits + desc = "It's a storage unit for operational gear." + icon_state = "syndicate" + +/obj/structure/closet/malf/suits/PopulateContents() + ..() + new /obj/item/tank/jetpack/void(src) + new /obj/item/clothing/mask/breath(src) + new /obj/item/clothing/head/helmet/space/nasavoid(src) + new /obj/item/clothing/suit/space/nasavoid(src) + new /obj/item/crowbar(src) + new /obj/item/stock_parts/cell(src) + new /obj/item/device/multitool(src) diff --git a/code/game/objects/structures/crates_lockers/closets/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index 42fd4d2374..a41710ea7d 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -365,3 +365,4 @@ new /obj/item/clothing/under/rank/curator/treasure_hunter(src) new /obj/item/clothing/shoes/workboots/mining(src) new /obj/item/storage/backpack/satchel/explorer(src) + diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index fb9732c3f7..f0c1495281 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -1,11 +1,11 @@ -/obj/structure/closet/secure_closet/bar - name = "booze storage" +/obj/structure/closet/secure_closet/bar + name = "booze storage" req_access = list(ACCESS_BAR) - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - -/obj/structure/closet/secure_closet/bar/PopulateContents() - ..() - for(var/i in 1 to 10) - new /obj/item/reagent_containers/food/drinks/beer( src ) + icon_state = "cabinet" + resistance_flags = FLAMMABLE + max_integrity = 70 + +/obj/structure/closet/secure_closet/bar/PopulateContents() + ..() + for(var/i in 1 to 10) + new /obj/item/reagent_containers/food/drinks/beer( src ) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm index adcb8cb498..37fe71a3f5 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -1,13 +1,13 @@ -/obj/structure/closet/secure_closet/hydroponics - name = "botanist's locker" +/obj/structure/closet/secure_closet/hydroponics + name = "botanist's locker" req_access = list(ACCESS_HYDROPONICS) - icon_state = "hydro" - -/obj/structure/closet/secure_closet/hydroponics/PopulateContents() - ..() - new /obj/item/storage/bag/plants/portaseeder(src) - new /obj/item/device/plant_analyzer(src) - new /obj/item/device/radio/headset/headset_srv(src) - new /obj/item/cultivator(src) - new /obj/item/hatchet(src) + icon_state = "hydro" + +/obj/structure/closet/secure_closet/hydroponics/PopulateContents() + ..() + new /obj/item/storage/bag/plants/portaseeder(src) + new /obj/item/device/plant_analyzer(src) + new /obj/item/device/radio/headset/headset_srv(src) + new /obj/item/cultivator(src) + new /obj/item/hatchet(src) new /obj/item/storage/box/disks_plantgene(src) \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index dff240e1da..dcee41585d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -73,8 +73,8 @@ new /obj/item/device/autosurgeon/cmo(src) new /obj/item/door_remote/chief_medical_officer(src) new /obj/item/clothing/neck/petcollar(src) - new /obj/item/circuitboard/machine/protolathe/department/medical(src) new /obj/item/pet_carrier(src) + new /obj/item/circuitboard/machine/protolathe/department/medical(src) /obj/structure/closet/secure_closet/animal name = "animal control" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 00b74305aa..51f2c96c3a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -1,53 +1,53 @@ -/obj/structure/closet/secure_closet/personal - desc = "It's a secure locker for personnel. The first card swiped gains control." - name = "personal closet" +/obj/structure/closet/secure_closet/personal + desc = "It's a secure locker for personnel. The first card swiped gains control." + name = "personal closet" req_access = list(ACCESS_ALL_PERSONAL_LOCKERS) - var/registered_name = null - -/obj/structure/closet/secure_closet/personal/PopulateContents() - ..() - if(prob(50)) - new /obj/item/storage/backpack/duffelbag(src) - if(prob(50)) - new /obj/item/storage/backpack(src) - else - new /obj/item/storage/backpack/satchel(src) - new /obj/item/device/radio/headset( src ) - -/obj/structure/closet/secure_closet/personal/patient - name = "patient's closet" - -/obj/structure/closet/secure_closet/personal/patient/PopulateContents() - new /obj/item/clothing/under/color/white( src ) - new /obj/item/clothing/shoes/sneakers/white( src ) - -/obj/structure/closet/secure_closet/personal/cabinet - icon_state = "cabinet" - resistance_flags = FLAMMABLE - max_integrity = 70 - -/obj/structure/closet/secure_closet/personal/cabinet/PopulateContents() - new /obj/item/storage/backpack/satchel/leather/withwallet( src ) + var/registered_name = null + +/obj/structure/closet/secure_closet/personal/PopulateContents() + ..() + if(prob(50)) + new /obj/item/storage/backpack/duffelbag(src) + if(prob(50)) + new /obj/item/storage/backpack(src) + else + new /obj/item/storage/backpack/satchel(src) + new /obj/item/device/radio/headset( src ) + +/obj/structure/closet/secure_closet/personal/patient + name = "patient's closet" + +/obj/structure/closet/secure_closet/personal/patient/PopulateContents() + new /obj/item/clothing/under/color/white( src ) + new /obj/item/clothing/shoes/sneakers/white( src ) + +/obj/structure/closet/secure_closet/personal/cabinet + icon_state = "cabinet" + resistance_flags = FLAMMABLE + max_integrity = 70 + +/obj/structure/closet/secure_closet/personal/cabinet/PopulateContents() + new /obj/item/storage/backpack/satchel/leather/withwallet( src ) new /obj/item/device/instrument/piano_synth(src) - new /obj/item/device/radio/headset( src ) - -/obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params) - var/obj/item/card/id/I = W.GetID() - if(istype(I)) - if(broken) - to_chat(user, "It appears to be broken.") - return - if(!I || !I.registered_name) - return - if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) - //they can open all lockers, or nobody owns this, or they own this locker - locked = !locked - update_icon() - - if(!registered_name) - registered_name = I.registered_name - desc = "Owned by [I.registered_name]." - else - to_chat(user, "Access Denied.") - else + new /obj/item/device/radio/headset( src ) + +/obj/structure/closet/secure_closet/personal/attackby(obj/item/W, mob/user, params) + var/obj/item/card/id/I = W.GetID() + if(istype(I)) + if(broken) + to_chat(user, "It appears to be broken.") + return + if(!I || !I.registered_name) + return + if(allowed(user) || !registered_name || (istype(I) && (registered_name == I.registered_name))) + //they can open all lockers, or nobody owns this, or they own this locker + locked = !locked + update_icon() + + if(!registered_name) + registered_name = I.registered_name + desc = "Owned by [I.registered_name]." + else + to_chat(user, "Access Denied.") + else return ..() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 8b1e82ed81..158e4d348d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -1,5 +1,5 @@ -/obj/structure/closet/secure_closet/RD - name = "\proper research director's locker" +/obj/structure/closet/secure_closet/RD + name = "\proper research director's locker" req_access = list(ACCESS_RD) icon_state = "rd" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 4dccd78bca..215384054b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -1,13 +1,13 @@ -/obj/structure/closet/secure_closet - name = "secure locker" - desc = "It's a card-locked storage unit." +/obj/structure/closet/secure_closet + name = "secure locker" + desc = "It's a card-locked storage unit." locked = TRUE - icon_state = "secure" - max_integrity = 250 - armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) + icon_state = "secure" + max_integrity = 250 + armor = list(melee = 30, bullet = 50, laser = 50, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) secure = TRUE - -/obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee" && damage_amount < 20) - return 0 + +/obj/structure/closet/secure_closet/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) + if(damage_flag == "melee" && damage_amount < 20) + return 0 . = ..() \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 6491306600..2eae2a9fb9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -29,7 +29,7 @@ new /obj/item/clothing/gloves/color/captain(src) new /obj/item/restraints/handcuffs/cable/zipties(src) new /obj/item/storage/belt/sabre(src) - new /obj/item/gun/energy/e_gun/cx(src) + new /obj/item/gun/energy/e_gun(src) new /obj/item/door_remote/captain(src) /obj/structure/closet/secure_closet/hop @@ -52,7 +52,7 @@ new /obj/item/device/assembly/flash/handheld(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/gun/energy/e_gun/cx(src) + new /obj/item/gun/energy/e_gun(src) new /obj/item/clothing/neck/petcollar(src) new /obj/item/pet_carrier(src) new /obj/item/door_remote/civillian(src) @@ -70,8 +70,6 @@ new /obj/item/device/radio/headset/heads/hos(src) new /obj/item/clothing/under/hosparadefem(src) new /obj/item/clothing/under/hosparademale(src) - new /obj/item/clothing/under/rank/head_of_security/skirt(src) - new /obj/item/clothing/suit/armor/hos/trenchcoat/cloak(src) new /obj/item/clothing/suit/armor/vest/leather(src) new /obj/item/clothing/suit/armor/hos(src) new /obj/item/clothing/under/rank/head_of_security/alt(src) @@ -90,6 +88,7 @@ new /obj/item/gun/energy/e_gun/hos(src) new /obj/item/device/flashlight/seclite(src) new /obj/item/pinpointer/nuke(src) + new /obj/item/circuitboard/machine/protolathe/department/security(src) /obj/structure/closet/secure_closet/warden name = "\proper warden's locker" @@ -122,7 +121,6 @@ /obj/structure/closet/secure_closet/security/PopulateContents() ..() - new /obj/item/clothing/under/rank/security/skirt(src) new /obj/item/clothing/suit/armor/vest(src) new /obj/item/clothing/head/helmet/sec(src) new /obj/item/device/radio/headset/headset_sec(src) diff --git a/code/game/objects/structures/crates_lockers/crates/critter.dm b/code/game/objects/structures/crates_lockers/crates/critter.dm index 5261bb5332..b9f0f4b4a7 100644 --- a/code/game/objects/structures/crates_lockers/crates/critter.dm +++ b/code/game/objects/structures/crates_lockers/crates/critter.dm @@ -35,4 +35,4 @@ if(tank) return tank.air_contents else - return loc.return_air() + return loc.return_air() \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/crates/large.dm b/code/game/objects/structures/crates_lockers/crates/large.dm index 61b9998233..30da3add67 100644 --- a/code/game/objects/structures/crates_lockers/crates/large.dm +++ b/code/game/objects/structures/crates_lockers/crates/large.dm @@ -1,34 +1,34 @@ -/obj/structure/closet/crate/large - name = "large crate" - desc = "A hefty wooden crate." - icon_state = "largecrate" +/obj/structure/closet/crate/large + name = "large crate" + desc = "A hefty wooden crate." + icon_state = "largecrate" density = TRUE - material_drop = /obj/item/stack/sheet/mineral/wood - delivery_icon = "deliverybox" - -/obj/structure/closet/crate/large/attack_hand(mob/user) - add_fingerprint(user) - if(manifest) - tear_manifest(user) - else - to_chat(user, "You need a crowbar to pry this open!") - -/obj/structure/closet/crate/large/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/crowbar)) - var/turf/T = get_turf(src) - if(manifest) - tear_manifest(user) - - user.visible_message("[user] pries \the [src] open.", \ - "You pry open \the [src].", \ - "You hear splitting wood.") - playsound(src.loc, 'sound/weapons/slashmiss.ogg', 75, 1) - - for(var/i in 1 to rand(2, 5)) - new material_drop(src) - for(var/atom/movable/AM in contents) - AM.forceMove(T) - - qdel(src) - else - return ..() + material_drop = /obj/item/stack/sheet/mineral/wood + delivery_icon = "deliverybox" + +/obj/structure/closet/crate/large/attack_hand(mob/user) + add_fingerprint(user) + if(manifest) + tear_manifest(user) + else + to_chat(user, "You need a crowbar to pry this open!") + +/obj/structure/closet/crate/large/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/crowbar)) + var/turf/T = get_turf(src) + if(manifest) + tear_manifest(user) + + user.visible_message("[user] pries \the [src] open.", \ + "You pry open \the [src].", \ + "You hear splitting wood.") + playsound(src.loc, 'sound/weapons/slashmiss.ogg', 75, 1) + + for(var/i in 1 to rand(2, 5)) + new material_drop(src) + for(var/atom/movable/AM in contents) + AM.forceMove(T) + + qdel(src) + else + return ..() diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 30384d2da9..0f8ad84252 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -115,7 +115,7 @@ /obj/structure/displaycase/attackby(obj/item/W, mob/user, params) if(W.GetID() && !broken && openable) if(allowed(user)) - to_chat(user, "You [open ? "close":"open"] the [src]") + to_chat(user, "You [open ? "close":"open"] [src].") toggle_lock(user) else to_chat(user, "Access denied.") @@ -140,9 +140,9 @@ to_chat(user, "You remove the destroyed case") qdel(src) else - to_chat(user, "You start to [open ? "close":"open"] the [src]") + to_chat(user, "You start to [open ? "close":"open"] [src].") if(do_after(user, 20*W.toolspeed, target = src)) - to_chat(user, "You [open ? "close":"open"] the [src]") + to_chat(user, "You [open ? "close":"open"] [src].") toggle_lock(user) else if(open && !showpiece) if(user.transferItemToLoc(W, src)) diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 43bb540375..22d00d6cab 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -25,245 +25,11 @@ update_name() ..() -/obj/structure/door_assembly/door_assembly_public - name = "public airlock assembly" - icon = 'icons/obj/doors/airlocks/station2/glass.dmi' - overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' - glass_type = /obj/machinery/door/airlock/public/glass - airlock_type = /obj/machinery/door/airlock/public - -/obj/structure/door_assembly/door_assembly_com - name = "command airlock assembly" - icon = 'icons/obj/doors/airlocks/station/command.dmi' - base_name = "command airlock" - glass_type = /obj/machinery/door/airlock/glass_command - airlock_type = /obj/machinery/door/airlock/command - -/obj/structure/door_assembly/door_assembly_sec - name = "security airlock assembly" - icon = 'icons/obj/doors/airlocks/station/security.dmi' - base_name = "security airlock" - glass_type = /obj/machinery/door/airlock/glass_security - airlock_type = /obj/machinery/door/airlock/security - -/obj/structure/door_assembly/door_assembly_eng - name = "engineering airlock assembly" - icon = 'icons/obj/doors/airlocks/station/engineering.dmi' - base_name = "engineering airlock" - glass_type = /obj/machinery/door/airlock/glass_engineering - airlock_type = /obj/machinery/door/airlock/engineering - -/obj/structure/door_assembly/door_assembly_min - name = "mining airlock assembly" - icon = 'icons/obj/doors/airlocks/station/mining.dmi' - base_name = "mining airlock" - glass_type = /obj/machinery/door/airlock/glass_mining - airlock_type = /obj/machinery/door/airlock/mining - -/obj/structure/door_assembly/door_assembly_atmo - name = "atmospherics airlock assembly" - icon = 'icons/obj/doors/airlocks/station/atmos.dmi' - base_name = "atmospherics airlock" - glass_type = /obj/machinery/door/airlock/glass_atmos - airlock_type = /obj/machinery/door/airlock/atmos - -/obj/structure/door_assembly/door_assembly_research - name = "research airlock assembly" - icon = 'icons/obj/doors/airlocks/station/research.dmi' - base_name = "research airlock" - glass_type = /obj/machinery/door/airlock/glass_research - airlock_type = /obj/machinery/door/airlock/research - -/obj/structure/door_assembly/door_assembly_science - name = "science airlock assembly" - icon = 'icons/obj/doors/airlocks/station/science.dmi' - base_name = "science airlock" - glass_type = /obj/machinery/door/airlock/glass_science - airlock_type = /obj/machinery/door/airlock/science - -/obj/structure/door_assembly/door_assembly_med - name = "medical airlock assembly" - icon = 'icons/obj/doors/airlocks/station/medical.dmi' - base_name = "medical airlock" - glass_type = /obj/machinery/door/airlock/glass_medical - airlock_type = /obj/machinery/door/airlock/medical - -/obj/structure/door_assembly/door_assembly_mai - name = "maintenance airlock assembly" - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - base_name = "maintenance airlock" - glass_type = /obj/machinery/door/airlock/glass_maintenance - airlock_type = /obj/machinery/door/airlock/maintenance - -/obj/structure/door_assembly/door_assembly_extmai - name = "external maintenance airlock assembly" - icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' - base_name = "external maintenance airlock" - glass_type = /obj/machinery/door/airlock/maintenance/external/glass - airlock_type = /obj/machinery/door/airlock/maintenance/external - -/obj/structure/door_assembly/door_assembly_ext - name = "external airlock assembly" - icon = 'icons/obj/doors/airlocks/external/external.dmi' - base_name = "external airlock" - overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' - glass_type = /obj/machinery/door/airlock/external/glass - airlock_type = /obj/machinery/door/airlock/external - -/obj/structure/door_assembly/door_assembly_fre - name = "freezer airlock assembly" - icon = 'icons/obj/doors/airlocks/station/freezer.dmi' - base_name = "freezer airlock" - airlock_type = /obj/machinery/door/airlock/freezer - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_hatch - name = "airtight hatch assembly" - icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' - base_name = "airtight hatch" - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/hatch - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_mhatch - name = "maintenance hatch assembly" - icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' - base_name = "maintenance hatch" - overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/maintenance_hatch - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_highsecurity // Borrowing this until WJohnston makes sprites for the assembly - name = "high security airlock assembly" - icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' - base_name = "high security airlock" - overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/highsecurity - noglass = TRUE - material_type = /obj/item/stack/sheet/plasteel - material_amt = 6 - -/obj/structure/door_assembly/door_assembly_vault - name = "vault door assembly" - icon = 'icons/obj/doors/airlocks/vault/vault.dmi' - base_name = "vault door" - overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/vault - noglass = TRUE - material_type = /obj/item/stack/sheet/plasteel - material_amt = 8 - -/obj/structure/door_assembly/door_assembly_shuttle - name = "shuttle airlock assembly" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - base_name = "shuttle airlock" - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/shuttle - glass_type = /obj/machinery/door/airlock/shuttle/glass - -/obj/structure/door_assembly/door_assembly_cult - name = "cult airlock assembly" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - base_name = "cult airlock" - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult - glass_type = /obj/machinery/door/airlock/cult/glass - -/obj/structure/door_assembly/door_assembly_cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult/unruned - glass_type = /obj/machinery/door/airlock/cult/unruned/glass - -/obj/structure/door_assembly/door_assembly_viro - name = "virology airlock assembly" - icon = 'icons/obj/doors/airlocks/station/virology.dmi' - base_name = "virology airlock" - glass_type = /obj/machinery/door/airlock/glass_virology - airlock_type = /obj/machinery/door/airlock/virology - -/obj/structure/door_assembly/door_assembly_centcom - icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' - overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/centcom - noglass = TRUE - -/obj/structure/door_assembly/door_assembly_gold - name = "gold airlock assembly" - icon = 'icons/obj/doors/airlocks/station/gold.dmi' - base_name = "gold airlock" - airlock_type = /obj/machinery/door/airlock/gold - mineral = "gold" - glass_type = /obj/machinery/door/airlock/gold/glass - -/obj/structure/door_assembly/door_assembly_silver - name = "silver airlock assembly" - icon = 'icons/obj/doors/airlocks/station/silver.dmi' - base_name = "silver airlock" - airlock_type = /obj/machinery/door/airlock/silver - mineral = "silver" - glass_type = /obj/machinery/door/airlock/silver/glass - -/obj/structure/door_assembly/door_assembly_diamond - name = "diamond airlock assembly" - icon = 'icons/obj/doors/airlocks/station/diamond.dmi' - base_name = "diamond airlock" - airlock_type = /obj/machinery/door/airlock/diamond - mineral = "diamond" - glass_type = /obj/machinery/door/airlock/diamond/glass - -/obj/structure/door_assembly/door_assembly_uranium - name = "uranium airlock assembly" - icon = 'icons/obj/doors/airlocks/station/uranium.dmi' - base_name = "uranium airlock" - airlock_type = /obj/machinery/door/airlock/uranium - mineral = "uranium" - glass_type = /obj/machinery/door/airlock/uranium/glass - -/obj/structure/door_assembly/door_assembly_plasma - name = "plasma airlock assembly" - icon = 'icons/obj/doors/airlocks/station/plasma.dmi' - base_name = "plasma airlock" - airlock_type = /obj/machinery/door/airlock/plasma - mineral = "plasma" - glass_type = /obj/machinery/door/airlock/plasma/glass - -/obj/structure/door_assembly/door_assembly_bananium - name = "bananium airlock assembly" - desc = "Honk." - icon = 'icons/obj/doors/airlocks/station/bananium.dmi' - base_name = "bananium airlock" - airlock_type = /obj/machinery/door/airlock/clown - mineral = "bananium" - glass_type = /obj/machinery/door/airlock/clown/glass - -/obj/structure/door_assembly/door_assembly_sandstone - name = "sandstone airlock assembly" - icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' - base_name = "sandstone airlock" - airlock_type = /obj/machinery/door/airlock/sandstone - mineral = "sandstone" - glass_type = /obj/machinery/door/airlock/sandstone/glass - -/obj/structure/door_assembly/door_assembly_titanium - name = "titanium airlock assembly" - icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' - base_name = "shuttle airlock" - overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' - glass_type = /obj/machinery/door/airlock/titanium/glass - airlock_type = /obj/machinery/door/airlock/titanium - mineral = "titanium" - -/obj/structure/door_assembly/door_assembly_wood - name = "wooden airlock assembly" - icon = 'icons/obj/doors/airlocks/station/wood.dmi' - base_name = "wooden airlock" - airlock_type = /obj/machinery/door/airlock/wood - mineral = "wood" - glass_type = /obj/machinery/door/airlock/wood/glass - /obj/structure/door_assembly/examine(mob/user) ..() + var/doorname = "" + if(created_name) + doorname = ", written on it is '[created_name]'" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) if(anchored) @@ -275,13 +41,13 @@ if(AIRLOCK_ASSEMBLY_NEEDS_SCREWDRIVER) to_chat(user, "The circuit is connected loosely to its slot, but the maintenance panel is unscrewed and open.") if(!mineral && !glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly. There are empty slots for glass windows and mineral covers.") + to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows and mineral covers.") else if(!mineral && glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly. There are empty slots for mineral covers.") + to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for mineral covers.") else if(mineral && !glass && !noglass) - to_chat(user, "There is a small paper placard on the assembly. There are empty slots for glass windows.") + to_chat(user, "There is a small paper placard on the assembly[doorname]. There are empty slots for glass windows.") else - to_chat(user, "There is a small paper placard on the assembly.") + to_chat(user, "There is a small paper placard on the assembly[doorname].") /obj/structure/door_assembly/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/pen)) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm new file mode 100644 index 0000000000..cdbdbdfb32 --- /dev/null +++ b/code/game/objects/structures/door_assembly_types.dm @@ -0,0 +1,236 @@ +/obj/structure/door_assembly/door_assembly_public + name = "public airlock assembly" + icon = 'icons/obj/doors/airlocks/station2/glass.dmi' + overlays_file = 'icons/obj/doors/airlocks/station2/overlays.dmi' + glass_type = /obj/machinery/door/airlock/public/glass + airlock_type = /obj/machinery/door/airlock/public + +/obj/structure/door_assembly/door_assembly_com + name = "command airlock assembly" + icon = 'icons/obj/doors/airlocks/station/command.dmi' + base_name = "command airlock" + glass_type = /obj/machinery/door/airlock/command/glass + airlock_type = /obj/machinery/door/airlock/command + +/obj/structure/door_assembly/door_assembly_sec + name = "security airlock assembly" + icon = 'icons/obj/doors/airlocks/station/security.dmi' + base_name = "security airlock" + glass_type = /obj/machinery/door/airlock/security/glass + airlock_type = /obj/machinery/door/airlock/security + +/obj/structure/door_assembly/door_assembly_eng + name = "engineering airlock assembly" + icon = 'icons/obj/doors/airlocks/station/engineering.dmi' + base_name = "engineering airlock" + glass_type = /obj/machinery/door/airlock/engineering/glass + airlock_type = /obj/machinery/door/airlock/engineering + +/obj/structure/door_assembly/door_assembly_min + name = "mining airlock assembly" + icon = 'icons/obj/doors/airlocks/station/mining.dmi' + base_name = "mining airlock" + glass_type = /obj/machinery/door/airlock/mining/glass + airlock_type = /obj/machinery/door/airlock/mining + +/obj/structure/door_assembly/door_assembly_atmo + name = "atmospherics airlock assembly" + icon = 'icons/obj/doors/airlocks/station/atmos.dmi' + base_name = "atmospherics airlock" + glass_type = /obj/machinery/door/airlock/atmos/glass + airlock_type = /obj/machinery/door/airlock/atmos + +/obj/structure/door_assembly/door_assembly_research + name = "research airlock assembly" + icon = 'icons/obj/doors/airlocks/station/research.dmi' + base_name = "research airlock" + glass_type = /obj/machinery/door/airlock/research/glass + airlock_type = /obj/machinery/door/airlock/research + +/obj/structure/door_assembly/door_assembly_science + name = "science airlock assembly" + icon = 'icons/obj/doors/airlocks/station/science.dmi' + base_name = "science airlock" + glass_type = /obj/machinery/door/airlock/science/glass + airlock_type = /obj/machinery/door/airlock/science + +/obj/structure/door_assembly/door_assembly_med + name = "medical airlock assembly" + icon = 'icons/obj/doors/airlocks/station/medical.dmi' + base_name = "medical airlock" + glass_type = /obj/machinery/door/airlock/medical/glass + airlock_type = /obj/machinery/door/airlock/medical + +/obj/structure/door_assembly/door_assembly_mai + name = "maintenance airlock assembly" + icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' + base_name = "maintenance airlock" + glass_type = /obj/machinery/door/airlock/maintenance/glass + airlock_type = /obj/machinery/door/airlock/maintenance + +/obj/structure/door_assembly/door_assembly_extmai + name = "external maintenance airlock assembly" + icon = 'icons/obj/doors/airlocks/station/maintenanceexternal.dmi' + base_name = "external maintenance airlock" + glass_type = /obj/machinery/door/airlock/maintenance/external/glass + airlock_type = /obj/machinery/door/airlock/maintenance/external + +/obj/structure/door_assembly/door_assembly_ext + name = "external airlock assembly" + icon = 'icons/obj/doors/airlocks/external/external.dmi' + base_name = "external airlock" + overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' + glass_type = /obj/machinery/door/airlock/external/glass + airlock_type = /obj/machinery/door/airlock/external + +/obj/structure/door_assembly/door_assembly_fre + name = "freezer airlock assembly" + icon = 'icons/obj/doors/airlocks/station/freezer.dmi' + base_name = "freezer airlock" + airlock_type = /obj/machinery/door/airlock/freezer + noglass = TRUE + +/obj/structure/door_assembly/door_assembly_hatch + name = "airtight hatch assembly" + icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' + base_name = "airtight hatch" + overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/hatch + noglass = TRUE + +/obj/structure/door_assembly/door_assembly_mhatch + name = "maintenance hatch assembly" + icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' + base_name = "maintenance hatch" + overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/maintenance_hatch + noglass = TRUE + +/obj/structure/door_assembly/door_assembly_highsecurity + name = "high security airlock assembly" + icon = 'icons/obj/doors/airlocks/highsec/highsec.dmi' + base_name = "high security airlock" + overlays_file = 'icons/obj/doors/airlocks/highsec/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/highsecurity + noglass = TRUE + material_type = /obj/item/stack/sheet/plasteel + material_amt = 6 + +/obj/structure/door_assembly/door_assembly_vault + name = "vault door assembly" + icon = 'icons/obj/doors/airlocks/vault/vault.dmi' + base_name = "vault door" + overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/vault + noglass = TRUE + material_type = /obj/item/stack/sheet/plasteel + material_amt = 8 + +/obj/structure/door_assembly/door_assembly_shuttle + name = "shuttle airlock assembly" + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + base_name = "shuttle airlock" + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/shuttle + glass_type = /obj/machinery/door/airlock/shuttle/glass + +/obj/structure/door_assembly/door_assembly_cult + name = "cult airlock assembly" + icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' + base_name = "cult airlock" + overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/cult + glass_type = /obj/machinery/door/airlock/cult/glass + +/obj/structure/door_assembly/door_assembly_cult/unruned + icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' + overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/cult/unruned + glass_type = /obj/machinery/door/airlock/cult/unruned/glass + +/obj/structure/door_assembly/door_assembly_viro + name = "virology airlock assembly" + icon = 'icons/obj/doors/airlocks/station/virology.dmi' + base_name = "virology airlock" + glass_type = /obj/machinery/door/airlock/virology/glass + airlock_type = /obj/machinery/door/airlock/virology + +/obj/structure/door_assembly/door_assembly_centcom + icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' + overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' + airlock_type = /obj/machinery/door/airlock/centcom + noglass = TRUE + +/obj/structure/door_assembly/door_assembly_gold + name = "gold airlock assembly" + icon = 'icons/obj/doors/airlocks/station/gold.dmi' + base_name = "gold airlock" + airlock_type = /obj/machinery/door/airlock/gold + mineral = "gold" + glass_type = /obj/machinery/door/airlock/gold/glass + +/obj/structure/door_assembly/door_assembly_silver + name = "silver airlock assembly" + icon = 'icons/obj/doors/airlocks/station/silver.dmi' + base_name = "silver airlock" + airlock_type = /obj/machinery/door/airlock/silver + mineral = "silver" + glass_type = /obj/machinery/door/airlock/silver/glass + +/obj/structure/door_assembly/door_assembly_diamond + name = "diamond airlock assembly" + icon = 'icons/obj/doors/airlocks/station/diamond.dmi' + base_name = "diamond airlock" + airlock_type = /obj/machinery/door/airlock/diamond + mineral = "diamond" + glass_type = /obj/machinery/door/airlock/diamond/glass + +/obj/structure/door_assembly/door_assembly_uranium + name = "uranium airlock assembly" + icon = 'icons/obj/doors/airlocks/station/uranium.dmi' + base_name = "uranium airlock" + airlock_type = /obj/machinery/door/airlock/uranium + mineral = "uranium" + glass_type = /obj/machinery/door/airlock/uranium/glass + +/obj/structure/door_assembly/door_assembly_plasma + name = "plasma airlock assembly" + icon = 'icons/obj/doors/airlocks/station/plasma.dmi' + base_name = "plasma airlock" + airlock_type = /obj/machinery/door/airlock/plasma + mineral = "plasma" + glass_type = /obj/machinery/door/airlock/plasma/glass + +/obj/structure/door_assembly/door_assembly_bananium + name = "bananium airlock assembly" + desc = "Honk." + icon = 'icons/obj/doors/airlocks/station/bananium.dmi' + base_name = "bananium airlock" + airlock_type = /obj/machinery/door/airlock/clown + mineral = "bananium" + glass_type = /obj/machinery/door/airlock/clown/glass + +/obj/structure/door_assembly/door_assembly_sandstone + name = "sandstone airlock assembly" + icon = 'icons/obj/doors/airlocks/station/sandstone.dmi' + base_name = "sandstone airlock" + airlock_type = /obj/machinery/door/airlock/sandstone + mineral = "sandstone" + glass_type = /obj/machinery/door/airlock/sandstone/glass + +/obj/structure/door_assembly/door_assembly_titanium + name = "titanium airlock assembly" + icon = 'icons/obj/doors/airlocks/shuttle/shuttle.dmi' + base_name = "shuttle airlock" + overlays_file = 'icons/obj/doors/airlocks/shuttle/overlays.dmi' + glass_type = /obj/machinery/door/airlock/titanium/glass + airlock_type = /obj/machinery/door/airlock/titanium + mineral = "titanium" + +/obj/structure/door_assembly/door_assembly_wood + name = "wooden airlock assembly" + icon = 'icons/obj/doors/airlocks/station/wood.dmi' + base_name = "wooden airlock" + airlock_type = /obj/machinery/door/airlock/wood + mineral = "wood" + glass_type = /obj/machinery/door/airlock/wood/glass diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 770442f6c9..ebeb065b2a 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -85,7 +85,7 @@ /obj/structure/falsewall/proc/ChangeToWall(delete = 1) var/turf/T = get_turf(src) - T.ChangeTurf(walltype) + T.PlaceOnTop(walltype) if(delete) qdel(src) return T diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index f7071cd0a5..7c99a715cd 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -10,53 +10,72 @@ density = TRUE pixel_x = -16 layer = FLY_LAYER - var/cut = FALSE var/log_amount = 10 /obj/structure/flora/tree/attackby(obj/item/W, mob/user, params) - if(!cut && log_amount && (!(flags_1 & NODECONSTRUCT_1))) + if(log_amount && (!(flags_1 & NODECONSTRUCT_1))) if(W.sharpness && W.force > 0) if(W.hitsound) playsound(get_turf(src), W.hitsound, 100, 0, 0) user.visible_message("[user] begins to cut down [src] with [W].","You begin to cut down [src] with [W].", "You hear the sound of sawing.") - if(do_after(user, 1000/W.force, target = user)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard. - if(cut) - return + if(do_after(user, 1000/W.force, target = src)) //5 seconds with 20 force, 8 seconds with a hatchet, 20 seconds with a shard. user.visible_message("[user] fells [src] with the [W].","You fell [src] with the [W].", "You hear the sound of a tree falling.") playsound(get_turf(src), 'sound/effects/meteorimpact.ogg', 100 , 0, 0) - icon = 'icons/obj/flora/pinetrees.dmi' - icon_state = "tree_stump" - density = FALSE - pixel_x = -16 - name += " stump" - cut = TRUE for(var/i=1 to log_amount) new /obj/item/grown/log/tree(get_turf(src)) + var/obj/structure/flora/stump/S = new(loc) + S.name = "[name] stump" + + qdel(src) + else return ..() - - +/obj/structure/flora/stump + name = "stump" + desc = "This represents our promise to the crew, and the station itself, to cut down as many trees as possible." //running naked through the trees + icon = 'icons/obj/flora/pinetrees.dmi' + icon_state = "tree_stump" + density = FALSE + pixel_x = -16 /obj/structure/flora/tree/pine name = "pine tree" desc = "A coniferous pine tree." icon = 'icons/obj/flora/pinetrees.dmi' icon_state = "pine_1" + var/list/icon_states = list("pine_1", "pine_2", "pine_3") /obj/structure/flora/tree/pine/Initialize() - icon_state = "pine_[rand(1, 3)]" . = ..() + if(islist(icon_states && icon_states.len)) + icon_state = pick(icon_states) + /obj/structure/flora/tree/pine/xmas name = "xmas tree" desc = "A wondrous decorated Christmas tree." icon_state = "pine_c" + icon_states = null -/obj/structure/flora/tree/pine/xmas/Initialize() - . = ..() - icon_state = "pine_c" +/obj/structure/flora/tree/pine/xmas/presents + icon_state = "pinepresents" + desc = "A wondrous decorated Christmas tree. It has presents!" + var/gift_type = /obj/item/a_gift/anything + var/list/ckeys_that_took = list() + +/obj/structure/flora/tree/pine/xmas/presents/attack_hand(mob/living/user) + if(!user.ckey) + return + + if(ckeys_that_took[user.ckey]) + to_chat(user, "There are no presents with your name on.") + return + to_chat(user, "After a bit of rummaging, you locate a gift with your name on it!") + ckeys_that_took[user.ckey] = TRUE + var/obj/item/G = new gift_type(src) + user.put_in_hands(G) /obj/structure/flora/tree/dead icon = 'icons/obj/flora/deadtrees.dmi' @@ -326,7 +345,7 @@ /obj/structure/flora/rock icon_state = "basalt" - desc = "A volcanic rock." + desc = "A volcanic rock. Pioneers used to ride these babies for miles." icon = 'icons/obj/flora/rocks.dmi' resistance_flags = FIRE_PROOF density = TRUE diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index fe6a8c69c2..b803f3f0c2 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -11,7 +11,7 @@ roundstart = FALSE death = FALSE mob_species = /datum/species/pod - flavour_text = "You are a sentient ecosystem - an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \ + flavour_text = "You are a sentient ecosystem, an example of the mastery over life that your creators possessed. Your masters, benevolent as they were, created uncounted \ seed vaults and spread them across the universe to every planet they could chart. You are in one such seed vault. Your goal is to cultivate and spread life wherever it will go while waiting \ for contact from your creators. Estimated time of last contact: Deployment, 5x10^3 millennia ago." assignedrole = "Lifebringer" @@ -43,7 +43,8 @@ death = FALSE anchored = FALSE density = FALSE - flavour_text = "You are an ash walker. Your tribe worships the Necropolis. The wastes are sacred ground, its monsters a blessed bounty. You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest. You do not know how their magic works, nor where they come from, or the significance of their items." + flavour_text = "You are an ash walker. Your tribe worships the Necropolis. The wastes are sacred ground, its monsters a blessed bounty. \ + You have seen lights in the distance... they foreshadow the arrival of outsiders that seek to tear apart the Necropolis and its domain. Fresh sacrifices for your nest." assignedrole = "Ash Walker" /obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn) @@ -81,7 +82,7 @@ roundstart = FALSE death = FALSE mob_species = /datum/species/shadow - flavour_text = "You are cursed. Years ago, you sacrificed the lives of your trusted friends and the humanity of yourself to reach the Wish Granter. Though you \ + flavour_text = "You are cursed. Years ago, you sacrificed the lives of your trusted friends and the humanity of yourself to reach the Wish Granter. Though you \ did so, it has come at a cost: your very body rejects the light, dooming you to wander endlessly in this horrible wasteland." assignedrole = "Exile" @@ -117,7 +118,7 @@ var/has_owner = FALSE var/can_transfer = TRUE //if golems can switch bodies to this new shell var/mob/living/owner = null //golem's owner if it has one - flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ + flavour_text = "You are a Free Golem. Your family worships The Liberator. In his infinite and divine wisdom, he set your clan free to \ travel the stars with a single declaration: \"Yeah go do whatever.\" Though you are bound to the one who created you, it is customary in your society to repeat those same words to newborn \ golems, so that no golem may ever be forced to serve again." @@ -130,8 +131,8 @@ if(!mapload && A) notify_ghosts("\A [initial(species.prefix)] golem shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) if(has_owner && creator) - flavour_text = "You are a golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ - Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." + flavour_text = "You are a Golem. You move slowly, but are highly resistant to heat and cold as well as blunt trauma. You are unable to wear clothes, but can still use most tools. \ + Serve [creator], and assist [creator.p_them()] in completing [creator.p_their()] goals at any cost." owner = creator /obj/effect/mob_spawn/human/golem/special(mob/living/new_spawn, name) @@ -197,7 +198,7 @@ death = FALSE random = TRUE mob_species = /datum/species/human - flavour_text = "You've been stranded in this godless prison of a planet for longer than you can remember. Each day you barely scrape by, and between the terrible \ + flavour_text = "You've been stranded in this godless prison of a planet for longer than you can remember. Each day you barely scrape by, and between the terrible \ conditions of your makeshift shelter, the hostile creatures, and the ash drakes swooping down from the cloudless skies, all you can wish for is the feel of soft grass between your toes and \ the fresh air of Earth. These thoughts are dispelled by yet another recollection of how you got here... " assignedrole = "Hermit" @@ -244,7 +245,7 @@ name = "broken rejuvenation pod" desc = "A small sleeper typically used to instantly restore minor wounds. This one seems broken, and its occupant is comatose." mob_name = "a translocated vet" - flavour_text = "What...? Where are you? Where are the others? This is still the animal hospital - you should know, you've been an intern here for weeks - but \ + flavour_text = "What...? Where are you? Where are the others? This is still the animal hospital - you should know, you've been an intern here for weeks - but \ everyone's gone. One of the cats scratched you just a few minutes ago. That's why you were in the pod - to heal the scratch. The scabs are still fresh; you see them right now. So where is \ everyone? Where did they go? What happened to the hospital? And is that smoke you smell? You need to find someone else. Maybe they can tell you what happened." assignedrole = "Translocated Vet" @@ -264,7 +265,7 @@ outfit = /datum/outfit/lavalandprisoner roundstart = FALSE death = FALSE - flavour_text = "Good. It seems as though your ship crashed. You're a prisoner, sentenced to hard work in one of Nanotrasen's labor camps, but it seems as \ + flavour_text = "Good. It seems as though your ship crashed. You're a prisoner, sentenced to hard work in one of Nanotrasen's labor camps, but it seems as \ though fate has other plans for you. You remember that you were convicted of " assignedrole = "Escaped Prisoner" @@ -303,8 +304,8 @@ roundstart = FALSE random = TRUE outfit = /datum/outfit/hotelstaff - flavour_text = "You are a staff member of a top-of-the-line space hotel! Cater to guests and DON'T leave the hotel, lest the manager fire you for\ - dereliction of duty!" + flavour_text = "You are a staff member of a top-of-the-line space hotel! Cater to guests and DON'T leave the hotel, lest the manager fire you for\ + dereliction of duty!" assignedrole = "Hotel Staff" /datum/outfit/hotelstaff @@ -319,8 +320,8 @@ name = "hotel security sleeper" mob_name = "hotel security member" outfit = /datum/outfit/hotelstaff/security - flavour_text = "You are a peacekeeper assigned to this hotel to protect the interests of the company while keeping the peace between \ - guests and the staff. Do NOT leave the hotel, as that is grounds for contract termination." + flavour_text = "You are a peacekeeper assigned to this hotel to protect the interests of the company while keeping the peace between \ + guests and the staff. Do NOT leave the hotel, as that is grounds for contract termination." objectives = "Do not leave your assigned hotel. Try and keep the peace between staff and guests, non-lethal force heavily advised if possible." /datum/outfit/hotelstaff/security @@ -355,7 +356,7 @@ /obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell) . = ..() owner = owner_mind - flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for their short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." + flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for their short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." var/area/A = get_area(src) if(!mapload && A) notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) @@ -414,7 +415,9 @@ /obj/effect/mob_spawn/human/syndicate/battlecruiser name = "Syndicate Battlecruiser Ship Operative" - flavour_text = "You are a crewmember aboard the syndicate flagship: the SBC Starfury. Your job is to follow your captain's orders, maintain the ship, and keep the engine running. If you are not familiar with how the supermatter engine functions: do not attempt to start it.

    The armory is not a candy store, and your role is not to assault the station directly, leave that work to the assault operatives.
    " + flavour_text = "You are a crewmember aboard the syndicate flagship: the SBC Starfury. Your job is to follow your captain's orders, maintain the ship, and keep the engine running. If you are not familiar with how the supermatter engine functions: do not attempt to start it.
    \ +
    \ + The armory is not a candy store, and your role is not to assault the station directly, leave that work to the assault operatives.
    " outfit = /datum/outfit/syndicate_empty/SBC /datum/outfit/syndicate_empty/SBC @@ -425,7 +428,9 @@ /obj/effect/mob_spawn/human/syndicate/battlecruiser/assault name = "Syndicate Battlecruiser Assault Operative" - flavour_text = "You are an assault operative aboard the syndicate flagship: the SBC Starfury. Your job is to follow your captain's orders, keep intruders out of the ship, and assault Space Station 13. There is an armory, multiple assault ships, and beam cannons to attack the station with.

    Work as a team with your fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to your ship!
    " + flavour_text = "You are an assault operative aboard the syndicate flagship: the SBC Starfury. Your job is to follow your captain's orders, keep intruders out of the ship, and assault Space Station 13. There is an armory, multiple assault ships, and beam cannons to attack the station with.
    \ +
    \ + Work as a team with your fellow operatives and work out a plan of attack. If you are overwhelmed, escape back to your ship!
    " outfit = /datum/outfit/syndicate_empty/SBC/assault /datum/outfit/syndicate_empty/SBC/assault @@ -441,7 +446,9 @@ /obj/effect/mob_spawn/human/syndicate/battlecruiser/captain name = "Syndicate Battlecruiser Captain" - flavour_text = "You are the captain aboard the syndicate flagship: the SBC Starfury. Your job is to oversee your crew, defend the ship, and destroy Space Station 13. The ship has an armory, multiple ships, beam cannons, and multiple crewmembers to accomplish this goal.

    As the captain, this whole operation falls on your shoulders. You do not need to nuke the station, causing sufficient damage and preventing your ship from being destroyed will be enough.
    " + flavour_text = "You are the captain aboard the syndicate flagship: the SBC Starfury. Your job is to oversee your crew, defend the ship, and destroy Space Station 13. The ship has an armory, multiple ships, beam cannons, and multiple crewmembers to accomplish this goal.
    \ +
    \ + As the captain, this whole operation falls on your shoulders. You do not need to nuke the station, causing sufficient damage and preventing your ship from being destroyed will be enough.
    " outfit = /datum/outfit/syndicate_empty/SBC/assault/captain id_access_list = list(150,151) @@ -467,9 +474,9 @@ death = FALSE random = TRUE mob_species = /datum/species/human - flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + flavour_text = "You are a security officer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/security shoes = /obj/item/clothing/shoes/jackboots id = /obj/item/card/id/away/old/sec @@ -491,9 +498,9 @@ death = FALSE random = TRUE mob_species = /datum/species/human - flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + flavour_text = "You are an engineer working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/engineer shoes = /obj/item/clothing/shoes/workboots id = /obj/item/card/id/away/old/eng @@ -515,9 +522,9 @@ death = FALSE random = TRUE mob_species = /datum/species/human - flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ + flavour_text = "You are a scientist working for Nanotrasen, stationed onboard a state of the art research station. You vaguely recall rushing into a \ cryogenics pod due to an oncoming radiation storm. The last thing you remember is the station's Artifical Program telling you that you would only be asleep for eight hours. As you open \ - your eyes, everything seems rusted and broken, a dark feeling swells in your gut as you climb out of your pod." + your eyes, everything seems rusted and broken, a dark feeling sweels in your gut as you climb out of your pod." uniform = /obj/item/clothing/under/rank/scientist shoes = /obj/item/clothing/shoes/laceup id = /obj/item/card/id/away/old/sci @@ -545,7 +552,7 @@ anchored = TRUE density = FALSE show_flavour = FALSE //Flavour only exists for spawners menu - flavour_text = "You are a space pirate. The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot." + flavour_text = "You are a space pirate. The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot." assignedrole = "Space Pirate" var/rank = "Mate" diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 594dba355d..190dab7011 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -86,7 +86,7 @@ S.use(5) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/mineral/iron) + T.PlaceOnTop(/turf/closed/wall/mineral/iron) transfer_fingerprints_to(T) qdel(src) return @@ -120,7 +120,7 @@ S.use(2) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall) + T.PlaceOnTop(/turf/closed/wall) transfer_fingerprints_to(T) qdel(src) return @@ -150,7 +150,7 @@ S.use(1) to_chat(user, "You fully reinforce the wall.") var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/r_wall) + T.PlaceOnTop(/turf/closed/wall/r_wall) transfer_fingerprints_to(T) qdel(src) return @@ -194,7 +194,7 @@ S.use(2) to_chat(user, "You add the plating.") var/turf/T = get_turf(src) - T.ChangeTurf(text2path("/turf/closed/wall/mineral/[M]")) + T.PlaceOnTop(text2path("/turf/closed/wall/mineral/[M]")) transfer_fingerprints_to(T) qdel(src) return @@ -397,7 +397,7 @@ user.visible_message("[user] plates [src] with runed metal.", "You construct a runed wall.") R.use(1) var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/mineral/cult) + T.PlaceOnTop(/turf/closed/wall/mineral/cult) qdel(src) else @@ -424,7 +424,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You finish a wall.") - T.ChangeTurf(/turf/closed/wall) + T.PlaceOnTop(/turf/closed/wall) qdel(src) return TRUE if(RCD_DECONSTRUCT) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index d6b50d0b1a..5cdadb186c 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -148,4 +148,4 @@ new /obj/item/stack/rods(loc, 4) qdel(src) -#undef VIABLE_MOB_CHECK \ No newline at end of file +#undef VIABLE_MOB_CHECK diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 306d3d0b84..83549a56d2 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -14,7 +14,7 @@ /turf/closed/wall, /obj/structure/falsewall) smooth = SMOOTH_MORE - // flags_1 = CONDUCT_1 + // flags = CONDUCT_1 /obj/structure/lattice/examine(mob/user) ..() @@ -63,7 +63,7 @@ canSmoothWith += /turf/open/indestructible/clock_spawn_room //list overrides are a terrible thing . = ..() ratvar_act() - if(z == ZLEVEL_CITYOFCOGS) + if(is_reebe(z)) resistance_flags |= INDESTRUCTIBLE /obj/structure/lattice/clockwork/ratvar_act() @@ -120,7 +120,7 @@ if(!mapload) new /obj/effect/temp_visual/ratvar/floor/catwalk(loc) new /obj/effect/temp_visual/ratvar/beam/catwalk(loc) - if(z == ZLEVEL_CITYOFCOGS) + if(is_reebe(z)) resistance_flags |= INDESTRUCTIBLE /obj/structure/lattice/catwalk/clockwork/ratvar_act() diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index ceef3ef0c0..d21379cb44 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -184,10 +184,10 @@ var/obj/machinery/manned_turret/turret /obj/item/gun_control/Initialize() - . = ..() - turret = loc - if(!istype(turret)) - return INITIALIZE_HINT_QDEL + . = ..() + turret = loc + if(!istype(turret)) + return INITIALIZE_HINT_QDEL /obj/item/gun_control/Destroy() turret = null @@ -211,4 +211,4 @@ var/obj/machinery/manned_turret/E = user.buckled E.calculated_projectile_vars = calculate_projectile_angle_and_pixel_offsets(user, params) E.direction_track(user, targeted_atom) - E.checkfire(targeted_atom, user) \ No newline at end of file + E.checkfire(targeted_atom, user) diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index c124540d7d..259c72647d 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -37,7 +37,7 @@ /obj/structure/mineral_door/Move() var/turf/T = loc - ..() + . = ..() move_update_air(T) /obj/structure/mineral_door/CollidedWith(atom/movable/AM) diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm index d468e87a34..f4936b1d80 100644 --- a/code/game/objects/structures/mop_bucket.dm +++ b/code/game/objects/structures/mop_bucket.dm @@ -21,4 +21,4 @@ to_chat(user, "You wet [I] in [src].") playsound(loc, 'sound/effects/slosh.ogg', 25, 1) else - return ..() + return ..() \ No newline at end of file diff --git a/code/game/objects/structures/petrified_statue.dm b/code/game/objects/structures/petrified_statue.dm index 36233bc155..02b32c9f80 100644 --- a/code/game/objects/structures/petrified_statue.dm +++ b/code/game/objects/structures/petrified_statue.dm @@ -17,7 +17,7 @@ L.buckled.unbuckle_mob(L,force=1) L.visible_message("[L]'s skin rapidly turns to marble!", "Your body freezes up! Can't... move... can't... think...") L.forceMove(src) - L.disabilities |= MUTE + L.add_disability(DISABILITY_MUTE, STATUE_MUTE) L.faction += "mimic" //Stops mimics from instaqdeling people in statues L.status_flags |= GODMODE obj_integrity = L.health + 100 //stoning damaged mobs will result in easier to shatter statues @@ -59,7 +59,7 @@ if(petrified_mob) petrified_mob.status_flags &= ~GODMODE petrified_mob.forceMove(loc) - petrified_mob.disabilities &= ~MUTE + petrified_mob.remove_disability(DISABILITY_MUTE, STATUE_MUTE) petrified_mob.take_overall_damage((petrified_mob.health - obj_integrity + 100)) //any new damage the statue incurred is transfered to the mob petrified_mob.faction -= "mimic" petrified_mob = null diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 1ae513f847..a8ca42bff5 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -202,7 +202,7 @@ var/new_angle = WRAP(rotation_angle + norm_inc, 180, -180) if(ISINRANGE_EX(norm_inc, -90, 90)) return FALSE - P.Angle = new_angle + P.setAngle(new_angle) return ..() //DOUBLE @@ -229,7 +229,7 @@ var/new_angle = WRAP(rotation_angle + norm_inc, 180, -180) if(ISINRANGE_EX(norm_inc, -90, 90)) new_angle += 180 - P.Angle = new_angle + P.setAngle(new_angle) return ..() //BOX @@ -251,7 +251,7 @@ anchored = TRUE /obj/structure/reflector/box/auto_reflect(obj/item/projectile/P) - P.Angle = rotation_angle + P.setAngle(rotation_angle) return ..() /obj/structure/reflector/ex_act() diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 9df47743a4..616d290610 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -33,7 +33,7 @@ FLOOR SAFES /obj/structure/safe/Initialize(mapload) - ..() + . = ..() if(!mapload) return @@ -55,8 +55,8 @@ FLOOR SAFES if(tumbler_1_pos == tumbler_1_open && tumbler_2_pos == tumbler_2_open) if(user) visible_message("[pick("Spring", "Sprang", "Sproing", "Clunk", "Krunk")]!") - return 1 - return 0 + return TRUE + return FALSE /obj/structure/safe/proc/decrement(num) @@ -83,7 +83,7 @@ FLOOR SAFES /obj/structure/safe/attack_hand(mob/user) user.set_machine(src) var/dat = "
    " - dat += "[open ? "Close" : "Open"] [src] | - [dial * 5] +" + dat += "[open ? "Close" : "Open"] [src] | - [dial] +" if(open) dat += "" for(var/i = contents.len, i>=1, i--) @@ -101,9 +101,9 @@ FLOOR SAFES if(!user.canUseTopic(src)) return - var/canhear = 0 + var/canhear = FALSE if(user.is_holding_item_of_type(/obj/item/clothing/neck/stethoscope)) - canhear = 1 + canhear = TRUE if(href_list["open"]) if(check_unlocked()) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 254ec956c3..ae853b4aed 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -135,11 +135,6 @@ Cargo(brown), Science(purple), Escape(red and white), and Medbay(blue).\nIn the center of the station, you see the Bridge(dark blue).\n\ Around those, you see Hallways/Entrances(light grey), Public Areas(grey), and Maintenance(dark grey)." -/obj/structure/sign/map/left/ceres - icon_state = "map-CS" - desc = "A framed picture of the station.\nClockwise from the top, you see Security (red), Dorms (light-green), Bridge (dark-blue), AI Core (gray), \ - Cargo (brown), Medbay (blue), Arrivals/Departures(orange/cyan), Research (purple), Service (dark-green), and Engineering in the center (yellow)." - /obj/structure/sign/securearea name = "\improper SECURE AREA" desc = "A warning sign which reads 'SECURE AREA'." @@ -246,7 +241,7 @@ desc = "This plaque commemorates those who have fallen in glorious combat. For all the charred, dizzy, and beaten men who have died in its hands." /obj/structure/sign/nanotrasen - name = "\improper NanoTrasen Logo " + name = "\improper Nanotrasen Logo" desc = "A sign with the Nanotrasen Logo on it. Glory to Nanotrasen!" icon_state = "nanotrasen" @@ -354,4 +349,4 @@ /obj/structure/sign/logo name = "nanotrasen logo" desc = "The Nanotrasen corporate logo." - icon_state = "ss13sign-1" + icon_state = "nanotrasen_sign1" diff --git a/code/game/objects/structures/target_stake.dm b/code/game/objects/structures/target_stake.dm index 58b4186ad5..2ff0d5ef7a 100644 --- a/code/game/objects/structures/target_stake.dm +++ b/code/game/objects/structures/target_stake.dm @@ -16,7 +16,7 @@ pinned_target = null /obj/structure/target_stake/Move() - ..() + . = ..() if(pinned_target) pinned_target.forceMove(loc) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 77b992704a..c7595f3981 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -296,8 +296,7 @@ /obj/machinery/shower/proc/wash_obj(obj/O) - O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) - . = O.clean_blood() + . = O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) if(isitem(O)) var/obj/item/I = O @@ -310,7 +309,6 @@ var/turf/tile = loc tile.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) tile.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - tile.clean_blood() for(var/obj/effect/E in tile) if(is_cleanable(E)) qdel(E) @@ -361,7 +359,7 @@ else if(H.w_uniform && wash_obj(H.w_uniform)) H.update_inv_w_uniform() if(washgloves) - H.clean_blood() + H.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(H.shoes && washshoes && wash_obj(H.shoes)) H.update_inv_shoes() if(H.wear_mask && washmask && wash_obj(H.wear_mask)) @@ -378,9 +376,9 @@ else if(M.wear_mask && wash_obj(M.wear_mask)) M.update_inv_wear_mask(0) - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) else - L.clean_blood() + L.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/machinery/shower/proc/contamination_cleanse(atom/movable/thing) var/datum/component/radioactive/healthy_green_glow = thing.GetComponent(/datum/component/radioactive) @@ -473,8 +471,7 @@ H.regenerate_icons() user.drowsyness = max(user.drowsyness - rand(2,3), 0) //Washing your face wakes you up if you're falling asleep else - user.clean_blood() - + user.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /obj/structure/sink/attackby(obj/item/O, mob/living/user, params) if(busy) @@ -530,7 +527,7 @@ busy = FALSE return 1 busy = FALSE - O.clean_blood() + O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) O.acid_level = 0 create_reagents(5) reagents.add_reagent(dispensedreagent, 5) @@ -572,7 +569,6 @@ qdel(src) - //Shower Curtains// //Defines used are pre-existing in layers.dm// diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index bb5be3a501..0949f540c7 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -47,7 +47,7 @@ /obj/structure/windoor_assembly/Move() var/turf/T = loc - ..() + . = ..() setDir(ini_dir) move_update_air(T) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index f5aec5c274..0986f2f66e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -357,7 +357,7 @@ /obj/structure/window/Move() var/turf/T = loc - ..() + . = ..() setDir(ini_dir) move_update_air(T) diff --git a/code/game/say.dm b/code/game/say.dm index 570974c0bc..817238f427 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -4,18 +4,18 @@ And the base of the send_speech() proc, which is the core of saycode. */ GLOBAL_LIST_INIT(freqtospan, list( - "1351" = "sciradio", - "1355" = "medradio", - "1357" = "engradio", - "1347" = "suppradio", - "1349" = "servradio", - "1359" = "secradio", - "1353" = "comradio", - "1447" = "aiprivradio", - "1213" = "syndradio", - "1337" = "centcomradio", - "1215" = "redteamradio", - "1217" = "blueteamradio" + "[FREQ_SCIENCE]" = "sciradio", + "[FREQ_MEDICAL]" = "medradio", + "[FREQ_ENGINEERING]" = "engradio", + "[FREQ_SUPPLY]" = "suppradio", + "[FREQ_SERVICE]" = "servradio", + "[FREQ_SECURITY]" = "secradio", + "[FREQ_COMMAND]" = "comradio", + "[FREQ_AI_PRIVATE]" = "aiprivradio", + "[FREQ_SYNDICATE]" = "syndradio", + "[FREQ_CENTCOM]" = "centcomradio", + "[FREQ_CTF_RED]" = "redteamradio", + "[FREQ_CTF_BLUE]" = "blueteamradio" )) /atom/movable/proc/say(message, datum/language/language = null) @@ -168,6 +168,41 @@ GLOBAL_LIST_INIT(freqtospan, list( var/atom/movable/source var/obj/item/device/radio/radio +INITIALIZE_IMMEDIATE(/atom/movable/virtualspeaker) +/atom/movable/virtualspeaker/Initialize(mapload, atom/movable/M, radio) + . = ..() + radio = radio + source = M + if (istype(M)) + name = M.GetVoice() + verb_say = M.verb_say + verb_ask = M.verb_ask + verb_exclaim = M.verb_exclaim + verb_yell = M.verb_yell + + // The mob's job identity + if(ishuman(M)) + // Humans use their job as seen on the crew manifest. This is so the AI + // can know their job even if they don't carry an ID. + var/datum/data/record/findjob = find_record("name", name, GLOB.data_core.general) + if(findjob) + job = findjob.fields["rank"] + else + job = "Unknown" + else if(iscarbon(M)) // Carbon nonhuman + job = "No ID" + else if(isAI(M)) // AI + job = "AI" + else if(iscyborg(M)) // Cyborg + var/mob/living/silicon/robot/B = M + job = "[B.designation] Cyborg" + else if(istype(M, /mob/living/silicon/pai)) // Personal AI (pAI) + job = "Personal AI" + else if(isobj(M)) // Cold, emotionless machines + job = "Machine" + else // Unidentifiable mob + job = "Unknown" + /atom/movable/virtualspeaker/GetJob() return job diff --git a/code/game/sound.dm b/code/game/sound.dm index 9cfa197738..48accadb59 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -149,6 +149,7 @@ soundin = pick('sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg') if ("can_open") soundin = pick('sound/effects/can_open1.ogg', 'sound/effects/can_open2.ogg', 'sound/effects/can_open3.ogg') + //START OF CIT CHANGES - adds random vore sounds if ("struggle_sound") soundin = pick( 'sound/vore/pred/struggle_01.ogg','sound/vore/pred/struggle_02.ogg','sound/vore/pred/struggle_03.ogg', 'sound/vore/pred/struggle_04.ogg','sound/vore/pred/struggle_05.ogg') @@ -179,6 +180,7 @@ 'sound/vore/prey/death_04.ogg','sound/vore/prey/death_05.ogg','sound/vore/prey/death_06.ogg', 'sound/vore/prey/death_07.ogg','sound/vore/prey/death_08.ogg','sound/vore/prey/death_09.ogg', 'sound/vore/prey/death_10.ogg') + //END OF CIT CHANGES if("bullet_miss") soundin = pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg') if("gun_dry_fire") @@ -190,7 +192,7 @@ if("gun_remove_empty_magazine") soundin = pick('sound/weapons/gun_magazine_remove_empty_1.ogg', 'sound/weapons/gun_magazine_remove_empty_2.ogg', 'sound/weapons/gun_magazine_remove_empty_3.ogg', 'sound/weapons/gun_magazine_remove_empty_4.ogg') if("gun_slide_lock") - soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg') + soundin = pick('sound/weapons/gun_slide_lock_1.ogg', 'sound/weapons/gun_slide_lock_2.ogg', 'sound/weapons/gun_slide_lock_3.ogg', 'sound/weapons/gun_slide_lock_4.ogg', 'sound/weapons/gun_slide_lock_5.ogg') if("law") soundin = pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg') if("honkbot_e") diff --git a/code/game/turfs/ChangeTurf.dm b/code/game/turfs/ChangeTurf.dm new file mode 100644 index 0000000000..ce5086fe4c --- /dev/null +++ b/code/game/turfs/ChangeTurf.dm @@ -0,0 +1,247 @@ +/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, flags) + // Remove all atoms except observers, landmarks, docking ports + var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) + var/list/allowed_contents = typecache_filter_list_reverse(GetAllContentsIgnoring(ignore_typecache), ignored_atoms) + allowed_contents -= src + for(var/i in 1 to allowed_contents.len) + var/thing = allowed_contents[i] + qdel(thing, force=TRUE) + + var/turf/newT = ChangeTurf(turf_type, baseturf_type, flags) + + SSair.remove_from_active(newT) + newT.CalculateAdjacentTurfs() + SSair.add_to_active(newT,1) + +/turf/proc/copyTurf(turf/T) + if(T.type != type) + var/obj/O + if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay + O = new() + O.underlays.Add(T) + T.ChangeTurf(type) + for(var/group in decals) + T.add_decal(decals[group],group) + if(underlays.len) + T.underlays = O.underlays + if(T.icon_state != icon_state) + T.icon_state = icon_state + if(T.icon != icon) + T.icon = icon + if(color) + T.atom_colours = atom_colours.Copy() + T.update_atom_colour() + if(T.dir != dir) + T.setDir(dir) + return T + +//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself +/turf/proc/TerraformTurf(path, new_baseturf, flags) + return ChangeTurf(path, new_baseturf, flags) + +// Creates a new turf +// new_baseturfs can be either a single type or list of types, formated the same as baseturfs. see turf.dm +/turf/proc/ChangeTurf(path, list/new_baseturfs, flags) + if(!path) + return + if(path == /turf/open/space/basic) + // basic doesn't initialize and this will cause issues + // no warning though because this can happen naturaly as a result of it being built on top of + path = /turf/open/space + if(!GLOB.use_preloader && path == type && !(flags & CHANGETURF_FORCEOP)) // Don't no-op if the map loader requires it to be reconstructed + return src + + var/old_opacity = opacity + var/old_dynamic_lighting = dynamic_lighting + var/old_affecting_lights = affecting_lights + var/old_lighting_object = lighting_object + var/old_corners = corners + + var/old_exl = explosion_level + var/old_exi = explosion_id + var/old_bp = blueprint_data + blueprint_data = null + + var/list/old_baseturfs = baseturfs + changing_turf = TRUE + + qdel(src) //Just get the side effects and call Destroy + var/turf/W = new path(src) + + if(new_baseturfs) + W.baseturfs = new_baseturfs + else + W.baseturfs = old_baseturfs + + W.explosion_id = old_exi + W.explosion_level = old_exl + + if(!(flags & CHANGETURF_DEFER_CHANGE)) + W.AfterChange(flags) + + W.blueprint_data = old_bp + + if(SSlighting.initialized) + recalc_atom_opacity() + lighting_object = old_lighting_object + affecting_lights = old_affecting_lights + corners = old_corners + if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) + reconsider_lights() + + if (dynamic_lighting != old_dynamic_lighting) + if (IS_DYNAMIC_LIGHTING(src)) + lighting_build_overlay() + else + lighting_clear_overlay() + + for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm + S.update_starlight() + + return W + +// Take off the top layer turf and replace it with the next baseturf down +/turf/proc/ScrapeAway() + if(length(baseturfs)) + var/list/new_baseturfs = baseturfs + var/turf_type = new_baseturfs[new_baseturfs.len] + new_baseturfs.len-- + switch(new_baseturfs.len) + if(1) + new_baseturfs = new_baseturfs[1] + if(0) + new_baseturfs = turf_type + // We must never end up with a situation where there is no baseturf + WARNING("turf of type [type] had a baseturfs length 1 still in list form.") + return ChangeTurf(turf_type, new_baseturfs) + + if(baseturfs == type) + return src + + return ChangeTurf(baseturfs, baseturfs) // The bottom baseturf will never go away + +// Take the input as baseturfs and put it underneath the current baseturfs +// If fake_turf_type is provided and new_baseturfs is not the baseturfs list will be created identical to the turf type's +// If both or just new_baseturfs is provided they will be inserted below the existing baseturfs +/turf/proc/PlaceOnBottom(list/new_baseturfs, turf/fake_turf_type) + if(fake_turf_type) + if(!new_baseturfs) + var/list/old_baseturfs = baseturfs.Copy() + assemble_baseturfs(fake_turf_type) + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs += old_baseturfs + return + else if(!length(new_baseturfs)) + new_baseturfs = list(new_baseturfs, fake_turf_type) + else + new_baseturfs += fake_turf_type + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs.Insert(1, new_baseturfs) + +// Make a new turf and put it on top +// The args behave identical to PlaceOnBottom except they go on top +/turf/proc/PlaceOnTop(list/new_baseturfs, turf/fake_turf_type) + var/turf/newT + if(fake_turf_type) + if(!new_baseturfs) // If no baseturfs list then we want to create one from the turf type + var/list/old_baseturfs = baseturfs.Copy() + newT = ChangeTurf(fake_turf_type) + newT.assemble_baseturfs(initial(fake_turf_type.baseturfs)) // The baseturfs list is created like roundstart + if(!length(baseturfs)) + newT.baseturfs = list(baseturfs) + newT.baseturfs.Insert(1, old_baseturfs) // The old baseturfs are put underneath + return newT + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs += type + baseturfs += new_baseturfs + return ChangeTurf(fake_turf_type) + if(!length(baseturfs)) + baseturfs = list(baseturfs) + baseturfs += type + var/turf/change_type + if(length(new_baseturfs)) + change_type = new_baseturfs[new_baseturfs.len] + new_baseturfs.len-- + if(new_baseturfs.len) + baseturfs += new_baseturfs + else + change_type = new_baseturfs + return ChangeTurf(change_type) + +// Copy an existing turf and put it on top +/turf/proc/CopyOnTop(turf/copytarget, ignore_bottom=1, depth=INFINITY) + var/list/new_baseturfs = list() + new_baseturfs += baseturfs + new_baseturfs += type + + if(depth) + var/list/target_baseturfs = copytarget.baseturfs + var/base_len = length(target_baseturfs) + if(!base_len) + if(!ignore_bottom) + new_baseturfs += target_baseturfs + else if(base_len > ignore_bottom) + if(base_len - ignore_bottom <= depth) + new_baseturfs += target_baseturfs.Copy(ignore_bottom + 1) + else + new_baseturfs += target_baseturfs.Copy(base_len - depth) + + var/turf/newT = copytarget.copyTurf(src) + newT.baseturfs = new_baseturfs + return newT + +/turf/proc/AfterChange(flags) //called after a turf has been replaced in ChangeTurf() + levelupdate() + CalculateAdjacentTurfs() + + //update firedoor adjacency + var/list/turfs_to_check = get_adjacent_open_turfs(src) | src + for(var/I in turfs_to_check) + var/turf/T = I + for(var/obj/machinery/door/firedoor/FD in T) + FD.CalculateAffectingAreas() + + queue_smooth_neighbors(src) + + HandleTurfChange(src) + +/turf/open/AfterChange(flags) + ..() + RemoveLattice() + if(!(flags & CHANGETURF_IGNORE_AIR)) + Assimilate_Air() + +//////Assimilate Air////// +/turf/open/proc/Assimilate_Air() + var/turf_count = LAZYLEN(atmos_adjacent_turfs) + if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update. + return + + var/datum/gas_mixture/total = new//Holders to assimilate air from nearby turfs + var/list/total_gases = total.gases + + for(var/T in atmos_adjacent_turfs) + var/turf/open/S = T + if(!S.air) + continue + var/list/S_gases = S.air.gases + for(var/id in S_gases) + ASSERT_GAS(id, total) + total_gases[id][MOLES] += S_gases[id][MOLES] + total.temperature += S.air.temperature + + air.copy_from(total) + + var/list/air_gases = air.gases + for(var/id in air_gases) + air_gases[id][MOLES] /= turf_count //Averages contents of the turfs, ignoring walls and the like + + air.temperature /= turf_count + SSair.add_to_active(src) + +/turf/proc/ReplaceWithLattice() + ScrapeAway() + new /obj/structure/lattice(locate(x, y, z)) \ No newline at end of file diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm index 1dc749dc70..c9848fb793 100644 --- a/code/game/turfs/closed.dm +++ b/code/game/turfs/closed.dm @@ -18,8 +18,7 @@ /turf/closed/CanPass(atom/movable/mover, turf/target) if(istype(mover) && (mover.pass_flags & PASSCLOSEDTURF)) return TRUE - else - ..() + return ..() /turf/closed/indestructible name = "wall" @@ -59,21 +58,6 @@ if("icon") SStitle.icon = icon -/turf/closed/indestructible/reebe - name = "void" - icon_state = "reebe" - opacity = FALSE - baseturf = /turf/closed/indestructible/reebe - -/turf/closed/indestructible/reebe/ratvar_act() - return - -/turf/closed/indestructible/reebe/narsie_act() - return - -/turf/closed/indestructible/reebe/CollidedWith(atom/movable/AM) - playsound(src, 'sound/effects/bamf.ogg', 25, TRUE) - /turf/closed/indestructible/riveted icon = 'icons/turf/walls/riveted.dmi' icon_state = "riveted" @@ -137,7 +121,7 @@ icon = 'icons/turf/walls.dmi' icon_state = "necro" explosion_block = 50 - baseturf = /turf/closed/indestructible/necropolis + baseturfs = /turf/closed/indestructible/necropolis /turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' @@ -151,7 +135,7 @@ icon_state = "wall" canSmoothWith = list(/turf/closed/indestructible/riveted/boss, /turf/closed/indestructible/riveted/boss/see_through) explosion_block = 50 - baseturf = /turf/closed/indestructible/riveted/boss + baseturfs = /turf/closed/indestructible/riveted/boss /turf/closed/indestructible/riveted/boss/see_through opacity = FALSE @@ -165,4 +149,4 @@ name = "wall" desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." icon = 'icons/turf/walls/hierophant_wall.dmi' - icon_state = "wall" + icon_state = "wall" \ No newline at end of file diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 0eddbc411e..b8d46977be 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -30,7 +30,7 @@ desc = "It's regarding you suspiciously." icon = 'icons/turf/floors.dmi' icon_state = "necro1" - baseturf = /turf/open/indestructible/necropolis + baseturfs = /turf/open/indestructible/necropolis initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/open/indestructible/necropolis/Initialize() @@ -45,7 +45,7 @@ name = "necropolis floor" icon = 'icons/turf/boss_floors.dmi' icon_state = "boss" - baseturf = /turf/open/indestructible/boss + baseturfs = /turf/open/indestructible/boss initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/open/indestructible/boss/air @@ -54,7 +54,7 @@ /turf/open/indestructible/hierophant icon = 'icons/turf/floors/hierophant_floor.dmi' initial_gas_mix = LAVALAND_DEFAULT_ATMOS - baseturf = /turf/open/indestructible/hierophant + baseturfs = /turf/open/indestructible/hierophant smooth = SMOOTH_TRUE /turf/open/indestructible/hierophant/two @@ -71,7 +71,7 @@ name = "cogmetal" desc = "Brass plating that gently radiates heat. For some reason, it reminds you of blood." icon_state = "reebe" - baseturf = /turf/open/indestructible/clock_spawn_room + baseturfs = /turf/open/indestructible/clock_spawn_room /turf/open/indestructible/clock_spawn_room/Entered() ..() @@ -88,7 +88,7 @@ /turf/open/indestructible/clock_spawn_room/proc/port_servants() . = FALSE for(var/mob/living/L in src) - if(is_servant_of_ratvar(L)) + if(is_servant_of_ratvar(L) && L.stat != DEAD) . = TRUE L.forceMove(get_turf(pick(GLOB.servant_spawns))) visible_message("[L] vanishes in a flash of red!") @@ -173,7 +173,7 @@ for(var/mob/living/simple_animal/slime/M in src) M.apply_water() - clean_blood() + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_WEAK) for(var/obj/effect/O in src) if(is_cleanable(O)) qdel(O) diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index 3f45d5e127..dec9deac51 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -2,7 +2,7 @@ /turf/open/chasm name = "chasm" desc = "Watch your step." - baseturf = /turf/open/chasm + baseturfs = /turf/open/chasm smooth = SMOOTH_TRUE | SMOOTH_BORDER | SMOOTH_MORE icon = 'icons/turf/floors/chasms.dmi' icon_state = "smooth" @@ -55,7 +55,7 @@ playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") // Create a floor, which has this chasm underneath it - ChangeTurf(/turf/open/floor/plating, type) + PlaceOnTop(/turf/open/floor/plating) else to_chat(user, "You need one floor tile to build a floor!") else @@ -67,7 +67,7 @@ // Naive "down" which just subtracts a z-level /turf/open/chasm/straight_down - baseturf = /turf/open/chasm/straight_down + baseturfs = /turf/open/chasm/straight_down /turf/open/chasm/straight_down/Initialize() . = ..() @@ -78,7 +78,7 @@ /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland light_range = 1.9 //slightly less range than lava light_power = 0.65 //less bright, too light_color = LIGHT_COLOR_LAVA //let's just say you're falling into lava, that makes sense right @@ -89,7 +89,7 @@ icon = 'icons/turf/floors/junglechasm.dmi' initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/jungle + baseturfs = /turf/open/chasm/jungle /turf/open/chasm/jungle/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) underlay_appearance.icon = 'icons/turf/floors.dmi' @@ -97,7 +97,7 @@ return TRUE /turf/open/chasm/jungle/straight_down - baseturf = /turf/open/chasm/jungle/straight_down + baseturfs = /turf/open/chasm/jungle/straight_down /turf/open/chasm/jungle/straight_down/Initialize(mapload) . = ..() diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 3978bc802d..db12cf3530 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -51,13 +51,13 @@ if(severity != 1 && shielded && target != src) return if(target == src) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(target != null) severity = 3 switch(severity) if(1) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(2) switch(pick(1,2;75,3)) if(1) @@ -65,7 +65,7 @@ if(prob(33)) new /obj/item/stack/sheet/metal(src) if(2) - src.ChangeTurf(src.baseturf) + ScrapeAway() if(3) if(prob(80)) src.break_tile_to_plating() @@ -119,7 +119,7 @@ /turf/open/floor/proc/make_plating() return ChangeTurf(/turf/open/floor/plating) -/turf/open/floor/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/ChangeTurf(path, new_baseturf, flags) if(!isfloorturf(src)) return ..() //fucking turfs switch the fucking src of the fucking running procs if(!ispath(path, /turf/open/floor)) @@ -202,7 +202,7 @@ ChangeTurf(/turf/open/floor/clockwork) /turf/open/floor/acid_melt() - ChangeTurf(baseturf) + ScrapeAway() /turf/open/floor/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) @@ -223,7 +223,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a wall.") - ChangeTurf(/turf/closed/wall) + PlaceOnTop(/turf/closed/wall) return TRUE if(RCD_AIRLOCK) if(locate(/obj/machinery/door/airlock) in src) @@ -244,10 +244,9 @@ A.autoclose = TRUE return TRUE if(RCD_DECONSTRUCT) - if(istype(src, baseturf)) + if(ScrapeAway() == src) return FALSE to_chat(user, "You deconstruct [src].") - ChangeTurf(baseturf) return TRUE if(RCD_WINDOWGRILLE) if(locate(/obj/structure/grille) in src) diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index f0fb7c4448..889638b27e 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -47,7 +47,7 @@ icon_state = "light_off" -/turf/open/floor/light/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/light/ChangeTurf(path, new_baseturf, flags) set_light(0) return ..() diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 3e7540cdf6..dc229971d6 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -142,10 +142,13 @@ name = "clockwork floor" desc = "Tightly-pressed brass tiles. They emit minute vibration." icon_state = "plating" - baseturf = /turf/open/floor/clockwork + baseturfs = /turf/open/floor/clockwork var/uses_overlay = TRUE var/obj/effect/clockwork/overlay/floor/realappearence +/turf/open/floor/clockwork/Bless() //Who needs holy blessings when you have DADDY RATVAR? + return + /turf/open/floor/clockwork/Initialize() . = ..() if(uses_overlay) @@ -161,9 +164,7 @@ return ..() /turf/open/floor/clockwork/ReplaceWithLattice() - if(baseturf == type) - return - ..() + . = ..() for(var/obj/structure/lattice/L in src) L.ratvar_act() @@ -196,7 +197,7 @@ L.adjustToxLoss(-3, TRUE, TRUE) /turf/open/floor/clockwork/attackby(obj/item/I, mob/living/user, params) - if(baseturf == type) + if(baseturfs == type) return if(istype(I, /obj/item/crowbar)) user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") @@ -225,7 +226,7 @@ name = "cogplate" desc = "Warm brass plating. You can feel it gently vibrating, as if machinery is on the other side." icon_state = "reebe" - baseturf = /turf/open/floor/clockwork/reebe + baseturfs = /turf/open/floor/clockwork/reebe uses_overlay = FALSE /turf/open/floor/bluespace diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 27afebef7c..a406f1e148 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -109,10 +109,10 @@ if(prob(I.force * 20 - 25)) user.visible_message("[user] smashes through [src]!", \ "You smash through [src] with [I]!") - ChangeTurf(baseturf) + ScrapeAway() else to_chat(user, "You hit [src], to no effect!") /turf/open/floor/plating/foam/ex_act() ..() - ChangeTurf(baseturf) + ScrapeAway() diff --git a/code/game/turfs/simulated/floor/plating/asteroid.dm b/code/game/turfs/simulated/floor/plating/asteroid.dm index 1419036d07..8ffcab7949 100644 --- a/code/game/turfs/simulated/floor/plating/asteroid.dm +++ b/code/game/turfs/simulated/floor/plating/asteroid.dm @@ -5,7 +5,7 @@ /turf/open/floor/plating/asteroid //floor piece name = "asteroid sand" - baseturf = /turf/open/floor/plating/asteroid + baseturfs = /turf/open/floor/plating/asteroid icon = 'icons/turf/floors.dmi' icon_state = "asteroid" icon_plating = "asteroid" @@ -59,9 +59,9 @@ /turf/open/floor/plating/asteroid/singularity_act() - if(turf_z_is_planet(src)) + if(is_planet_level(z)) return ..() - ChangeTurf(/turf/open/space) + ScrapeAway() /turf/open/floor/plating/asteroid/ex_act(severity, target) . = SendSignal(COMSIG_ATOM_EX_ACT, severity, target) @@ -70,7 +70,7 @@ /turf/open/floor/plating/asteroid/basalt name = "volcanic floor" - baseturf = /turf/open/floor/plating/asteroid/basalt + baseturfs = /turf/open/floor/plating/asteroid/basalt icon = 'icons/turf/floors.dmi' icon_state = "basalt" icon_plating = "basalt" @@ -79,7 +79,7 @@ floor_variance = 15 /turf/open/floor/plating/asteroid/basalt/lava //lava underneath - baseturf = /turf/open/lava/smooth + baseturfs = /turf/open/lava/smooth /turf/open/floor/plating/asteroid/basalt/airless initial_gas_mix = "TEMP=2.7" @@ -103,7 +103,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface @@ -206,7 +206,7 @@ if(istype(tunnel)) // Small chance to have forks in our tunnel; otherwise dig our tunnel. if(i > 3 && prob(20)) - var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type,FALSE,FALSE,TRUE) + var/turf/open/floor/plating/asteroid/airless/cave/C = tunnel.ChangeTurf(data_having_type, null, CHANGETURF_IGNORE_AIR) C.going_backwards = FALSE C.produce_tunnel_from_data(rand(10, 15), dir) else @@ -232,7 +232,7 @@ SpawnFlora(T) SpawnMonster(T) - T.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + T.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) /turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T) if(prob(30)) @@ -279,7 +279,7 @@ name = "snow" desc = "Looks cold." icon = 'icons/turf/snow.dmi' - baseturf = /turf/open/floor/plating/asteroid/snow + baseturfs = /turf/open/floor/plating/asteroid/snow icon_state = "snow" icon_plating = "snow" initial_gas_mix = "TEMP=180" diff --git a/code/game/turfs/simulated/floor/plating/dirt.dm b/code/game/turfs/simulated/floor/plating/dirt.dm index 3a02935657..a9ddd4180e 100644 --- a/code/game/turfs/simulated/floor/plating/dirt.dm +++ b/code/game/turfs/simulated/floor/plating/dirt.dm @@ -3,7 +3,7 @@ desc = "Upon closer examination, it's still dirt." icon = 'icons/turf/floors.dmi' icon_state = "dirt" - baseturf = /turf/open/chasm/jungle/straight_down + baseturfs = /turf/open/chasm/jungle/straight_down initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE diff --git a/code/game/turfs/simulated/floor/plating/misc_plating.dm b/code/game/turfs/simulated/floor/plating/misc_plating.dm index 259e374869..d08d93ef2c 100644 --- a/code/game/turfs/simulated/floor/plating/misc_plating.dm +++ b/code/game/turfs/simulated/floor/plating/misc_plating.dm @@ -37,7 +37,7 @@ smooth = SMOOTH_MORE|SMOOTH_BORDER var/smooth_icon = 'icons/turf/floors/ash.dmi' desc = "The ground is covered in volcanic ash." - baseturf = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface + baseturfs = /turf/open/floor/plating/ashplanet/wateryrock //I assume this will be a chasm eventually, once this becomes an actual surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE attachment_holes = FALSE @@ -91,24 +91,24 @@ name = "sand" desc = "Surf's up." icon_state = "sand" - baseturf = /turf/open/floor/plating/beach/sand + baseturfs = /turf/open/floor/plating/beach/sand /turf/open/floor/plating/beach/coastline_t name = "coastline" desc = "Tide's high tonight. Charge your batons." icon_state = "sandwater_t" - baseturf = /turf/open/floor/plating/beach/coastline_t + baseturfs = /turf/open/floor/plating/beach/coastline_t /turf/open/floor/plating/beach/coastline_b name = "coastline" icon_state = "sandwater_b" - baseturf = /turf/open/floor/plating/beach/coastline_b + baseturfs = /turf/open/floor/plating/beach/coastline_b /turf/open/floor/plating/beach/water name = "water" desc = "You get the feeling that nobody's bothered to actually make this water functional..." icon_state = "water" - baseturf = /turf/open/floor/plating/beach/water + baseturfs = /turf/open/floor/plating/beach/water /turf/open/floor/plating/ironsand @@ -129,7 +129,7 @@ icon = 'icons/turf/snow.dmi' icon_state = "ice" temperature = 180 - baseturf = /turf/open/floor/plating/ice + baseturfs = /turf/open/floor/plating/ice slowdown = 1 wet = TURF_WET_PERMAFROST attachment_holes = FALSE diff --git a/code/game/turfs/simulated/floor/reinf_floor.dm b/code/game/turfs/simulated/floor/reinf_floor.dm index 74354e78c7..f53e62dba7 100644 --- a/code/game/turfs/simulated/floor/reinf_floor.dm +++ b/code/game/turfs/simulated/floor/reinf_floor.dm @@ -48,14 +48,14 @@ if(severity != 1 && shielded && target != src) return if(target == src) - src.ChangeTurf(src.baseturf) + ScrapeAway() return switch(severity) if(1) if(prob(80)) ReplaceWithLattice() else if(prob(50)) - ChangeTurf(src.baseturf) + ScrapeAway() else make_plating(1) if(2) @@ -122,7 +122,7 @@ be_removed() return ..() -/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) +/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, flags) if(path != type) be_removed() return ..() diff --git a/code/game/turfs/simulated/lava.dm b/code/game/turfs/simulated/lava.dm index d5dbd79ff5..42ede622a1 100644 --- a/code/game/turfs/simulated/lava.dm +++ b/code/game/turfs/simulated/lava.dm @@ -4,7 +4,7 @@ name = "lava" icon_state = "lava" gender = PLURAL //"That's some lava." - baseturf = /turf/open/lava //lava all the way down + baseturfs = /turf/open/lava //lava all the way down slowdown = 2 light_range = 2 @@ -128,7 +128,7 @@ /turf/open/lava/smooth name = "lava" - baseturf = /turf/open/lava/smooth + baseturfs = /turf/open/lava/smooth icon = 'icons/turf/floors/lava.dmi' icon_state = "unsmooth" smooth = SMOOTH_MORE | SMOOTH_BORDER @@ -137,7 +137,7 @@ /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland /turf/open/lava/smooth/airless initial_gas_mix = "TEMP=2.7" diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 2a0147c82a..c737848749 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -7,7 +7,7 @@ var/smooth_icon = 'icons/turf/smoothrocks.dmi' smooth = SMOOTH_MORE|SMOOTH_BORDER canSmoothWith - baseturf = /turf/open/floor/plating/asteroid/airless + baseturfs = /turf/open/floor/plating/asteroid/airless initial_gas_mix = "TEMP=2.7" opacity = 1 density = TRUE @@ -78,7 +78,10 @@ SSblackbox.record_feedback("tally", "ore_mined", 1, mineralType) for(var/obj/effect/temp_visual/mining_overlay/M in src) qdel(M) - ChangeTurf(turf_type, FALSE, defer_change) + var/flags = NONE + if(defer_change) // TODO: make the defer change var a var for any changeturf flag + flags = CHANGETURF_DEFER_CHANGE + ChangeTurf(turf_type, null, flags) addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE) playsound(src, 'sound/effects/break_stone.ogg', 50, 1) //beautiful destruction @@ -111,7 +114,7 @@ return /turf/closed/mineral/acid_melt() - ChangeTurf(baseturf) + ScrapeAway() /turf/closed/mineral/ex_act(severity, target) ..() @@ -153,7 +156,7 @@ M.mineralAmt = rand(1, 5) M.environment_type = src.environment_type M.turf_type = src.turf_type - M.baseturf = src.baseturf + M.baseturfs = src.baseturfs src = M M.levelupdate() @@ -168,7 +171,7 @@ /turf/closed/mineral/random/high_chance/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 mineralSpawnChanceList = list( @@ -189,7 +192,7 @@ /turf/closed/mineral/random/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -211,7 +214,7 @@ /turf/closed/mineral/random/labormineral/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 mineralSpawnChanceList = list( @@ -230,7 +233,7 @@ /turf/closed/mineral/iron/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -244,7 +247,7 @@ /turf/closed/mineral/uranium/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -258,7 +261,7 @@ /turf/closed/mineral/diamond/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -272,7 +275,7 @@ /turf/closed/mineral/gold/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -286,7 +289,7 @@ /turf/closed/mineral/silver/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -300,7 +303,7 @@ /turf/closed/mineral/titanium/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -314,7 +317,7 @@ /turf/closed/mineral/plasma/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -337,7 +340,7 @@ /turf/closed/mineral/bscrystal/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 @@ -345,13 +348,13 @@ /turf/closed/mineral/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt - baseturf = /turf/open/floor/plating/asteroid/basalt + baseturfs = /turf/open/floor/plating/asteroid/basalt initial_gas_mix = LAVALAND_DEFAULT_ATMOS /turf/closed/mineral/volcanic/lava_land_surface environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/lava/smooth/lava_land_surface + baseturfs = /turf/open/lava/smooth/lava_land_surface defer_change = 1 /turf/closed/mineral/ash_rock //wall piece @@ -361,7 +364,7 @@ icon_state = "rock2" smooth = SMOOTH_MORE|SMOOTH_BORDER canSmoothWith = list (/turf/closed) - baseturf = /turf/open/floor/plating/ashplanet/wateryrock + baseturfs = /turf/open/floor/plating/ashplanet/wateryrock initial_gas_mix = LAVALAND_DEFAULT_ATMOS environment_type = "waste" turf_type = /turf/open/floor/plating/ashplanet/rocky @@ -459,13 +462,16 @@ G.quality = 2 G.icon_state = "Gibtonite ore 2" - ChangeTurf(turf_type, FALSE, defer_change) + var/flags = NONE + if(defer_change) + flags = CHANGETURF_DEFER_CHANGE + ChangeTurf(turf_type, null, flags) addtimer(CALLBACK(src, .proc/AfterChange), 1, TIMER_UNIQUE) /turf/closed/mineral/gibtonite/volcanic environment_type = "basalt" turf_type = /turf/open/floor/plating/asteroid/basalt/lava_land_surface - baseturf = /turf/open/floor/plating/asteroid/basalt/lava_land_surface + baseturfs = /turf/open/floor/plating/asteroid/basalt/lava_land_surface initial_gas_mix = LAVALAND_DEFAULT_ATMOS defer_change = 1 diff --git a/code/game/turfs/simulated/reebe_void.dm b/code/game/turfs/simulated/reebe_void.dm index 2e0246df83..3e40ebed64 100644 --- a/code/game/turfs/simulated/reebe_void.dm +++ b/code/game/turfs/simulated/reebe_void.dm @@ -2,7 +2,7 @@ name = "void" icon_state = "reebemap" layer = SPACE_LAYER - baseturf = /turf/open/indestructible/reebe_void + baseturfs = /turf/open/indestructible/reebe_void planetary_atmos = TRUE /turf/open/indestructible/reebe_void/Initialize(mapload) diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm index 165af6ee68..a5753edcd1 100644 --- a/code/game/turfs/simulated/river.dm +++ b/code/game/turfs/simulated/river.dm @@ -4,7 +4,7 @@ #define RANDOM_LOWER_X 50 #define RANDOM_LOWER_Y 50 -/proc/spawn_rivers(target_z = 5, nodes = 4, turf_type = /turf/open/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y) +/proc/spawn_rivers(target_z = ZLEVEL_LAVALAND, nodes = 4, turf_type = /turf/open/lava/smooth/lava_land_surface, whitelist_area = /area/lavaland/surface/outdoors, min_x = RANDOM_LOWER_X, min_y = RANDOM_LOWER_Y, max_x = RANDOM_UPPER_X, max_y = RANDOM_UPPER_Y) var/list/river_nodes = list() var/num_spawned = 0 while(num_spawned < nodes) @@ -20,7 +20,7 @@ continue W.connected = 1 var/turf/cur_turf = get_turf(W) - cur_turf.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + cur_turf.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) var/turf/target_turf = get_turf(pick(river_nodes - W)) if(!target_turf) break @@ -49,7 +49,7 @@ cur_turf = get_step(cur_turf, cur_dir) continue else - var/turf/river_turf = cur_turf.ChangeTurf(turf_type,FALSE,FALSE,TRUE) + var/turf/river_turf = cur_turf.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR) river_turf.Spread(25, 11, whitelist_area) for(var/WP in river_nodes) @@ -85,16 +85,16 @@ for(var/F in cardinal_turfs) //cardinal turfs are always changed but don't always spread var/turf/T = F - if(!istype(T, logged_turf_type) && T.ChangeTurf(type,FALSE,FALSE,TRUE) && prob(probability)) + if(!istype(T, logged_turf_type) && T.ChangeTurf(type, null, CHANGETURF_IGNORE_AIR) && prob(probability)) T.Spread(probability - prob_loss, prob_loss, whitelisted_area) for(var/F in diagonal_turfs) //diagonal turfs only sometimes change, but will always spread if changed var/turf/T = F - if(!istype(T, logged_turf_type) && prob(probability) && T.ChangeTurf(type,FALSE,FALSE,TRUE)) + if(!istype(T, logged_turf_type) && prob(probability) && T.ChangeTurf(type, null, CHANGETURF_IGNORE_AIR)) T.Spread(probability - prob_loss, prob_loss, whitelisted_area) else if(ismineralturf(T)) var/turf/closed/mineral/M = T - M.ChangeTurf(M.turf_type,FALSE,FALSE,TRUE) + M.ChangeTurf(M.turf_type, null, CHANGETURF_IGNORE_AIR) #undef RANDOM_UPPER_X diff --git a/code/game/turfs/simulated/wall/misc_walls.dm b/code/game/turfs/simulated/wall/misc_walls.dm index ecc389af88..a06f7c9458 100644 --- a/code/game/turfs/simulated/wall/misc_walls.dm +++ b/code/game/turfs/simulated/wall/misc_walls.dm @@ -55,7 +55,7 @@ sheet_type = /obj/item/stack/tile/brass sheet_amount = 1 girder_type = /obj/structure/destructible/clockwork/wall_gear - baseturf = /turf/open/floor/clockwork/reebe + baseturfs = /turf/open/floor/clockwork/reebe var/heated var/obj/effect/clockwork/overlay/wall/realappearence @@ -70,6 +70,10 @@ if(realappearence) qdel(realappearence) realappearence = null + if(heated) + var/mob/camera/eminence/E = get_eminence() + if(E) + E.superheated_walls-- return ..() /turf/closed/wall/clockwork/ReplaceWithLattice() @@ -88,13 +92,13 @@ /turf/closed/wall/clockwork/dismantle_wall(devastated=0, explode=0) if(devastated) devastate_wall() - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() else playsound(src, 'sound/items/welder.ogg', 100, 1) var/newgirder = break_wall() if(newgirder) //maybe we want a gear! transfer_fingerprints_to(newgirder) - ChangeTurf(/turf/open/floor/clockwork) + ScrapeAway() for(var/obj/O in src) //Eject contents! if(istype(O, /obj/structure/sign/poster)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 00377e4f3f..e95ea32046 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -10,6 +10,8 @@ thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT heat_capacity = 312500 //a little over 5 cm thick , 312500 for 1 m by 2.5 m by 0.25 m plasteel wall + baseturfs = /turf/open/floor/plating + var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. var/slicing_duration = 100 //default time taken to slice the wall var/sheet_type = /obj/item/stack/sheet/metal @@ -61,7 +63,7 @@ new_angle_s -= 360 while(new_angle_s < -180) new_angle_s += 360 - P.Angle = new_angle_s + P.setAngle(new_angle_s) return TRUE /turf/closed/wall/proc/dismantle_wall(devastated=0, explode=0) @@ -78,7 +80,7 @@ var/obj/structure/sign/poster/P = O P.roll_and_drop(src) - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() /turf/closed/wall/proc/break_wall() new sheet_type(src, sheet_amount) @@ -96,7 +98,7 @@ switch(severity) if(1) //SN src = null - var/turf/NT = ChangeTurf(baseturf) + var/turf/NT = ScrapeAway() NT.contents_explosion(severity, target) return if(2) @@ -294,7 +296,7 @@ switch(passed_mode) if(RCD_DECONSTRUCT) to_chat(user, "You deconstruct the wall.") - ChangeTurf(/turf/open/floor/plating) + ScrapeAway() return TRUE return FALSE diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index c67fdc83a1..104f8b4b53 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -3,7 +3,7 @@ desc = "Shallow water." icon = 'icons/turf/floors.dmi' icon_state = "riverwater" - baseturf = /turf/open/chasm/lavaland + baseturfs = /turf/open/chasm/lavaland initial_gas_mix = LAVALAND_DEFAULT_ATMOS planetary_atmos = TRUE slowdown = 1 diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 5399b748e6..e446eb3b2c 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -118,7 +118,7 @@ qdel(L) playsound(src, 'sound/weapons/genhit.ogg', 50, 1) to_chat(user, "You build a floor.") - ChangeTurf(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating) else to_chat(user, "You need one floor tile to build a floor!") else @@ -192,7 +192,7 @@ switch(passed_mode) if(RCD_FLOORWALL) to_chat(user, "You build a floor.") - ChangeTurf(/turf/open/floor/plating) + PlaceOnTop(/turf/open/floor/plating) return TRUE return FALSE diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 2ba08fa2a9..a2f8d8262c 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,7 +1,7 @@ /turf/open/space/transit icon_state = "black" dir = SOUTH - baseturf = /turf/open/space/transit + baseturfs = /turf/open/space/transit flags_1 = NOJAUNT_1 //This line goes out to every wizard that ever managed to escape the den. I'm sorry. explosion_block = INFINITY diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 36ba033eef..97ebcd3a26 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -3,7 +3,13 @@ level = 1 var/intact = 1 - var/turf/baseturf = /turf/open/space + + // baseturfs can be either a list or a single turf type. + // In class definition like here it should always be a single type. + // A list will be created in initialization that figures out the baseturf's baseturf etc. + // In the case of a list it is sorted from bottom layer to top. + // This shouldn't be modified directly, use the helper procs. + var/list/baseturfs = /turf/open/space var/temperature = T20C var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed @@ -35,6 +41,8 @@ stack_trace("Warning: [src]([type]) initialized multiple times!") initialized = TRUE + assemble_baseturfs() + levelupdate() if(smooth) queue_smooth(src) @@ -180,6 +188,55 @@ /turf/proc/is_plasteel_floor() return FALSE +// A proc in case it needs to be recreated or badmins want to change the baseturfs +/turf/proc/assemble_baseturfs(turf/fake_baseturf_type) + var/static/list/created_baseturf_lists = list() + var/turf/current_target + if(fake_baseturf_type) + if(length(fake_baseturf_type)) // We were given a list, just apply it and move on + baseturfs = fake_baseturf_type + return + current_target = fake_baseturf_type + else + if(length(baseturfs)) + return // No replacement baseturf has been given and the current baseturfs value is already a list/assembled + if(!baseturfs) + current_target = initial(baseturfs) || type // This should never happen but just in case... + stack_trace("baseturfs var was null for [type]. Failsafe activated and it has been given a new baseturfs value of [current_target].") + else + current_target = baseturfs + + // If we've made the output before we don't need to regenerate it + if(created_baseturf_lists[current_target]) + var/list/premade_baseturfs = created_baseturf_lists[current_target] + if(length(premade_baseturfs)) + baseturfs = premade_baseturfs.Copy() + else + baseturfs = premade_baseturfs + return baseturfs + + var/turf/next_target = initial(current_target.baseturfs) + //Most things only have 1 baseturf so this loop won't run in most cases + if(current_target == next_target) + baseturfs = current_target + created_baseturf_lists[current_target] = current_target + return current_target + var/list/new_baseturfs = list(current_target) + for(var/i=0;current_target != next_target;i++) + if(i > 100) + // A baseturfs list over 100 members long is silly + // Because of how this is all structured it will only runtime/message once per type + stack_trace("A turf <[type]> created a baseturfs list over 100 members long. This is most likely an infinite loop.") + message_admins("A turf <[type]> created a baseturfs list over 100 members long. This is most likely an infinite loop.") + break + new_baseturfs.Insert(1, next_target) + current_target = next_target + next_target = initial(current_target.baseturfs) + + baseturfs = new_baseturfs + created_baseturf_lists[new_baseturfs[new_baseturfs.len]] = new_baseturfs.Copy() + return new_baseturfs + /turf/proc/levelupdate() for(var/obj/O in src) if(O.level == 1) @@ -197,119 +254,6 @@ if(L) qdel(L) -//wrapper for ChangeTurf()s that you want to prevent/affect without overriding ChangeTurf() itself -/turf/proc/TerraformTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) - return ChangeTurf(path, new_baseturf, defer_change, ignore_air, forceop) - -//Creates a new turf -/turf/proc/ChangeTurf(path, new_baseturf, defer_change = FALSE, ignore_air = FALSE, forceop = FALSE) - if(!path) - return - if(!GLOB.use_preloader && path == type && !forceop) // Don't no-op if the map loader requires it to be reconstructed - return src - - var/old_opacity = opacity - var/old_dynamic_lighting = dynamic_lighting - var/old_affecting_lights = affecting_lights - var/old_lighting_object = lighting_object - var/old_corners = corners - - var/old_exl = explosion_level - var/old_exi = explosion_id - var/old_bp = blueprint_data - blueprint_data = null - - var/old_baseturf = baseturf - changing_turf = TRUE - - qdel(src) //Just get the side effects and call Destroy - var/turf/W = new path(src) - - if(new_baseturf) - W.baseturf = new_baseturf - else - W.baseturf = old_baseturf - - W.explosion_id = old_exi - W.explosion_level = old_exl - - if(!defer_change) - W.AfterChange(ignore_air) - - W.blueprint_data = old_bp - - if(SSlighting.initialized) - recalc_atom_opacity() - lighting_object = old_lighting_object - affecting_lights = old_affecting_lights - corners = old_corners - if (old_opacity != opacity || dynamic_lighting != old_dynamic_lighting) - reconsider_lights() - - if (dynamic_lighting != old_dynamic_lighting) - if (IS_DYNAMIC_LIGHTING(src)) - lighting_build_overlay() - else - lighting_clear_overlay() - - for(var/turf/open/space/S in RANGE_TURFS(1, src)) //RANGE_TURFS is in code\__HELPERS\game.dm - S.update_starlight() - - return W - -/turf/proc/AfterChange(ignore_air = FALSE) //called after a turf has been replaced in ChangeTurf() - levelupdate() - CalculateAdjacentTurfs() - - //update firedoor adjacency - var/list/turfs_to_check = get_adjacent_open_turfs(src) | src - for(var/I in turfs_to_check) - var/turf/T = I - for(var/obj/machinery/door/firedoor/FD in T) - FD.CalculateAffectingAreas() - - queue_smooth_neighbors(src) - - HandleTurfChange(src) - -/turf/open/AfterChange(ignore_air) - ..() - RemoveLattice() - if(!ignore_air) - Assimilate_Air() - -//////Assimilate Air////// -/turf/open/proc/Assimilate_Air() - var/turf_count = LAZYLEN(atmos_adjacent_turfs) - if(blocks_air || !turf_count) //if there weren't any open turfs, no need to update. - return - - var/datum/gas_mixture/total = new//Holders to assimilate air from nearby turfs - var/list/total_gases = total.gases - - for(var/T in atmos_adjacent_turfs) - var/turf/open/S = T - if(!S.air) - continue - var/list/S_gases = S.air.gases - for(var/id in S_gases) - ASSERT_GAS(id, total) - total_gases[id][MOLES] += S_gases[id][MOLES] - total.temperature += S.air.temperature - - air.copy_from(total) - - var/list/air_gases = air.gases - for(var/id in air_gases) - air_gases[id][MOLES] /= turf_count //Averages contents of the turfs, ignoring walls and the like - - air.temperature /= turf_count - SSair.add_to_active(src) - -/turf/proc/ReplaceWithLattice() - ChangeTurf(baseturf) - new /obj/structure/lattice(locate(x, y, z)) - /turf/proc/phase_damage_creatures(damage,mob/U = null)//>Ninja Code. Hurts and knocks out creatures on this turf //NINJACODE for(var/mob/living/M in src) if(M==U) @@ -361,7 +305,7 @@ continue if(O.invisibility == INVISIBILITY_MAXIMUM) O.singularity_act() - ChangeTurf(src.baseturf) + ScrapeAway() return(2) /turf/proc/can_have_cabling() @@ -437,21 +381,6 @@ if(!SSticker.HasRoundStarted()) add_blueprints(AM) -/turf/proc/empty(turf_type=/turf/open/space, baseturf_type, list/ignore_typecache, forceop = FALSE) - // Remove all atoms except observers, landmarks, docking ports - var/static/list/ignored_atoms = typecacheof(list(/mob/dead, /obj/effect/landmark, /obj/docking_port, /atom/movable/lighting_object)) - var/list/allowed_contents = typecache_filter_list_reverse(GetAllContentsIgnoring(ignore_typecache), ignored_atoms) - allowed_contents -= src - for(var/i in 1 to allowed_contents.len) - var/thing = allowed_contents[i] - qdel(thing, force=TRUE) - - var/turf/newT = ChangeTurf(turf_type, baseturf_type, FALSE, FALSE, forceop) - - SSair.remove_from_active(newT) - newT.CalculateAdjacentTurfs() - SSair.add_to_active(newT,1) - /turf/proc/is_transition_turf() return @@ -473,40 +402,16 @@ if(!has_acid_effect) new acid_type(src, acidpwr, acid_volume) - /turf/proc/acid_melt() return - -/turf/proc/copyTurf(turf/T) - if(T.type != type) - var/obj/O - if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay - O = new() - O.underlays.Add(T) - T.ChangeTurf(type) - for(var/group in decals) - T.add_decal(decals[group],group) - if(underlays.len) - T.underlays = O.underlays - if(T.icon_state != icon_state) - T.icon_state = icon_state - if(T.icon != icon) - T.icon = icon - if(color) - T.atom_colours = atom_colours.Copy() - T.update_atom_colour() - if(T.dir != dir) - T.setDir(dir) - return T - /turf/handle_fall(mob/faller, forced) faller.lying = pick(90, 270) if(!forced) return if(has_gravity(src)) playsound(src, "bodyfall", 50, 1) - + faller.drop_all_held_items() /turf/proc/add_decal(decal,group) LAZYINITLIST(decals) diff --git a/code/game/world.dm b/code/game/world.dm index 2853bb2ef6..b1174b3386 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -30,7 +30,7 @@ GLOBAL_PROTECT(security_mode) if(CONFIG_GET(flag/usewhitelist)) load_whitelist() LoadBans() - reload_custom_roundstart_items_list() + reload_custom_roundstart_items_list()//Cit change - loads donator items. Remind me to remove when I port over bay's loadout system GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000 @@ -38,8 +38,10 @@ GLOBAL_PROTECT(security_mode) GLOB.restart_counter = text2num(trim(file2text(RESTART_COUNTER_PATH))) fdel(RESTART_COUNTER_PATH) - Master.Initialize(10, FALSE) + if("no-init" in params) + return + Master.Initialize(10, FALSE) /world/proc/SetupExternalRSC() #if (PRELOAD_RSC == 0) @@ -62,15 +64,15 @@ GLOBAL_PROTECT(security_mode) var/db_major = text2num(query_db_version.item[1]) var/db_minor = text2num(query_db_version.item[2]) if(db_major != DB_MAJOR_VERSION || db_minor != DB_MINOR_VERSION) - var/which = "behind" - if(db_major < DB_MAJOR_VERSION || db_minor < DB_MINOR_VERSION) - which = "ahead of" - message_admins("Database schema ([db_major].[db_minor]) is [which] the latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") - log_sql("Database schema ([db_major].[db_minor]) is [which] the latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + message_admins("Database schema ([db_major].[db_minor]) doesn't match the latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") + log_sql("Database schema ([db_major].[db_minor]) doesn't match the latest schema version ([DB_MAJOR_VERSION].[DB_MINOR_VERSION]), this may lead to undefined behaviour or errors") else message_admins("Could not get schema version from database") + log_sql("Could not get schema version from database") else - log_world("Your server failed to establish a connection with the database.") + log_sql("Your server failed to establish a connection with the database.") + else + log_sql("Database is not enabled in configuration.") /world/proc/SetRoundID() if(CONFIG_GET(flag/sql_enabled)) @@ -128,6 +130,7 @@ GLOBAL_PROTECT(security_mode) SERVER_TOOLS_ON_TOPIC //redirect to server tools if necessary var/static/list/topic_handlers = TopicHandlers() + var/list/input = params2list(T) var/datum/world_topic/handler for(var/I in topic_handlers) diff --git a/code/modules/admin/DB_ban/functions.dm b/code/modules/admin/DB_ban/functions.dm index 5047b31641..752131369b 100644 --- a/code/modules/admin/DB_ban/functions.dm +++ b/code/modules/admin/DB_ban/functions.dm @@ -1,4 +1,5 @@ #define MAX_ADMIN_BANS_PER_ADMIN 1 +#define MAX_ADMIN_BANS_PER_HEADMIN 3 //Either pass the mob you wish to ban in the 'banned_mob' attribute, or the banckey, banip and bancid variables. If both are passed, the mob takes priority! If a mob is not passed, banckey is the minimum that needs to be passed! banip and bancid are optional. /datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", banckey = null, banip = null, bancid = null) @@ -118,8 +119,11 @@ return if(query_check_adminban_amt.NextRow()) var/adm_bans = text2num(query_check_adminban_amt.item[1]) - if(adm_bans >= MAX_ADMIN_BANS_PER_ADMIN) - to_chat(usr, "You already logged [MAX_ADMIN_BANS_PER_ADMIN] admin ban(s) or more. Do not abuse this function!") + var/max_bans = MAX_ADMIN_BANS_PER_ADMIN + if (check_rights(R_PERMISSIONS, FALSE)) + max_bans = MAX_ADMIN_BANS_PER_HEADMIN + if(adm_bans >= max_bans) + to_chat(usr, "You already logged [max_bans] admin ban(s) or more. Do not abuse this function!") return if(!computerid) computerid = "0" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 43651cebef..79d9838ea2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -508,8 +508,7 @@ toggle_ooc() log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle OOC", "[GLOB.ooc_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleoocdead() set category = "Server" @@ -519,7 +518,7 @@ log_admin("[key_name(usr)] toggled OOC.") message_admins("[key_name_admin(usr)] toggled Dead OOC.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Dead OOC", "[GLOB.dooc_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/startnow() set category = "Server" @@ -553,7 +552,7 @@ log_admin("[key_name(usr)] toggled new player game entering.") message_admins("[key_name_admin(usr)] toggled new player game entering.") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[GLOB.enter_allowed]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Entering", "[GLOB.enter_allowed ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleAI() set category = "Server" @@ -567,7 +566,7 @@ to_chat(world, "The AI job is chooseable now.") log_admin("[key_name(usr)] toggled AI allowed.") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleaban() set category = "Server" @@ -582,7 +581,7 @@ message_admins("[key_name_admin(usr)] toggled respawn to [!new_nores ? "On" : "Off"].") log_admin("[key_name(usr)] toggled respawn to [!new_nores ? "On" : "Off"].") world.update_status() - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Respawn", "[!new_nores]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Respawn", "[!new_nores ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/delay() set category = "Server" @@ -606,7 +605,7 @@ /datum/admins/proc/unprison(mob/M in GLOB.mob_list) set category = "Admin" set name = "Unprison" - if (M.z == ZLEVEL_CENTCOM) + if (is_centcom_level(M.z)) SSjob.SendToLateJoin(M) message_admins("[key_name_admin(usr)] has unprisoned [key_name_admin(M)]") log_admin("[key_name(usr)] has unprisoned [key_name(M)]") @@ -665,7 +664,7 @@ to_chat(world, "The tinted_weldhelh has been disabled!") log_admin("[key_name(usr)] toggled tinted_weldhelh.") message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Tinted Welding Helmets", "[GLOB.tinted_weldhelh]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Tinted Welding Helmets", "[GLOB.tinted_weldhelh ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/toggleguests() set category = "Server" @@ -679,7 +678,7 @@ to_chat(world, "Guests may now enter the game.") log_admin("[key_name(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") message_admins("[key_name_admin(usr)] toggled guests game entering [!new_guest_ban ? "" : "dis"]allowed.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Guests", "[!new_guest_ban ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/admins/proc/output_ai_laws() var/ai_number = 0 diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 16bd79f74a..b577a84a1d 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,3 +1,4 @@ + /datum/admins/proc/create_mob(mob/user) var/static/create_mob_html if (!create_mob_html) @@ -23,4 +24,4 @@ H.dna.blood_type = random_blood_type() H.update_body() H.update_hair() - H.update_body_parts() + H.update_body_parts() \ No newline at end of file diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 480ba20b4d..e86aa6d645 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -110,26 +110,32 @@ anchored = TRUE /obj/effect/shuttle_build/New() - SSshuttle.emergency.dock(SSshuttle.getDock("emergency_home")) + SSshuttle.emergency.initiate_docking(SSshuttle.getDock("emergency_home")) qdel(src) //Arena /obj/effect/forcefield/arena_shuttle name = "portal" - var/list/warp_points = list() + var/list/warp_points +/obj/effect/forcefield/arena_shuttle/Initialize() + . = ..() + warp_points = get_area_turfs(/area/shuttle/escape) + for(var/thing in warp_points) + CHECK_TICK + var/turf/T = thing + if(istype(T.loc, /area/shuttle/escape/backup)) + warp_points -= T + continue + for(var/atom/movable/TAM in T) + if(TAM.density && TAM.anchored) + warp_points -= T + break /obj/effect/forcefield/arena_shuttle/CollidedWith(atom/movable/AM) if(!isliving(AM)) return - if(!warp_points.len) - warp_points = get_area_turfs(/area/shuttle/escape) - for(var/turf/T in warp_points) - for(var/atom/movable/TAM in T) - if(TAM.density && TAM.anchored) - warp_points -= T - break var/mob/living/L = AM if(L.pulling && istype(L.pulling, /obj/item/bodypart/head)) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index e9d4462c0a..82b60ca933 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -173,4 +173,4 @@ you will have to do something like if(client.rights & R_ADMIN) yourself. return "admin_token=[RawHrefToken(forceGlobal)]" /proc/HrefTokenFormField(forceGlobal = FALSE) - return "" + return "" \ No newline at end of file diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2a3812be3b..e38f857cd4 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -360,7 +360,7 @@ if(isdrone(M)) drones++ continue - if(M.z == ZLEVEL_CENTCOM) + if(is_centcom_level(M.z)) living_skipped++ continue living_players++ @@ -612,6 +612,20 @@ dat += "
    " + var/list/pirates = get_antagonists(/datum/antagonist/pirate) + if(pirates.len > 0) + dat += "
    " + for(var/datum/mind/N in pirates) + var/mob/M = N.current + if(!M) + dat += "" + dat += "" + else + dat += "" + dat += "" + dat += "" + dat += "
    Pirates
    [N.name]([N.key])No body.PM
    [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
    " + if(istype(SSticker.mode, /datum/game_mode/monkey)) var/datum/game_mode/monkey/mode = SSticker.mode dat += "
    " diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 0753f942dc..13e07e0368 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -43,6 +43,8 @@ if(check_rights(R_FUN,0)) dat += {" + Fun Secrets
    +
    Trigger a Virus Outbreak
    Turn all humans into monkeys
    Chinese Cartoons
    @@ -194,7 +196,7 @@ if("moveminingshuttle") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send Mining Shuttle") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send Mining Shuttle")) if(!SSshuttle.toggleShuttle("mining","mining_home","mining_away")) message_admins("[key_name_admin(usr)] moved mining shuttle") log_admin("[key_name(usr)] moved the mining shuttle") @@ -202,7 +204,7 @@ if("movelaborshuttle") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send Labor Shuttle") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send Labor Shuttle")) if(!SSshuttle.toggleShuttle("laborcamp","laborcamp_home","laborcamp_away")) message_admins("[key_name_admin(usr)] moved labor shuttle") log_admin("[key_name(usr)] moved the labor shuttle") @@ -210,7 +212,7 @@ if("moveferry") if(!check_rights(R_ADMIN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Send CentCom Ferry") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Send CentCom Ferry")) if(!SSshuttle.toggleShuttle("ferry","ferry_home","ferry_away")) message_admins("[key_name_admin(usr)] moved the CentCom ferry") log_admin("[key_name(usr)] moved the CentCom ferry") @@ -222,7 +224,7 @@ if(A) var/new_perma = !A.perma_docked A.perma_docked = new_perma - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Permadock Arrivals Shuttle", "[new_perma]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Permadock Arrivals Shuttle", "[new_perma ? "Enabled" : "Disabled"]")) message_admins("[key_name_admin(usr)] [new_perma ? "stopped" : "started"] the arrivals shuttle") log_admin("[key_name(usr)] [new_perma ? "stopped" : "started"] the arrivals shuttle") else @@ -272,7 +274,7 @@ if("monkey") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Monkeyize All Humans") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Monkeyize All Humans")) for(var/mob/living/carbon/human/H in GLOB.carbon_list) spawn(0) H.monkeyize() @@ -283,7 +285,7 @@ return var/result = input(usr, "Please choose a new species","Species") as null|anything in GLOB.species_list if(result) - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Mass Species Change([result])") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Species Change", "[result]")) log_admin("[key_name(usr)] turned all humans into [result]", 1) message_admins("\blue [key_name_admin(usr)] turned all humans into [result]") var/newtype = GLOB.species_list[result] @@ -294,12 +296,12 @@ if(!check_rights(R_FUN)) return usr.client.triple_ai() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Triple AI") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Triple AI")) if("power") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All APCs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All APCs")) log_admin("[key_name(usr)] made all areas powered", 1) message_admins("[key_name_admin(usr)] made all areas powered") power_restore() @@ -307,7 +309,7 @@ if("unpower") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Depower All APCs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Depower All APCs")) log_admin("[key_name(usr)] made all areas unpowered", 1) message_admins("[key_name_admin(usr)] made all areas unpowered") power_failure() @@ -315,7 +317,7 @@ if("quickpower") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All SMESs") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All SMESs")) log_admin("[key_name(usr)] made all SMESs powered", 1) message_admins("[key_name_admin(usr)] made all SMESs powered") power_restore_quick() @@ -329,7 +331,7 @@ var/objective = copytext(sanitize(input("Enter an objective")),1,MAX_MESSAGE_LEN) if(!objective) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Traitor All ([objective])") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Traitor All", "[objective]")) for(var/mob/living/H in GLOB.player_list) if(!(ishuman(H)||istype(H, /mob/living/silicon/))) continue @@ -350,7 +352,7 @@ if("changebombcap") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Bomb Cap") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Bomb Cap")) var/newBombCap = input(usr,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", GLOB.MAX_EX_LIGHT_RANGE) as num|null if (!CONFIG_SET(number/bombcap, newBombCap)) @@ -362,7 +364,7 @@ if("blackout") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Break All Lights") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Break All Lights")) message_admins("[key_name_admin(usr)] broke all lights") for(var/obj/machinery/light/L in GLOB.machines) L.break_light_tube() @@ -378,7 +380,7 @@ if(animetype == "Cancel" || droptype == "Cancel") return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Chinese Cartoons") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Chinese Cartoons")) message_admins("[key_name_admin(usr)] made everything kawaii.") for(var/mob/living/carbon/human/H in GLOB.carbon_list) SEND_SOUND(H, sound('sound/ai/animes.ogg')) @@ -408,7 +410,7 @@ if("whiteout") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Fix All Lights") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Fix All Lights")) message_admins("[key_name_admin(usr)] fixed all lights") for(var/obj/machinery/light/L in GLOB.machines) L.fix() @@ -419,7 +421,7 @@ if("virus") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Virus Outbreak") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Virus Outbreak")) switch(alert("Do you want this to be a random disease or do you have something in mind?",,"Make Your Own","Random","Choose")) if("Make Your Own") AdminCreateVirus(usr.client) @@ -434,7 +436,7 @@ if("retardify") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Mass Braindamage") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Mass Braindamage")) for(var/mob/living/carbon/human/H in GLOB.player_list) to_chat(H, "You suddenly feel stupid.") H.adjustBrainLoss(60, 80) @@ -443,24 +445,17 @@ if("eagles")//SCRAW if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Egalitarian Station") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Egalitarian Station")) for(var/obj/machinery/door/airlock/W in GLOB.machines) - if((W.z in GLOB.station_z_levels) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) + if(is_station_level(W.z) && !istype(get_area(W), /area/bridge) && !istype(get_area(W), /area/crew_quarters) && !istype(get_area(W), /area/security/prison)) W.req_access = list() message_admins("[key_name_admin(usr)] activated Egalitarian Station mode") priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, 'sound/ai/commandreport.ogg') - if("ak47s") - if(!check_rights(R_FUN)) - return - message_admins("[key_name_admin(usr)] activated AK-47s for Everyone!") - usr.client.ak47s() - sound_to_playing_players('sound/misc/ak47s.ogg') - if("guns") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Summon Guns") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Guns")) var/survivor_probability = 0 switch(alert("Do you want this to create survivors antagonists?",,"No Antags","Some Antags","All Antags!")) if("Some Antags") @@ -473,7 +468,7 @@ if("magic") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Summon Magic") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Magic")) var/survivor_probability = 0 switch(alert("Do you want this to create survivors antagonists?",,"No Antags","Some Antags","All Antags!")) if("Some Antags") @@ -489,22 +484,22 @@ if(!SSevents.wizardmode) if(alert("Do you want to toggle summon events on?",,"Yes","No") == "Yes") summonevents() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Activate Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Activate")) else switch(alert("What would you like to do?",,"Intensify Summon Events","Turn Off Summon Events","Nothing")) if("Intensify Summon Events") summonevents() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Intensify Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Intensify")) if("Turn Off Summon Events") SSevents.toggleWizardmode() SSevents.resetFrequency() - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Disable Summon Events") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Summon Events", "Disable")) if("dorf") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Dwarf Beards") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Dwarf Beards")) for(var/mob/living/carbon/human/B in GLOB.carbon_list) B.facial_hair_style = "Dward Beard" B.update_hair() @@ -513,14 +508,14 @@ if("onlyone") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "There Can Be Only One") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) usr.client.only_one() sound_to_playing_players('sound/misc/highlander.ogg') if("delayed_onlyone") if(!check_rights(R_FUN)) return - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "There Can Be Only One") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) usr.client.only_one_delayed() sound_to_playing_players('sound/misc/highlander_delayed.ogg') diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 91769ac55a..bd104f86ab 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -816,7 +816,9 @@ //Antagonist (Orange) var/isbanned_dept = jobban_isbanned(M, "Syndicate") dat += "
    Monkey
    " - dat += "" + dat += "" + dat += "Conversion Antagonists" //Traitor if(jobban_isbanned(M, "traitor") || isbanned_dept) @@ -848,6 +850,8 @@ else dat += "" + dat += "" //So things dont get squished. + //Servant of Ratvar if(jobban_isbanned(M, "servant of Ratvar") || isbanned_dept) dat += "" @@ -938,6 +942,10 @@ joblist += jobPos if("ghostroles") joblist += list("pAI", "posibrain", "drone", "deathsquad", "lavaland") + if("teamantags") + joblist += list("operative", "revolutionary", "cultist", "servant of Ratvar", "abductor", "alien candidate") + if("convertantags") + joblist += list("revolutionary", "cultist", "servant of Ratvar", "alien candidate") else joblist += href_list["jobban3"] diff --git a/code/modules/admin/verbs/BrokenInhands.dm b/code/modules/admin/verbs/BrokenInhands.dm index 20721077df..112dff352b 100644 --- a/code/modules/admin/verbs/BrokenInhands.dm +++ b/code/modules/admin/verbs/BrokenInhands.dm @@ -31,3 +31,5 @@ fdel(F) WRITE_FILE(F, text) to_chat(world, "Completely successfully and written to [F]") + + diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 8a7c030458..56faa1f6c4 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -114,8 +114,8 @@ /proc/_range(Dist, Center = usr) return range(Dist, Center) -/proc/_regex(pattern, flags_1) - return regex(pattern, flags_1) +/proc/_regex(pattern, flags) + return regex(pattern, flags) /proc/_REGEX_QUOTE(text) return REGEX_QUOTE(text) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 2d57ee0965..a7cddae2d5 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -494,6 +494,11 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) deltimer(adminhelptimerid) adminhelptimerid = 0 +// Used for methods where input via arg doesn't work +/client/proc/get_adminhelp() + var/msg = input(src, "Please describe your problem concisely and an admin will help as soon as they're able.", "Adminhelp contents") as text + adminhelp(msg) + /client/verb/adminhelp(msg as text) set category = "Admin" set name = "Adminhelp" @@ -615,15 +620,18 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /proc/send2otherserver(source,msg,type = "Ahelp") var/comms_key = CONFIG_GET(string/comms_key) - if(comms_key) - var/list/message = list() - message["message_sender"] = source - message["message"] = msg - message["source"] = "([CONFIG_GET(string/cross_comms_name)])" - message["key"] = comms_key - message["crossmessage"] = type + if(!comms_key) + return + var/list/message = list() + message["message_sender"] = source + message["message"] = msg + message["source"] = "([CONFIG_GET(string/cross_comms_name)])" + message["key"] = comms_key + message += type - world.Export("[CONFIG_GET(string/cross_server_address)]?[list2params(message)]") + var/list/servers = CONFIG_GET(keyed_string_list/cross_server) + for(var/I in servers) + world.Export("[servers[I]]?[list2params(message)]") /proc/ircadminwho() diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 05c839d3fd..8c564551ba 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -13,12 +13,12 @@ //Manifolds for (var/obj/machinery/atmospherics/pipe/manifold/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2 || !pipe.NODE3) + if (!pipe.nodes[1] || !pipe.nodes[2] || !pipe.nodes[3]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") //Pipes for (var/obj/machinery/atmospherics/pipe/simple/pipe in GLOB.machines) - if (!pipe.NODE1 || !pipe.NODE2) + if (!pipe.nodes[1] || !pipe.nodes[2]) to_chat(usr, "Unconnected [pipe.name] located at [pipe.x],[pipe.y],[pipe.z] ([get_area(pipe.loc)])") /client/proc/powerdebug() diff --git a/code/modules/admin/verbs/cinematic.dm b/code/modules/admin/verbs/cinematic.dm index 7093ee23ea..5aa3258f07 100644 --- a/code/modules/admin/verbs/cinematic.dm +++ b/code/modules/admin/verbs/cinematic.dm @@ -8,4 +8,4 @@ var/datum/cinematic/choice = input(src,"Cinematic","Choose",null) as anything in subtypesof(/datum/cinematic) if(choice) - Cinematic(initial(choice.id),world,null) + Cinematic(initial(choice.id),world,null) \ No newline at end of file diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e2bb78c9ec..97e3669dc0 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -107,6 +107,8 @@ GLOBAL_VAR(LastAdminCalledTarget) GLOBAL_PROTECT(LastAdminCalledTarget) GLOBAL_VAR(LastAdminCalledProc) GLOBAL_PROTECT(LastAdminCalledProc) +GLOBAL_LIST_EMPTY(AdminProcCallSpamPrevention) +GLOBAL_PROTECT(AdminProcCallSpamPrevention) /proc/WrapAdminProcCall(target, procname, list/arguments) var/current_caller = GLOB.AdminProcCaller @@ -114,9 +116,14 @@ GLOBAL_PROTECT(LastAdminCalledProc) if(!ckey) CRASH("WrapAdminProcCall with no ckey: [target] [procname] [english_list(arguments)]") if(current_caller && current_caller != ckey) - to_chat(usr, "Another set of admin called procs are still running, your proc will be run after theirs finish.") - UNTIL(!GLOB.AdminProcCaller) - to_chat(usr, "Running your proc") + if(!GLOB.AdminProcCallSpamPrevention[ckey]) + to_chat(usr, "Another set of admin called procs are still running, your proc will be run after theirs finish.") + GLOB.AdminProcCallSpamPrevention[ckey] = TRUE + UNTIL(!GLOB.AdminProcCaller) + to_chat(usr, "Running your proc") + GLOB.AdminProcCallSpamPrevention -= ckey + else + UNTIL(!GLOB.AdminProcCaller) GLOB.LastAdminCalledProc = procname if(target != GLOBAL_PROC) GLOB.LastAdminCalledTargetRef = "[REF(target)]" @@ -507,6 +514,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) set category = "Mapping" set name = "Test Areas" + var/list/dat = list() var/list/areas_all = list() var/list/areas_with_APC = list() var/list/areas_with_multiple_APCs = list() @@ -518,10 +526,13 @@ GLOBAL_PROTECT(LastAdminCalledProc) var/list/areas_with_camera = list() var/list/station_areas_blacklist = typecacheof(list(/area/holodeck/rec_center, /area/shuttle, /area/engine/supermatter, /area/science/test_area, /area/space, /area/solar, /area/mine, /area/ruin)) + if(on_station) + dat += "Only checking areas on station z-levels.

    " + for(var/area/A in world) if(on_station) var/turf/picked = safepick(get_area_turfs(A.type)) - if(picked && (picked.z in GLOB.station_z_levels)) + if(picked && is_station_level(picked.z)) if(!(A.type in areas_all) && !is_type_in_typecache(A, station_areas_blacklist)) areas_all.Add(A.type) else if(!(A.type in areas_all)) @@ -529,6 +540,9 @@ GLOBAL_PROTECT(LastAdminCalledProc) for(var/obj/machinery/power/apc/APC in GLOB.apcs_list) var/area/A = APC.area + if(!A) //This is usually an indicator that the machines subsystem hasn't finished initializing. + dat += "Skipped over [APC] in invalid location, [APC.loc]. Game likely hasn't finished setting up yet.
    " + continue if(!(A.type in areas_with_APC)) areas_with_APC.Add(A.type) else if(A.type in areas_all) @@ -536,31 +550,49 @@ GLOBAL_PROTECT(LastAdminCalledProc) for(var/obj/machinery/airalarm/AA in GLOB.machines) var/area/A = get_area(AA) + if(!A) //Make sure the target isn't inside an object, which results in runtimes. + dat += "Skipped over [AA] in invalid location, [AA.loc].
    " + continue if(!(A.type in areas_with_air_alarm)) areas_with_air_alarm.Add(A.type) for(var/obj/machinery/requests_console/RC in GLOB.machines) var/area/A = get_area(RC) + if(!A) + dat += "Skipped over [RC] in invalid location, [RC.loc].
    " + continue if(!(A.type in areas_with_RC)) areas_with_RC.Add(A.type) for(var/obj/machinery/light/L in GLOB.machines) var/area/A = get_area(L) + if(!A) + dat += "Skipped over [L] in invalid location, [L.loc].
    " + continue if(!(A.type in areas_with_light)) areas_with_light.Add(A.type) for(var/obj/machinery/light_switch/LS in GLOB.machines) var/area/A = get_area(LS) + if(!A) + dat += "Skipped over [LS] in invalid location, [LS.loc].
    " + continue if(!(A.type in areas_with_LS)) areas_with_LS.Add(A.type) for(var/obj/item/device/radio/intercom/I in GLOB.machines) var/area/A = get_area(I) + if(!A) + dat += "Skipped over [I] in invalid location, [I.loc].
    " + continue if(!(A.type in areas_with_intercom)) areas_with_intercom.Add(A.type) for(var/obj/machinery/camera/C in GLOB.machines) var/area/A = get_area(C) + if(!A) + dat += "Skipped over [C] in invalid location, [C.loc].
    " + continue if(!(A.type in areas_with_camera)) areas_with_camera.Add(A.type) @@ -573,47 +605,52 @@ GLOBAL_PROTECT(LastAdminCalledProc) var/list/areas_without_camera = areas_all - areas_with_camera if(areas_without_APC.len) - to_chat(world, "AREAS WITHOUT AN APC:") + dat += "

    AREAS WITHOUT AN APC:

    " for(var/areatype in areas_without_APC) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_with_multiple_APCs.len) - to_chat(world, "AREAS WITH MULTIPLE APCS:") + dat += "

    AREAS WITH MULTIPLE APCS:

    " for(var/areatype in areas_with_multiple_APCs) - to_chat(world,"* [areatype]") + dat += "[areatype]
    " if(areas_without_air_alarm.len) - to_chat(world, "AREAS WITHOUT AN AIR ALARM:") + dat += "

    AREAS WITHOUT AN AIR ALARM:

    " for(var/areatype in areas_without_air_alarm) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_without_RC.len) - to_chat(world, "AREAS WITHOUT A REQUEST CONSOLE:") + dat += "

    AREAS WITHOUT A REQUEST CONSOLE:

    " for(var/areatype in areas_without_RC) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_without_light.len) - to_chat(world, "AREAS WITHOUT ANY LIGHTS:") + dat += "

    AREAS WITHOUT ANY LIGHTS:

    " for(var/areatype in areas_without_light) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_without_LS.len) - to_chat(world, "AREAS WITHOUT A LIGHT SWITCH:") + dat += "

    AREAS WITHOUT A LIGHT SWITCH:

    " for(var/areatype in areas_without_LS) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_without_intercom.len) - to_chat(world, "AREAS WITHOUT ANY INTERCOMS:") + dat += "

    AREAS WITHOUT ANY INTERCOMS:

    " for(var/areatype in areas_without_intercom) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(areas_without_camera.len) - to_chat(world, "AREAS WITHOUT ANY CAMERAS:") + dat += "

    AREAS WITHOUT ANY CAMERAS:

    " for(var/areatype in areas_without_camera) - to_chat(world, "* [areatype]") + dat += "[areatype]
    " if(!(areas_with_APC.len || areas_with_multiple_APCs.len || areas_with_air_alarm.len || areas_with_RC.len || areas_with_light.len || areas_with_LS.len || areas_with_intercom.len || areas_with_camera.len)) - to_chat(world, "No problem areas!") + dat += "No problem areas!" + + var/datum/browser/popup = new(usr, "testareas", "Test Areas", 500, 750) + popup.set_content(dat.Join()) + popup.open() + /client/proc/cmd_admin_areatest_station() set category = "Mapping" @@ -802,7 +839,7 @@ GLOBAL_PROTECT(LastAdminCalledProc) set category = "Debug" set name = "Display overlay Log" set desc = "Display SSoverlays log of everything that's passed through it." - + render_stats(SSoverlays.stats, src) /client/proc/cmd_display_init_log() diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index bcf58b1a4c..6f2bcb6c46 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -53,17 +53,6 @@ set category = "Debug" set name = "Radio report" - var/filters = list( - "1" = "GLOB.RADIO_TO_AIRALARM", - "2" = "GLOB.RADIO_FROM_AIRALARM", - "3" = "GLOB.RADIO_CHAT", - "4" = "GLOB.RADIO_ATMOSIA", - "5" = "GLOB.RADIO_NAVBEACONS", - "6" = "GLOB.RADIO_AIRLOCK", - "7" = "RADIO_SECBOT", - "8" = "RADIO_MULEBOT", - "_default" = "NO_FILTER" - ) var/output = "Radio Report
    " for (var/fq in SSradio.frequencies) output += "Freq: [fq]
    " @@ -74,9 +63,9 @@ for (var/filter in fqs.devices) var/list/f = fqs.devices[filter] if (!f) - output += "  [filters[filter]]: ERROR
    " + output += "  [filter]: ERROR
    " continue - output += "  [filters[filter]]: [f.len]
    " + output += "  [filter]: [f.len]
    " for (var/device in f) if (istype(device, /atom)) var/atom/A = device diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 5d0c2fe833..ce50378f4d 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -39,13 +39,13 @@ GLOBAL_LIST_INIT(admin_verbs_debug_mapping, list( /client/proc/cmd_admin_rejuvenate, /datum/admins/proc/show_traitor_panel, /client/proc/disable_communication, - /client/proc/print_pointers, /client/proc/cmd_show_at_list, /client/proc/cmd_show_at_markers, /client/proc/manipulate_organs, /client/proc/start_line_profiling, /client/proc/stop_line_profiling, - /client/proc/show_line_profiling + /client/proc/show_line_profiling, + /client/proc/create_mapping_job_icons )) /obj/effect/debugging/mapfix_marker @@ -265,3 +265,31 @@ GLOBAL_VAR_INIT(say_disabled, FALSE) message_admins("[src.ckey] used 'Disable all communication verbs', killing all communication methods.") else message_admins("[src.ckey] used 'Disable all communication verbs', restoring all communication methods.") + +//This generates the icon states for job starting location landmarks. +/client/proc/create_mapping_job_icons() + set name = "Generate job landmarks icons" + set category = "Mapping" + var/icon/final = icon() + var/mob/living/carbon/human/dummy/D = new(locate(1,1,1)) //spawn on 1,1,1 so we don't have runtimes when items are deleted + D.setDir(SOUTH) + for(var/job in subtypesof(/datum/job)) + var/datum/job/JB = new job + switch(JB.title) + if("AI") + final.Insert(icon('icons/mob/ai.dmi', "ai", SOUTH, 1), "AI") + if("Cyborg") + final.Insert(icon('icons/mob/robots.dmi', "robot", SOUTH, 1), "Cyborg") + else + for(var/obj/item/I in D) + qdel(I) + randomize_human(D) + JB.equip(D, TRUE, FALSE) + COMPILE_OVERLAYS(D) + var/icon/I = icon(getFlatIcon(D), frame = 1) + final.Insert(I, JB.title) + qdel(D) + //Also add the x + for(var/x_number in 1 to 4) + final.Insert(icon('icons/mob/screen_gen.dmi', "x[x_number == 1 ? "" : x_number]"), "x[x_number == 1 ? "" : x_number]") + fcopy(final, "icons/mob/landmarks.dmi") \ No newline at end of file diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 6043d23d62..db1150fb72 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -64,14 +64,14 @@ if(default == VV_NUM) var/dir_text = "" - if(dir < 0 && dir < 16) - if(dir & 1) + if(var_value > 0 && var_value < 16) + if(var_value & 1) dir_text += "NORTH" - if(dir & 2) + if(var_value & 2) dir_text += "SOUTH" - if(dir & 4) + if(var_value & 4) dir_text += "EAST" - if(dir & 8) + if(var_value & 8) dir_text += "WEST" if(dir_text) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index f6e8d93e62..e4c86315b5 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -448,11 +448,11 @@ GLOBAL_PROTECT(VVpixelmovement) if(tdir > 0 && tdir < 16) if(tdir & 1) dir_text += "NORTH" - if(dir & 2) + if(tdir & 2) dir_text += "SOUTH" - if(dir & 4) + if(tdir & 4) dir_text += "EAST" - if(dir & 8) + if(tdir & 8) dir_text += "WEST" if(dir_text) @@ -567,14 +567,14 @@ GLOBAL_PROTECT(VVpixelmovement) if(default == VV_NUM) var/dir_text = "" - if(dir < 0 && dir < 16) - if(dir & 1) + if(var_value > 0 && var_value < 16) + if(var_value & 1) dir_text += "NORTH" - if(dir & 2) + if(var_value & 2) dir_text += "SOUTH" - if(dir & 4) + if(var_value & 4) dir_text += "EAST" - if(dir & 8) + if(var_value & 8) dir_text += "WEST" if(dir_text) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index ece3775872..9035a34317 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -35,7 +35,7 @@ return FALSE if(onstation) var/turf/T = get_turf(applicant) - if(!(T.z in GLOB.station_z_levels)) + if(!is_station_level(T.z)) return FALSE if(conscious && applicant.stat) //incase you don't care about a certain antag being unconcious when made, ie if they have selfhealing abilities. return FALSE diff --git a/code/modules/admin/verbs/panicbunker.dm b/code/modules/admin/verbs/panicbunker.dm index f7d1d60aab..fc0cab66c9 100644 --- a/code/modules/admin/verbs/panicbunker.dm +++ b/code/modules/admin/verbs/panicbunker.dm @@ -12,5 +12,4 @@ message_admins("[key_name_admin(usr)] has toggled the Panic Bunker, it is now [new_pb ? "enabled" : "disabled"].") if (new_pb && !SSdbcore.Connect()) message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 29d95c639f..33fb3867d1 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -80,18 +80,37 @@ to_chat(src, "For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.") return var/shell_scrubbed_input = shell_url_scrub(web_sound_input) - var/list/output = world.shelleo("[ytdl] --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --get-url \"[shell_scrubbed_input]\"") + var/list/output = world.shelleo("[ytdl] --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_scrubbed_input]\"") var/errorlevel = output[SHELLEO_ERRORLEVEL] var/stdout = output[SHELLEO_STDOUT] var/stderr = output[SHELLEO_STDERR] if(!errorlevel) - var/static/regex/content_url_regex = regex("https?://\\S+") - if(content_url_regex.Find(stdout)) - web_sound_url = content_url_regex.match + var/list/data + try + data = json_decode(stdout) + catch(var/exception/e) + to_chat(src, "Youtube-dl JSON parsing FAILED:") + to_chat(src, "[e]: [stdout]") + return + + if (data["url"]) + web_sound_url = data["url"] + var/title = "[data["title"]]" + var/webpage_url = title + if (data["webpage_url"]) + webpage_url = "[title]" + + var/res = alert(usr, "Show the title of and link to this song to the players?\n[title]",, "No", "Yes", "Cancel") + switch(res) + if("Yes") + to_chat(world, "An admin played: [webpage_url]") + if("Cancel") + return if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) pitch = pick(0.5, 0.7, 0.8, 0.85, 0.9, 0.95, 1.1, 1.2, 1.4, 1.6, 2.0, 2.5) to_chat(src, "You feel the Honkmother messing with your song...") + SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) log_admin("[key_name(src)] played web sound: [web_sound_input]") message_admins("[key_name(src)] played web sound: [web_sound_input]") diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index fc81ca3a02..a9b5093e99 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -21,25 +21,26 @@ usr.loc = O usr.real_name = O.name usr.name = O.name - usr.client.eye = O + usr.reset_perspective(O) usr.control_object = O SSblackbox.record_feedback("tally", "admin_verb", 1, "Possess Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/proc/release(obj/O in world) +/proc/release() set name = "Release Obj" set category = "Object" //usr.loc = get_turf(usr) if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object usr.real_name = usr.name_archive + usr.name_archive = "" usr.name = usr.real_name if(ishuman(usr)) var/mob/living/carbon/human/H = usr H.name = H.get_visible_name() -// usr.regenerate_icons() //So the name is updated properly - usr.loc = O.loc - usr.client.eye = usr + + usr.loc = get_turf(usr.control_object) + usr.reset_perspective() usr.control_object = null SSblackbox.record_feedback("tally", "admin_verb", 1, "Release Object") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 8f13d887aa..e5f08b82bc 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -125,7 +125,7 @@ var/msg = "[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]" message_admins(msg) admin_ticket_log(M, msg) - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Godmode", "[M.status_flags & GODMODE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /proc/cmd_admin_mute(whom, mute_type, automute = 0) @@ -472,7 +472,7 @@ Traitors and the like can also be revived with the previous role mostly intact. if(!holder) to_chat(src, "Only administrators may use this command.") return - var/input = input(usr, "Please enter anything you want. Anything. Serious.", "What?", "") as message|null + var/input = input(usr, "Enter a Command Report. Ensure it makes sense IC.", "What?", "") as message|null if(!input) return @@ -523,7 +523,7 @@ Traitors and the like can also be revived with the previous role mostly intact. SSblackbox.record_feedback("tally", "admin_verb", 1, "Delete") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! if(isturf(D)) var/turf/T = D - T.ChangeTurf(T.baseturf) + T.ScrapeAway() else qdel(D) @@ -747,7 +747,7 @@ Traitors and the like can also be revived with the previous role mostly intact. else to_chat(usr, "Random events disabled") message_admins("Admin [key_name_admin(usr)] has disabled random events.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Random Events", "[new_are]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Random Events", "[new_are ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/admin_change_sec_level() @@ -980,7 +980,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits to_chat(usr, "You toggled your admin antag HUD [adding_hud ? "ON" : "OFF"].") message_admins("[key_name_admin(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") log_admin("[key_name(usr)] toggled their admin antag HUD [adding_hud ? "ON" : "OFF"].") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Antag HUD", "[adding_hud]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Antag HUD", "[adding_hud ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/has_antag_hud() var/datum/atom_hud/A = GLOB.huds[ANTAG_HUD_TRAITOR] @@ -1199,7 +1199,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits if (GLOB.hub_visibility && !world.reachable) message_admins("WARNING: The server will not show up on the hub because byond is detecting that a filewall is blocking incoming connections.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggled Hub Visibility", "[GLOB.hub_visibility ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/smite(mob/living/carbon/human/target as mob) set name = "Smite" diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 315e28df02..7e0aa59816 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -114,3 +114,4 @@ /obj/item/device/assembly/interact(mob/user) return //HTML MENU FOR WIRES GOES HERE + diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 81f2c75660..0e53ac3555 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -30,7 +30,7 @@ holder.update_icon() /obj/item/device/assembly/flash/proc/clown_check(mob/living/carbon/human/user) - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) flash_carbon(user, user, 15, 0) return 0 return 1 diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 6ac1ef093d..439ea314bb 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -68,11 +68,10 @@ a_right.on_found(finder) /obj/item/device/assembly_holder/Move() - ..() + . = ..() if(a_left && a_right) a_left.holder_movement() a_right.holder_movement() - return /obj/item/device/assembly_holder/attack_hand()//Perhapse this should be a holder_pickup proc instead, can add if needbe I guess if(a_left && a_right) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 0b9d42e42e..565465ec6d 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -83,10 +83,9 @@ /obj/item/device/assembly/infra/Move() var/t = dir - ..() + . = ..() setDir(t) qdel(first) - return /obj/item/device/assembly/infra/holder_movement() if(!holder) diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm index e8ee742e56..a61eccbb59 100644 --- a/code/modules/assembly/mousetrap.dm +++ b/code/modules/assembly/mousetrap.dm @@ -20,7 +20,7 @@ if(!armed) if(ishuman(usr)) var/mob/living/carbon/human/user = usr - if((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY && prob(50)) + if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) to_chat(user, "Your hand slips, setting off the trigger!") pulse(0) update_icon() @@ -76,7 +76,7 @@ if(!armed) to_chat(user, "You arm [src].") else - if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50)) + if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) var/which_hand = "l_hand" if(!(user.active_hand_index % 2)) which_hand = "r_hand" @@ -92,7 +92,7 @@ /obj/item/device/assembly/mousetrap/attack_hand(mob/living/carbon/human/user) if(armed) - if(((user.getBrainLoss() >= 60) || user.disabilities & CLUMSY) && prob(50)) + if((user.has_disability(DISABILITY_DUMB) || user.has_disability(DISABILITY_CLUMSY)) && prob(50)) var/which_hand = "l_hand" if(!(user.active_hand_index % 2)) which_hand = "r_hand" @@ -139,4 +139,4 @@ /obj/item/device/assembly/mousetrap/armed icon_state = "mousetraparmed" - armed = TRUE + armed = 1 diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index d9fdab39be..1b0102abdd 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -9,8 +9,8 @@ wires = WIRE_RECEIVE | WIRE_PULSE | WIRE_RADIO_PULSE | WIRE_RADIO_RECEIVE attachable = 1 - var/code = 30 - var/frequency = 1457 + var/code = DEFAULT_SIGNALER_CODE + var/frequency = FREQ_SIGNALER var/delay = 0 var/datum/radio_frequency/radio_connection @@ -73,7 +73,7 @@ Code: if (href_list["freq"]) var/new_frequency = (frequency + text2num(href_list["freq"])) - if(new_frequency < 1200 || new_frequency > 1600) + if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ) new_frequency = sanitize_frequency(new_frequency) set_frequency(new_frequency) @@ -105,10 +105,7 @@ Code: if(!radio_connection) return - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" + var/datum/signal/signal = new(list("code" = code)) radio_connection.post_signal(src, signal) var/time = time2text(world.realtime,"hh:mm:ss") @@ -122,7 +119,7 @@ Code: /obj/item/device/assembly/signaler/receive_signal(datum/signal/signal) if(!signal) return 0 - if(signal.encryption != code) + if(signal.data["code"] != code) return 0 if(!(src.wires & WIRE_RADIO_RECEIVE)) return 0 @@ -132,13 +129,9 @@ Code: /obj/item/device/assembly/signaler/proc/set_frequency(new_frequency) - if(!SSradio) - sleep(20) - if(!SSradio) - return SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) return // Embedded signaller used in grenade construction. @@ -175,7 +168,7 @@ Code: /obj/item/device/assembly/signaler/anomaly/receive_signal(datum/signal/signal) if(!signal) return 0 - if(signal.encryption != code) + if(signal.data["code"] != code) return 0 for(var/obj/effect/anomaly/A in get_turf(src)) A.anomalyNeutralize() diff --git a/code/modules/assembly/voice.dm b/code/modules/assembly/voice.dm index 617f384592..913176b662 100644 --- a/code/modules/assembly/voice.dm +++ b/code/modules/assembly/voice.dm @@ -1,91 +1,91 @@ -/obj/item/device/assembly/voice - name = "voice analyzer" - desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." - icon_state = "voice" - materials = list(MAT_METAL=500, MAT_GLASS=50) +/obj/item/device/assembly/voice + name = "voice analyzer" + desc = "A small electronic device able to record a voice sample, and send a signal when that sample is repeated." + icon_state = "voice" + materials = list(MAT_METAL=500, MAT_GLASS=50) flags_1 = HEAR_1 - attachable = 1 - verb_say = "beeps" - verb_ask = "beeps" - verb_exclaim = "beeps" - var/listening = 0 - var/recorded = "" //the activation message - var/mode = 1 - var/static/list/modes = list("inclusive", - "exclusive", - "recognizer", - "voice sensor") - -/obj/item/device/assembly/voice/examine(mob/user) - ..() - to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") - -/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - if(speaker == src) - return - - if(listening && !radio_freq) - record_speech(speaker, raw_message, message_language) - else - if(check_activation(speaker, raw_message)) - addtimer(CALLBACK(src, .proc/pulse, 0), 10) - -/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) - switch(mode) - if(1) - recorded = raw_message - listening = 0 - say("Activation message is '[recorded]'.", message_language) - if(2) - recorded = raw_message - listening = 0 - say("Activation message is '[recorded]'.", message_language) - if(3) - recorded = speaker.GetVoice() - listening = 0 - say("Your voice pattern is saved.", message_language) - if(4) - if(length(raw_message)) - addtimer(CALLBACK(src, .proc/pulse, 0), 10) - -/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) - . = 0 - switch(mode) - if(1) - if(findtext(raw_message, recorded)) - . = 1 - if(2) - if(raw_message == recorded) - . = 1 - if(3) - if(speaker.GetVoice() == recorded) - . = 1 - if(4) - if(length(raw_message)) - . = 1 - -/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params) - if(istype(W, /obj/item/device/multitool)) - mode %= modes.len - mode++ - to_chat(user, "You set [src] into a [modes[mode]] mode.") - listening = 0 - recorded = "" - else - return ..() - -/obj/item/device/assembly/voice/activate() - if(secured) - if(!holder) - listening = !listening - say("[listening ? "Now" : "No longer"] recording input.") - -/obj/item/device/assembly/voice/attack_self(mob/user) - if(!user) - return 0 - activate() - return 1 - -/obj/item/device/assembly/voice/toggle_secure() - . = ..() - listening = 0 + attachable = 1 + verb_say = "beeps" + verb_ask = "beeps" + verb_exclaim = "beeps" + var/listening = 0 + var/recorded = "" //the activation message + var/mode = 1 + var/static/list/modes = list("inclusive", + "exclusive", + "recognizer", + "voice sensor") + +/obj/item/device/assembly/voice/examine(mob/user) + ..() + to_chat(user, "Use a multitool to swap between \"inclusive\", \"exclusive\", \"recognizer\", and \"voice sensor\" mode.") + +/obj/item/device/assembly/voice/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + if(speaker == src) + return + + if(listening && !radio_freq) + record_speech(speaker, raw_message, message_language) + else + if(check_activation(speaker, raw_message)) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) + +/obj/item/device/assembly/voice/proc/record_speech(atom/movable/speaker, raw_message, datum/language/message_language) + switch(mode) + if(1) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.", message_language) + if(2) + recorded = raw_message + listening = 0 + say("Activation message is '[recorded]'.", message_language) + if(3) + recorded = speaker.GetVoice() + listening = 0 + say("Your voice pattern is saved.", message_language) + if(4) + if(length(raw_message)) + addtimer(CALLBACK(src, .proc/pulse, 0), 10) + +/obj/item/device/assembly/voice/proc/check_activation(atom/movable/speaker, raw_message) + . = 0 + switch(mode) + if(1) + if(findtext(raw_message, recorded)) + . = 1 + if(2) + if(raw_message == recorded) + . = 1 + if(3) + if(speaker.GetVoice() == recorded) + . = 1 + if(4) + if(length(raw_message)) + . = 1 + +/obj/item/device/assembly/voice/attackby(obj/item/W, mob/user, params) + if(istype(W, /obj/item/device/multitool)) + mode %= modes.len + mode++ + to_chat(user, "You set [src] into a [modes[mode]] mode.") + listening = 0 + recorded = "" + else + return ..() + +/obj/item/device/assembly/voice/activate() + if(secured) + if(!holder) + listening = !listening + say("[listening ? "Now" : "No longer"] recording input.") + +/obj/item/device/assembly/voice/attack_self(mob/user) + if(!user) + return 0 + activate() + return 1 + +/obj/item/device/assembly/voice/toggle_secure() + . = ..() + listening = 0 diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index d0c0979366..67e0381571 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -168,7 +168,7 @@ else chance_of_deletion = 100 if(prob(chance_of_deletion)) - T.ChangeTurf(T.baseturf) + T.ScrapeAway() else T.to_be_destroyed = FALSE T.max_fire_temperature_sustained = 0 diff --git a/code/modules/atmospherics/gasmixtures/gas_mixture.dm b/code/modules/atmospherics/gasmixtures/gas_mixture.dm index dd6e4ffe71..007aad331a 100644 --- a/code/modules/atmospherics/gasmixtures/gas_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/gas_mixture.dm @@ -22,18 +22,16 @@ GLOBAL_LIST_INIT(gaslist_cache, init_gaslist_cache()) /datum/gas_mixture var/list/gases - var/temperature //kelvins - var/tmp/temperature_archived - var/volume //liters - var/last_share + var/temperature = 0 //kelvins + var/tmp/temperature_archived = 0 + var/volume = CELL_VOLUME //liters + var/last_share = 0 var/list/reaction_results -/datum/gas_mixture/New(volume = CELL_VOLUME) +/datum/gas_mixture/New(volume) gases = new - temperature = 0 - temperature_archived = 0 - src.volume = volume - last_share = 0 + if (!isnull(volume)) + src.volume = volume reaction_results = new //listmos procs diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 952ee0e068..96b7df597c 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -80,8 +80,8 @@ var/shorted = 0 var/buildstage = 2 // 2 = complete, 1 = no wires, 0 = circuit gone - var/frequency = 1439 - var/alarm_frequency = 1437 + var/frequency = FREQ_ATMOS_CONTROL + var/alarm_frequency = FREQ_ATMOS_ALARMS var/datum/radio_frequency/radio_connection var/list/TLV = list( // Breathable air. @@ -427,21 +427,16 @@ /obj/machinery/airalarm/proc/set_frequency(new_frequency) SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_TO_AIRALARM) + radio_connection = SSradio.add_object(src, frequency, RADIO_TO_AIRALARM) /obj/machinery/airalarm/proc/send_signal(target, list/command)//sends signal 'command' to 'target'. Returns 0 if no radio connection, 1 otherwise if(!radio_connection) return 0 - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = command + var/datum/signal/signal = new(command) signal.data["tag"] = target signal.data["sigtype"] = "command" - - radio_connection.post_signal(src, signal, GLOB.RADIO_FROM_AIRALARM) + radio_connection.post_signal(src, signal, RADIO_FROM_AIRALARM) return 1 @@ -452,11 +447,7 @@ for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "co2_scrub" = 1, - "tox_scrub" = 0, - "n2o_scrub" = 0, - "rare_scrub"= 0, - "water_vapor_scrub"= 0, + "set_filters" = list(/datum/gas/carbon_dioxide), "scrubbing" = 1, "widenet" = 0, )) @@ -470,11 +461,18 @@ for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "co2_scrub" = 1, - "tox_scrub" = 1, - "n2o_scrub" = 1, - "rare_scrub"= 1, - "water_vapor_scrub"= 1, + "set_filters" = list( + /datum/gas/carbon_dioxide, + /datum/gas/plasma, + /datum/gas/water_vapor, + /datum/gas/hypernoblium, + /datum/gas/nitrous_oxide, + /datum/gas/nitryl, + /datum/gas/tritium, + /datum/gas/bz, + /datum/gas/stimulum, + /datum/gas/pluoxium + ), "scrubbing" = 1, "widenet" = 1, )) @@ -501,11 +499,7 @@ for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "co2_scrub" = 1, - "tox_scrub" = 0, - "n2o_scrub" = 0, - "rare_scrub"= 0, - "water_vapor_scrub"= 0, + "set_filters" = list(/datum/gas/carbon_dioxide), "scrubbing" = 1, "widenet" = 0, )) @@ -632,12 +626,10 @@ var/area/A = get_area(src) - var/datum/signal/alert_signal = new - alert_signal.source = src - alert_signal.transmission_method = 1 - alert_signal.data["zone"] = A.name - alert_signal.data["type"] = "Atmospheric" - + var/datum/signal/alert_signal = new(list( + "zone" = A.name, + "type" = "Atmospheric" + )) if(alert_level==2) alert_signal.data["alert"] = "severe" else if (alert_level==1) @@ -645,7 +637,7 @@ else if (alert_level==0) alert_signal.data["alert"] = "clear" - frequency.post_signal(src, alert_signal,null,-1) + frequency.post_signal(src, alert_signal, range = -1) /obj/machinery/airalarm/proc/apply_danger_level() var/area/A = get_area(src) @@ -742,7 +734,7 @@ return return ..() - + /obj/machinery/airalarm/AltClick(mob/user) ..() if(!issilicon(user) && (!user.canUseTopic(src, be_close=TRUE) || !isturf(loc))) @@ -750,7 +742,7 @@ return else togglelock(user) - + /obj/machinery/airalarm/proc/togglelock(mob/living/user) if(stat & (NOPOWER|BROKEN)) to_chat(user, "It does nothing!") diff --git a/code/modules/atmospherics/machinery/atmosmachinery.dm b/code/modules/atmospherics/machinery/atmosmachinery.dm index 6c335bf896..5ba74d59d9 100644 --- a/code/modules/atmospherics/machinery/atmosmachinery.dm +++ b/code/modules/atmospherics/machinery/atmosmachinery.dm @@ -60,8 +60,8 @@ Pipelines + Other Objects -> Pipe network SetInitDirections() /obj/machinery/atmospherics/Destroy() - for(DEVICE_TYPE_LOOP) - nullifyNode(I) + for(var/i in 1 to device_type) + nullifyNode(i) SSair.atmos_machinery -= src @@ -79,22 +79,22 @@ Pipelines + Other Objects -> Pipe network // Called to build a network from this node return -/obj/machinery/atmospherics/proc/nullifyNode(I) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I +/obj/machinery/atmospherics/proc/nullifyNode(i) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.disconnect(src) - NODE_I = null + nodes[i] = null /obj/machinery/atmospherics/proc/getNodeConnects() var/list/node_connects = list() node_connects.len = device_type - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) for(var/D in GLOB.cardinals) if(D & GetInitDirections()) if(D in node_connects) continue - node_connects[I] = D + node_connects[i] = D break return node_connects @@ -109,10 +109,10 @@ Pipelines + Other Objects -> Pipe network if(!node_connects) //for pipes where order of nodes doesn't matter node_connects = getNodeConnects() - for(DEVICE_TYPE_LOOP) - for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[I])) - if(can_be_node(target, I)) - NODE_I = target + for(var/i in 1 to device_type) + for(var/obj/machinery/atmospherics/target in get_step(src,node_connects[i])) + if(can_be_node(target, i)) + nodes[i] = target break update_icon() @@ -171,8 +171,7 @@ Pipelines + Other Objects -> Pipe network if(istype(reference, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/P = reference P.destroy_network() - var/I = nodes.Find(reference) - NODE_I = null + nodes[nodes.Find(reference)] = null update_icon() /obj/machinery/atmospherics/update_icon() @@ -302,7 +301,8 @@ Pipelines + Other Objects -> Pipe network #define VENT_SOUND_DELAY 30 /obj/machinery/atmospherics/relaymove(mob/living/user, direction) - if(!(direction & initialize_directions)) //cant go this way. + direction &= initialize_directions + if(!direction || !(direction in GLOB.cardinals)) //cant go this way. return if(user in buckled_mobs)// fixes buckle ventcrawl edgecase fuck bug @@ -323,13 +323,12 @@ Pipelines + Other Objects -> Pipe network if(world.time - user.last_played_vent > VENT_SOUND_DELAY) user.last_played_vent = world.time playsound(src, 'sound/machines/ventcrawl.ogg', 50, 1, -3) - else - if((direction & initialize_directions) || is_type_in_typecache(src, GLOB.ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent - user.forceMove(loc) - user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.") - user.canmove = 0 - spawn(1) - user.canmove = 1 + else if(is_type_in_typecache(src, GLOB.ventcrawl_machinery) && can_crawl_through()) //if we move in a way the pipe can connect, but doesn't - or we're in a vent + user.forceMove(loc) + user.visible_message("You hear something squeezing through the ducts...","You climb out the ventilation system.") + + user.canmove = FALSE + addtimer(VARSET_CALLBACK(user, canmove, TRUE), 1) /obj/machinery/atmospherics/AltClick(mob/living/L) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm index ef6dd85afa..7f37e049dd 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/circulator.dm @@ -15,14 +15,15 @@ anchored = TRUE density = TRUE + var/global/const/CIRC_LEFT = 1 var/global/const/CIRC_RIGHT = 2 /obj/machinery/atmospherics/components/binary/circulator/proc/return_transfer_air() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air1.return_pressure() var/input_starting_pressure = air2.return_pressure() @@ -39,6 +40,8 @@ var/transfer_moles = pressure_delta*air1.volume/(air2.temperature * R_IDEAL_GAS_EQUATION) last_pressure_delta = pressure_delta + + //Actually transfer the gas var/datum/gas_mixture/removed = air2.remove(transfer_moles) update_parents() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 6f72724e1e..9c806312a2 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -49,8 +49,8 @@ Acts like a normal vent, but has an input AND output. /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] air1.volume = 1000 air2.volume = 1000 @@ -73,8 +73,8 @@ Acts like a normal vent, but has an input AND output. if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() @@ -99,7 +99,7 @@ Acts like a normal vent, but has an input AND output. loc.assume_air(removed) air_update_turf() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = 1 else //external -> output @@ -122,7 +122,7 @@ Acts like a normal vent, but has an input AND output. air2.merge(removed) air_update_turf() - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = 1 //Radio remote control @@ -131,17 +131,13 @@ Acts like a normal vent, but has an input AND output. SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/dp_vent_pump/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "ADVP", "power" = on, @@ -151,8 +147,8 @@ Acts like a normal vent, but has an input AND output. "output" = output_pressure_max, "external" = external_pressure_bound, "sigtype" = "status" - ) - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/dp_vent_pump/atmosinit() ..() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index ef4e487efd..2fcc546cec 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -41,8 +41,8 @@ Passive gate is similar to the regular pump except: if(!on) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() var/input_starting_pressure = air1.return_pressure() @@ -72,25 +72,20 @@ Passive gate is similar to the regular pump except: SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/passive_gate/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AGP", "power" = on, "target_output" = target_pressure, "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/passive_gate/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 9d581fcb78..6ceaa8f461 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -50,8 +50,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] var/output_starting_pressure = air2.return_pressure() @@ -75,25 +75,20 @@ Thus, the two variables affect pump operation are set in New(): SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, filter = GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/pump/proc/broadcast_status() if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AGP", "power" = on, "target_output" = target_pressure, "sigtype" = "status" - ) - - radio_connection.post_signal(src, signal, filter = GLOB.RADIO_ATMOSIA) + )) + radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) /obj/machinery/atmospherics/components/binary/pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index e613012e82..1a9c76cb4d 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -31,7 +31,7 @@ It's like a regular ol' straight pipe, but you can turn it on and off. open = TRUE update_icon_nopipes() update_parents() - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.reconcile_air() investigate_log("was opened by [usr ? key_name(usr) : "a remote signal"]", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 2803d1bf09..6a33e72324 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -48,8 +48,8 @@ Thus, the two variables affect pump operation are set in New(): if(!on || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] // Pump mechanism just won't do anything if the pressure is too high/too low @@ -77,17 +77,13 @@ Thus, the two variables affect pump operation are set in New(): if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "APV", "power" = on, "transfer_rate" = transfer_rate, "sigtype" = "status" - ) + )) radio_connection.post_signal(src, signal) /obj/machinery/atmospherics/components/binary/volume_pump/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ @@ -150,7 +146,7 @@ Thus, the two variables affect pump operation are set in New(): on = !on if("set_transfer_rate" in signal.data) - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) if(on != old_on) diff --git a/code/modules/atmospherics/machinery/components/components_base.dm b/code/modules/atmospherics/machinery/components/components_base.dm index 5fb4611d92..e7f4d7844a 100644 --- a/code/modules/atmospherics/machinery/components/components_base.dm +++ b/code/modules/atmospherics/machinery/components/components_base.dm @@ -15,10 +15,10 @@ On top of that, now people can add component-speciic procs/vars if they want! airs = new(device_type) ..() - for(DEVICE_TYPE_LOOP) + for(var/i in 1 to device_type) var/datum/gas_mixture/A = new A.volume = 200 - AIR_I = A + airs[i] = A /* Iconnery */ @@ -42,9 +42,9 @@ Iconnery var/connected = 0 //Direction bitset - for(DEVICE_TYPE_LOOP) //adds intact pieces - if(NODE_I) - connected |= icon_addintact(NODE_I) + for(var/i in 1 to device_type) //adds intact pieces + if(nodes[i]) + connected |= icon_addintact(nodes[i]) icon_addbroken(connected) //adds broken pieces @@ -53,52 +53,45 @@ Iconnery Pipenet stuff; housekeeping */ -/obj/machinery/atmospherics/components/nullifyNode(I) +/obj/machinery/atmospherics/components/nullifyNode(i) ..() - if(NODE_I) - nullifyPipenet(PARENT_I) - qdel(AIR_I) - AIR_I = null + if(nodes[i]) + nullifyPipenet(parents[i]) + QDEL_NULL(airs[i]) /obj/machinery/atmospherics/components/on_construction() ..() update_parents() /obj/machinery/atmospherics/components/build_network() - for(DEVICE_TYPE_LOOP) - if(!PARENT_I) - PARENT_I = new /datum/pipeline() - var/datum/pipeline/P = PARENT_I + for(var/i in 1 to device_type) + if(!parents[i]) + parents[i] = new /datum/pipeline() + var/datum/pipeline/P = parents[i] P.build_pipeline(src) /obj/machinery/atmospherics/components/proc/nullifyPipenet(datum/pipeline/reference) - var/I = parents.Find(reference) - reference.other_airs -= AIR_I + var/i = parents.Find(reference) + reference.other_airs -= airs[i] reference.other_atmosmch -= src - PARENT_I = null + parents[i] = null /obj/machinery/atmospherics/components/returnPipenetAir(datum/pipeline/reference) - var/I = parents.Find(reference) - return AIR_I + return airs[parents.Find(reference)] /obj/machinery/atmospherics/components/pipeline_expansion(datum/pipeline/reference) if(reference) - var/I = parents.Find(reference) - return list(NODE_I) - else - return ..() + return list(nodes[parents.Find(reference)]) + return ..() /obj/machinery/atmospherics/components/setPipenet(datum/pipeline/reference, obj/machinery/atmospherics/A) - var/I = nodes.Find(A) - PARENT_I = reference + parents[nodes.Find(A)] = reference -/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = NODE1) //returns PARENT1 if called without argument - var/I = nodes.Find(A) - return PARENT_I +/obj/machinery/atmospherics/components/returnPipenet(obj/machinery/atmospherics/A = nodes[1]) //returns parents[1] if called without argument + return parents[nodes.Find(A)] /obj/machinery/atmospherics/components/replacePipenet(datum/pipeline/Old, datum/pipeline/New) - var/I = parents.Find(Old) - PARENT_I = New + parents[parents.Find(Old)] = New /obj/machinery/atmospherics/components/unsafe_pressure_release(var/mob/user, var/pressures) ..() @@ -109,15 +102,15 @@ Pipenet stuff; housekeeping var/datum/gas_mixture/environment = T.return_air() var/lost = null var/times_lost = 0 - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] lost += pressures*environment.volume/(air.temperature * R_IDEAL_GAS_EQUATION) times_lost++ var/shared_loss = lost/times_lost var/datum/gas_mixture/to_release - for(DEVICE_TYPE_LOOP) - var/datum/gas_mixture/air = AIR_I + for(var/i in 1 to device_type) + var/datum/gas_mixture/air = airs[i] if(!to_release) to_release = air.remove(shared_loss) continue @@ -136,8 +129,8 @@ Helpers */ /obj/machinery/atmospherics/components/proc/update_parents() - for(DEVICE_TYPE_LOOP) - var/datum/pipeline/parent = PARENT_I + for(var/i in 1 to device_type) + var/datum/pipeline/parent = parents[i] if(!parent) throw EXCEPTION("Component is missing a pipenet! Rebuilding...") build_network() @@ -145,8 +138,8 @@ Helpers /obj/machinery/atmospherics/components/returnPipenets() . = list() - for(DEVICE_TYPE_LOOP) - . += returnPipenet(NODE_I) + for(var/i in 1 to device_type) + . += returnPipenet(nodes[i]) /* UI Stuff @@ -157,4 +150,3 @@ UI Stuff return ..() to_chat(user, "Access denied.") return UI_CLOSE - diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index a1d6dc8c7e..5281c3bad7 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -29,7 +29,7 @@ SSradio.remove_object(src, frequency) frequency = new_frequency if(frequency) - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_ATMOSIA) + radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA) /obj/machinery/atmospherics/components/trinary/filter/New() ..() @@ -50,7 +50,7 @@ ..() /obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "filter_on[flipped?"_f":""]" return icon_state = "filter_off[flipped?"_f":""]" @@ -63,12 +63,12 @@ /obj/machinery/atmospherics/components/trinary/filter/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) || !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index b15df59662..df50437b4f 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -33,7 +33,7 @@ return ..() /obj/machinery/atmospherics/components/trinary/mixer/update_icon_nopipes() - if(on && NODE1 && NODE2 && NODE3 && is_operational()) + if(on && nodes[1] && nodes[2] && nodes[3] && is_operational()) icon_state = "mixer_on[flipped?"_f":""]" return icon_state = "mixer_off[flipped?"_f":""]" @@ -46,18 +46,18 @@ /obj/machinery/atmospherics/components/trinary/mixer/New() ..() - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air3 = airs[3] air3.volume = 300 - AIR3 = air3 + airs[3] = air3 /obj/machinery/atmospherics/components/trinary/mixer/process_atmos() ..() - if(!on || !(NODE1 && NODE2 && NODE3) && !is_operational()) + if(!on || !(nodes[1] && nodes[2] && nodes[3]) && !is_operational()) return - var/datum/gas_mixture/air1 = AIR1 - var/datum/gas_mixture/air2 = AIR2 - var/datum/gas_mixture/air3 = AIR3 + var/datum/gas_mixture/air1 = airs[1] + var/datum/gas_mixture/air2 = airs[2] + var/datum/gas_mixture/air3 = airs[3] var/output_starting_pressure = air3.return_pressure() @@ -103,14 +103,14 @@ air3.merge(removed2) if(transfer_moles1) - var/datum/pipeline/parent1 = PARENT1 + var/datum/pipeline/parent1 = parents[1] parent1.update = TRUE if(transfer_moles2) - var/datum/pipeline/parent2 = PARENT2 + var/datum/pipeline/parent2 = parents[2] parent2.update = TRUE - var/datum/pipeline/parent3 = PARENT3 + var/datum/pipeline/parent3 = parents[3] parent3.update = TRUE return diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index a7123dd97b..2a59e14121 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -42,7 +42,7 @@ radio = new(src) radio.keyslot = new radio_key - radio.subspace_transmission = 1 + radio.subspace_transmission = TRUE radio.canhear_range = 0 radio.recalculateChannels() @@ -174,7 +174,7 @@ open_machine() return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] if(air1.gases.len) if(mob_occupant.bodytemperature < T0C) // Sleepytime. Why? More cryo magic. @@ -182,7 +182,7 @@ mob_occupant.Unconscious((mob_occupant.bodytemperature * unconscious_factor) * 2000) if(beaker) if(reagent_transfer == 0) // Magically transfer reagents. Because cryo magic. - beaker.reagents.trans_to(occupant, 1, 10 * efficiency) // Transfer reagents, multiplied because cryo magic. + beaker.reagents.trans_to(occupant, 1, efficiency * 0.25) // Transfer reagents. beaker.reagents.reaction(occupant, VAPOR) air1.gases[/datum/gas/oxygen][MOLES] -= 2 / efficiency //Let's use gas for this if(++reagent_transfer >= 10 * efficiency) // Throttle reagent transfer (higher efficiency will transfer the same amount but consume less from the beaker). @@ -196,9 +196,9 @@ if(!on) return - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] - if(!NODE1 || !AIR1 || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. + if(!nodes[1] || !airs[1] || !air1.gases.len || air1.gases[/datum/gas/oxygen][MOLES] < 5) // Turn off if the machine won't work. on = FALSE update_icon() return @@ -341,15 +341,14 @@ data["occupant"]["toxLoss"] = round(mob_occupant.getToxLoss(), 1) data["occupant"]["fireLoss"] = round(mob_occupant.getFireLoss(), 1) data["occupant"]["bodyTemperature"] = round(mob_occupant.bodytemperature, 1) - if(mob_occupant.bodytemperature < 225) + if(mob_occupant.bodytemperature < TCRYO) data["occupant"]["temperaturestatus"] = "good" - else if(mob_occupant.bodytemperature < 273.15) + else if(mob_occupant.bodytemperature < T0C) data["occupant"]["temperaturestatus"] = "average" else data["occupant"]["temperaturestatus"] = "bad" - - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] data["cellTemperature"] = round(air1.temperature, 1) data["isBeakerLoaded"] = beaker ? TRUE : FALSE @@ -401,7 +400,7 @@ return 0 // you can't see the pipe network when inside a cryo cell. /obj/machinery/atmospherics/components/unary/cryo_cell/return_temperature() - var/datum/gas_mixture/G = AIR1 + var/datum/gas_mixture/G = airs[1] if(G.total_moles() > 10) return G.temperature @@ -411,13 +410,13 @@ . = ..() if(.) SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm index c8daf29ad3..bd81d5c876 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/heat_exchanger.dm @@ -15,9 +15,9 @@ pipe_state = "heunary" /obj/machinery/atmospherics/components/unary/heat_exchanger/update_icon() - if(NODE1) + if(nodes[1]) icon_state = "he_intact" - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] add_atom_colour(node.color, FIXED_COLOUR_PRIORITY) else icon_state = "he_exposed" @@ -42,8 +42,8 @@ update_cycle = SSair.times_fired partner.update_cycle = SSair.times_fired - var/datum/gas_mixture/air_contents = AIR1 - var/datum/gas_mixture/partner_air_contents = partner.AIR1 + var/datum/gas_mixture/air_contents = airs[1] + var/datum/gas_mixture/partner_air_contents = partner.airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/other_air_heat_capacity = partner_air_contents.heat_capacity() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 64e6e56504..6eec4558ee 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -32,7 +32,7 @@ if(showpipe) add_overlay(getpipeimage(icon, "inje_cap", initialize_directions)) - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "inje_off" return @@ -53,7 +53,7 @@ if(!on || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] if(air_contents.temperature > 0) var/transfer_moles = (air_contents.return_pressure())*volume_rate/(air_contents.temperature * R_IDEAL_GAS_EQUATION) @@ -70,7 +70,7 @@ if(on || injecting || !is_operational()) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] injecting = 1 @@ -93,19 +93,14 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id, "device" = "AO", "power" = on, "volume_rate" = volume_rate, //"timestamp" = world.time, "sigtype" = "status" - ) - + )) radio_connection.post_signal(src, signal) /obj/machinery/atmospherics/components/unary/outlet_injector/atmosinit() @@ -130,7 +125,7 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] volume_rate = CLAMP(number, 0, air_contents.volume) if("status" in signal.data) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 051f3136ee..871aaeea13 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/portables_connector/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 0 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index 4e9df101a6..b12eb59442 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -13,7 +13,7 @@ /obj/machinery/atmospherics/components/unary/tank/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = volume air_contents.temperature = T20C if(gas_type) @@ -43,7 +43,7 @@ /obj/machinery/atmospherics/components/unary/tank/air/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.assert_gases(/datum/gas/oxygen, /datum/gas/nitrogen) air_contents.gases[/datum/gas/oxygen][MOLES] = AIR_CONTENTS * 0.2 air_contents.gases[/datum/gas/nitrogen][MOLES] = AIR_CONTENTS * 0.8 diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 8d34d5adfa..f52483f1ae 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -48,9 +48,9 @@ /obj/machinery/atmospherics/components/unary/thermomachine/process_atmos() ..() - if(!on || !NODE1) + if(!on || !nodes[1]) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/air_heat_capacity = air_contents.heat_capacity() var/combined_heat_capacity = heat_capacity + air_heat_capacity @@ -88,14 +88,14 @@ if(!..()) return 0 SetInitDirections() - var/obj/machinery/atmospherics/node = NODE1 + var/obj/machinery/atmospherics/node = nodes[1] if(node) node.disconnect(src) - NODE1 = null - nullifyPipenet(PARENT1) + nodes[1] = null + nullifyPipenet(parents[1]) atmosinit() - node = NODE1 + node = nodes[1] if(node) node.atmosinit() node.addMember(src) @@ -123,7 +123,7 @@ data["target"] = target_temperature data["initial"] = initial(target_temperature) - var/datum/gas_mixture/air1 = AIR1 + var/datum/gas_mixture/air1 = airs[1] data["temperature"] = air1.temperature data["pressure"] = air1.return_pressure() return data diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index 2c9a308ec9..3acc12114f 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -26,7 +26,7 @@ // INT_BOUND: Do not pass internal_pressure_bound // NO_BOUND: Do not pass either - var/frequency = 1439 + var/frequency = FREQ_ATMOS_CONTROL var/datum/radio_frequency/radio_connection var/radio_filter_out var/radio_filter_in @@ -81,7 +81,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/New() ..() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] air_contents.volume = 1000 /obj/machinery/atmospherics/components/unary/vent_pump/update_icon_nopipes() @@ -93,7 +93,7 @@ icon_state = "vent_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) if(icon_state == "vent_welded") icon_state = "vent_off" return @@ -122,12 +122,12 @@ ..() if(!is_operational()) return - if(!NODE1) + if(!nodes[1]) on = FALSE if(!on || welded) return - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/datum/gas_mixture/environment = loc.return_air() var/environment_pressure = environment.return_pressure() @@ -178,11 +178,7 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.transmission_method = 1 // radio signal - signal.source = src - - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id_tag, "frequency" = frequency, "device" = "VP", @@ -193,7 +189,7 @@ "internal" = internal_pressure_bound, "external" = external_pressure_bound, "sigtype" = "status" - ) + )) var/area/A = get_area(src) if(!A.air_vent_names[id_tag]) @@ -206,8 +202,8 @@ /obj/machinery/atmospherics/components/unary/vent_pump/atmosinit() //some vents work his own spesial way - radio_filter_in = frequency==1439?(GLOB.RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==1439?(GLOB.RADIO_TO_AIRALARM):null + radio_filter_in = frequency==FREQ_ATMOS_CONTROL?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==FREQ_ATMOS_CONTROL?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 8fffd70840..bbf614ac84 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -23,7 +23,7 @@ var/widenet = 0 //is this scrubber acting on the 3x3 area around it. var/list/turf/adjacent_turfs = list() - var/frequency = 1439 + var/frequency = FREQ_ATMOS_CONTROL var/datum/radio_frequency/radio_connection var/radio_filter_out var/radio_filter_in @@ -77,11 +77,11 @@ icon_state = "scrub_welded" return - if(!NODE1 || !on || !is_operational()) + if(!nodes[1] || !on || !is_operational()) icon_state = "scrub_off" return - if(scrubbing & SCRUBBING) + if(scrubbing & SCRUBBING) if(widenet) icon_state = "scrub_wide" else @@ -98,16 +98,12 @@ if(!radio_connection) return FALSE - var/datum/signal/signal = new - signal.transmission_method = 1 //radio signal - signal.source = src - var/list/f_types = list() for(var/path in GLOB.meta_gas_info) var/list/gas = GLOB.meta_gas_info[path] f_types += list(list("gas_id" = gas[META_GAS_ID], "gas_name" = gas[META_GAS_NAME], "enabled" = (path in filter_types))) - signal.data = list( + var/datum/signal/signal = new(list( "tag" = id_tag, "frequency" = frequency, "device" = "VS", @@ -117,7 +113,7 @@ "widenet" = widenet, "filter_types" = f_types, "sigtype" = "status" - ) + )) var/area/A = get_area(src) if(!A.air_scrub_names[id_tag]) @@ -130,8 +126,8 @@ return TRUE /obj/machinery/atmospherics/components/unary/vent_scrubber/atmosinit() - radio_filter_in = frequency==initial(frequency)?(GLOB.RADIO_FROM_AIRALARM):null - radio_filter_out = frequency==initial(frequency)?(GLOB.RADIO_TO_AIRALARM):null + radio_filter_in = frequency==initial(frequency)?(RADIO_FROM_AIRALARM):null + radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null if(frequency) set_frequency(frequency) broadcast_status() @@ -142,7 +138,7 @@ ..() if(welded || !is_operational()) return FALSE - if(!NODE1 || !on) + if(!nodes[1] || !on) on = FALSE return FALSE scrub(loc) @@ -156,7 +152,7 @@ return FALSE var/datum/gas_mixture/environment = tile.return_air() - var/datum/gas_mixture/air_contents = AIR1 + var/datum/gas_mixture/air_contents = airs[1] var/list/env_gases = environment.gases if(air_contents.return_pressure() >= 50*ONE_ATMOSPHERE) @@ -205,7 +201,7 @@ return TRUE -//There is no easy way for an object to be notified of changes to atmos can pass flags_1 +//There is no easy way for an object to be notified of changes to atmos can pass flags // So we check every machinery process (2 seconds) /obj/machinery/atmospherics/components/unary/vent_scrubber/process() if(widenet) @@ -242,6 +238,11 @@ if("toggle_filter" in signal.data) filter_types ^= gas_id2path(signal.data["toggle_filter"]) + if("set_filters" in signal.data) + filter_types = list() + for(var/gas in signal.data["set_filters"]) + filter_types += gas_id2path(gas) + if("init" in signal.data) name = signal.data["init"] return diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index ad7fdb921a..9191916d10 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -216,8 +216,8 @@ GL += P.return_air() for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) if(V.open) - PL |= V.PARENT1 - PL |= V.PARENT2 + PL |= V.parents[1] + PL |= V.parents[2] for(var/obj/machinery/atmospherics/components/unary/portables_connector/C in P.other_atmosmch) if(C.connected_device) GL += C.portableConnectorReturnAir() diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index a26b379735..ccddc8f8ac 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -77,15 +77,12 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.source = src - signal.transmission_method = 1 - signal.data = list( + var/datum/signal/signal = new(list( "id_tag" = id_tag, "device" = "AM", "pressure" = round(env_pressure), "sigtype" = "status" - ) + )) radio_connection.post_signal(src, signal) /obj/machinery/meter/proc/status() diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm index e4df82073b..bfabe4e955 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/manifold.dm @@ -32,9 +32,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) //4-way manifold /obj/machinery/atmospherics/pipe/heat_exchanging/manifold4w @@ -61,6 +61,6 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/heat.dmi', "manifold_intact[invis]", get_dir(src, nodes[i]))) diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index d2f85c7667..b193a7a8bc 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -107,14 +107,14 @@ P.destroy_network() while(reference in get_all_connected_nodes()) if(reference in nodes) - var/I = nodes.Find(reference) - NODE_I = null + var/i = nodes.Find(reference) + nodes[i] = null if(reference in front_nodes) - var/I = front_nodes.Find(reference) - front_nodes[I] = null + var/i = front_nodes.Find(reference) + front_nodes[i] = null if(reference in back_nodes) - var/I = back_nodes.Find(reference) - back_nodes[I] = null + var/i = back_nodes.Find(reference) + back_nodes[i] = null update_icon() /obj/machinery/atmospherics/pipe/layer_manifold/relaymove(mob/living/user, dir) diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 8560addc3a..ff4a4ea1ff 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -35,9 +35,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold/general diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index f368c6bb0f..f9692da4ab 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -26,9 +26,9 @@ cut_overlays() //Add non-broken pieces - for(DEVICE_TYPE_LOOP) - if(NODE_I) - add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, NODE_I))) + for(var/i in 1 to device_type) + if(nodes[i]) + add_overlay(getpipeimage('icons/obj/atmospherics/pipes/manifold.dmi', "manifold_full[invis]", get_dir(src, nodes[i]))) //Colored pipes, use these for mapping /obj/machinery/atmospherics/pipe/manifold4w/general diff --git a/code/modules/atmospherics/machinery/pipes/pipes.dm b/code/modules/atmospherics/machinery/pipes/pipes.dm index cc01e6c4bd..8f6b3976bf 100644 --- a/code/modules/atmospherics/machinery/pipes/pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/pipes.dm @@ -18,8 +18,8 @@ volume = 35 * device_type ..() -/obj/machinery/atmospherics/pipe/nullifyNode(I) - var/obj/machinery/atmospherics/oldN = NODE_I +/obj/machinery/atmospherics/pipe/nullifyNode(i) + var/obj/machinery/atmospherics/oldN = nodes[i] ..() if(oldN) oldN.build_network() @@ -33,11 +33,11 @@ parent.build_pipeline(src) /obj/machinery/atmospherics/pipe/update_icon() //overridden by manifolds - if(NODE1&&NODE2) + if(nodes[1] && nodes[2]) icon_state = "intact[invisibility ? "-f" : "" ]" else - var/have_node1 = NODE1?1:0 - var/have_node2 = NODE2?1:0 + var/have_node1 = nodes[1] ? TRUE : FALSE + var/have_node2 = nodes[2] ? TRUE : FALSE icon_state = "exposed[have_node1][have_node2][invisibility ? "-f" : "" ]" /obj/machinery/atmospherics/pipe/atmosinit() @@ -91,9 +91,9 @@ QDEL_NULL(parent) /obj/machinery/atmospherics/pipe/proc/update_node_icon() - for(DEVICE_TYPE_LOOP) - if(NODE_I) - var/obj/machinery/atmospherics/N = NODE_I + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/N = nodes[i] N.update_icon() /obj/machinery/atmospherics/pipe/returnPipenets() @@ -109,4 +109,3 @@ pipe_color = paint_color update_node_icon() return TRUE - diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 7b6351e939..b14c17d875 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -217,7 +217,7 @@ /obj/machinery/portable_atmospherics/canister/update_icon() if(stat & BROKEN) cut_overlays() - icon_state = "[initial(icon_state)]-1" + icon_state = "[icon_state]-1" return var/last_update = update @@ -324,13 +324,13 @@ valve_open = !valve_open timing = FALSE if(!valve_open) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) - pump.AIR1 = air_contents - pump.AIR2 = holding ? holding.air_contents : T.return_air() + pump.airs[1] = air_contents + pump.airs[2] = holding ? holding.air_contents : T.return_air() pump.target_pressure = release_pressure pump.process_atmos() // Pump gas. diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index 590297820e..58846dc839 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -54,7 +54,7 @@ //Perform the connection connected_port = new_port connected_port.connected_device = src - var/datum/pipeline/connected_port_parent = connected_port.PARENT1 + var/datum/pipeline/connected_port_parent = connected_port.parents[1] connected_port_parent.reconcile_air() anchored = TRUE //Prevent movement diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 36dd30731e..e94492ad2d 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -41,17 +41,17 @@ /obj/machinery/portable_atmospherics/pump/process_atmos() ..() if(!on) - pump.AIR1 = null - pump.AIR2 = null + pump.airs[1] = null + pump.airs[2] = null return var/turf/T = get_turf(src) if(direction == PUMP_OUT) // Hook up the internal pump. - pump.AIR1 = holding ? holding.air_contents : air_contents - pump.AIR2 = holding ? air_contents : T.return_air() + pump.airs[1] = holding ? holding.air_contents : air_contents + pump.airs[2] = holding ? air_contents : T.return_air() else - pump.AIR1 = holding ? air_contents : T.return_air() - pump.AIR2 = holding ? holding.air_contents : air_contents + pump.airs[1] = holding ? air_contents : T.return_air() + pump.airs[2] = holding ? holding.air_contents : air_contents pump.process_atmos() // Pump gas. if(!holding) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 8b640676ba..adcd9fd5b2 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -26,6 +26,7 @@ flags_2 = SLOWS_WHILE_IN_HAND_2 var/team = WHITE_TEAM var/reset_cooldown = 0 + var/anyonecanpickup = TRUE var/obj/effect/ctf/flag_reset/reset var/reset_path = /obj/effect/ctf/flag_reset @@ -48,7 +49,7 @@ STOP_PROCESSING(SSobj, src) /obj/item/twohanded/ctf/attack_hand(mob/living/user) - if(!is_ctf_target(user)) + if(!is_ctf_target(user) && !anyonecanpickup) to_chat(user, "Non players shouldn't be moving the flag!") return if(team in user.faction) @@ -509,7 +510,7 @@ /datum/outfit/ctf/red/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.REDTEAM_FREQ) + R.set_frequency(FREQ_CTF_RED) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 @@ -517,7 +518,7 @@ /datum/outfit/ctf/blue/post_equip(mob/living/carbon/human/H) ..() var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.BLUETEAM_FREQ) + R.set_frequency(FREQ_CTF_BLUE) R.freqlock = TRUE R.independent = TRUE H.dna.species.stunmod = 0 @@ -532,7 +533,6 @@ var/team = WHITE_TEAM time_between_triggers = 1 anchored = TRUE - flags_2 = SLOWS_WHILE_IN_HAND_2 alpha = 255 /obj/structure/trap/examine(mob/user) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 1f5df77be7..a10b958db0 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -21,6 +21,7 @@ var/brute_damage = 0 var/oxy_damage = 0 var/burn_damage = 0 + var/datum/disease/disease = null //Do they start with a pre-spawned disease? var/mob_color //Change the mob's color var/assignedrole var/show_flavour = TRUE @@ -70,6 +71,8 @@ M.gender = mob_gender if(faction) M.faction = list(faction) + if(disease) + M.ForceContractDisease(new disease) if(death) M.death(1) //Kills the new mob @@ -259,6 +262,19 @@ ///////////Civilians////////////////////// +/obj/effect/mob_spawn/human/corpse/assistant + name = "Assistant" + outfit = /datum/outfit/job/assistant + +/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection + disease = /datum/disease/beesease + +/obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection + disease = /datum/disease/brainrot + +/obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection + disease = /datum/disease/fluspanish + /obj/effect/mob_spawn/human/cook name = "Cook" outfit = /datum/outfit/job/cook @@ -276,7 +292,7 @@ name = "sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a space doctor!" + flavour_text = "You are a space doctor!" assignedrole = "Space Doctor" /obj/effect/mob_spawn/human/doctor/alive/equip(mob/living/carbon/human/H) @@ -331,7 +347,7 @@ name = "bartender sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a space bartender!" + flavour_text = "You are a space bartender!" assignedrole = "Space Bartender" /datum/outfit/spacebartender @@ -355,7 +371,7 @@ name = "beach bum sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a beach bum!" + flavour_text = "You are a beach bum!" assignedrole = "Beach Bum" /datum/outfit/beachbum @@ -433,7 +449,7 @@ name = "sleeper" icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" - flavour_text = "You are a Nanotrasen Commander!" + flavour_text = "You are a Nanotrasen Commander!" /obj/effect/mob_spawn/human/nanotrasensoldier/alive death = FALSE @@ -443,7 +459,7 @@ icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper" faction = "nanotrasenprivate" - flavour_text = "You are a Nanotrasen Private Security Officer!" + flavour_text = "You are a Nanotrasen Private Security Officer!" /////////////////Spooky Undead////////////////////// @@ -459,7 +475,7 @@ roundstart = FALSE icon = 'icons/effects/blood.dmi' icon_state = "remains" - flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path." + flavour_text = "By unknown powers, your skeletal remains have been reanimated! Walk this mortal plain and terrorize all living adventurers who dare cross your path." assignedrole = "Skeleton" /obj/effect/mob_spawn/human/zombie @@ -473,7 +489,7 @@ roundstart = FALSE icon = 'icons/effects/blood.dmi' icon_state = "remains" - flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path." + flavour_text = "By unknown powers, your rotting remains have been resurrected! Walk this mortal plain and terrorize all living adventurers who dare cross your path." /obj/effect/mob_spawn/human/abductor diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 2c683e91c9..74a9a30d7c 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -1,13 +1,13 @@ - -/obj/structure/closet/secure_closet/exile - name = "exile implants" + +/obj/structure/closet/secure_closet/exile + name = "exile implants" req_access = list(ACCESS_HOS) - -/obj/structure/closet/secure_closet/exile/New() - ..() - new /obj/item/implanter/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) + +/obj/structure/closet/secure_closet/exile/New() + ..() + new /obj/item/implanter/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) new /obj/item/implantcase/exile(src) \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index bf256fecbd..7fefde76b0 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -139,7 +139,7 @@ /obj/structure/academy_wizard_spawner/proc/summon_wizard() var/turf/T = src.loc var/mob/living/carbon/human/wizbody = new(T) - wizbody.fully_replace_character_name("Academy Teacher") + wizbody.fully_replace_character_name(wizbody.real_name, "Academy Teacher") wizbody.mind_initialize() var/datum/mind/wizmind = wizbody.mind wizmind.special_role = "Academy Defender" diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm index 05885fbe19..fd2f8f18af 100644 --- a/code/modules/awaymissions/mission_code/caves.dm +++ b/code/modules/awaymissions/mission_code/caves.dm @@ -42,7 +42,7 @@ /obj/item/paper/fluff/awaymissions/caves/work_notice name = "work notice" - info = "
    Survival Info For Miners


    The caves are an unforgiving place, the only thing you'll have to traverse is the supplies in your locker and your own wit. Travel in packs when mining and try to shut down the monster dens before they overwhelm you. The job is dangerous but the haul is good, so remember this infomation and hopefully we'll all go home alive.
    " + info = "
    Survival Info For Miners


    The caves are an unforgiving place, the only thing you'll have to traverse is the supplies in your locker and your own wit. Travel in packs when mining and try to shut down the monster dens before they overwhelm you. The job is dangerous but the haul is good, so remember this information and hopefully we'll all go home alive.
    " /obj/item/paper/fluff/awaymissions/caves/shipment_notice name = "shipment notice" diff --git a/code/modules/awaymissions/mission_code/centcomAway.dm b/code/modules/awaymissions/mission_code/centcomAway.dm index 11c3f14012..082d2d3c9e 100644 --- a/code/modules/awaymissions/mission_code/centcomAway.dm +++ b/code/modules/awaymissions/mission_code/centcomAway.dm @@ -60,4 +60,4 @@ teams never did figure out what happened that last time... and I can't wrap my head \ around it myself. Why would a shuttle full of evacuees all snap and beat each other \ to death the moment they reached safety?
    \ - - D. Cereza" + - D. Cereza" \ No newline at end of file diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 4aa6e88249..65ed8f95b7 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -136,41 +136,18 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") /* * Modified Nar-Sie */ -/obj/singularity/narsie/sc_Narsie +/obj/singularity/narsie/mini desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." move_self = 0 //Contianed narsie does not move! grav_pull = 0 //Contained narsie does not pull stuff in! - var/uneatable = list(/turf/open/space, /obj/effect/overlay, /mob/living/simple_animal/hostile/construct) //Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment -/obj/singularity/narsie/sc_Narsie/admin_investigate_setup() +/obj/singularity/narsie/mini/admin_investigate_setup() return -/obj/singularity/narsie/sc_Narsie/process() +/obj/singularity/narsie/mini/process() eat() if(prob(25)) mezzer() -/obj/singularity/narsie/sc_Narsie/consume(atom/A) - if(is_type_in_list(A, uneatable)) - return 0 - if(isliving(A)) - var/mob/living/L = A - L.gib() - else if(istype(A, /obj/)) - var/obj/O = A - O.ex_act(EXPLODE_DEVASTATE) - if(O) - qdel(O) - else if(isturf(A)) - var/turf/T = A - if(T.intact) - for(var/obj/O in T.contents) - if(O.level != 1) - continue - if(O.invisibility == INVISIBILITY_MAXIMUM) - src.consume(O) - T.ChangeTurf(/turf/open/space) - return - -/obj/singularity/narsie/sc_Narsie/ex_act() +/obj/singularity/narsie/mini/ex_act() return \ No newline at end of file diff --git a/code/modules/awaymissions/pamphlet.dm b/code/modules/awaymissions/pamphlet.dm index a1d12ae90a..94ebb91972 100644 --- a/code/modules/awaymissions/pamphlet.dm +++ b/code/modules/awaymissions/pamphlet.dm @@ -1,39 +1,39 @@ -/obj/item/paper/pamphlet - name = "pamphlet" - icon_state = "pamphlet" +/obj/item/paper/pamphlet + name = "pamphlet" + icon_state = "pamphlet" /obj/item/paper/pamphlet/gateway - info = "Welcome to the Nanotrasen Gateway project...
    \ - Congratulations! If you're reading this, you and your superiors have decided that you're \ - ready to commit to a life spent colonising the rolling hills of far away worlds. You \ - must be ready for a lifetime of adventure, a little bit of hard work, and an award \ - winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
    \ -
    Because we care about you, we feel it is only fair to make sure you know the risks \ - before you commit to joining the Nanotrasen Gateway project. All away destinations have \ - been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ - We've even left a case of space beer along with the basic materials you'll need to expand \ - Nanotrasen's operational area and start your new life.

    \ - Gateway Operation Basics
    \ - All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ - area equipment power as you would expect, and without this supply, it cannot safely function, \ - causinng it to reject all attempts at operation.

    \ - Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ - searching for an output location. The amount of time this takes is variable, but the Gateway \ - interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ - searching process. Influenza will not interrupt the searching process. Temporal anomalies \ - may cause the estimate to be inaccurate, but will not interrupt the searching process.

    \ - Life On The Other Side
    \ - Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ - This is a normal side effect of travelling vast distances in a short period of time. You should \ - survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ - expeditionary teams have ensured the complete safety of all away locations, but in a small \ - number of cases, the Gateway they have established may not be immediately obvious. \ - Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ -

    A New World
    \ - As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ - Though complete safety is assured, participants are advised to prepare for inhospitable \ - environs." - -//we don't want the silly text overlay! -/obj/item/paper/pamphlet/update_icon() - return + info = "Welcome to the Nanotrasen Gateway project...
    \ + Congratulations! If you're reading this, you and your superiors have decided that you're \ + ready to commit to a life spent colonising the rolling hills of far away worlds. You \ + must be ready for a lifetime of adventure, a little bit of hard work, and an award \ + winning dental plan- but that's not all the Nanotrasen Gateway project has to offer.
    \ +
    Because we care about you, we feel it is only fair to make sure you know the risks \ + before you commit to joining the Nanotrasen Gateway project. All away destinations have \ + been fully scanned by a Nanotrasen expeditionary team, and are certified to be 100% safe. \ + We've even left a case of space beer along with the basic materials you'll need to expand \ + Nanotrasen's operational area and start your new life.

    \ + Gateway Operation Basics
    \ + All Nanotrasen approved Gateways operate on the same basic principals. They operate off \ + area equipment power as you would expect, and without this supply, it cannot safely function, \ + causinng it to reject all attempts at operation.

    \ + Once it is correctly setup, and once it has enough power to operate, the Gateway will begin \ + searching for an output location. The amount of time this takes is variable, but the Gateway \ + interface will give you an estimate accurate to the minute. Power loss will not interrupt the \ + searching process. Influenza will not interrupt the searching process. Temporal anomalies \ + may cause the estimate to be inaccurate, but will not interrupt the searching process.

    \ + Life On The Other Side
    \ + Once you have traversed the Gateway, you may experience some disorientation. Do not panic. \ + This is a normal side effect of travelling vast distances in a short period of time. You should \ + survey the immediate area, and attempt to locate your complimentary case of space beer. Our \ + expeditionary teams have ensured the complete safety of all away locations, but in a small \ + number of cases, the Gateway they have established may not be immediately obvious. \ + Do not panic if you cannot locate the return Gateway. Begin colonisation of the destination. \ +

    A New World
    \ + As a participant in the Nanotrasen Gateway Project, you will be on the frontiers of space. \ + Though complete safety is assured, participants are advised to prepare for inhospitable \ + environs." + +//we don't want the silly text overlay! +/obj/item/paper/pamphlet/update_icon() + return diff --git a/code/modules/awaymissions/super_secret_room.dm b/code/modules/awaymissions/super_secret_room.dm index b1f505a27e..4b25d768f4 100644 --- a/code/modules/awaymissions/super_secret_room.dm +++ b/code/modules/awaymissions/super_secret_room.dm @@ -124,4 +124,4 @@ ..() /obj/effect/landmark/error - name = "error" \ No newline at end of file + name = "error" diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 3fcb0648a1..296c876688 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -201,14 +201,10 @@ /obj/machinery/computer/cargo/proc/post_signal(command) - var/datum/radio_frequency/frequency = SSradio.return_frequency(1435) + var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS) if(!frequency) return - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - + var/datum/signal/status_signal = new(list("command" = command)) frequency.post_signal(src, status_signal) diff --git a/code/modules/cargo/exports/research.dm b/code/modules/cargo/exports/research.dm index b1ac30e7f9..d2d11cecd1 100644 --- a/code/modules/cargo/exports/research.dm +++ b/code/modules/cargo/exports/research.dm @@ -12,8 +12,8 @@ if(sold_nodes[V]) //Already sold before, don't want it. continue var/datum/techweb_node/TWN = D.stored_research.researched_nodes[V] - cost += TWN - return ..() * cost + cost += TWN.export_price + return cost /datum/export/tech/sell_object(obj/O) ..() diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 3704494050..8825ce0933 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -324,6 +324,9 @@ GLOBAL_LIST_EMPTY(asset_datums) "chevron.png" = 'html/chevron.png', "chevron-expand.png" = 'html/chevron-expand.png', "scales.png" = 'html/scales.png', + "coding.png" = 'html/coding.png', + "ban.png" = 'html/ban.png', + "chrome-wrench.png" = 'html/chrome-wrench.png', "changelog.css" = 'html/changelog.css' ) @@ -372,3 +375,39 @@ GLOBAL_LIST_EMPTY(asset_datums) var/meter = icon('icons/obj/atmospherics/pipes/simple.dmi', "meterX", SOUTH, frame, movement_states) if(meter) register_asset(sanitize_filename("[prefix].south.meterX.png"), fcopy_rsc(meter)) + +// Representative icons for each research design +/datum/asset/simple/research_designs/register() + for (var/path in subtypesof(/datum/design)) + var/datum/design/D = path + + // construct the icon and slap it into the resource cache + var/atom/item = initial(D.build_path) + if (!ispath(item, /atom)) + // biogenerator outputs to beakers by default + if (initial(D.build_type) & BIOGENERATOR) + item = /obj/item/reagent_containers/glass/beaker/large + else + continue // shouldn't happen, but just in case + + // circuit boards become their resulting machines or computers + if (ispath(item, /obj/item/circuitboard)) + var/obj/item/circuitboard/C = item + var/machine = initial(C.build_path) + if (machine) + item = machine + var/icon_file = initial(item.icon) + var/icon/I = icon(icon_file, initial(item.icon_state), SOUTH) + + // computers (and snowflakes) get their screen and keyboard sprites + if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) + var/obj/machinery/computer/C = item + var/screen = initial(C.icon_screen) + var/keyboard = initial(C.icon_keyboard) + if (screen) + I.Blend(icon(icon_file, screen, SOUTH), ICON_OVERLAY) + if (keyboard) + I.Blend(icon(icon_file, keyboard, SOUTH), ICON_OVERLAY) + + assets["design_[initial(D.id)].png"] = I + return ..() diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 10d3866672..9ae87488ce 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -70,4 +70,4 @@ var/list/credits //lazy list of all credit object bound to this client - var/datum/player_details/player_details //these persist between logins/logouts during the same round. + var/datum/player_details/player_details //these persist between logins/logouts during the same round. \ No newline at end of file diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 407e9aa37c..fd4581507b 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -75,7 +75,8 @@ //Logs all hrefs, except chat pings if(!(href_list["_src_"] == "chat" && href_list["proc"] == "ping" && LAZYLEN(href_list) == 2)) - WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]) || [hsrc ? "[hsrc] " : ""][href]
    ") + WRITE_FILE(GLOB.world_href_log, "[time_stamp(show_ds = TRUE)] [src] (usr:[usr]\[[COORD(usr)]\]) || [hsrc ? "[hsrc] " : ""][href]
    ") + // Admin PM if(href_list["priv_msg"]) cmd_admin_pm(href_list["priv_msg"],null) @@ -195,13 +196,9 @@ GLOBAL_LIST(external_rsc_urls) if(!prefs) prefs = new /datum/preferences(src) GLOB.preferences_datums[ckey] = prefs - else - prefs.parent = src prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning - if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) - vars["fps"] = prefs.clientfps - sethotkeys(1) //set hoykeys from preferences (from_pref = 1) + fps = prefs.clientfps log_access("Login: [key_name(src)] from [address ? address : "localhost"]-[computer_id] || BYOND v[byond_version]") var/alert_mob_dupe_login = FALSE @@ -236,6 +233,9 @@ GLOBAL_LIST(external_rsc_urls) . = ..() //calls mob.Login() + if(SSinput.initialized) + set_macros() + chatOutput.start() // Starts the chat if(alert_mob_dupe_login) @@ -363,7 +363,8 @@ GLOBAL_LIST(external_rsc_urls) if (menuitem) menuitem.Load_checked(src) - hook_vr("client_new",list(src)) + hook_vr("client_new",list(src)) // CIT CHANGE - hook for client/New() changes + Master.UpdateTickRate() ////////////// @@ -371,6 +372,8 @@ GLOBAL_LIST(external_rsc_urls) ////////////// /client/Del() + if(credits) + QDEL_LIST(credits) log_access("Logout: [key_name(src)]") if(holder) adminGreet(1) @@ -379,16 +382,17 @@ GLOBAL_LIST(external_rsc_urls) if (!GLOB.admins.len && SSticker.IsRoundInProgress()) //Only report this stuff if we are currently playing. var/cheesy_message = pick( "I have no admins online!",\ - "I'm all alone... :(",\ - "I'm feeling lonely. :(",\ - "I'm so lonely. :(",\ + "I'm all alone :(",\ + "I'm feeling lonely :(",\ + "I'm so lonely :(",\ "Why does nobody love me? :(",\ - "I want a man. :(",\ + "I want a man :(",\ "Where has everyone gone?",\ - "I need a hug. :(",\ - "Someone come hold me. :(",\ + "I need a hug :(",\ + "Someone come hold me :(",\ "I need someone on me :(",\ "What happened? Where has everyone gone?",\ + "Forever alone :(",\ "My nipples are so stiff, but Zelda ain't here. :(",\ "Leon senpai, play more Spessmans. :(",\ "If only Serdy were here...",\ @@ -401,8 +405,9 @@ GLOBAL_LIST(external_rsc_urls) "Oh good, no-one around to watch me lick Goofball's nipples. :D",\ "I've replaced Beepsky with a fidget spinner, glory be autism abuse.",\ "i shure hop dere are no PRED arund!!!!",\ - "NO PRED CAN eVER CATCH MI"\ - ) + "NO PRED CAN eVER CATCH MI",\ + "help, the clown is honking his horn in front of dorms and its interrupting everyones erp"\ + ) send2irc("Server", "[cheesy_message] (No admins online)") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0469f31aba..7c45a77814 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1,3 +1,5 @@ + + GLOBAL_LIST_EMPTY(preferences_datums) @@ -45,12 +47,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/allow_midround_antag = 1 var/preferred_map = null var/pda_style = MONO + var/pda_color = "#808000" var/uses_glasses_colour = 0 - var/screenshake = 100 - var/damagescreenshake = 2 - //character preferences var/real_name //our character's name var/be_random_name = 0 //whether we'll have a random name every round @@ -68,76 +68,74 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/skin_tone = "caucasian1" //Skin color var/eye_color = "000" //Eye color var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFF", - "mcolor2" = "FFF", - "mcolor3" = "FFF", - "tail_lizard" = "Smooth", - "tail_human" = "None", - "snout" = "Round", - "horns" = "None", - "ears" = "None", - "wings" = "None", - "frills" = "None", - "spines" = "None", - "body_markings" = "None", - "mam_body_markings" = "None", - "mam_ears" = "None", - "mam_tail" = "None", - "mam_tail_animated" = "None", - "xenodorsal" = "None", - "xenohead" = "None", - "xenotail" = "None", - "legs" = "Normal Legs", - "taur" = "None", - "exhibitionist" = FALSE, - "genitals_use_skintone" = FALSE, - "has_cock" = FALSE, - "cock_shape" = "Human", - "cock_length" = 6, - "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, - "cock_color" = "fff", - "has_sheath" = FALSE, - "sheath_color" = "fff", - "has_balls" = FALSE, - "balls_internal" = FALSE, - "balls_color" = "fff", - "balls_amount" = 2, - "balls_sack_size" = BALLS_SACK_SIZE_DEF, - "balls_size" = BALLS_SIZE_DEF, - "balls_cum_rate" = CUM_RATE, - "balls_cum_mult" = CUM_RATE_MULT, - "balls_efficiency" = CUM_EFFICIENCY, - "balls_fluid" = "semen", - "has_ovi" = FALSE, - "ovi_shape" = "knotted", - "ovi_length" = 6, - "ovi_color" = "fff", - "has_eggsack" = FALSE, - "eggsack_internal" = TRUE, - "eggsack_color" = "fff", - "eggsack_size" = BALLS_SACK_SIZE_DEF, - "eggsack_egg_color" = "fff", - "eggsack_egg_size" = EGG_GIRTH_DEF, - "has_breasts" = FALSE, - "breasts_color" = "fff", - "breasts_size" = "C", - "breasts_shape" = "Pair", - "breasts_fluid" = "milk", - "has_vag" = FALSE, - "vag_shape" = "Human", - "vag_color" = "fff", - "vag_clits" = 1, - "vag_clit_diam" = 0.25, - "vag_clit_len" = 0.25, - "has_womb" = FALSE, - "womb_cum_rate" = CUM_RATE, - "womb_cum_mult" = CUM_RATE_MULT, - "womb_efficiency" = CUM_EFFICIENCY, - "womb_fluid" = "femcum", - "flavor_text" = "" - )//MAKE SURE TO UPDATE THE LIST IN MOBS.DM IF YOU'RE GOING TO ADD TO THIS LIST, OTHERWISE THINGS MIGHT GET FUCKEY + var/list/features = list("mcolor" = "FFF", + "tail_lizard" = "Smooth", + "tail_human" = "None", + "snout" = "Round", + "horns" = "None", + "ears" = "None", + "wings" = "None", + "frills" = "None", + "spines" = "None", + "body_markings" = "None", + "legs" = "Normal Legs", + "mcolor2" = "FFF", + "mcolor3" = "FFF", + "mam_body_markings" = "None", + "mam_ears" = "None", + "mam_tail" = "None", + "mam_tail_animated" = "None", + "xenodorsal" = "None", + "xenohead" = "None", + "xenotail" = "None", + "taur" = "None", + "exhibitionist" = FALSE, + "genitals_use_skintone" = FALSE, + "has_cock" = FALSE, + "cock_shape" = "Human", + "cock_length" = 6, + "cock_girth_ratio" = COCK_GIRTH_RATIO_DEF, + "cock_color" = "fff", + "has_sheath" = FALSE, + "sheath_color" = "fff", + "has_balls" = FALSE, + "balls_internal" = FALSE, + "balls_color" = "fff", + "balls_amount" = 2, + "balls_sack_size" = BALLS_SACK_SIZE_DEF, + "balls_size" = BALLS_SIZE_DEF, + "balls_cum_rate" = CUM_RATE, + "balls_cum_mult" = CUM_RATE_MULT, + "balls_efficiency" = CUM_EFFICIENCY, + "balls_fluid" = "semen", + "has_ovi" = FALSE, + "ovi_shape" = "knotted", + "ovi_length" = 6, + "ovi_color" = "fff", + "has_eggsack" = FALSE, + "eggsack_internal" = TRUE, + "eggsack_color" = "fff", + "eggsack_size" = BALLS_SACK_SIZE_DEF, + "eggsack_egg_color" = "fff", + "eggsack_egg_size" = EGG_GIRTH_DEF, + "has_breasts" = FALSE, + "breasts_color" = "fff", + "breasts_size" = "C", + "breasts_shape" = "Pair", + "breasts_fluid" = "milk", + "has_vag" = FALSE, + "vag_shape" = "Human", + "vag_color" = "fff", + "vag_clits" = 1, + "vag_clit_diam" = 0.25, + "has_womb" = FALSE, + "womb_cum_rate" = CUM_RATE, + "womb_cum_mult" = CUM_RATE_MULT, + "womb_efficiency" = CUM_EFFICIENCY, + "womb_fluid" = "femcum", + "flavor_text" = "") - var/list/custom_names = list("clown", "mime", "ai", "cyborg", "religion", "deity") + var/list/custom_names = list("human", "clown", "mime", "ai", "cyborg", "religion", "deity") var/prefered_security_department = SEC_DEPT_RANDOM //Mob preview @@ -180,11 +178,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/action_buttons_screen_locs = list() - //citadel code - var/arousable = TRUE //Allows players to disable arousal from the character creation menu + var/screenshake = 100 + var/damagescreenshake = 2 + var/arousable = TRUE /datum/preferences/New(client/C) parent = C + custom_names["human"] = random_unique_name() custom_names["ai"] = pick(GLOB.ai_names) custom_names["cyborg"] = pick(GLOB.ai_names) custom_names["clown"] = pick(GLOB.clown_names) @@ -230,7 +230,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " switch(current_tab) - if (0) // Character Settings + if (0) // Character Settings# if(path) var/savefile/S = new /savefile(path) if(S) @@ -260,7 +260,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Age: [age]
    " dat += "Arousal:[arousable == TRUE ? "Enabled" : "Disabled"]
    " dat += "Exhibitionist:[features["exhibitionist"] == TRUE ? "Yes" : "No"]
    " + dat += "Special Names:
    " + dat += "Backup Human Name: [custom_names["human"]] " dat += "Clown: [custom_names["clown"]] " dat += "Mime:[custom_names["mime"]]
    " dat += "AI: [custom_names["ai"]] " @@ -276,17 +278,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
    " dat += "
    Antagonist Positions
    Antagonist Positions | " + dat += "Team Antagonists
    Cultist
    Servant
    " -// dat += "Size: [character_size]
    " dat += "
    " - dat += "Underwear:
    [underwear]
    " - dat += "Undershirt:
    [undershirt]
    " - dat += "Socks:
    [socks]
    " dat += "Backpack:
    [backbag]
    " dat += "Uplink Spawn Location:
    [uplink_spawn_loc]
    " dat += "" + if (1) // Game Preferences dat += "" */ - dat += "
    " dat += "

    General Settings

    " @@ -294,7 +293,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Keybindings: [(hotkeys) ? "Hotkeys" : "Default"]
    " dat += "Action Buttons: [(buttons_locked) ? "Locked In Place" : "Unlocked"]
    " dat += "tgui Style: [(tgui_fancy) ? "Fancy" : "No Frills"]
    " - dat += "PDA Style: [pda_style]
    " + dat += "PDA Style: [pda_style]
    " + dat += "PDA Color:     Change
    " dat += "tgui Monitors: [(tgui_lock) ? "Primary" : "All"]
    " dat += "Window Flashing: [(windowflashing) ? "Yes" : "No"]
    " dat += "Play admin midis: [(toggles & SOUND_MIDI) ? "Yes" : "No"]
    " @@ -449,7 +449,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("snout" in pref_species.mutant_bodyparts) dat += "Snout: [features["snout"]]
    " if("horns" in pref_species.mutant_bodyparts) - dat += "Snout: [features["horns"]]
    " + dat += "Horns: [features["horns"]]
    " if("frills" in pref_species.mutant_bodyparts) dat += "Frills: [features["frills"]]
    " if("spines" in pref_species.mutant_bodyparts) @@ -532,11 +532,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Color:    Change" dat += "Egg Color:    Change" dat += "Egg Size:[features["eggsack_egg_size"]]\" Diameter" - dat += "
    " dat += "
    " @@ -564,7 +562,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/HTML = "
    " if(SSjob.occupations.len <= 0) - HTML += "The job ticker is not yet finished creating jobs, please try again later" + HTML += "The job SSticker is not yet finished creating jobs, please try again later" HTML += "
    Done

    " // Easier to press up here. else @@ -609,12 +607,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if((job_civilian_low & ASSISTANT) && (rank != "Assistant") && !jobban_isbanned(user, "Assistant")) HTML += "[rank]" continue - if(CONFIG_GET(flag/enforce_human_authority) && !user.client.prefs.pref_species.qualifies_for_rank(rank, user.client.prefs.features)) - if(user.client.prefs.pref_species.id == "human") - HTML += "[rank] \[MUTANT\]" - else - HTML += "[rank] \[NON-HUMAN\]" - continue if((rank in GLOB.command_positions) || (rank == "AI"))//Bold head jobs HTML += "[rank]" else @@ -1094,6 +1086,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["tail_human"] = new_tail if(new_tail != "None") features["taur"] = "None" + if("mam_tail") var/new_tail new_tail = input(user, "Choose your character's tail:", "Character Preference") as null|anything in GLOB.mam_tails_list @@ -1111,32 +1104,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["mam_tail"] = "None" features["xenotail"] = "None" -/* Doesn't exist yet. will include facial overlays to mimic 5th port species heads. - if("mam_snout") - var/new_snout - new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.mam_snouts_list - if(new_snout) - features["snout"] = new_snout -*/ - if("snout") var/new_snout new_snout = input(user, "Choose your character's snout:", "Character Preference") as null|anything in GLOB.snouts_list if(new_snout) features["snout"] = new_snout - if("horns") - var/new_horns - new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list - if(new_horns) - features["horns"] = new_horns - if("mam_ears") var/new_ears new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.mam_ears_list if(new_ears) features["mam_ears"] = new_ears + if("horns") + var/new_horns + new_horns = input(user, "Choose your character's horns:", "Character Preference") as null|anything in GLOB.horns_list + if(new_horns) + features["horns"] = new_horns + if("ears") var/new_ears new_ears = input(user, "Choose your character's ears:", "Character Preference") as null|anything in GLOB.ears_list @@ -1206,7 +1191,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("ooccolor") var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference") as color|null if(new_ooccolor) - ooccolor = sanitize_ooccolor(new_ooccolor) + ooccolor = new_ooccolor if("bag") var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist @@ -1218,6 +1203,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_loc) uplink_spawn_loc = new_loc + if("human_name") + var/new_human_name = reject_bad_name( input(user, "Choose your character's backup human name, used in the event you are assigned a command role as another species:", "Character Preference") as text|null ) + if(new_human_name) + custom_names["human"] = new_human_name + else + to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") + if("clown_name") var/new_clown_name = reject_bad_name( input(user, "Choose your character's clown name:", "Character Preference") as text|null ) if(new_clown_name) @@ -1282,24 +1274,22 @@ GLOBAL_LIST_EMPTY(preferences_datums) preferred_map = maplist[pickedmap] if ("clientfps") - var/version_message - if (user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if (world.byond_version < 511) - version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num + var/desiredfps = input(user, "Choose your desired fps. (0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num if (!isnull(desiredfps)) clientfps = desiredfps - if (world.byond_version >= 511 && user.client && user.client.byond_version >= 511) - user.client.vars["fps"] = clientfps + parent.fps = desiredfps if("ui") var/pickedui = input(user, "Choose your UI style.", "Character Preference") as null|anything in list("Midnight", "Plasmafire", "Retro", "Slimecore", "Operative", "Clockwork") if(pickedui) UI_style = pickedui - if("PDA") - var/pickedPDA = input(user, "Choose your PDA style.", "Character Preference") as null|anything in list(MONO, SHARE, ORBITRON, VT) - if(pickedPDA) - pda_style = pickedPDA + if("pda_style") + var/pickedPDAStyle = input(user, "Choose your PDA style.", "Character Preference") as null|anything in list(MONO, SHARE, ORBITRON, VT) + if(pickedPDAStyle) + pda_style = pickedPDAStyle + if("pda_color") + var/pickedPDAColor = input(user, "Choose your PDA Interface color.", "Character Preference") as null|color + if(pickedPDAColor) + pda_color = pickedPDAColor //citadel code if("cock_color") @@ -1372,6 +1362,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["breasts_color"] = sanitize_hexcolor(new_breasts_color) else user << "Invalid color. Your color is not bright enough." + if("vag_shape") var/new_shape new_shape = input(user, "Vagina Type", "Character Preference") as null|anything in GLOB.vagina_shapes_list @@ -1388,6 +1379,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) else user << "Invalid color. Your color is not bright enough." + + else switch(href_list["preference"]) @@ -1429,7 +1422,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["has_balls"] = FALSE features["has_eggsack"] = FALSE - if("has_ovi") switch(features["has_ovi"]) if(TRUE) @@ -1452,7 +1444,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["has_eggsack"] = FALSE features["has_balls"] = FALSE - if("balls_internal") switch(features["balls_internal"]) if(TRUE) @@ -1474,7 +1465,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) else features["eggsack_internal"] = FALSE features["balls_internal"] = FALSE - if("has_breasts") switch(features["has_breasts"]) if(TRUE) @@ -1521,7 +1511,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) damagescreenshake = 0 else damagescreenshake = 1 - if("publicity") if(unlock_content) toggles ^= MEMBER_PUBLIC @@ -1530,14 +1519,18 @@ GLOBAL_LIST_EMPTY(preferences_datums) gender = FEMALE else gender = MALE - underwear = "Nude" - undershirt = "Nude" - socks = "Nude" - facial_hair_style = "Shaved" - hair_style = "Bald" + underwear = random_underwear(gender) + undershirt = random_undershirt(gender) + socks = random_socks() + facial_hair_style = random_facial_hair_style(gender) + hair_style = random_hair_style(gender) if("hotkeys") hotkeys = !hotkeys + if(hotkeys) + winset(user, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=default") + else + winset(user, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=old_default") if("action_buttons") buttons_locked = !buttons_locked if("tgui_fancy") @@ -1667,7 +1660,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.backbag = backbag - character.dna.features = features.Copy() //Flavor text is now a DNA feature + character.dna.features = features.Copy() character.dna.real_name = character.real_name var/datum/species/chosen_species if(pref_species.id in GLOB.roundstart_races) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 48dab29cf6..f79ec86dd6 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -141,6 +141,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["has_womb"] = sanitize_integer(features["has_womb"], 0, 1, 0) if(current_version < 19) pda_style = "mono" + if(current_version < 20) + pda_color = "#808000" + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) @@ -186,16 +189,17 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["inquisitive_ghost"] >> inquisitive_ghost S["uses_glasses_colour"]>> uses_glasses_colour S["clientfps"] >> clientfps + S["parallax"] >> parallax S["menuoptions"] >> menuoptions S["enable_tips"] >> enable_tips S["tip_delay"] >> tip_delay - S["parallax"] >> parallax - S["menuoptions"] >> menuoptions + S["pda_style"] >> pda_style + S["pda_color"] >> pda_color + //citadel code S["arousable"] >> arousable S["screenshake"] >> screenshake S["damagescreenshake"] >> damagescreenshake - S["pda_style"] >> pda_style //try to fix any outdated data if necessary if(needs_update >= 0) @@ -220,9 +224,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car ghost_others = sanitize_inlist(ghost_others, GLOB.ghost_others_options, GHOST_OTHERS_DEFAULT_OPTION) menuoptions = SANITIZE_LIST(menuoptions) be_special = SANITIZE_LIST(be_special) - screenshake = sanitize_integer(screenshake, 0, 200, initial(screenshake)) - damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) pda_style = sanitize_inlist(MONO, VT, SHARE, ORBITRON) + pda_color = sanitize_hexcolor(pda_color, 6, 1, initial(pda_color)) + + screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) + damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) return 1 @@ -234,7 +240,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return 0 S.cd = "/" - WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //updates (or failing that the sanity checks) will ensure data is not invalid at load. Assume up-to-date //general preferences WRITE_FILE(S["ooccolor"], ooccolor) @@ -262,11 +268,13 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["menuoptions"], menuoptions) WRITE_FILE(S["enable_tips"], enable_tips) WRITE_FILE(S["tip_delay"], tip_delay) + WRITE_FILE(S["pda_style"], pda_style) + WRITE_FILE(S["pda_color"], pda_color) + //citadel code WRITE_FILE(S["screenshake"], screenshake) WRITE_FILE(S["damagescreenshake"], damagescreenshake) WRITE_FILE(S["arousable"], arousable) - WRITE_FILE(S["pda_style"], pda_style) return 1 @@ -333,6 +341,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] + S["human_name"] >> custom_names["human"] S["clown_name"] >> custom_names["clown"] S["mime_name"] >> custom_names["mime"] S["ai_name"] >> custom_names["ai"] @@ -403,7 +412,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car else //We have no old flavortext, default to new S["feature_flavor_text"] >> features["flavor_text"] - //try to fix any outdated data if necessary if(needs_update >= 0) update_character(needs_update, S) //needs_update == savefile_version if we need an update (positive integer) @@ -421,14 +429,14 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(gender == MALE) hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_male_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_male_list) -// underwear = sanitize_inlist(underwear, GLOB.underwear_m) -// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) + //underwear = sanitize_inlist(underwear, GLOB.underwear_m) + //undershirt = sanitize_inlist(undershirt, GLOB.undershirt_m) else hair_style = sanitize_inlist(hair_style, GLOB.hair_styles_female_list) facial_hair_style = sanitize_inlist(facial_hair_style, GLOB.facial_hair_styles_female_list) -// underwear = sanitize_inlist(underwear, GLOB.underwear_f) -// undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) -// socks = sanitize_inlist(socks, GLOB.socks_list) + //underwear = sanitize_inlist(underwear, GLOB.underwear_f) + //undershirt = sanitize_inlist(undershirt, GLOB.undershirt_f) + //socks = sanitize_inlist(socks, GLOB.socks_list) underwear = "Nude" undershirt = "Nude" socks = "Nude" @@ -479,56 +487,57 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car return 0 S.cd = "/character[default_slot]" - S["version"] << SAVEFILE_VERSION_MAX //load_character will sanitize any bad data, so assume up-to-date. + WRITE_FILE(S["version"] , SAVEFILE_VERSION_MAX) //load_character will sanitize any bad data, so assume up-to-date.) //Character - WRITE_FILE(S["OOC_Notes"], metadata) - WRITE_FILE(S["real_name"], real_name) + WRITE_FILE(S["OOC_Notes"] , metadata) + WRITE_FILE(S["real_name"] , real_name) WRITE_FILE(S["name_is_always_random"] , be_random_name) WRITE_FILE(S["body_is_always_random"] , be_random_body) - WRITE_FILE(S["gender"], gender) - WRITE_FILE(S["age"], age) - WRITE_FILE(S["hair_color"], hair_color) - WRITE_FILE(S["facial_hair_color"], facial_hair_color) - WRITE_FILE(S["eye_color"], eye_color) - WRITE_FILE(S["skin_tone"], skin_tone) - WRITE_FILE(S["hair_style_name"], hair_style) - WRITE_FILE(S["facial_style_name"], facial_hair_style) - WRITE_FILE(S["underwear"], underwear) - WRITE_FILE(S["undershirt"], undershirt) - WRITE_FILE(S["socks"], socks) - WRITE_FILE(S["backbag"], backbag) - WRITE_FILE(S["uplink_loc"], uplink_spawn_loc) - WRITE_FILE(S["species"], pref_species.id) - WRITE_FILE(S["feature_mcolor"], features["mcolor"]) - WRITE_FILE(S["feature_lizard_tail"], features["tail_lizard"]) - WRITE_FILE(S["feature_human_tail"], features["tail_human"]) - WRITE_FILE(S["feature_lizard_snout"], features["snout"]) - WRITE_FILE(S["feature_lizard_horns"], features["horns"]) - WRITE_FILE(S["feature_human_ears"], features["ears"]) - WRITE_FILE(S["feature_lizard_frills"], features["frills"]) - WRITE_FILE(S["feature_lizard_spines"], features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"], features["body_markings"]) - WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) - WRITE_FILE(S["clown_name"], custom_names["clown"]) - WRITE_FILE(S["mime_name"], custom_names["mime"]) - WRITE_FILE(S["ai_name"] , custom_names["ai"]) - WRITE_FILE(S["cyborg_name"], custom_names["cyborg"]) - WRITE_FILE(S["religion_name"], custom_names["religion"]) - WRITE_FILE(S["deity_name"], custom_names["deity"]) - WRITE_FILE(S["prefered_security_department"], prefered_security_department) + WRITE_FILE(S["gender"] , gender) + WRITE_FILE(S["age"] , age) + WRITE_FILE(S["hair_color"] , hair_color) + WRITE_FILE(S["facial_hair_color"] , facial_hair_color) + WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["skin_tone"] , skin_tone) + WRITE_FILE(S["hair_style_name"] , hair_style) + WRITE_FILE(S["facial_style_name"] , facial_hair_style) + WRITE_FILE(S["underwear"] , underwear) + WRITE_FILE(S["undershirt"] , undershirt) + WRITE_FILE(S["socks"] , socks) + WRITE_FILE(S["backbag"] , backbag) + WRITE_FILE(S["uplink_loc"] , uplink_spawn_loc) + WRITE_FILE(S["species"] , pref_species.id) + WRITE_FILE(S["feature_mcolor"] , features["mcolor"]) + WRITE_FILE(S["feature_lizard_tail"] , features["tail_lizard"]) + WRITE_FILE(S["feature_human_tail"] , features["tail_human"]) + WRITE_FILE(S["feature_lizard_snout"] , features["snout"]) + WRITE_FILE(S["feature_lizard_horns"] , features["horns"]) + WRITE_FILE(S["feature_human_ears"] , features["ears"]) + WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) + WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) + WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) + WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) + WRITE_FILE(S["human_name"] , custom_names["human"]) + WRITE_FILE(S["clown_name"] , custom_names["clown"]) + WRITE_FILE(S["mime_name"] , custom_names["mime"]) + WRITE_FILE(S["ai_name"] , custom_names["ai"]) + WRITE_FILE(S["cyborg_name"] , custom_names["cyborg"]) + WRITE_FILE(S["religion_name"] , custom_names["religion"]) + WRITE_FILE(S["deity_name"] , custom_names["deity"]) + WRITE_FILE(S["prefered_security_department"] , prefered_security_department) //Jobs - WRITE_FILE(S["joblessrole"], joblessrole) - WRITE_FILE(S["job_civilian_high"], job_civilian_high) - WRITE_FILE(S["job_civilian_med"], job_civilian_med) - WRITE_FILE(S["job_civilian_low"], job_civilian_low) - WRITE_FILE(S["job_medsci_high"], job_medsci_high) - WRITE_FILE(S["job_medsci_med"], job_medsci_med) - WRITE_FILE(S["job_medsci_low"], job_medsci_low) - WRITE_FILE(S["job_engsec_high"], job_engsec_high) - WRITE_FILE(S["job_engsec_med"], job_engsec_med) - WRITE_FILE(S["job_engsec_low"], job_engsec_low) + WRITE_FILE(S["joblessrole"] , joblessrole) + WRITE_FILE(S["job_civilian_high"] , job_civilian_high) + WRITE_FILE(S["job_civilian_med"] , job_civilian_med) + WRITE_FILE(S["job_civilian_low"] , job_civilian_low) + WRITE_FILE(S["job_medsci_high"] , job_medsci_high) + WRITE_FILE(S["job_medsci_med"] , job_medsci_med) + WRITE_FILE(S["job_medsci_low"] , job_medsci_low) + WRITE_FILE(S["job_engsec_high"] , job_engsec_high) + WRITE_FILE(S["job_engsec_med"] , job_engsec_med) + WRITE_FILE(S["job_engsec_low"] , job_engsec_low) //Citadel WRITE_FILE(S["feature_genitals_use_skintone"], features["genitals_use_skintone"]) @@ -571,8 +580,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_has_womb"], features["has_womb"]) //flavor text WRITE_FILE(S["feature_flavor_text"], features["flavor_text"]) + return 1 + #undef SAVEFILE_VERSION_MAX #undef SAVEFILE_VERSION_MIN diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index fba2c486ab..255423a4fc 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -30,7 +30,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_ears)( usr.client.prefs.chat_toggles ^= CHAT_GHOSTEARS to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTEARS) ? "see all speech in the world" : "only see speech from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Ears", "[usr.client.prefs.chat_toggles & CHAT_GHOSTEARS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Ears", "[usr.client.prefs.chat_toggles & CHAT_GHOSTEARS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_ears/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTEARS @@ -41,7 +41,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_sight) usr.client.prefs.chat_toggles ^= CHAT_GHOSTSIGHT to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT) ? "see all emotes in the world" : "only see emotes from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Sight", "[usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Sight", "[usr.client.prefs.chat_toggles & CHAT_GHOSTSIGHT ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_sight/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTSIGHT @@ -52,7 +52,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_whispe usr.client.prefs.chat_toggles ^= CHAT_GHOSTWHISPER to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER) ? "see all whispers in the world" : "only see whispers from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Whispers", "[usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Whispers", "[usr.client.prefs.chat_toggles & CHAT_GHOSTWHISPER ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_whispers/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTWHISPER @@ -63,7 +63,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_radio) usr.client.prefs.chat_toggles ^= CHAT_GHOSTRADIO to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO) ? "see radio chatter" : "not see radio chatter"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Radio", "[usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Radio", "[usr.client.prefs.chat_toggles & CHAT_GHOSTRADIO ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! //social experiment, increase the generation whenever you copypaste this shamelessly GENERATION 1 /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_radio/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTRADIO @@ -74,7 +74,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox, toggle_ghost_pda)() usr.client.prefs.chat_toggles ^= CHAT_GHOSTPDA to_chat(usr, "As a ghost, you will now [(usr.client.prefs.chat_toggles & CHAT_GHOSTPDA) ? "see all pda messages in the world" : "only see pda messages from nearby mobs"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost PDA", "[usr.client.prefs.chat_toggles & CHAT_GHOSTPDA]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost PDA", "[usr.client.prefs.chat_toggles & CHAT_GHOSTPDA ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/chatterbox/toggle_ghost_pda/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_GHOSTPDA @@ -89,7 +89,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox/Events, toggle_death usr.client.prefs.toggles ^= DISABLE_DEATHRATTLE usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_DEATHRATTLE) ? "no longer" : "now"] get messages when a sentient mob dies.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Deathrattle", "[!(usr.client.prefs.toggles & DISABLE_DEATHRATTLE)]")) //If you are copy-pasting this, maybe you should spend some time reading the comments. + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Deathrattle", "[!(usr.client.prefs.toggles & DISABLE_DEATHRATTLE) ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, maybe you should spend some time reading the comments. /datum/verbs/menu/Settings/Ghost/chatterbox/Events/toggle_deathrattle/Get_checked(client/C) return !(C.prefs.toggles & DISABLE_DEATHRATTLE) @@ -100,7 +100,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost/chatterbox/Events, toggle_arriv usr.client.prefs.toggles ^= DISABLE_ARRIVALRATTLE to_chat(usr, "You will [(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE) ? "no longer" : "now"] get messages when someone joins the station.") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Arrivalrattle", "[!(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE)]")) //If you are copy-pasting this, maybe you should rethink where your life went so wrong. + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Arrivalrattle", "[!(usr.client.prefs.toggles & DISABLE_ARRIVALRATTLE) ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, maybe you should rethink where your life went so wrong. /datum/verbs/menu/Settings/Ghost/chatterbox/Events/toggle_arrivalrattle/Get_checked(client/C) return !(C.prefs.toggles & DISABLE_ARRIVALRATTLE) @@ -111,7 +111,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Ghost, togglemidroundantag)() usr.client.prefs.toggles ^= MIDROUND_ANTAG usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.toggles & MIDROUND_ANTAG) ? "now" : "no longer"] be considered for midround antagonist positions.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Midround Antag", "[usr.client.prefs.toggles & MIDROUND_ANTAG]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Midround Antag", "[usr.client.prefs.toggles & MIDROUND_ANTAG ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Ghost/togglemidroundantag/Get_checked(client/C) return C.prefs.toggles & MIDROUND_ANTAG @@ -128,7 +128,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggletitlemusic)() else to_chat(usr, "You will no longer hear music in the game lobby.") usr.stop_sound_channel(CHANNEL_LOBBYMUSIC) - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Lobby Music", "[usr.client.prefs.toggles & SOUND_LOBBY]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Lobby Music", "[usr.client.prefs.toggles & SOUND_LOBBY ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggletitlemusic/Get_checked(client/C) return C.prefs.toggles & SOUND_LOBBY @@ -147,7 +147,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, togglemidis)() var/client/C = usr.client if(C && C.chatOutput && !C.chatOutput.broken && C.chatOutput.loaded) C.chatOutput.sendMusic(" ") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Hearing Midis", "[usr.client.prefs.toggles & SOUND_MIDI]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Hearing Midis", "[usr.client.prefs.toggles & SOUND_MIDI ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/togglemidis/Get_checked(client/C) return C.prefs.toggles & SOUND_MIDI @@ -162,7 +162,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_instruments)() to_chat(usr, "You will now hear people playing musical instruments.") else to_chat(usr, "You will no longer hear musical instruments.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Instruments", "[usr.client.prefs.toggles & SOUND_INSTRUMENTS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Instruments", "[usr.client.prefs.toggles & SOUND_INSTRUMENTS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggle_instruments/Get_checked(client/C) return C.prefs.toggles & SOUND_INSTRUMENTS @@ -179,7 +179,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, Toggle_Soundscape)() to_chat(usr, "You will no longer hear ambient sounds.") usr.stop_sound_channel(CHANNEL_AMBIENCE) usr.stop_sound_channel(CHANNEL_BUZZ) - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ambience", "[usr.client.prefs.toggles & SOUND_AMBIENCE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ambience", "[usr.client.prefs.toggles & SOUND_AMBIENCE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/Toggle_Soundscape/Get_checked(client/C) return C.prefs.toggles & SOUND_AMBIENCE @@ -196,7 +196,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_ship_ambience)() to_chat(usr, "You will no longer hear ship ambience.") usr.stop_sound_channel(CHANNEL_BUZZ) usr.client.ambience_playing = 0 - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ship Ambience", "[usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE]")) //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ship Ambience", "[usr.client.prefs.toggles & SOUND_SHIP_AMBIENCE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, I bet you read this comment expecting to see the same thing :^) /datum/verbs/menu/Settings/Sound/toggle_ship_ambience/Get_checked(client/C) return C.prefs.toggles & SOUND_SHIP_AMBIENCE @@ -208,7 +208,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggle_announcement_sound)() usr.client.prefs.toggles ^= SOUND_ANNOUNCEMENTS to_chat(usr, "You will now [(usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"].") usr.client.prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Announcement Sound", "[usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Announcement Sound", "[usr.client.prefs.toggles & SOUND_ANNOUNCEMENTS ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/Sound/toggle_announcement_sound/Get_checked(client/C) return C.prefs.toggles & SOUND_ANNOUNCEMENTS @@ -223,7 +223,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleprayersounds)() to_chat(usr, "You will now hear prayer sounds.") else to_chat(usr, "You will no longer prayer sounds.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Sounds", "[usr.client.prefs.toggles & SOUND_PRAYERS]")) + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Sounds", "[usr.client.prefs.toggles & SOUND_PRAYERS ? "Enabled" : "Disabled"]")) /datum/verbs/menu/Settings/Sound/toggleprayersounds/Get_checked(client/C) return C.prefs.toggles & SOUND_PRAYERS @@ -246,7 +246,7 @@ TOGGLE_CHECKBOX(/datum/verbs/menu/Settings, listen_ooc)() usr.client.prefs.chat_toggles ^= CHAT_OOC usr.client.prefs.save_preferences() to_chat(usr, "You will [(usr.client.prefs.chat_toggles & CHAT_OOC) ? "now" : "no longer"] see messages on the OOC channel.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing OOC", "[usr.client.prefs.chat_toggles & CHAT_OOC]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing OOC", "[usr.client.prefs.chat_toggles & CHAT_OOC ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /datum/verbs/menu/Settings/listen_ooc/Get_checked(client/C) return C.prefs.chat_toggles & CHAT_OOC @@ -337,7 +337,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= INTENT_STYLE to_chat(src, "[(prefs.toggles & INTENT_STYLE) ? "Clicking directly on intents selects them." : "Clicking on intents rotates selection clockwise."]") prefs.save_preferences() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Intent Selection", "[prefs.toggles & INTENT_STYLE]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Intent Selection", "[prefs.toggles & INTENT_STYLE ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/toggle_ghost_hud_pref() set name = "Toggle Ghost HUD" @@ -349,7 +349,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.save_preferences() if(isobserver(mob)) mob.hud_used.show_hud() - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost HUD", "[prefs.ghost_hud]")) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost HUD", "[prefs.ghost_hud ? "Enabled" : "Disabled"]")) /client/verb/toggle_inquisition() // warning: unexpected inquisition set name = "Toggle Inquisitiveness" @@ -362,7 +362,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS to_chat(src, "You will now examine everything you click on.") else to_chat(src, "You will no longer examine things you click on.") - SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Inquisitiveness", "[prefs.inquisitive_ghost]")) + SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Ghost Inquisitiveness", "[prefs.inquisitive_ghost ? "Enabled" : "Disabled"]")) //Admin Preferences /client/proc/toggleadminhelpsound() @@ -374,7 +374,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= SOUND_ADMINHELP prefs.save_preferences() to_chat(usr, "You will [(prefs.toggles & SOUND_ADMINHELP) ? "now" : "no longer"] hear a sound when adminhelps arrive.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Adminhelp Sound", "[prefs.toggles & SOUND_ADMINHELP]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Adminhelp Sound", "[prefs.toggles & SOUND_ADMINHELP ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleannouncelogin() set name = "Do/Don't Announce Login" @@ -385,7 +385,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.toggles ^= ANNOUNCE_LOGIN prefs.save_preferences() to_chat(usr, "You will [(prefs.toggles & ANNOUNCE_LOGIN) ? "now" : "no longer"] have an announcement to other admins when you login.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Login Announcement", "[prefs.toggles & ANNOUNCE_LOGIN]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Login Announcement", "[prefs.toggles & ANNOUNCE_LOGIN ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_hear_radio() set name = "Show/Hide Radio Chatter" @@ -396,7 +396,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_RADIO prefs.save_preferences() to_chat(usr, "You will [(prefs.chat_toggles & CHAT_RADIO) ? "now" : "no longer"] see radio chatter from nearby radios or speakers") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Radio Chatter", "[prefs.chat_toggles & CHAT_RADIO]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Radio Chatter", "[prefs.chat_toggles & CHAT_RADIO ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/deadchat() set name = "Show/Hide Deadchat" @@ -405,7 +405,7 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_DEAD prefs.save_preferences() to_chat(src, "You will [(prefs.chat_toggles & CHAT_DEAD) ? "now" : "no longer"] see deadchat.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Deadchat Visibility", "[prefs.chat_toggles & CHAT_DEAD]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Deadchat Visibility", "[prefs.chat_toggles & CHAT_DEAD ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggleprayers() set name = "Show/Hide Prayers" @@ -414,4 +414,4 @@ GLOBAL_LIST_INIT(ghost_orbits, list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS prefs.chat_toggles ^= CHAT_PRAYER prefs.save_preferences() to_chat(src, "You will [(prefs.chat_toggles & CHAT_PRAYER) ? "now" : "no longer"] see prayerchat.") - SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Visibility", "[prefs.chat_toggles & CHAT_PRAYER]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Prayer Visibility", "[prefs.chat_toggles & CHAT_PRAYER ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index dd876f3701..d282fb9aed 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -128,7 +128,8 @@ return update_item(picked_item) - update_item_icon() + var/obj/item/thing = target + thing.update_slot_icon() UpdateButtonIcon() /datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) @@ -166,36 +167,6 @@ return random_look(owner) -/datum/action/item_action/chameleon/change/proc/update_item_icon() - var/obj/item/I = target - var/mob/living/M = owner - - var/flags_1 = I.slot_flags - if(flags_1 & SLOT_OCLOTHING) - M.update_inv_wear_suit() - if(flags_1 & SLOT_ICLOTHING) - M.update_inv_w_uniform() - if(flags_1 & SLOT_GLOVES) - M.update_inv_gloves() - if(flags_1 & SLOT_EYES) - M.update_inv_glasses() - if(flags_1 & SLOT_EARS) - M.update_inv_ears() - if(flags_1 & SLOT_MASK) - M.update_inv_wear_mask() - if(flags_1 & SLOT_HEAD) - M.update_inv_head() - if(flags_1 & SLOT_FEET) - M.update_inv_shoes() - if(flags_1 & SLOT_ID) - M.update_inv_wear_id() - if(flags_1 & SLOT_BELT) - M.update_inv_belt() - if(flags_1 & SLOT_BACK) - M.update_inv_back() - if(flags_1 & SLOT_NECK) - M.update_inv_neck() - /obj/item/clothing/under/chameleon //starts off as black name = "black jumpsuit" @@ -206,6 +177,7 @@ sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE resistance_flags = NONE + can_adjust = FALSE armor = list(melee = 10, bullet = 10, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 50) var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/ears/_ears.dm b/code/modules/clothing/ears/_ears.dm index 9d5433663e..0ff1bdefe3 100644 --- a/code/modules/clothing/ears/_ears.dm +++ b/code/modules/clothing/ears/_ears.dm @@ -1,3 +1,4 @@ + //Ears: currently only used for headsets and earmuffs /obj/item/clothing/ears name = "ears" diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 29990a299b..d07dde5a17 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -11,7 +11,7 @@ materials = list(MAT_GLASS = 250) var/vision_flags = 0 var/darkness_view = 2//Base human is 2 - var/invis_view = SEE_INVISIBLE_LIVING + var/invis_view = SEE_INVISIBLE_LIVING //admin only for now var/invis_override = 0 //Override to allow glasses to set higher than normal see_invis var/lighting_alpha var/list/icon/current = list() //the current hud icons @@ -41,7 +41,7 @@ /obj/item/clothing/glasses/proc/thermal_overload() if(ishuman(src.loc)) var/mob/living/carbon/human/H = src.loc - if(!(H.disabilities & BLIND)) + if(!(H.has_disability(DISABILITY_BLIND))) if(H.glasses == src) to_chat(H, "[src] overloads and blinds you!") H.flash_act(visual = 1) @@ -168,7 +168,7 @@ /obj/item/clothing/glasses/sunglasses name = "sunglasses" - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks flashes." icon_state = "sun" item_state = "sunglasses" darkness_view = 1 @@ -251,7 +251,7 @@ tint = 3 // to make them blind /obj/item/clothing/glasses/sunglasses/big - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks many flashes." + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Larger than average enhanced shielding blocks flashes." icon_state = "bigsunglasses" item_state = "bigsunglasses" @@ -261,7 +261,7 @@ icon_state = "thermal" item_state = "glasses" vision_flags = SEE_MOBS - invis_view = 2 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = 0 glass_colour_type = /datum/client_colour/glass_colour/red diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index 78718c897c..a54ced0cbc 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -60,7 +60,7 @@ /obj/item/clothing/glasses/meson/engine/process() if(mode == MODE_MESON) var/turf/T = get_turf(src) - if(T && T.z == ZLEVEL_MINING) + if(T && is_mining_level(T.z)) toggle_mode(loc) return diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 877a3bb458..4d59a893ea 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -174,7 +174,7 @@ icon_state = "thermal" hud_type = DATA_HUD_SECURITY_ADVANCED vision_flags = SEE_MOBS - invis_view = 2 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/red /obj/item/clothing/glasses/hud/toggle/thermal/attack_self(mob/user) diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index c230b14295..39767234e5 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -11,13 +11,21 @@ strip_delay = 20 equip_delay_other = 40 +/obj/item/clothing/gloves/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + +/obj/item/clothing/gloves/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return + transfer_blood = 0 /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "bloodyhands") /obj/item/clothing/gloves/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index 4f108a505f..614a2c194b 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -4,7 +4,7 @@ icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 item_color="yellow" resistance_flags = NONE @@ -14,7 +14,7 @@ icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 item_color="yellow" resistance_flags = NONE @@ -77,7 +77,7 @@ name = "insulated gloves" desc = "These gloves will protect the wearer from electric shock." siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 resistance_flags = NONE /obj/item/clothing/gloves/color/rainbow @@ -148,7 +148,7 @@ item_state = "egloves" item_color = "captain" siemens_coefficient = 0 - permeability_coefficient = 0.5 + permeability_coefficient = 0.05 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT heat_protection = HANDS @@ -162,7 +162,7 @@ icon_state = "latex" item_state = "lgloves" siemens_coefficient = 0.3 - permeability_coefficient = 0.1 + permeability_coefficient = 0.01 item_color="white" transfer_prints = TRUE resistance_flags = NONE @@ -192,7 +192,7 @@ item_state = "wgloves" item_color = "mime" -/obj/item/clothing/gloves/color/random/New() +/obj/item/clothing/gloves/color/random/Initialize() ..() var/list/gloves = list( /obj/item/clothing/gloves/color/orange = 1, @@ -202,12 +202,14 @@ /obj/item/clothing/gloves/color/green = 1, /obj/item/clothing/gloves/color/grey = 1, /obj/item/clothing/gloves/color/light_brown = 1, - /obj/item/clothing/gloves/color/brown = 1) + /obj/item/clothing/gloves/color/brown = 1, + /obj/item/clothing/gloves/color/white = 1, + /obj/item/clothing/gloves/color/rainbow = 1) var/obj/item/clothing/gloves/color/selected = pick(gloves) - - name = initial(selected.name) - desc = initial(selected.desc) - icon_state = initial(selected.icon_state) - item_state = initial(selected.item_state) - item_color = initial(selected.item_color) + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.equip_to_slot_or_del(new selected(H), slot_gloves) + else + new selected(loc) + return INITIALIZE_HINT_QDEL diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 8bc8f12dec..9ec6542cf5 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -20,7 +20,7 @@ if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "helmetblood") /obj/item/clothing/head/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 9adc86e7f8..51a1131f1c 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -1,84 +1,84 @@ -/obj/item/clothing/head/hardhat - name = "hard hat" - desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." - icon_state = "hardhat0_yellow" - item_state = "hardhat0_yellow" - var/brightness_on = 4 //luminosity when on +/obj/item/clothing/head/hardhat + name = "hard hat" + desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight." + icon_state = "hardhat0_yellow" + item_state = "hardhat0_yellow" + var/brightness_on = 4 //luminosity when on var/on = FALSE - item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) - armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) - flags_inv = 0 - actions_types = list(/datum/action/item_action/toggle_helmet_light) - resistance_flags = FIRE_PROOF + item_color = "yellow" //Determines used sprites: hardhat[on]_[item_color] and hardhat[on]_[item_color]2 (lying down sprite) + armor = list(melee = 15, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20, fire = 100, acid = 50) + flags_inv = 0 + actions_types = list(/datum/action/item_action/toggle_helmet_light) + resistance_flags = FIRE_PROOF dynamic_hair_suffix = "+generic" - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/attack_self(mob/user) - on = !on - icon_state = "hardhat[on]_[item_color]" - item_state = "hardhat[on]_[item_color]" - user.update_inv_head() //so our mob-overlays update - - if(on) - turn_on(user) - else - turn_off(user) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() - -/obj/item/clothing/head/hardhat/proc/turn_on(mob/user) - set_light(brightness_on) - -/obj/item/clothing/head/hardhat/proc/turn_off(mob/user) - set_light(0) - -/obj/item/clothing/head/hardhat/orange - icon_state = "hardhat0_orange" - item_state = "hardhat0_orange" - item_color = "orange" - dog_fashion = null - -/obj/item/clothing/head/hardhat/red - icon_state = "hardhat0_red" - item_state = "hardhat0_red" - item_color = "red" - dog_fashion = null - name = "firefighter helmet" + + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/hardhat/attack_self(mob/user) + on = !on + icon_state = "hardhat[on]_[item_color]" + item_state = "hardhat[on]_[item_color]" + user.update_inv_head() //so our mob-overlays update + + if(on) + turn_on(user) + else + turn_off(user) + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/clothing/head/hardhat/proc/turn_on(mob/user) + set_light(brightness_on) + +/obj/item/clothing/head/hardhat/proc/turn_off(mob/user) + set_light(0) + +/obj/item/clothing/head/hardhat/orange + icon_state = "hardhat0_orange" + item_state = "hardhat0_orange" + item_color = "orange" + dog_fashion = null + +/obj/item/clothing/head/hardhat/red + icon_state = "hardhat0_red" + item_state = "hardhat0_red" + item_color = "red" + dog_fashion = null + name = "firefighter helmet" flags_1 = STOPSPRESSUREDMAGE_1 - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - -/obj/item/clothing/head/hardhat/white - icon_state = "hardhat0_white" - item_state = "hardhat0_white" - item_color = "white" + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + +/obj/item/clothing/head/hardhat/white + icon_state = "hardhat0_white" + item_state = "hardhat0_white" + item_color = "white" flags_1 = STOPSPRESSUREDMAGE_1 - heat_protection = HEAD - max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/dblue - icon_state = "hardhat0_dblue" - item_state = "hardhat0_dblue" - item_color = "dblue" - dog_fashion = null - -/obj/item/clothing/head/hardhat/atmos - icon_state = "hardhat0_atmos" - item_state = "hardhat0_atmos" - item_color = "atmos" - dog_fashion = null - name = "atmospheric technician's firefighting helmet" - desc = "A firefighter's helmet, able to keep the user cool in any situation." + heat_protection = HEAD + max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + dog_fashion = /datum/dog_fashion/head + +/obj/item/clothing/head/hardhat/dblue + icon_state = "hardhat0_dblue" + item_state = "hardhat0_dblue" + item_color = "dblue" + dog_fashion = null + +/obj/item/clothing/head/hardhat/atmos + icon_state = "hardhat0_atmos" + item_state = "hardhat0_atmos" + item_color = "atmos" + dog_fashion = null + name = "atmospheric technician's firefighting helmet" + desc = "A firefighter's helmet, able to keep the user cool in any situation." flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - heat_protection = HEAD - max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT - cold_protection = HEAD - min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + heat_protection = HEAD + max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT + cold_protection = HEAD + min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 9f09783df2..544d9e7b12 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -1,5 +1,7 @@ + + /obj/item/clothing/head/centhat - name = "\improper Centcom hat" + name = "\improper CentCom hat" icon_state = "centcom" desc = "It's good to be emperor." item_state = "that" @@ -291,6 +293,18 @@ desc = "A simple straw hat." icon_state = "scarecrow_hat" +/obj/item/clothing/head/lobsterhat + name = "foam lobster head" + desc = "When everything's going to crab, protecting your head is the best choice." + icon_state = "lobster_hat" + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR + +/obj/item/clothing/head/drfreezehat + name = "doctor freeze's wig" + desc = "A cool wig for cool people." + icon_state = "drfreeze_hat" + flags_inv = HIDEHAIR + /obj/item/clothing/head/pharoah name = "pharoah hat" desc = "Walk like an Egyptian." diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index eacfa3faea..562375e897 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -15,7 +15,7 @@ if(body_parts_covered & HEAD) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/mask/update_clothes_damaged_state(damaging = TRUE) diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 2baaf91135..b0f2a18a5b 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -12,7 +12,7 @@ if(body_parts_covered & HEAD) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "maskblood") /obj/item/clothing/neck/tie diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 58b4d1fffe..403b81211d 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -14,8 +14,8 @@ L.implant(H, null, 1) var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE var/obj/item/card/id/W = H.wear_id W.registered_name = H.real_name diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index e16dd2a782..050c2fdc87 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -102,8 +102,8 @@ var/obj/item/device/radio/R = H.ears if(R) - R.set_frequency(GLOB.SYND_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_SYNDICATE) + R.freqlock = TRUE var/obj/item/card/id/W = H.wear_id if(W) @@ -257,8 +257,8 @@ W.update_label() var/obj/item/device/radio/headset/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE /datum/outfit/ghost_cultist name = "Cultist Ghost" @@ -396,8 +396,8 @@ return var/obj/item/device/radio/R = H.ears - R.set_frequency(GLOB.CENTCOM_FREQ) - R.freqlock = 1 + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE var/obj/item/implant/mindshield/L = new/obj/item/implant/mindshield(H)//Here you go Deuryn L.implant(H, null, 1) diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index d71827df95..d058e82a3a 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -15,12 +15,16 @@ var/offset = 0 var/equipped_before_drop = FALSE +/obj/item/clothing/shoes/ComponentInitialize() + . = ..() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) + /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) - var/bloody = 0 - if(blood_DNA) - bloody = 1 + var/bloody = FALSE + IF_HAS_BLOOD_DNA(src) + bloody = TRUE else bloody = bloody_shoes[BLOOD_STATE_HUMAN] @@ -53,8 +57,9 @@ var/mob/M = loc M.update_inv_shoes() -/obj/item/clothing/shoes/clean_blood() - ..() +/obj/item/clothing/shoes/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) blood_state = BLOOD_STATE_NOT_BLOODY if(ismob(loc)) @@ -62,4 +67,4 @@ M.update_inv_shoes() /obj/item/proc/negates_gravity() - return 0 \ No newline at end of file + return FALSE \ No newline at end of file diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index e934b77f38..1ff8c65d4b 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -2,7 +2,7 @@ icon = 'icons/obj/clothing/suits.dmi' name = "suit" var/fire_resist = T0C+100 - allowed = list(/obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" @@ -14,7 +14,7 @@ if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damaged[blood_overlay_type]") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "[blood_overlay_type]blood") var/mob/living/carbon/human/M = loc if(ishuman(M) && M.w_uniform) diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 7cbdb46f55..3e044108fb 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -354,7 +354,7 @@ item_state = "centcom" w_class = WEIGHT_CLASS_BULKY body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/gun/energy, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) flags_1 = THICKMATERIAL_1 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT cold_protection = CHEST | GROIN | LEGS | FEET | ARMS | HANDS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 11b60817ed..bfd4415b3a 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -21,7 +21,7 @@ flags_1 = THICKMATERIAL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS slowdown = 1 - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/pen, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 80, fire = 30, acid = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT strip_delay = 70 diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index bb379ae6f3..e6331eb8b8 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -20,7 +20,7 @@ item_state = "bio_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/disk, /obj/item/stamp, /obj/item/reagent_containers/food/drinks/flask, /obj/item/melee, /obj/item/storage/lockbox/medal, /obj/item/device/assembly/flash/handheld, /obj/item/storage/box/matches, /obj/item/lighter, /obj/item/clothing/mask/cigarette, /obj/item/storage/fancy/cigarettes, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Chaplain /obj/item/clothing/suit/hooded/chaplain_hoodie @@ -29,7 +29,7 @@ icon_state = "chaplain_hoodie" item_state = "chaplain_hoodie" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) hoodtype = /obj/item/clothing/head/hooded/chaplain_hood /obj/item/clothing/head/hooded/chaplain_hood @@ -46,7 +46,7 @@ item_state = "nun" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/studentuni name = "student robe" @@ -54,7 +54,7 @@ icon_state = "studentuni" item_state = "studentuni" body_parts_covered = ARMS|CHEST - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/witchhunter name = "witchunter garb" @@ -62,7 +62,7 @@ icon_state = "witchhunter" item_state = "witchhunter" body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) //Chef /obj/item/clothing/suit/toggle/chef diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index f50f6eaf6a..7c7599af3d 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -1,48 +1,49 @@ -/obj/item/clothing/suit/toggle/labcoat - name = "labcoat" - desc = "A suit that protects against minor chemical spills." - icon_state = "labcoat" - item_state = "labcoat" - blood_overlay_type = "coat" - body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen) - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) - togglename = "buttons" - -/obj/item/clothing/suit/toggle/labcoat/cmo - name = "chief medical officer's labcoat" - desc = "Bluer than the standard model." - icon_state = "labcoat_cmo" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/emt - name = "EMT's jacket" - desc = "A dark blue jacket with reflective strips for emergency medical technicians." - icon_state = "labcoat_emt" - item_state = "labcoat_cmo" - -/obj/item/clothing/suit/toggle/labcoat/mad - name = "\improper The Mad's labcoat" - desc = "It makes you look capable of konking someone on the noggin and shooting them into space." - icon_state = "labgreen" - item_state = "labgreen" - -/obj/item/clothing/suit/toggle/labcoat/genetics - name = "geneticist labcoat" - desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." - icon_state = "labcoat_gen" - -/obj/item/clothing/suit/toggle/labcoat/chemist - name = "chemist labcoat" - desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." - icon_state = "labcoat_chem" - -/obj/item/clothing/suit/toggle/labcoat/virologist - name = "virologist labcoat" - desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." - icon_state = "labcoat_vir" - -/obj/item/clothing/suit/toggle/labcoat/science - name = "scientist labcoat" - desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." - icon_state = "labcoat_tox" \ No newline at end of file +/obj/item/clothing/suit/toggle/labcoat + name = "labcoat" + desc = "A suit that protects against minor chemical spills." + icon_state = "labcoat" + item_state = "labcoat" + blood_overlay_type = "coat" + body_parts_covered = CHEST|ARMS + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/device/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 50, acid = 50) + togglename = "buttons" + species_exception = list(/datum/species/golem) + +/obj/item/clothing/suit/toggle/labcoat/cmo + name = "chief medical officer's labcoat" + desc = "Bluer than the standard model." + icon_state = "labcoat_cmo" + item_state = "labcoat_cmo" + +/obj/item/clothing/suit/toggle/labcoat/emt + name = "EMT's jacket" + desc = "A dark blue jacket with reflective strips for emergency medical technicians." + icon_state = "labcoat_emt" + item_state = "labcoat_cmo" + +/obj/item/clothing/suit/toggle/labcoat/mad + name = "\improper The Mad's labcoat" + desc = "It makes you look capable of konking someone on the noggin and shooting them into space." + icon_state = "labgreen" + item_state = "labgreen" + +/obj/item/clothing/suit/toggle/labcoat/genetics + name = "geneticist labcoat" + desc = "A suit that protects against minor chemical spills. Has a blue stripe on the shoulder." + icon_state = "labcoat_gen" + +/obj/item/clothing/suit/toggle/labcoat/chemist + name = "chemist labcoat" + desc = "A suit that protects against minor chemical spills. Has an orange stripe on the shoulder." + icon_state = "labcoat_chem" + +/obj/item/clothing/suit/toggle/labcoat/virologist + name = "virologist labcoat" + desc = "A suit that protects against minor chemical spills. Offers slightly more protection against biohazards than the standard model. Has a green stripe on the shoulder." + icon_state = "labcoat_vir" + +/obj/item/clothing/suit/toggle/labcoat/science + name = "scientist labcoat" + desc = "A suit that protects against minor chemical spills. Has a purple stripe on the shoulder." + icon_state = "labcoat_tox" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index a5135222d0..5a2e5ade3c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -93,7 +93,7 @@ item_state = "syndicate-black-red" desc = "A plastic replica of the Syndicate space suit. You'll look just like a real murderous Syndicate agent in this! This is a toy, it is not made for use in space!" w_class = WEIGHT_CLASS_NORMAL - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT resistance_flags = NONE @@ -160,7 +160,7 @@ item_state = "w_suit" body_parts_covered = CHEST|GROIN|LEGS|ARMS flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/cardborg name = "cardborg suit" @@ -240,7 +240,7 @@ body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT //Space carp like space, so you should too - allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/gun/ballistic/automatic/speargun) + allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/gun/ballistic/automatic/speargun) hoodtype = /obj/item/clothing/head/hooded/carp_hood /obj/item/clothing/head/hooded/carp_hood @@ -355,7 +355,7 @@ desc = "Aviators not included." icon_state = "bomberjacket" item_state = "brownjsuit" - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/device/radio) body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT @@ -367,7 +367,7 @@ item_state = "hostrench" resistance_flags = NONE max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) /obj/item/clothing/suit/jacket/leather/overcoat name = "leather overcoat" @@ -397,7 +397,7 @@ desc = "A canvas jacket styled after classical American military garb. Feels sturdy, yet comfortable." icon_state = "militaryjacket" item_state = "militaryjacket" - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/device/radio) /obj/item/clothing/suit/jacket/letterman name = "letterman jacket" @@ -470,7 +470,7 @@ cold_protection = CHEST|GROIN|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) /obj/item/clothing/head/hooded/winterhood name = "winter hood" @@ -513,7 +513,7 @@ name = "medical winter coat" icon_state = "coatmedical" item_state = "coatmedical" - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0, fire = 0, acid = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical @@ -524,7 +524,7 @@ name = "science winter coat" icon_state = "coatscience" item_state = "coatscience" - allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen) + allowed = list(/obj/item/device/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/device/healthanalyzer, /obj/item/device/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0, fire = 0, acid = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/science @@ -536,7 +536,7 @@ icon_state = "coatengineer" item_state = "coatengineer" armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 20, fire = 30, acid = 45) - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering /obj/item/clothing/head/hooded/winterhood/engineering @@ -555,7 +555,7 @@ name = "hydroponics winter coat" icon_state = "coathydro" item_state = "coathydro" - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/device/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/toy, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) hoodtype = /obj/item/clothing/head/hooded/winterhood/hydro /obj/item/clothing/head/hooded/winterhood/hydro @@ -574,7 +574,7 @@ name = "mining winter coat" icon_state = "coatminer" item_state = "coatminer" - allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) + allowed = list(/obj/item/pickaxe, /obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 10c1a47ac1..22b5ee421b 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -18,7 +18,7 @@ gas_transfer_coefficient = 0.9 permeability_coefficient = 0.5 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/extinguisher, /obj/item/crowbar) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/extinguisher, /obj/item/crowbar) slowdown = 1 flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags_1 = STOPSPRESSUREDMAGE_1 | THICKMATERIAL_1 @@ -141,7 +141,7 @@ permeability_coefficient = 0.5 flags_1 = THICKMATERIAL_1 body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/device/geiger_counter) + allowed = list(/obj/item/device/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/device/geiger_counter) slowdown = 1.5 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100, fire = 30, acid = 30) strip_delay = 60 @@ -151,6 +151,6 @@ /obj/item/clothing/suit/radiation/ComponentInitialize() . = ..() - AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE) + AddComponent(/datum/component/rad_insulation, RAD_NO_INSULATION, TRUE, FALSE) // Just don't want things to be irradiated inside this // Except things on the mob aren't even inside the suit so ehhhhhh \ No newline at end of file diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index bb9887c373..008ced69ea 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -149,7 +149,7 @@ name = "papier-mache robe" // no non-latin characters! desc = "A robe held together by various bits of clear-tape and paste." icon_state = "wizard-paper" - item_state = "wizrobe" + item_state = "wizard-paper" var/robe_charge = TRUE actions_types = list(/datum/action/item_action/stickmen) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 43da19896b..62fd5b5f5a 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -19,10 +19,9 @@ /obj/item/clothing/under/worn_overlays(isinhands = FALSE) . = list() if(!isinhands) - if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") - if(blood_DNA) + IF_HAS_BLOOD_DNA(src) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood") if(accessory_overlay) . += accessory_overlay diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 2ff546a6eb..3a12f00a05 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -4,13 +4,15 @@ /obj/item/clothing/under/color/random icon_state = "random_jumpsuit" -/obj/item/clothing/under/color/random/New() +/obj/item/clothing/under/color/random/Initialize() ..() - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random) - name = initial(C.name) - icon_state = initial(C.icon_state) - item_state = initial(C.item_state) - item_color = initial(C.item_color) + var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/glorf - /obj/item/clothing/under/color/black/ghost) + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.equip_to_slot_or_del(new C(H), slot_w_uniform) //or else you end up with naked assistants running around everywhere... + else + new C(loc) + return INITIALIZE_HINT_QDEL /obj/item/clothing/under/color/black name = "black jumpsuit" diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 4e7f0da011..6d522a3706 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -40,6 +40,7 @@ item_color = "cargo" body_parts_covered = CHEST|GROIN|ARMS mutantrace_variation = MUTANTRACE_VARIATION + alt_covers_chest = TRUE /obj/item/clothing/under/rank/chaplain diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 185712e072..cd69aec17e 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -31,4 +31,4 @@ icon_state = "robotics" item_state = "robotics" item_color = "robotics" - resistance_flags = NONE + resistance_flags = NONE \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 899219c227..1fccac5c43 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -274,6 +274,7 @@ icon_state = "burial" item_state = "burial" item_color = "burial" + has_sensor = NO_SENSORS /obj/item/clothing/under/skirt/black name = "black skirt" @@ -646,6 +647,7 @@ return 0 /obj/item/clothing/under/plasmaman/attackby(obj/item/E, mob/user, params) + ..() if (istype(E, /obj/item/device/extinguisher_refill)) if (extinguishes_left == 5) to_chat(user, "The inbuilt extinguisher is full.") diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index d2d633d103..5bf4ad27b8 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -1,119 +1,102 @@ -//CONTAINS: Suit fibers and Detective's Scanning Computer - -/atom/var/list/suit_fibers - -/atom/proc/add_fibers(mob/living/carbon/human/M) - if(M.gloves && istype(M.gloves, /obj/item/clothing/)) - var/obj/item/clothing/gloves/G = M.gloves - if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects - if(add_blood(G.blood_DNA)) //only reduces the bloodiness of our gloves if the item wasn't already bloody - G.transfer_blood-- - else if(M.bloody_hands > 1) - if(add_blood(M.blood_DNA)) - M.bloody_hands-- - if(!suit_fibers) - suit_fibers = list() - var/fibertext - var/item_multiplier = isitem(src)?1.2:1 - if(M.wear_suit) - fibertext = "Material from \a [M.wear_suit]." - if(prob(10*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & CHEST)) - if(M.w_uniform) - fibertext = "Fibers from \a [M.w_uniform]." - if(prob(12*item_multiplier) && !(fibertext in suit_fibers)) //Wearing a suit means less of the uniform exposed. - suit_fibers += fibertext - if(!(M.wear_suit.body_parts_covered & HANDS)) - if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += fibertext - else if(M.w_uniform) - fibertext = "Fibers from \a [M.w_uniform]." - if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) - // "Added fibertext: [fibertext]" - suit_fibers += fibertext - if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += "Material from a pair of [M.gloves.name]." - else if(M.gloves) - fibertext = "Material from a pair of [M.gloves.name]." - if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) - suit_fibers += "Material from a pair of [M.gloves.name]." - - -/atom/proc/add_hiddenprint(mob/living/M) - if(!M || !M.key) - return - - if(!fingerprintshidden) //Add the list if it does not exist - fingerprintshidden = list() - - var/hasgloves = "" - if(ishuman(M)) - var/mob/living/carbon/human/H = M - if(H.gloves) - hasgloves = "(gloves)" - - var/current_time = time_stamp() - if(!fingerprintshidden[M.key]) - fingerprintshidden[M.key] = "First: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" - else - var/laststamppos = findtext(fingerprintshidden[M.key], " Last: ") - if(laststamppos) - fingerprintshidden[M.key] = copytext(fingerprintshidden[M.key], 1, laststamppos) - fingerprintshidden[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" - - fingerprintslast = M.ckey - - -//Set ignoregloves to add prints irrespective of the mob having gloves on. -/atom/proc/add_fingerprint(mob/living/M, ignoregloves = 0) - if(!M || !M.key) - return - - add_hiddenprint(M) - - if(ishuman(M)) - var/mob/living/carbon/human/H = M - - add_fibers(H) - - if(H.gloves) //Check if the gloves (if any) hide fingerprints - var/obj/item/clothing/gloves/G = H.gloves - if(G.transfer_prints) - ignoregloves = 1 - - if(!ignoregloves) - H.gloves.add_fingerprint(H, 1) //ignoregloves = 1 to avoid infinite loop. - return - - if(!fingerprints) //Add the list if it does not exist - fingerprints = list() - var/full_print = md5(H.dna.uni_identity) - fingerprints[full_print] = full_print - - - - -/atom/proc/transfer_fingerprints_to(atom/A) - - // Make sure everything are lists. - if(!islist(A.fingerprints)) - A.fingerprints = list() - if(!islist(A.fingerprintshidden)) - A.fingerprintshidden = list() - - if(!islist(fingerprints)) - fingerprints = list() - if(!islist(fingerprintshidden)) - fingerprintshidden = list() - - // Transfer - if(fingerprints) - A.fingerprints |= fingerprints.Copy() //detective - if(fingerprintshidden) - A.fingerprintshidden |= fingerprintshidden.Copy() //admin - A.fingerprintslast = fingerprintslast +//CONTAINS: Suit fibers and Detective's Scanning Computer + +/atom/proc/return_fingerprints() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.fingerprints + +/atom/proc/return_hiddenprints() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.hiddenprints + +/atom/proc/return_blood_DNA() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.blood_DNA + +/atom/proc/blood_DNA_length() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = length(D.blood_DNA) + +/atom/proc/return_fibers() + GET_COMPONENT(D, /datum/component/forensics) + if(D) + . = D.fibers + +/atom/proc/add_fingerprint_list(list/fingerprints) //ASSOC LIST FINGERPRINT = FINGERPRINT + if(length(fingerprints)) + . = AddComponent(/datum/component/forensics, fingerprints) + +//Set ignoregloves to add prints irrespective of the mob having gloves on. +/atom/proc/add_fingerprint(mob/living/M, ignoregloves = FALSE) + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_fingerprint(M, ignoregloves) + +/atom/proc/add_fiber_list(list/fibertext) //ASSOC LIST FIBERTEXT = FIBERTEXT + if(length(fibertext)) + . = AddComponent(/datum/component/forensics, null, null, null, fibertext) + +/atom/proc/add_fibers(mob/living/carbon/human/M) + var/old = 0 + if(M.gloves && istype(M.gloves, /obj/item/clothing)) + var/obj/item/clothing/gloves/G = M.gloves + old = length(G.return_blood_DNA()) + if(G.transfer_blood > 1) //bloodied gloves transfer blood to touched objects + if(add_blood_DNA(G.return_blood_DNA()) && length(G.return_blood_DNA()) > old) //only reduces the bloodiness of our gloves if the item wasn't already bloody + G.transfer_blood-- + else if(M.bloody_hands > 1) + old = length(M.return_blood_DNA()) + if(add_blood_DNA(M.return_blood_DNA()) && length(M.return_blood_DNA()) > old) + M.bloody_hands-- + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_fibers(M) + +/atom/proc/add_hiddenprint_list(list/hiddenprints) //NOTE: THIS IS FOR ADMINISTRATION FINGERPRINTS, YOU MUST CUSTOM SET THIS TO INCLUDE CKEY/REAL NAMES! CHECK FORENSICS.DM + if(length(hiddenprints)) + . = AddComponent(/datum/component/forensics, null, hiddenprints) + +/atom/proc/add_hiddenprint(mob/living/M) + var/datum/component/forensics/D = AddComponent(/datum/component/forensics) + . = D.add_hiddenprint(M) + +/atom/proc/add_blood_DNA(list/dna) //ASSOC LIST DNA = BLOODTYPE + return FALSE + +/obj/add_blood_DNA(list/dna) + . = ..() + if(length(dna)) + . = AddComponent(/datum/component/forensics, null, null, dna) + +/obj/item/clothing/gloves/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + . = ..() + transfer_blood = rand(2, 4) + +/turf/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src + if(!B) + B = new /obj/effect/decal/cleanable/blood/splatter(src, diseases) + B.add_blood_DNA(blood_dna) //give blood info to the blood decal. + return TRUE //we bloodied the floor + +/mob/living/carbon/human/add_blood_DNA(list/blood_dna, list/datum/disease/diseases) + if(wear_suit) + wear_suit.add_blood_DNA(blood_dna) + update_inv_wear_suit() + else if(w_uniform) + w_uniform.add_blood_DNA(blood_dna) + update_inv_w_uniform() + if(gloves) + var/obj/item/clothing/gloves/G = gloves + G.add_blood_DNA(blood_dna) + else if(length(blood_dna)) + AddComponent(/datum/component/forensics, null, null, dna) + bloody_hands = rand(2, 4) + update_inv_gloves() //handles bloody hands overlays and updating + return TRUE + +/atom/proc/transfer_fingerprints_to(atom/A) + A.add_fingerprint_list(return_fingerprints()) + A.add_hiddenprint_list(return_hiddenprints()) + A.fingerprintslast = fingerprintslast diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm index 1400fdbe0c..9c98677291 100644 --- a/code/modules/detectivework/evidence.dm +++ b/code/modules/detectivework/evidence.dm @@ -23,7 +23,7 @@ icon_state = initial(icon_state) desc = initial(desc) -/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user) +/obj/item/evidencebag/proc/evidencebagEquip(obj/item/I, mob/user) if(!istype(I) || I.anchored == 1) return diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 793805977c..66405258b9 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -46,6 +46,5 @@ user.visible_message("[user] starts to wipe down [A] with [src]!", "You start to wipe down [A] with [src]...") if(do_after(user,30, target = A)) user.visible_message("[user] finishes wiping off the [A]!", "You finish wiping off the [A].") - A.clean_blood() - A.wash_cream() + A.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_MEDIUM) return diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm index 8cb27ea4f3..fa6c1f88cb 100644 --- a/code/modules/detectivework/scanner.dm +++ b/code/modules/detectivework/scanner.dm @@ -67,20 +67,14 @@ //Make our lists var/list/fingerprints = list() - var/list/blood = list() - var/list/fibers = list() + var/list/blood = A.return_blood_DNA() + var/list/fibers = A.return_fibers() var/list/reagents = list() var/target_name = A.name // Start gathering - if(A.blood_DNA && A.blood_DNA.len) - blood = A.blood_DNA.Copy() - - if(A.suit_fibers && A.suit_fibers.len) - fibers = A.suit_fibers.Copy() - if(ishuman(A)) var/mob/living/carbon/human/H = A @@ -89,8 +83,7 @@ else if(!ismob(A)) - if(A.fingerprints && A.fingerprints.len) - fingerprints = A.fingerprints.Copy() + fingerprints = A.return_fingerprints() // Only get reagents from non-mobs. if(A.reagents && A.reagents.reagent_list.len) @@ -104,6 +97,7 @@ if(R.data["blood_DNA"] && R.data["blood_type"]) var/blood_DNA = R.data["blood_DNA"] var/blood_type = R.data["blood_type"] + LAZYINITLIST(blood) blood[blood_DNA] = blood_type // We gathered everything. Create a fork and slowly display the results to the holder of the scanner. @@ -112,7 +106,7 @@ add_log("[worldtime2text()][get_timestamp()] - [target_name]", 0) // Fingerprints - if(fingerprints && fingerprints.len) + if(length(fingerprints)) sleep(30) add_log("Prints:") for(var/finger in fingerprints) @@ -120,7 +114,7 @@ found_something = 1 // Blood - if (blood && blood.len) + if (length(blood)) sleep(30) add_log("Blood:") found_something = 1 @@ -128,7 +122,7 @@ add_log("Type: [blood[B]] DNA: [B]") //Fibers - if(fibers && fibers.len) + if(length(fibers)) sleep(30) add_log("Fibers:") for(var/fiber in fibers) @@ -136,7 +130,7 @@ found_something = 1 //Reagents - if(reagents && reagents.len) + if(length(reagents)) sleep(30) add_log("Reagents:") for(var/R in reagents) diff --git a/code/modules/events/_event.dm b/code/modules/events/_event.dm index 471dad12d7..d49a1d194f 100644 --- a/code/modules/events/_event.dm +++ b/code/modules/events/_event.dm @@ -60,7 +60,7 @@ triggering = TRUE if (alertadmins) - message_admins("Random Event triggering in 10 seconds: [name] ([typepath]) (CANCEL)") + message_admins("Random Event triggering in 10 seconds: [name] (CANCEL)") sleep(100) var/gamemode = SSticker.mode.config_tag var/players_amt = get_active_player_count(alive_check = TRUE, afk_check = TRUE, human_check = TRUE) diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index 1a8a174bff..c34c219882 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -2,9 +2,8 @@ name = "Alien Infestation" typepath = /datum/round_event/ghost_role/alien_infestation weight = 5 - earliest_start = 24000 //40 min - min_players = 20 //Avoid lowpop rounds + min_players = 10 max_occurrences = 1 /datum/round_event/ghost_role/alien_infestation @@ -16,6 +15,7 @@ // 50% chance of being incremented by one var/spawncount = 1 var/successSpawn = 0 //So we don't make a command report if nothing gets spawned. + fakeable = TRUE /datum/round_event/ghost_role/alien_infestation/setup() @@ -40,8 +40,8 @@ for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in GLOB.machines) if(QDELETED(temp_vent)) continue - if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] //Stops Aliens getting stuck in small networks. //See: Security, Virology if(temp_vent_parent.other_atmosmch.len > 20) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 95f72d15b3..e75752adcc 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -11,6 +11,7 @@ /datum/round_event/ghost_role/blob announceWhen = -1 role_name = "blob overmind" + fakeable = TRUE /datum/round_event/ghost_role/blob/announce(fake) priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg') diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index c2f98be8d5..68ec168a1e 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -32,7 +32,7 @@ /datum/round_event/brand_intelligence/start() for(var/obj/machinery/vending/V in GLOB.machines) - if(!(V.z in GLOB.station_z_levels)) + if(!is_station_level(V.z)) continue vendingMachines.Add(V) if(!vendingMachines.len) diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index b75140e3c7..c17140a2d2 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -23,3 +23,5 @@ new /mob/living/simple_animal/hostile/carp(C.loc) else new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) + + diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index d83c966ff6..f2e3104ab8 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -13,7 +13,7 @@ var/max_severity = 3 -/datum/round_event/disease_outbreak/announce() +/datum/round_event/disease_outbreak/announce(fake) priority_announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak7.ogg') /datum/round_event/disease_outbreak/setup() @@ -33,7 +33,7 @@ var/turf/T = get_turf(H) if(!T) continue - if(T.z != ZLEVEL_STATION_PRIMARY) + if(!is_station_level(T.z)) continue if(!H.client) continue @@ -51,7 +51,7 @@ var/datum/disease/D if(!advanced_virus) if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if(!H.dna || (H.disabilities & BLIND)) //A blindness disease would be the worst. + if(!H.dna || (H.has_disability(DISABILITY_BLIND))) //A blindness disease would be the worst. continue D = new virus_type() var/datum/disease/dnaspread/DS = D diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 978f62d85a..47eb2d4ea8 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -28,4 +28,4 @@ fakeable = FALSE /datum/round_event/sandstorm/tick() - spawn_meteors(10, GLOB.meteorsC) + spawn_meteors(10, GLOB.meteorsC) \ No newline at end of file diff --git a/code/modules/events/ghost_role.dm b/code/modules/events/ghost_role.dm index f5e9513b2e..e50d89a3a3 100644 --- a/code/modules/events/ghost_role.dm +++ b/code/modules/events/ghost_role.dm @@ -7,6 +7,7 @@ var/minimum_required = 1 var/role_name = "debug rat with cancer" // Q U A L I T Y M E M E S var/list/spawned_mobs = list() + fakeable = FALSE /datum/round_event/ghost_role/start() try_spawning() diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index 2ae44a5f84..8006d63b97 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -15,5 +15,5 @@ /datum/round_event/grid_check/start() for(var/P in GLOB.apcs_list) var/obj/machinery/power/apc/C = P - if(C.cell && (C.z in GLOB.station_z_levels)) + if(C.cell && is_station_level(C.z)) C.energy_fail(rand(30,120)) \ No newline at end of file diff --git a/code/modules/events/holiday/friday13th.dm b/code/modules/events/holiday/friday13th.dm index b1db15a896..ba2c9ea78f 100644 --- a/code/modules/events/holiday/friday13th.dm +++ b/code/modules/events/holiday/friday13th.dm @@ -15,4 +15,4 @@ /datum/round_event/fridaythethirteen/announce(fake) for(var/mob/living/L in player_list) - to_chat(L, "You are feeling unlucky today.") + to_chat(L, "You are feeling unlucky today.") \ No newline at end of file diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 2f5618714d..040e4209fb 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -1,44 +1,3 @@ -/datum/round_event_control/treevenge - name = "Treevenge (Christmas)" - holidayID = CHRISTMAS - typepath = /datum/round_event/treevenge - max_occurrences = 1 - weight = 20 - -/datum/round_event/treevenge/start() - for(var/obj/structure/flora/tree/pine/xmas in world) - var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc) - evil_tree.icon_state = xmas.icon_state - evil_tree.icon_living = evil_tree.icon_state - evil_tree.icon_dead = evil_tree.icon_state - evil_tree.icon_gib = evil_tree.icon_state - qdel(xmas) //b-but I don't want to delete xmas... - -//this is an example of a possible round-start event -/datum/round_event_control/presents - name = "Presents under Trees (Christmas)" - holidayID = CHRISTMAS - typepath = /datum/round_event/presents - weight = -1 //forces it to be called, regardless of weight - max_occurrences = 1 - earliest_start = 0 - -/datum/round_event/presents/start() - for(var/obj/structure/flora/tree/pine/xmas in world) - if(!(xmas.z in GLOB.station_z_levels)) - continue - for(var/turf/open/floor/T in orange(1,xmas)) - for(var/i=1,i<=rand(1,5),i++) - new /obj/item/a_gift(T) - for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) - Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) - for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) - Monitor.icon_state = "entertainment_xmas" - -/datum/round_event/presents/announce(fake) - priority_announce("Ho Ho Ho, Merry Xmas!", "Unknown Transmission") - - /obj/item/toy/xmas_cracker name = "xmas cracker" icon = 'icons/obj/christmas.dmi' @@ -82,23 +41,27 @@ /obj/effect/landmark/xmastree name = "christmas tree spawner" - var/tree = /obj/structure/flora/tree/pine/xmas + var/festive_tree = /obj/structure/flora/tree/pine/xmas + var/christmas_tree = /obj/structure/flora/tree/pine/xmas/presents /obj/effect/landmark/xmastree/Initialize(mapload) ..() - if(FESTIVE_SEASON in SSevents.holidays) - new tree(get_turf(src)) + if((CHRISTMAS in SSevents.holidays) && christmas_tree) + new christmas_tree(get_turf(src)) + else if((FESTIVE_SEASON in SSevents.holidays) && festive_tree) + new festive_tree(get_turf(src)) return INITIALIZE_HINT_QDEL /obj/effect/landmark/xmastree/rdrod name = "festivus pole spawner" - tree = /obj/structure/festivus + festive_tree = /obj/structure/festivus + christmas_tree = null /datum/round_event_control/santa name = "Santa is coming to town! (Christmas)" holidayID = CHRISTMAS typepath = /datum/round_event/santa - weight = 150 + weight = 20 max_occurrences = 1 earliest_start = 20000 @@ -109,7 +72,7 @@ priority_announce("Santa is coming to town!", "Unknown Transmission") /datum/round_event/santa/start() - var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be santa?", poll_time=150) + var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150) if(LAZYLEN(candidates)) var/mob/dead/observer/Z = pick(candidates) santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index 88fe218a22..5bad888f17 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -10,4 +10,4 @@ /datum/round_event/mass_hallucination/start() for(var/mob/living/carbon/C in GLOB.alive_mob_list) - C.hallucination += rand(20, 50) + C.hallucination += rand(20, 50) \ No newline at end of file diff --git a/code/modules/events/operative.dm b/code/modules/events/operative.dm index 894ad7e995..e0e3b98776 100644 --- a/code/modules/events/operative.dm +++ b/code/modules/events/operative.dm @@ -26,12 +26,10 @@ var/datum/preferences/A = new A.copy_to(operative) operative.dna.update_dna_identity() - var/datum/mind/Mind = new /datum/mind(selected.key) Mind.assigned_role = "Lone Operative" Mind.special_role = "Lone Operative" Mind.active = 1 - Mind.transfer_to(operative) Mind.add_antag_datum(/datum/antagonist/nukeop/lone) diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index dd7d10f896..fa0d5aadf8 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -100,7 +100,7 @@ /obj/machinery/shuttle_scrambler/process() if(active) - if(z in GLOB.station_z_levels) + if(is_station_level(z)) var/siphoned = min(SSshuttle.points,siphon_per_tick) SSshuttle.points -= siphoned credits_stored += siphoned @@ -206,9 +206,9 @@ if(engines_cooling) return "[.] - Engines cooling." -/obj/docking_port/mobile/pirate/dock(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) +/obj/docking_port/mobile/pirate/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) . = ..() - if(. == DOCKING_SUCCESS && new_dock.z != ZLEVEL_TRANSIT) + if(. == DOCKING_SUCCESS && !is_transit_level(new_dock.z)) engines_cooling = TRUE addtimer(CALLBACK(src,.proc/reset_cooldown),engine_cooldown,TIMER_UNIQUE) @@ -252,7 +252,7 @@ var/list/results = list() for(var/atom/movable/AM in world) if(is_type_in_typecache(AM,GLOB.pirate_loot_cache)) - if(AM.z in GLOB.station_z_levels) + if(is_station_level(AM.z)) if(get_area(AM) == get_area(src)) //Should this be variable ? continue results += AM diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index ebcade74a3..96f5a3917d 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -56,4 +56,4 @@ temp.prison_open() else if(istype(O, /obj/machinery/door_timer)) var/obj/machinery/door_timer/temp = O - temp.timer_end(forced = TRUE) + temp.timer_end(forced = TRUE) \ No newline at end of file diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 7b66ac553f..d186d2cf88 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -16,5 +16,4 @@ //sound not longer matches the text, but an audible warning is probably good /datum/round_event/radiation_storm/start() - SSweather.run_weather("radiation storm",ZLEVEL_STATION_PRIMARY) - make_maint_all_access() + SSweather.run_weather("radiation storm",ZLEVEL_STATION_PRIMARY) \ No newline at end of file diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm index bd08743aaf..50ed1211c4 100644 --- a/code/modules/events/sentience.dm +++ b/code/modules/events/sentience.dm @@ -9,6 +9,7 @@ role_name = "random animal" var/animals = 1 var/one = "one" + fakeable = TRUE /datum/round_event/ghost_role/sentience/announce(fake) var/sentience_report = "" @@ -30,7 +31,7 @@ var/list/potential = list() for(var/mob/living/simple_animal/L in GLOB.alive_mob_list) var/turf/T = get_turf(L) - if(!(T.z in GLOB.station_z_levels)) + if(!is_station_level(T.z)) continue if(!(L in GLOB.player_list) && !L.mind) potential += L diff --git a/code/modules/events/shuttle_loan.dm b/code/modules/events/shuttle_loan.dm index ca5de88d58..55984df033 100644 --- a/code/modules/events/shuttle_loan.dm +++ b/code/modules/events/shuttle_loan.dm @@ -135,7 +135,7 @@ new /obj/structure/spider/stickyweb(T) if(ANTIDOTE_NEEDED) - var/obj/item/reagent_containers/glass/bottle/virus_type = pick(/obj/item/reagent_containers/glass/bottle/beesease, /obj/item/reagent_containers/glass/bottle/brainrot, /obj/item/reagent_containers/glass/bottle/fluspanish) + var/obj/effect/mob_spawn/human/corpse/assistant/infected_assistant = pick(/obj/effect/mob_spawn/human/corpse/assistant/beesease_infection, /obj/effect/mob_spawn/human/corpse/assistant/brainrot_infection, /obj/effect/mob_spawn/human/corpse/assistant/spanishflu_infection) var/turf/T for(var/i=0, i<10, i++) if(prob(15)) @@ -145,7 +145,7 @@ else if(prob(25)) shuttle_spawns.Add(/obj/item/shard) T = pick_n_take(empty_shuttle_turfs) - new virus_type(T) + new infected_assistant(T) shuttle_spawns.Add(/obj/structure/closet/crate) shuttle_spawns.Add(/obj/item/reagent_containers/glass/bottle/pierrot_throat) shuttle_spawns.Add(/obj/item/reagent_containers/glass/bottle/magnitis) diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index d09aff976d..a3c625e396 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -22,8 +22,8 @@ /datum/round_event/spider_infestation/start() var/list/vents = list() for(var/obj/machinery/atmospherics/components/unary/vent_pump/temp_vent in world) - if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm index 46bb254703..a9ae27993d 100644 --- a/code/modules/events/spontaneous_appendicitis.dm +++ b/code/modules/events/spontaneous_appendicitis.dm @@ -26,4 +26,4 @@ var/datum/disease/D = new /datum/disease/appendicitis H.ForceContractDisease(D) - break + break \ No newline at end of file diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 4aec0f8fe1..5e91160575 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -19,8 +19,8 @@ /datum/round_event/vent_clog/setup() endWhen = rand(25, 100) for(var/obj/machinery/atmospherics/components/unary/vent_scrubber/temp_vent in GLOB.machines) - if((temp_vent.loc.z in GLOB.station_z_levels) && !temp_vent.welded) - var/datum/pipeline/temp_vent_parent = temp_vent.PARENT1 + if(is_station_level(temp_vent.loc.z) && !temp_vent.welded) + var/datum/pipeline/temp_vent_parent = temp_vent.parents[1] if(temp_vent_parent.other_atmosmch.len > 20) vents += temp_vent if(!vents.len) diff --git a/code/modules/events/weightless.dm b/code/modules/events/weightless.dm index 425ed7ef9f..bb5b3fd15a 100644 --- a/code/modules/events/weightless.dm +++ b/code/modules/events/weightless.dm @@ -28,3 +28,5 @@ if(announceWhen >= 0) command_alert("Artificial gravity arrays are now functioning within normal parameters. Please report any irregularities to your respective head of staff.") + + diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm index 00d8c3b829..7bf92ffb0c 100644 --- a/code/modules/events/wizard/curseditems.dm +++ b/code/modules/events/wizard/curseditems.dm @@ -38,7 +38,7 @@ ruins_wizard_loadout = 1 for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(ruins_spaceworthiness && !(H.z in GLOB.station_z_levels) || isspaceturf(H.loc) || isplasmaman(H)) + if(ruins_spaceworthiness && !is_station_level(H.z) || isspaceturf(H.loc) || isplasmaman(H)) continue //#savetheminers if(ruins_wizard_loadout && iswizard(H)) continue diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index 1cf4858ce7..9ac7d89191 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -58,7 +58,7 @@ ..() /obj/item/greentext/process() - if(new_holder && new_holder.z == ZLEVEL_CENTCOM)//you're winner! + if(new_holder && is_centcom_level(new_holder.z))//you're winner! to_chat(new_holder, "At last it feels like victory is assured!") if(!(new_holder in SSticker.mode.traitors)) SSticker.mode.traitors += new_holder.mind diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm index 3459c80318..1624d3af31 100644 --- a/code/modules/events/wizard/petsplosion.dm +++ b/code/modules/events/wizard/petsplosion.dm @@ -8,7 +8,7 @@ /datum/round_event_control/wizard/petsplosion/preRunEvent() for(var/mob/living/simple_animal/F in GLOB.alive_mob_list) - if(!ishostile(F) && (F.z in GLOB.station_z_levels)) + if(!ishostile(F) && is_station_level(F.z)) mobs_to_dupe++ if(mobs_to_dupe > 100 || !mobs_to_dupe) return EVENT_CANT_RUN @@ -24,7 +24,7 @@ if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals countdown += 1 for(var/mob/living/simple_animal/F in GLOB.alive_mob_list) //If you cull the heard before the next replication, things will be easier for you - if(!ishostile(F) && (F.z in GLOB.station_z_levels)) + if(!ishostile(F) && is_station_level(F.z)) new F.type(F.loc) mobs_duped++ if(mobs_duped > 400) diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm index d622f10c97..18bde5eb07 100644 --- a/code/modules/events/wizard/shuffle.dm +++ b/code/modules/events/wizard/shuffle.dm @@ -13,7 +13,7 @@ var/list/mobs = list() for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) - if(!(H.z in GLOB.station_z_levels)) + if(!is_station_level(H.z)) continue //lets not try to strand people in space or stuck in the wizards den moblocs += H.loc mobs += H diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index dbaa8a1c22..3a25df10d4 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -21,7 +21,7 @@ /datum/round_event/wormholes/start() for(var/turf/open/floor/T in world) - if(T.z in GLOB.station_z_levels) + if(is_station_level(T.z)) pick_turfs += T for(var/i = 1, i <= number_of_wormholes, i++) diff --git a/code/modules/fields/timestop.dm b/code/modules/fields/timestop.dm index e5d7b6b4fe..4dfd7a3eb6 100644 --- a/code/modules/fields/timestop.dm +++ b/code/modules/fields/timestop.dm @@ -72,6 +72,9 @@ freeze_projectile(A) else return FALSE + + into_the_negative_zone(A) + return TRUE /datum/proximity_monitor/advanced/timestop/proc/unfreeze_all() @@ -106,6 +109,7 @@ return ..() /datum/proximity_monitor/advanced/timestop/proc/unfreeze_projectile(obj/item/projectile/P) + escape_the_negative_zone(P) frozen_projectiles -= P P.paused = FALSE @@ -123,9 +127,18 @@ H.LoseTarget() /datum/proximity_monitor/advanced/timestop/proc/unfreeze_mob(mob/living/L) + escape_the_negative_zone(L) L.AdjustStun(-20, 1, 1) L.anchored = frozen_mobs[L] frozen_mobs -= L if(ishostile(L)) var/mob/living/simple_animal/hostile/H = L H.toggle_ai(initial(H.AIStatus)) + +//you don't look quite right, is something the matter? +/datum/proximity_monitor/advanced/timestop/proc/into_the_negative_zone(atom/A) + A.add_atom_colour(list(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,1, 1,1,1,0), TEMPORARY_COLOUR_PRIORITY) + +//let's put some colour back into your cheeks +/datum/proximity_monitor/advanced/timestop/proc/escape_the_negative_zone(atom/A) + A.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY) \ No newline at end of file diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 779fe7fa09..bfbad559e1 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -1,5 +1,5 @@ -/mob/living/carbon/proc/dream() - set waitfor = 0 +/mob/living/carbon/proc/dream() + set waitfor = 0 var/list/dreams = GLOB.dream_strings.Copy() for(var/obj/item/bedsheet/sheet in loc) dreams += sheet.dream_messages @@ -9,12 +9,12 @@ dreaming++ for(var/i in 1 to dream_images.len) addtimer(CALLBACK(src, .proc/experience_dream, dream_images[i]), ((i - 1) * rand(30,60))) - return 1 - -/mob/living/carbon/proc/handle_dreams() - if(prob(5) && !dreaming) - dream() - + return 1 + +/mob/living/carbon/proc/handle_dreams() + if(prob(5) && !dreaming) + dream() + /mob/living/carbon/proc/experience_dream(dream_image) dreaming-- if(stat != UNCONSCIOUS || InCritical()) diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 92dc109bbc..886d9b4837 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -714,6 +714,8 @@ GLOBAL_LIST_INIT(hallucinations_major, list( for(var/obj/machinery/door/airlock/A in range(7, target)) if(count>door_number && door_number>0) break + if(!A.density) + continue count++ I = image(A.overlays_file, get_turf(A), "lights_bolts",layer=A.layer+0.1) doors += I @@ -734,6 +736,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list( /datum/hallucination/whispers/New(mob/living/carbon/T, forced = TRUE) ..() + var/target_name = target.first_name() var/speak_messages = list("[pick_list_replacements(HAL_LINES_FILE, "suspicion")]",\ "[pick_list_replacements(HAL_LINES_FILE, "greetings")][target.first_name()]!",\ "[pick_list_replacements(HAL_LINES_FILE, "getout")]",\ @@ -767,8 +770,10 @@ GLOBAL_LIST_INIT(hallucinations_major, list( person = H people += H if(person) //Basic talk + var/chosen = pick(speak_messages) + chosen = replacetext(chosen, "%TARGETNAME%", target_name) var/image/speech_overlay = image('icons/mob/talk.dmi', person, "default0", layer = ABOVE_MOB_LAYER) - var/message = target.compose_message(person,understood_language,pick(speak_messages),null,person.get_spans(),face_name = TRUE) + var/message = target.compose_message(person,understood_language,chosen,null,person.get_spans(),face_name = TRUE) feedback_details += "Type: Talk, Source: [person.real_name], Message: [message]" to_chat(target, message) if(target.client) @@ -776,11 +781,13 @@ GLOBAL_LIST_INIT(hallucinations_major, list( sleep(30) target.client.images.Remove(speech_overlay) else // Radio talk + var/chosen = pick(radio_messages) + chosen = replacetext(chosen, "%TARGETNAME%", target_name) var/list/humans = list() for(var/mob/living/carbon/human/H in GLOB.alive_mob_list) humans += H person = pick(humans) - var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans(),face_name = TRUE) + var/message = target.compose_message(person,understood_language,chosen,"[FREQ_COMMON]",person.get_spans(),face_name = TRUE) feedback_details += "Type: Radio, Source: [person.real_name], Message: [message]" to_chat(target, message) qdel(src) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 5eae2b80d8..b65104b192 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -100,10 +100,10 @@ to_chat(user, "You heat [name] with [I]!") ..() -/obj/item/reagent_containers/food/drinks/throw_impact(atom/target, mob/thrower) +/obj/item/reagent_containers/food/drinks/throw_impact(atom/target, datum/thrownthing/throwinfo) . = ..() if(!.) //if the bottle wasn't caught - smash(target, thrower, TRUE) + smash(target, throwinfo.thrower, TRUE) /obj/item/reagent_containers/food/drinks/proc/smash(atom/target, mob/thrower, ranged = FALSE) if(!isGlass) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 005dda29ca..dfa6315b04 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -232,8 +232,8 @@ icon_state = "absinthebottle" list_reagents = list("absinthe" = 100) -/obj/item/reagent_containers/food/drinks/bottle/absinthe/New() - ..() +/obj/item/reagent_containers/food/drinks/bottle/absinthe/Initialize() + . = ..() redact() /obj/item/reagent_containers/food/drinks/bottle/absinthe/proc/redact() @@ -367,7 +367,7 @@ isGlass = FALSE return -/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,mob/thrower) +/obj/item/reagent_containers/food/drinks/bottle/molotov/throw_impact(atom/target,datum/thrownthing/throwdata) var/firestarter = 0 for(var/datum/reagent/R in reagents.reagent_list) for(var/A in accelerants) diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 765f118c5e..5e05e85a28 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -9,13 +9,12 @@ var/foodtype = NONE var/last_check_time -/obj/item/weapon/reagent_containers/food/Initialize(mapload) - ..() +/obj/item/reagent_containers/food/Initialize(mapload) + . = ..() if(!mapload) - pixel_x = rand(-5, 5) //Randomizes postion slightly. + pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) - /obj/item/reagent_containers/food/proc/checkLiked(var/fraction, mob/M) if(last_check_time + 50 < world.time) if(ishuman(M)) diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index f3460edcaa..7d83788f9d 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -276,8 +276,8 @@ icon = 'icons/obj/food/soupsalad.dmi' icon_state = "wishsoup" -/obj/item/reagent_containers/food/snacks/customizable/soup/New() - ..() +/obj/item/reagent_containers/food/snacks/customizable/soup/Initialize() + . = ..() eatverb = pick("slurp","sip","suck","inhale","drink") diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 08b09124d5..b0e2067be0 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -316,10 +316,10 @@ // name = "Xenoburger" //Name that displays in the UI. // desc = "Smells caustic. Tastes like heresy." //Duh // icon_state = "xburger" //Refers to an icon in food.dmi -///obj/item/reagent_containers/food/snacks/xenoburger/New() //Don't mess with this. -// ..() //Same here. +///obj/item/reagent_containers/food/snacks/xenoburger/Initialize() //Don't mess with this. | nO I WILL MESS WITH THIS +// . = ..() //Same here. // reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste -// reagents.add_reagent("nutriment", 2) // this line of code for all the contents. +// reagents.add_reagent("nutriment", 2) //this line of code for all the contents. // bitesize = 3 //This is the amount each bite consumes. //All foods are distributed among various categories. Use common sense. diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index c7681fe807..9691eee144 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -67,8 +67,8 @@ tastes = list("popcorn" = 3, "butter" = 1) foodtype = JUNKFOOD -/obj/item/reagent_containers/food/snacks/popcorn/New() - ..() +/obj/item/reagent_containers/food/snacks/popcorn/Initialize() + . = ..() eatverb = pick("bite","crunch","nibble","gnaw","gobble","chomp") /obj/item/reagent_containers/food/snacks/loadedbakedpotato @@ -448,8 +448,8 @@ tastes = list("candy" = 1) foodtype = JUNKFOOD | SUGAR -/obj/item/reagent_containers/food/snacks/lollipop/New() - ..() +/obj/item/reagent_containers/food/snacks/lollipop/Initialize() + . = ..() head = mutable_appearance('icons/obj/lollipop.dmi', "lollipop_head") change_head_color(rgb(rand(0, 255), rand(0, 255), rand(0, 255))) @@ -467,8 +467,8 @@ /obj/item/reagent_containers/food/snacks/lollipop/cyborg var/spamchecking = TRUE -/obj/item/reagent_containers/food/snacks/lollipop/cyborg/New() - ..() +/obj/item/reagent_containers/food/snacks/lollipop/cyborg/Initialize() + . = ..() addtimer(CALLBACK(src, .proc/spamcheck), 1200) /obj/item/reagent_containers/food/snacks/lollipop/cyborg/equipped(mob/living/user, slot) @@ -488,15 +488,15 @@ tastes = list("candy") foodtype = JUNKFOOD -/obj/item/reagent_containers/food/snacks/gumball/New() - ..() +/obj/item/reagent_containers/food/snacks/gumball/Initialize() + . = ..() color = rgb(rand(0, 255), rand(0, 255), rand(0, 255)) /obj/item/reagent_containers/food/snacks/gumball/cyborg var/spamchecking = TRUE -/obj/item/reagent_containers/food/snacks/gumball/cyborg/New() - ..() +/obj/item/reagent_containers/food/snacks/gumball/cyborg/Initialize() + . = ..() addtimer(CALLBACK(src, .proc/spamcheck), 1200) /obj/item/reagent_containers/food/snacks/gumball/cyborg/equipped(mob/living/user, slot) diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index 284784484f..b7df203e30 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -350,3 +350,113 @@ filling_color = "#F2CE91" tastes = list("pastry" = 1, "sweetness" = 1) foodtype = GRAIN + +#define PANCAKE_MAX_STACK 10 + +/obj/item/reagent_containers/food/snacks/pancakes + name = "pancake" + desc = "A fluffy pancake. The softer, superior relative of the waffle." + icon_state = "pancakes_1" + item_state = "pancakes" + bonus_reagents = list("vitamin" = 1) + list_reagents = list("nutriment" = 4, "vitamin" = 1) + filling_color = "#D2691E" + tastes = list("pancakes" = 1) + foodtype = GRAIN | SUGAR + +/obj/item/reagent_containers/food/snacks/pancakes/blueberry + name = "blueberry pancake" + desc = "A fluffy and delicious blueberry pancake." + icon_state = "bbpancakes_1" + item_state = "bbpancakes" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 6, "vitamin" = 3) + tastes = list("pancakes" = 1, "blueberries" = 1) + +/obj/item/reagent_containers/food/snacks/pancakes/chocolatechip + name = "chocolate chip pancake" + desc = "A fluffy and delicious chocolate chip pancake." + icon_state = "ccpancakes_1" + item_state = "ccpancakes" + bonus_reagents = list("vitamin" = 2) + list_reagents = list("nutriment" = 6, "vitamin" = 3) + tastes = list("pancakes" = 1, "chocolate" = 1) + +/obj/item/reagent_containers/food/snacks/pancakes/Initialize() + . = ..() + update_icon() + +/obj/item/reagent_containers/food/snacks/pancakes/update_icon() + if(contents.len) + name = "stack of pancakes" + else + name = initial(name) + if(contents.len < our_overlays.len) + cut_overlay(our_overlays[our_overlays.len]) + +/obj/item/reagent_containers/food/snacks/pancakes/examine(mob/user) + var/ingredients_listed = "" + var/pancakeCount = contents.len + switch(pancakeCount) + if(0) + desc = initial(desc) + if(1 to 2) + desc = "A stack of fluffy pancakes." + if(3 to 6) + desc = "A fat stack of fluffy pancakes!" + if(7 to 9) + desc = "A grand tower of fluffy, delicious pancakes!" + if(PANCAKE_MAX_STACK to INFINITY) + desc = "A massive towering spire of fluffy, delicious pancakes. It looks like it could tumble over!" + var/originalBites = bitecount + if (pancakeCount) + var/obj/item/reagent_containers/food/snacks/S = contents[pancakeCount] + bitecount = S.bitecount + ..() + if (pancakeCount) + for(var/obj/item/reagent_containers/food/snacks/pancakes/ING in contents) + ingredients_listed += "[ING.name], " + to_chat(user, "It contains [contents.len?"[ingredients_listed]":"no ingredient, "]on top of a [initial(name)].") + bitecount = originalBites + +/obj/item/reagent_containers/food/snacks/pancakes/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/reagent_containers/food/snacks/pancakes/)) + var/obj/item/reagent_containers/food/snacks/pancakes/P = I + if((contents.len >= PANCAKE_MAX_STACK) || ((P.contents.len + contents.len) > PANCAKE_MAX_STACK) || (reagents.total_volume >= volume)) + to_chat(user, "You can't add that many pancakes to [src]!") + else + if(!user.transferItemToLoc(I, src)) + return + to_chat(user, "You add the [I] to the [name].") + P.name = initial(P.name) + contents += P + update_overlays(P) + if (P.contents.len) + for(var/V in P.contents) + P = V + P.name = initial(P.name) + contents += P + update_overlays(P) + P = I + clearlist(P.contents) + return + else if(contents.len) + var/obj/O = contents[contents.len] + return O.attackby(I, user, params) + ..() + +/obj/item/reagent_containers/food/snacks/pancakes/update_overlays(obj/item/reagent_containers/food/snacks/P) + var/mutable_appearance/pancake = mutable_appearance(icon, "[P.item_state]_[rand(1,3)]") + pancake.pixel_x = rand(-1,1) + pancake.pixel_y = 3 * contents.len - 1 + add_overlay(pancake) + update_icon() + +/obj/item/reagent_containers/food/snacks/pancakes/attack(mob/M, mob/user, def_zone, stacked = TRUE) + if(user.a_intent == INTENT_HARM || !contents.len || !stacked) + return ..() + var/obj/item/O = contents[contents.len] + . = O.attack(M, user, def_zone, FALSE) + update_icon() + +#undef PANCAKE_MAX_STACK \ No newline at end of file diff --git a/code/modules/food_and_drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm index 977bd60da1..4ce942aadf 100644 --- a/code/modules/food_and_drinks/food/snacks_pie.dm +++ b/code/modules/food_and_drinks/food/snacks_pie.dm @@ -27,6 +27,7 @@ list_reagents = list("nutriment" = 6, "banana" = 5, "vitamin" = 2) tastes = list("pie" = 1) foodtype = GRAIN | DAIRY | SUGAR + var/stunning = TRUE /obj/item/reagent_containers/food/snacks/pie/cream/throw_impact(atom/hit_atom) . = ..() @@ -46,15 +47,18 @@ creamoverlay.icon_state = "creampie_lizard" else creamoverlay.icon_state = "creampie_human" - H.Knockdown(20) //splat! + if(stunning) + H.Knockdown(20) //splat! H.adjust_blurriness(1) H.visible_message("[H] is creamed by [src]!", "You've been creamed by [src]!") playsound(H, "desceration", 50, TRUE) - if (!H.creamed) // one layer at a time + if(!H.creamed) // one layer at a time H.add_overlay(creamoverlay) H.creamed = TRUE qdel(src) +/obj/item/reagent_containers/food/snacks/pie/cream/nostun + stunning = FALSE /obj/item/reagent_containers/food/snacks/pie/berryclafoutis name = "berry clafoutis" @@ -112,13 +116,13 @@ foodtype = GRAIN | VEGETABLES -/obj/item/reagent_containers/food/snacks/pie/plump_pie/New() +/obj/item/reagent_containers/food/snacks/pie/plump_pie/Initialize() + . = ..() var/fey = prob(10) if(fey) name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" bonus_reagents = list("nutriment" = 1, "omnizine" = 5, "vitamin" = 4) - ..() if(fey) reagents.add_reagent("omnizine", 5) diff --git a/code/modules/food_and_drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm index 4cb44093a7..65ff4d2eb9 100644 --- a/code/modules/food_and_drinks/food/snacks_salad.dm +++ b/code/modules/food_and_drinks/food/snacks_salad.dm @@ -9,9 +9,9 @@ tastes = list("leaves" = 1) foodtype = VEGETABLES -/obj/item/reagent_containers/food/snacks/salad/New() - ..() - eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") +/obj/item/reagent_containers/food/snacks/salad/Initialize() + . = ..() + eatverb = pick("crunch","devour","nibble","gnaw","gobble","chomp") //who the fuck gnaws and devours on a salad /obj/item/reagent_containers/food/snacks/salad/aesirsalad name = "\improper Aesir salad" diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm index 422e35b849..3e3fc9440a 100644 --- a/code/modules/food_and_drinks/food/snacks_soup.dm +++ b/code/modules/food_and_drinks/food/snacks_soup.dm @@ -8,8 +8,8 @@ tastes = list("tasteless soup" = 1) foodtype = VEGETABLES -/obj/item/reagent_containers/food/snacks/soup/New() - ..() +/obj/item/reagent_containers/food/snacks/soup/Initialize() + . = ..() eatverb = pick("slurp","sip","suck","inhale","drink") /obj/item/reagent_containers/food/snacks/soup/wish @@ -19,12 +19,12 @@ list_reagents = list("water" = 10) tastes = list("wishes" = 1) -/obj/item/reagent_containers/food/snacks/soup/wish/New() +/obj/item/reagent_containers/food/snacks/soup/wish/Initialize() + . = ..() var/wish_true = prob(25) if(wish_true) desc = "A wish come true!" bonus_reagents = list("nutriment" = 9, "vitamin" = 1) - ..() if(wish_true) reagents.add_reagent("nutriment", 9) reagents.add_reagent("vitamin", 1) @@ -99,10 +99,10 @@ list_reagents = list("nutriment" = 6) tastes = list("chaos" = 1) -/obj/item/reagent_containers/food/snacks/soup/mystery/New() +/obj/item/reagent_containers/food/snacks/soup/mystery/Initialize() + . = ..() extra_reagent = pick("capsaicin", "frostoil", "omnizine", "banana", "blood", "slimejelly", "toxin", "banana", "carbon", "oculine") bonus_reagents = list("[extra_reagent]" = 5, "nutriment" = 6) - ..() reagents.add_reagent("[extra_reagent]", 5) /obj/item/reagent_containers/food/snacks/soup/hotchili @@ -173,8 +173,8 @@ bonus_reagents = list("nutriment" = 1, "vitamin" = 5) foodtype = VEGETABLES -/obj/item/reagent_containers/food/snacks/soup/beet/New() - ..() +/obj/item/reagent_containers/food/snacks/soup/beet/Initialize() + . = ..() name = pick("borsch","bortsch","borstch","borsh","borshch","borscht") tastes = list(name = 1) diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 40eae1b570..301585c13a 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -93,8 +93,8 @@ God bless America. else if(default_deconstruction_screwdriver(user, "fryer_off", "fryer_off" ,I)) //where's the open maint panel icon?! return else - if(is_type_in_typecache(I, deepfry_blacklisted_items)) - . = ..() + if(is_type_in_typecache(I, deepfry_blacklisted_items) || (I.flags_1 & (ABSTRACT_1 | NODROP_1 | DROPDEL_1))) + return ..() else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 372c085adb..99a3de90e1 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -1,4 +1,3 @@ - /obj/machinery/gibber name = "gibber" desc = "The name isn't descriptive enough?" @@ -12,10 +11,10 @@ circuit = /obj/item/circuitboard/machine/gibber var/operating = FALSE //Is it on? - var/dirty = 0 // Does it need cleaning? + var/dirty = FALSE // Does it need cleaning? var/gibtime = 40 // Time from starting until meat appears var/meat_produced = 0 - var/ignore_clothing = 0 + var/ignore_clothing = FALSE /obj/machinery/gibber/Initialize() @@ -30,7 +29,7 @@ gib_time -= 5 * M.rating gibtime = gib_time if(M.rating >= 2) - ignore_clothing = 1 + ignore_clothing = TRUE /obj/machinery/gibber/update_icon() cut_overlays() @@ -61,6 +60,10 @@ to_chat(user, "It's locked and running.") return + if(!anchored) + to_chat(user, "[src] cannot be used unless bolted to the ground.") + return + if(user.pulling && user.a_intent == INTENT_GRAB && isliving(user.pulling)) var/mob/living/L = user.pulling if(!iscarbon(L)) @@ -70,12 +73,17 @@ if(C.buckled ||C.has_buckled_mobs()) to_chat(user, "[C] is attached to something!") return - if(C.abiotic(1) && !ignore_clothing) - to_chat(user, "Subject may not have abiotic items on.") - return + + if(!ignore_clothing) + for(var/obj/item/I in C.held_items + C.get_equipped_items()) + if(!(I.flags_1 & NODROP_1)) + to_chat(user, "Subject may not have abiotic items on.") + return user.visible_message("[user] starts to put [C] into the gibber!") - src.add_fingerprint(user) + + add_fingerprint(user) + if(do_after(user, gibtime, target = src)) if(C && user.pulling == C && !C.buckled && !C.has_buckled_mobs() && !occupant) user.visible_message("[user] stuffs [C] into the gibber!") diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 6ef8e5e4e9..b1c1a8495c 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -28,9 +28,10 @@ var/const/BOMB_TIMER_MIN = 1 var/const/BOMB_TIMER_MAX = 10 -/obj/item/pizzabox/New() +/obj/item/pizzabox/Initialize() + . = ..() update_icon() - ..() + /obj/item/pizzabox/Destroy() unprocess() @@ -257,29 +258,31 @@ wires = null update_icon() -/obj/item/pizzabox/bomb/New() +/obj/item/pizzabox/bomb/Initialize() + . = ..() var/randompizza = pick(subtypesof(/obj/item/reagent_containers/food/snacks/pizza)) pizza = new randompizza(src) bomb = new(src) wires = new /datum/wires/explosive/pizza(src) - ..() -/obj/item/pizzabox/margherita/New() +/obj/item/pizzabox/margherita/Initialize() + . = ..() pizza = new /obj/item/reagent_containers/food/snacks/pizza/margherita(src) boxtag = "Margherita Deluxe" - ..() -/obj/item/pizzabox/vegetable/New() + +/obj/item/pizzabox/vegetable/Initialize() + . = ..() pizza = new /obj/item/reagent_containers/food/snacks/pizza/vegetable(src) boxtag = "Gourmet Vegatable" - ..() -/obj/item/pizzabox/mushroom/New() + +/obj/item/pizzabox/mushroom/Initialize() + . = ..() pizza = new /obj/item/reagent_containers/food/snacks/pizza/mushroom(src) boxtag = "Mushroom Special" - ..() -/obj/item/pizzabox/meat/New() +/obj/item/pizzabox/meat/Initialize() + . = ..() pizza = new /obj/item/reagent_containers/food/snacks/pizza/meat(src) boxtag = "Meatlover's Supreme" - ..() diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 041a58c467..a75510ae9a 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -50,7 +50,7 @@ result = /obj/item/reagent_containers/food/snacks/donut/jelly/slimejelly subcategory = CAT_PASTRY -////////////////////////////////////////////////WAFFLES//////////////////////////////////////////////// +////////////////////////////////////////////////WAFFLES AND PANCAKES//////////////////////////////////////////////// /datum/crafting_recipe/food/waffles time = 15 @@ -90,6 +90,33 @@ result = /obj/item/reagent_containers/food/snacks/rofflewaffles subcategory = CAT_PASTRY +/datum/crafting_recipe/food/pancakes + name = "Pancake" + reqs = list( + /obj/item/reagent_containers/food/snacks/pastrybase = 1 + ) + result = /obj/item/reagent_containers/food/snacks/pancakes + subcategory = CAT_PASTRY + +/datum/crafting_recipe/food/bbpancakes + name = "Blueberry pancake" + reqs = list( + /obj/item/reagent_containers/food/snacks/pastrybase = 1, + /obj/item/reagent_containers/food/snacks/grown/berries = 1 + ) + result = /obj/item/reagent_containers/food/snacks/pancakes/blueberry + subcategory = CAT_PASTRY + +/datum/crafting_recipe/food/ccpancakes + name = "Chocolate chip pancake" + reqs = list( + /obj/item/reagent_containers/food/snacks/pastrybase = 1, + /obj/item/reagent_containers/food/snacks/chocolatebar = 1 + ) + result = /obj/item/reagent_containers/food/snacks/pancakes/chocolatechip + subcategory = CAT_PASTRY + + ////////////////////////////////////////////////DONKPOCCKETS//////////////////////////////////////////////// /datum/crafting_recipe/food/donkpocket diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index bceaf6d7dd..e7bf3ea9d7 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -16,7 +16,7 @@ var/list/cards = list() -/obj/item/deck/New() +/obj/item/deck/Initialize() . = ..() var/cardcolor diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 0832f372c8..10b1fcd80d 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -179,6 +179,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("data/iconCache.sav")) //Cache of ic log_world("\[[time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")]\] Client: [(src.owner.key ? src.owner.key : src.owner)] triggered JS error: [error]") //Global chat procs + /proc/to_chat(target, message) if(!target) return diff --git a/code/modules/goonchat/browserassets/css/browserOutput.css b/code/modules/goonchat/browserassets/css/browserOutput.css index c72f26a4e7..4ea8c85b16 100644 --- a/code/modules/goonchat/browserassets/css/browserOutput.css +++ b/code/modules/goonchat/browserassets/css/browserOutput.css @@ -313,7 +313,6 @@ h1.alert, h2.alert {color: #000000;} .green {color: #03ff39;} .shadowling {color: #3b2769;} .cult {color: #960000;} -.cultitalic {color: #960000; font-style: italic;} .cultlarge {color: #960000; font-weight: bold; font-size: 24px;} .narsie {color: #960000; font-weight: bold; font-size: 120px;} .narsiesmall {color: #960000; font-weight: bold; font-size: 48px;} @@ -322,7 +321,6 @@ h1.alert, h2.alert {color: #000000;} .hierophant_warning {color: #660099; font-style: italic;} .purple {color: #5e2d79;} .holoparasite {color: #35333a;} -.holoparasitebold {color: #35333a; font-weight: bold;} .revennotice {color: #1d2953;} .revenboldnotice {color: #1d2953; font-weight: bold;} @@ -331,10 +329,10 @@ h1.alert, h2.alert {color: #000000;} .revenwarning {color: #760fbb; font-style: italic;} .revendanger {color: #760fbb; font-weight: bold; font-size: 24px;} .umbra {color: #5000A0;} -.umbra_bold {color: #5000A0; font-weight: bold;} -.umbra_italics {color: #5000A0; font-style: italic;} .umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;} -.umbra_large {color: #5000A0; font-size: 24px;} +.umbra_large {color: #5000A0; font-size: 24px; font-weight: bold; font-style: italic;} + +.deconversion_message {color: #5000A0; font-size: 24px; font-style: italic;} .brass {color: #BE8700;} .heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;} @@ -343,7 +341,6 @@ h1.alert, h2.alert {color: #000000;} .ratvar {color: #BE8700; font-size: 48px; font-weight: bold; font-style: italic;} .alloy {color: #42474D;} .heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;} -.large_alloy {color: #42474D; font-size: 24px;} .nezbere_large {color: #42474D; font-size: 24px; font-weight: bold; font-style: italic;} .nezbere {color: #42474D; font-weight: bold; font-style: italic;} .nezbere_small {color: #42474D;} @@ -366,7 +363,6 @@ h1.alert, h2.alert {color: #000000;} .alien {color: #543354;} .noticealien {color: #00c000;} .alertalien {color: #00c000; font-weight: bold;} -.borer {color: #543354; font-style: italic;} .changeling {color: #800080; font-style: italic;} .spider {color: #4d004d;} @@ -381,11 +377,13 @@ h1.alert, h2.alert {color: #000000;} .small {font-size: 8px;} .big {font-size: 24px;} .reallybig {font-size: 32px;} +.extremelybig {font-size: 40px;} .greentext {color: #00FF00; font-size: 24px;} .redtext {color: #FF0000; font-size: 24px;} .clown {color: #FF69Bf; font-size: 24px; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} .his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} +.icon {height: 1em; width: auto;} .memo {color: #638500; text-align: center;} .memoedit {text-align: center; font-size: 16px;} @@ -397,8 +395,8 @@ h1.alert, h2.alert {color: #000000;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} -.love {color: #FF69Bf;} -.lovebold {color: #FF69Bf; font-weight: bold;} +.monkeyhive {color: #774704;} +.monkeylead {color: #774704; font-size: 2;} .connectionClosed, .fatalError {background: red; color: white; padding: 5px;} .connectionClosed.restored {background: green;} diff --git a/code/modules/goonchat/browserassets/js/browserOutput.js b/code/modules/goonchat/browserassets/js/browserOutput.js index 4ca135bfd7..b9aa5fb94c 100644 --- a/code/modules/goonchat/browserassets/js/browserOutput.js +++ b/code/modules/goonchat/browserassets/js/browserOutput.js @@ -641,7 +641,11 @@ $(function() { opts.updatedVolume = newVolume; sendVolumeUpdate(); internalOutput('Loaded music volume of: '+savedConfig.smusicVolume+'', 'internal'); - } + } + else{ + $('#adminMusic').prop('volume', opts.defaultMusicVolume / 100); + } + if (savedConfig.smessagecombining) { if (savedConfig.smessagecombining == 'false') { opts.messageCombining = false; @@ -649,9 +653,7 @@ $(function() { opts.messageCombining = true; } } - else { - $('#adminMusic').prop('volume', opts.defaultMusicVolume / 100); - } + (function() { var dataCookie = getCookie('connData'); diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 66d92df569..9c1fd87cac 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -109,8 +109,8 @@ /obj/item/reagent_containers/food/snacks/egg/loaded containsPrize = TRUE -/obj/item/reagent_containers/food/snacks/egg/loaded/New() - ..() +/obj/item/reagent_containers/food/snacks/egg/loaded/Initialize() + . = ..() var/eggcolor = pick("blue","green","mime","orange","purple","rainbow","red","yellow") icon_state = "egg-[eggcolor]" item_color = "[eggcolor]" diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index 388a9d6893..f4734d9506 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -9,6 +9,8 @@ var/begin_weekday = FALSE //If set to a weekday, then this will trigger the holiday on the above week var/always_celebrate = FALSE // for christmas neverending, or testing. + var/obj/item/drone_hat //If this is defined, drones without a default hat will spawn with this one during the holiday; check drones_as_items.dm to see this used + // This proc gets run before the game starts when the holiday is activated. Do festive shit here. /datum/holiday/proc/celebrate() return @@ -172,11 +174,13 @@ name = "Labor Day" begin_day = 1 begin_month = MAY + drone_hat = /obj/item/clothing/head/hardhat /datum/holiday/firefighter name = "Firefighter's Day" begin_day = 4 begin_month = MAY + drone_hat = /obj/item/clothing/head/hardhat/red /datum/holiday/firefighter/getStationPrefix() return pick("Burning","Blazing","Plasma","Fire") @@ -190,6 +194,7 @@ name = "Doctor's Day" begin_day = 1 begin_month = JULY + drone_hat = /obj/item/clothing/head/nursehat /datum/holiday/UFO name = "UFO Day" @@ -221,6 +226,7 @@ name = "Talk-Like-a-Pirate Day" begin_day = 19 begin_month = SEPTEMBER + drone_hat = /obj/item/clothing/head/pirate /datum/holiday/pirate/greet() return "Ye be talkin' like a pirate today or else ye'r walkin' tha plank, matey!" @@ -321,6 +327,7 @@ begin_week = 4 begin_month = NOVEMBER begin_weekday = THURSDAY + drone_hat = /obj/item/clothing/head/that //This is the closest we can get to a pilgrim's hat /datum/holiday/thanksgiving/canada name = "Thanksgiving in Canada" @@ -384,21 +391,35 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and name = "Mayan Doomsday Anniversary" begin_day = 21 begin_month = DECEMBER + drone_hat = /obj/item/clothing/mask/rat/tribal /datum/holiday/xmas name = CHRISTMAS - begin_day = 23 + begin_day = 22 begin_month = DECEMBER - end_day = 25 + end_day = 27 + drone_hat = /obj/item/clothing/head/santa /datum/holiday/xmas/greet() return "Have a merry Christmas!" +/datum/holiday/xmas/celebrate() + SSticker.OnRoundstart(CALLBACK(src, .proc/roundstart_celebrate)) + +/datum/holiday/xmas/proc/roundstart_celebrate() + for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines) + Monitor.icon_state = "entertainment_xmas" + + for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list) + Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) + + /datum/holiday/festive_season name = FESTIVE_SEASON begin_day = 1 begin_month = DECEMBER end_day = 31 + drone_hat = /obj/item/clothing/head/santa /datum/holiday/festive_season/greet() return "Have a nice festive season!" @@ -421,6 +442,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and /datum/holiday/easter name = EASTER + drone_hat = /obj/item/clothing/head/rabbitears var/const/days_early = 1 //to make editing the holiday easier var/const/days_extra = 1 diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index 6a8a720366..1dcab21e16 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -25,13 +25,13 @@ armour_penetration = 50 var/active = 0 -/obj/item/holo/esword/green/New() - ..() +/obj/item/holo/esword/green/Initialize() + . = ..() item_color = "green" -/obj/item/holo/esword/red/New() - ..() +/obj/item/holo/esword/red/Initialize() + . = ..() item_color = "red" /obj/item/holo/esword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) @@ -42,9 +42,9 @@ /obj/item/holo/esword/attack(target as mob, mob/user as mob) ..() -/obj/item/holo/esword/New() +/obj/item/holo/esword/Initialize() + . = ..() item_color = pick("red","blue","green","purple") - ..() /obj/item/holo/esword/attack_self(mob/living/user as mob) active = !active diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index d4269013f7..cf12ccb3ce 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -37,8 +37,8 @@ var/bee_resources = 0 -/obj/structure/beebox/New() - ..() +/obj/structure/beebox/Initialize() + . = ..() START_PROCESSING(SSobj, src) @@ -55,8 +55,8 @@ var/random_reagent = FALSE -/obj/structure/beebox/premade/New() - ..() +/obj/structure/beebox/premade/Initialize() + . = ..() icon_state = "beebox" var/datum/reagent/R = null @@ -152,6 +152,7 @@ else to_chat(user, "There's no room for any more frames in the apiary!") return + if(istype(I, /obj/item/wrench)) if(default_unfasten_wrench(user, I, time = 20)) return diff --git a/code/modules/hydroponics/beekeeping/honeycomb.dm b/code/modules/hydroponics/beekeeping/honeycomb.dm index 8b9d641eac..e7faff0209 100644 --- a/code/modules/hydroponics/beekeeping/honeycomb.dm +++ b/code/modules/hydroponics/beekeeping/honeycomb.dm @@ -13,8 +13,8 @@ grind_results = list() var/honey_color = "" -/obj/item/reagent_containers/honeycomb/New() - ..() +/obj/item/reagent_containers/honeycomb/Initialize() + . = ..() pixel_x = rand(8,-8) pixel_y = rand(8,-8) update_icon() diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 87c860b50e..fa1e25a6d4 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -45,7 +45,7 @@ min_wrate = FLOOR(10-wratemod,1) // 7,5,2,0 Clamps at 0 and 10 You want this low min_wchance = 67-(ML.rating*16) // 48,35,19,3 Clamps at 0 and 67 You want this low for(var/obj/item/circuitboard/machine/plantgenes/vaultcheck in component_parts) - if(istype(vaultcheck, /obj/item/circuitboard/machine/plantgenes/vault)) // DUMB BOTANY TUTS + if(istype(vaultcheck, /obj/item/circuitboard/machine/plantgenes/vault)) // DISABILITY_DUMB BOTANY TUTS max_potency = 100 max_yield = 10 min_production = 1 @@ -422,8 +422,8 @@ var/read_only = 0 //Well, it's still a floppy disk unique_rename = 1 -/obj/item/disk/plantgene/New() - ..() +/obj/item/disk/plantgene/Initialize() + . = ..() add_overlay("datadisk_gene") src.pixel_x = rand(-5, 5) src.pixel_y = rand(-5, 5) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 15456c1e34..dadf077c8a 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -146,7 +146,7 @@ /obj/item/reagent_containers/food/snacks/grown/on_grind() var/nutriment = reagents.get_reagent_amount("nutriment") - if(grind_results.len) + if(grind_results&&grind_results.len) for(var/i in 1 to grind_results.len) grind_results[grind_results[i]] = nutriment reagents.del_reagent("nutriment") @@ -154,7 +154,7 @@ /obj/item/reagent_containers/food/snacks/grown/on_juice() var/nutriment = reagents.get_reagent_amount("nutriment") - if(juice_results.len) + if(juice_results&&juice_results.len) for(var/i in 1 to juice_results.len) juice_results[juice_results[i]] = nutriment reagents.del_reagent("nutriment") diff --git a/code/modules/hydroponics/grown/apple.dm b/code/modules/hydroponics/grown/apple.dm index 8b35fee872..d2fee8ef80 100644 --- a/code/modules/hydroponics/grown/apple.dm +++ b/code/modules/hydroponics/grown/apple.dm @@ -15,7 +15,6 @@ genes = list(/datum/plant_gene/trait/repeated_harvest) mutatelist = list(/obj/item/seeds/apple/gold) reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) - juice_results = list("applejuice" = 0) /obj/item/reagent_containers/food/snacks/grown/apple seed = /obj/item/seeds/apple @@ -25,6 +24,7 @@ filling_color = "#FF4500" bitesize = 100 // Always eat the apple in one bite foodtype = FRUIT + juice_results = list("applejuice" = 0) // Posioned Apple /obj/item/seeds/apple/poisoned diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 72517e87bc..ceb7ec4fb6 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -13,7 +13,6 @@ genes = list(/datum/plant_gene/trait/slip, /datum/plant_gene/trait/repeated_harvest) mutatelist = list(/obj/item/seeds/banana/mime, /obj/item/seeds/banana/bluespace) reagents_add = list("banana" = 0.1, "potassium" = 0.1, "vitamin" = 0.04, "nutriment" = 0.02) - juice_results = list("banana" = 0) /obj/item/reagent_containers/food/snacks/grown/banana seed = /obj/item/seeds/banana @@ -25,6 +24,7 @@ filling_color = "#FFFF00" bitesize = 5 foodtype = FRUIT + juice_results = list("banana" = 0) /obj/item/reagent_containers/food/snacks/grown/banana/suicide_act(mob/user) user.visible_message("[user] is aiming [src] at [user.p_them()]self! It looks like [user.p_theyre()] trying to commit suicide!") diff --git a/code/modules/hydroponics/grown/potato.dm b/code/modules/hydroponics/grown/potato.dm index e127b166ea..4d1d916572 100644 --- a/code/modules/hydroponics/grown/potato.dm +++ b/code/modules/hydroponics/grown/potato.dm @@ -17,7 +17,6 @@ genes = list(/datum/plant_gene/trait/battery) mutatelist = list(/obj/item/seeds/potato/sweet) reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) - juice_results = list("potato" = 0) /obj/item/reagent_containers/food/snacks/grown/potato seed = /obj/item/seeds/potato @@ -27,6 +26,7 @@ filling_color = "#E9967A" bitesize = 100 foodtype = VEGETABLES + juice_results = list("potato" = 0) /obj/item/reagent_containers/food/snacks/grown/potato/wedges diff --git a/code/modules/hydroponics/grown/random.dm b/code/modules/hydroponics/grown/random.dm index 8f25eff215..04b3ff29fa 100644 --- a/code/modules/hydroponics/grown/random.dm +++ b/code/modules/hydroponics/grown/random.dm @@ -12,9 +12,9 @@ icon_harvest = "xpod-harvest" growthstages = 4 -/obj/item/seeds/random/New() +/obj/item/seeds/random/Initialize() + . = ..() randomize_stats() - ..() if(prob(60)) add_random_reagents(1, 3) if(prob(50)) diff --git a/code/modules/hydroponics/sample.dm b/code/modules/hydroponics/sample.dm index 52c2e1052f..fff4c646ac 100644 --- a/code/modules/hydroponics/sample.dm +++ b/code/modules/hydroponics/sample.dm @@ -5,8 +5,8 @@ yield = -1 var/sample_color = "#FFFFFF" -/obj/item/seeds/sample/New() - ..() +/obj/item/seeds/sample/Initialize() + . = ..() if(sample_color) var/mutable_appearance/filling = mutable_appearance(icon, "sample-filling") filling.color = sample_color diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 56f80c548d..d956055c41 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -35,8 +35,8 @@ var/weed_rate = 1 //If the chance below passes, then this many weeds sprout during growth var/weed_chance = 5 //Percentage chance per tray update to grow weeds -/obj/item/seeds/New(loc, nogenes = 0) - ..() +/obj/item/seeds/Initialize(loc, nogenes = 0) + . = ..() pixel_x = rand(-8, 8) pixel_y = rand(-8, 8) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 805cf787f7..637c3bfcee 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -20,6 +20,8 @@ var/charge_tick = FALSE var/charge_delay = 4 var/use_cyborg_cell = TRUE + max_integrity = 50 + armor = list(melee = 50, bullet = 70, laser = 70, energy = 100, bomb = 10, bio = 100, rad = 100, fire = 0, acid = 0) /obj/item/device/electronic_assembly/proc/check_interactivity(mob/user) return user.canUseTopic(src,be_close = TRUE) @@ -30,8 +32,6 @@ START_PROCESSING(SScircuit, src) materials[MAT_METAL] = round((max_complexity + max_components) / 4) * SScircuit.cost_multiplier - - /obj/item/device/electronic_assembly/Destroy() STOP_PROCESSING(SScircuit, src) return ..() @@ -273,22 +273,9 @@ /obj/item/device/electronic_assembly/afterattack(atom/target, mob/user, proximity) - for(var/obj/item/integrated_circuit/input/sensor/S in assembly_components) - if(!proximity) - if(istype(S,/obj/item/integrated_circuit/input/sensor/ranged)||(!user)) - if(user.client) - if(!(target in view(user.client))) - continue - else - if(!(target in view(user))) - continue - else - continue - S.set_pin_data(IC_OUTPUT, 1, WEAKREF(target)) - S.check_then_do_work() - S.scan(target) - - visible_message(" [user] waves [src] around [target].") + for(var/obj/item/integrated_circuit/input/S in assembly_components) + if(S.sense(target,user,proximity)) + visible_message(" [user] waves [src] around [target].") /obj/item/device/electronic_assembly/screwdriver_act(mob/living/user, obj/item/S) @@ -326,8 +313,11 @@ interact(user) return TRUE else + for(var/obj/item/integrated_circuit/input/S in assembly_components) + S.attackby_react(I,user,user.a_intent) return ..() + /obj/item/device/electronic_assembly/attack_self(mob/user) if(!check_interactivity(user)) return @@ -391,7 +381,6 @@ /obj/item/device/electronic_assembly/proc/get_object() return src - // Returns the location to be used for dropping items. // Same as the regular drop_location(), but with checks being run on acting_object if necessary. /obj/item/integrated_circuit/drop_location() @@ -406,6 +395,7 @@ /obj/item/device/electronic_assembly/default //The /default electronic_assemblys are to allow the introduction of the new naming scheme without breaking old saves. name = "type-a electronic assembly" + /obj/item/device/electronic_assembly/calc name = "type-b electronic assembly" icon_state = "setup_small_calc" @@ -507,4 +497,4 @@ /obj/item/device/electronic_assembly/drone/arms name = "type-b electronic drone" icon_state = "setup_drone_arms" - desc = "It's a case, for building mobile electronics with. This one is armed and dangerous." \ No newline at end of file + desc = "It's a case, for building mobile electronics with. This one is armed and dangerous." diff --git a/code/modules/integrated_electronics/core/debugger.dm b/code/modules/integrated_electronics/core/debugger.dm index ac6f5c1a1e..666fcf00d6 100644 --- a/code/modules/integrated_electronics/core/debugger.dm +++ b/code/modules/integrated_electronics/core/debugger.dm @@ -56,7 +56,7 @@ data_to_show = A.name to_chat(user, "You write '[data_to_write ? data_to_show : "NULL"]' to the '[io]' pin of \the [io.holder].") else if(io.io_type == PULSE_CHANNEL) - io.holder.check_then_do_work(ignore_power = TRUE) + io.holder.check_then_do_work(io.ord,ignore_power = TRUE) to_chat(user, "You pulse \the [io.holder]'s [io].") io.holder.interact(user) // This is to update the UI. diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm index e84823f201..773c4f0684 100644 --- a/code/modules/integrated_electronics/core/helpers.dm +++ b/code/modules/integrated_electronics/core/helpers.dm @@ -15,9 +15,9 @@ io_type_override = io_list_copy[io_entry] if(io_type_override) - io_list.Add(new io_type_override(src, io_entry, default_data, pin_type)) + io_list.Add(new io_type_override(src, io_entry, default_data, pin_type,i)) else - io_list.Add(new io_type(src, io_entry, default_data, pin_type)) + io_list.Add(new io_type(src, io_entry, default_data, pin_type,i)) /obj/item/integrated_circuit/proc/set_pin_data(pin_type, pin_number, datum/new_data) diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 069ca4245c..0c1a2fdad5 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -58,6 +58,12 @@ a creative player the means to solve many problems. Circuits are held inside an /obj/item/integrated_circuit/proc/any_examine(mob/user) return +/obj/item/integrated_circuit/proc/attackby_react(var/atom/movable/A,mob/user) + return + +/obj/item/integrated_circuit/proc/sense(var/atom/movable/A,mob/user,prox) + return + /obj/item/integrated_circuit/proc/check_interactivity(mob/user) if(assembly) return assembly.check_interactivity(user) @@ -291,17 +297,18 @@ a creative player the means to solve many problems. Circuits are held inside an return TRUE // Battery has enough. return FALSE // Not enough power. -/obj/item/integrated_circuit/proc/check_then_do_work(var/ignore_power = FALSE) +/obj/item/integrated_circuit/proc/check_then_do_work(ord,var/ignore_power = FALSE) if(world.time < next_use) // All intergrated circuits have an internal cooldown, to protect from spam. - return + return FALSE if(power_draw_per_use && !ignore_power) if(!check_power()) power_fail() - return + return FALSE next_use = world.time + cooldown_per_use - do_work() + do_work(ord) + return TRUE -/obj/item/integrated_circuit/proc/do_work() +/obj/item/integrated_circuit/proc/do_work(ord) return /obj/item/integrated_circuit/proc/disconnect_all() @@ -369,4 +376,3 @@ a creative player the means to solve many problems. Circuits are held inside an return TRUE return FALSE - diff --git a/code/modules/integrated_electronics/core/pins.dm b/code/modules/integrated_electronics/core/pins.dm index bff96b713c..528281c3b7 100644 --- a/code/modules/integrated_electronics/core/pins.dm +++ b/code/modules/integrated_electronics/core/pins.dm @@ -25,14 +25,16 @@ D [1]/ || var/list/linked = list() var/io_type = DATA_CHANNEL var/pin_type // IC_INPUT, IC_OUTPUT, IC_ACTIVATOR - used in saving assembly wiring + var/ord - -/datum/integrated_io/New(loc, _name, _data, _pin_type) +/datum/integrated_io/New(loc, _name, _data, _pin_type,_ord) name = _name if(_data) data = _data if(_pin_type) pin_type = _pin_type + if(_ord) + ord = _ord holder = loc @@ -148,7 +150,7 @@ D [1]/ || /datum/integrated_io/activate/push_data() for(var/k in 1 to linked.len) var/datum/integrated_io/io = linked[k] - io.holder.check_then_do_work() + io.holder.check_then_do_work(io.ord) /datum/integrated_io/proc/pull_data() for(var/k in 1 to linked.len) @@ -207,7 +209,7 @@ D [1]/ || write_data_to_pin(new_data) /datum/integrated_io/activate/ask_for_pin_data(mob/user) // This just pulses the pin. - holder.check_then_do_work(ignore_power = TRUE) + holder.check_then_do_work(ord,ignore_power = TRUE) to_chat(user, "You pulse \the [holder]'s [src] pin.") /datum/integrated_io/activate diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 15f76281ef..c5336094f1 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -101,6 +101,7 @@ return if(..()) return TRUE + add_fingerprint(usr) if(href_list["category"]) current_category = href_list["category"] diff --git a/code/modules/integrated_electronics/core/special_pins/index_pin.dm b/code/modules/integrated_electronics/core/special_pins/index_pin.dm index 51b12a0f3a..06267eec61 100644 --- a/code/modules/integrated_electronics/core/special_pins/index_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/index_pin.dm @@ -1,4 +1,4 @@ -// These pins can only contain integer numbers between 1 and IC_MAX_LIST_LENGTH. Null is not allowed. +// These pins can only contain integer numbers between 0 and IC_MAX_LIST_LENGTH. Null is allowed. /datum/integrated_io/index name = "index pin" data = 1 @@ -11,10 +11,10 @@ /datum/integrated_io/index/write_data_to_pin(new_data) if(isnull(new_data)) - new_data = 1 + new_data = 0 if(isnum(new_data)) - data = CLAMP(round(new_data), 1, IC_MAX_LIST_LENGTH) + data = CLAMP(round(new_data), 0, IC_MAX_LIST_LENGTH) holder.on_data_written() /datum/integrated_io/index/display_pin_type() diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm index 2acce3d450..f7df21fc9a 100644 --- a/code/modules/integrated_electronics/passive/power.dm +++ b/code/modules/integrated_electronics/passive/power.dm @@ -12,7 +12,7 @@ /obj/item/integrated_circuit/passive/power/solar_cell name = "tiny photovoltaic cell" desc = "It's a very tiny solar cell, generally used in calculators." - extended_desc = "The cell generates 1 W of power in optimal lighting conditions. Less light will result in less power being generated." + extended_desc = "This cell generates 1 W of power in optimal lighting conditions. Less light will result in less power being generated." icon_state = "solar_cell" complexity = 8 spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -29,7 +29,7 @@ /obj/item/integrated_circuit/passive/power/starter name = "starter" - desc = "This tiny circuit will send pulse right after device is turned on. Or when power is restored." + desc = "This tiny circuit will send a pulse right after the device is turned on, or when power is restored to it." icon_state = "led" complexity = 1 activators = list("pulse out" = IC_PINTYPE_PULSE_OUT) @@ -53,7 +53,7 @@ name = "tesla power relay" desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them." w_class = WEIGHT_CLASS_SMALL - extended_desc = "The siphon generates 50 W of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \ + extended_desc = "The siphon drains 50 W of power from an APC in the same room as it as long as it has charge remaining. It will always drain \ from the 'equipment' power channel." icon_state = "power_relay" complexity = 7 @@ -75,8 +75,8 @@ name = "large tesla power relay" desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them, now in industiral size!" w_class = WEIGHT_CLASS_BULKY - extended_desc = "The siphon generates 2 kW of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \ - from the 'equipment' power channel." + extended_desc = "The siphon drains 2 kW of power from an APC in the same room as it as long as it has charge remaining. It will always drain \ + from the 'equipment' power channel." icon_state = "power_relay" complexity = 15 spawn_flags = IC_SPAWN_RESEARCH @@ -89,7 +89,7 @@ desc = "Produces electricity from chemicals." icon_state = "chemical_cell" extended_desc = "This is effectively an internal beaker. It will consume and produce power from plasma, slime jelly, welding fuel, carbon,\ - ethanol, nutriments and blood , in order of decreasing efficiency. It will consume fuel only if the battery can take more energy." + ethanol, nutriments, and blood in order of decreasing efficiency. It will consume fuel only if the battery can take more energy." container_type = OPENCONTAINER complexity = 4 inputs = list() diff --git a/code/modules/integrated_electronics/subtypes/arithmetic.dm b/code/modules/integrated_electronics/subtypes/arithmetic.dm index 7dec779f83..edb51ec01e 100644 --- a/code/modules/integrated_electronics/subtypes/arithmetic.dm +++ b/code/modules/integrated_electronics/subtypes/arithmetic.dm @@ -22,7 +22,7 @@ name = "addition circuit" desc = "This circuit can add numbers together." extended_desc = "The order that the calculation goes is;
    \ - result = ((((A + B) + C) + D) ... ) and so on, until all pins have been added. \ + result = ((((A + B) + C) + D) ... ) and so on, until all pins have been added. \ Null pins are ignored." icon_state = "addition" spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -30,10 +30,9 @@ /obj/item/integrated_circuit/arithmetic/addition/do_work() var/result = 0 for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - I.pull_data() - if(isnum(I.data)) - result = result + I.data + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I)) + result += I set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -45,8 +44,8 @@ name = "subtraction circuit" desc = "This circuit can subtract numbers." extended_desc = "The order that the calculation goes is;
    \ - result = ((((A - B) - C) - D) ... ) and so on, until all pins have been subtracted. \ - Null pins are ignored. Pin A must be a number or the circuit will not function." + result = ((((A - B) - C) - D) ... ) and so on, until all pins have been subtracted. \ + Null pins are ignored. Pin A must be a number, or the circuit will not function." icon_state = "subtraction" spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -56,13 +55,10 @@ return var/result = A.data - for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - if(I == A) - continue - I.pull_data() - if(isnum(I.data)) - result = result - I.data + for(var/k in 2 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I)) + result -= I set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -74,8 +70,8 @@ name = "multiplication circuit" desc = "This circuit can multiply numbers." extended_desc = "The order that the calculation goes is;
    \ - result = ((((A * B) * C) * D) ... ) and so on, until all pins have been multiplied. \ - Null pins are ignored. Pin A must be a number or the circuit will not function." + result = ((((A * B) * C) * D) ... ) and so on, until all pins have been multiplied. \ + Null pins are ignored. Pin A must be a number, or the circuit will not function." icon_state = "multiplication" spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -85,13 +81,10 @@ if(!isnum(A.data)) return var/result = A.data - for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - if(I == A) - continue - I.pull_data() - if(isnum(I.data)) - result = result * I.data + for(var/k in 2 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I)) + result *= I set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -103,8 +96,8 @@ name = "division circuit" desc = "This circuit can divide numbers, just don't think about trying to divide by zero!" extended_desc = "The order that the calculation goes is;
    \ - result = ((((A / B) / C) / D) ... ) and so on, until all pins have been divided. \ - Null pins, and pins containing 0, are ignored. Pin A must be a number or the circuit will not function." + result = ((((A / B) / C) / D) ... ) and so on, until all pins have been divided. \ + Null pins, and pins containing 0, are ignored. Pin A must be a number or the circuit will not function." icon_state = "division" spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -114,13 +107,12 @@ return var/result = A.data - for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - if(I == A) - continue - I.pull_data() - if(isnum(I.data) && I.data != 0) //No runtimes here. - result = result / I.data + + for(var/k in 2 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I) && (I != 0)) + result /= I + set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -199,7 +191,7 @@ /obj/item/integrated_circuit/arithmetic/absolute name = "absolute circuit" - desc = "This outputs a non-negative version of the number you put in. This may also be thought of as its distance from zero." + desc = "This outputs a non-negative version of the number you put in. This may also be thought of as its distance from zero." icon_state = "absolute" inputs = list("A" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -228,12 +220,11 @@ /obj/item/integrated_circuit/arithmetic/average/do_work() var/result = 0 var/inputs_used = 0 - for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - I.pull_data() - if(isnum(I.data)) + for(var/k in 2 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I)) inputs_used++ - result = result + I.data + result += I if(inputs_used) result = result / inputs_used @@ -245,7 +236,7 @@ // Pi, because why the hell not? // /obj/item/integrated_circuit/arithmetic/pi name = "pi constant circuit" - desc = "Not recommended for cooking. Outputs '3.14159' when it receives a pulse." + desc = "Not recommended for cooking. Outputs '3.14159' when it receives a pulse." icon_state = "pi" inputs = list() spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -260,7 +251,7 @@ name = "random number generator circuit" desc = "This gives a random (integer) number between values A and B inclusive." extended_desc = "'Inclusive' means that the upper bound is included in the range of numbers, e.g. L = 1 and H = 3 will allow \ - for outputs of 1, 2, or 3. H being the higher number is not strictly required." + for outputs of 1, 2, or 3. H being the higher number is not strictly required." icon_state = "random" inputs = list("L" = IC_PINTYPE_NUMBER,"H" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH @@ -281,18 +272,17 @@ /obj/item/integrated_circuit/arithmetic/square_root name = "square root circuit" - desc = "This outputs the square root of a number you put in." + desc = "This outputs the square root of a number you input." icon_state = "square_root" inputs = list("A" = IC_PINTYPE_NUMBER) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH /obj/item/integrated_circuit/arithmetic/square_root/do_work() var/result = 0 - for(var/k in 1 to inputs.len) - var/datum/integrated_io/I = inputs[k] - I.pull_data() - if(isnum(I.data)) - result = sqrt(I.data) + for(var/k in 2 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(isnum(I)) + result += sqrt(I) set_pin_data(IC_OUTPUT, 1, result) push_data() diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index d622ea8ca9..b6733e5b7d 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -10,7 +10,7 @@ /obj/item/integrated_circuit/converter/num2text name = "number to string" desc = "This circuit can convert a number variable into a string." - extended_desc = "Because of game limitations null/false variables will output a '0' string." + extended_desc = "Because of circuit limitations, null/false variables will output a '0' string." icon_state = "num-string" inputs = list("input" = IC_PINTYPE_NUMBER) outputs = list("output" = IC_PINTYPE_STRING) @@ -88,7 +88,7 @@ /obj/item/integrated_circuit/converter/refdecode name = "reference decoder" - desc = "This circuit can convert a encoded reference to actual reference." + desc = "This circuit can convert an encoded reference to actual reference." icon_state = "ref-string" inputs = list("input" = IC_PINTYPE_STRING) outputs = list("output" = IC_PINTYPE_REF) @@ -104,7 +104,7 @@ /obj/item/integrated_circuit/converter/lowercase name = "lowercase string converter" - desc = "this will cause a string to come out in all lowercase." + desc = "this circuit will cause a string to come out in all lowercase." icon_state = "lowercase" inputs = list("input" = IC_PINTYPE_STRING) outputs = list("output" = IC_PINTYPE_STRING) @@ -160,10 +160,10 @@ /obj/item/integrated_circuit/converter/concatenator/do_work() var/result = null - for(var/datum/integrated_io/I in inputs) - I.pull_data() - if(!isnull(I.data)) - result = result + I.data + for(var/k in 1 to inputs.len) + var/I = get_pin_data(IC_INPUT, k) + if(!isnull(I)) + result = result + I set_pin_data(IC_OUTPUT, 1, result) push_data() @@ -207,7 +207,7 @@ name = "find text" desc = "This gives position of sample in the string. Or returns 0." extended_desc = "The first pin is the string to be examined. The second pin is the sample to be found. \ - For example, 'eat this burger',' ' will give you position 4. This circuit isn't case sensitive." + For example, 'eat this burger' will give you position 4. This circuit isn't case sensitive." complexity = 4 inputs = list( "string" = IC_PINTYPE_STRING, @@ -232,7 +232,7 @@ name = "string exploder" desc = "This splits a single string into a list of strings." extended_desc = "This circuit splits a given string into a list of strings based on the string and given delimiter. \ - For example, 'eat this burger',' ' will be converted to list('eat','this','burger')." + For example, 'eat this burger' will be converted to list('eat','this','burger')." icon_state = "split" complexity = 4 inputs = list( diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index c39cfeac44..133d14bbd5 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -70,7 +70,7 @@ power_draw_per_use = 4 /obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user) - var/new_input = stripped_input(user, "Enter some words, please.","Number pad") + var/new_input = stripped_input(user, "Enter some words, please.","Text pad") if(istext(new_input) && user.IsAdvancedToolUser()) set_pin_data(IC_OUTPUT, 1, new_input) push_data() @@ -78,7 +78,7 @@ /obj/item/integrated_circuit/input/med_scanner name = "integrated medical analyser" - desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is." + desc = "A very small version of the common medical analyser. This allows the machine to know how healthy someone is." icon_state = "medscan" complexity = 4 inputs = list("\ target") @@ -106,7 +106,7 @@ /obj/item/integrated_circuit/input/adv_med_scanner name = "integrated advanced medical analyser" - desc = "A very small version of the medbot's medical analyser. This allows the machine to know how healthy someone is. \ + desc = "A very small version of the medbot's medical analyser. This allows the machine to know how healthy someone is. \ This type is much more precise, allowing the machine to know much more about the target than a normal analyzer." icon_state = "medscan_adv" complexity = 12 @@ -128,7 +128,7 @@ var/mob/living/carbon/human/H = get_pin_data_as_type(IC_INPUT, 1, /mob/living/carbon/human) if(!istype(H)) //Invalid input return - if(H in view(get_turf(H))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. var/total_health = round(H.health/H.getMaxHealth(), 0.01)*100 var/missing_health = H.getMaxHealth() - H.health @@ -143,10 +143,53 @@ push_data() activate_pin(2) +/obj/item/integrated_circuit/input/slime_scanner + name = "slime_scanner" + desc = "A very small version of the xenobio analyser. This allows the machine to know every needed properties of slime." + icon_state = "medscan_adv" + complexity = 12 + inputs = list("\ target") + outputs = list( + "colour" = IC_PINTYPE_STRING, + "adult" = IC_PINTYPE_BOOLEAN, + "nutrition" = IC_PINTYPE_NUMBER, + "charge" = IC_PINTYPE_NUMBER, + "health" = IC_PINTYPE_NUMBER, + "possible mutation" = IC_PINTYPE_LIST, + "genetic destability" = IC_PINTYPE_NUMBER, + "slime core amount" = IC_PINTYPE_NUMBER, + "Growth progress" = IC_PINTYPE_NUMBER, + ) + activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) + spawn_flags = IC_SPAWN_RESEARCH + power_draw_per_use = 80 + +/obj/item/integrated_circuit/input/slime_scanner/do_work() + var/mob/living/simple_animal/slime/T = get_pin_data_as_type(IC_INPUT, 1, /mob/living/simple_animal/slime) + if(!isslime(T)) //Invalid input + return + if(T in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. + + set_pin_data(IC_OUTPUT, 1, T.colour) + set_pin_data(IC_OUTPUT, 2, T.is_adult) + set_pin_data(IC_OUTPUT, 3, T.nutrition/T.get_max_nutrition()) + set_pin_data(IC_OUTPUT, 4, T.powerlevel) + set_pin_data(IC_OUTPUT, 5, round(T.health/T.maxHealth,0.01)*100) + set_pin_data(IC_OUTPUT, 6, uniqueList(T.slime_mutation)) + set_pin_data(IC_OUTPUT, 7, T.mutation_chance) + set_pin_data(IC_OUTPUT, 8, T.cores) + set_pin_data(IC_OUTPUT, 9, T.amount_grown/SLIME_EVOLUTION_THRESHOLD) + + + push_data() + activate_pin(2) + + + /obj/item/integrated_circuit/input/plant_scanner name = "integrated plant analyzer" - desc = "A very small version of the plant analyser. This allows the machine to know all valuable params of plants in trays. \ - it can't scan seeds and fruits.only plants." + desc = "A very small version of the plant analyser. This allows the machine to know all valuable params of plants in trays. \ + It cannot scan seeds nor fruits, only plants." icon_state = "medscan_adv" complexity = 12 inputs = list("\ target") @@ -167,7 +210,7 @@ "Water level" = IC_PINTYPE_NUMBER, "Nutrition level" = IC_PINTYPE_NUMBER, "harvest" = IC_PINTYPE_NUMBER, - "dead" = IC_PINTYPE_NUMBER , + "dead" = IC_PINTYPE_NUMBER, "plant health" = IC_PINTYPE_NUMBER ) activators = list("scan" = IC_PINTYPE_PULSE_IN, "on scanned" = IC_PINTYPE_PULSE_OUT) @@ -180,7 +223,7 @@ return for(var/i=1, i<=outputs.len, i++) set_pin_data(IC_OUTPUT, i, null) - if(H in view(get_turf(H))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. if(H.myseed) set_pin_data(IC_OUTPUT, 1, H.myseed.plantname) set_pin_data(IC_OUTPUT, 2, H.age) @@ -207,8 +250,8 @@ /obj/item/integrated_circuit/input/gene_scanner name = "gene scanner" desc = "This circuit will scan plant for traits and reagent genes." - extended_desc = "This allows the machine to scan plants in trays for reagent and trait genes. \ - it can't scan seeds and fruits.only plants." + extended_desc = "This allows the machine to scan plants in trays for reagent and trait genes. \ + It cannot scan seeds nor fruits, only plants." inputs = list( "\ target" = IC_PINTYPE_REF ) @@ -228,7 +271,7 @@ return for(var/i=1, i<=outputs.len, i++) set_pin_data(IC_OUTPUT, i, null) - if(H in view(get_turf(H))) // Like medbot's analyzer it can be used in range.. + if(H in view(get_turf(src))) // Like medbot's analyzer it can be used in range.. if(H.myseed) for(var/datum/plant_gene/reagent/G in H.myseed.genes) greagents.Add(G.get_name()) @@ -244,23 +287,23 @@ /obj/item/integrated_circuit/input/examiner name = "examiner" - desc = "It' s a little machine vision system. It can return the name, description, distance, \ - relative coordinates, total amount of reagents, maximum amount of reagents, density and opacity of the referenced object." + desc = "It's a little machine vision system. It can return the name, description, distance, \ + relative coordinates, total amount of reagents, maximum amount of reagents, density, and opacity of the referenced object." icon_state = "video_camera" complexity = 6 inputs = list( "target" = IC_PINTYPE_REF ) outputs = list( - "name" = IC_PINTYPE_STRING, - "description" = IC_PINTYPE_STRING, - "X" = IC_PINTYPE_NUMBER, - "Y" = IC_PINTYPE_NUMBER, - "distance" = IC_PINTYPE_NUMBER, + "name" = IC_PINTYPE_STRING, + "description" = IC_PINTYPE_STRING, + "X" = IC_PINTYPE_NUMBER, + "Y" = IC_PINTYPE_NUMBER, + "distance" = IC_PINTYPE_NUMBER, "max reagents" = IC_PINTYPE_NUMBER, - "amount of reagents" = IC_PINTYPE_NUMBER, - "density" = IC_PINTYPE_BOOLEAN, - "opacity" = IC_PINTYPE_BOOLEAN, + "amount of reagents" = IC_PINTYPE_NUMBER, + "density" = IC_PINTYPE_BOOLEAN, + "opacity" = IC_PINTYPE_BOOLEAN, ) activators = list( "scan" = IC_PINTYPE_PULSE_IN, @@ -298,7 +341,7 @@ /obj/item/integrated_circuit/input/local_locator name = "local locator" - desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ + desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ that is holding the machine containing it." inputs = list() outputs = list("located ref") @@ -317,10 +360,10 @@ /obj/item/integrated_circuit/input/adjacent_locator name = "adjacent locator" - desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ + desc = "This is needed for certain devices that demand a reference for a target to act upon. This type only locates something \ that is standing a meter away from the machine." - extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. This means that it will \ - give refs to nearby objects that are similar. If more than one valid object is found nearby, it will choose one of them at \ + extended_desc = "The first pin requires a ref to the kind of object that you want the locator to acquire. This means that it will \ + give refs to nearby objects that are similar. If more than one valid object is found nearby, it will choose one of them at \ random." inputs = list("desired type ref") outputs = list("located ref") @@ -357,11 +400,11 @@ /obj/item/integrated_circuit/input/advanced_locator_list complexity = 6 name = "list advanced locator" - desc = "This is needed for certain devices that demand list of names for a targets to act upon. This type locates something \ + desc = "This is needed for certain devices that demand list of names for a targets to act upon. This type locates something \ that is standing in given radius up to 8 meters" - extended_desc = "The first pin requires list a kinds of object that you want the locator to acquire. If This means that it will \ - give refs to nearby objects that are similar. It will locate objects by given names and description,given in list. It will give list of all found objects.\ - .The second pin is a radius" + extended_desc = "The first pin requires a list of kinds of objects that you want the locator to acquire. It will locate nearby objects by name and description, \ + and will then provide a list of all found objects which are similar. \ + The second pin is a radius." inputs = list("desired type ref" = IC_PINTYPE_LIST, "radius" = IC_PINTYPE_NUMBER) outputs = list("located ref" = IC_PINTYPE_LIST) activators = list("locate" = IC_PINTYPE_PULSE_IN,"found" = IC_PINTYPE_PULSE_OUT,"not found" = IC_PINTYPE_PULSE_OUT) @@ -412,9 +455,9 @@ name = "advanced locator" desc = "This is needed for certain devices that demand a reference for a target to act upon. This type locates something \ that is standing in given radius up to 8 meters" - extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. If This means that it will \ - give refs to nearby objects that are similar. If this pin is string, locator will search\ - item by matching desired text in name + description. If more than one valid object is found nearby, it will choose one of them at \ + extended_desc = "The first pin requires a ref to a kind of object that you want the locator to acquire. This means that it will \ + give refs to nearby objects which are similar. If this pin is string, this locator will search for an \ + item by matching desired text in it's name and description. If more than one valid object is found nearby, it will choose one of them at \ random. The second pin is a radius." inputs = list("desired type" = IC_PINTYPE_ANY, "radius" = IC_PINTYPE_NUMBER) outputs = list("located ref") @@ -462,10 +505,10 @@ /obj/item/integrated_circuit/input/signaler name = "integrated signaler" - desc = "Signals from a signaler can be received with this, allowing for remote control. Additionally, it can send signals as well." - extended_desc = "When a signal is received from another signaler, the 'on signal received' activator pin will be pulsed. \ - The two input pins are to configure the integrated signaler's settings. Note that the frequency should not have a decimal in it. \ - Meaning the default frequency is expressed as 1457, not 145.7. To send a signal, pulse the 'send signal' activator pin." + desc = "Signals from a signaler can be received with this, allowing for remote control. Additionally, it can send signals as well." + extended_desc = "When a signal is received from another signaler, the 'on signal received' activator pin will be pulsed. \ + The two input pins are to configure the integrated signaler's settings. Note that the frequency should not have a decimal in it, \ + meaning the default frequency is expressed as 1457, not 145.7. To send a signal, pulse the 'send signal' activator pin." icon_state = "signal" complexity = 4 inputs = list("frequency" = IC_PINTYPE_NUMBER,"code" = IC_PINTYPE_NUMBER) @@ -478,8 +521,8 @@ power_draw_idle = 5 power_draw_per_use = 40 - var/frequency = 1457 - var/code = 30 + var/frequency = FREQ_SIGNALER + var/code = DEFAULT_SIGNALER_CODE var/datum/radio_frequency/radio_connection /obj/item/integrated_circuit/input/signaler/Initialize() @@ -509,24 +552,16 @@ if(!radio_connection) return - var/datum/signal/signal = new - signal.source = src - signal.encryption = code - signal.data["message"] = "ACTIVATE" + var/datum/signal/signal = new(list("code" = code)) radio_connection.post_signal(src, signal) - activate_pin(2) /obj/item/integrated_circuit/input/signaler/proc/set_frequency(new_frequency) if(!frequency) return - if(!SSradio) - sleep(20) - if(!SSradio) - return SSradio.remove_object(src, frequency) frequency = new_frequency - radio_connection = SSradio.add_object(src, frequency, GLOB.RADIO_CHAT) + radio_connection = SSradio.add_object(src, frequency, RADIO_SIGNALER) /obj/item/integrated_circuit/input/signaler/receive_signal(datum/signal/signal) var/new_code = get_pin_data(IC_INPUT, 2) @@ -536,7 +571,7 @@ code = new_code if(!signal) return 0 - if(signal.encryption != code) + if(signal.data["code"] != code) return 0 if(signal.source == src) // Don't trigger ourselves. return 0 @@ -548,10 +583,10 @@ /obj/item/integrated_circuit/input/ntnet_packet name = "NTNet networking circuit" - desc = "Enables the sending and receiving of messages on NTNet with packet data protocol." - extended_desc = "Data can be send or received using the \ - second pin on each side, with additonal data reserved for the third pin. When a message is received, the second activation pin \ - will pulse whatever's connected to it. Pulsing the first activation pin will send a message." + desc = "Enables the sending and receiving of messages on NTNet via packet data protocol." + extended_desc = "Data can be send or received using the second pin on each side, \ + with additonal data reserved for the third pin. When a message is received, the second activation pin \ + will pulse whatever's connected to it. Pulsing the first activation pin will send a message." icon_state = "signal" complexity = 4 inputs = list( @@ -630,7 +665,7 @@ /obj/item/integrated_circuit/input/microphone name = "microphone" desc = "Useful for spying on people or for voice activated machines." - extended_desc = "This will automatically translate most languages it hears to Galactic Common. \ + extended_desc = "This will automatically translate most languages it hears to Galactic Common. \ The first activation pin is always pulsed when the circuit hears someone talk, while the second one \ is only triggered if it hears someone speaking a language other than Galactic Common." icon_state = "recorder" @@ -661,8 +696,8 @@ /obj/item/integrated_circuit/input/sensor name = "sensor" - desc = "Scans and obtains a reference for any objects or persons near you. All you need to do is shove the machine in their face." - extended_desc = "If 'ignore storage' pin is set to true, the sensor will disregard scanning various storage containers such as backpacks." + desc = "Scans and obtains a reference for any objects or persons near you. All you need to do is shove the machine in their face." + extended_desc = "If the 'ignore storage' pin is set to true, the sensor will disregard scanning various storage containers such as backpacks." icon_state = "recorder" complexity = 12 inputs = list("ignore storage" = IC_PINTYPE_BOOLEAN) @@ -671,12 +706,15 @@ spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH power_draw_per_use = 120 -/obj/item/integrated_circuit/input/sensor/proc/scan(var/atom/A) +/obj/item/integrated_circuit/input/sensor/sense(var/atom/A,mob/user,prox) + if(!prox) + return FALSE + if(!check_then_do_work()) + return FALSE var/ignore_bags = get_pin_data(IC_INPUT, 1) if(ignore_bags) if(istype(A, /obj/item/storage)) return FALSE - set_pin_data(IC_OUTPUT, 1, WEAKREF(A)) push_data() activate_pin(1) @@ -684,8 +722,8 @@ /obj/item/integrated_circuit/input/sensor/ranged name = "ranged sensor" - desc = "Scans and obtains a reference for any objects or persons in range. All you need to do is point the machine towards target." - extended_desc = "If 'ignore storage' pin is set to true, the sensor will disregard scanning various storage containers such as backpacks." + desc = "Scans and obtains a reference for any objects or persons in range. All you need to do is point the machine towards the target." + extended_desc = "If the 'ignore storage' pin is set to true, the sensor will disregard scanning various storage containers such as backpacks." icon_state = "recorder" complexity = 36 inputs = list("ignore storage" = IC_PINTYPE_BOOLEAN) @@ -694,11 +732,57 @@ spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH power_draw_per_use = 120 +/obj/item/integrated_circuit/input/sensor/ranged/sense(var/atom/A,mob/user) + if(!user) + return FALSE + if(user.client) + if(!(A in view(user.client))) + return FALSE + else + if(!(A in view(user))) + return FALSE + if(!check_then_do_work()) + return FALSE + var/ignore_bags = get_pin_data(IC_INPUT, 1) + if(ignore_bags) + if(istype(A, /obj/item/storage)) + return FALSE + set_pin_data(IC_OUTPUT, 1, WEAKREF(A)) + push_data() + activate_pin(1) + return TRUE + +/obj/item/integrated_circuit/input/objscaner + name = "scanner" + desc = "Scans and obtains a reference for any objects you use on the assembly." + extended_desc = "If the 'put down' pin is set to true, the assembly will take the scanned object from your hands to it's location. \ + Useful for interaction with the grabber. The scanner only works using the help intent." + icon_state = "recorder" + complexity = 4 + inputs = list("put down" = IC_PINTYPE_BOOLEAN) + outputs = list("scanned" = IC_PINTYPE_REF) + activators = list("on scanned" = IC_PINTYPE_PULSE_OUT) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + power_draw_per_use = 20 + +/obj/item/integrated_circuit/input/objscaner/attackby_react(var/atom/A,var/mob/user,intent) + if(intent!=INTENT_HELP) + return FALSE + if(!check_then_do_work()) + return FALSE + var/pu = get_pin_data(IC_INPUT, 1) + if(pu) + user.transferItemToLoc(A,drop_location()) + set_pin_data(IC_OUTPUT, 1, WEAKREF(A)) + push_data() + activate_pin(1) + return TRUE + /obj/item/integrated_circuit/input/internalbm name = "internal battery monitor" desc = "This monitors the charge level of an internal battery." icon_state = "internalbm" - extended_desc = "This circuit will give you values of charge, max charge and percentage of the internal battery on demand." + extended_desc = "This circuit will give you values of charge, max charge, and percentage of the internal battery on demand." w_class = WEIGHT_CLASS_TINY complexity = 1 inputs = list() @@ -730,7 +814,7 @@ name = "external battery monitor" desc = "This can help to watch battery state of any device in view" icon_state = "externalbm" - extended_desc = "This circuit will give you values of charge, max charge and percentage of any device or battery in view" + extended_desc = "This circuit will give you values of charge, max charge, and percentage of any device or battery in view" w_class = WEIGHT_CLASS_TINY complexity = 2 inputs = list("target" = IC_PINTYPE_REF) @@ -760,3 +844,38 @@ activate_pin(2) push_data() return + +/obj/item/integrated_circuit/input/ntnetsc + name = "NTnet scaner" + desc = "This can return NTnet IDs of a component inside the given object, if there are any." + icon_state = "signalsc" + w_class = WEIGHT_CLASS_TINY + complexity = 2 + inputs = list("target" = IC_PINTYPE_REF) + outputs = list( + "id" = IC_PINTYPE_STRING + ) + activators = list("read" = IC_PINTYPE_PULSE_IN, "found" = IC_PINTYPE_PULSE_OUT,"not found" = IC_PINTYPE_PULSE_OUT) + spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH + power_draw_per_use = 1 + +/obj/item/integrated_circuit/input/ntnetsc/do_work() + + var/atom/AM = get_pin_data_as_type(IC_INPUT, 1, /atom) + var/list/processing_list = list(AM) + var/datum/component/ntnet_interface/net = null + set_pin_data(IC_OUTPUT, 1, null) + while(processing_list.len && !net) + var/atom/A = processing_list[1] + processing_list.Cut(1, 2) + //Byond does not allow things to be in multiple contents, or double parent-child hierarchies, so only += is needed + //This is also why we don't need to check against assembled as we go along + processing_list += A.contents + net = A.GetComponent(/datum/component/ntnet_interface) + if(net) + set_pin_data(IC_OUTPUT, 1, net.hardware_id) + activate_pin(2) + else + activate_pin(3) + push_data() + return diff --git a/code/modules/integrated_electronics/subtypes/logic.dm b/code/modules/integrated_electronics/subtypes/logic.dm index 627301ef10..f8e858ef94 100644 --- a/code/modules/integrated_electronics/subtypes/logic.dm +++ b/code/modules/integrated_electronics/subtypes/logic.dm @@ -2,7 +2,7 @@ name = "logic gate" desc = "This tiny chip will decide for you!" extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE." - complexity = 3 + complexity = 1 outputs = list("result") activators = list("compare" = IC_PINTYPE_PULSE_IN) category_text = "Logic" diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index f32f414fbb..028c021a88 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -4,10 +4,10 @@ /obj/item/integrated_circuit/manipulation/weapon_firing name = "weapon firing mechanism" desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it." - extended_desc = "The firing mechanism can slot in any energy weapon. \ - The first and second inputs need to be numbers. They are coordinates for the gun to fire at, relative to the machine itself. \ - The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode is switch between \ - lethal (TRUE) or stun (FALSE) modes.It uses internal battery of weapon." + extended_desc = "The firing mechanism can slot in any energy weapon. \ + The first and second inputs need to be numbers which correspond to coordinates for the gun to fire at relative to the machine itself. \ + The 'fire' activator will cause the mechanism to attempt to fire the weapon at the coordinates, if possible. Mode is switch between \ + lethal (TRUE) or stun (FALSE) modes. It uses the internal battery of the weapon." complexity = 20 w_class = WEIGHT_CLASS_SMALL size = 3 @@ -135,7 +135,7 @@ icon_state = "locomotion" extended_desc = "The circuit accepts a 'dir' number as a direction to move towards.
    \ Pulsing the 'step towards dir' activator pin will cause the machine to move a meter in that direction, assuming it is not \ - being held, or anchored in some way. It should be noted that the ability to move is dependant on the type of assembly that this circuit inhabits." + being held, or anchored in some way. It should be noted that the ability to move is dependant on the type of assembly that this circuit inhabits." w_class = WEIGHT_CLASS_SMALL complexity = 20 inputs = list("direction" = IC_PINTYPE_DIR) @@ -155,9 +155,11 @@ if(isnum(wanted_dir.data)) if(step(assembly, wanted_dir.data)) activate_pin(2) + return else activate_pin(3) return FALSE + return FALSE /obj/item/integrated_circuit/manipulation/grenade name = "grenade primer" @@ -234,7 +236,7 @@ name = "plant manipulation module" desc = "Used to uproot weeds or harvest plants in trays." icon_state = "plant_m" - extended_desc = "The circuit accepts a reference to hydroponic tray. It work from adjacent tiles. \ + extended_desc = "The circuit accepts a reference to a hydroponic tray in an adjacent tile. \ Mode(0- harvest, 1-uproot weeds, 2-uproot plant) determinies action." w_class = WEIGHT_CLASS_TINY complexity = 10 @@ -247,9 +249,14 @@ /obj/item/integrated_circuit/manipulation/plant_module/do_work() ..() var/turf/T = get_turf(src) - var/obj/machinery/hydroponics/AM = get_pin_data_as_type(IC_INPUT, 1, /obj/machinery/hydroponics) - if(!istype(AM)) //Invalid input + var/obj/OM = get_pin_data_as_type(IC_INPUT, 1, /obj) + if(istype(OM,/obj/structure/spacevine) && get_pin_data(IC_INPUT, 2) == 2) + qdel(OM) + activate_pin(2) return + var/obj/machinery/hydroponics/AM = OM + if(!istype(AM)) //Invalid input + return FALSE var/mob/living/M = get_turf(AM) if(!M.Adjacent(T)) return //Can't reach @@ -276,6 +283,7 @@ qdel(AM.myseed) AM.myseed = null AM.weedlevel = 0 //Has a side effect of cleaning up those nasty weeds + AM.dead = 0 AM.update_icon() else activate_pin(2) @@ -284,7 +292,7 @@ /obj/item/integrated_circuit/manipulation/grabber name = "grabber" - desc = "A circuit with it's own inventory for small/medium items, used to grab and store things." + desc = "A circuit with it's own inventory for tiny/small items, used to grab and store things." icon_state = "grabber" extended_desc = "The circuit accepts a reference to thing to be grabbed. It can store up to 10 things. Modes: 1 for grab. 0 for eject the first thing. -1 for eject all." w_class = WEIGHT_CLASS_SMALL @@ -307,7 +315,7 @@ var/mode = get_pin_data(IC_INPUT, 2) if(mode == 1) - if(check_target(AM, exclude_contents = TRUE)) + if(check_target(AM)) if((contents.len < max_items) && (!max_w_class || AM.w_class <= max_w_class)) AM.forceMove(src) if(mode == 0) @@ -345,9 +353,9 @@ /obj/item/integrated_circuit/manipulation/thrower name = "thrower" desc = "A compact launcher to throw things from inside or nearby tiles." - extended_desc = "The first and second inputs need to be numbers. They are coordinates to throw thing at, relative to the machine itself. \ - The 'fire' activator will cause the mechanism to attempt to throw thing at the coordinates, if possible. Note that the \ - projectile need to be inside the machine, or to be on an adjacent tile, and to be up to medium size." + extended_desc = "The first and second inputs need to be numbers which correspond to coordinates to throw objects at relative to the machine itself. \ + The 'fire' activator will cause the mechanism to attempt to throw objects at the coordinates, if possible. Note that the \ + projectile need to be inside the machine, or to be on an adjacent tile, and must be medium sized or smaller." complexity = 15 w_class = WEIGHT_CLASS_SMALL size = 2 diff --git a/code/modules/integrated_electronics/subtypes/power.dm b/code/modules/integrated_electronics/subtypes/power.dm index de9055acfa..872f70a20f 100644 --- a/code/modules/integrated_electronics/subtypes/power.dm +++ b/code/modules/integrated_electronics/subtypes/power.dm @@ -6,8 +6,8 @@ desc = "This can wirelessly transmit electricity from an assembly's battery towards a nearby machine." icon_state = "power_transmitter" extended_desc = "This circuit transmits 5 kJ of electricity every time the activator pin is pulsed. The input pin must be \ - a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ - inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ + a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ + inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ some power is lost due to ineffiency." w_class = WEIGHT_CLASS_SMALL complexity = 16 @@ -24,10 +24,10 @@ /obj/item/integrated_circuit/power/transmitter/large name = "large power transmission circuit" - desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable enviroments." + desc = "This can wirelessly transmit a lot of electricity from an assembly's battery towards a nearby machine. Warning: Do not operate in flammable enviroments." extended_desc = "This circuit transmits 20 kJ of electricity every time the activator pin is pulsed. The input pin must be \ - a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ - inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ + a reference to a machine to send electricity to. This can be a battery, or anything containing a battery. The machine can exist \ + inside the assembly, or adjacent to it. The power is sourced from the assembly's power cell. If the target is outside of the assembly, \ some power is lost due to ineffiency." w_class = WEIGHT_CLASS_BULKY complexity = 32 diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 33f92c3646..2a97ab1732 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -9,13 +9,18 @@ . = ..() if(volume) create_reagents(volume) + push_vol() + +/obj/item/integrated_circuit/reagent/proc/push_vol() + set_pin_data(IC_OUTPUT, 1, reagents.total_volume) + push_data() /obj/item/integrated_circuit/reagent/smoke name = "smoke generator" desc = "Unlike most electronics, creating smoke is completely intentional." icon_state = "smoke" - extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \ - into the smoke clouds when activated. The reagents are consumed when smoke is made." + extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \ + into the smoke clouds when activated. The reagents are consumed when smoke is made." container_type = OPENCONTAINER volume = 100 @@ -29,7 +34,8 @@ ) activators = list( "create smoke" = IC_PINTYPE_PULSE_IN, - "on smoked" = IC_PINTYPE_PULSE_OUT + "on smoked" = IC_PINTYPE_PULSE_OUT, + "push ref" = IC_PINTYPE_PULSE_IN ) spawn_flags = IC_SPAWN_RESEARCH power_draw_per_use = 20 @@ -40,30 +46,33 @@ //reset warning only if we have reagents now if(changetype == ADD_REAGENT) notified = FALSE - set_pin_data(IC_OUTPUT, 1, reagents.total_volume) - push_data() + push_vol() -/obj/item/integrated_circuit/reagent/smoke/do_work() - if(!reagents || (reagents.total_volume < IC_SMOKE_REAGENTS_MINIMUM_UNITS)) - return - var/location = get_turf(src) - var/datum/effect_system/smoke_spread/chem/S = new - S.attach(location) - playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) - if(S) - S.set_up(reagents, smoke_radius, location, notified) - if(!notified) - notified = TRUE - S.start() - - reagents.clear_reagents() - activate_pin(2) +/obj/item/integrated_circuit/reagent/smoke/do_work(ord) + switch(ord) + if(1) + if(!reagents || (reagents.total_volume < IC_SMOKE_REAGENTS_MINIMUM_UNITS)) + return + var/location = get_turf(src) + var/datum/effect_system/smoke_spread/chem/S = new + S.attach(location) + playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3) + if(S) + S.set_up(reagents, smoke_radius, location, notified) + if(!notified) + notified = TRUE + S.start() + reagents.clear_reagents() + activate_pin(2) + if(3) + set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) + push_data() /obj/item/integrated_circuit/reagent/injector name = "integrated hypo-injector" desc = "This scary looking thing is able to pump liquids into whatever it's pointed at." icon_state = "injector" - extended_desc = "This autoinjector can push reagents into another container or someone else outside of the machine. The target \ + extended_desc = "This autoinjector can push reagents into another container or someone else outside of the machine. The target \ must be adjacent to the machine, and if it is a person, they cannot be wearing thick clothing. Negative given amount makes injector suck out reagents." container_type = OPENCONTAINER @@ -85,7 +94,9 @@ activators = list( "inject" = IC_PINTYPE_PULSE_IN, "on injected" = IC_PINTYPE_PULSE_OUT, - "on fail" = IC_PINTYPE_PULSE_OUT + "on fail" = IC_PINTYPE_PULSE_OUT, + "push ref" = IC_PINTYPE_PULSE_IN + ) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH power_draw_per_use = 15 @@ -93,15 +104,8 @@ var/transfer_amount = 10 var/busy = FALSE -/obj/item/integrated_circuit/reagent/injector/interact(mob/user) - set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) - push_data() - ..() - - /obj/item/integrated_circuit/reagent/injector/on_reagent_change(changetype) - set_pin_data(IC_OUTPUT, 1, reagents.total_volume) - push_data() + push_vol() /obj/item/integrated_circuit/reagent/injector/on_data_written() var/new_amount = get_pin_data(IC_INPUT, 2) @@ -127,7 +131,15 @@ temp_reagents.clear_reagents() qdel(temp_reagents) -/obj/item/integrated_circuit/reagent/injector/do_work() +/obj/item/integrated_circuit/reagent/injector/do_work(ord) + switch(ord) + if(1) + inject() + if(4) + set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) + push_data() + +/obj/item/integrated_circuit/reagent/injector/proc/inject() set waitfor = FALSE // Don't sleep in a proc that is called by a processor without this set, otherwise it'll delay the entire thing var/atom/movable/AM = get_pin_data_as_type(IC_INPUT, 1, /atom/movable) var/atom/movable/acting_object = get_object() @@ -210,7 +222,7 @@ name = "reagent pump" desc = "Moves liquids safely inside a machine, or even nearby it." icon_state = "reagent_pump" - extended_desc = "This is a pump, which will move liquids from the source ref to the target ref. The third pin determines \ + extended_desc = "This is a pump which will move liquids from the source ref to the target ref. The third pin determines \ how much liquid is moved per pulse, between 0 and 50. The pump can move reagents to any open container inside the machine, or \ outside the machine if it is next to the machine." @@ -268,7 +280,7 @@ /obj/item/integrated_circuit/reagent/storage name = "reagent storage" - desc = "Stores liquid inside, and away from electrical components. Can store up to 60u." + desc = "Stores liquid inside the device away from electrical components. It can store up to 60u." icon_state = "reagent_storage" extended_desc = "This is effectively an internal beaker." @@ -281,21 +293,31 @@ "volume used" = IC_PINTYPE_NUMBER, "self reference" = IC_PINTYPE_REF ) - activators = list() + activators = list("push ref" = IC_PINTYPE_PULSE_OUT) spawn_flags = IC_SPAWN_DEFAULT|IC_SPAWN_RESEARCH -/obj/item/integrated_circuit/reagent/storage/interact(mob/user) + + +/obj/item/integrated_circuit/reagent/storage/do_work() set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) push_data() - ..() /obj/item/integrated_circuit/reagent/storage/on_reagent_change(changetype) - set_pin_data(IC_OUTPUT, 1, reagents.total_volume) - push_data() + push_vol() + +/obj/item/integrated_circuit/reagent/storage/big + name = "big reagent storage" + icon_state = "reagent_storage_big" + desc = "Stores liquid inside the device away from electrical components. Can store up to 180u." + + volume = 180 + + complexity = 16 + spawn_flags = IC_SPAWN_RESEARCH /obj/item/integrated_circuit/reagent/storage/cryo name = "cryo reagent storage" - desc = "Stores liquid inside, and away from electrical components. Can store up to 60u. This will also suppress reactions." + desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. This will also suppress reactions." icon_state = "reagent_storage_cryo" extended_desc = "This is effectively an internal cryo beaker." @@ -306,20 +328,102 @@ . = ..() reagents.set_reacting(FALSE) -/obj/item/integrated_circuit/reagent/storage/big - name = "big reagent storage" - desc = "Stores liquid inside, and away from electrical components. Can store up to 180u." - icon_state = "reagent_storage_big" - extended_desc = "This is effectively an internal beaker." - - volume = 180 - +/obj/item/integrated_circuit/reagent/storage/grinder + name = "reagent grinder" + desc = "This is reagent grinder. It accepts a ref to something and refines it into reagents. It can store up to 100u." + icon_state = "blender" + extended_desc = "" + inputs = list( + "target" = IC_PINTYPE_REF, + ) + outputs = list( + "volume used" = IC_PINTYPE_NUMBER, + "self reference" = IC_PINTYPE_REF + ) + activators = list( + "grind" = IC_PINTYPE_PULSE_IN, + "on grind" = IC_PINTYPE_PULSE_OUT, + "on fail" = IC_PINTYPE_PULSE_OUT, + "push ref" = IC_PINTYPE_PULSE_IN + ) + volume = 100 + power_draw_per_use = 150 complexity = 16 spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/reagent/storage/grinder/do_work(ord) + switch(ord) + if(1) + grind() + if(4) + set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) + push_data() + +/obj/item/integrated_circuit/reagent/storage/grinder/proc/grind() + if(reagents.total_volume >= reagents.maximum_volume) + activate_pin(3) + return FALSE + var/obj/item/I = get_pin_data_as_type(IC_INPUT, 1, /obj/item) + if(istype(I)&&(I.grind_results)&&check_target(I)&&(I.on_grind(src) != -1)) + reagents.add_reagent_list(I.grind_results) + if(I.reagents) + I.reagents.trans_to(src, I.reagents.total_volume) + qdel(I) + activate_pin(2) + return TRUE + activate_pin(3) + return FALSE + +obj/item/integrated_circuit/reagent/storage/juicer + name = "reagent juicer" + desc = "This is reagent juicer. It accepts a ref to something and refines it into reagents. It can store up to 100u." + icon_state = "blender" + extended_desc = "" + inputs = list( + "target" = IC_PINTYPE_REF, + ) + outputs = list( + "volume used" = IC_PINTYPE_NUMBER, + "self reference" = IC_PINTYPE_REF + ) + activators = list( + "juice" = IC_PINTYPE_PULSE_IN, + "on juice" = IC_PINTYPE_PULSE_OUT, + "on fail" = IC_PINTYPE_PULSE_OUT, + "push ref" = IC_PINTYPE_PULSE_IN + ) + volume = 100 + power_draw_per_use = 150 + complexity = 16 + spawn_flags = IC_SPAWN_RESEARCH + +/obj/item/integrated_circuit/reagent/storage/juicer/do_work(ord) + switch(ord) + if(1) + juice() + if(4) + set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) + push_data() + +/obj/item/integrated_circuit/reagent/storage/juicer/proc/juice() + if(reagents.total_volume >= reagents.maximum_volume) + activate_pin(3) + return FALSE + var/obj/item/I = get_pin_data_as_type(IC_INPUT, 1, /obj/item) + if(istype(I)&&check_target(I)&&(I.juice_results)&&(I.on_juice() != -1)) + reagents.add_reagent_list(I.juice_results) + qdel(I) + activate_pin(2) + return TRUE + activate_pin(3) + return FALSE + + + /obj/item/integrated_circuit/reagent/storage/scan name = "reagent scanner" - desc = "Stores liquid inside, and away from electrical components. Can store up to 60u. On pulse this beaker will send list of contained reagents." + desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. On pulse this beaker will send list of contained reagents." icon_state = "reagent_scan" extended_desc = "Mostly useful for reagent filter." @@ -330,25 +434,30 @@ "list of reagents" = IC_PINTYPE_LIST ) activators = list( - "scan" = IC_PINTYPE_PULSE_IN + "scan" = IC_PINTYPE_PULSE_IN, + "push ref" = IC_PINTYPE_PULSE_IN ) spawn_flags = IC_SPAWN_RESEARCH -/obj/item/integrated_circuit/reagent/storage/scan/do_work() - var/cont[0] - for(var/datum/reagent/RE in reagents.reagent_list) - cont += RE.id - set_pin_data(IC_OUTPUT, 3, cont) - push_data() - +/obj/item/integrated_circuit/reagent/storage/scan/do_work(ord) + switch(ord) + if(1) + var/cont[0] + for(var/datum/reagent/RE in reagents.reagent_list) + cont += RE.id + set_pin_data(IC_OUTPUT, 3, cont) + push_data() + if(2) + set_pin_data(IC_OUTPUT, 2, WEAKREF(src)) + push_data() /obj/item/integrated_circuit/reagent/filter name = "reagent filter" desc = "Filtering liquids by list of desired or unwanted reagents." icon_state = "reagent_filter" - extended_desc = "This is a filter, which will move liquids from the source to the target. \ - It will move all reagents, except list, given in fourth pin if amount value is positive.\ - Or it will move only desired reagents if amount is negative, The third pin determines \ + extended_desc = "This is a filter which will move liquids from the source to the target. \ + It will move all reagents, except those in the unwanted list, given the fourth pin if amount value is positive, \ + or it will move only desired reagents if amount is negative. The third pin determines \ how much reagent is moved per pulse, between 0 and 50. Amount is given for each separate reagent." complexity = 8 @@ -394,7 +503,8 @@ if(!source.reagents || !target.reagents) return - if(!source.is_drainable() || !target.is_refillable()) + // FALSE in those procs makes mobs invalid targets. + if(!source.is_drawable(FALSE) || !target.is_injectable(FALSE)) return if(target.reagents.maximum_volume - target.reagents.total_volume <= 0) @@ -410,3 +520,45 @@ activate_pin(2) push_data() +/obj/item/integrated_circuit/reagent/storage/heater + name = "chemical heater" + desc = "Stores liquid inside the device away from electrical components. It can store up to 60u. It will heat or cool the reagents \ + to the target temperature when turned on." + icon_state = "heater" + container_type = OPENCONTAINER + complexity = 8 + inputs = list( + "target temperature" = IC_PINTYPE_NUMBER, + "on" = IC_PINTYPE_BOOLEAN + ) + inputs_default = list("1" = 300) + outputs = list("volume used" = IC_PINTYPE_NUMBER,"self reference" = IC_PINTYPE_REF,"temperature" = IC_PINTYPE_NUMBER) + spawn_flags = IC_SPAWN_RESEARCH + var/heater_coefficient = 0.1 + +/obj/item/integrated_circuit/reagent/storage/heater/on_data_written() + if(get_pin_data(IC_INPUT, 2)) + power_draw_idle = 30 + else + power_draw_idle = 0 + +/obj/item/integrated_circuit/reagent/storage/heater/Initialize() + .=..() + START_PROCESSING(SScircuit, src) + +/obj/item/integrated_circuit/reagent/storage/heater/Destroy() + STOP_PROCESSING(SScircuit, src) + return ..() + +/obj/item/integrated_circuit/reagent/storage/heater/process() + if(power_draw_idle) + var/target_temperature = get_pin_data(IC_INPUT, 1) + if(reagents.chem_temp > target_temperature) + reagents.chem_temp += min(-1, (target_temperature - reagents.chem_temp) * heater_coefficient) + if(reagents.chem_temp < target_temperature) + reagents.chem_temp += max(1, (target_temperature - reagents.chem_temp) * heater_coefficient) + + reagents.chem_temp = round(reagents.chem_temp) + reagents.handle_reactions() + set_pin_data(IC_OUTPUT, 3, reagents.chem_temp) + push_data() diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index ec59c3cab1..dc47290545 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -4,7 +4,7 @@ /obj/item/integrated_circuit/smart/basic_pathfinder name = "basic pathfinder" desc = "This complex circuit is able to determine what direction a given target is." - extended_desc = "This circuit uses a miniturized, integrated camera to determine where the target is. If the machine \ + extended_desc = "This circuit uses a miniturized integrated camera to determine where the target is. If the machine \ cannot see the target, it will not be able to calculate the correct direction." icon_state = "numberpad" complexity = 25 @@ -27,6 +27,6 @@ push_data() return // Can't see the target. - set_pin_data(IC_OUTPUT, 1, get_dir(get_turf(src), get_turf(A))) + set_pin_data(IC_OUTPUT, 1, get_dir(get_turf(src), get_step_towards2(get_turf(src),A))) push_data() activate_pin(2) diff --git a/code/modules/jobs/job_exp.dm b/code/modules/jobs/job_exp.dm index 220fa2e9ac..a16f2ae163 100644 --- a/code/modules/jobs/job_exp.dm +++ b/code/modules/jobs/job_exp.dm @@ -132,7 +132,7 @@ GLOBAL_PROTECT(exp_to_update) for(var/client/L in GLOB.clients) if(L.is_afk()) continue - addtimer(CALLBACK(L,/client/proc/update_exp_list,mins,ann),10) + L.update_exp_list(mins,ann) /datum/controller/subsystem/blackbox/proc/update_exp_db() SSdbcore.MassInsert(format_table_name("role_time"),GLOB.exp_to_update,TRUE) @@ -263,4 +263,4 @@ GLOBAL_PROTECT(exp_to_update) prefs.db_flags = text2num(flags_read.item[1]) else if(isnull(prefs.db_flags)) prefs.db_flags = 0 //This PROBABLY won't happen, but better safe than sorry. - return TRUE + return TRUE \ No newline at end of file diff --git a/code/modules/jobs/job_types/captain.dm b/code/modules/jobs/job_types/captain.dm index 03498f1e7b..38418e9916 100755 --- a/code/modules/jobs/job_types/captain.dm +++ b/code/modules/jobs/job_types/captain.dm @@ -1,77 +1,77 @@ -/* -Captain -*/ -/datum/job/captain - title = "Captain" - flag = CAPTAIN +/* +Captain +*/ +/datum/job/captain + title = "Captain" + flag = CAPTAIN department_head = list("CentCom") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "Nanotrasen officials and Space law" - selection_color = "#ccccff" - req_admin_notify = 1 - minimal_player_age = 14 + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "Nanotrasen officials and Space law" + selection_color = "#ccccff" + req_admin_notify = 1 + minimal_player_age = 14 exp_requirements = 180 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/captain - - access = list() //See get_access() - minimal_access = list() //See get_access() - -/datum/job/captain/get_access() - return get_all_accesses() - -/datum/job/captain/announce(mob/living/carbon/human/H) - ..() - SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!")) - -/datum/outfit/job/captain - name = "Captain" - jobtype = /datum/job/captain - - id = /obj/item/card/id/gold - belt = /obj/item/device/pda/captain - glasses = /obj/item/clothing/glasses/sunglasses - ears = /obj/item/device/radio/headset/heads/captain/alt - gloves = /obj/item/clothing/gloves/color/captain - uniform = /obj/item/clothing/under/rank/captain - suit = /obj/item/clothing/suit/armor/vest/capcarapace - shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/caphat - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1) - - backpack = /obj/item/storage/backpack/captain - satchel = /obj/item/storage/backpack/satchel/cap - duffelbag = /obj/item/storage/backpack/duffelbag/captain - - implants = list(/obj/item/implant/mindshield) - accessory = /obj/item/clothing/accessory/medal/gold/captain - -/* -Head of Personnel -*/ -/datum/job/hop - title = "Head of Personnel" - flag = HOP - department_head = list("Captain") - department_flag = CIVILIAN - head_announce = list("Supply", "Service") - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ddddff" - req_admin_notify = 1 - minimal_player_age = 10 + + outfit = /datum/outfit/job/captain + + access = list() //See get_access() + minimal_access = list() //See get_access() + +/datum/job/captain/get_access() + return get_all_accesses() + +/datum/job/captain/announce(mob/living/carbon/human/H) + ..() + SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!")) + +/datum/outfit/job/captain + name = "Captain" + jobtype = /datum/job/captain + + id = /obj/item/card/id/gold + belt = /obj/item/device/pda/captain + glasses = /obj/item/clothing/glasses/sunglasses + ears = /obj/item/device/radio/headset/heads/captain/alt + gloves = /obj/item/clothing/gloves/color/captain + uniform = /obj/item/clothing/under/rank/captain + suit = /obj/item/clothing/suit/armor/vest/capcarapace + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/caphat + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/station_charter=1) + + backpack = /obj/item/storage/backpack/captain + satchel = /obj/item/storage/backpack/satchel/cap + duffelbag = /obj/item/storage/backpack/duffelbag/captain + + implants = list(/obj/item/implant/mindshield) + accessory = /obj/item/clothing/accessory/medal/gold/captain + +/* +Head of Personnel +*/ +/datum/job/hop + title = "Head of Personnel" + flag = HOP + department_head = list("Captain") + department_flag = CIVILIAN + head_announce = list("Supply", "Service") + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#ddddff" + req_admin_notify = 1 + minimal_player_age = 10 exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SUPPLY - - outfit = /datum/outfit/job/hop - + + outfit = /datum/outfit/job/hop + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_AI_UPLOAD, ACCESS_EVA, ACCESS_HEADS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, @@ -84,17 +84,17 @@ Head of Personnel ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM) - - -/datum/outfit/job/hop - name = "Head of Personnel" - jobtype = /datum/job/hop - - id = /obj/item/card/id/silver - belt = /obj/item/device/pda/heads/hop - ears = /obj/item/device/radio/headset/heads/hop - uniform = /obj/item/clothing/under/rank/head_of_personnel - shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/hopcap - backpack_contents = list(/obj/item/storage/box/ids=1,\ - /obj/item/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced = 1) + + +/datum/outfit/job/hop + name = "Head of Personnel" + jobtype = /datum/job/hop + + id = /obj/item/card/id/silver + belt = /obj/item/device/pda/heads/hop + ears = /obj/item/device/radio/headset/heads/hop + uniform = /obj/item/clothing/under/rank/head_of_personnel + shoes = /obj/item/clothing/shoes/sneakers/brown + head = /obj/item/clothing/head/hopcap + backpack_contents = list(/obj/item/storage/box/ids=1,\ + /obj/item/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced = 1) diff --git a/code/modules/jobs/job_types/job.dm b/code/modules/jobs/job_types/job.dm index 2e18807541..6720c28710 100644 --- a/code/modules/jobs/job_types/job.dm +++ b/code/modules/jobs/job_types/job.dm @@ -72,14 +72,15 @@ H.dna.species.after_equip_job(src, H, visualsOnly) + if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) + if(H.dna.species.id != "human") + H.set_species(/datum/species/human) + H.rename_self("human", H.client) + purrbation_remove(H, silent=TRUE) + if(!visualsOnly && announce) announce(H) - if(CONFIG_GET(flag/enforce_human_authority) && (title in GLOB.command_positions)) - H.dna.features["tail_human"] = "None" - H.dna.features["ears"] = "None" - H.regenerate_icons() - /datum/job/proc/get_access() if(!config) //Needed for robots. return src.minimal_access.Copy() diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm index 9a33e1e759..151ed213f8 100644 --- a/code/modules/jobs/job_types/medical.dm +++ b/code/modules/jobs/job_types/medical.dm @@ -1,191 +1,191 @@ -/* -Chief Medical Officer -*/ -/datum/job/cmo - title = "Chief Medical Officer" - flag = CMO_JF - department_head = list("Captain") - department_flag = MEDSCI - head_announce = list("Medical") - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffddf0" - req_admin_notify = 1 - minimal_player_age = 7 +/* +Chief Medical Officer +*/ +/datum/job/cmo + title = "Chief Medical Officer" + flag = CMO_JF + department_head = list("Captain") + department_flag = MEDSCI + head_announce = list("Medical") + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#ffddf0" + req_admin_notify = 1 + minimal_player_age = 7 exp_requirements = 180 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_MEDICAL - - outfit = /datum/outfit/job/cmo - + + outfit = /datum/outfit/job/cmo + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_HEADS, ACCESS_MINERAL_STOREROOM, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_CMO, ACCESS_SURGERY, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_MAINT_TUNNELS) - -/datum/outfit/job/cmo - name = "Chief Medical Officer" - jobtype = /datum/job/cmo - - id = /obj/item/card/id/silver - belt = /obj/item/device/pda/heads/cmo + +/datum/outfit/job/cmo + name = "Chief Medical Officer" + jobtype = /datum/job/cmo + + id = /obj/item/card/id/silver + belt = /obj/item/device/pda/heads/cmo l_pocket = /obj/item/pinpointer/crew - ears = /obj/item/device/radio/headset/heads/cmo - uniform = /obj/item/clothing/under/rank/chief_medical_officer - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/toggle/labcoat/cmo - l_hand = /obj/item/storage/firstaid/regular - suit_store = /obj/item/device/flashlight/pen - backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) - - backpack = /obj/item/storage/backpack/medic - satchel = /obj/item/storage/backpack/satchel/med - duffelbag = /obj/item/storage/backpack/duffelbag/med - -/* -Medical Doctor -*/ -/datum/job/doctor - title = "Medical Doctor" - flag = DOCTOR - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" - - outfit = /datum/outfit/job/doctor - + ears = /obj/item/device/radio/headset/heads/cmo + uniform = /obj/item/clothing/under/rank/chief_medical_officer + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat/cmo + l_hand = /obj/item/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + +/* +Medical Doctor +*/ +/datum/job/doctor + title = "Medical Doctor" + flag = DOCTOR + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the chief medical officer" + selection_color = "#ffeef0" + + outfit = /datum/outfit/job/doctor + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CLONING) - -/datum/outfit/job/doctor - name = "Medical Doctor" - jobtype = /datum/job/doctor - - belt = /obj/item/device/pda/medical - ears = /obj/item/device/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/medical - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat - l_hand = /obj/item/storage/firstaid/regular - suit_store = /obj/item/device/flashlight/pen - - backpack = /obj/item/storage/backpack/medic - satchel = /obj/item/storage/backpack/satchel/med - duffelbag = /obj/item/storage/backpack/duffelbag/med - -/* -Chemist -*/ -/datum/job/chemist - title = "Chemist" - flag = CHEMIST - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" + +/datum/outfit/job/doctor + name = "Medical Doctor" + jobtype = /datum/job/doctor + + belt = /obj/item/device/pda/medical + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/medical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/storage/firstaid/regular + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/storage/backpack/medic + satchel = /obj/item/storage/backpack/satchel/med + duffelbag = /obj/item/storage/backpack/duffelbag/med + +/* +Chemist +*/ +/datum/job/chemist + title = "Chemist" + flag = CHEMIST + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief medical officer" + selection_color = "#ffeef0" exp_type = EXP_TYPE_CREW exp_requirements = 60 - - outfit = /datum/outfit/job/chemist - + + outfit = /datum/outfit/job/chemist + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_CHEMISTRY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/chemist - name = "Chemist" - jobtype = /datum/job/chemist - - glasses = /obj/item/clothing/glasses/science - belt = /obj/item/device/pda/chemist - ears = /obj/item/device/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/chemist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/chemist - accessory = /obj/item/clothing/accessory/pocketprotector/full - backpack = /obj/item/storage/backpack/chemistry - satchel = /obj/item/storage/backpack/satchel/chem - duffelbag = /obj/item/storage/backpack/duffelbag/med - -/* -Geneticist -*/ -/datum/job/geneticist - title = "Geneticist" - flag = GENETICIST - department_head = list("Chief Medical Officer", "Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "the chief medical officer and research director" - selection_color = "#ffeef0" + +/datum/outfit/job/chemist + name = "Chemist" + jobtype = /datum/job/chemist + + glasses = /obj/item/clothing/glasses/science + belt = /obj/item/device/pda/chemist + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/chemist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/chemist + accessory = /obj/item/clothing/accessory/pocketprotector/full + backpack = /obj/item/storage/backpack/chemistry + satchel = /obj/item/storage/backpack/satchel/chem + duffelbag = /obj/item/storage/backpack/duffelbag/med + +/* +Geneticist +*/ +/datum/job/geneticist + title = "Geneticist" + flag = GENETICIST + department_head = list("Chief Medical Officer", "Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the chief medical officer and research director" + selection_color = "#ffeef0" exp_type = EXP_TYPE_CREW exp_requirements = 60 - - outfit = /datum/outfit/job/geneticist - + + outfit = /datum/outfit/job/geneticist + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_ROBOTICS, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE) minimal_access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_RESEARCH) - -/datum/outfit/job/geneticist - name = "Geneticist" - jobtype = /datum/job/geneticist - - belt = /obj/item/device/pda/geneticist - ears = /obj/item/device/radio/headset/headset_medsci - uniform = /obj/item/clothing/under/rank/geneticist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/genetics - suit_store = /obj/item/device/flashlight/pen - - backpack = /obj/item/storage/backpack/genetics - satchel = /obj/item/storage/backpack/satchel/gen - duffelbag = /obj/item/storage/backpack/duffelbag/med - -/* -Virologist -*/ -/datum/job/virologist - title = "Virologist" - flag = VIROLOGIST - department_head = list("Chief Medical Officer") - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" + +/datum/outfit/job/geneticist + name = "Geneticist" + jobtype = /datum/job/geneticist + + belt = /obj/item/device/pda/geneticist + ears = /obj/item/device/radio/headset/headset_medsci + uniform = /obj/item/clothing/under/rank/geneticist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/genetics + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/storage/backpack/genetics + satchel = /obj/item/storage/backpack/satchel/gen + duffelbag = /obj/item/storage/backpack/duffelbag/med + +/* +Virologist +*/ +/datum/job/virologist + title = "Virologist" + flag = VIROLOGIST + department_head = list("Chief Medical Officer") + department_flag = MEDSCI + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the chief medical officer" + selection_color = "#ffeef0" exp_type = EXP_TYPE_CREW exp_requirements = 60 - - outfit = /datum/outfit/job/virologist - + + outfit = /datum/outfit/job/virologist + access = list(ACCESS_MEDICAL, ACCESS_MORGUE, ACCESS_SURGERY, ACCESS_CHEMISTRY, ACCESS_VIROLOGY, ACCESS_GENETICS, ACCESS_CLONING, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_MEDICAL, ACCESS_VIROLOGY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/virologist - name = "Virologist" - jobtype = /datum/job/virologist - - belt = /obj/item/device/pda/viro - ears = /obj/item/device/radio/headset/headset_med - uniform = /obj/item/clothing/under/rank/virologist - mask = /obj/item/clothing/mask/surgical - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/virologist - suit_store = /obj/item/device/flashlight/pen - - backpack = /obj/item/storage/backpack/virology - satchel = /obj/item/storage/backpack/satchel/vir - duffelbag = /obj/item/storage/backpack/duffelbag/med + +/datum/outfit/job/virologist + name = "Virologist" + jobtype = /datum/job/virologist + + belt = /obj/item/device/pda/viro + ears = /obj/item/device/radio/headset/headset_med + uniform = /obj/item/clothing/under/rank/virologist + mask = /obj/item/clothing/mask/surgical + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/virologist + suit_store = /obj/item/device/flashlight/pen + + backpack = /obj/item/storage/backpack/virology + satchel = /obj/item/storage/backpack/satchel/vir + duffelbag = /obj/item/storage/backpack/duffelbag/med diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm index 4eac15d9f1..7fc1dada77 100644 --- a/code/modules/jobs/job_types/science.dm +++ b/code/modules/jobs/job_types/science.dm @@ -1,25 +1,25 @@ -/* -Research Director -*/ -/datum/job/rd - title = "Research Director" - flag = RD_JF - department_head = list("Captain") - department_flag = MEDSCI - head_announce = list("Science") - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffddff" - req_admin_notify = 1 - minimal_player_age = 7 +/* +Research Director +*/ +/datum/job/rd + title = "Research Director" + flag = RD_JF + department_head = list("Captain") + department_flag = MEDSCI + head_announce = list("Science") + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#ffddff" + req_admin_notify = 1 + minimal_player_age = 7 exp_type_department = EXP_TYPE_SCIENCE exp_requirements = 180 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/rd - + + outfit = /datum/outfit/job/rd + access = list(ACCESS_RD, ACCESS_HEADS, ACCESS_TOX, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_TOX_STORAGE, ACCESS_TELEPORTER, ACCESS_SEC_DOORS, ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, @@ -30,101 +30,101 @@ Research Director ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_NETWORK) - -/datum/outfit/job/rd - name = "Research Director" - jobtype = /datum/job/rd - - id = /obj/item/card/id/silver - belt = /obj/item/device/pda/heads/rd - ears = /obj/item/device/radio/headset/heads/rd - uniform = /obj/item/clothing/under/rank/research_director - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/toggle/labcoat - l_hand = /obj/item/clipboard - l_pocket = /obj/item/device/laser_pointer - accessory = /obj/item/clothing/accessory/pocketprotector/full + +/datum/outfit/job/rd + name = "Research Director" + jobtype = /datum/job/rd + + id = /obj/item/card/id/silver + belt = /obj/item/device/pda/heads/rd + ears = /obj/item/device/radio/headset/heads/rd + uniform = /obj/item/clothing/under/rank/research_director + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/toggle/labcoat + l_hand = /obj/item/clipboard + l_pocket = /obj/item/device/laser_pointer + accessory = /obj/item/clothing/accessory/pocketprotector/full backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1, /obj/item/device/modular_computer/tablet/preset/advanced=1) - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - -/datum/outfit/job/rd/rig - name = "Research Director (Hardsuit)" - - l_hand = null - mask = /obj/item/clothing/mask/breath - suit = /obj/item/clothing/suit/space/hardsuit/rd - suit_store = /obj/item/tank/internals/oxygen - internals_slot = slot_s_store - -/* -Scientist -*/ -/datum/job/scientist - title = "Scientist" - flag = SCIENTIST - department_head = list("Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 5 - spawn_positions = 3 - supervisors = "the research director" - selection_color = "#ffeeff" + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + +/datum/outfit/job/rd/rig + name = "Research Director (Hardsuit)" + + l_hand = null + mask = /obj/item/clothing/mask/breath + suit = /obj/item/clothing/suit/space/hardsuit/rd + suit_store = /obj/item/tank/internals/oxygen + internals_slot = slot_s_store + +/* +Scientist +*/ +/datum/job/scientist + title = "Scientist" + flag = SCIENTIST + department_head = list("Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 5 + spawn_positions = 3 + supervisors = "the research director" + selection_color = "#ffeeff" exp_requirements = 60 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/scientist - + + outfit = /datum/outfit/job/scientist + access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM, ACCESS_TECH_STORAGE, ACCESS_GENETICS) minimal_access = list(ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_RESEARCH, ACCESS_XENOBIOLOGY, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/scientist - name = "Scientist" - jobtype = /datum/job/scientist - - belt = /obj/item/device/pda/toxins - ears = /obj/item/device/radio/headset/headset_sci - uniform = /obj/item/clothing/under/rank/scientist - shoes = /obj/item/clothing/shoes/sneakers/white - suit = /obj/item/clothing/suit/toggle/labcoat/science - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - accessory = /obj/item/clothing/accessory/pocketprotector/full - -/* -Roboticist -*/ -/datum/job/roboticist - title = "Roboticist" - flag = ROBOTICIST - department_head = list("Research Director") - department_flag = MEDSCI - faction = "Station" - total_positions = 2 - spawn_positions = 2 - supervisors = "research director" - selection_color = "#ffeeff" + +/datum/outfit/job/scientist + name = "Scientist" + jobtype = /datum/job/scientist + + belt = /obj/item/device/pda/toxins + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/scientist + shoes = /obj/item/clothing/shoes/sneakers/white + suit = /obj/item/clothing/suit/toggle/labcoat/science + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + accessory = /obj/item/clothing/accessory/pocketprotector/full + +/* +Roboticist +*/ +/datum/job/roboticist + title = "Roboticist" + flag = ROBOTICIST + department_head = list("Research Director") + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "research director" + selection_color = "#ffeeff" exp_requirements = 60 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/roboticist - + + outfit = /datum/outfit/job/roboticist + access = list(ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM, ACCESS_XENOBIOLOGY, ACCESS_GENETICS) minimal_access = list(ACCESS_ROBOTICS, ACCESS_TECH_STORAGE, ACCESS_MORGUE, ACCESS_RESEARCH, ACCESS_MINERAL_STOREROOM) - -/datum/outfit/job/roboticist - name = "Roboticist" - jobtype = /datum/job/roboticist - - belt = /obj/item/storage/belt/utility/full - l_pocket = /obj/item/device/pda/roboticist - ears = /obj/item/device/radio/headset/headset_sci - uniform = /obj/item/clothing/under/rank/roboticist - suit = /obj/item/clothing/suit/toggle/labcoat - - backpack = /obj/item/storage/backpack/science - satchel = /obj/item/storage/backpack/satchel/tox - - pda_slot = slot_l_store + +/datum/outfit/job/roboticist + name = "Roboticist" + jobtype = /datum/job/roboticist + + belt = /obj/item/storage/belt/utility/full + l_pocket = /obj/item/device/pda/roboticist + ears = /obj/item/device/radio/headset/headset_sci + uniform = /obj/item/clothing/under/rank/roboticist + suit = /obj/item/clothing/suit/toggle/labcoat + + backpack = /obj/item/storage/backpack/science + satchel = /obj/item/storage/backpack/satchel/tox + + pda_slot = slot_l_store diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index a1b95065c6..442b75c972 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -48,7 +48,7 @@ Head of Security gloves = /obj/item/clothing/gloves/color/black/hos head = /obj/item/clothing/head/HoS/beret glasses = /obj/item/clothing/glasses/hud/security/sunglasses - suit_store = /obj/item/gun/energy/e_gun/cx + suit_store = /obj/item/gun/energy/e_gun r_pocket = /obj/item/device/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs backpack_contents = list(/obj/item/melee/baton/loaded=1) diff --git a/code/modules/jobs/job_types/silicon.dm b/code/modules/jobs/job_types/silicon.dm index bc3b31b2bf..4a4893e93d 100644 --- a/code/modules/jobs/job_types/silicon.dm +++ b/code/modules/jobs/job_types/silicon.dm @@ -52,4 +52,4 @@ Cyborg /datum/job/cyborg/after_spawn(mob/living/silicon/robot/R, mob/M) if(CONFIG_GET(flag/rename_cyborg)) //name can't be set in robot/New without the client - R.rename_self("cyborg", M.client) + R.rename_self("cyborg", M.client) \ No newline at end of file diff --git a/code/modules/keybindings/bindings_admin.dm b/code/modules/keybindings/bindings_admin.dm new file mode 100644 index 0000000000..812bb95784 --- /dev/null +++ b/code/modules/keybindings/bindings_admin.dm @@ -0,0 +1,18 @@ +/datum/admins/key_down(_key, client/user) + switch(_key) + if("F5") + user.admin_ghost() + return + if("F6") + player_panel_new() + return + if("F7") + user.togglebuildmodeself() + return + if("F8") + if(user.keys_held["Ctrl"]) + user.stealth() + else + user.invisimin() + return + ..() diff --git a/code/modules/keybindings/bindings_atom.dm b/code/modules/keybindings/bindings_atom.dm new file mode 100644 index 0000000000..9738175d2d --- /dev/null +++ b/code/modules/keybindings/bindings_atom.dm @@ -0,0 +1,18 @@ +// You might be wondering why this isn't client level. If focus is null, we don't want you to move. +// Only way to do that is to tie the behavior into the focus's keyLoop(). + +/atom/movable/keyLoop(client/user) + if(!user.keys_held["Ctrl"]) + var/movement_dir = NONE + for(var/_key in user.keys_held) + movement_dir = movement_dir | GLOB.movement_keys[_key] + if(user.next_move_dir_add) + movement_dir |= user.next_move_dir_add + if(user.next_move_dir_sub) + movement_dir &= ~user.next_move_dir_sub + // Sanity checks in case you hold left and right and up to make sure you only go up + if((movement_dir & NORTH) && (movement_dir & SOUTH)) + movement_dir &= ~(NORTH|SOUTH) + if((movement_dir & EAST) && (movement_dir & WEST)) + movement_dir &= ~(EAST|WEST) + user.Move(get_step(src, movement_dir), movement_dir) \ No newline at end of file diff --git a/code/modules/keybindings/bindings_carbon.dm b/code/modules/keybindings/bindings_carbon.dm new file mode 100644 index 0000000000..d17f10e963 --- /dev/null +++ b/code/modules/keybindings/bindings_carbon.dm @@ -0,0 +1,18 @@ +/mob/living/carbon/key_down(_key, client/user) + switch(_key) + if("R", "Southwest") // Southwest is End + toggle_throw_mode() + return + if("1") + a_intent_change("help") + return + if("2") + a_intent_change("disarm") + return + if("3") + a_intent_change("grab") + return + if("4") + a_intent_change("harm") + return + return ..() \ No newline at end of file diff --git a/code/modules/keybindings/bindings_client.dm b/code/modules/keybindings/bindings_client.dm new file mode 100644 index 0000000000..4d4f8ce18a --- /dev/null +++ b/code/modules/keybindings/bindings_client.dm @@ -0,0 +1,53 @@ +// Clients aren't datums so we have to define these procs indpendently. +// These verbs are called for all key press and release events +/client/verb/keyDown(_key as text) + set instant = TRUE + set hidden = TRUE + + keys_held[_key] = world.time + var/movement = GLOB.movement_keys[_key] + if(!(next_move_dir_sub & movement)) + next_move_dir_add |= movement + + // Client-level keybindings are ones anyone should be able to do at any time + // Things like taking screenshots, hitting tab, and adminhelps. + + switch(_key) + if("F1") + if(keys_held["Ctrl"] && keys_held["Shift"]) // Is this command ever used? + winset(src, null, "command=.options") + else + get_adminhelp() + return + if("F2") // Screenshot. Hold shift to choose a name and location to save in + winset(src, null, "command=.screenshot [!keys_held["shift"] ? "auto" : ""]") + return + if("F12") // Toggles minimal HUD + mob.button_pressed_F12() + return + + if(holder) + holder.key_down(_key, src) + if(mob.focus) + mob.focus.key_down(_key, src) + +/client/verb/keyUp(_key as text) + set instant = TRUE + set hidden = TRUE + + keys_held -= _key + var/movement = GLOB.movement_keys[_key] + if(!(next_move_dir_add & movement)) + next_move_dir_sub |= movement + + if(holder) + holder.key_up(_key, src) + if(mob.focus) + mob.focus.key_up(_key, src) + +// Called every game tick +/client/keyLoop() + if(holder) + holder.keyLoop(src) + if(mob.focus) + mob.focus.keyLoop(src) \ No newline at end of file diff --git a/code/modules/keybindings/bindings_living.dm b/code/modules/keybindings/bindings_living.dm new file mode 100644 index 0000000000..241bc15b60 --- /dev/null +++ b/code/modules/keybindings/bindings_living.dm @@ -0,0 +1,7 @@ +/mob/living/key_down(_key, client/user) + switch(_key) + if("B") + resist() + return + + return ..() \ No newline at end of file diff --git a/code/modules/keybindings/bindings_mob.dm b/code/modules/keybindings/bindings_mob.dm new file mode 100644 index 0000000000..1d35694e5f --- /dev/null +++ b/code/modules/keybindings/bindings_mob.dm @@ -0,0 +1,79 @@ +// Technically the client argument is unncessary here since that SHOULD be src.client but let's not assume things +// All it takes is one badmin setting their focus to someone else's client to mess things up +// Or we can have NPC's send actual keypresses and detect that by seeing no client + +/mob/key_down(_key, client/user) + switch(_key) + if("Delete", "H") + if(!pulling) + to_chat(src, "You are not pulling anything.") + else + stop_pulling() + return + if("Insert", "G") + a_intent_change(INTENT_HOTKEY_RIGHT) + return + if("F") + a_intent_change(INTENT_HOTKEY_LEFT) + return + if("X", "Northeast") // Northeast is Page-up + swap_hand() + return + if("Y", "Z", "Southeast") // Southeast is Page-down + mode() // attack_self(). No idea who came up with "mode()" + return + if("Q", "Northwest") // Northwest is Home + var/obj/item/I = get_active_held_item() + if(!I) + to_chat(src, "You have nothing to drop in your hand!") + else + dropItemToGround(I) + return + if("Alt") + toggle_move_intent() + return + //Bodypart selections + if("Numpad8") + user.body_toggle_head() + return + if("Numpad4") + user.body_r_arm() + return + if("Numpad5") + user.body_chest() + return + if("Numpad6") + user.body_l_arm() + return + if("Numpad1") + user.body_r_leg() + return + if("Numpad2") + user.body_groin() + return + if("Numpad3") + user.body_l_leg() + return + + if(client.keys_held["Ctrl"]) + switch(GLOB.movement_keys[_key]) + if(NORTH) + northface() + return + if(SOUTH) + southface() + return + if(WEST) + westface() + return + if(EAST) + eastface() + return + return ..() + +/mob/key_up(_key, client/user) + switch(_key) + if("Alt") + toggle_move_intent() + return + return ..() \ No newline at end of file diff --git a/code/modules/keybindings/bindings_robot.dm b/code/modules/keybindings/bindings_robot.dm new file mode 100644 index 0000000000..2354f33c9e --- /dev/null +++ b/code/modules/keybindings/bindings_robot.dm @@ -0,0 +1,12 @@ +/mob/living/silicon/robot/key_down(_key, client/user) + switch(_key) + if("1", "2", "3") + toggle_module(text2num(_key)) + return + if("4") + a_intent_change(INTENT_HOTKEY_LEFT) + return + if("Q") + uneq_active() + return + return ..() \ No newline at end of file diff --git a/code/modules/keybindings/focus.dm b/code/modules/keybindings/focus.dm new file mode 100644 index 0000000000..9d3e44f059 --- /dev/null +++ b/code/modules/keybindings/focus.dm @@ -0,0 +1,20 @@ +/datum + var/list/focusers //Only initialized when needed. Contains a list of mobs focusing on this. + +/mob + var/datum/focus //What receives our keyboard inputs. src by default + +/mob/proc/set_focus(datum/new_focus) + if(focus == new_focus) + return + + if(new_focus) + if(!new_focus.focusers) //Set up the new focus + new_focus.focusers = list() + new_focus.focusers += src + + if(focus) + focus.focusers -= src //Tell the old focus we're done with it + + focus = new_focus + reset_perspective(focus) //Maybe this should be done manually? You figure it out, reader \ No newline at end of file diff --git a/code/modules/keybindings/readme.md b/code/modules/keybindings/readme.md new file mode 100644 index 0000000000..1170804436 --- /dev/null +++ b/code/modules/keybindings/readme.md @@ -0,0 +1,40 @@ +# In-code keypress handling system + +This whole system is heavily based off of forum_account's keyboard library. +Thanks to forum_account for saving the day, the library can be found [here](http://www.byond.com/developer/Forum_account/Keyboard)! + +.dmf macros have some very serious shortcomings. For example, they do not allow reusing parts +of one macro in another, so giving cyborgs their own shortcuts to swap active module couldn't +inherit the movement that all mobs should have anyways. The webclient only supports one macro, +so having more than one was problematic. Additionally each keybind has to call an actual +verb, which meant a lot of hidden verbs that just call one other proc. Also our existing +macro was really bad and tied unrelated behavior into `Northeast()`, `Southeast()`, `Northwest()`, +and `Southwest()`. + +The basic premise of this system is to not screw with .dmf macro setup at all and handle +pressing those keys in the code instead. We have every key call `client.keyDown()` +or `client.keyUp()` with the pressed key as an argument. Certain keys get processed +directly by the client because they should be doable at any time, then we call +`keyDown()` or `keyUp()` on the client's holder and the client's mob's focus. +By default `mob.focus` is the mob itself, but you can set it to any datum to give control of a +client's keypresses to another object. This would be a good way to handle a menu or driving +a mech. You can also set it to null to disregard input from a certain user. + +Movement is handled by having each client call `client.keyLoop()` every game tick. +As above, this calls holder and `focus.keyLoop()`. `atom/movable/keyLoop()` handles movement +Try to keep the calculations in this proc light. It runs every tick for every client after all! + +You can also tell which keys are being held down now. Each client a list of keys pressed called +`keys_held`. Each entry is a key as a text string associated with the world.time when it was +pressed. + +No client-set keybindings at this time, but it shouldn't be too hard if someone wants. + +Notes about certain keys +`Tab` has client-sided behavior but acts normally +`T`, `O`, and `M` move focus to the input when pressed. This fires the keyUp macro right away. +`\` needs to be escaped in the dmf so any usage is `\\` + +You cannot `TICK_CHECK` or check `world.tick_usage` inside of procs called by key down and up +events. They happen outside of a byond tick and have no meaning there. Key looping +works correctly since it's part of a subsystem, not direct input. \ No newline at end of file diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm new file mode 100644 index 0000000000..c36db0a1f3 --- /dev/null +++ b/code/modules/keybindings/setup.dm @@ -0,0 +1,55 @@ +/client + var/list/keys_held = list() // A list of any keys held currently + // These next two vars are to apply movement for keypresses and releases made while move delayed. + // Because discarding that input makes the game less responsive. + var/next_move_dir_add // On next move, add this dir to the move that would otherwise be done + var/next_move_dir_sub // On next move, subtract this dir from the move that would otherwise be done + +// Set a client's focus to an object and override these procs on that object to let it handle keypresses + +/datum/proc/key_down(key, client/user) // Called when a key is pressed down initially + return +/datum/proc/key_up(key, client/user) // Called when a key is released + return +/datum/proc/keyLoop(client/user) // Called once every frame + return + +// Keys used for movement +GLOBAL_LIST_INIT(movement_keys, list( + "W" = NORTH, "A" = WEST, "S" = SOUTH, "D" = EAST, // WASD + "North" = NORTH, "West" = WEST, "South" = SOUTH, "East" = EAST, // Arrow keys & Numpad + )) + +// removes all the existing macros +/client/proc/erase_all_macros() + var/list/macro_sets = params2list(winget(src, null, "macros")) + var/erase_output = "" + for(var/i in 1 to macro_sets.len) + var/setname = macro_sets[i] + var/list/macro_set = params2list(winget(src, "[setname].*", "command")) // The third arg doesnt matter here as we're just removing them all + for(var/k in 1 to macro_set.len) + var/list/split_name = splittext(macro_set[k], ".") + var/macro_name = "[split_name[1]].[split_name[2]]" // [3] is "command" + erase_output = "[erase_output];[macro_name].parent=null" + winset(src, null, erase_output) + +/client/proc/set_macros() + set waitfor = FALSE + + erase_all_macros() + + var/list/macro_sets = SSinput.macro_sets + for(var/i in 1 to macro_sets.len) + var/setname = macro_sets[i] + if(setname != "default") + winclone(src, "default", setname) + var/list/macro_set = macro_sets[setname] + for(var/k in 1 to macro_set.len) + var/key = macro_set[k] + var/command = macro_set[key] + winset(src, "[setname]-[REF(key)]", "parent=[setname];name=[key];command=[command]") + + if(prefs.hotkeys) + winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=default") + else + winset(src, null, "input.focus=true input.background-color=[COLOR_INPUT_ENABLED] mainwindow.macro=old_default") \ No newline at end of file diff --git a/code/modules/language/aphasia.dm b/code/modules/language/aphasia.dm index 070a792ecd..91f14f9111 100644 --- a/code/modules/language/aphasia.dm +++ b/code/modules/language/aphasia.dm @@ -5,7 +5,7 @@ ask_verb = "mumbles" whisper_verb = "mutters" exclaim_verb = "screams incoherently" - flags_1 = LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD + flags = LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD key = "i" syllables = list("m","n","gh","h","l","s","r","a","e","i","o","u") space_chance = 20 diff --git a/code/modules/language/codespeak.dm b/code/modules/language/codespeak.dm index e8398c2b9f..2a140f27de 100644 --- a/code/modules/language/codespeak.dm +++ b/code/modules/language/codespeak.dm @@ -3,7 +3,7 @@ desc = "Syndicate operatives can use a series of codewords to convey complex information, while sounding like random concepts and drinks to anyone listening in." key = "t" default_priority = 0 - flags_1 = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD + flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD icon_state = "codespeak" /datum/language/codespeak/scramble(input) diff --git a/code/modules/language/common.dm b/code/modules/language/common.dm index 162fbf9226..c00ab328ec 100644 --- a/code/modules/language/common.dm +++ b/code/modules/language/common.dm @@ -5,7 +5,7 @@ speech_verb = "says" whisper_verb = "whispers" key = "0" - flags_1 = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_UNDERSTOOD + flags = TONGUELESS_SPEECH | LANGUAGE_HIDE_ICON_IF_UNDERSTOOD default_priority = 100 icon_state = "galcom" diff --git a/code/modules/language/draconic.dm b/code/modules/language/draconic.dm index a85c1c9747..aaa998c2c0 100644 --- a/code/modules/language/draconic.dm +++ b/code/modules/language/draconic.dm @@ -5,7 +5,7 @@ ask_verb = "hisses" exclaim_verb = "roars" key = "o" - flags_1 = TONGUELESS_SPEECH + flags = TONGUELESS_SPEECH space_chance = 40 syllables = list( "za", "az", "ze", "ez", "zi", "iz", "zo", "oz", "zu", "uz", "zs", "sz", diff --git a/code/modules/language/drone.dm b/code/modules/language/drone.dm index 32659e263b..390e0027cf 100644 --- a/code/modules/language/drone.dm +++ b/code/modules/language/drone.dm @@ -1,12 +1,12 @@ /datum/language/drone name = "Drone" - desc = "A heavily encoded damage control coordination stream, with special flags_1 for hats." + desc = "A heavily encoded damage control coordination stream, with special flags for hats." speech_verb = "chitters" ask_verb = "chitters inquisitively" exclaim_verb = "chitters loudly" spans = list(SPAN_ROBOT) key = "d" - flags_1 = NO_STUTTER + flags = NO_STUTTER syllables = list(".", "|") // ...|..||.||||.|.||.|.|.|||.||| space_chance = 0 diff --git a/code/modules/language/language.dm b/code/modules/language/language.dm index 598fb41e6c..5f2e9963e7 100644 --- a/code/modules/language/language.dm +++ b/code/modules/language/language.dm @@ -11,10 +11,10 @@ var/ask_verb = "asks" // Used when sentence ends in a ? var/exclaim_verb = "exclaims" // Used when sentence ends in a ! var/whisper_verb = "whispers" // Optional. When not specified speech_verb + quietly/softly is used instead. - var/list/signlang_verb = list("signs", "gestures") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags_1 + var/list/signlang_verb = list("signs", "gestures") // list of emotes that might be displayed if this language has NONVERBAL or SIGNLANG flags var/key // Character used to speak in language // If key is null, then the language isn't real or learnable. - var/flags_1 // Various language flags_1. + var/flags // Various language flags. var/list/syllables // Used when scrambling text for a non-speaker. var/sentence_chance = 5 // Likelihood of making a new sentence after each syllable. var/space_chance = 55 // Likelihood of getting a space in the random scramble string @@ -28,9 +28,9 @@ /datum/language/proc/display_icon(atom/movable/hearer) var/understands = hearer.has_language(src.type) - if(flags_1 & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) + if(flags & LANGUAGE_HIDE_ICON_IF_UNDERSTOOD && understands) return FALSE - if(flags_1 & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD && !understands) + if(flags & LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD && !understands) return FALSE return TRUE diff --git a/code/modules/language/machine.dm b/code/modules/language/machine.dm index e5775040a2..4d88bcb416 100644 --- a/code/modules/language/machine.dm +++ b/code/modules/language/machine.dm @@ -6,7 +6,7 @@ exclaim_verb = "whistles loudly" spans = list(SPAN_ROBOT) key = "6" - flags_1 = NO_STUTTER + flags = NO_STUTTER syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz") space_chance = 10 default_priority = 90 diff --git a/code/modules/language/swarmer.dm b/code/modules/language/swarmer.dm index ea58775a08..e3b7826706 100644 --- a/code/modules/language/swarmer.dm +++ b/code/modules/language/swarmer.dm @@ -6,7 +6,7 @@ exclaim_verb = "tones loudly" spans = list(SPAN_ROBOT) key = "s" - flags_1 = NO_STUTTER + flags = NO_STUTTER space_chance = 100 sentence_chance = 0 default_priority = 60 diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 9cbd04bf42..b7673a9640 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -144,8 +144,8 @@ /obj/structure/bookcase/manuals/medical name = "medical manuals bookcase" -/obj/structure/bookcase/manuals/medical/New() - ..() +/obj/structure/bookcase/manuals/medical/Initialize() + . = ..() new /obj/item/book/manual/medical_cloning(src) update_icon() @@ -153,8 +153,8 @@ /obj/structure/bookcase/manuals/engineering name = "engineering manuals bookcase" -/obj/structure/bookcase/manuals/engineering/New() - ..() +/obj/structure/bookcase/manuals/engineering/Initialize() + . = ..() new /obj/item/book/manual/wiki/engineering_construction(src) new /obj/item/book/manual/engineering_particle_accelerator(src) new /obj/item/book/manual/wiki/engineering_hacking(src) @@ -167,8 +167,8 @@ /obj/structure/bookcase/manuals/research_and_development name = "\improper R&D manuals bookcase" -/obj/structure/bookcase/manuals/research_and_development/New() - ..() +/obj/structure/bookcase/manuals/research_and_development/Initialize() + . = ..() new /obj/item/book/manual/research_and_development(src) update_icon() diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index cee4665f07..fd75ba4351 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -142,7 +142,7 @@ hidden_message = newmessage creator_name = user.real_name creator_key = user.ckey - realdate = world.timeofday + realdate = world.realtime map = SSmapping.config.map_name update_icon() diff --git a/code/modules/mapping/dmm_suite.dm b/code/modules/mapping/dmm_suite.dm index d272a10673..c4ceec33ee 100644 --- a/code/modules/mapping/dmm_suite.dm +++ b/code/modules/mapping/dmm_suite.dm @@ -27,7 +27,7 @@ dmm_suite{ write_map(), which accepts three arguments: - A turf representing one corner of a three dimensional grid (Required). - Another turf representing the other corner of the same grid (Required). - - Any, or a combination, of several bit flags_1 (Optional, see documentation). + - Any, or a combination, of several bit flags (Optional, see documentation). The order in which the turfs are supplied does not matter, the /dmm_writer will determine the grid containing both, in much the same way as DM's block() function. diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 910cc6fe60..dc9bc93547 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -49,8 +49,8 @@ SSair.setup_template_machinery(atmos_machines) /datum/map_template/proc/load_new_z() - var/x = round(world.maxx/2) - var/y = round(world.maxy/2) + var/x = round((world.maxx - width)/2) + var/y = round((world.maxy - height)/2) var/list/bounds = maploader.load_map(file(mappath), x, y) if(!bounds) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index a4d3986020..120a000f07 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -13,11 +13,15 @@ . = ..() var/area/thearea = get_area(src) for(var/turf/T in get_area_turfs(thearea, z)) - if(T.baseturf != T.type) //Don't break indestructible walls and the like - T.baseturf = baseturf + if(T.baseturfs != T.type) //Don't break indestructible walls and the like + T.baseturfs = baseturf return INITIALIZE_HINT_QDEL +/obj/effect/baseturf_helper/space + name = "space baseturf editor" + baseturf = /turf/open/space + /obj/effect/baseturf_helper/asteroid name = "asteroid baseturf editor" baseturf = /turf/open/floor/plating/asteroid @@ -63,7 +67,6 @@ GLOBAL_LIST_EMPTY(z_is_planet) /obj/effect/mapping_helpers/planet_z/Initialize() . = ..() var/turf/T = get_turf(src) - if(!turf_z_is_planet(T)) - GLOB.z_is_planet["[T.z]"] = list() + GLOB.z_is_planet["[T.z]"] = TRUE return INITIALIZE_HINT_QDEL diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 559a93b87f..e73782edbc 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -339,7 +339,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new) if(crds) if(!no_changeturf && ispath(path, /turf)) - . = crds.ChangeTurf(path, FALSE, TRUE) + . = crds.ChangeTurf(path, null, CHANGETURF_DEFER_CHANGE) else . = create_atom(path, crds)//first preloader pass diff --git a/code/modules/mapping/ruins.dm b/code/modules/mapping/ruins.dm index dfc602e725..89d9d07a14 100644 --- a/code/modules/mapping/ruins.dm +++ b/code/modules/mapping/ruins.dm @@ -1,3 +1,5 @@ + + /proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins) if(!z_levels || !z_levels.len) WARNING("No Z levels provided - Not generating ruins") diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 6c445c9ceb..5e7265f043 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -11,8 +11,8 @@ var/codelen = 4 tamperproof = 90 -/obj/structure/closet/crate/secure/loot/New() - ..() +/obj/structure/closet/crate/secure/loot/Initialize() + . = ..() var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "0") code = "" for(var/i = 0, i < codelen, i++) diff --git a/code/modules/mining/aux_base.dm b/code/modules/mining/aux_base.dm index 6b364e63e7..df20ce5921 100644 --- a/code/modules/mining/aux_base.dm +++ b/code/modules/mining/aux_base.dm @@ -1,9 +1,10 @@ ///Mining Base//// +#define ZONE_SET 0 #define BAD_ZLEVEL 1 #define BAD_AREA 2 #define BAD_COORDS 3 -#define ZONE_SET 4 +#define BAD_TURF 4 /area/shuttle/auxillary_base name = "Auxillary Base" @@ -37,7 +38,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) - var/dat = "[(z in GLOB.station_z_levels) ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
    " + var/dat = "[is_station_level(z) ? "Docking clamps engaged. Standing by." : "Mining Shuttle Uplink: [M ? M.getStatusText() : "*OFFLINE*"]"]
    " if(M) var/destination_found for(var/obj/docking_port/stationary/S in SSshuttle.stationary) @@ -47,7 +48,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also continue destination_found = 1 dat += "Send to [S.name]
    " - if(!destination_found && (z in GLOB.station_z_levels)) //Only available if miners are lazy and did not set an LZ using the remote. + if(!destination_found && is_station_level(z)) //Only available if miners are lazy and did not set an LZ using the remote. dat += "Prepare for blind drop? (Dangerous)
    " if(LAZYLEN(turrets)) dat += "
    Perimeter Defense System: Enable All / Disable All
    \ @@ -86,7 +87,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also return if(href_list["move"]) - if(!(z in GLOB.station_z_levels) && shuttleId == "colony_drop") + if(!is_station_level(z) && shuttleId == "colony_drop") to_chat(usr, "You can't move the base again!") return var/shuttle_error = SSshuttle.moveShuttle(shuttleId, href_list["move"], 1) @@ -128,27 +129,37 @@ interface with the mining shuttle at the landing site if a mobile beacon is also updateUsrDialog() /obj/machinery/computer/auxillary_base/proc/set_mining_mode() - if(z == ZLEVEL_MINING) //The console switches to controlling the mining shuttle once landed. + if(is_mining_level(z)) //The console switches to controlling the mining shuttle once landed. req_one_access = list() shuttleId = "mining" //The base can only be dropped once, so this gives the console a new purpose. possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public" /obj/machinery/computer/auxillary_base/proc/set_landing_zone(turf/T, mob/user, var/no_restrictions) - var/obj/docking_port/mobile/auxillary_base/base_dock = locate(/obj/docking_port/mobile/auxillary_base) in SSshuttle.mobile if(!base_dock) //Not all maps have an Aux base. This object is useless in that case. to_chat(user, "This station is not equipped with an auxillary base. Please contact your Nanotrasen contractor.") return if(!no_restrictions) - if(T.z != ZLEVEL_MINING) - return BAD_ZLEVEL - var/colony_radius = max(base_dock.width, base_dock.height)*0.5 - if(T.x - colony_radius < 1 || T.x + colony_radius >= world.maxx || T.y - colony_radius < 1 || T.y + colony_radius >= world.maxx) - return BAD_COORDS //Avoid dropping the base too close to map boundaries, as it results in parts of it being left in space + var/static/list/disallowed_turf_types = typecacheof(list( + /turf/open/lava, + /turf/closed/indestructible, + /turf/open/indestructible, + )) - var/list/area_counter = get_areas_in_range(colony_radius, T) - if(area_counter.len > 1) //Avoid smashing ruins unless you are inside a really big one - return BAD_AREA + if(!is_mining_level(T.z)) + return BAD_ZLEVEL + + var/colony_radius = CEILING(max(base_dock.width, base_dock.height)*0.5, 1) + var/list/colony_turfs = block(locate(T.x - colony_radius, T.y - colony_radius, T.z), locate(T.x + colony_radius, T.y + colony_radius, T.z)) + for(var/i in 1 to colony_turfs.len) + CHECK_TICK + var/turf/place = colony_turfs[i] + if(!place) + return BAD_COORDS + if(!istype(place.loc, /area/lavaland/surface)) + return BAD_AREA + if(disallowed_turf_types[place.type]) + return BAD_TURF var/area/A = get_area(T) @@ -200,7 +211,7 @@ interface with the mining shuttle at the landing site if a mobile beacon is also var/obj/machinery/computer/auxillary_base/AB for (var/obj/machinery/computer/auxillary_base/A in GLOB.machines) - if(A.z in GLOB.station_z_levels) + if(is_station_level(A.z)) AB = A break if(!AB) @@ -208,14 +219,16 @@ interface with the mining shuttle at the landing site if a mobile beacon is also return switch(AB.set_landing_zone(T, user, no_restrictions)) + if(ZONE_SET) + qdel(src) if(BAD_ZLEVEL) to_chat(user, "This uplink can only be used in a designed mining zone.") if(BAD_AREA) to_chat(user, "Unable to acquire a targeting lock. Find an area clear of stuctures or entirely within one.") if(BAD_COORDS) to_chat(user, "Location is too close to the edge of the station's scanning range. Move several paces away and try again.") - if(ZONE_SET) - qdel(src) + if(BAD_TURF) + to_chat(user, "The landing zone contains turfs unsuitable for a base.") /obj/item/device/assault_pod/mining/unrestricted name = "omni-locational landing field designator" @@ -267,7 +280,7 @@ obj/docking_port/stationary/public_mining_dock var/turf/landing_spot = get_turf(src) - if(landing_spot.z != ZLEVEL_MINING) + if(!is_mining_level(landing_spot.z)) to_chat(user, "This device is only to be used in a mining zone.") return var/obj/machinery/computer/auxillary_base/aux_base_console @@ -348,7 +361,8 @@ obj/docking_port/stationary/public_mining_dock /obj/structure/mining_shuttle_beacon/attack_robot(mob/user) return attack_hand(user) //So borgies can help +#undef ZONE_SET #undef BAD_ZLEVEL #undef BAD_AREA #undef BAD_COORDS -#undef ZONE_SET +#undef BAD_TURF diff --git a/code/modules/mining/aux_base_camera.dm b/code/modules/mining/aux_base_camera.dm index 4270b54b0a..dd8e98823b 100644 --- a/code/modules/mining/aux_base_camera.dm +++ b/code/modules/mining/aux_base_camera.dm @@ -151,7 +151,7 @@ to_chat(owner, "You can only build within the mining base!") return FALSE - if(!(build_target.z in GLOB.station_z_levels)) + if(!is_station_level(build_target.z)) to_chat(owner, "The mining base has launched and can no longer be modified.") return FALSE diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index f2cdefa9a4..729665034e 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -43,8 +43,8 @@ ..() w_class = mask_adjusted ? WEIGHT_CLASS_NORMAL : WEIGHT_CLASS_SMALL -/obj/item/clothing/mask/gas/explorer/folded/New() - ..() +/obj/item/clothing/mask/gas/explorer/folded/Initialize() + . = ..() adjustmask() /obj/item/clothing/suit/space/hostile_environment diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 52160303cc..ec3dda28a0 100644 --- a/code/modules/mining/equipment/mineral_scanner.dm +++ b/code/modules/mining/equipment/mineral_scanner.dm @@ -71,7 +71,7 @@ plane = FULLSCREEN_PLANE layer = FLASH_LAYER icon = 'icons/effects/ore_visuals.dmi' - appearance_flags = 0 //to avoid having TILE_BOUND in the flags_1, so that the 480x480 icon states let you see it no matter where you are + appearance_flags = 0 //to avoid having TILE_BOUND in the flags, so that the 480x480 icon states let you see it no matter where you are duration = 35 pixel_x = -224 pixel_y = -224 diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 4f4b16e6d3..573c3dab71 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -60,7 +60,7 @@ playsound(get_turf(src), 'sound/effects/phasein.ogg', 100, 1) var/turf/T = deploy_location - if(T.z != ZLEVEL_MINING && T.z != ZLEVEL_LAVALAND)//only report capsules away from the mining/lavaland level + if(!is_mining_level(T.z)) //only report capsules away from the mining/lavaland level message_admins("[ADMIN_LOOKUPFLW(usr)] activated a bluespace capsule away from the mining level! [ADMIN_JMP(T)]") log_admin("[key_name(usr)] activated a bluespace capsule away from the mining level at [get_area(T)][COORD(T)]") template.load(deploy_location, centered = TRUE) diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index e69c8fa05d..f714e3f471 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -20,7 +20,7 @@ /obj/item/device/wormhole_jaunter/proc/turf_check(mob/user) var/turf/device_turf = get_turf(user) - if(!device_turf || device_turf.z == ZLEVEL_CENTCOM || device_turf.z == ZLEVEL_TRANSIT) + if(!device_turf || is_centcom_level(device_turf.z) || is_transit_level(device_turf.z)) to_chat(user, "You're having difficulties getting the [src.name] to work.") return FALSE return TRUE @@ -40,7 +40,7 @@ for(var/obj/item/device/radio/beacon/B in GLOB.teleportbeacons) var/turf/T = get_turf(B) - if(T.z in GLOB.station_z_levels) + if(is_station_level(T.z)) destinations += B return destinations diff --git a/code/modules/mining/laborcamp/laborshuttle.dm b/code/modules/mining/laborcamp/laborshuttle.dm index f2c782c279..60983aa25a 100644 --- a/code/modules/mining/laborcamp/laborshuttle.dm +++ b/code/modules/mining/laborcamp/laborshuttle.dm @@ -1,27 +1,27 @@ -/obj/machinery/computer/shuttle/labor - name = "labor shuttle console" - desc = "Used to call and send the labor camp shuttle." - circuit = /obj/item/circuitboard/computer/labor_shuttle - shuttleId = "laborcamp" - possible_destinations = "laborcamp_home;laborcamp_away" +/obj/machinery/computer/shuttle/labor + name = "labor shuttle console" + desc = "Used to call and send the labor camp shuttle." + circuit = /obj/item/circuitboard/computer/labor_shuttle + shuttleId = "laborcamp" + possible_destinations = "laborcamp_home;laborcamp_away" req_access = list(ACCESS_BRIG) - - -/obj/machinery/computer/shuttle/labor/one_way - name = "prisoner shuttle console" - desc = "A one-way shuttle console, used to summon the shuttle to the labor camp." - possible_destinations = "laborcamp_away" - circuit = /obj/item/circuitboard/computer/labor_shuttle/one_way - req_access = list( ) - -/obj/machinery/computer/shuttle/labor/one_way/Topic(href, href_list) - if(href_list["move"]) - var/obj/docking_port/mobile/M = SSshuttle.getShuttle("laborcamp") - if(!M) - to_chat(usr, "Cannot locate shuttle!") - return 0 - var/obj/docking_port/stationary/S = M.get_docked() - if(S && S.name == "laborcamp_away") - to_chat(usr, "Shuttle is already at the outpost!") - return 0 + + +/obj/machinery/computer/shuttle/labor/one_way + name = "prisoner shuttle console" + desc = "A one-way shuttle console, used to summon the shuttle to the labor camp." + possible_destinations = "laborcamp_away" + circuit = /obj/item/circuitboard/computer/labor_shuttle/one_way + req_access = list( ) + +/obj/machinery/computer/shuttle/labor/one_way/Topic(href, href_list) + if(href_list["move"]) + var/obj/docking_port/mobile/M = SSshuttle.getShuttle("laborcamp") + if(!M) + to_chat(usr, "Cannot locate shuttle!") + return 0 + var/obj/docking_port/stationary/S = M.get_docked() + if(S && S.name == "laborcamp_away") + to_chat(usr, "Shuttle is already at the outpost!") + return 0 ..() \ No newline at end of file diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index 12c9bfb30e..7b38bc4cb5 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -102,8 +102,8 @@ to_chat(usr, "No permission to dock could be granted.") else if(!emagged) - Radio.set_frequency(GLOB.SEC_FREQ) - Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", GLOB.SEC_FREQ, get_spans(), get_default_language()) + Radio.set_frequency(FREQ_SECURITY) + Radio.talk_into(src, "[inserted_id.registered_name] has returned to the station. Minerals and Prisoner ID card ready for retrieval.", FREQ_SECURITY, get_spans(), get_default_language()) to_chat(usr, "Shuttle received message and will be sent shortly.") /obj/machinery/mineral/labor_claim_console/proc/check_auth() diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index 6ecdc91635..340ba16373 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -20,8 +20,8 @@ var/regrowth_time_low = 4800 var/regrowth_time_high = 8400 -/obj/structure/flora/ash/New() - ..() +/obj/structure/flora/ash/Initialize() + . = ..() base_icon = "[icon_state][rand(1, 4)]" icon_state = base_icon if(prob(15)) @@ -153,8 +153,8 @@ max_integrity = 100 seed = /obj/item/seeds/lavaland/polypore -/obj/item/reagent_containers/food/snacks/grown/ash_flora/New() - ..() +/obj/item/reagent_containers/food/snacks/grown/ash_flora/Initialize() + . = ..() pixel_x = rand(-4, 4) pixel_y = rand(-4, 4) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 01d6de85e2..60577ea7a9 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -107,6 +107,7 @@ /datum/design/unique_modkit category = list("Mining Designs", "Cyborg Upgrade Modules") //can't be normally obtained build_type = PROTOLATHE | MECHFAB + departmental_flags = DEPARTMENTAL_FLAG_CARGO /datum/design/unique_modkit/offensive_turf_aoe name = "Kinetic Accelerator Offensive Mining Explosion Mod" @@ -586,7 +587,7 @@ to_chat(user, "You unfold the ladder. It extends much farther than you were expecting.") var/last_ladder = null for(var/i in 1 to world.maxz) - if(i == ZLEVEL_CENTCOM || i == ZLEVEL_TRANSIT || i == ZLEVEL_CITYOFCOGS) + if(is_centcom_level(i) || is_transit_level(i) || is_reebe(i)) continue var/turf/T2 = locate(ladder_x, ladder_y, i) last_ladder = new /obj/structure/ladder/unbreakable/jacob(T2, null, last_ladder) @@ -656,7 +657,7 @@ playsound(user, 'sound/magic/clockwork/fellowship_armory.ogg', 35, TRUE, frequency = 90000 - (active * 30000)) /obj/item/melee/transforming/cleaving_saw/clumsy_transform_effect(mob/living/user) - if(user.disabilities & CLUMSY && prob(50)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(50)) to_chat(user, "You accidentally cut yourself with [src], like a doofus!") user.take_bodypart_damage(10) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index e16eb0e5b2..fe94d88168 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -102,7 +102,7 @@ smelt_ore(ore) /obj/machinery/mineral/ore_redemption/proc/send_console_message() - if(!(z in GLOB.station_z_levels)) + if(!is_station_level(z)) return message_sent = TRUE var/area/A = get_area(src) @@ -257,9 +257,8 @@ if("Release") if(check_access(inserted_id) || allowed(usr)) //Check the ID inside, otherwise check the user - var/out = get_step(src, output_dir) if(params["id"] == "all") - materials.retrieve_all(out) + materials.retrieve_all(get_step(src, output_dir)) else var/mat_id = params["id"] if(!materials.materials[mat_id]) @@ -277,7 +276,7 @@ desired = input("How many sheets?", "How many sheets would you like to smelt?", 1) as null|num var/sheets_to_remove = round(min(desired,50,stored_amount)) - materials.retrieve_sheets(sheets_to_remove, mat_id, out) + materials.retrieve_sheets(sheets_to_remove, mat_id, get_step(src, output_dir)) else to_chat(usr, "Required access not found.") diff --git a/code/modules/mining/machine_unloading.dm b/code/modules/mining/machine_unloading.dm index 6896a1a805..c22ba5d757 100644 --- a/code/modules/mining/machine_unloading.dm +++ b/code/modules/mining/machine_unloading.dm @@ -29,4 +29,4 @@ limit++ if (limit>=10) return - CHECK_TICK + CHECK_TICK \ No newline at end of file diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 1e298604eb..c872756872 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -276,8 +276,8 @@ name = "mining conscription kit" desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." -/obj/item/storage/backpack/duffelbag/mining_conscript/New() - ..() +/obj/item/storage/backpack/duffelbag/mining_conscript/Initialize() + . = ..() new /obj/item/pickaxe/mini(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/device/t_scanner/adv_mining_scanner/lesser(src) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index 8d36922bdf..ba4850eb47 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -8,8 +8,8 @@ var/set_luminosity = 8 var/set_cap = 0 -/obj/effect/light_emitter/New() - ..() +/obj/effect/light_emitter/Initialize() + . = ..() set_light(set_luminosity, set_cap) /obj/effect/light_emitter/singularity_pull() @@ -73,10 +73,9 @@ possible_destinations = "mining_home;mining_away;landing_zone_dock;mining_public" no_destination_swap = 1 var/global/list/dumb_rev_heads = list() - req_access = list(ACCESS_MINING) // should slow the ashwalkers down. /obj/machinery/computer/shuttle/mining/attack_hand(mob/user) - if((user.z in GLOB.station_z_levels) && user.mind && is_head_revolutionary(user) && !(user.mind in dumb_rev_heads)) + if(is_station_level(user.z) && user.mind && is_head_revolutionary(user) && !(user.mind in dumb_rev_heads)) to_chat(user, "You get a feeling that leaving the station might be a REALLY dumb idea...") dumb_rev_heads += user.mind return @@ -87,4 +86,4 @@ /obj/structure/closet/crate/miningcar desc = "A mining car. This one doesn't work on rails, but has to be dragged." name = "Mining car (not for rails)" - icon_state = "miningcar" \ No newline at end of file + icon_state = "miningcar" diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index f13079861a..befaef31a2 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -14,8 +14,8 @@ can_hold = list(/obj/item/coin, /obj/item/stack/spacecash) -/obj/item/storage/bag/money/vault/New() - ..() +/obj/item/storage/bag/money/vault/Initialize() + . = ..() new /obj/item/coin/silver(src) new /obj/item/coin/silver(src) new /obj/item/coin/silver(src) diff --git a/code/modules/mob/dead/dead.dm b/code/modules/mob/dead/dead.dm index 1142d2d6cb..59e8911659 100644 --- a/code/modules/mob/dead/dead.dm +++ b/code/modules/mob/dead/dead.dm @@ -2,6 +2,9 @@ INITIALIZE_IMMEDIATE(/mob/dead) +/mob/dead + sight = SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF + /mob/dead/Initialize() if(initialized) stack_trace("Warning: [src]([type]) initialized multiple times!") @@ -11,8 +14,9 @@ INITIALIZE_IMMEDIATE(/mob/dead) prepare_huds() - if(CONFIG_GET(string/cross_server_address)) + if(length(CONFIG_GET(keyed_string_list/cross_server))) verbs += /mob/dead/proc/server_hop + set_focus(src) return INITIALIZE_HINT_NORMAL /mob/dead/dust() //ghosts can't be vaporised. @@ -45,26 +49,46 @@ INITIALIZE_IMMEDIATE(/mob/dead) else stat(null, "Time To Start: SOON") + stat(null, "Players: [SSticker.totalPlayers]") + if(client.holder) + stat(null, "Players Ready: [SSticker.totalPlayersReady]") + /mob/dead/proc/server_hop() set category = "OOC" set name = "Server Hop!" set desc= "Jump to the other server" if(notransform) return - var/csa = CONFIG_GET(string/cross_server_address) - if(csa) - verbs -= /mob/dead/proc/server_hop - to_chat(src, "Server Hop has been disabled.") + var/list/csa = CONFIG_GET(keyed_string_list/cross_server) + var/pick + switch(csa.len) + if(0) + verbs -= /mob/dead/proc/server_hop + to_chat(src, "Server Hop has been disabled.") + if(1) + pick = csa[0] + else + pick = input(src, "Pick a server to jump to", "Server Hop") as null|anything in csa + + if(!pick) return - if (alert(src, "Jump to server running at [csa]?", "Server Hop", "Yes", "No") != "Yes") - return 0 - if (client && csa) - to_chat(src, "Sending you to [csa].") - new /obj/screen/splash(client) - notransform = TRUE - sleep(29) //let the animation play - notransform = FALSE - winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources - client << link(csa + "?server_hop=[key]") - else - to_chat(src, "There is no other server configured!") + + var/addr = csa[pick] + + if(alert(src, "Jump to server [pick] ([addr])?", "Server Hop", "Yes", "No") != "Yes") + return + + var/client/C = client + to_chat(C, "Sending you to [pick].") + new /obj/screen/splash(C) + + notransform = TRUE + sleep(29) //let the animation play + notransform = FALSE + + if(!C) + return + + winset(src, null, "command=.options") //other wise the user never knows if byond is downloading resources + + C << link("[addr]?server_hop=[key]") diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 573183df96..0ee1e91d3a 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -73,26 +73,6 @@ popup.open(0) return -/mob/dead/new_player/Stat() - ..() - - if(statpanel("Lobby")) - stat("Game Mode:", (SSticker.hide_mode) ? "Secret" : "[GLOB.master_mode]") - stat("Map:", SSmapping.config.map_name) - - if(SSticker.current_state == GAME_STATE_PREGAME) - var/time_remaining = SSticker.GetTimeLeft() - if(time_remaining > 0) - stat("Time To Start:", "[round(time_remaining/10)]s") - else if(time_remaining == -10) - stat("Time To Start:", "DELAYED") - else - stat("Time To Start:", "SOON") - - stat("Players:", "[SSticker.totalPlayers]") - if(client.holder) - stat("Players Ready:", "[SSticker.totalPlayersReady]") - /mob/dead/new_player/Topic(href, href_list[]) if(src != usr) @@ -317,15 +297,13 @@ return 0 if(job.required_playtime_remaining(client)) return 0 - if(CONFIG_GET(flag/enforce_human_authority) && !client.prefs.pref_species.qualifies_for_rank(rank, client.prefs.features)) - return 0 return 1 /mob/dead/new_player/proc/AttemptLateSpawn(rank) if(!IsJobAvailable(rank)) alert(src, "[rank] is not available. Please try another.") - return 0 + return FALSE if(SSticker.late_join_disabled) alert(src, "An administrator has disabled late join spawning.") diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index f362f09a65..c9710a5457 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -1,4 +1,5 @@ -//The mob should have a gender you want before running this proc. Will run fine without H + + //The mob should have a gender you want before running this proc. Will run fine without H /datum/preferences/proc/random_character(gender_override) if(gender_override) gender = gender_override @@ -19,7 +20,7 @@ features = random_features() age = rand(AGE_MIN,AGE_MAX) -/datum/preferences/proc/update_preview_icon(nude = 0) +/datum/preferences/proc/update_preview_icon(nude = FALSE) // Silicons only need a very basic preview since there is no customization for them. if(job_engsec_high) switch(job_engsec_high) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4481de1e36..cc05486895 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -13,7 +13,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) density = FALSE canmove = 0 anchored = TRUE // don't get pushed around - sight = SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF see_invisible = SEE_INVISIBLE_OBSERVER see_in_dark = 100 invisibility = INVISIBILITY_OBSERVER @@ -136,13 +135,13 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) /mob/dead/observer/narsie_act() var/old_color = color color = "#960000" - animate(src, color = old_color, time = 10, flags_1 = ANIMATION_PARALLEL) + animate(src, color = old_color, time = 10, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) /mob/dead/observer/ratvar_act() var/old_color = color color = "#FAE48C" - animate(src, color = old_color, time = 10, flags_1 = ANIMATION_PARALLEL) + animate(src, color = old_color, time = 10, flags = ANIMATION_PARALLEL) addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 10) /mob/dead/observer/Destroy() @@ -471,7 +470,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set hidden = TRUE var/max_view = client.prefs.unlock_content ? GHOST_MAX_VIEW_RANGE_MEMBER : GHOST_MAX_VIEW_RANGE_DEFAULT if(input) - client.rescale_view(input, 7, max_view) + client.rescale_view(input, 15, (max_view*2)+1) /mob/dead/observer/verb/boo() set category = "Ghost" @@ -767,8 +766,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp //Istype so we filter out points of interest that are not mobs if(client && mob_eye && istype(mob_eye)) client.eye = mob_eye - client.screen = list() if(mob_eye.hud_used) + client.screen = list() LAZYINITLIST(mob_eye.observers) mob_eye.observers |= src mob_eye.hud_used.show_hud(mob_eye.hud_used.hud_version, src) diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index ad64c53fc7..c8cf1a5f1b 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -1,25 +1,28 @@ -/mob/dead/observer/say(message) - message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if (!message) - return - +/mob/dead/observer/say(message) + message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN)) + + if (!message) + return + log_talk(src,"Ghost/[src.key] : [message]", LOGSAY) - - . = src.say_dead(message) - -/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) - var/atom/movable/to_follow = speaker - if(radio_freq) - var/atom/movable/virtualspeaker/V = speaker - - if(isAI(V.source)) - var/mob/living/silicon/ai/S = V.source - to_follow = S.eyeobj - else - to_follow = V.source - var/link = FOLLOW_LINK(src, to_follow) - // Recompose the message, because it's scrambled by default - message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode) - to_chat(src, "[link] [message]") - + + if(check_emote(message)) + return + + . = say_dead(message) + +/mob/dead/observer/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode) + var/atom/movable/to_follow = speaker + if(radio_freq) + var/atom/movable/virtualspeaker/V = speaker + + if(isAI(V.source)) + var/mob/living/silicon/ai/S = V.source + to_follow = S.eyeobj + else + to_follow = V.source + var/link = FOLLOW_LINK(src, to_follow) + // Recompose the message, because it's scrambled by default + message = compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode) + to_chat(src, "[link] [message]") + diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm new file mode 100644 index 0000000000..5487b5b284 --- /dev/null +++ b/code/modules/mob/emote.dm @@ -0,0 +1,48 @@ +//The code execution of the emote datum is located at code/datums/emotes.dm +/mob/emote(act, m_type = null, message = null) + act = lowertext(act) + var/param = message + var/custom_param = findchar(act, " ") + if(custom_param) + param = copytext(act, custom_param + 1, length(act) + 1) + act = copytext(act, 1, custom_param) + + var/datum/emote/E + E = E.emote_list[act] + if(!E) + to_chat(src, "Unusable emote '[act]'. Say *help for a list.") + return + E.run_emote(src, param, m_type) + +/datum/emote/flip + key = "flip" + key_third_person = "flips" + restraint_check = TRUE + mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + +/datum/emote/flip/run_emote(mob/user, params) + . = ..() + if(.) + user.SpinAnimation(7,1) + +/datum/emote/spin + key = "spin" + key_third_person = "spins" + restraint_check = TRUE + mob_type_allowed_typecache = list(/mob/living, /mob/dead/observer) + mob_type_ignore_stat_typecache = list(/mob/dead/observer) + +/datum/emote/spin/run_emote(mob/user) + . = ..() + if(.) + user.spin(20, 1) + + if(iscyborg(user) && user.has_buckled_mobs()) + var/mob/living/silicon/robot/R = user + GET_COMPONENT_FROM(riding_datum, /datum/component/riding, R) + if(riding_datum) + for(var/mob/M in R.buckled_mobs) + riding_datum.force_dismount(M) + else + R.unbuckle_all_mobs() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 486a918c06..cc89f700dc 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -205,8 +205,26 @@ /mob/proc/put_in_hands(obj/item/I, del_on_fail = FALSE) if(!I) return FALSE + + // If the item is a stack and we're already holding a stack then merge + if (istype(I, /obj/item/stack)) + var/obj/item/stack/I_stack = I + var/obj/item/stack/active_stack = get_active_held_item() + + if (istype(active_stack) && istype(I_stack, active_stack.merge_type)) + if (I_stack.merge(active_stack)) + to_chat(usr, "Your [active_stack.name] stack now contains [active_stack.get_amount()] [active_stack.singular_name]\s.") + return TRUE + else + var/obj/item/stack/inactive_stack = get_inactive_held_item() + if (istype(inactive_stack) && istype(I_stack, inactive_stack.merge_type)) + if (I_stack.merge(inactive_stack)) + to_chat(usr, "Your [inactive_stack.name] stack now contains [inactive_stack.get_amount()] [inactive_stack.singular_name]\s.") + return TRUE + if(put_in_active_hand(I)) return TRUE + var/hand = get_empty_held_index_for_side("l") if(!hand) hand = get_empty_held_index_for_side("r") diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 45f26d55c3..9c3bb25da3 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -16,7 +16,7 @@ /mob/living/carbon/monkey/handle_blood() - if(bodytemperature >= 225 && !(disabilities & NOCLONE)) //cryosleep or husked people do not pump the blood. + if(bodytemperature >= TCRYO && !(has_disability(DISABILITY_NOCLONE))) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL) blood_volume += 0.1 // regenerate blood VERY slowly @@ -28,7 +28,7 @@ bleed_rate = 0 return - if(bodytemperature >= 225 && !(disabilities & NOCLONE)) //cryosleep or husked people do not pump the blood. + if(bodytemperature >= TCRYO && !(has_disability(DISABILITY_NOCLONE))) //cryosleep or husked people do not pump the blood. //Blood regeneration if there is some space if(blood_volume < BLOOD_VOLUME_NORMAL && !(NOHUNGER in dna.species.species_traits)) @@ -201,13 +201,13 @@ return "blood" /mob/living/carbon/monkey/get_blood_id() - if(!(disabilities & NOCLONE)) + if(!(has_disability(DISABILITY_NOCLONE))) return "blood" /mob/living/carbon/human/get_blood_id() if(dna.species.exotic_blood) return dna.species.exotic_blood - else if((NOBLOOD in dna.species.species_traits) || (disabilities & NOCLONE)) + else if((NOBLOOD in dna.species.species_traits) || (has_disability(DISABILITY_NOCLONE))) return return "blood" @@ -252,8 +252,7 @@ drop.transfer_mob_blood_dna(src) return else - temp_blood_DNA = list() - temp_blood_DNA |= drop.blood_DNA.Copy() //we transfer the dna from the drip to the splatter + temp_blood_DNA = drop.return_blood_DNA() //we transfer the dna from the drip to the splatter qdel(drop)//the drip is replaced by a bigger splatter else drop = new(T, get_static_viruses()) @@ -266,7 +265,7 @@ B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses()) B.transfer_mob_blood_dna(src) //give blood info to the blood decal. if(temp_blood_DNA) - B.blood_DNA |= temp_blood_DNA + B.add_blood_DNA(temp_blood_DNA) /mob/living/carbon/human/add_splatter_floor(turf/T, small_drip) if(!(NOBLOOD in dna.species.species_traits)) @@ -278,7 +277,7 @@ var/obj/effect/decal/cleanable/xenoblood/B = locate() in T.contents if(!B) B = new(T) - B.blood_DNA["UNKNOWN DNA"] = "X*" + B.add_blood_DNA(list("UNKNOWN DNA" = "X*")) /mob/living/silicon/robot/add_splatter_floor(turf/T, small_drip) if(!T) diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index aef5489b04..e3b9f247f8 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -79,8 +79,8 @@ if(!brainmob.stored_dna) brainmob.stored_dna = new /datum/dna/stored(brainmob) C.dna.copy_dna(brainmob.stored_dna) - if(L.disabilities & NOCLONE) - brainmob.disabilities |= NOCLONE //This is so you can't just decapitate a husked guy and clone them without needing to get a new body + if(L.has_disability(DISABILITY_NOCLONE)) + brainmob.disabilities[DISABILITY_NOCLONE] = L.disabilities[DISABILITY_NOCLONE] var/obj/item/organ/zombie_infection/ZI = L.getorganslot(ORGAN_SLOT_ZOMBIE) if(ZI) brainmob.set_species(ZI.old_species) //For if the brain is cloned @@ -195,8 +195,10 @@ var/trauma_type if(ispath(trauma)) trauma_type = trauma + SSblackbox.record_feedback("tally", "traumas", 1, trauma_type) traumas += new trauma_type(arglist(list(src, permanent) + arguments)) else + SSblackbox.record_feedback("tally", "traumas", 1, trauma.type) traumas += trauma trauma.permanent = permanent @@ -209,6 +211,7 @@ possible_traumas += BT var/trauma_type = pick(possible_traumas) + SSblackbox.record_feedback("tally", "traumas", 1, trauma_type) traumas += new trauma_type(src, permanent) //Cure a random trauma of a certain subtype diff --git a/code/modules/mob/living/brain/status_procs.dm b/code/modules/mob/living/brain/status_procs.dm index 2baea2e7cd..735a0186bf 100644 --- a/code/modules/mob/living/brain/status_procs.dm +++ b/code/modules/mob/living/brain/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness -// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. /////////////////////////////////// EYE_BLIND //////////////////////////////////// diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 557137b24d..e4fed627f4 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -30,7 +30,6 @@ unique_name = 1 var/static/regex/alien_name_regex = new("alien (larva|sentinel|drone|hunter|praetorian|queen)( \\(\\d+\\))?") - devourable = TRUE /mob/living/carbon/alien/Initialize() verbs += /mob/living/proc/mob_sleep @@ -71,7 +70,7 @@ else bodytemperature += 1 * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) - if(bodytemperature > 360.15) + if(bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) //Body temperature is too hot. throw_alert("alien_fire", /obj/screen/alert/alien_fire) switch(bodytemperature) @@ -148,8 +147,6 @@ Des: Removes all infected images from the alien. mind.transfer_to(new_xeno) qdel(src) - // TODO make orbiters orbit the new xeno, or make xenos species rather than types - #undef HEAT_DAMAGE_LEVEL_1 #undef HEAT_DAMAGE_LEVEL_2 #undef HEAT_DAMAGE_LEVEL_3 diff --git a/code/modules/mob/living/carbon/alien/alien_defense.dm b/code/modules/mob/living/carbon/alien/alien_defense.dm index b0f76df80d..b55abb11f0 100644 --- a/code/modules/mob/living/carbon/alien/alien_defense.dm +++ b/code/modules/mob/living/carbon/alien/alien_defense.dm @@ -1,126 +1,126 @@ - -/mob/living/carbon/alien/get_eye_protection() - return ..() + 2 //potential cyber implants + natural eye protection - -/mob/living/carbon/alien/get_ear_protection() - return 2 //no ears - -/mob/living/carbon/alien/hitby(atom/movable/AM, skipcatch, hitpush) + +/mob/living/carbon/alien/get_eye_protection() + return ..() + 2 //potential cyber implants + natural eye protection + +/mob/living/carbon/alien/get_ear_protection() + return 2 //no ears + +/mob/living/carbon/alien/hitby(atom/movable/AM, skipcatch, hitpush) ..(AM, skipcatch = TRUE, hitpush = FALSE) - - -/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other. -As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble. -In all, this is a lot like the monkey code. /N -*/ -/mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M) - if(isturf(loc) && istype(loc.loc, /area/start)) - to_chat(M, "No attacking people at spawn, you jackass.") - return - - switch(M.a_intent) - - if ("help") - resting = 0 - AdjustStun(-60) - AdjustKnockdown(-60) - AdjustUnconscious(-60) - AdjustSleeping(-100) - visible_message("[M.name] nuzzles [src] trying to wake [p_them()] up!") - - if ("grab") - grabbedby(M) - - else - if(health > 0) - M.do_attack_animation(src, ATTACK_EFFECT_BITE) - playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) - visible_message("[M.name] bites [src]!", \ - "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) - adjustBruteLoss(1) - add_logs(M, src, "attacked") - updatehealth() - else - to_chat(M, "[name] is too injured for that.") - - -/mob/living/carbon/alien/attack_larva(mob/living/carbon/alien/larva/L) - return attack_alien(L) - - -/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M) - if(..()) //to allow surgery to return properly. - return 0 - - switch(M.a_intent) - if("help") - help_shake_act(M) - if("grab") - grabbedby(M) - if ("harm") - M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) - return 1 - if("disarm") - M.do_attack_animation(src, ATTACK_EFFECT_DISARM) - return 1 - return 0 - - -/mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M) - if(..()) - if (stat != DEAD) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) - apply_damage(rand(1, 3), BRUTE, affecting) - - -/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M) - . = ..() - if(.) - var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) - switch(M.melee_damage_type) - if(BRUTE) - adjustBruteLoss(damage) - if(BURN) - adjustFireLoss(damage) - if(TOX) - adjustToxLoss(damage) - if(OXY) - adjustOxyLoss(damage) - if(CLONE) - adjustCloneLoss(damage) - if(STAMINA) - adjustStaminaLoss(damage) - -/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) - if(..()) //successful slime attack - var/damage = rand(5, 35) - if(M.is_adult) - damage = rand(10, 40) - adjustBruteLoss(damage) - add_logs(M, src, "attacked") - updatehealth() - -/mob/living/carbon/alien/ex_act(severity, target, origin) - if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) - return - ..() - switch (severity) - if (1) - gib() - return - - if (2) - take_overall_damage(60, 60) - adjustEarDamage(30,120) - - if(3) - take_overall_damage(30,0) - if(prob(50)) - Unconscious(20) - adjustEarDamage(15,60) - -/mob/living/carbon/alien/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) - return 0 - -/mob/living/carbon/alien/acid_act(acidpwr, acid_volume) - return 0//aliens are immune to acid. + + +/*Code for aliens attacking aliens. Because aliens act on a hivemind, I don't see them as very aggressive with each other. +As such, they can either help or harm other aliens. Help works like the human help command while harm is a simple nibble. +In all, this is a lot like the monkey code. /N +*/ +/mob/living/carbon/alien/attack_alien(mob/living/carbon/alien/M) + if(isturf(loc) && istype(loc.loc, /area/start)) + to_chat(M, "No attacking people at spawn, you jackass.") + return + + switch(M.a_intent) + + if ("help") + resting = 0 + AdjustStun(-60) + AdjustKnockdown(-60) + AdjustUnconscious(-60) + AdjustSleeping(-100) + visible_message("[M.name] nuzzles [src] trying to wake [p_them()] up!") + + if ("grab") + grabbedby(M) + + else + if(health > 0) + M.do_attack_animation(src, ATTACK_EFFECT_BITE) + playsound(loc, 'sound/weapons/bite.ogg', 50, 1, -1) + visible_message("[M.name] bites [src]!", \ + "[M.name] bites [src]!", null, COMBAT_MESSAGE_RANGE) + adjustBruteLoss(1) + add_logs(M, src, "attacked") + updatehealth() + else + to_chat(M, "[name] is too injured for that.") + + +/mob/living/carbon/alien/attack_larva(mob/living/carbon/alien/larva/L) + return attack_alien(L) + + +/mob/living/carbon/alien/attack_hand(mob/living/carbon/human/M) + if(..()) //to allow surgery to return properly. + return 0 + + switch(M.a_intent) + if("help") + help_shake_act(M) + if("grab") + grabbedby(M) + if ("harm") + M.do_attack_animation(src, ATTACK_EFFECT_PUNCH) + return 1 + if("disarm") + M.do_attack_animation(src, ATTACK_EFFECT_DISARM) + return 1 + return 0 + + +/mob/living/carbon/alien/attack_paw(mob/living/carbon/monkey/M) + if(..()) + if (stat != DEAD) + var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected)) + apply_damage(rand(1, 3), BRUTE, affecting) + + +/mob/living/carbon/alien/attack_animal(mob/living/simple_animal/M) + . = ..() + if(.) + var/damage = rand(M.melee_damage_lower, M.melee_damage_upper) + switch(M.melee_damage_type) + if(BRUTE) + adjustBruteLoss(damage) + if(BURN) + adjustFireLoss(damage) + if(TOX) + adjustToxLoss(damage) + if(OXY) + adjustOxyLoss(damage) + if(CLONE) + adjustCloneLoss(damage) + if(STAMINA) + adjustStaminaLoss(damage) + +/mob/living/carbon/alien/attack_slime(mob/living/simple_animal/slime/M) + if(..()) //successful slime attack + var/damage = rand(5, 35) + if(M.is_adult) + damage = rand(10, 40) + adjustBruteLoss(damage) + add_logs(M, src, "attacked") + updatehealth() + +/mob/living/carbon/alien/ex_act(severity, target, origin) + if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) + return + ..() + switch (severity) + if (1) + gib() + return + + if (2) + take_overall_damage(60, 60) + adjustEarDamage(30,120) + + if(3) + take_overall_damage(30,0) + if(prob(50)) + Unconscious(20) + adjustEarDamage(15,60) + +/mob/living/carbon/alien/soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 5, deafen_pwr = 15) + return 0 + +/mob/living/carbon/alien/acid_act(acidpwr, acid_volume) + return 0//aliens are immune to acid. diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 0760453094..6153c5629f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -12,7 +12,7 @@ Doesn't work on other aliens/AI.*/ var/plasma_cost = 0 var/check_turf = FALSE has_action = TRUE - datum/action/spell_action/alien/action + base_action = /datum/action/spell_action/alien action_icon = 'icons/mob/actions/actions_xeno.dmi' action_icon_state = "spell_default" action_background_icon_state = "bg_alien" diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index e93fed311c..2462242e25 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -11,7 +11,7 @@ ..() /mob/living/carbon/alien/humanoid/hunter/movement_delay() - . = -1 //hunters are sanic + . = -1 //hunters are sanic . += ..() //but they still need to slow down on stun diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm index 404d285b25..f8cf430d74 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/praetorian.dm @@ -48,4 +48,4 @@ return 1 else to_chat(user, "We already have an alive queen.") - return 0 \ No newline at end of file + return 0 diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index c0577c0d61..375ef2318b 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -18,4 +18,4 @@ /mob/living/carbon/alien/humanoid/sentinel/movement_delay() - . = ..() \ No newline at end of file + . = ..() diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm index 5d85ace4a6..c6c675ead9 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/death.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm @@ -20,4 +20,4 @@ if(istype(node)) // just in case someone would ever add a diffirent node to hivenode slot node.queen_death() - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index fc759ec827..24dd3a7965 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -41,7 +41,7 @@ var/list/dat = list() dat += {"
    - [name] + [name]
    "} for(var/i in 1 to held_items.len) var/obj/item/I = get_item_for_held_index(i) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 101f1495e2..2e2d1f4188 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -65,4 +65,4 @@ /mob/living/carbon/alien/larva/stripPanelEquip(obj/item/what, mob/who) to_chat(src, "You don't have the dexterity to do this!") - return \ No newline at end of file + return diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index 97d0509dfb..de543651eb 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -2,12 +2,12 @@ icon_state = "xgibmid2" var/list/alien_powers = list() -/obj/item/organ/alien/New() +/obj/item/organ/alien/Initialize() + . = ..() for(var/A in alien_powers) if(ispath(A)) alien_powers -= A alien_powers += new A(src) - ..() /obj/item/organ/alien/Insert(mob/living/carbon/M, special = 0) ..() diff --git a/code/modules/mob/living/carbon/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm index 33ba8fea1d..86b7f3508c 100644 --- a/code/modules/mob/living/carbon/alien/status_procs.dm +++ b/code/modules/mob/living/carbon/alien/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, ear damage, -// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. /////////////////////////////////// STUN //////////////////////////////////// diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 819ed8072f..59b0fcf55f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -8,7 +8,7 @@ GLOB.carbon_list += src /mob/living/carbon/Destroy() -//This must be done first, so the mob ghosts correctly before DNA etc is nulled + //This must be done first, so the mob ghosts correctly before DNA etc is nulled . = ..() QDEL_LIST(internal_organs) @@ -157,7 +157,7 @@ if(!throwable_mob.buckled) thrown_thing = throwable_mob stop_pulling() - if(disabilities & PACIFISM) + if(has_disability(DISABILITY_PACIFISM)) to_chat(src, "You gently let go of [throwable_mob].") var/turf/start_T = get_turf(loc) //Get the start and target tile for the descriptors var/turf/end_T = get_turf(target) @@ -170,7 +170,7 @@ thrown_thing = I dropItemToGround(I) - if(disabilities & PACIFISM && I.throwforce) + if(has_disability(DISABILITY_PACIFISM) && I.throwforce) to_chat(src, "You set [I] down gently on the ground.") return @@ -365,16 +365,9 @@ to_chat(src, "You successfully [cuff_break ? "break" : "remove"] [I].") if(cuff_break) + . = !((I == handcuffed) || (I == legcuffed)) qdel(I) - if(I == handcuffed) - handcuffed = null - update_handcuffed() - return - else if(I == legcuffed) - legcuffed = null - update_inv_legcuffed() - return - return TRUE + return else if(I == handcuffed) @@ -409,7 +402,7 @@ dropItemToGround(I) var/modifier = 0 - if(disabilities & CLUMSY) + if(has_disability(DISABILITY_CLUMSY)) modifier -= 40 //Clumsy people are more likely to hit themselves -Honk! switch(rand(1,100)+modifier) //91-100=Nothing special happens @@ -518,7 +511,7 @@ health = maxHealth - getOxyLoss() - getToxLoss() - getCloneLoss() - total_burn - total_brute update_stat() if(((maxHealth - total_burn) < HEALTH_THRESHOLD_DEAD) && stat == DEAD ) - become_husk() + become_husk("burn") med_hud_set_health() /mob/living/carbon/update_sight() @@ -774,7 +767,7 @@ reagents.addiction_list = list() cure_all_traumas(TRUE, TRUE) ..() - // heal ears after healing disabilities, since ears check DEAF disability + // heal ears after healing disabilities, since ears check DISABILITY_DEAF disability // when healing. restoreEars() diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 0bfa287a09..60ab5a71e9 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -78,7 +78,6 @@ send_item_attack_message(I, user, affecting.name) if(I.force) apply_damage(I.force, I.damtype, affecting) - damage_clothes(I.force, I.damtype, "melee", affecting.body_zone) if(I.damtype == BRUTE && affecting.status == BODYPART_ORGANIC) if(prob(33)) I.add_mob_blood(src) @@ -306,11 +305,15 @@ if(eyes.eye_damage > 20) if(prob(eyes.eye_damage - 20)) - if(become_nearsighted()) + if(!has_disability(DISABILITY_NEARSIGHT)) to_chat(src, "Your eyes start to burn badly!") + become_nearsighted(EYE_DAMAGE) + else if(prob(eyes.eye_damage - 25)) - if(become_blind()) + if(!has_disability(DISABILITY_BLIND)) to_chat(src, "You can't see anything!") + become_blind(EYE_DAMAGE) + else to_chat(src, "Your eyes are really starting to hurt. This can't be good for you!") if(has_bane(BANE_LIGHT)) diff --git a/code/modules/mob/living/carbon/carbon_movement.dm b/code/modules/mob/living/carbon/carbon_movement.dm index e2555d4a8b..37b5539d33 100644 --- a/code/modules/mob/living/carbon/carbon_movement.dm +++ b/code/modules/mob/living/carbon/carbon_movement.dm @@ -19,7 +19,7 @@ if(stat == SOFT_CRIT) . += SOFTCRIT_ADD_SLOWDOWN - + /mob/living/carbon/slip(knockdown_amount, obj/O, lube) if(movement_type & FLYING) return 0 diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index b8d9d510fd..99bb6d2250 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -11,21 +11,18 @@ if (handcuffed) msg += "[t_He] [t_is] [icon2html(handcuffed, user)] handcuffed!\n" if (head) - msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [src.head] on [t_his] head. \n" + msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head. \n" if (wear_mask) - msg += "[t_He] [t_is] wearing [icon2html(wear_mask, user)] \a [src.wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_is] wearing [wear_mask.get_examine_string(user)] on [t_his] face.\n" if (wear_neck) - msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" if (back) - msg += "[t_He] [t_has] [icon2html(back, user)] \a [src.back] on [t_his] back.\n" + msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" var/appears_dead = 0 if (stat == DEAD) appears_dead = 1 @@ -70,7 +67,7 @@ else msg += "[t_He] [t_is] severely deformed!\n" - if(disabilities & DUMB) + if(has_disability(DISABILITY_DUMB)) msg += "[t_He] seem[p_s()] to be clumsy and unable to think.\n" if(fire_stacks > 0) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 4b1afe0780..95788da39d 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -48,7 +48,7 @@ /mob/living/carbon/proc/Drain() - become_husk() - disabilities |= NOCLONE + become_husk(CHANGELING_DRAIN) + add_disability(DISABILITY_NOCLONE, CHANGELING_DRAIN) blood_volume = 0 return 1 diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 991fd7a94d..752a9d6471 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -151,7 +151,7 @@ var/mob/living/carbon/human/H = user if(H.dna && H.dna.species && (H.dna.features["wings"] != "None")) return TRUE - + /mob/living/carbon/human/proc/OpenWings() if(!dna || !dna.species) return diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 39caec803b..052f493d1d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -21,54 +21,30 @@ if(U.attached_accessory) accessory_msg += " with [icon2html(U.attached_accessory, user)] \a [U.attached_accessory]" - if(w_uniform.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] [w_uniform.gender==PLURAL?"some":"a"] blood-stained [w_uniform.name][accessory_msg]!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(w_uniform, user)] \a [w_uniform][accessory_msg].\n" - + msg += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg].\n" //head if(head) - if(head.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on [t_his] head!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(head, user)] \a [head] on [t_his] head.\n" - + msg += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head.\n" //suit/armor if(wear_suit) - if(wear_suit.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] [wear_suit.gender==PLURAL?"some":"a"] blood-stained [wear_suit.name]!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(wear_suit, user)] \a [wear_suit].\n" - + msg += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)].\n" //suit/armor storage if(s_store) - if(s_store.blood_DNA) - msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] [s_store.gender==PLURAL?"some":"a"] blood-stained [s_store.name] on [t_his] [wear_suit.name]!\n" - else - msg += "[t_He] [t_is] carrying [icon2html(s_store, user)] \a [s_store] on [t_his] [wear_suit.name].\n" - + msg += "[t_He] [t_is] carrying [s_store.get_examine_string(user)] on [t_his] [wear_suit.name].\n" //back if(back) - if(back.blood_DNA) - msg += "[t_He] [t_has] [icon2html(back, user)] [back.gender==PLURAL?"some":"a"] blood-stained [back] on [t_his] back.\n" - else - msg += "[t_He] [t_has] [icon2html(back, user)] \a [back] on [t_his] back.\n" + msg += "[t_He] [t_has] [back.get_examine_string(user)] on [t_his] back.\n" //Hands for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "[t_He] [t_is] holding [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in [t_his] [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "[t_He] [t_is] holding [icon2html(I, user)] \a [I] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "[t_He] [t_is] holding [I.get_examine_string(user)] in [t_his] [get_held_index_name(get_held_index_of_item(I))].\n" + GET_COMPONENT(FR, /datum/component/forensics) //gloves if(gloves && !(slot_gloves in obscured)) - if(gloves.blood_DNA) - msg += "[t_He] [t_has] [icon2html(gloves, user)] [gloves.gender==PLURAL?"some":"a"] blood-stained [gloves.name] on [t_his] hands!\n" - else - msg += "[t_He] [t_has] [icon2html(gloves, user)] \a [gloves] on [t_his] hands.\n" - else if(blood_DNA) + msg += "[t_He] [t_has] [gloves.get_examine_string(user)] on [t_his] hands.\n" + else if(FR && length(FR.blood_DNA)) var/hand_number = get_num_arms() if(hand_number) msg += "[t_He] [t_has] [hand_number > 1 ? "" : "a"] blood-stained hand[hand_number > 1 ? "s" : ""]!\n" @@ -84,42 +60,33 @@ //belt if(belt) - if(belt.blood_DNA) - msg += "[t_He] [t_has] [icon2html(belt, user)] [belt.gender==PLURAL?"some":"a"] blood-stained [belt.name] about [t_his] waist!\n" - else - msg += "[t_He] [t_has] [icon2html(belt, user)] \a [belt] about [t_his] waist.\n" + msg += "[t_He] [t_has] [belt.get_examine_string(user)] about [t_his] waist.\n" //shoes if(shoes && !(slot_shoes in obscured)) - if(shoes.blood_DNA) - msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] [shoes.gender==PLURAL?"some":"a"] blood-stained [shoes.name] on [t_his] feet!\n" - else - msg += "[t_He] [t_is] wearing [icon2html(shoes, user)] \a [shoes] on [t_his] feet.\n" + msg += "[t_He] [t_is] wearing [shoes.get_examine_string(user)] on [t_his] feet.\n" //mask if(wear_mask && !(slot_wear_mask in obscured)) - if(wear_mask.blood_DNA) - msg += "[t_He] [t_has] [icon2html(wear_mask, user)] [wear_mask.gender==PLURAL?"some":"a"] blood-stained [wear_mask.name] on [t_his] face!\n" - else - msg += "[t_He] [t_has] [icon2html(wear_mask, user)] \a [wear_mask] on [t_his] face.\n" + msg += "[t_He] [t_has] [wear_mask.get_examine_string(user)] on [t_his] face.\n" if (wear_neck && !(slot_neck in obscured)) - msg += "[t_He] [t_is] wearing [icon2html(wear_neck, user)] \a [src.wear_neck] around [t_his] neck.\n" + msg += "[t_He] [t_is] wearing [wear_neck.get_examine_string(user)] around [t_his] neck.\n" //eyes if(glasses && !(slot_glasses in obscured)) - if(glasses.blood_DNA) - msg += "[t_He] [t_has] [icon2html(glasses, user)] [glasses.gender==PLURAL?"some":"a"] blood-stained [glasses] covering [t_his] eyes!\n" - else - msg += "[t_He] [t_has] [icon2html(glasses, user)] \a [glasses] covering [t_his] eyes.\n" + msg += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes.\n" //ears if(ears && !(slot_ears in obscured)) - msg += "[t_He] [t_has] [icon2html(ears, user)] \a [ears] on [t_his] ears.\n" + msg += "[t_He] [t_has] [ears.get_examine_string(user)] on [t_his] ears.\n" //ID if(wear_id) - msg += "[t_He] [t_is] wearing [icon2html(wear_id, user)] \a [wear_id].\n" + msg += "[t_He] [t_is] wearing [wear_id.get_examine_string(user)].\n" + + //Status effects + msg += status_effect_examines() //Jitters switch(jitteriness) @@ -231,14 +198,13 @@ msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n" else msg += "[t_He] [t_is] quite chubby.\n" - switch(disgust) if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) - msg += "[t_He] looks a bit grossed out.\n" + msg += "[t_He] look[p_s()] a bit grossed out.\n" if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) - msg += "[t_He] looks really grossed out.\n" + msg += "[t_He] look[p_s()] really grossed out.\n" if(DISGUST_LEVEL_DISGUSTED to INFINITY) - msg += "[t_He] looks disgusted.\n" + msg += "[t_He] look[p_s()] extremely disgusted.\n" if(blood_volume < BLOOD_VOLUME_SAFE) msg += "[t_He] [t_has] pale skin.\n" @@ -273,7 +239,7 @@ msg += "[t_He] look[p_s()] like a drunken mess.\n" if(91.01 to INFINITY) msg += "[t_He] [t_is] a shitfaced, slobbering wreck.\n" - + for (var/I in src.vore_organs) var/datum/belly/B = vore_organs[I] msg += B.get_examine_msg() @@ -285,7 +251,7 @@ if(stat == UNCONSCIOUS) msg += "[t_He] [t_is]n't responding to anything around [t_him] and seem[p_s()] to be asleep.\n" else - if(disabilities & DUMB) + if(has_disability(DISABILITY_DUMB)) msg += "[t_He] [t_has] a stupid expression on [t_his] face.\n" if(InCritical()) msg += "[t_He] [t_is] barely conscious.\n" @@ -343,6 +309,7 @@ R = find_record("name", perpname, GLOB.data_core.security) if(R) criminal = R.fields["criminal"] + msg += "Criminal status: \[[criminal]\]\n" msg += "Security record: \[View\] " msg += "\[Add crime\] " @@ -350,7 +317,20 @@ msg += "\[Add comment\]\n" if(print_flavor_text() && get_visible_name() != "Unknown")//Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation. msg += "[print_flavor_text()]\n" - + msg += "*---------*" to_chat(user, msg) + +/mob/living/proc/status_effect_examines(pronoun_replacement) //You can include this in any mob's examine() to show the examine texts of status effects! + var/list/dat = list() + if(!pronoun_replacement) + pronoun_replacement = p_they(TRUE) + for(var/V in status_effects) + var/datum/status_effect/E = V + if(E.examine_text) + var/new_text = replacetext(E.examine_text, "SUBJECTPRONOUN", pronoun_replacement) + new_text = replacetext(new_text, "[pronoun_replacement] is", "[pronoun_replacement] [p_are()]") //To make sure something become "They are" or "She is", not "They are" and "She are" + dat += "[new_text]\n" //dat.Join("\n") doesn't work here, for some reason + if(dat.len) + return dat.Join() diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index f0c630421d..b3ae66d0c3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -25,6 +25,7 @@ create_internal_organs() //most of it is done in set_species now, this is only for parent call handcrafting = new() + AddComponent(/datum/component/redirect, list(COMSIG_COMPONENT_CLEAN_ACT), CALLBACK(src, .proc/clean_blood)) . = ..() @@ -263,7 +264,7 @@ // Display a warning if the user mocks up to_chat(src, "You feel your [pocket_side] pocket being fumbled with!") - ..() + ..() ///////HUDs/////// @@ -576,8 +577,8 @@ threatcount += 2 //Check for dresscode violations - if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/syndi) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi)) - threatcount += 6 + if(istype(head, /obj/item/clothing/head/wizard) || istype(head, /obj/item/clothing/head/helmet/space/hardsuit/wizard)) + threatcount += 2 //Check for nonhuman scum if(dna && dna.species.id && !(dna.species.id in list("human" , "lizard", "mammal", "avian", "aquatic", "insect"))) @@ -589,7 +590,7 @@ //Agent cards lower threatlevel. if(istype(idcard, /obj/item/card/id/syndicate)) - threatcount -= 2 + threatcount -= 5 return threatcount @@ -683,19 +684,18 @@ if(..()) dropItemToGround(I) -/mob/living/carbon/human/clean_blood() - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves() +/mob/living/carbon/human/proc/clean_blood(strength) + if(strength < CLEAN_STRENGTH_BLOOD) + return + if(gloves) + if(gloves.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) + update_inv_gloves() else - ..() // Clear the Blood_DNA list - if(H.bloody_hands) - H.bloody_hands = 0 - H.update_inv_gloves() + if(bloody_hands) + bloody_hands = 0 + update_inv_gloves() update_icons() //apply the now updated overlays to the mob - /mob/living/carbon/human/wash_cream() if(creamed) //clean both to prevent a rare bug cut_overlay(mutable_appearance('icons/effects/creampie.dmi', "creampie_lizard")) @@ -847,7 +847,8 @@ return TRUE /mob/living/carbon/human/update_gravity(has_gravity,override = 0) - override = dna.species.override_float + if(dna && dna.species) //prevents a runtime while a human is being monkeyfied + override = dna.species.override_float ..() /mob/living/carbon/human/vomit(lost_nutrition = 10, blood = 0, stun = 1, distance = 0, message = 1, toxic = 0) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index e3e1271132..b216424dbb 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -44,7 +44,10 @@ if(mind.martial_art && mind.martial_art.deflection_chance) //Some martial arts users can deflect projectiles! if(prob(mind.martial_art.deflection_chance)) if(!lying && dna && !dna.check_mutation(HULK)) //But only if they're not lying down, and hulks can't do it - visible_message("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons!", "You deflect the projectile!") + if(mind.martial_art.deflection_chance >= 100) //if they can NEVER be hit, lets clue sec in ;) + visible_message("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons!", "You deflect the projectile!") + else + visible_message("[src] deflects the projectile!", "You deflect the projectile!") playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, 1) return 0 @@ -140,8 +143,8 @@ return ..() /mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) - if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) - vore_attack(user, pulling) + if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && (has_disability(DISABILITY_FAT)) && ismonkey(pulling)) + devour_mob(pulling) else ..() @@ -180,7 +183,6 @@ visible_message("[message]", \ "[message]") adjustBruteLoss(15) - damage_clothes(15, BRUTE, "melee") return 1 /mob/living/carbon/human/attack_hand(mob/user) @@ -200,7 +202,8 @@ return 0 if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stunned instead. - if(dropItemToGround(get_active_held_item())) + var/obj/item/I = get_active_held_item() + if(I && dropItemToGround(I)) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] disarmed [src]!", \ "[M] disarmed [src]!") @@ -221,7 +224,6 @@ return 0 if(stat != DEAD) apply_damage(damage, BRUTE, affecting, run_armor_check(affecting, "melee")) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) return 1 /mob/living/carbon/human/attack_alien(mob/living/carbon/alien/humanoid/M) @@ -251,10 +253,10 @@ if(!dismembering_strike(M, M.zone_selected)) //Dismemberment successful return 1 apply_damage(damage, BRUTE, affecting, armor_block) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) if(M.a_intent == INTENT_DISARM) //Always drop item in hand, if no item, get stun instead. - if(dropItemToGround(get_active_held_item())) + var/obj/item/I = get_active_held_item() + if(I && dropItemToGround(I)) playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) visible_message("[M] disarmed [src]!", \ "[M] disarmed [src]!") @@ -279,7 +281,6 @@ affecting = get_bodypart("chest") var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M) @@ -296,7 +297,6 @@ affecting = get_bodypart("chest") var/armor = run_armor_check(affecting, "melee", armour_penetration = M.armour_penetration) apply_damage(damage, M.melee_damage_type, affecting, armor) - damage_clothes(damage, M.melee_damage_type, "melee", affecting.body_zone) /mob/living/carbon/human/attack_slime(mob/living/simple_animal/slime/M) @@ -317,7 +317,6 @@ affecting = get_bodypart("chest") var/armor_block = run_armor_check(affecting, "melee") apply_damage(damage, BRUTE, affecting, armor_block) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) @@ -335,11 +334,9 @@ Unconscious(20) update |= temp.receive_damage(dmg, 0) playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - damage_clothes(dmg, BRUTE, "melee", temp.body_zone) if("fire") update |= temp.receive_damage(0, dmg) playsound(src, 'sound/items/welder.ogg', 50, 1) - damage_clothes(dmg, BURN, "melee", temp.body_zone) if("tox") M.mech_toxin_damage(src) else @@ -374,6 +371,9 @@ throw_at(throw_target, 200, 4) damage_clothes(400 - bomb_armor, BRUTE, "bomb") else + for(var/I in contents) + var/atom/A = I + A.ex_act(severity) gib() return diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index d1d657652b..46212698b2 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -91,19 +91,8 @@ return wear_id.GetID() -/mob/living/carbon/human/abiotic(full_body = 0) - var/abiotic_hands = FALSE - for(var/obj/item/I in held_items) - if(!(I.flags_1 & NODROP_1)) - abiotic_hands = TRUE - break - if(full_body && abiotic_hands && ((back && !(back.flags_1&NODROP_1)) || (wear_mask && !(wear_mask.flags_1&NODROP_1)) || (head && !(head.flags_1&NODROP_1)) || (shoes && !(shoes.flags_1&NODROP_1)) || (w_uniform && !(w_uniform.flags_1&NODROP_1)) || (wear_suit && !(wear_suit.flags_1&NODROP_1)) || (glasses && !(glasses.flags_1&NODROP_1)) || (ears && !(ears.flags_1&NODROP_1)) || (gloves && !(gloves.flags_1&NODROP_1)) ) ) - return TRUE - return abiotic_hands - - /mob/living/carbon/human/IsAdvancedToolUser() - if(disabilities & MONKEYLIKE) + if(has_disability(DISABILITY_MONKEYLIKE)) return FALSE return TRUE//Humans can use guns and such diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index c90d1a0231..ae78e1e585 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -23,7 +23,7 @@ . = 1 /mob/living/carbon/human/mob_negates_gravity() - return ((shoes && shoes.negates_gravity()) || dna.species.negates_gravity(src)) + return ((shoes && shoes.negates_gravity()) || (dna.species.negates_gravity(src))) /mob/living/carbon/human/Move(NewLoc, direct) . = ..() @@ -51,8 +51,7 @@ FP.blood_state = S.blood_state FP.entered_dirs |= dir FP.bloodiness = S.bloody_shoes[S.blood_state] - BLOOD_LOSS_IN_SPREAD - if(S.blood_DNA && S.blood_DNA.len) - FP.transfer_blood_dna(S.blood_DNA) + FP.add_blood_DNA(S.return_blood_DNA()) FP.update_icon() update_inv_shoes() //End bloody footprints diff --git a/code/modules/mob/living/carbon/human/interactive.dm b/code/modules/mob/living/carbon/human/interactive.dm index 38dfad5787..426bc39907 100644 --- a/code/modules/mob/living/carbon/human/interactive.dm +++ b/code/modules/mob/living/carbon/human/interactive.dm @@ -339,7 +339,7 @@ if(TRAITS & TRAIT_SMART) smartness = 75 else if(TRAITS & TRAIT_DUMB) - disabilities |= CLUMSY + add_disability(DISABILITY_CLUMSY, GENETIC_MUTATION) smartness = 25 if(TRAITS & TRAIT_MEAN) @@ -1622,4 +1622,4 @@ TRAITS |= TRAIT_ROBUST TRAITS |= TRAIT_SMART faction += "bot_power" - . = ..() \ No newline at end of file + . = ..() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 4f41c2d40c..4dd26ebe6b 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -187,7 +187,7 @@ if(G.tint) update_tint() if(G.vision_correction) - if(disabilities & NEARSIGHT) + if(has_disability(DISABILITY_NEARSIGHT)) overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) adjust_eye_damage(0) if(G.vision_flags || G.darkness_view || G.invis_override || G.invis_view || !isnull(G.lighting_alpha)) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a84683c5ae..5254c6aa0e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -32,8 +32,7 @@ handle_arousal() if(..()) //not dead - for(var/datum/mutation/human/HM in dna.mutations) - HM.on_life(src) + handle_active_genes() if(stat != DEAD) //heart attack stuff @@ -72,6 +71,10 @@ else if(eye_blurry) //blurry eyes heal slowly adjust_blurriness(-1) + if(has_disability(DISABILITY_PACIFISM) && a_intent == INTENT_HARM) + to_chat(src, "You don't feel like harming anybody.") + a_intent_change(INTENT_HELP) + /mob/living/carbon/human/handle_mutations_and_radiation() if(!dna || !dna.species.handle_mutations_and_radiation(src)) ..() @@ -93,19 +96,18 @@ failed_last_breath = 1 - if(dna && dna.species) - var/datum/species/S = dna.species + var/datum/species/S = dna.species - if(S.breathid == "o2") - throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) - else if(S.breathid == "tox") - throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) - else if(S.breathid == "co2") - throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) - else if(S.breathid == "n2") - throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) + if(S.breathid == "o2") + throw_alert("not_enough_oxy", /obj/screen/alert/not_enough_oxy) + else if(S.breathid == "tox") + throw_alert("not_enough_tox", /obj/screen/alert/not_enough_tox) + else if(S.breathid == "co2") + throw_alert("not_enough_co2", /obj/screen/alert/not_enough_co2) + else if(S.breathid == "n2") + throw_alert("not_enough_nitro", /obj/screen/alert/not_enough_nitro) - return 0 + return FALSE else if(istype(L, /obj/item/organ/lungs)) var/obj/item/organ/lungs/lun = L @@ -153,7 +155,7 @@ //END FIRE CODE -//This proc returns a number made up of the flags_1 for body parts which you are protected on. (such as HEAD, CHEST, GROIN, etc. See setup.dm for the full list) +//This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, CHEST, GROIN, etc. See setup.dm for the full list) /mob/living/carbon/human/proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. var/thermal_protection_flags = 0 //Handle normal clothing @@ -238,15 +240,14 @@ /mob/living/carbon/human/proc/get_cold_protection(temperature) if(dna.check_mutation(COLDRES)) - return 1 //Fully protected from the cold. - - if(dna && (RESISTCOLD in dna.species.species_traits)) - return 1 + return TRUE //Fully protected from the cold. if(istype(loc, /obj/item/device/dogborg/sleeper)) return 1 //freezing to death in sleepers ruins fun. if(ismob(loc)) return 1 //because lazy and being inside somemone insulates you from space + if(RESISTCOLD in dna.species.species_traits) + return TRUE temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. var/thermal_protection_flags = get_cold_protection_flags(temperature) @@ -343,6 +344,9 @@ heart.beating = !status +/mob/living/carbon/human/proc/handle_active_genes() + for(var/datum/mutation/human/HM in dna.mutations) + HM.on_life(src) /mob/living/carbon/human/proc/handle_heart() if(!can_heartattack()) @@ -382,12 +386,22 @@ All effects don't start immediately, but rather get worse over time; the rate is 81-90: Extremely high alcohol content - light brain damage, passing out 91-100: Dangerously toxic - swift death */ - +#define BALLMER_POINTS 5 +GLOBAL_LIST_INIT(ballmer_good_msg, list("Hey guys, what if we rolled out a bluespace wiring system so mice can't destroy the powergrid anymore?", + "Hear me out here. What if, and this is just a theory, we made R&D controllable from our PDAs?", + "I'm thinking we should roll out a git repository for our research under the AGPLv3 license so that we can share it among the other stations freely.", + "I dunno about you guys, but IDs and PDAs being separate is clunky as fuck. Maybe we should merge them into a chip in our arms? That way they can't be stolen easily.", + "Why the fuck aren't we just making every pair of shoes into galoshes? We have the technology.")) +GLOBAL_LIST_INIT(ballmer_windows_me_msg, list("Yo man, what if, we like, uh, put a webserver that's automatically turned on with default admin passwords into every PDA?", + "So like, you know how we separate our codebase from the master copy that runs on our consumer boxes? What if we merged the two and undid the separation between codebase and server?", + "Dude, radical idea: H.O.N.K mechs but with no bananium required.", + "Best idea ever: Disposal pipes instead of hallways.")) /mob/living/carbon/human/handle_status_effects() ..() + + if(drunkenness) drunkenness = max(drunkenness - (drunkenness * 0.04), 0) - if(drunkenness >= 6) if(prob(25)) slurring += 2 @@ -395,7 +409,22 @@ All effects don't start immediately, but rather get worse over time; the rate is if(drunkenness >= 11 && slurring < 5) slurring += 1.2 - + if(mind && (mind.assigned_role == "Scientist" || mind.assigned_role == "Research Director")) + if(SSresearch.science_tech) + if(drunkenness >= 12.9 && drunkenness <= 13.8) + drunkenness = round(drunkenness, 0.01) + var/ballmer_percent = 0 + if(drunkenness == 13.35) // why run math if I dont have to + ballmer_percent = 1 + else + ballmer_percent = (-abs(drunkenness - 13.35) / 0.9) + 1 + if(prob(5)) + say(pick(GLOB.ballmer_good_msg)) + SSresearch.science_tech.research_points += (BALLMER_POINTS * ballmer_percent) + if(drunkenness > 26) // by this point you're into windows ME territory + if(prob(5)) + SSresearch.science_tech.research_points -= BALLMER_POINTS + say(pick(GLOB.ballmer_windows_me_msg)) if(drunkenness >= 41) if(prob(25)) confused += 2 @@ -422,7 +451,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(drunkenness >= 91) adjustBrainLoss(0.4, 60) if(prob(20) && !stat) - if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && (z in GLOB.station_z_levels)) //QoL mainly + if(SSshuttle.emergency.mode == SHUTTLE_DOCKED && is_station_level(z)) //QoL mainly to_chat(src, "You're so tired... but you can't miss that shuttle...") else to_chat(src, "Just a quick nap...") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 866c14242f..05cb67cdaa 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -29,8 +29,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/meat = /obj/item/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing var/skinned_type var/liked_food = NONE - var/disliked_food = NONE - var/toxic_food = NONE + var/disliked_food = GROSS + var/toxic_food = TOXIC var/list/no_equip = list() // slots the race can't equip stuff to var/nojumpsuit = 0 // this is sorta... weird. it basically lets you equip stuff that usually needs jumpsuits without one, like belts and pockets and ids var/blacklisted = 0 //Flag to exclude from green slime core species. @@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/damage_overlay_type = "human" //what kind of damage overlays (if any) appear on our species when wounded? var/fixed_mut_color = "" //to use MUTCOLOR with a fixed color that's independent of dna.feature["mcolor"] - // species flags_1. these can be found in flags_1.dm + // species flags. these can be found in flags.dm var/list/species_traits = list() var/attack_verb = "punch" // punch-specific attack verb @@ -125,12 +125,11 @@ GLOBAL_LIST_EMPTY(roundstart_races) randname += " [pick(GLOB.last_names)]" return randname - + //Called when cloning, copies some vars that should be kept /datum/species/proc/copy_properties_from(datum/species/old_species) return - //Please override this locally if you want to define when what species qualifies for what rank if human authority is enforced. /datum/species/proc/qualifies_for_rank(rank, list/features) if(rank in GLOB.command_positions) @@ -312,7 +311,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!HD) //Decapitated return - if(H.disabilities & HUSK) + if(H.has_disability(DISABILITY_HUSK)) return var/datum/sprite_accessory/S var/list/standing = list() @@ -453,7 +452,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/obj/item/bodypart/head/HD = H.get_bodypart("head") - if(HD && !(H.disabilities & HUSK)) + if(HD && !(H.has_disability(DISABILITY_HUSK))) // lipstick if(H.lip_style && (LIPS in species_traits)) var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[H.lip_style]", -BODY_LAYER) @@ -724,7 +723,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(S.center) accessory_overlay = center_image(accessory_overlay, S.dimension_x, S.dimension_y) - if(!(H.disabilities & HUSK)) + if(!(H.has_disability(DISABILITY_HUSK))) if(!forced_colour) switch(S.color_src) if(MUTCOLORS) @@ -1093,7 +1092,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/get_spans() return list() -/datum/species/proc/check_weakness(obj/item/weapon, mob/living/attacker) +/datum/species/proc/check_weakness(obj/item, mob/living/attacker) return 0 //////// @@ -1102,17 +1101,17 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/handle_digestion(mob/living/carbon/human/H) - //The fucking FAT mutation is the dumbest shit ever. It makes the code so difficult to work with - if(H.disabilities & FAT)//I share your pain, past coder. + //The fucking DISABILITY_FAT mutation is the dumbest shit ever. It makes the code so difficult to work with + if(H.has_disability(DISABILITY_FAT))//I share your pain, past coder. if(H.overeatduration < 100) to_chat(H, "You feel fit again!") - H.disabilities &= ~FAT + H.remove_disability(DISABILITY_FAT, OBESITY) H.update_inv_w_uniform() H.update_inv_wear_suit() else if(H.overeatduration > 500) to_chat(H, "You suddenly feel blubbery!") - H.disabilities |= FAT + H.add_disability(DISABILITY_FAT, OBESITY) H.update_inv_w_uniform() H.update_inv_wear_suit() @@ -1269,7 +1268,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) . += (health_deficiency / 25) if((hungry >= 70) && !flight) //Being hungry won't stop you from using flightpack controls/flapping your wings although it probably will in the wing case but who cares. . += hungry / 50 - if(H.disabilities & FAT) + if(H.has_disability(DISABILITY_FAT)) . += (1.5 - flight) if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT) . += (BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR @@ -1315,7 +1314,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/harm(mob/living/carbon/human/user, mob/living/carbon/human/target, datum/martial_art/attacker_style) - if(user.disabilities & PACIFISM) + if(user.has_disability(DISABILITY_PACIFISM)) to_chat(user, "You don't want to harm [target]!") return FALSE if(target.check_block()) @@ -1388,7 +1387,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) return 1 else user.do_attack_animation(target, ATTACK_EFFECT_DISARM) - + if(target.w_uniform) target.w_uniform.add_fingerprint(user) var/randomized_zone = ran_zone(user.zone_selected) @@ -1479,7 +1478,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/weakness = H.check_weakness(I, user) apply_damage(I.force * weakness, I.damtype, def_zone, armor_block, H) - H.damage_clothes(I.force, I.damtype, "melee", affecting.body_zone) H.send_item_attack_message(I, user, hit_area) diff --git a/code/modules/mob/living/carbon/human/species_types/angel.dm b/code/modules/mob/living/carbon/human/species_types/angel.dm index de0120028c..fed10446f1 100644 --- a/code/modules/mob/living/carbon/human/species_types/angel.dm +++ b/code/modules/mob/living/carbon/human/species_types/angel.dm @@ -136,4 +136,4 @@ H.movement_type &= ~FLYING override_float = FALSE H.pass_flags &= ~PASSTABLE - H.CloseWings() + H.CloseWings() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/corporate.dm b/code/modules/mob/living/carbon/human/species_types/corporate.dm index d78d2b5262..bc1fcc9b1e 100644 --- a/code/modules/mob/living/carbon/human/species_types/corporate.dm +++ b/code/modules/mob/living/carbon/human/species_types/corporate.dm @@ -16,4 +16,4 @@ blacklisted = 1 use_skintones = 0 species_traits = list(SPECIES_ORGANIC,RADIMMUNE,VIRUSIMMUNE,NOBLOOD,PIERCEIMMUNE,EYECOLOR,NODISMEMBER,NOHUNGER) - sexes = 0 + sexes = 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 2b86d2945d..daf32e0381 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -595,6 +595,7 @@ H.adjustFireLoss(-4) H.reagents.remove_reagent(chem.id, REAGENTS_METABOLISM) + /datum/species/golem/clockwork name = "Clockwork Golem" id = "clockwork golem" @@ -647,6 +648,7 @@ dangerous_existence = TRUE random_eligible = FALSE + /datum/species/golem/cloth name = "Cloth Golem" id = "cloth golem" @@ -725,7 +727,7 @@ /obj/structure/cloth_pile/proc/revive() if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime return - if(cloth_golem.suiciding || cloth_golem.disabilities & NOCLONE) + if(cloth_golem.suiciding || cloth_golem.has_disability(DISABILITY_NOCLONE)) QDEL_NULL(cloth_golem) return diff --git a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm index 09c9df5f9f..17f5bafc42 100644 --- a/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/shadowpeople.dm @@ -182,7 +182,9 @@ var/mob/living/L = AM if(iscyborg(AM)) var/mob/living/silicon/robot/borg = AM - borg.update_headlamp(TRUE, 100) + if(!borg.lamp_cooldown) + borg.update_headlamp(TRUE, INFINITY) + to_chat(borg, "Your headlamp is fried! You'll need a human to help replace it.") else for(var/obj/item/O in AM) if(O.light_range && O.light_power) diff --git a/code/modules/mob/living/carbon/human/status_procs.dm b/code/modules/mob/living/carbon/human/status_procs.dm index aca6973355..cf3d676e90 100644 --- a/code/modules/mob/living/carbon/human/status_procs.dm +++ b/code/modules/mob/living/carbon/human/status_procs.dm @@ -11,12 +11,12 @@ amount = dna.species.spec_stun(src,amount) return ..() -/mob/living/carbon/human/cure_husk() +/mob/living/carbon/human/cure_husk(list/sources) . = ..() if(.) update_hair() -/mob/living/carbon/human/become_husk() +/mob/living/carbon/human/become_husk(source) if(istype(dna.species, /datum/species/skeleton)) //skeletons shouldn't be husks. cure_husk() return diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 7264e9ad95..266afffed2 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -175,7 +175,8 @@ There are several things that need to be remembered: var/obj/screen/inventory/inv = hud_used.inv_slots[slot_gloves] inv.update_icon() - if(!gloves && blood_DNA) + GET_COMPONENT(FR, /datum/component/forensics) + if(!gloves && FR && length(FR.blood_DNA)) var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) if(get_num_arms() < 2) if(has_left_hand()) @@ -609,7 +610,7 @@ generate/load female uniform sprites matching all previously decided variables if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" - if(disabilities & HUSK) + if(has_disability(DISABILITY_HUSK)) . += "-husk" /mob/living/carbon/human/load_limb_from_cache() diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 4592d76138..62e1a53355 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -1,142 +1,142 @@ -/mob/living/carbon/get_item_by_slot(slot_id) - switch(slot_id) - if(slot_back) - return back - if(slot_wear_mask) - return wear_mask - if(slot_neck) - return wear_neck - if(slot_head) - return head - if(slot_handcuffed) - return handcuffed - if(slot_legcuffed) - return legcuffed - return null - -/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1) - for(var/slot in slots) - if(equip_to_slot_if_possible(I, slots[slot], qdel_on_fail = 0, disable_warning = TRUE)) - return slot - if(qdel_on_fail) - qdel(I) - return null - -//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() -/mob/living/carbon/equip_to_slot(obj/item/I, slot) - if(!slot) - return - if(!istype(I)) - return - - var/index = get_held_index_of_item(I) - if(index) - held_items[index] = null - - if(I.pulledby) - I.pulledby.stop_pulling() - - I.screen_loc = null - if(client) - client.screen -= I - if(observers && observers.len) - for(var/M in observers) - var/mob/dead/observe = M - if(observe.client) - observe.client.screen -= I +/mob/living/carbon/get_item_by_slot(slot_id) + switch(slot_id) + if(slot_back) + return back + if(slot_wear_mask) + return wear_mask + if(slot_neck) + return wear_neck + if(slot_head) + return head + if(slot_handcuffed) + return handcuffed + if(slot_legcuffed) + return legcuffed + return null + +/mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1) + for(var/slot in slots) + if(equip_to_slot_if_possible(I, slots[slot], qdel_on_fail = 0, disable_warning = TRUE)) + return slot + if(qdel_on_fail) + qdel(I) + return null + +//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() +/mob/living/carbon/equip_to_slot(obj/item/I, slot) + if(!slot) + return + if(!istype(I)) + return + + var/index = get_held_index_of_item(I) + if(index) + held_items[index] = null + + if(I.pulledby) + I.pulledby.stop_pulling() + + I.screen_loc = null + if(client) + client.screen -= I + if(observers && observers.len) + for(var/M in observers) + var/mob/dead/observe = M + if(observe.client) + observe.client.screen -= I I.forceMove(src) - I.layer = ABOVE_HUD_LAYER - I.plane = ABOVE_HUD_PLANE - I.appearance_flags |= NO_CLIENT_COLOR - var/not_handled = FALSE - switch(slot) - if(slot_back) - back = I - update_inv_back() - if(slot_wear_mask) - wear_mask = I - wear_mask_update(I, toggle_off = 0) - if(slot_head) - head = I - head_update(I) - if(slot_neck) - wear_neck = I - update_inv_neck(I) - if(slot_handcuffed) - handcuffed = I - update_handcuffed() - if(slot_legcuffed) - legcuffed = I - update_inv_legcuffed() - if(slot_hands) - put_in_hands(I) - update_inv_hands() - if(slot_in_backpack) - var/obj/item/storage/B = back - var/prev_jimmies = B.rustle_jimmies - B.rustle_jimmies = FALSE //don't conspicously rustle - B.handle_item_insertion(I, 1, src) - B.rustle_jimmies = prev_jimmies - else - not_handled = TRUE - - //Item has been handled at this point and equipped callback can be safely called - //We cannot call it for items that have not been handled as they are not yet correctly - //in a slot (handled further down inheritance chain, probably living/carbon/human/equip_to_slot - if(!not_handled) - I.equipped(src, slot) - - return not_handled - -/mob/living/carbon/doUnEquip(obj/item/I) - . = ..() //Sets the default return value to what the parent returns. - if(!. || !I) //We don't want to set anything to null if the parent returned 0. - return - - if(I == head) - head = null + I.layer = ABOVE_HUD_LAYER + I.plane = ABOVE_HUD_PLANE + I.appearance_flags |= NO_CLIENT_COLOR + var/not_handled = FALSE + switch(slot) + if(slot_back) + back = I + update_inv_back() + if(slot_wear_mask) + wear_mask = I + wear_mask_update(I, toggle_off = 0) + if(slot_head) + head = I + head_update(I) + if(slot_neck) + wear_neck = I + update_inv_neck(I) + if(slot_handcuffed) + handcuffed = I + update_handcuffed() + if(slot_legcuffed) + legcuffed = I + update_inv_legcuffed() + if(slot_hands) + put_in_hands(I) + update_inv_hands() + if(slot_in_backpack) + var/obj/item/storage/B = back + var/prev_jimmies = B.rustle_jimmies + B.rustle_jimmies = FALSE //don't conspicously rustle + B.handle_item_insertion(I, 1, src) + B.rustle_jimmies = prev_jimmies + else + not_handled = TRUE + + //Item has been handled at this point and equipped callback can be safely called + //We cannot call it for items that have not been handled as they are not yet correctly + //in a slot (handled further down inheritance chain, probably living/carbon/human/equip_to_slot + if(!not_handled) + I.equipped(src, slot) + + return not_handled + +/mob/living/carbon/doUnEquip(obj/item/I) + . = ..() //Sets the default return value to what the parent returns. + if(!. || !I) //We don't want to set anything to null if the parent returned 0. + return + + if(I == head) + head = null if(!QDELETED(src)) head_update(I) - else if(I == back) - back = null + else if(I == back) + back = null if(!QDELETED(src)) update_inv_back() - else if(I == wear_mask) - wear_mask = null + else if(I == wear_mask) + wear_mask = null if(!QDELETED(src)) wear_mask_update(I, toggle_off = 1) - if(I == wear_neck) - wear_neck = null + if(I == wear_neck) + wear_neck = null if(!QDELETED(src)) update_inv_neck(I) - else if(I == handcuffed) - handcuffed = null - if(buckled && buckled.buckle_requires_restraints) - buckled.unbuckle_mob(src) + else if(I == handcuffed) + handcuffed = null + if(buckled && buckled.buckle_requires_restraints) + buckled.unbuckle_mob(src) if(!QDELETED(src)) update_handcuffed() - else if(I == legcuffed) - legcuffed = null + else if(I == legcuffed) + legcuffed = null if(!QDELETED(src)) update_inv_legcuffed() - -//handle stuff to update when a mob equips/unequips a mask. -/mob/living/proc/wear_mask_update(obj/item/clothing/C, toggle_off = 1) - update_inv_wear_mask() - -/mob/living/carbon/wear_mask_update(obj/item/clothing/C, toggle_off = 1) - if(C.tint || initial(C.tint)) - update_tint() - update_inv_wear_mask() - -//handle stuff to update when a mob equips/unequips a headgear. -/mob/living/carbon/proc/head_update(obj/item/I, forced) - if(istype(I, /obj/item/clothing)) - var/obj/item/clothing/C = I - if(C.tint || initial(C.tint)) - update_tint() - update_sight() - if(I.flags_inv & HIDEMASK || forced) - update_inv_wear_mask() - update_inv_head() - + +//handle stuff to update when a mob equips/unequips a mask. +/mob/living/proc/wear_mask_update(obj/item/clothing/C, toggle_off = 1) + update_inv_wear_mask() + +/mob/living/carbon/wear_mask_update(obj/item/clothing/C, toggle_off = 1) + if(C.tint || initial(C.tint)) + update_tint() + update_inv_wear_mask() + +//handle stuff to update when a mob equips/unequips a headgear. +/mob/living/carbon/proc/head_update(obj/item/I, forced) + if(istype(I, /obj/item/clothing)) + var/obj/item/clothing/C = I + if(C.tint || initial(C.tint)) + update_tint() + update_sight() + if(I.flags_inv & HIDEMASK || forced) + update_inv_wear_mask() + update_inv_head() + diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 4399607984..0ac97fba5a 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -394,15 +394,15 @@ //used in human and monkey handle_environment() /mob/living/carbon/proc/natural_bodytemperature_stabilization() - var/body_temperature_difference = 310.15 - bodytemperature + var/body_temperature_difference = BODYTEMP_NORMAL - bodytemperature switch(bodytemperature) - if(-INFINITY to 260.15) //260.15 is 310.15 - 50, the temperature where you start to feel effects. + if(-INFINITY to BODYTEMP_COLD_DAMAGE_LIMIT) //BODYTEMP_COLD_DAMAGE_LIMIT is BODYTEMP_NORMAL(310.15) - 50, the temperature where you start to feel effects. bodytemperature += max((body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - if(260.15 to 310.15) + if(BODYTEMP_COLD_DAMAGE_LIMIT to BODYTEMP_NORMAL) bodytemperature += max(body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR, min(body_temperature_difference, BODYTEMP_AUTORECOVERY_MINIMUM/4)) - if(310.15 to 360.15) + if(BODYTEMP_NORMAL to BODYTEMP_HEAT_DAMAGE_LIMIT) bodytemperature += min(body_temperature_difference * metabolism_efficiency / BODYTEMP_AUTORECOVERY_DIVISOR, max(body_temperature_difference, -BODYTEMP_AUTORECOVERY_MINIMUM/4)) - if(360.15 to INFINITY) //360.15 is 310.15 + 50, the temperature where you start to feel effects. + if(BODYTEMP_HEAT_DAMAGE_LIMIT to INFINITY) //BODYTEMP_HEAT_DAMAGE_LIMIT is BODYTEMP_NORMAL(310.15) + 50, the temperature where you start to feel effects. //We totally need a sweat system cause it totally makes sense...~ bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers ///////// @@ -460,4 +460,4 @@ death() var/obj/item/organ/brain/B = getorganslot(ORGAN_SLOT_BRAIN) if(B) - B.damaged_brain = TRUE + B.damaged_brain = TRUE diff --git a/code/modules/mob/living/carbon/monkey/combat.dm b/code/modules/mob/living/carbon/monkey/combat.dm index 09d00465ee..18f245d4cd 100644 --- a/code/modules/mob/living/carbon/monkey/combat.dm +++ b/code/modules/mob/living/carbon/monkey/combat.dm @@ -77,7 +77,7 @@ return FALSE // WEAPONS - if(istype(I, /obj/item/weapon)) + if(istype(I, /obj/item)) var/obj/item/W = I if(W.force >= best_force) put_in_hands(W) @@ -122,7 +122,7 @@ if(L == src) return FALSE - if(disabilities & PACIFISM) + if(has_disability(DISABILITY_PACIFISM)) return FALSE if(enemies[L]) @@ -153,7 +153,7 @@ return TRUE // have we been disarmed - if(!locate(/obj/item/weapon) in held_items) + if(!locate(/obj/item) in held_items) best_force = 0 if(restrained() || blacklistItems[pickupTarget] || (pickupTarget && (pickupTarget.flags_1 & NODROP_1))) @@ -391,7 +391,7 @@ // attack using a held weapon otherwise bite the enemy, then if we are angry there is a chance we might calm down a little /mob/living/carbon/monkey/proc/monkey_attack(mob/living/L) - var/obj/item/Weapon = locate(/obj/item/weapon) in held_items + var/obj/item/Weapon = locate(/obj/item) in held_items // attack with weapon if we have one if(Weapon) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 613a04bd17..ca78e165c2 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -44,7 +44,7 @@ return ..() /mob/living/carbon/monkey/handle_breath_temperature(datum/gas_mixture/breath) - if(abs(310.15 - breath.temperature) > 50) + if(abs(BODYTEMP_NORMAL - breath.temperature) > 50) switch(breath.temperature) if(-INFINITY to 120) adjustFireLoss(3) @@ -133,7 +133,6 @@ /mob/living/carbon/monkey/has_smoke_protection() if(wear_mask) - if(wear_mask.flags_1 & BLOCK_GAS_SMOKE_EFFECT_1) return 1 diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 7c65e4a604..3cf2bcccc0 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -11,10 +11,10 @@ butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/monkey = 5, /obj/item/stack/sheet/animalhide/monkey = 1) type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/monkey gib_type = /obj/effect/decal/cleanable/blood/gibs - unique_name = 1 + unique_name = TRUE bodyparts = list(/obj/item/bodypart/chest/monkey, /obj/item/bodypart/head/monkey, /obj/item/bodypart/l_arm/monkey, /obj/item/bodypart/r_arm/monkey, /obj/item/bodypart/r_leg/monkey, /obj/item/bodypart/l_leg/monkey) - devourable = TRUE + /mob/living/carbon/monkey/Initialize() @@ -62,7 +62,7 @@ if (bodytemperature < 283.222) . += (283.222 - bodytemperature) / 10 * 1.75 - + var/static/config_monkey_delay if(isnull(config_monkey_delay)) config_monkey_delay = CONFIG_GET(number/monkey_delay) @@ -89,13 +89,15 @@ /mob/living/carbon/monkey/IsAdvancedToolUser()//Unless its monkey mode monkeys cant use advanced tools - return 0 + if(mind && is_monkey(mind)) + return TRUE + return FALSE /mob/living/carbon/monkey/reagent_check(datum/reagent/R) //can metabolize all reagents - return 0 + return FALSE /mob/living/carbon/monkey/canBeHandcuffed() - return 1 + return TRUE /mob/living/carbon/monkey/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) if(judgement_criteria & JUDGE_EMAGGED) diff --git a/code/modules/mob/living/carbon/monkey/monkey_defense.dm b/code/modules/mob/living/carbon/monkey/monkey_defense.dm index 96cafa4501..fe15e50975 100644 --- a/code/modules/mob/living/carbon/monkey/monkey_defense.dm +++ b/code/modules/mob/living/carbon/monkey/monkey_defense.dm @@ -16,9 +16,6 @@ if(stat != DEAD) var/dmg = rand(1, 5) apply_damage(dmg, BRUTE, affecting) - damage_clothes(dmg, BRUTE, "melee", affecting.body_zone) - - /mob/living/carbon/monkey/attack_larva(mob/living/carbon/alien/larva/L) if(..()) //successful larva bite. @@ -29,7 +26,6 @@ if(!affecting) affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) /mob/living/carbon/monkey/attack_hand(mob/living/carbon/human/M) if(..()) //To allow surgery to return properly. @@ -58,7 +54,6 @@ if(!affecting) affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) add_logs(M, src, "attacked") else @@ -101,7 +96,6 @@ if(!dismembering_strike(M, affecting.body_zone)) //Dismemberment successful return 1 apply_damage(damage, BRUTE, affecting) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) @@ -136,9 +130,6 @@ if(!affecting) affecting = get_bodypart("chest") apply_damage(damage, M.melee_damage_type, affecting) - damage_clothes(damage, M.melee_damage_type, "melee", affecting.body_zone) - - /mob/living/carbon/monkey/attack_slime(mob/living/simple_animal/slime/M) if(..()) //successful slime attack @@ -152,21 +143,19 @@ if(!affecting) affecting = get_bodypart("chest") apply_damage(damage, BRUTE, affecting) - damage_clothes(damage, BRUTE, "melee", affecting.body_zone) - /mob/living/carbon/monkey/acid_act(acidpwr, acid_volume, bodyzone_hit) . = 1 if(!bodyzone_hit || bodyzone_hit == "head") if(wear_mask) if(!(wear_mask.resistance_flags & UNACIDABLE)) - wear_mask.acid_act(acidpwr) + wear_mask.acid_act(acidpwr, acid_volume) else to_chat(src, "Your mask protects you from the acid.") return if(head) if(!(head.resistance_flags & UNACIDABLE)) - head.acid_act(acidpwr) + head.acid_act(acidpwr, acid_volume) else to_chat(src, "Your hat protects you from the acid.") return diff --git a/code/modules/mob/living/carbon/monkey/punpun.dm b/code/modules/mob/living/carbon/monkey/punpun.dm index 767268f8dc..fc0d97e3cb 100644 --- a/code/modules/mob/living/carbon/monkey/punpun.dm +++ b/code/modules/mob/living/carbon/monkey/punpun.dm @@ -74,4 +74,4 @@ file_data["relic_hat"] = head ? head.type : null file_data["relic_mask"] = wear_mask ? wear_mask.type : null fdel(json_file) - WRITE_FILE(json_file, json_encode(file_data)) \ No newline at end of file + WRITE_FILE(json_file, json_encode(file_data)) diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 5a4ba686b2..1bb4400087 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -19,7 +19,7 @@ if(!HD) //Decapitated return - if(disabilities & HUSK) + if(has_disability(DISABILITY_HUSK)) return var/hair_hidden = 0 diff --git a/code/modules/mob/living/carbon/say.dm b/code/modules/mob/living/carbon/say.dm index c1a6af9688..83d943ccbf 100644 --- a/code/modules/mob/living/carbon/say.dm +++ b/code/modules/mob/living/carbon/say.dm @@ -36,7 +36,7 @@ if(T) . = T.could_speak_in_language(dt) else - . = initial(dt.flags_1) & TONGUELESS_SPEECH + . = initial(dt.flags) & TONGUELESS_SPEECH /mob/living/carbon/Hear(message, atom/movable/speaker, datum/language/message_language, raw_message, radio_freq, list/spans, message_mode) if(!client) @@ -44,4 +44,4 @@ for(var/T in get_traumas()) var/datum/brain_trauma/trauma = T message = trauma.on_hear(message, speaker, message_language, raw_message, radio_freq) - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 7c40b6f144..efde375227 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, ear damage, -// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, NEARSIGHT disability, and HUSK disability. +// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, DISABILITY_NEARSIGHT disability, and DISABILITY_HUSK disability. /mob/living/carbon/damage_eyes(amount) var/obj/item/organ/eyes/eyes = getorganslot(ORGAN_SLOT_EYES) @@ -64,43 +64,8 @@ /mob/living/carbon/set_disgust(amount) disgust = CLAMP(amount, 0, DISGUST_LEVEL_MAXEDOUT) -/mob/living/carbon/cure_blind() - if(disabilities & BLIND) - disabilities &= ~BLIND - adjust_blindness(-1) - return 1 -/mob/living/carbon/become_blind() - if(!(disabilities & BLIND)) - disabilities |= BLIND - blind_eyes(1) - return 1 -/mob/living/carbon/cure_nearsighted() - if(disabilities & NEARSIGHT) - disabilities &= ~NEARSIGHT - clear_fullscreen("nearsighted") - return 1 - -/mob/living/carbon/become_nearsighted() - if(!(disabilities & NEARSIGHT)) - disabilities |= NEARSIGHT - overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) - return 1 - -/mob/living/carbon/cure_husk() - if(disabilities & HUSK) - disabilities &= ~HUSK - status_flags &= ~DISFIGURED - update_body() - return 1 - -/mob/living/carbon/become_husk() - if(disabilities & HUSK) - return - disabilities |= HUSK - status_flags |= DISFIGURED //makes them unknown - update_body() - return 1 +////////////////////////////////////////TRAUMAS///////////////////////////////////////// /mob/living/carbon/proc/get_traumas() . = list() diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 701fa0c7bc..147f14c945 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -290,7 +290,7 @@ else . += "-robotic" - if(disabilities & HUSK) + if(has_disability(DISABILITY_HUSK)) . += "-husk" diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 9f541aaf67..7a7a6e19d7 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -1,18 +1,3 @@ -//The code execution of the emote datum is located at code/datums/emotes.dm -/mob/living/emote(act, m_type = null, message = null) - act = lowertext(act) - var/param = message - var/custom_param = findchar(act, " ") - if(custom_param) - param = copytext(act, custom_param + 1, length(act) + 1) - act = copytext(act, 1, custom_param) - - var/datum/emote/E - E = E.emote_list[act] - if(!E) - to_chat(src, "Unusable emote '[act]'. Say *help for a list.") - return - E.run_emote(src, param, m_type) /* EMOTE DATUMS */ /datum/emote/living @@ -143,16 +128,6 @@ restraint_check = TRUE wing_time = 10 -/datum/emote/living/flip - key = "flip" - key_third_person = "flips" - restraint_check = TRUE - -/datum/emote/living/flip/run_emote(mob/user, params) - . = ..() - if(.) - user.SpinAnimation(7,1) - /datum/emote/living/frown key = "frown" key_third_person = "frowns" @@ -218,6 +193,7 @@ key = "laugh" key_third_person = "laughs" message = "laughs." + message_mime = "laughs silently!" emote_type = EMOTE_AUDIBLE /datum/emote/living/laugh/can_run_emote(mob/living/user, status_check = TRUE) @@ -230,7 +206,7 @@ . = ..() if(. && ishuman(user)) var/mob/living/carbon/human/H = user - if(H.dna.species.id == "human") + if(H.dna.species.id == "human" && (!H.mind || !H.mind.miming)) if(user.gender == FEMALE) playsound(H, 'sound/voice/human/womanlaugh.ogg', 50, 1) else @@ -482,25 +458,6 @@ message_param = "beeps at %t." sound = 'sound/machines/twobeep.ogg' -/datum/emote/living/spin - key = "spin" - key_third_person = "spins" - restraint_check = TRUE - -/datum/emote/living/spin/run_emote(mob/user) - . = ..() - if(.) - user.spin(20, 1) - if(iscyborg(user) && user.has_buckled_mobs()) - var/mob/living/silicon/robot/R = user - GET_COMPONENT_FROM(riding_datum, /datum/component/riding, R) - if(riding_datum) - for(var/mob/M in R.buckled_mobs) - riding_datum.force_dismount(M) - else - R.unbuckle_all_mobs() - - /datum/emote/living/circle key = "circle" key_third_person = "circles" diff --git a/code/modules/mob/living/inhand_holder.dm b/code/modules/mob/living/inhand_holder.dm new file mode 100644 index 0000000000..6a2308b621 --- /dev/null +++ b/code/modules/mob/living/inhand_holder.dm @@ -0,0 +1,84 @@ +//Generic system for picking up mobs. +//Currently works for head and hands. +/obj/item/clothing/head/mob_holder + name = "bugged mob" + desc = "Yell at coderbrush." + icon = null + icon_state = "" + flags_1 = DROPDEL_1 + var/mob/living/held_mob + var/can_head = TRUE + var/destroying = FALSE + +/obj/item/clothing/head/mob_holder/Initialize(mapload, mob/living/M, _worn_state, head_icon, lh_icon, rh_icon, _can_head = TRUE) + . = ..() + can_head = _can_head + if(head_icon) + alternate_worn_icon = head_icon + if(_worn_state) + item_state = _worn_state + if(lh_icon) + lefthand_file = lh_icon + if(rh_icon) + righthand_file = rh_icon + if(!can_head) + slot_flags = NONE + deposit(M) + +/obj/item/clothing/head/mob_holder/Destroy() + destroying = TRUE + if(held_mob) + release(FALSE) + return ..() + +/obj/item/clothing/head/mob_holder/proc/deposit(mob/living/L) + if(!istype(L)) + return FALSE + L.setDir(SOUTH) + update_visuals(L) + held_mob = L + L.forceMove(src) + name = L.name + desc = L.desc + return TRUE + +/obj/item/clothing/head/mob_holder/proc/update_visuals(mob/living/L) + appearance = L.appearance + +/obj/item/clothing/head/mob_holder/proc/release(del_on_release = TRUE) + if(!held_mob) + if(del_on_release && !destroying) + qdel(src) + return FALSE + if(isliving(loc)) + var/mob/living/L = loc + to_chat(L, "[held_mob] wriggles free!") + L.dropItemToGround(src) + held_mob.forceMove(get_turf(src)) + held_mob.reset_perspective() + held_mob.setDir(SOUTH) + held_mob.visible_message("[held_mob] uncurls!") + held_mob = null + if(del_on_release && !destroying) + qdel(src) + return TRUE + +/obj/item/clothing/head/mob_holder/relaymove() + release() + +/obj/item/clothing/head/mob_holder/container_resist() + release() + +/obj/item/clothing/head/mob_holder/drone/deposit(mob/living/L) + . = ..() + if(!isdrone(L)) + qdel(src) + name = "drone (hiding)" + desc = "This drone is scared and has curled up into a ball!" + +/obj/item/clothing/head/mob_holder/drone/update_visuals(mob/living/L) + var/mob/living/simple_animal/drone/D = L + if(!D) + return ..() + icon = 'icons/mob/drone.dmi' + icon_state = "[D.visualAppearence]_hat" diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 3ae022cdcc..0fc19e3882 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -54,7 +54,7 @@ handle_environment(environment) handle_fire() - + // Vore code for belly processes handle_internal_contents() @@ -126,7 +126,7 @@ /mob/living/proc/handle_disabilities() //Eyes if(eye_blind) //blindness, heals slowly over time - if(!stat && !(disabilities & BLIND)) + if(!stat && !(has_disability(DISABILITY_BLIND))) eye_blind = max(eye_blind-1,0) if(client && !eye_blind) clear_alert("blind") @@ -137,7 +137,7 @@ eye_blurry = max(eye_blurry-1, 0) if(client && !eye_blurry) clear_fullscreen("blurry") - if(disabilities & PACIFISM && a_intent == INTENT_HARM) + if(has_disability(DISABILITY_PACIFISM) && a_intent == INTENT_HARM) to_chat(src, "You don't feel like harming anybody.") a_intent_change(INTENT_HELP) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index fbc8e85eb4..9fa2177c9b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -406,14 +406,13 @@ SetSleeping(0, FALSE) radiation = 0 nutrition = NUTRITION_LEVEL_FED + 50 - bodytemperature = 310 + bodytemperature = BODYTEMP_NORMAL set_blindness(0) set_blurriness(0) set_eye_damage(0) cure_nearsighted() cure_blind() cure_husk() - disabilities = 0 hallucination = 0 heal_overall_damage(100000, 100000, 0, 0, 1) //heal brute and burn dmg on both organic and robotic limbs, and update health right away. ExtinguishMob() @@ -745,15 +744,6 @@ var/obj_temp = oloc.return_temperature() if(obj_temp != null) loc_temp = obj_temp -/* if(ismob(loc)) - var/mob/living/mloc = loc - var/mob_temp = mloc.return_temperature() - if(mloc == DEAD) - loc_temp = get_turf(loc) //wew - else - loc_temp = mob_temp -*/ -//just gunna ommit this for now, it's on the 'to figgur out' list. else if(isspaceturf(get_turf(src))) var/turf/heat_turf = get_turf(src) loc_temp = heat_turf.temperature @@ -774,9 +764,9 @@ var/turf/T = get_turf(src) if(!T) return 0 - if(T.z == ZLEVEL_CENTCOM) //dont detect mobs on centcom + if(is_centcom_level(T.z)) //dont detect mobs on centcom return 0 - if(T.z >= ZLEVEL_SPACEMAX) + if(is_away_level(T.z)) return 0 if(user != null && src == user) return 0 @@ -819,7 +809,7 @@ if(G.trigger_guard != TRIGGER_GUARD_ALLOW_ALL && !IsAdvancedToolUser()) to_chat(src, "You don't have the dexterity to do this!") return FALSE - if(disabilities & PACIFISM) + if(has_disability(DISABILITY_PACIFISM)) to_chat(src, "You don't want to risk harming anyone!") return FALSE return TRUE @@ -989,7 +979,6 @@ stop_pulling() else if(has_legs || ignore_legs) lying = 0 - if(buckled) lying = 90*buckle_lying else if(!lying) @@ -1058,10 +1047,45 @@ if (client) if (new_z) SSmobs.clients_by_zlevel[new_z] += src + for (var/I in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 + var/mob/living/simple_animal/SA = SSidlenpcpool.idle_mobs_by_zlevel[new_z][I] + if (SA) + SA.toggle_ai(AI_ON) // Guarantees responsiveness for when appearing right next to mobs + else + SSidlenpcpool.idle_mobs_by_zlevel[new_z] -= SA + registered_z = new_z else registered_z = null /mob/living/onTransitZ(old_z,new_z) ..() - update_z(new_z) \ No newline at end of file + update_z(new_z) + +/mob/living/MouseDrop(mob/over) + . = ..() + var/mob/living/user = usr + if(!istype(over) || !istype(user)) + return + if(!over.Adjacent(src) || (user != src) || !canUseTopic(over)) + return + if(can_be_held) + mob_try_pickup(over) + +/mob/living/proc/mob_pickup(mob/living/L) + return + +/mob/living/proc/mob_try_pickup(mob/living/user) + if(!ishuman(user)) + return + if(user.get_active_held_item()) + to_chat(user, "Your hands are full!") + return FALSE + if(buckled) + to_chat(user, "[src] is buckled to something!") + return FALSE + user.visible_message("[user] starts trying to scoop up [src]!") + if(!do_after(user, 20, target = src)) + return FALSE + mob_pickup(user) + return TRUE diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index ed07313862..cfb700d9d7 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -136,7 +136,7 @@ to_chat(user, "[src] can't be grabbed more aggressively!") return FALSE - if(user.disabilities & PACIFISM) + if(user.has_disability(DISABILITY_PACIFISM)) to_chat(user, "You don't want to risk hurting [src]!") return FALSE @@ -193,7 +193,7 @@ M.Feedstop() return // can't attack while eating! - if(disabilities & PACIFISM) + if(has_disability(DISABILITY_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -210,7 +210,7 @@ M.visible_message("\The [M] [M.friendly] [src]!") return FALSE else - if(M.disabilities & PACIFISM) + if(M.has_disability(DISABILITY_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -229,7 +229,7 @@ return FALSE if (M.a_intent == INTENT_HARM) - if(M.disabilities & PACIFISM) + if(M.has_disability(DISABILITY_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE @@ -255,7 +255,7 @@ return FALSE else - if(L.disabilities & PACIFISM) + if(L.has_disability(DISABILITY_PACIFISM)) to_chat(L, "You don't want to hurt anyone!") return @@ -280,7 +280,7 @@ grabbedby(M) return FALSE if("harm") - if(M.disabilities & PACIFISM) + if(M.has_disability(DISABILITY_PACIFISM)) to_chat(M, "You don't want to hurt anyone!") return FALSE M.do_attack_animation(src) @@ -370,7 +370,7 @@ //called when the mob receives a bright flash /mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) - if(get_eye_protection() < intensity && (override_blindness_check || !(disabilities & BLIND))) + if(get_eye_protection() < intensity && (override_blindness_check || !(has_disability(DISABILITY_BLIND)))) overlay_fullscreen("flash", type) addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) return 1 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 50f2ce4db0..904e9b9c21 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -26,6 +26,8 @@ var/incorporeal_move = FALSE //FALSE is off, INCORPOREAL_MOVE_BASIC is normal, INCORPOREAL_MOVE_SHADOW is for ninjas //and INCORPOREAL_MOVE_JAUNT is blocked by holy water/salt + var/list/disabilities = list() + var/list/surgeries = list() //a list of surgery datums. generally empty, they're added when the player wants them. var/now_pushing = null //used by living/Collide() and living/PushAM() to prevent potential infinite loop. @@ -79,4 +81,5 @@ var/list/obj/effect/proc_holder/abilities = list() - var/registered_z \ No newline at end of file + var/registered_z + var/can_be_held = FALSE //whether this can be picked up and held. diff --git a/code/modules/mob/living/logout.dm b/code/modules/mob/living/logout.dm index 18b171753a..b7e9036a8a 100644 --- a/code/modules/mob/living/logout.dm +++ b/code/modules/mob/living/logout.dm @@ -4,4 +4,4 @@ ranged_ability.remove_mousepointer(client) ..() if(!key && mind) //key and mind have become separated. - mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. + mind.active = 0 //This is to stop say, a mind.transfer_to call on a corpse causing a ghost to re-enter its body. \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index b1d0484086..2143e9b2c8 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -20,11 +20,6 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "t" = "Syndicate", "y" = "CentCom", - // Species - "b" = "binary", - "g" = "changeling", - "a" = "alientalk", - // Admin "p" = "admin", "d" = "deadmin", @@ -55,11 +50,6 @@ GLOBAL_LIST_INIT(department_radio_keys, list( "å" = "Syndicate", "í" = "CentCom", - // Species - "è" = "binary", - "ï" = "changeling", - "ô" = "alientalk", - // Admin "ç" = "admin", "â" = "deadmin", @@ -72,7 +62,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( /mob/living/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE) var/static/list/crit_allowed_modes = list(MODE_WHISPER = TRUE, MODE_CHANGELING = TRUE, MODE_ALIEN = TRUE) var/static/list/unconscious_allowed_modes = list(MODE_CHANGELING = TRUE, MODE_ALIEN = TRUE) - var/key = get_key(message) + var/talk_key = get_key(message) var/static/list/one_character_prefix = list(MODE_HEADSET = TRUE, MODE_ROBOT = TRUE, MODE_WHISPER = TRUE) @@ -81,13 +71,14 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(!message || message == "") return + var/datum/saymode/saymode = SSradio.saymodes[talk_key] var/message_mode = get_message_mode(message) var/original_message = message var/in_critical = InCritical() if(one_character_prefix[message_mode]) message = copytext(message, 2) - else if(message_mode) + else if(message_mode || saymode) message = copytext(message, 3) if(findtext(message, " ", 1, 2)) message = copytext(message, 2) @@ -135,11 +126,8 @@ GLOBAL_LIST_INIT(department_radio_keys, list( // AIs use inherent channels for the holopad. Most inherent channels // ignore the language argument however. - var/datum/saymode/SM = SSradio.saymodes[key] - if(key && SM) - if(!SM.handle_message(src, message, language) && !message_mode) - return - + if(saymode && !saymode.handle_message(src, message, language)) + return if(!can_speak_vocal(message)) to_chat(src, "You find yourself unable to speak!") @@ -285,7 +273,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 1 /mob/living/proc/can_speak_vocal(message) //Check AFTER handling of xeno and ling channels - if(disabilities & MUTE) + if(has_disability(DISABILITY_MUTE)) return 0 if(is_muzzled()) @@ -296,11 +284,6 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return 1 -/mob/living/proc/check_emote(message) - if(copytext(message, 1, 2) == "*") - emote(copytext(message, 2)) - return 1 - /mob/living/proc/get_message_mode(message) var/key = copytext(message, 1, 2) if(key == "#") @@ -343,6 +326,15 @@ GLOBAL_LIST_INIT(department_radio_keys, list( return message /mob/living/proc/radio(message, message_mode, list/spans, language) + var/obj/item/implant/radio/imp = locate() in src + if(imp && imp.radio.on) + if(message_mode == MODE_HEADSET) + imp.radio.talk_into(src, message, , spans, language) + return ITALICS | REDUCE_RANGE + if(message_mode == MODE_DEPARTMENT || message_mode in GLOB.radiochannels) + imp.radio.talk_into(src, message, message_mode, spans, language) + return ITALICS | REDUCE_RANGE + switch(message_mode) if(MODE_WHISPER) return ITALICS @@ -364,6 +356,7 @@ GLOBAL_LIST_INIT(department_radio_keys, list( if(MODE_BINARY) return ITALICS | REDUCE_RANGE //Does not return 0 since this is only reached by humans, not borgs or AIs. + return 0 /mob/living/say_mod(input, message_mode) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 86314e33d7..9ae3d18333 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -430,20 +430,17 @@ /mob/living/silicon/ai/proc/switchCamera(obj/machinery/camera/C) + if(QDELETED(C)) + return FALSE if(!tracking) cameraFollow = null - if (!C) - return FALSE - - if(!src.eyeobj) + if(QDELETED(eyeobj)) view_core() return // ok, we're alive, camera is good and in our network... eyeobj.setLoc(get_turf(C)) - //machine = src - return TRUE /mob/living/silicon/ai/proc/botcall() diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm index 3af95cec4c..025d3d8e6d 100644 --- a/code/modules/mob/living/silicon/ai/examine.dm +++ b/code/modules/mob/living/silicon/ai/examine.dm @@ -1,26 +1,26 @@ -/mob/living/silicon/ai/examine(mob/user) +/mob/living/silicon/ai/examine(mob/user) var/msg = "*---------*\nThis is [icon2html(src, user)] [src]!\n" - if (stat == DEAD) - msg += "It appears to be powered-down.\n" - else - msg += "" - if (getBruteLoss()) - if (getBruteLoss() < 30) - msg += "It looks slightly dented.\n" - else - msg += "It looks severely dented!\n" - if (getFireLoss()) - if (getFireLoss() < 30) - msg += "It looks slightly charred.\n" - else - msg += "Its casing is melted and heat-warped!\n" - msg += "" - if(deployed_shell) - msg += "The wireless networking light is blinking.\n" - else if (!shunted && !client) - msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n" - msg += "*---------*" - - to_chat(user, msg) - + if (stat == DEAD) + msg += "It appears to be powered-down.\n" + else + msg += "" + if (getBruteLoss()) + if (getBruteLoss() < 30) + msg += "It looks slightly dented.\n" + else + msg += "It looks severely dented!\n" + if (getFireLoss()) + if (getFireLoss() < 30) + msg += "It looks slightly charred.\n" + else + msg += "Its casing is melted and heat-warped!\n" + msg += "" + if(deployed_shell) + msg += "The wireless networking light is blinking.\n" + else if (!shunted && !client) + msg += "[src]Core.exe has stopped responding! NTOS is searching for a solution to the problem...\n" + msg += "*---------*" + + to_chat(user, msg) + ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm index 48ca0ac19c..815ddb64ea 100644 --- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm +++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm @@ -80,8 +80,7 @@ GLOBAL_DATUM_INIT(cameranet, /datum/cameranet, new) // Removes a camera from a chunk. /datum/cameranet/proc/removeCamera(obj/machinery/camera/c) - if(c.can_use()) - majorChunkChange(c, 0) + majorChunkChange(c, 0) // Add a camera to a chunk. diff --git a/code/modules/mob/living/silicon/ai/freelook/chunk.dm b/code/modules/mob/living/silicon/ai/freelook/chunk.dm index 2a009d4d00..a76c02f3b5 100644 --- a/code/modules/mob/living/silicon/ai/freelook/chunk.dm +++ b/code/modules/mob/living/silicon/ai/freelook/chunk.dm @@ -173,4 +173,4 @@ obscured += t.obscured #undef UPDATE_BUFFER -#undef CHUNK_SIZE +#undef CHUNK_SIZE \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index 1d2598c63d..b5b1bd082b 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -16,7 +16,6 @@ // It will also stream the chunk that the new loc is in. /mob/camera/aiEye/proc/setLoc(T) - if(ai) if(!isturf(ai.loc)) return @@ -34,6 +33,8 @@ if(istype(ai.current, /obj/machinery/holopad)) var/obj/machinery/holopad/H = ai.current H.move_hologram(ai, T) + if(ai.camera_light_on) + ai.light_cameras() /mob/camera/aiEye/Move() return 0 @@ -85,11 +86,6 @@ if(!user.tracking) user.cameraFollow = null - //user.unset_machine() //Uncomment this if it causes problems. - //user.lightNearbyCamera() - if(user.camera_light_on) - user.light_cameras() - // Return to the Core. /mob/living/silicon/ai/proc/view_core() diff --git a/code/modules/mob/living/silicon/death.dm b/code/modules/mob/living/silicon/death.dm index 7537697d71..2e1adb1959 100644 --- a/code/modules/mob/living/silicon/death.dm +++ b/code/modules/mob/living/silicon/death.dm @@ -1,13 +1,13 @@ -/mob/living/silicon/spawn_gibs() +/mob/living/silicon/spawn_gibs() new /obj/effect/gibspawner/robot(get_turf(src)) - -/mob/living/silicon/spawn_dust() - new /obj/effect/decal/remains/robot(loc) - -/mob/living/silicon/death(gibbed) - if(!gibbed) - emote("deathgasp") - diag_hud_set_status() - diag_hud_set_health() - update_health_hud() + +/mob/living/silicon/spawn_dust() + new /obj/effect/decal/remains/robot(loc) + +/mob/living/silicon/death(gibbed) + if(!gibbed) + emote("deathgasp") + diag_hud_set_status() + diag_hud_set_health() + update_health_hud() . = ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 924ab615b8..50b7dee271 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -11,6 +11,7 @@ health = 500 maxHealth = 500 layer = BELOW_MOB_LAYER + can_be_held = TRUE var/network = "SS13" var/obj/machinery/camera/current = null @@ -51,13 +52,16 @@ var/obj/machinery/door/hackdoor // The airlock being hacked var/hackprogress = 0 // Possible values: 0 - 100, >= 100 means the hack is complete and will be reset upon next check - var/obj/item/radio/integrated/signal/sradio // AI's signaller + var/obj/item/integrated_signaler/signaler // AI's signaller var/holoform = FALSE var/canholo = TRUE var/obj/item/card/id/access_card = null var/chassis = "repairbot" - var/list/possible_chassis = list("cat", "mouse", "monkey", "corgi", "fox", "repairbot", "rabbit") + var/list/possible_chassis = list("cat" = TRUE, "mouse" = TRUE, "monkey" = TRUE, "corgi" = FALSE, "fox" = FALSE, "repairbot" = TRUE, "rabbit" = TRUE) //assoc value is whether it can be picked up. + var/static/item_head_icon = 'icons/mob/pai_item_head.dmi' + var/static/item_lh_icon = 'icons/mob/pai_item_lh.dmi' + var/static/item_rh_icon = 'icons/mob/pai_item_rh.dmi' var/emitterhealth = 20 var/emittermaxhealth = 20 @@ -101,7 +105,7 @@ P.setPersonality(src) forceMove(P) card = P - sradio = new(src) + signaler = new(src) if(!radio) radio = new /obj/item/device/radio(src) diff --git a/code/modules/mob/living/silicon/pai/pai_shell.dm b/code/modules/mob/living/silicon/pai/pai_shell.dm index 8a3121166e..dad7d710e7 100644 --- a/code/modules/mob/living/silicon/pai/pai_shell.dm +++ b/code/modules/mob/living/silicon/pai/pai_shell.dm @@ -68,9 +68,12 @@ lay_down() /mob/living/silicon/pai/proc/choose_chassis() + if(!isturf(loc) && loc != card) + to_chat(src, "You can not change your holochassis composite while not on the ground or in your card!") + return FALSE var/choice = input(src, "What would you like to use for your holochassis composite?") as null|anything in possible_chassis if(!choice) - return 0 + return FALSE chassis = choice icon_state = "[chassis]" if(resting) @@ -103,3 +106,16 @@ /mob/living/silicon/pai/movement_delay() . = ..() . += 1 //A bit slower than humans, so they're easier to smash + +/mob/living/silicon/pai/mob_pickup(mob/living/L) + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, chassis, item_head_icon, item_lh_icon, item_rh_icon) + if(!L.put_in_hands(holder)) + qdel(holder) + else + L.visible_message("[L] scoops up [src]!") + +/mob/living/silicon/pai/mob_try_pickup(mob/living/user) + if(!possible_chassis[chassis]) + to_chat(user, "[src]'s current form isn't able to be carried!") + return FALSE + return ..() diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index e73792e705..bb057f7774 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -169,23 +169,20 @@ if("signaller") if(href_list["send"]) - - sradio.send_signal("ACTIVATE") + signaler.send_activation() audible_message("[icon2html(src, world)] *beep* *beep*") if(href_list["freq"]) - - var/new_frequency = (sradio.frequency + text2num(href_list["freq"])) - if(new_frequency < 1200 || new_frequency > 1600) + var/new_frequency = (signaler.frequency + text2num(href_list["freq"])) + if(new_frequency < MIN_FREE_FREQ || new_frequency > MAX_FREE_FREQ) new_frequency = sanitize_frequency(new_frequency) - sradio.set_frequency(new_frequency) + signaler.set_frequency(new_frequency) if(href_list["code"]) - - sradio.code += text2num(href_list["code"]) - sradio.code = round(sradio.code) - sradio.code = min(100, sradio.code) - sradio.code = max(1, sradio.code) + signaler.code += text2num(href_list["code"]) + signaler.code = round(signaler.code) + signaler.code = min(100, signaler.code) + signaler.code = max(1, signaler.code) @@ -397,14 +394,14 @@ Frequency: - - - [format_frequency(sradio.frequency)] + [format_frequency(signaler.frequency)] + +
    Code: - - - [sradio.code] + [signaler.code] + +
    diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index 788a8f4255..3f5b12ae20 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -6,6 +6,7 @@ var/obj/act_module = get_active_held_item() if(act_module) msg += "It is holding [icon2html(act_module, user)] \a [act_module].\n" + msg += status_effect_examines() msg += "" if (src.getBruteLoss()) if (src.getBruteLoss() < maxHealth*0.5) diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index cf55cdd5f9..8fb58b9472 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -1,3 +1,4 @@ + /mob/living/silicon/robot/Login() ..() regenerate_icons() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index db10f4a81c..77161ff46c 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -5,8 +5,6 @@ icon_state = "robot" maxHealth = 100 health = 100 - macro_default = "robot-default" - macro_hotkeys = "robot-hotkeys" bubble_icon = "robot" designation = "Default" //used for displaying the prefix & getting the current module of cyborg has_limbs = 1 @@ -205,15 +203,14 @@ "Medical" = /obj/item/robot_module/medical, \ "Miner" = /obj/item/robot_module/miner, \ "Janitor" = /obj/item/robot_module/janitor, \ - "Service" = /obj/item/robot_module/butler, \ - "MediHound" = /obj/item/robot_module/medihound, \ - "Security K9" = /obj/item/robot_module/k9, \ - "Scrub Puppy" = /obj/item/robot_module/scrubpup) + "Service" = /obj/item/robot_module/butler) if(!CONFIG_GET(flag/disable_peaceborg)) modulelist["Peacekeeper"] = /obj/item/robot_module/peacekeeper if(!CONFIG_GET(flag/disable_secborg)) modulelist["Security"] = /obj/item/robot_module/security + modulelist += get_cit_modules() //Citadel change - adds Citadel's borg modules. + var/input_module = input("Please, select a module!", "Robot", null, null) as null|anything in modulelist if(!input_module || module.type != /obj/item/robot_module) return @@ -248,17 +245,6 @@ return //won't work if dead robot_alerts() -//for borg hotkeys, here module refers to borg inv slot, not core module -/mob/living/silicon/robot/verb/cmd_toggle_module(module as num) - set name = "Toggle Module" - set hidden = 1 - toggle_module(module) - -/mob/living/silicon/robot/verb/cmd_unequip_module() - set name = "Unequip Module" - set hidden = 1 - uneq_active() - /mob/living/silicon/robot/proc/robot_alerts() var/dat = "" for (var/cat in alarms) @@ -537,6 +523,19 @@ toner = tonermax qdel(W) to_chat(user, "You fill the toner level of [src] to its max capacity.") + + else if(istype(W, /obj/item/device/flashlight)) + if(!opened) + to_chat(user, "You need to open the panel to repair the headlamp!") + if(lamp_cooldown <= world.time) + to_chat(user, "The headlamp is already functional!") + else + if(!user.temporarilyRemoveItemFromInventory(W)) + to_chat(user, "[W] seems to be stuck to your hand. You'll have to find a different light.") + return + lamp_cooldown = 0 + qdel(W) + to_chat(user, "You replace the headlamp bulbs.") else return ..() @@ -593,39 +592,25 @@ /mob/living/silicon/robot/update_icons() cut_overlays() icon_state = module.cyborg_base_icon - if(module.cyborg_base_icon == "medihound") - icon = 'icons/mob/widerobot.dmi' - pixel_x = -16 - if(sleeper_g == 1) - add_overlay("msleeper_g") - if(sleeper_r == 1) - add_overlay("msleeper_r") - if(stat == DEAD) - icon_state = "medihound-wreck" - if(module.cyborg_base_icon == "k9") - icon = 'icons/mob/widerobot.dmi' - pixel_x = -16 - if(laser == 1) - add_overlay("laser") - if(disabler == 1) - add_overlay("disabler") - if(sleeper_g == 1) - add_overlay("ksleeper_g") - if(sleeper_r == 1) - add_overlay("ksleeper_r") - if(stat == DEAD) - icon_state = "k9-wreck" + //Citadel changes start here - Allows modules to use different icon files, and allows modules to specify a pixel offset + icon = (module.cyborg_icon_override ? module.cyborg_icon_override : initial(icon)) - if(module.cyborg_base_icon == "scrubpup") - icon = 'icons/mob/widerobot.dmi' - pixel_x = -16 - if(sleeper_g == 1) - add_overlay("jsleeper_g") - if(sleeper_r == 1) - add_overlay("jsleeper_r") - if(stat == DEAD) - icon_state = "scrubpup-wreck" + if(laser) + add_overlay("laser")//Is this even used??? + if(disabler) + add_overlay("disabler")//ditto + + if(sleeper_g && module.sleeper_overlay) + add_overlay("[module.sleeper_overlay]_g") + if(sleeper_r && module.sleeper_overlay) + add_overlay("[module.sleeper_overlay]_r") + if(stat == DEAD && module.has_snowflake_deadsprite) + icon_state = "[module.cyborg_base_icon]-wreck" + + if(module.cyborg_pixel_offset) + pixel_x = module.cyborg_pixel_offset + //End of citadel changes if(module.cyborg_base_icon == "robot") icon = 'icons/mob/robots.dmi' @@ -827,6 +812,9 @@ /mob/living/silicon/robot/modules/security set_module = /obj/item/robot_module/security +/mob/living/silicon/robot/modules/clown + set_module = /obj/item/robot_module/clown + /mob/living/silicon/robot/modules/peacekeeper set_module = /obj/item/robot_module/peacekeeper @@ -844,7 +832,7 @@ lawupdate = FALSE scrambledcodes = TRUE // These are rogue borgs. ionpulse = TRUE - var/playstyle_string = "You are a Syndicate assault cyborg!
    \ + var/playstyle_string = "You are a Syndicate assault cyborg!
    \ You are armed with powerful offensive tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ Your cyborg LMG will slowly produce ammunition from your power supply, and your operative pinpointer will find and locate fellow nuclear operatives. \ Help the operatives secure the disk at all costs!" @@ -866,7 +854,7 @@ /mob/living/silicon/robot/modules/syndicate/medical icon_state = "syndi-medi" - playstyle_string = "You are a Syndicate medical cyborg!
    \ + playstyle_string = "You are a Syndicate medical cyborg!
    \ You are armed with powerful medical tools to aid you in your mission: help the operatives secure the nuclear authentication disk. \ Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ Your defibrillator paddles can revive operatives through their hardsuits, or can be used on harm intent to shock enemies! \ @@ -1023,15 +1011,16 @@ designation = module.name if(hands) hands.icon_state = module.moduleselect_icon + hands.icon = (module.moduleselect_alternate_icon ? module.moduleselect_alternate_icon : initial(hands.icon)) //CITADEL CHANGE - allows module select icons to use a different icon file if(module.can_be_pushed) status_flags |= CANPUSH else status_flags &= ~CANPUSH if(module.clean_on_move) - flags_1 |= CLEAN_ON_MOVE_1 + AddComponent(/datum/component/cleaning) else - flags_1 &= ~CLEAN_ON_MOVE_1 + qdel(GetComponent(/datum/component/cleaning)) hat_offset = module.hat_offset diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 26e455106b..84f90a0c6d 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -33,8 +33,8 @@ var/ride_allow_incapacitated = FALSE var/allow_riding = TRUE -/obj/item/robot_module/New() - ..() +/obj/item/robot_module/Initialize() + . = ..() for(var/i in basic_modules) var/obj/item/I = new i(src) basic_modules += I @@ -336,95 +336,6 @@ can_be_pushed = FALSE hat_offset = 3 -/obj/item/robot_module/k9 - name = "Security K-9 Unit module" - basic_modules = list( - /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog, - /obj/item/dogborg/jaws/big, - /obj/item/dogborg/pounce, - /obj/item/clothing/mask/gas/sechailer/cyborg, - /obj/item/soap/tongue, - /obj/item/device/analyzer/nose, - /obj/item/device/dogborg/sleeper/K9, - /obj/item/gun/energy/disabler/cyborg, - /obj/item/pinpointer/crew) - emag_modules = list(/obj/item/gun/energy/laser/cyborg) - ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security, - /obj/item/clockwork/weapon/ratvarian_spear) - cyborg_base_icon = "k9" - moduleselect_icon = "security" - can_be_pushed = FALSE - hat_offset = INFINITY - -/obj/item/robot_module/k9/do_transform_animation() - ..() - to_chat(loc,"While you have picked the security-k9 module, you still have to follow your laws, NOT Space Law. \ - For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") - -/obj/item/robot_module/security/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/gun/energy/e_gun/advtaser/cyborg/T = locate(/obj/item/gun/energy/e_gun/advtaser/cyborg) in basic_modules - if(T) - if(T.cell.charge < T.cell.maxcharge) - var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] - T.cell.give(S.e_cost * coeff) - T.update_icon() - else - T.charge_tick = 0 - -/obj/item/robot_module/medihound - name = "MediHound module" - basic_modules = list( - /obj/item/dogborg/jaws/small, - /obj/item/device/analyzer/nose, - /obj/item/soap/tongue, - /obj/item/device/healthanalyzer, - /obj/item/device/dogborg/sleeper/medihound, - /obj/item/twohanded/shockpaddles/hound, - /obj/item/stack/medical/gauze/cyborg, - /obj/item/device/sensor_device) - emag_modules = list(/obj/item/dogborg/pounce) - ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical, - /obj/item/clockwork/weapon/ratvarian_spear) - cyborg_base_icon = "medihound" - moduleselect_icon = "medical" - can_be_pushed = FALSE - hat_offset = INFINITY - -/obj/item/robot_module/medihound/do_transform_animation() - ..() - to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \ - You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.") - -/obj/item/robot_module/scrubpup - name = "Janitor" - basic_modules = list( - /obj/item/dogborg/jaws/small, - /obj/item/device/analyzer/nose, - /obj/item/soap/tongue/scrubpup, - /obj/item/device/lightreplacer/cyborg, - /obj/item/device/dogborg/sleeper/compactor) - emag_modules = list(/obj/item/dogborg/pounce) - ratvar_modules = list( - /obj/item/clockwork/slab/cyborg/janitor, - /obj/item/clockwork/replica_fabricator/cyborg) - cyborg_base_icon = "scrubpup" - moduleselect_icon = "janitor" - hat_offset = INFINITY - clean_on_move = TRUE - -/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) - ..() - var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules - if(LR) - for(var/i in 1 to coeff) - LR.Charge(R) - -/obj/item/robot_module/scrubpup/do_transform_animation() - ..() - to_chat(loc,"As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.") - - /obj/item/robot_module/security/do_transform_animation() ..() to_chat(loc, "While you have picked the security module, you still have to follow your laws, NOT Space Law. \ @@ -513,6 +424,37 @@ if(CL) CL.reagents.add_reagent("lube", 2 * coeff) +/obj/item/robot_module/clown + name = "Clown" + basic_modules = list( + /obj/item/device/assembly/flash/cyborg, + /obj/item/toy/crayon/rainbow, + /obj/item/device/instrument/bikehorn, + /obj/item/stamp/clown, + /obj/item/bikehorn, + /obj/item/bikehorn/airhorn, + /obj/item/paint/anycolor, + /obj/item/soap/nanotrasen, + /obj/item/pneumatic_cannon/pie/selfcharge/cyborg, + /obj/item/razor, //killbait material + /obj/item/lipstick/purple, + /obj/item/reagent_containers/spray/waterflower/cyborg, + /obj/item/borg/cyborghug/peacekeeper, + /obj/item/borg/lollipop/clown, + /obj/item/picket_sign/cyborg, + /obj/item/reagent_containers/borghypo/clown, + /obj/item/extinguisher/mini) + emag_modules = list( + /obj/item/reagent_containers/borghypo/clown/hacked, + /obj/item/reagent_containers/spray/waterflower/cyborg/hacked) + ratvar_modules = list( + /obj/item/clockwork/slab/cyborg, + /obj/item/clockwork/weapon/ratvarian_spear, + /obj/item/clockwork/replica_fabricator/cyborg) + moduleselect_icon = "service" + cyborg_base_icon = "clown" + hat_offset = -2 + /obj/item/robot_module/butler name = "Service" basic_modules = list( diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index b19bc401e3..383cdd268d 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -72,7 +72,7 @@ var/nearest_beacon // the nearest beacon's tag var/turf/nearest_beacon_loc // the nearest beacon's location - var/beacon_freq = 1445 // navigation beacon frequency + var/beacon_freq = FREQ_NAV_BEACON var/model = "" //The type of bot it is. var/bot_type = 0 //The type of bot it is, for radio control. var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default. @@ -108,6 +108,7 @@ if(stat) return FALSE on = TRUE + canmove = TRUE set_light(initial(light_range)) update_icon() diag_hud_set_botstat() @@ -115,6 +116,7 @@ /mob/living/simple_animal/bot/proc/turn_off() on = FALSE + canmove = FALSE set_light(0) bot_reset() //Resets an AI's call, should it exist. update_icon() @@ -129,7 +131,7 @@ Radio = new/obj/item/device/radio(src) if(radio_key) Radio.keyslot = new radio_key - Radio.subspace_transmission = 1 + Radio.subspace_transmission = TRUE Radio.canhear_range = 0 // anything greater will have the bot broadcast the channel as if it were saying it out loud. Radio.recalculateChannels() diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index efe289b222..186d0c5a41 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -125,7 +125,7 @@ if(!target) //Search for decals then. target = scan(/obj/effect/decal/cleanable) - + if(!target) //Checks for remains target = scan(/obj/effect/decal/remains) @@ -242,7 +242,7 @@ say(phrase) victim.emote("scream") playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) - victim.acid_act(5, 2, 100) + victim.acid_act(5, 100) else if(A == src) // Wets floors and spawns foam randomly if(prob(75)) var/turf/open/T = loc diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index 0ef926f942..a4e8d09121 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -282,8 +282,8 @@ var/skin = null //Same as medbot, set to tox or ointment for the respective kits. w_class = WEIGHT_CLASS_NORMAL -/obj/item/firstaid_arm_assembly/New() - ..() +/obj/item/firstaid_arm_assembly/Initialize() + . = ..() spawn(5) if(skin) add_overlay("kit_skin_[skin]") diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 707d77e2ac..2d1b7d1fe5 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -321,9 +321,9 @@ sleep(50) if(mode == BOT_REPAIRING && src.loc == target_turf) if(autotile) //Build the floor and include a tile. - target_turf.ChangeTurf(/turf/open/floor/plasteel) + target_turf.PlaceOnTop(/turf/open/floor/plasteel) else //Build a hull plating without a floor tile. - target_turf.ChangeTurf(/turf/open/floor/plating) + target_turf.PlaceOnTop(/turf/open/floor/plating) else var/turf/open/floor/F = target_turf diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 98d4557037..917211736b 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -472,8 +472,7 @@ if(isturf(next)) if(bloodiness) var/obj/effect/decal/cleanable/blood/tracks/B = new(loc) - if(blood_DNA && blood_DNA.len) - B.blood_DNA |= blood_DNA.Copy() + B.add_blood_DNA(return_blood_DNA()) var/newdir = get_dir(next, loc) if(newdir == dir) B.setDir(newdir) @@ -655,8 +654,7 @@ T.add_mob_blood(H) var/list/blood_dna = H.get_blood_dna_list() - if(blood_dna) - transfer_blood_dna(blood_dna) + add_blood_DNA(blood_dna) bloodiness += 4 // player on mulebot attempted to move diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 8046daf55d..6e5548f85c 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -32,7 +32,7 @@ initial_language_holder = /datum/language_holder/construct deathmessage = "collapses in a shattered heap." var/list/construct_spells = list() - var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." + var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." var/master = null var/seeking = FALSE var/can_repair_constructs = FALSE @@ -119,7 +119,7 @@ mob_size = MOB_SIZE_LARGE force_threshold = 11 construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) - playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \ + playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand extreme punishment, \ create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." /mob/living/simple_animal/hostile/construct/armored/hostile //actually hostile, will move around, hit things @@ -168,7 +168,7 @@ attacktext = "slashes" attack_sound = 'sound/weapons/bladeslice.ogg' construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) - playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing." + playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing." var/attack_refund = 10 //1 second per attack var/crit_refund = 50 //5 seconds when putting a target into critical var/kill_refund = 250 //full refund on kills @@ -222,7 +222,7 @@ /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ + playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ and, most important of all, create new constructs by producing soulstones to capture souls, \ and shells to place those soulstones into." @@ -296,8 +296,8 @@ attack_sound = 'sound/weapons/bladeslice.ogg' construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion, /obj/effect/proc_holder/spell/aoe_turf/conjure/lesserforcewall) - playstyle_string = "You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \ - Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly." + playstyle_string = "You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \ + Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly." can_repair_constructs = TRUE @@ -369,18 +369,18 @@ the_construct.master = C.cult_team.blood_target if(!the_construct.master) - to_chat(the_construct, "You have no master to seek!") + to_chat(the_construct, "You have no master to seek!") the_construct.seeking = FALSE return if(tracking) tracking = FALSE the_construct.seeking = FALSE - to_chat(the_construct, "You are no longer tracking your master.") + to_chat(the_construct, "You are no longer tracking your master.") return else tracking = TRUE the_construct.seeking = TRUE - to_chat(the_construct, "You are now tracking your master.") + to_chat(the_construct, "You are now tracking your master.") /datum/action/innate/seek_prey @@ -403,14 +403,14 @@ desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" button_icon_state = "cult_mark" the_construct.seeking = FALSE - to_chat(the_construct, "You are now tracking Nar'Sie, return to reap the harvest!") + to_chat(the_construct, "You are now tracking Nar'Sie, return to reap the harvest!") return else if(LAZYLEN(GLOB.cult_narsie.souls_needed)) the_construct.master = pick(GLOB.cult_narsie.souls_needed) - to_chat(the_construct, "You are now tracking your prey, [the_construct.master] - harvest them!") + to_chat(the_construct, "You are now tracking your prey, [the_construct.master] - harvest them!") else - to_chat(the_construct, "Nar'Sie has completed her harvest!") + to_chat(the_construct, "Nar'Sie has completed her harvest!") return desc = "Activate to track Nar'Sie!" button_icon_state = "sintouch" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 42d38e40a3..86f33bcbef 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -29,8 +29,6 @@ var/turns_since_scan = 0 var/mob/living/simple_animal/mouse/movement_target gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE - no_vore = FALSE /mob/living/simple_animal/pet/cat/Initialize() . = ..() @@ -256,7 +254,7 @@ if(!B || !B.brainmob || !B.brainmob.mind) return B.brainmob.mind.transfer_to(src) - to_chat(src, "You are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ + to_chat(src, "You are a cak! You're a harmless cat/cake hybrid that everyone loves. People can take bites out of you if they're hungry, but you regenerate health \ so quickly that it generally doesn't matter. You're remarkably resilient to any damage besides this and it's hard for you to really die at all. You should go around and bring happiness and \ free cake to the station!") var/new_name = stripped_input(src, "Enter your name, or press \"Cancel\" to stick with Keeki.", "Name Change") diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 35d7d12174..29d25bfabc 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -20,7 +20,6 @@ var/obj/item/inventory_head var/obj/item/inventory_mask gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE /mob/living/simple_animal/crab/Life() ..() @@ -75,4 +74,4 @@ real_name = "Evil Kreb" icon_state = "evilkreb" icon_living = "evilkreb" - icon_dead = "evilkreb_dead" + icon_dead = "evilkreb_dead" \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index adc88c5633..9d5acb2c4e 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -12,8 +12,6 @@ see_in_dark = 5 speak_chance = 1 turns_per_move = 10 - devourable = TRUE - no_vore = FALSE //Corgis and pugs are now under one dog subtype @@ -32,6 +30,7 @@ var/obj/item/inventory_back var/nofur = 0 //Corgis that have risen past the material plane of existence. gold_core_spawnable = FRIENDLY_SPAWN + can_be_held = TRUE /mob/living/simple_animal/pet/dog/pug name = "\improper pug" @@ -121,7 +120,12 @@ ..() update_corgi_fluff() - +/mob/living/simple_animal/pet/dog/corgi/mob_pickup(mob/living/L) + var/obj/item/clothing/head/mob_holder/holder = new(get_turf(src), src, "corgi", null, 'icons/mob/pets_held_lh.dmi', 'icons/mob/pets_held_rh.dmi', FALSE) + if(!L.put_in_hands(holder)) + qdel(holder) + else + L.visible_message("[L] scoops up [src]!") /mob/living/simple_animal/pet/dog/corgi/Topic(href, href_list) if(usr.stat) @@ -609,4 +613,4 @@ emote("me", 1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") \ No newline at end of file + emote("me", 1, "growls!") diff --git a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm index ea159a5749..0f265bdb07 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/_drone.dm @@ -49,6 +49,7 @@ dextrous = TRUE dextrous_hud_type = /datum/hud/dextrous/drone lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + can_be_held = TRUE var/staticChoice = "static" var/list/staticChoices = list("static", "blank", "letter", "animal") var/picked = FALSE //Have we picked our visual appearence (+ colour if applicable) @@ -67,7 +68,6 @@ var/seeStatic = 1 //Whether we see static instead of mobs var/visualAppearence = MAINTDRONE //What we appear as var/hacked = FALSE //If we have laws to destroy the station - var/can_be_held = TRUE //if assholes can pick us up var/flavortext = \ "\nDO NOT INTERFERE WITH THE ROUND AS A DRONE OR YOU WILL BE DRONE BANNED\n"+\ "Drones are a ghost role that are allowed to fix the station and build things. Interfering with the round as a drone is against the rules.\n"+\ @@ -177,24 +177,15 @@ //Hands for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" + msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" //Internal storage if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) - if(internal_storage.blood_DNA) - msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" - else - msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" //Cosmetic hat - provides no function other than looks if(head && !(head.flags_1&ABSTRACT_1)) - if(head.blood_DNA) - msg += "It is wearing [icon2html(head, user)] [head.gender==PLURAL?"some":"a"] blood-stained [head.name] on its head!\n" - else - msg += "It is wearing [icon2html(head, user)] \a [head] on its head.\n" + msg += "It is wearing [head.get_examine_string(user)] on its head.\n" //Braindead if(!client && stat != DEAD) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index c0a57e3739..32c735016c 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -4,8 +4,6 @@ //DRONES AS ITEMS// /////////////////// //Drone shells -//Drones as hats - //DRONE SHELL /obj/item/drone_shell @@ -14,13 +12,26 @@ icon = 'icons/mob/drone.dmi' icon_state = "drone_maint_hat"//yes reuse the _hat state. var/drone_type = /mob/living/simple_animal/drone //Type of drone that will be spawned + var/seasonal_hats = TRUE //If TRUE, and there are no default hats, different holidays will grant different hats + var/static/list/possible_seasonal_hats //This is built automatically in build_seasonal_hats() but can also be edited by admins! -/obj/item/drone_shell/New() - ..() +/obj/item/drone_shell/Initialize() + . = ..() var/area/A = get_area(src) if(A) notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) GLOB.poi_list |= src + if(isnull(possible_seasonal_hats)) + build_seasonal_hats() + +/obj/item/drone_shell/proc/build_seasonal_hats() + possible_seasonal_hats = list() + if(!length(SSevents.holidays)) + return //no holidays, no hats; we'll keep the empty list so we never call this proc again + for(var/V in SSevents.holidays) + var/datum/holiday/holiday = SSevents.holidays[V] + if(holiday.drone_hat) + possible_seasonal_hats += holiday.drone_hat /obj/item/drone_shell/Destroy() GLOB.poi_list -= src @@ -42,48 +53,10 @@ if(be_drone == "No" || QDELETED(src) || !isobserver(user)) return var/mob/living/simple_animal/drone/D = new drone_type(get_turf(loc)) + if(!D.default_hatmask && seasonal_hats && possible_seasonal_hats.len) + var/hat_type = pick(possible_seasonal_hats) + var/obj/item/new_hat = new hat_type(D) + D.equip_to_slot_or_del(new_hat, slot_head) D.admin_spawned = admin_spawned D.key = user.key - qdel(src) - - -//DRONE HOLDER -/obj/item/clothing/head/drone_holder//Only exists in someones hand.or on their head - name = "drone (hiding)" - desc = "This drone is scared and has curled up into a ball." - icon = 'icons/mob/drone.dmi' - icon_state = "drone_maint_hat" - var/mob/living/simple_animal/drone/drone //stored drone - -/obj/item/clothing/head/drone_holder/proc/uncurl() - if(!drone) - return - - if(isliving(loc)) - var/mob/living/L = loc - to_chat(L, "[drone] is trying to escape!") - if(!do_after(drone, 50, target = L)) - return - L.dropItemToGround(src) - - contents -= drone - drone.forceMove(drop_location()) - drone.reset_perspective() - drone.setDir(SOUTH )//Looks better - drone.visible_message("[drone] uncurls!") - drone = null - qdel(src) - - -/obj/item/clothing/head/drone_holder/relaymove() - uncurl() - -/obj/item/clothing/head/drone_holder/container_resist(mob/living/user) - uncurl() - - -/obj/item/clothing/head/drone_holder/proc/updateVisualAppearence(mob/living/simple_animal/drone/D) - if(!D) - return - icon_state = "[D.visualAppearence]_hat" - . = icon_state + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index df67c720b4..6d87563ae9 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -29,7 +29,6 @@ if("Nothing") return - /mob/living/simple_animal/drone/attack_hand(mob/user) if(ishuman(user)) if(stat == DEAD || status_flags & GODMODE || !can_be_held) @@ -49,11 +48,8 @@ return to_chat(user, "You pick [src] up.") drop_all_held_items() - var/obj/item/clothing/head/drone_holder/DH = new /obj/item/clothing/head/drone_holder(src) - DH.updateVisualAppearence(src) - DH.drone = src + var/obj/item/clothing/head/mob_holder/drone/DH = new(get_turf(src), src) user.put_in_hands(DH) - forceMove(DH) /mob/living/simple_animal/drone/proc/try_reactivate(mob/living/user) var/mob/dead/observer/G = get_ghost() diff --git a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm b/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm index 86bc3b69e5..a6795678f1 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/verbs.dm @@ -11,7 +11,7 @@ to_chat(src, "Drone Laws") to_chat(src, laws) - + /mob/living/simple_animal/drone/verb/drone_ping() set category = "Drone" set name = "Drone ping" @@ -24,7 +24,6 @@ var/msg = "DRONE PING: [name]: [alert_s] priority alert in [A.name]!" alert_drones(msg) - /mob/living/simple_animal/drone/verb/toggle_statics() set name = "Change Vision Filter" set desc = "Change the filter on the system used to remove non drone beings from your viewscreen." diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index cbd14bb376..39209f6ca6 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -28,8 +28,6 @@ stop_automated_movement_when_pulled = 1 blood_volume = BLOOD_VOLUME_NORMAL var/obj/item/udder/udder = null - devourable = TRUE - no_vore = FALSE /mob/living/simple_animal/hostile/retaliate/goat/Initialize() udder = new() @@ -66,7 +64,7 @@ src.visible_message("[src] gets an evil-looking gleam in [p_their()] eye.") /mob/living/simple_animal/hostile/retaliate/goat/Move() - ..() + . = ..() if(!stat) eat_plants() @@ -119,8 +117,6 @@ var/obj/item/udder/udder = null gold_core_spawnable = FRIENDLY_SPAWN blood_volume = BLOOD_VOLUME_NORMAL - devourable = TRUE - no_vore = FALSE /mob/living/simple_animal/cow/Initialize() udder = new() @@ -196,7 +192,6 @@ pass_flags = PASSTABLE | PASSGRILLE | PASSMOB mob_size = MOB_SIZE_TINY gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE /mob/living/simple_animal/chick/Initialize() . = ..() @@ -252,8 +247,6 @@ var/list/validColors = list("brown","black","white") gold_core_spawnable = FRIENDLY_SPAWN var/static/chicken_count = 0 - devourable = TRUE - no_vore = FALSE /mob/living/simple_animal/chicken/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/fox.dm b/code/modules/mob/living/simple_animal/friendly/fox.dm index b9192c1746..53d7939341 100644 --- a/code/modules/mob/living/simple_animal/friendly/fox.dm +++ b/code/modules/mob/living/simple_animal/friendly/fox.dm @@ -18,47 +18,6 @@ response_disarm = "gently pushes aside" response_harm = "kicks" gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE - var/mob/living/simple_animal/mouse/movement_target - var/turns_since_scan = 0 - no_vore = FALSE - -/mob/living/simple_animal/pet/fox/Life() - //MICE! - if((src.loc) && isturf(src.loc)) - if(!stat && !resting && !buckled) - for(var/mob/living/simple_animal/mouse/M in view(1,src)) - if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") - M.splat() - movement_target = null - stop_automated_movement = 0 - break - for(var/obj/item/toy/cattoy/T in view(1,src)) - if (T.cooldown < (world.time - 400)) - emote("me", 1, "bats \the [T] around with its paw!") - T.cooldown = world.time - - ..() - - if(!stat && !resting && !buckled) - turns_since_scan++ - if(turns_since_scan > 5) - walk_to(src,0) - turns_since_scan = 0 - if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) )) - movement_target = null - stop_automated_movement = 0 - if( !movement_target || !(movement_target.loc in oview(src, 3)) ) - movement_target = null - stop_automated_movement = 0 - for(var/mob/living/simple_animal/mouse/snack in oview(src,3)) - if(isturf(snack.loc) && !snack.stat) - movement_target = snack - break - if(movement_target) - stop_automated_movement = 1 - walk_to(src,movement_target,0,3) //Captain fox /mob/living/simple_animal/pet/fox/Renault diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm index f45e7f7950..e596b09ba9 100644 --- a/code/modules/mob/living/simple_animal/friendly/lizard.dm +++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm @@ -19,7 +19,6 @@ pass_flags = PASSTABLE | PASSMOB mob_size = MOB_SIZE_SMALL gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE obj_damage = 0 environment_smash = ENVIRONMENT_SMASH_NONE var/static/list/edibles = typecacheof(list(/mob/living/simple_animal/butterfly, /mob/living/simple_animal/cockroach)) //list of atoms, however turfs won't affect AI, but will affect consumption. diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 809681ed6b..6543fd8f64 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -24,7 +24,6 @@ var/body_color //brown, gray and white, leave blank for random gold_core_spawnable = FRIENDLY_SPAWN var/chew_probability = 1 - devourable = TRUE /mob/living/simple_animal/mouse/Initialize() . = ..() diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index fe0187fee6..e7220eb5e8 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -13,7 +13,6 @@ speak_chance = 1 turns_per_move = 10 icon = 'icons/mob/penguins.dmi' - no_vore = FALSE /mob/living/simple_animal/pet/penguin/emperor name = "Emperor penguin" diff --git a/code/modules/mob/living/simple_animal/friendly/pet.dm b/code/modules/mob/living/simple_animal/friendly/pet.dm index 3200c8b7d7..5fa0cede48 100644 --- a/code/modules/mob/living/simple_animal/friendly/pet.dm +++ b/code/modules/mob/living/simple_animal/friendly/pet.dm @@ -5,21 +5,23 @@ var/collar = "" var/pettag = "" blood_volume = BLOOD_VOLUME_NORMAL - devourable = TRUE /mob/living/simple_animal/pet/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/clothing/neck/petcollar) && !pcollar) - var/obj/item/clothing/neck/petcollar/P = O - pcollar = P - collar = "[icon_state]collar" - pettag = "[icon_state]tag" - regenerate_icons() - to_chat(user, "You put the [P] around [src]'s neck.") - if(P.tagname) - real_name = "\proper [P.tagname]" - name = real_name - qdel(P) - return + var/pet_icon_states = icon_states("[icon]") + if("[icon_state]collar" in pet_icon_states) + var/obj/item/clothing/neck/petcollar/P = O + pcollar = P + collar = "[icon_state]collar" + pettag = "[icon_state]tag" + regenerate_icons() + to_chat(user, "You put the [P] around [src]'s neck.") + if(P.tagname) + real_name = "\proper [P.tagname]" + name = real_name + qdel(P) + return + if(istype(O, /obj/item/newspaper)) if(!stat) user.visible_message("[user] baps [name] on the nose with the rolled up [O].") @@ -51,3 +53,4 @@ add_overlay(collar) if(pettag) add_overlay(pettag) + diff --git a/code/modules/mob/living/simple_animal/friendly/sloth.dm b/code/modules/mob/living/simple_animal/friendly/sloth.dm index 6f19632e88..8b7d70ef9f 100644 --- a/code/modules/mob/living/simple_animal/friendly/sloth.dm +++ b/code/modules/mob/living/simple_animal/friendly/sloth.dm @@ -21,7 +21,7 @@ maxHealth = 50 speed = 10 glide_size = 2 - devourable = TRUE + //Cargo Sloth /mob/living/simple_animal/sloth/paperwork diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 577eba1858..fbed7d4331 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/range = 10 //how far from the user the spirit can be var/toggle_button_type = /obj/screen/guardian/ToggleMode/Inactive //what sort of toggle button the hud uses var/datum/guardianname/namedatum = new/datum/guardianname() - var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" + var/playstyle_string = "You are a standard Guardian. You shouldn't exist!" var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" var/carp_fluff_string = "CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP" @@ -57,7 +57,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians . = ..() /mob/living/simple_animal/hostile/guardian/med_hud_set_health() - if(!QDELETED(summoner)) + if(summoner) var/image/holder = hud_list[HEALTH_HUD] holder.icon_state = "hud[RoundHealth(summoner)]" @@ -117,7 +117,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(mind) mind.name = "[real_name]" if(!summoner) - to_chat(src, "For some reason, somehow, you have no summoner. Please report this bug immediately.") + to_chat(src, "For some reason, somehow, you have no summoner. Please report this bug immediately.") return to_chat(src, "You are [real_name], bound to serve [summoner.real_name].") to_chat(src, "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with them privately there.") @@ -358,7 +358,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!input) return - var/preliminary_message = "[input]" //apply basic color/bolding + var/preliminary_message = "[input]" //apply basic color/bolding var/my_message = "[src]: [preliminary_message]" //add source, color source with the guardian's color to_chat(summoner, my_message) @@ -379,8 +379,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(!input) return - var/preliminary_message = "[input]" //apply basic color/bolding - var/my_message = "[src]: [preliminary_message]" //add source, color source with default grey... + var/preliminary_message = "[input]" //apply basic color/bolding + var/my_message = "[src]: [preliminary_message]" //add source, color source with default grey... to_chat(src, my_message) var/list/guardians = hasparasites() @@ -423,7 +423,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(candidates.len) new_stand = pick(candidates) to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.") - to_chat(src, "Your [G.real_name] has been successfully reset.") + to_chat(src, "Your [G.real_name] has been successfully reset.") message_admins("[key_name_admin(new_stand)] has taken control of ([key_name_admin(G)])") G.ghostize(0) G.setthemename(G.namedatum.theme) //give it a new color, to show it's a new person @@ -469,9 +469,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/mob_name = "Guardian Spirit" var/use_message = "You shuffle the deck..." var/used_message = "All the cards seem to be blank now." - var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later." - var/ling_failure = "The deck refuses to respond to a souless creature such as you." - var/activation_message = "The rest of the deck rapidly flashes to ash!" + var/failure_message = "..And draw a card! It's...blank? Maybe you should try again later." + var/ling_failure = "The deck refuses to respond to a souless creature such as you." var/list/possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support") var/random = TRUE var/allowmultiple = FALSE @@ -500,8 +499,6 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians if(candidates.len) theghost = pick(candidates) spawn_guardian(user, theghost.key) - to_chat(user, "[activation_message]") - qdel(src) else to_chat(user, "[failure_message]") used = FALSE @@ -593,9 +590,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians mob_name = "Holoparasite" use_message = "You start to power on the injector..." used_message = "The injector has already been used." - failure_message = "...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER." - ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you." - activation_message = "The injector self destructs after you inject yourself with it." + failure_message = "...ERROR. BOOT SEQUENCE ABORTED. AI FAILED TO INTIALIZE. PLEASE CONTACT SUPPORT OR TRY AGAIN LATER." + ling_failure = "The holoparasites recoil in horror. They want nothing to do with a creature like you." /obj/item/guardiancreator/tech/choose/traitor possible_guardians = list("Assassin", "Chaos", "Charger", "Explosive", "Lightning", "Protector", "Ranged", "Standard", "Support") @@ -608,7 +604,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians /obj/item/paper/guides/antag/guardian name = "Holoparasite Guide" - icon_state = "alienpaper_words" + icon_state = "paper_words" info = {"A list of Holoparasite Types

    @@ -677,9 +673,8 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians mob_name = "Holocarp" use_message = "You put the fishsticks in your mouth..." used_message = "Someone's already taken a bite out of these fishsticks! Ew." - failure_message = "You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up." - ling_failure = "Carp'sie is fine with changelings, so you shouldn't be seeing this message." - activation_message = "You finish eating the fishsticks! Delicious!>" + failure_message = "You couldn't catch any carp spirits from the seas of Lake Carp. Maybe there are none, maybe you fucked up." + ling_failure = "Carp'sie is fine with changelings, so you shouldn't be seeing this message." allowmultiple = TRUE allowling = TRUE random = TRUE diff --git a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm index 2f3ee4cefb..f36a30ccae 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/dextrous.dm @@ -31,16 +31,9 @@ for(var/obj/item/I in held_items) if(!(I.flags_1 & ABSTRACT_1)) - if(I.blood_DNA) - msg += "It has [icon2html(I, user)] [I.gender==PLURAL?"some":"a"] blood-stained [I.name] in its [get_held_index_name(get_held_index_of_item(I))]!\n" - else - msg += "It has [icon2html(I, user)] \a [I] in its [get_held_index_name(get_held_index_of_item(I))].\n" - + msg += "It has [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))].\n" if(internal_storage && !(internal_storage.flags_1&ABSTRACT_1)) - if(internal_storage.blood_DNA) - msg += "It is holding [icon2html(internal_storage, user)] [internal_storage.gender==PLURAL?"some":"a"] blood-stained [internal_storage.name] in its internal storage!\n" - else - msg += "It is holding [icon2html(internal_storage, user)] \a [internal_storage] in its internal storage.\n" + msg += "It is holding [internal_storage.get_examine_string(user)] in its internal storage.\n" msg += "*---------*" to_chat(user, msg) else diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 2651065b75..57718459fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -35,8 +35,6 @@ gold_core_spawnable = NO_SPAWN death_sound = 'sound/voice/hiss6.ogg' deathmessage = "lets out a waning guttural screech, green blood bubbling from its maw..." - devourable = TRUE - no_vore = FALSE /mob/living/simple_animal/hostile/alien/drone name = "alien drone" @@ -173,6 +171,6 @@ qdel(target) return TRUE var/atom/movable/M = target - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) visible_message("[src] polishes \the [target].") return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index d63b5d4114..3334eb3b93 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -37,8 +37,6 @@ faction = list("russian") gold_core_spawnable = HOSTILE_SPAWN - devourable = TRUE - no_vore = FALSE //SPACE BEARS! SQUEEEEEEEE~ OW! FUCK! IT BIT MY HAND OFF!! /mob/living/simple_animal/hostile/bear/Hudson diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 2929e146f1..0650f90fc6 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -39,4 +39,4 @@ var/mob/living/carbon/C = target C.Knockdown(60) C.visible_message("\The [src] knocks down \the [C]!", \ - "\The [src] knocks you down!") + "\The [src] knocks you down!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 2d18fd3331..9e2b55d6d7 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -48,7 +48,6 @@ see_in_dark = 4 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE var/playable_spider = FALSE - devourable = TRUE var/datum/action/innate/spider/lay_web/lay_web var/directive = "" //Message passed down to children, to relay the creator's orders diff --git a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm index 84bb54f242..21895d58c0 100644 --- a/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm +++ b/code/modules/mob/living/simple_animal/hostile/gorilla/gorilla.dm @@ -35,8 +35,6 @@ unique_name = TRUE var/list/gorilla_overlays[GORILLA_TOTAL_LAYERS] var/oogas = 0 - devourable = TRUE - no_vore = FALSE // Gorillas like to dismember limbs from unconcious mobs. // Returns null when the target is not an unconcious carbon mob; a list of limbs (possibly empty) otherwise. @@ -105,3 +103,4 @@ if(oogas >= rand(2,6)) playsound(src, "sound/creatures/gorilla.ogg", 200) oogas = 0 + diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 10d9fd93d7..5fd32e8c25 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -28,9 +28,6 @@ var/ranged_message = "fires" //Fluff text for ranged mobs var/ranged_cooldown = 0 //What the current cooldown on ranged attacks is, generally world.time + ranged_cooldown_time var/ranged_cooldown_time = 30 //How long, in deciseconds, the cooldown of ranged attacks is - var/ranged_telegraph = "prepares to fire at *TARGET*!" //A message shown when the mob prepares to fire; use *TARGET* if you want to show the target's name - var/ranged_telegraph_sound //A sound played when the mob prepares to fire - var/ranged_telegraph_time = 0 //In deciseconds, how long between the telegraph and ranged shot var/ranged_ignores_vision = FALSE //if it'll fire ranged attacks even if it lacks vision on its target, only works with environment smash var/check_friendly_fire = 0 // Should the ranged mob check for friendlies when shooting var/retreat_distance = null //If our mob runs from players when they're too close, set in tile distance. By default, mobs do not retreat. @@ -231,24 +228,15 @@ if(!target || !CanAttack(target)) LoseTarget() return 0 - if(ismob(target.loc)) - LoseTarget() - return 0 if(target in possible_targets) - if(target.z != z) + var/turf/T = get_turf(src) + if(target.z != T.z) LoseTarget() return 0 var/target_distance = get_dist(targets_from,target) if(ranged) //We ranged? Shoot at em if(!target.Adjacent(targets_from) && ranged_cooldown <= world.time) //But make sure they're not in range for a melee attack and our range attack is off cooldown - if(!ranged_telegraph_time || client) - OpenFire(target) - else - if(ranged_telegraph) - visible_message("[src] [replacetext(ranged_telegraph, "*TARGET*", "[target]")]") - if(ranged_telegraph_sound) - playsound(src, ranged_telegraph_sound, 75, FALSE) - addtimer(CALLBACK(src, .proc/OpenFire, target), ranged_telegraph_time) + OpenFire(target) if(!Process_Spacemove()) //Drifting walk(src,0) return 1 @@ -288,7 +276,7 @@ if(search_objects)//Turn off item searching and ignore whatever item we were looking at, we're more concerned with fight or flight target = null LoseSearchObjects() - if(AIStatus == AI_IDLE) + if(AIStatus != AI_ON && AIStatus != AI_OFF) toggle_ai(AI_ON) FindTarget() else if(target != null && prob(40))//No more pulling a mob forever and having a second player attack it, it can switch targets now if it finds a more suitable one @@ -412,12 +400,11 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega DestroyObjectsInDirection(dir) - /mob/living/simple_animal/hostile/proc/EscapeConfinement() if(buckled) buckled.attack_animal(src) if(!isturf(targets_from.loc) && targets_from.loc != null)//Did someone put us in something? - var/atom/A = get_turf(targets_from) + var/atom/A = targets_from.loc A.attack_animal(src)//Bang on it till we get out @@ -479,6 +466,31 @@ mob/living/simple_animal/hostile/proc/DestroySurroundings() // for use with mega /mob/living/simple_animal/hostile/consider_wakeup() ..() - if(AIStatus == AI_IDLE && FindTarget(ListTargets(), 1)) + var/list/tlist + var/turf/T = get_turf(src) + + if (!T) + return + + if (!length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 + toggle_ai(AI_Z_OFF) + return + + if (isturf(T) && !is_station_level(T.z)) + tlist = ListTargetsLazy(T.z) + else + tlist = ListTargets() + + if(AIStatus == AI_IDLE && FindTarget(tlist, 1)) toggle_ai(AI_ON) +/mob/living/simple_animal/hostile/proc/ListTargetsLazy(var/_Z)//Step 1, find out what we can see + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/structure/destructible/clockwork/ocular_warden)) + . = list() + for (var/I in SSmobs.clients_by_zlevel[_Z]) + var/mob/M = I + if (get_dist(M, src) < vision_range) + if (isturf(M.loc)) + . += M + else if (M.loc.type in hostile_machines) + . += M.loc diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index f9868771ac..a1cb61c115 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -283,9 +283,8 @@ /mob/living/simple_animal/hostile/syndicate/mecha_pilot/Move(NewLoc,Dir=0,step_x=0,step_y=0) if(mecha && loc == mecha) - mecha.relaymove(src, Dir) - return - ..() + return mecha.relaymove(src, Dir) + return ..() /mob/living/simple_animal/hostile/syndicate/mecha_pilot/Goto(target, delay, minimum_distance) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm index 03f466ddfd..0e67921f3d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/blood_drunk_miner.dm @@ -114,7 +114,7 @@ Difficulty: Medium if(L.stat == DEAD) visible_message("[src] butchers [L]!", "You butcher [L], restoring your health!") - if(!(z in GLOB.station_z_levels && !client)) //NPC monsters won't heal while on station + if(!is_station_level(z) || client) //NPC monsters won't heal while on station if(guidance) adjustHealth(-L.maxHealth) else @@ -163,7 +163,7 @@ Difficulty: Medium // do not take my touching of it to be endorsement of it. ~mso /mob/living/simple_animal/hostile/megafauna/blood_drunk_miner/proc/quick_attack_loop() while(!QDELETED(target) && next_move <= world.time) //this is done this way because next_move can change to be sooner while we sleep. - stoplag(1) + stoplag(1) sleep((next_move - world.time) * 1.5) //but don't ask me what the fuck this is about if(QDELETED(target)) return @@ -251,9 +251,9 @@ Difficulty: Medium animate(src, transform = M, pixel_y = -6, dir = final_dir, time = 2, easing = EASE_IN|EASE_OUT) sleep(5) - animate(src, color = list("#A7A19E", "#A7A19E", "#A7A19E", list(0, 0, 0)), time = 10, easing = EASE_IN, flags_1 = ANIMATION_PARALLEL) + animate(src, color = list("#A7A19E", "#A7A19E", "#A7A19E", list(0, 0, 0)), time = 10, easing = EASE_IN, flags = ANIMATION_PARALLEL) sleep(4) - animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags_1 = ANIMATION_PARALLEL) + animate(src, alpha = 0, time = 6, easing = EASE_OUT, flags = ANIMATION_PARALLEL) /obj/item/device/gps/internal/miner icon_state = null diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index d47385efc3..0388c1b4f9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -558,7 +558,7 @@ Difficulty: Very Hard H.regenerate_limbs() H.regenerate_organs() H.revive(1,0) - H.disabilities |= NOCLONE //Free revives, but significantly limits your options for reviving except via the crystal + H.add_disability(DISABILITY_NOCLONE, MAGIC_DISABILITY) //Free revives, but significantly limits your options for reviving except via the crystal H.grab_ghost(force = TRUE) /obj/machinery/anomalous_crystal/helpers //Lets ghost spawn as helpful creatures that can only heal people slightly. Incredibly fragile and they can't converse with humans @@ -719,7 +719,7 @@ Difficulty: Very Hard if(isliving(A) && holder_animal) var/mob/living/L = A L.notransform = 1 - L.disabilities |= MUTE + L.add_disability(DISABILITY_MUTE, STASIS_MUTE) L.status_flags |= GODMODE L.mind.transfer_to(holder_animal) var/obj/effect/proc_holder/spell/targeted/exit_possession/P = new /obj/effect/proc_holder/spell/targeted/exit_possession @@ -729,7 +729,7 @@ Difficulty: Very Hard /obj/structure/closet/stasis/dump_contents(var/kill = 1) STOP_PROCESSING(SSobj, src) for(var/mob/living/L in src) - L.disabilities &= ~MUTE + L.remove_disability(DISABILITY_MUTE, STASIS_MUTE) L.status_flags &= ~GODMODE L.notransform = 0 if(holder_animal) @@ -783,4 +783,4 @@ Difficulty: Very Hard #undef ACTIVATE_WEAPON #undef ACTIVATE_MAGIC -#undef MEDAL_PREFIX \ No newline at end of file +#undef MEDAL_PREFIX diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 724e4fc5c7..c8e7c7e4f5 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -61,7 +61,6 @@ Difficulty: Medium score_type = DRAKE_SCORE deathmessage = "collapses into a pile of bones, its flesh sloughing away." death_sound = 'sound/magic/demon_dies.ogg' - no_vore = FALSE /mob/living/simple_animal/hostile/megafauna/dragon/Initialize() . = ..() @@ -192,7 +191,7 @@ Difficulty: Medium qdel(F) if(stat == DEAD) swooping &= ~SWOOP_DAMAGEABLE - animate(src, alpha = 255, transform = oldtransform, time = 0, flags_1 = ANIMATION_END_NOW) //reset immediately + animate(src, alpha = 255, transform = oldtransform, time = 0, flags = ANIMATION_END_NOW) //reset immediately return animate(src, alpha = 100, transform = matrix()*0.7, time = 7) swooping |= SWOOP_INVULNERABLE diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 5c95c2ec26..e34fc76467 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -105,7 +105,7 @@ visible_message( "[src] devours [L]!", "You feast on [L], restoring your health!") - if(!(z in GLOB.station_z_levels && !client)) //NPC monsters won't heal while on station + if(!is_station_level(z) || client) //NPC monsters won't heal while on station adjustBruteLoss(-L.maxHealth/2) L.gib() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm index 7a3a85c35b..bc4686fd42 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm @@ -14,9 +14,6 @@ ranged = 1 ranged_message = "stares" ranged_cooldown_time = 30 - ranged_telegraph = "gathers energy and stares at *TARGET*!" - ranged_telegraph_sound = 'sound/magic/magic_missile.ogg' - ranged_telegraph_time = 7 throw_message = "does nothing against the hard shell of" vision_range = 2 speed = 3 @@ -74,11 +71,9 @@ melee_damage_lower = 15 melee_damage_upper = 15 attacktext = "impales" - ranged_telegraph = "fixates on *TARGET* as its eye shines blue!" - ranged_telegraph_sound = 'sound/magic/tail_swing.ogg' - ranged_telegraph_time = 5 a_intent = INTENT_HARM speak_emote = list("telepathically cries") + attack_sound = 'sound/weapons/bladeslice.ogg' stat_attack = UNCONSCIOUS movement_type = FLYING robust_searching = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index af283b9139..de995f951a 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -31,7 +31,6 @@ var/pre_attack = 0 var/pre_attack_icon = "Goliath_preattack" loot = list(/obj/item/stack/sheet/animalhide/goliath_hide) - no_vore = FALSE /mob/living/simple_animal/hostile/asteroid/goliath/Life() . = ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm index ad7edb1716..3c40bacde8 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/gutlunch.dm @@ -123,7 +123,8 @@ /obj/item/udder/gutlunch name = "nutrient sac" -/obj/item/udder/gutlunch/New() +/obj/item/udder/gutlunch/Initialize() + . = ..() reagents = new(50) reagents.my_atom = src diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm index 923c34fef2..f03cc476fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm @@ -39,7 +39,7 @@ for(var/F in RANGE_TURFS(1, src)) if(ismineralturf(F)) var/turf/closed/mineral/M = F - M.ChangeTurf(M.turf_type,FALSE,FALSE,TRUE) + M.ChangeTurf(M.turf_type, null, CHANGETURF_IGNORE_AIR) gps = new /obj/item/device/gps/internal(src) /mob/living/simple_animal/hostile/spawner/lavaland/Destroy() diff --git a/code/modules/mob/living/simple_animal/hostile/pirate.dm b/code/modules/mob/living/simple_animal/hostile/pirate.dm index 8ad8babb36..7479b1aaa2 100644 --- a/code/modules/mob/living/simple_animal/hostile/pirate.dm +++ b/code/modules/mob/living/simple_animal/hostile/pirate.dm @@ -64,3 +64,4 @@ projectiletype = /obj/item/projectile/beam/laser loot = list(/obj/effect/mob_spawn/human/corpse/pirate/ranged, /obj/item/gun/energy/laser) + diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 8355bd2e27..29bc2cbff0 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -12,8 +12,8 @@ var/growth_time = 1200 -/obj/structure/alien/resin/flower_bud_enemy/New() - ..() +/obj/structure/alien/resin/flower_bud_enemy/Initialize() + . = ..() var/list/anchors = list() anchors += locate(x-2,y+2,z) anchors += locate(x+2,y+2,z) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index e4de22b2a7..c6c83df06b 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -60,8 +60,6 @@ mob_size = MOB_SIZE_SMALL movement_type = FLYING gold_core_spawnable = FRIENDLY_SPAWN - devourable = TRUE - no_vore = FALSE var/parrot_damage_upper = 10 var/parrot_state = PARROT_WANDER //Hunt for a perch when created @@ -1001,6 +999,7 @@ parrot_interest = null H.visible_message("[src] dive bombs into [H]'s chest and vanishes!", "[src] dive bombs into your chest, vanishing! This can't be good!") + /mob/living/simple_animal/parrot/clock_hawk name = "clock hawk" desc = "Cbyl jnaan penpxre! Fdhnnnjx!" diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 4c5b94f2e3..b7e33173d2 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -82,14 +82,14 @@ var/dextrous_hud_type = /datum/hud/dextrous var/datum/personal_crafting/handcrafting - var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever) + var/AIStatus = AI_ON //The Status of our AI, can be set to AI_ON (On, usual processing), AI_IDLE (Will not process, but will return to AI_ON if an enemy comes near), AI_OFF (Off, Not processing ever), AI_Z_OFF (Temporarily off due to nonpresence of players) var/shouldwakeup = FALSE //convenience var for forcibly waking up an idling AI on next check. //domestication var/tame = 0 - no_vore = TRUE + var/my_z // I don't want to confuse this with client registered_z /mob/living/simple_animal/Initialize() . = ..() @@ -544,7 +544,13 @@ /mob/living/simple_animal/proc/toggle_ai(togglestatus) if (AIStatus != togglestatus) - if (togglestatus > 0 && togglestatus < 4) + if (togglestatus > 0 && togglestatus < 5) + if (togglestatus == AI_Z_OFF || AIStatus == AI_Z_OFF) + var/turf/T = get_turf(src) + if (AIStatus == AI_Z_OFF) + SSidlenpcpool.idle_mobs_by_zlevel[T.z] -= src + else + SSidlenpcpool.idle_mobs_by_zlevel[T.z] += src GLOB.simple_animals[AIStatus] -= src GLOB.simple_animals[togglestatus] += src AIStatus = togglestatus @@ -559,4 +565,11 @@ . = ..() if(!ckey && !stat)//Not unconscious if(AIStatus == AI_IDLE) - toggle_ai(AI_ON) \ No newline at end of file + toggle_ai(AI_ON) + + +/mob/living/simple_animal/onTransitZ(old_z, new_z) + ..() + if (AIStatus == AI_Z_OFF) + SSidlenpcpool[old_z] -= src + toggle_ai(initial(AIStatus)) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 3d50f03e17..95033b1459 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -1,6 +1,6 @@ //Here are the procs used to modify status effects of a mob. //The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, -// eye damage, eye_blind, eye_blurry, druggy, BLIND disability, and NEARSIGHT disability. +// eye damage, eye_blind, eye_blurry, druggy, DISABILITY_BLIND disability, and DISABILITY_NEARSIGHT disability. ////////////////////////////// STUN //////////////////////////////////// @@ -137,3 +137,79 @@ to_chat(src, "[priority_absorb_key["self_message"]]") priority_absorb_key["stuns_absorbed"] += amount return TRUE + +/////////////////////////////////// DISABILITIES //////////////////////////////////// + +/mob/living/proc/add_disability(disability, source) + if(!disabilities[disability]) + disabilities[disability] = list(source) + else + disabilities[disability] |= list(source) + +/mob/living/proc/remove_disability(disability, list/sources) + if(!disabilities[disability]) + return + + if(!islist(sources)) + sources = list(sources) + + if(LAZYLEN(sources)) + for(var/S in sources) + if(S in disabilities[disability]) + disabilities[disability] -= S + else + disabilities[disability] = list() + + if(!LAZYLEN(disabilities[disability])) + disabilities -= disability + +/mob/living/proc/has_disability(disability, list/sources) + if(!disabilities[disability]) + return FALSE + + . = FALSE + + if(LAZYLEN(sources)) + for(var/S in sources) + if(S in disabilities[disability]) + return TRUE + else + if(LAZYLEN(disabilities[disability])) + return TRUE + +/mob/living/proc/remove_all_disabilities() + disabilities = list() + +/////////////////////////////////// DISABILITY PROCS //////////////////////////////////// + +/mob/living/proc/cure_blind(list/sources) + remove_disability(DISABILITY_BLIND, sources) + if(!has_disability(DISABILITY_BLIND)) + adjust_blindness(-1) + +/mob/living/proc/become_blind(source) + if(!has_disability(DISABILITY_BLIND)) + blind_eyes(1) + add_disability(DISABILITY_BLIND, source) + +/mob/living/proc/cure_nearsighted(list/sources) + remove_disability(DISABILITY_NEARSIGHT, sources) + if(!has_disability(DISABILITY_NEARSIGHT)) + clear_fullscreen("nearsighted") + +/mob/living/proc/become_nearsighted(source) + if(!has_disability(DISABILITY_NEARSIGHT)) + overlay_fullscreen("nearsighted", /obj/screen/fullscreen/impaired, 1) + add_disability(DISABILITY_NEARSIGHT, source) + +/mob/living/proc/cure_husk(list/sources) + remove_disability(DISABILITY_HUSK, sources) + if(!has_disability(DISABILITY_HUSK)) + status_flags &= ~DISFIGURED + update_body() + +/mob/living/proc/become_husk(source) + if(!has_disability(DISABILITY_HUSK)) + status_flags |= DISFIGURED //makes them unknown + update_body() + add_disability(DISABILITY_HUSK, source) \ No newline at end of file diff --git a/code/modules/mob/living/ventcrawling.dm b/code/modules/mob/living/ventcrawling.dm index 471e103c26..2d3ed3d669 100644 --- a/code/modules/mob/living/ventcrawling.dm +++ b/code/modules/mob/living/ventcrawling.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list( if(vent_found) - var/datum/pipeline/vent_found_parent = vent_found.PARENT1 + var/datum/pipeline/vent_found_parent = vent_found.parents[1] if(vent_found_parent && (vent_found_parent.members.len || vent_found_parent.other_atmosmch)) visible_message("[src] begins climbing into the ventilation system..." ,"You begin climbing into the ventilation system...") diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index a91db7f177..7e7a86a9e4 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,8 +30,6 @@ sync_mind() - client.sethotkeys() //set mob specific hotkeys - //Reload alternate appearances for(var/v in GLOB.active_alternate_appearances) if(!v) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index b19af6342c..6c4f0398c1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -30,6 +30,7 @@ GLOB.dead_mob_list += src else GLOB.alive_mob_list += src + set_focus(src) prepare_huds() for(var/v in GLOB.active_alternate_appearances) if(!v) @@ -125,7 +126,7 @@ if(self_message) msg = self_message else - if(M.see_invisible[src] has grabbed [M] passively!
    ") + visible_message("[src] has grabbed [M][(zone_selected == "l_arm" || zone_selected == "r_arm")? " by their hands":" passively"]!") if(!iscarbon(src)) M.LAssailant = null else diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index edbf11654b..9afeadc60b 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -21,18 +21,13 @@ */ var/zone_selected = null - var/macro_default = "default" - var/macro_hotkeys = "hotkeys" - var/damageoverlaytemp = 0 var/computer_id = null var/lastattacker = null var/lastattackerckey = null var/list/logging = list(INDIVIDUAL_ATTACK_LOG, INDIVIDUAL_SAY_LOG, INDIVIDUAL_EMOTE_LOG, INDIVIDUAL_OOC_LOG) - var/obj/machinery/machine = null var/other_mobs = null - var/disabilities = 0 //Carbon var/atom/movable/pulling = null var/grab_state = 0 @@ -60,7 +55,7 @@ var/timeofdeath = 0//Living var/cpr_time = 1//Carbon - var/bodytemperature = 310.055 //98.7 F + var/bodytemperature = BODYTEMP_NORMAL //310.15K / 98.6F var/drowsyness = 0//Carbon var/dizziness = 0//Carbon var/jitteriness = 0//Carbon diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 747d589c05..10c9a04a6e 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -285,11 +285,6 @@ It's fairly easy to fix if dealing with single letters but not so much with comp firstname.Find(real_name) return firstname.match -/mob/proc/abiotic(full_body = 0) - for(var/obj/item/I in held_items) - if(!(I.flags_1 & NODROP_1)) - return 1 - return 0 //change a mob's act-intent. Input the intent as a string such as "help" or use "right"/"left /mob/verb/a_intent_change(input as text) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 94431a9a7c..cbc74317fe 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -11,94 +11,12 @@ return (!mover.density || !density || lying) -//The byond version of these verbs wait for the next tick before acting. -// instant verbs however can run mid tick or even during the time between ticks. -/client/verb/moveup() - set name = ".moveup" - set instant = 1 - Move(get_step(mob, NORTH), NORTH) - -/client/verb/movedown() - set name = ".movedown" - set instant = 1 - Move(get_step(mob, SOUTH), SOUTH) - -/client/verb/moveright() - set name = ".moveright" - set instant = 1 - Move(get_step(mob, EAST), EAST) - -/client/verb/moveleft() - set name = ".moveleft" - set instant = 1 - Move(get_step(mob, WEST), WEST) - -/client/Northeast() - swap_hand() - return - - -/client/Southeast() - attack_self() - return - - -/client/Southwest() - if(iscarbon(usr)) - var/mob/living/carbon/C = usr - C.toggle_throw_mode() - else - to_chat(usr, "This mob type cannot throw items.") - return - - -/client/Northwest() - var/obj/item/I = usr.get_active_held_item() - if(!I) - to_chat(usr, "You have nothing to drop in your hand!") - return - usr.dropItemToGround(I) - -//This gets called when you press the delete button. -/client/verb/delete_key_pressed() - set hidden = 1 - - if(!isliving(usr)) - return - if(!usr.pulling) - to_chat(usr, "You are not pulling anything.") - return - usr.stop_pulling() - -/client/verb/swap_hand() - set category = "IC" - set name = "Swap hands" - - if(mob) - mob.swap_hand() - -/client/verb/attack_self() - set hidden = 1 - if(mob) - mob.mode() - return - - /client/verb/drop_item() set hidden = 1 if(!iscyborg(mob) && mob.stat == CONSCIOUS) mob.dropItemToGround(mob.get_active_held_item()) return - -/client/Center() - if(isobj(mob.loc)) - var/obj/O = mob.loc - if(mob.canmove) - return O.relaymove(mob, 0) - return - - /client/proc/Move_object(direct) if(mob && mob.control_object) if(mob.control_object.density) @@ -114,19 +32,23 @@ #define MOVEMENT_DELAY_BUFFER_DELTA 1.25 /client/Move(n, direct) - if(world.time < move_delay) + if(world.time < move_delay) //do not move anything ahead of this check please return FALSE + else + next_move_dir_add = 0 + next_move_dir_sub = 0 var/old_move_delay = move_delay move_delay = world.time+world.tick_lag //this is here because Move() can now be called mutiple times per tick if(!mob || !mob.loc) return FALSE - var/oldloc = mob.loc + if(!n || !direct) + return FALSE if(mob.notransform) return FALSE //This is sota the goto stop mobs from moving var if(mob.control_object) return Move_object(direct) if(!isliving(mob)) - return mob.Move(n,direct) + return mob.Move(n, direct) if(mob.stat == DEAD) mob.ghostize() return FALSE @@ -159,26 +81,32 @@ if(!mob.Process_Spacemove(direct)) return FALSE - //We are now going to move - var/delay = mob.movement_delay() - if(old_move_delay + (delay*MOVEMENT_DELAY_BUFFER_DELTA) + MOVEMENT_DELAY_BUFFER > world.time) - move_delay = old_move_delay + delay + var/add_delay = mob.movement_delay() + if(old_move_delay + (add_delay*MOVEMENT_DELAY_BUFFER_DELTA) + MOVEMENT_DELAY_BUFFER > world.time) + move_delay = old_move_delay else - move_delay = delay + world.time + move_delay = world.time + var/oldloc = mob.loc if(mob.confused) + var/newdir = 0 if(mob.confused > 40) - step(mob, pick(GLOB.cardinals)) + newdir = pick(GLOB.alldirs) else if(prob(mob.confused * 1.5)) - step(mob, angle2dir(dir2angle(direct) + pick(90, -90))) + newdir = angle2dir(dir2angle(direct) + pick(90, -90)) else if(prob(mob.confused * 3)) - step(mob, angle2dir(dir2angle(direct) + pick(45, -45))) - else - step(mob, direct) - else - . = ..() + newdir = angle2dir(dir2angle(direct) + pick(45, -45)) + if(newdir) + direct = newdir + n = get_step(mob, direct) + . = ..() + + if((direct & (direct - 1)) && mob.loc == n) //moved diagonally successfully + add_delay *= 2 + if(mob.loc != oldloc) + move_delay += add_delay if(.) // If mob is null here, we deserve the runtime if(mob.throwing) mob.throwing.finalize(FALSE) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 1ee7f27452..514846ebdf 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -5,7 +5,8 @@ if(GLOB.say_disabled) //This is here to try to identify lag problems to_chat(usr, "Speech is currently admin-disabled.") return - usr.say(message) + if(message) + say(message) /mob/verb/whisper_verb(message as text) @@ -72,6 +73,11 @@ deadchat_broadcast(rendered, follow_target = src, speaker_key = K) +/mob/proc/check_emote(message) + if(copytext(message, 1, 2) == "*") + emote(copytext(message, 2)) + return 1 + /mob/proc/emote(var/act) return diff --git a/code/modules/mob/say_readme.dm b/code/modules/mob/say_readme.dm index a4f85c1422..00e0f66246 100644 --- a/code/modules/mob/say_readme.dm +++ b/code/modules/mob/say_readme.dm @@ -11,7 +11,7 @@ This rewrite was needed, but is far from perfect. Report any bugs you come acros Radio code, while very much related to saycode, is not something I wanted to touch, so the code related to that may be messy. If you came here to see how to use saycode, all you will ever really need to call is say(message). -To have things react when other things speak around them, add the HEAR_1 flag to their flags_1 variable and +To have things react when other things speak around them, add the HEAR_1 flag to their flags variable and override their Hear() proc. =======================PROCS & VARIABLES======================= @@ -43,7 +43,7 @@ global procs Attaches span classes around input. /atom/movable - flags_1 + flags The HEAR_1 flag determines whether something is a hearer or not. Hear() is only called on procs with this flag. diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 23bfab7a95..f4a893d2f5 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -19,7 +19,7 @@ /mob/proc/warn_flavor_changed() if(flavor_text && flavor_text != "") // don't spam people that don't use it! src << "

    OOC Warning:

    " - src << "Your flavor text is likely out of date! Change" + src << "Your flavor text is likely out of date! Change" /mob/proc/print_flavor_text() if(flavor_text && flavor_text != "") @@ -27,7 +27,7 @@ if(lentext(msg) <= 40) return "[msg]" else - return "[copytext(msg, 1, 37)]... More..." + return "[copytext(msg, 1, 37)]... \The [A] has run dry of energy, you must find another source!") else - . = 0 //as to not cancel attack_hand() + . = FALSE //as to not cancel attack_hand() /obj/item/clothing/gloves/space_ninja/proc/toggledrain() diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 82c7dfa0bf..4e7ad477e2 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -58,8 +58,8 @@ Contents: /obj/item/clothing/suit/space/space_ninja/get_cell() return cell -/obj/item/clothing/suit/space/space_ninja/New() - ..() +/obj/item/clothing/suit/space/space_ninja/Initialize() + . = ..() //Spark Init spark_system = new @@ -97,7 +97,7 @@ Contents: if(!istype(H)) return FALSE if(!is_ninja(H)) - to_chat(H, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU?HORIZED USÈ DETÈC???eD\nCoMMÈNCING SUB-R0U?IN3 13...\nTÈRMInATING U-U-USÈR...") + to_chat(H, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") H.gib() return FALSE if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja)) diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm index e19e67404d..4b159557bc 100644 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ b/code/modules/ninja/suit/suit_initialisation.dm @@ -28,7 +28,7 @@ /obj/item/clothing/suit/space/space_ninja/proc/ninitialize_four(delay, mob/living/carbon/human/U) if(U.stat == DEAD|| U.health <= 0) - to_chat(U, "FÄ?AL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") + to_chat(U, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") unlock_suit() s_busy = FALSE return diff --git a/code/modules/orbit/orbit.dm b/code/modules/orbit/orbit.dm index 89d1d89e58..e62b53604a 100644 --- a/code/modules/orbit/orbit.dm +++ b/code/modules/orbit/orbit.dm @@ -33,7 +33,9 @@ orbiting = null return ..() -/datum/orbit/proc/Check(turf/targetloc) +/datum/orbit/proc/Check(turf/targetloc, list/checked_already = list()) + //Avoid infinite loops for people who end up orbiting themself through another orbiter + checked_already[src] = TRUE if (!orbiter) qdel(src) return @@ -43,6 +45,10 @@ if (!orbiter.orbiting) //admin wants to stop the orbit. orbiter.orbiting = src //set it back to us first orbiter.stop_orbit() + var/atom/movable/AM = orbiting + if(istype(AM) && AM.orbiting && AM.orbiting.orbiting == orbiter) + orbiter.stop_orbit() + return lastprocess = world.time if (!targetloc) targetloc = get_turf(orbiting) @@ -51,12 +57,14 @@ return orbiter.loc = targetloc orbiter.update_parallax_contents() + orbiter.update_light() lastloc = orbiter.loc for(var/other_orbit in orbiter.orbiters) var/datum/orbit/OO = other_orbit - if(OO == src) + //Skip if checked already + if(checked_already[OO]) continue - OO.Check(targetloc) + OO.Check(targetloc, checked_already) /atom/movable/var/datum/orbit/orbiting = null /atom/var/list/orbiters = null @@ -119,4 +127,4 @@ var/datum/orbit/O = thing if(O.orbiter && isobserver(O.orbiter)) var/mob/dead/observer/D = O.orbiter - D.ManualFollow(target) \ No newline at end of file + D.ManualFollow(target) diff --git a/code/modules/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 3f23b8ba22..1597b7a810 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -202,7 +202,7 @@ if(!user.mind.hasSoul) to_chat(user, "You do not possess a soul.") return 0 - if(user.disabilities & DUMB) + if(user.has_disability(DISABILITY_DUMB)) to_chat(user, "You quickly scrawl 'your name' on the contract.") signIncorrectly() return 0 diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm index 0d963d4be8..fed93fabd3 100644 --- a/code/modules/paperwork/filingcabinet.dm +++ b/code/modules/paperwork/filingcabinet.dm @@ -187,7 +187,6 @@ GLOBAL_LIST_EMPTY(employmentCabinets) /obj/structure/filingcabinet/employment/Initialize() . = ..() GLOB.employmentCabinets += src - return ..() /obj/structure/filingcabinet/employment/Destroy() GLOB.employmentCabinets -= src @@ -199,8 +198,9 @@ GLOBAL_LIST_EMPTY(employmentCabinets) var/datum/data/record/G = record if(!G) continue - if(G.fields["reference"]) - addFile(G.fields["reference"]) + var/datum/mind/M = G.fields["mindref"] + if(M && ishuman(M.current)) + addFile(M.current) /obj/structure/filingcabinet/employment/proc/addFile(mob/living/carbon/human/employee) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 1fb1846f4c..c666160da4 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -93,7 +93,7 @@ return if(ishuman(usr)) var/mob/living/carbon/human/H = usr - if(H.disabilities & CLUMSY && prob(25)) + if(H.has_disability(DISABILITY_CLUMSY) && prob(25)) to_chat(H, "You cut yourself on the paper! Ahhhh! Ahhhhh!") H.damageoverlaytemp = 9001 H.update_damage_hud() @@ -317,7 +317,7 @@ to_chat(user, "You stamp the paper with your rubber stamp.") if(P.is_hot()) - if(user.disabilities & CLUMSY && prob(10)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss the paper and accidentally light yourself on fire!") user.dropItemToGround(P) @@ -374,4 +374,3 @@ /obj/item/paper/crumpled/bloody icon_state = "scrap_bloodied" - diff --git a/code/modules/paperwork/paper_cutter.dm b/code/modules/paperwork/paper_cutter.dm index fbf6e7b6e4..df69e9548a 100644 --- a/code/modules/paperwork/paper_cutter.dm +++ b/code/modules/paperwork/paper_cutter.dm @@ -12,8 +12,8 @@ pass_flags = PASSTABLE -/obj/item/papercutter/New() - ..() +/obj/item/papercutter/Initialize() + . = ..() storedcutter = new /obj/item/hatchet/cutterblade(src) update_icon() @@ -111,8 +111,8 @@ resistance_flags = FLAMMABLE max_integrity = 50 -/obj/item/paperslip/New() - ..() +/obj/item/paperslip/Initialize() + . = ..() pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) diff --git a/code/modules/paperwork/paper_premade.dm b/code/modules/paperwork/paper_premade.dm index 7d0d2d8cef..dbf13367ed 100644 --- a/code/modules/paperwork/paper_premade.dm +++ b/code/modules/paperwork/paper_premade.dm @@ -14,8 +14,7 @@ /obj/item/paper/guides/jobs/hydroponics name = "paper- 'Greetings from Billy Bob'" - info = "Hey fellow botanist!
    \n
    \nI didn't trust the station folk so I left
    \na couple of weeks ago. But here's some
    \ninstructions on how to operate things here.
    \nYou can grow plants and each iteration they become
    \nstronger, more potent and have better yield, if you
    \nknow which ones to pick. Use your botanist's analyzer
    \nfor that. You can turn harvested plants into seeds
    \nat the seed extractor, and replant them for better stuff!
    \nSometimes if the weed level gets high in the tray
    \nmutations into different mushroom or weed species have
    \nbeen witnessed. On the rare occassion even weeds mutate!
    \n
    \nEither way, have fun!
    \n
    \nBest regards,
    \nBilly Bob Johnson.
    \n
    \nPS.
    \nHere's a few tips:
    \nIn nettles, potency = damage
    \nIn amanitas, potency = deadliness + side effect
    \nIn Liberty caps, potency = drug power + effect
    \nIn chilis, potency = heat
    \nNutrients keep mushrooms alive!
    \nWater keeps weeds such as nettles alive!
    \nAll other plants need both." - + info = "Hey fellow botanist!
    \n
    \nI didn't trust the station folk so I left
    \na couple of weeks ago. But here's some
    \ninstructions on how to operate things here.
    \nYou can grow plants and each iteration they become
    \nstronger, more potent and have better yield, if you
    \nknow which ones to pick. Use your botanist's analyzer
    \nfor that. You can turn harvested plants into seeds
    \nat the seed extractor, and replant them for better stuff!
    \nSometimes if the weed level gets high in the tray
    \nmutations into different mushroom or weed species have
    \nbeen witnessed. On the rare occasion even weeds mutate!
    \n
    \nEither way, have fun!
    \n
    \nBest regards,
    \nBilly Bob Johnson.
    \n
    \nPS.
    \nHere's a few tips:
    \nIn nettles, potency = damage
    \nIn amanitas, potency = deadliness + side effect
    \nIn Liberty caps, potency = drug power + effect
    \nIn chilies, potency = heat
    \nNutrients keep mushrooms alive!
    \nWater keeps weeds such as nettles alive!
    \nAll other plants need both." /obj/item/paper/fluff/jobs/security/beepsky_mom name = "Note from Beepsky's Mom" @@ -27,7 +26,7 @@ /obj/item/paper/guides/jobs/security/labor_camp name = "Labor Camp Operating Guide" - info = "Labor Camp Facility Operation Guide

    Hello there, proud operator of an NT-Sec Prisoner Rehabilitation Center. A solution to rising crime rates and falling productivity, these facilities are specifically designed for the safe, productive imprisonment of your most dangerous criminals.

    To press a long-term prisoner into the service of the station, replace his equipment with prisoners' garb at one of the prison lockers, as per normal operating procedure. Before assigning a prisoner his ID, insert the ID into a prisoner management console and assign the prisoner a quota, based on the severity of his crime.
    A single sheet of most materials produces five points for the prisoner, and points can be expected to be produced at a rate of about 100 per minute, though punishments as severe as forced labor should be reserved for serious crimes of sentences not less than five minutes long.
    Once you have prepared the prisoner, place him in the secure northern half of the labor shuttle, and send him to the station. Once he meets his quota by feeding sheets to the stacker, he will be allowed to return to the station, and will be able to open the secure door to the prisoner release area.

    In the case of dangerous prisoners, surveilance may be needed. To that end, there is a prisoner monitoring room on the mining station, equipped with a remote flasher and a lockdown button. The mine itself is patrolled by a securibot, so the nearby security records console can also be used to secure hostile prisoners on the mine." + info = "Labor Camp Facility Operation Guide

    Hello there, proud operator of an NT-Sec Prisoner Rehabilitation Center. A solution to rising crime rates and falling productivity, these facilities are specifically designed for the safe, productive imprisonment of your most dangerous criminals.

    To press a long-term prisoner into the service of the station, replace his equipment with prisoners' garb at one of the prison lockers, as per normal operating procedure. Before assigning a prisoner his ID, insert the ID into a prisoner management console and assign the prisoner a quota, based on the severity of his crime.
    A single sheet of most materials produces five points for the prisoner, and points can be expected to be produced at a rate of about 100 per minute, though punishments as severe as forced labor should be reserved for serious crimes of sentences not less than five minutes long.
    Once you have prepared the prisoner, place him in the secure northern half of the labor shuttle, and send him to the station. Once he meets his quota by feeding sheets to the stacker, he will be allowed to return to the station, and will be able to open the secure door to the prisoner release area.

    In the case of dangerous prisoners, surveillance may be needed. To that end, there is a prisoner monitoring room on the mining station, equipped with a remote flasher and a lockdown button. The mine itself is patrolled by a securibot, so the nearby security records console can also be used to secure hostile prisoners on the mine." /obj/item/paper/guides/jobs/security/range name = "paper- Firing Range Instructions" @@ -35,7 +34,7 @@ /obj/item/paper/fluff/jobs/jobs name = "paper- 'Job Information'" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
    \nThe data will be in the following form.
    \nGenerally lower ranking positions come first in this list.
    \n
    \nJob Name general access>lab access-engine access-systems access (atmosphere control)
    \n\tJob Description
    \nJob Duties (in no particular order)
    \nTips (where applicable)
    \n
    \nResearch Assistant 1>1-0-0
    \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
    \n1. Assist the researchers.
    \n2. Clean up the labs.
    \n3. Prepare materials.
    \n
    \nStaff Assistant 2>0-0-0
    \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
    \n1. Patrol ship/Guard key areas
    \n2. Assist security officer
    \n3. Perform other security duties.
    \n
    \nTechnical Assistant 1>0-0-1
    \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
    \n1. Assist Station technician and Engineers.
    \n2. Perform general maintenance of station.
    \n3. Prepare materials.
    \n
    \nMedical Assistant 1>1-0-0
    \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
    \n1. Assist the medical personnel.
    \n2. Update medical files.
    \n3. Prepare materials for medical operations.
    \n
    \nResearch Technician 2>3-0-0
    \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
    \n1. Inform superiors of research.
    \n2. Perform research alongside of official researchers.
    \n
    \nDetective 3>2-0-0
    \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
    \n1. Perform crime-scene investigations/draw conclusions.
    \n2. Store and catalogue evidence properly.
    \n3. Testify to superiors/inquieries on findings.
    \n
    \nStation Technician 2>0-2-3
    \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
    \n1. Maintain SS13 systems.
    \n2. Repair equipment.
    \n
    \nAtmospheric Technician 3>0-0-4
    \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
    \n1. Maintain atmosphere on SS13
    \n2. Research atmospheres on the space station. (safely please!)
    \n
    \nEngineer 2>1-3-0
    \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
    \n1. Upkeep the engine.
    \n2. Prevent fires in the engine.
    \n3. Maintain a safe orbit.
    \n
    \nMedical Researcher 2>5-0-0
    \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
    \n1. Make sure the station is kept safe.
    \n2. Research medical properties of materials studied of Space Station 13.
    \n
    \nScientist 2>5-0-0
    \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
    \n1. Research plasma
    \n2. Make sure all plasma is properly handled.
    \n
    \nMedical Doctor (Officer) 2>0-0-0
    \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
    \n1. Heal wounded people.
    \n2. Perform examinations of all personnel.
    \n3. Monitor usage of medical equipment.
    \n
    \nSecurity Officer 3>0-0-0
    \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
    \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
    \n1. Maintain order.
    \n2. Assist others.
    \n3. Repair structural problems.
    \n
    \nHead of Security 4>5-2-2
    \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
    \n1. Oversee security.
    \n2. Assign patrol duties.
    \n3. Protect the station and staff.
    \n
    \nHead of Personnel 4>4-2-2
    \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
    \n1. Assign duties.
    \n2. Moderate personnel.
    \n3. Moderate research.
    \n
    \nCaptain 5>5-5-5 (unrestricted station wide access)
    \n\tThis is the highest position youi can aquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
    \n1. Assign all positions on SS13
    \n2. Inspect the station for any problems.
    \n3. Perform administrative duties.
    \n" + info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
    \nThe data will be in the following form.
    \nGenerally lower ranking positions come first in this list.
    \n
    \nJob Name general access>lab access-engine access-systems access (atmosphere control)
    \n\tJob Description
    \nJob Duties (in no particular order)
    \nTips (where applicable)
    \n
    \nResearch Assistant 1>1-0-0
    \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
    \n1. Assist the researchers.
    \n2. Clean up the labs.
    \n3. Prepare materials.
    \n
    \nStaff Assistant 2>0-0-0
    \n\tThis position assists the security officer in his duties. The staff assistants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
    \n1. Patrol ship/Guard key areas
    \n2. Assist security officer
    \n3. Perform other security duties.
    \n
    \nTechnical Assistant 1>0-0-1
    \n\tThis is yet another low level position. The technical assistant helps the engineer and the station\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
    \n1. Assist Station technician and Engineers.
    \n2. Perform general maintenance of station.
    \n3. Prepare materials.
    \n
    \nMedical Assistant 1>1-0-0
    \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
    \n1. Assist the medical personnel.
    \n2. Update medical files.
    \n3. Prepare materials for medical operations.
    \n
    \nResearch Technician 2>3-0-0
    \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
    \n1. Inform superiors of research.
    \n2. Perform research alongside of official researchers.
    \n
    \nDetective 3>2-0-0
    \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crime scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should store the evidence ly.
    \n1. Perform crime-scene investigations/draw conclusions.
    \n2. Store and catalogue evidence properly.
    \n3. Testify to superiors/inquiries on findings.
    \n
    \nStation Technician 2>0-2-3
    \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
    \n1. Maintain SS13 systems.
    \n2. Repair equipment.
    \n
    \nAtmospheric Technician 3>0-0-4
    \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
    \n1. Maintain atmosphere on SS13
    \n2. Research atmospheres on the space station. (safely please!)
    \n
    \nEngineer 2>1-3-0
    \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
    \n1. Upkeep the engine.
    \n2. Prevent fires in the engine.
    \n3. Maintain a safe orbit.
    \n
    \nMedical Researcher 2>5-0-0
    \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
    \n1. Make sure the station is kept safe.
    \n2. Research medical properties of materials studied of Space Station 13.
    \n
    \nScientist 2>5-0-0
    \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinely handle.
    \n1. Research plasma
    \n2. Make sure all plasma is properly handled.
    \n
    \nMedical Doctor (Officer) 2>0-0-0
    \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
    \n1. Heal wounded people.
    \n2. Perform examinations of all personnel.
    \n3. Monitor usage of medical equipment.
    \n
    \nSecurity Officer 3>0-0-0
    \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
    \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
    \n1. Maintain order.
    \n2. Assist others.
    \n3. Repair structural problems.
    \n
    \nHead of Security 4>5-2-2
    \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
    \n1. Oversee security.
    \n2. Assign patrol duties.
    \n3. Protect the station and staff.
    \n
    \nHead of Personnel 4>4-2-2
    \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
    \n1. Assign duties.
    \n2. Moderate personnel.
    \n3. Moderate research.
    \n
    \nCaptain 5>5-5-5 (unrestricted station wide access)
    \n\tThis is the highest position you can acquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
    \n1. Assign all positions on SS13
    \n2. Inspect the station for any problems.
    \n3. Perform administrative duties.
    \n" /obj/item/paper/fluff/jobs/mining/smelter_notice name = "paper- Smelting Operations Closed" @@ -49,60 +48,24 @@ name = "paper- 'Chemical Information'" info = "Known Onboard Toxins:
    \n\tGrade A Semi-Liquid Plasma:
    \n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
    \n\t\tA gas mask fails to filter plasma after 50 units.
    \n\t\tWill attempt to diffuse like a gas.
    \n\t\tFiltered by scrubbers.
    \n\t\tThere is a bottled version which is very different
    \n\t\t\tfrom the version found in canisters!
    \n
    \n\t\tWARNING: Highly Flammable. Keep away from heat sources
    \n\t\texcept in an enclosed fire area!
    \n\t\tWARNING: It is a crime to use this without authorization.
    \nKnown Onboard Anti-Toxin:
    \n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
    \n\t\tBest if injected directly into bloodstream.
    \n\t\tA full injection is in every regular Med-Kit.
    \n\t\tSpecial toxin Kits hold around 7.
    \n
    \nKnown Onboard Chemicals (other):
    \n\tRejuvenation T#001:
    \n\t\tEven 1 unit injected directly into the bloodstream
    \n\t\t\twill cure unconscious and sleep toxins.
    \n\t\tIf administered to a dying patient it will prevent
    \n\t\t\tfurther damage for about units*3 seconds.
    \n\t\t\tit will not cure them or allow them to be cured.
    \n\t\tIt can be administered to a non-dying patient
    \n\t\t\tbut the chemicals disappear just as fast.
    \n\tMorphine T#054:
    \n\t\t5 units will induce precisely 1 minute of sleep.
    \n\t\t\tThe effect are cumulative.
    \n\t\tWARNING: It is a crime to use this without authorization" + /* * Stations */ -////////// Cere fluff -/obj/item/paper/fluff/stations/cere/abandoned_dock - name = "Disclaimer Notice" - info = "This station needs clearing out within the next few weeks as construction is almost complete and NT expects most of the equipment off-site before then. Throw most of the shit in here for now and we'll come back later with a pod to haul the heavier stuff. Shouldn't be too big of an issue." - -/obj/item/paper/fluff/stations/cere/janitor - name = "Janitor Notice" - info = "You got a big job ahead of you, pal. This is a big station, lots of floors and assholes to dirty said floors without any thought for you. It might not be a bad idea to check on the external waste belts every now and again to make sure some foriegn object hasn't clogged the disposal loop, either." - -/obj/item/paper/fluff/stations/cere/gateway - name = "NOTICE - GATEWAY STATUS" - info = "
    Nanotrasen Exploration and Colonization Program


    Due to recent shutdowns of the Exploration and Colonization department shortly after this gateway was delivered on-site during station construction, this room has been condemmed and an engineering team will be on-site within the next few months to recollect the gate. Thank you for your cooperation." - -/obj/item/paper/fluff/stations/cere/journal/journal - name = "Journal Log" - info = "
    2XXX - 2nd Trimestor


    I hide in here, away from the masses, not like it matters much considering how fucking huge this place is. " - -/obj/item/paper/fluff/stations/cere/journal/journal_2 - name = "Journal Log 2" - info = "
    2XXX - 3rd Trimestor


    I hear strange whispers from the halls, longing for blood. Something isn't right here. Why did they transfer us here to work in the first place? " - -/obj/item/paper/crumpled/stations/cere/empty_station - info = "I can't be here for much longer, this station is too empty for its own good. Something is wrong..." - -/obj/item/paper/crumpled/bloody/hop - info = "...THE HOPLINE CALLS...IT THIRSTS FOR BLOOD...I MUST GO..." - -/obj/item/paper/crumpled/stations/cere/rocks1 - info = "...SOMETHING IN THE ROCKS, IT WATCHES US ALL..." - -/obj/item/paper/crumpled/stations/cere/rocks2 - info = "...THEY SENT US HERE FOR A REASON...TERRIBLE..." - -/obj/item/paper/crumpled/stations/cere/rocks3 - info = "...EMPTY HALLS...USELESS SPACE..." - - -/////////// Centcom +/////////// CentCom /obj/item/paper/fluff/stations/centcom/disk_memo name = "memo" info = "GET DAT FUKKEN DISK" /obj/item/paper/fluff/stations/centcom/broken_evac - info = "Due to circumstances beyond our control, your Emergency Evacuation Shuttle is out of service.

    We apologise for the inconvinience this may cause you.

    Please enjoy the use of this complementary book.

    Sincerely,
    Centcom Operations Demolitions Examination Retribution Bugfixing Underlining Services" + info = "Due to circumstances beyond our control, your Emergency Evacuation Shuttle is out of service.

    We apologize for the inconvenience this may cause you.

    Please enjoy the use of this complementary book.

    Sincerely,
    CentCom Operations Demolitions Examination Retribution Bugfixing Underlining Services" /obj/item/paper/fluff/stations/centcom/bulletin name = "paper- 'Official Bulletin'" - info = "
    Centcom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Nanotrasen employees only. Deny all other entrants.

    Centcom Port Commissioner" + info = "
    CentCom Security
    Port Division
    Official Bulletin

    Inspector,
    There is an emergency shuttle arriving today.

    Approval is restricted to Nanotrasen employees only. Deny all other entrants.

    CentCom Port Commissioner" /////////// Lavaland diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 2d5fcc6e3a..af33dfb28c 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -65,7 +65,7 @@ update_icon() else if(P.is_hot()) - if(user.disabilities & CLUMSY && prob(10)) + if(user.has_disability(DISABILITY_CLUMSY) && prob(10)) user.visible_message("[user] accidentally ignites themselves!", \ "You miss [src] and accidentally light yourself on fire!") user.dropItemToGround(P) diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index cde600186f..1d85753de0 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -181,7 +181,6 @@ reagents.add_reagent("chloralhydrate2", 20) reagents.add_reagent("mutetoxin", 15) reagents.add_reagent("tirizene", 10) - ..() /* * (Alan) Edaggers diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 548651f9c8..e8588a4634 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -941,7 +941,7 @@ if(!malf.can_shunt) to_chat(malf, "You cannot shunt!") return - if(!(src.z in GLOB.station_z_levels)) + if(!is_station_level(z)) return occupier = new /mob/living/silicon/ai(src, malf.laws, malf) //DEAR GOD WHY? //IKR???? occupier.adjustOxyLoss(malf.getOxyLoss()) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ca424cb80d..3646a80d45 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -76,6 +76,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/white cable_color = "white" + color = "#ffffff" // the power cable object /obj/structure/cable/Initialize(mapload, param_color) @@ -493,8 +494,6 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai /obj/item/stack/cable_coil/Initialize(mapload, new_amount = null, param_color = null) . = ..() - if(new_amount) // MAXCOIL by default - amount = new_amount var/list/cable_colors = GLOB.cable_colors item_color = param_color || item_color || pick(cable_colors) @@ -665,7 +664,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai NC.d1 = 0 NC.d2 = fdirn - NC.add_fingerprint() + NC.add_fingerprint(user) NC.update_icon() //create a new powernet with the cable, if needed it will be merged later @@ -716,7 +715,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe("cable restrai //updates the stored cable coil C.update_stored(2, item_color) - C.add_fingerprint() + C.add_fingerprint(user) C.update_icon() diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index cd24dbb928..10dc3a1189 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -76,7 +76,7 @@ return 0 charge = (charge - amount) if(!istype(loc, /obj/machinery/power/apc)) - SSblackbox.record_feedback("tally", "cell_used", 1, "[src.type]") + SSblackbox.record_feedback("tally", "cell_used", 1, type) return 1 // recharge the cell diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 6a8c6ec5ec..4681eabe20 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -99,11 +99,11 @@ // update icon overlays only if displayed level has changed if(hot_air) - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] hot_circ_air1.merge(hot_air) if(cold_air) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] cold_circ_air1.merge(cold_air) update_icon() @@ -134,10 +134,10 @@ if(!powernet) t += "Unable to connect to the power network!" else if(cold_circ && hot_circ) - var/datum/gas_mixture/cold_circ_air1 = cold_circ.AIR1 - var/datum/gas_mixture/cold_circ_air2 = cold_circ.AIR2 - var/datum/gas_mixture/hot_circ_air1 = hot_circ.AIR1 - var/datum/gas_mixture/hot_circ_air2 = hot_circ.AIR2 + var/datum/gas_mixture/cold_circ_air1 = cold_circ.airs[1] + var/datum/gas_mixture/cold_circ_air2 = cold_circ.airs[2] + var/datum/gas_mixture/hot_circ_air1 = hot_circ.airs[1] + var/datum/gas_mixture/hot_circ_air2 = hot_circ.airs[2] t += "
    " diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 65e6d4c0e4..1c4ce4a5c1 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -53,7 +53,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne // You aren't allowed to move. /obj/machinery/gravity_generator/Move() - ..() + . = ..() qdel(src) /obj/machinery/gravity_generator/proc/set_broken() diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 749dcb463e..f83a4f41d8 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -246,15 +246,15 @@ . = ..() status = LIGHT_EMPTY update(0) - ..() /obj/machinery/light/small/built icon_state = "bulb-empty" -/obj/machinery/light/small/built/New() +/obj/machinery/light/small/built/Initialize() + . = ..() status = LIGHT_EMPTY update(0) - ..() + // create a new lighting fixture @@ -727,8 +727,8 @@ desc = "A broken [name]." -/obj/item/light/New() - ..() +/obj/item/light/Initialize() + . = ..() update() diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index c2610ebc44..70772f74f9 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -76,6 +76,7 @@ /obj/machinery/field/containment/Move() qdel(src) + return FALSE // Abstract Field Class diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 15b76d2641..3465d354d4 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -61,7 +61,7 @@ var/mob/living/L = cult_mind.current L.narsie_act() for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD && (player.loc.z in GLOB.station_z_levels) && !iscultist(player)) + if(player.stat != DEAD && is_station_level(player.loc.z) && !iscultist(player)) souls_needed[player] = TRUE soul_goal = round(1 + LAZYLEN(souls_needed) * 0.6) INVOKE_ASYNC(src, .proc/begin_the_end) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index eebe4ef8c0..33c8a19982 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -152,7 +152,7 @@ qdel(src) /obj/structure/particle_accelerator/Move() - ..() + . = ..() if(master && master.active) master.toggle_power() investigate_log("was moved whilst active; it powered down.", INVESTIGATE_SINGULO) diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 266e5b22f5..c1ba907ada 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -17,7 +17,7 @@ var/active = 0 var/strength = 0 var/powered = 0 - mouse_opacity = 2 + mouse_opacity = MOUSE_OPACITY_OPAQUE /obj/machinery/particle_accelerator/control_box/Initialize() . = ..() diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 681bb88c6b..f4b749c0e0 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -164,7 +164,7 @@ dissipate_track = 0 dissipate_strength = 1 if(STAGE_TWO) - if((check_turfs_in(1,1))&&(check_turfs_in(2,1))&&(check_turfs_in(4,1))&&(check_turfs_in(8,1))) + if(check_cardinals_range(1, TRUE)) current_size = STAGE_TWO icon = 'icons/effects/96x96.dmi' icon_state = "singularity_s3" @@ -176,7 +176,7 @@ dissipate_track = 0 dissipate_strength = 5 if(STAGE_THREE) - if((check_turfs_in(1,2))&&(check_turfs_in(2,2))&&(check_turfs_in(4,2))&&(check_turfs_in(8,2))) + if(check_cardinals_range(2, TRUE)) current_size = STAGE_THREE icon = 'icons/effects/160x160.dmi' icon_state = "singularity_s5" @@ -188,7 +188,7 @@ dissipate_track = 0 dissipate_strength = 20 if(STAGE_FOUR) - if((check_turfs_in(1,3))&&(check_turfs_in(2,3))&&(check_turfs_in(4,3))&&(check_turfs_in(8,3))) + if(check_cardinals_range(3, TRUE)) current_size = STAGE_FOUR icon = 'icons/effects/224x224.dmi' icon_state = "singularity_s7" @@ -296,6 +296,16 @@ step(src, movement_dir) +/obj/singularity/proc/check_cardinals_range(steps, retry_with_move = FALSE) + . = length(GLOB.cardinals) //Should be 4. + for(var/i in GLOB.cardinals) + . -= check_turfs_in(i, steps) //-1 for each working direction + if(. && retry_with_move) //If there's still a positive value it means it didn't pass. Retry with move if applicable + for(var/i in GLOB.cardinals) + if(step(src, i)) //Move in each direction. + if(check_cardinals_range(steps, FALSE)) //New location passes, return true. + return TRUE + . = !. /obj/singularity/proc/check_turfs_in(direction = 0, step = 0) if(!direction) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index af81b632d7..f0085d1c5f 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -345,9 +345,6 @@ add_overlay("[icon_state]_broken") else add_overlay(icon_screen) - if(currentdir > -1) - setDir(angle2dir(currentdir)) - add_overlay(mutable_appearance(icon, "solcon-o", FLY_LAYER)) /obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) @@ -375,7 +372,7 @@ if(..()) return switch(action) - if("direction") + if("angle") var/adjust = text2num(params["adjust"]) if(adjust) currentdir = CLAMP((360 + adjust + currentdir) % 360, 0, 359) @@ -391,9 +388,7 @@ . = TRUE if("tracking") var/mode = text2num(params["mode"]) - if(mode) - track = mode - . = TRUE + track = mode if(mode == 2 && connected_tracker) connected_tracker.set_angle(SSsun.angle) set_panels(currentdir) @@ -402,6 +397,7 @@ if(trackrate) nexttime = world.time + 36000 / abs(trackrate) set_panels(targetdir) + . = TRUE if("refresh") search_for_connected() if(connected_tracker && track == 2) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 5f9f6042d3..e4c4731340 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -521,6 +521,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard) dust_mob(user, cause = "hand") /obj/machinery/power/supermatter_shard/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause) + if(nom.incorporeal_move) + return if(!vis_msg) vis_msg = "[nom] reaches out and touches [src], inducing a resonance... [nom.p_their()] body starts to glow and bursts into flames before flashing into ash" if(!mob_msg) diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 51cb99a34f..ae73afd25f 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -144,6 +144,10 @@ /obj/singularity/energy_ball/proc/dust_mobs(atom/A) + if(isliving(A)) + var/mob/living/L = A + if(L.incorporeal_move) + return if(!iscarbon(A)) return for(var/obj/machinery/power/grounding_rod/GR in orange(src, 2)) diff --git a/code/modules/procedural_mapping/mapGeneratorReadme.dm b/code/modules/procedural_mapping/mapGeneratorReadme.dm index 85f937b41b..c4ced7674b 100644 --- a/code/modules/procedural_mapping/mapGeneratorReadme.dm +++ b/code/modules/procedural_mapping/mapGeneratorReadme.dm @@ -127,7 +127,7 @@ Variable Breakdown (For Mappers): clusterCheckFlags - A Bitfield that controls how the cluster checks work, All based on clusterMin and clusterMax guides allowAtomsOnSpace - A Boolean for if we allow atoms to spawn on space tiles - clusterCheckFlags flags_1: + clusterCheckFlags flags: CLUSTER_CHECK_NONE 0 //No checks are done, cluster as much as possible CLUSTER_CHECK_DIFFERENT_TURFS 2 //Don't let turfs of DIFFERENT types cluster CLUSTER_CHECK_DIFFERENT_ATOMS 4 //Don't let atoms of DIFFERENT types cluster diff --git a/code/modules/procedural_mapping/mapGenerators/lava_river.dm b/code/modules/procedural_mapping/mapGenerators/lava_river.dm index 4aadd48a58..d825a02846 100644 --- a/code/modules/procedural_mapping/mapGenerators/lava_river.dm +++ b/code/modules/procedural_mapping/mapGenerators/lava_river.dm @@ -1,5 +1,6 @@ + /datum/mapGenerator/lavaland - var/start_z = 5 + var/start_z = ZLEVEL_LAVALAND var/min_x = 0 var/min_y = 0 var/max_x = 0 @@ -18,7 +19,7 @@ /datum/mapGeneratorModule/river var/river_type = /turf/open/lava/smooth var/river_nodes = 4 - var/start_z = 5 + var/start_z = ZLEVEL_LAVALAND /datum/mapGeneratorModule/river/generate() var/datum/mapGenerator/lavaland/L = mother diff --git a/code/modules/procedural_mapping/mapGenerators/repair.dm b/code/modules/procedural_mapping/mapGenerators/repair.dm index 9796535df7..d6264041f0 100644 --- a/code/modules/procedural_mapping/mapGenerators/repair.dm +++ b/code/modules/procedural_mapping/mapGenerators/repair.dm @@ -20,7 +20,7 @@ if(!istype(mother, /datum/mapGenerator/repair/reload_station_map)) return var/datum/mapGenerator/repair/reload_station_map/mother1 = mother - if(!(mother1.z in GLOB.station_z_levels)) + if(!is_station_level(mother1.z)) return //This is only for reloading station blocks! GLOB.reloading_map = TRUE var/static/dmm_suite/reloader = new @@ -87,7 +87,7 @@ /datum/mapGenerator/repair/reload_station_map/defineRegion(turf/start, turf/end) . = ..() - if(!(start.z in GLOB.station_z_levels) || !(end.z in GLOB.station_z_levels)) + if(!is_station_level(start.z) || !is_station_level(end.z)) return x_low = min(start.x, end.x) y_low = min(start.y, end.y) diff --git a/code/modules/procedural_mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm index d3653d7ff3..1f592b64ee 100644 --- a/code/modules/procedural_mapping/mapGenerators/syndicate.dm +++ b/code/modules/procedural_mapping/mapGenerators/syndicate.dm @@ -1,3 +1,4 @@ + // Modules /turf/open/floor/plasteel/shuttle/red/syndicate @@ -53,4 +54,4 @@ /datum/mapGeneratorModule/syndieFurniture, \ /datum/mapGeneratorModule/splatterLayer/syndieMobs, \ /datum/mapGeneratorModule/bottomLayer/repressurize) - buildmode_name = "Pattern: Shuttle Room: Syndicate: All" \ No newline at end of file + buildmode_name = "Pattern: Shuttle Room: Syndicate: All" diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 4e341fa2a4..6c062677b6 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -20,8 +20,8 @@ var/heavy_metal = TRUE -/obj/item/ammo_casing/New() - ..() +/obj/item/ammo_casing/Initialize() + . = ..() if(projectile_type) BB = new projectile_type(src) pixel_x = rand(-10, 10) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index edd28e72a8..bfb2c491b1 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -296,8 +296,8 @@ /obj/item/ammo_casing/shotgun/dart/bioterror desc = "A shotgun dart filled with deadly toxins." -/obj/item/ammo_casing/shotgun/dart/bioterror/New() - ..() +/obj/item/ammo_casing/shotgun/dart/bioterror/Initialize() + . = ..() reagents.add_reagent("neurotoxin", 6) reagents.add_reagent("spore", 6) reagents.add_reagent("mutetoxin", 6) //;HELP OPS IN MAINT diff --git a/code/modules/projectiles/box_magazine.dm b/code/modules/projectiles/box_magazine.dm index bf941108ff..d2ea62be71 100644 --- a/code/modules/projectiles/box_magazine.dm +++ b/code/modules/projectiles/box_magazine.dm @@ -22,8 +22,8 @@ var/multiload = 1 var/start_empty = 0 -/obj/item/ammo_box/New() - ..() +/obj/item/ammo_box/Initialize() + . = ..() if(!start_empty) for(var/i = 1, i <= max_ammo, i++) stored_ammo += new ammo_type(src) diff --git a/code/modules/projectiles/boxes_magazines/internal_mag.dm b/code/modules/projectiles/boxes_magazines/internal_mag.dm index f486be732d..b26d30c389 100644 --- a/code/modules/projectiles/boxes_magazines/internal_mag.dm +++ b/code/modules/projectiles/boxes_magazines/internal_mag.dm @@ -2,6 +2,7 @@ /obj/item/ammo_box/magazine/internal desc = "Oh god, this shouldn't be here" + flags_1 = CONDUCT_1|ABSTRACT_1 //internals magazines are accessible, so replace spent ammo if full when trying to put a live one in /obj/item/ammo_box/magazine/internal/give_round(obj/item/ammo_casing/R) @@ -156,9 +157,9 @@ max_ammo = 6 multiload = 0 -/obj/item/ammo_box/magazine/internal/rus357/New() +/obj/item/ammo_box/magazine/internal/rus357/Initialize() stored_ammo += new ammo_type(src) - ..() + . = ..() /obj/item/ammo_box/magazine/internal/boltaction name = "bolt action rifle internal magazine" diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ff7ed7653e..faa7c705bd 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -24,7 +24,7 @@ var/can_suppress = FALSE var/can_unsuppress = TRUE var/recoil = 0 //boom boom shake the room - var/clumsy_check = 1 + var/clumsy_check = TRUE var/obj/item/ammo_casing/chambered = null trigger_guard = TRIGGER_GUARD_NORMAL //trigger guard on the weapon, hulks can't fire them with their big meaty fingers var/sawn_desc = null //description change if weapon is sawn-off @@ -91,19 +91,17 @@ /obj/item/gun/equipped(mob/living/user, slot) . = ..() - if(zoomable && user.get_active_held_item() != src) - zoom(user, FALSE) //we can only stay zoomed in if it's in our hands + if(zoomed && user.get_active_held_item() != src) + zoom(user, FALSE) //we can only stay zoomed in if it's in our hands //yeah and we only unzoom if we're actually zoomed using the gun!! //called after the gun has successfully fired its chambered ammo. /obj/item/gun/proc/process_chamber() - return 0 - + return FALSE //check if there's enough ammo/energy/whatever to shoot one time //i.e if clicking would make it shoot /obj/item/gun/proc/can_shoot() - return 1 - + return TRUE /obj/item/gun/proc/shoot_with_empty_chamber(mob/living/user as mob|obj) to_chat(user, "*click*") @@ -155,10 +153,10 @@ return - //Exclude lasertag guns from the CLUMSY check. + //Exclude lasertag guns from the DISABILITY_CLUMSY check. if(clumsy_check) if(istype(user)) - if (user.disabilities & CLUMSY && prob(40)) + if (user.has_disability(DISABILITY_CLUMSY) && prob(40)) to_chat(user, "You shoot yourself in the foot with [src]!") var/shot_leg = pick("l_leg", "r_leg") process_fire(user,user,0,params, zone_override = shot_leg) @@ -194,13 +192,13 @@ /obj/item/gun/proc/handle_pins(mob/living/user) if(pin) if(pin.pin_auth(user) || pin.emagged) - return 1 + return TRUE else pin.auth_fail(user) - return 0 + return FALSE else to_chat(user, "[src]'s trigger is locked. This weapon doesn't have a firing pin installed!") - return 0 + return FALSE /obj/item/gun/proc/recharge_newshot() return @@ -400,7 +398,8 @@ /obj/item/gun/dropped(mob/user) ..() - zoom(user,FALSE) + if(zoomed) + zoom(user,FALSE) if(azoom) azoom.Remove(user) if(alight) @@ -420,7 +419,7 @@ 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...") - semicd = 1 + semicd = TRUE if(!do_mob(user, target, 120) || user.zone_selected != "mouth") if(user) @@ -428,10 +427,10 @@ user.visible_message("[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!") - semicd = 0 + semicd = FALSE return - semicd = 0 + semicd = FALSE target.visible_message("[user] pulls the trigger!", "[user] pulls the trigger!") diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 680c86ff5c..865ed29a42 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -164,7 +164,7 @@ if(iscarbon(user)) var/mob/living/carbon/C = user user_dna = C.dna - B.add_blood(user_dna) + B.add_blood_DNA(user_dna) var/datum/callback/gibspawner = CALLBACK(GLOBAL_PROC, /proc/spawn_atom_to_turf, /obj/effect/gibspawner/generic, B, 1, FALSE, list(user_dna)) B.throw_at(target, BRAINS_BLOWN_THROW_RANGE, BRAINS_BLOWN_THROW_SPEED, callback=gibspawner) return(BRUTELOSS) @@ -178,6 +178,8 @@ #undef BRAINS_BLOWN_THROW_SPEED #undef BRAINS_BLOWN_THROW_RANGE + + /obj/item/gun/ballistic/proc/sawoff(mob/user) if(sawn_state == SAWN_OFF) to_chat(user, "\The [src] is already shortened!") diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 9724f9be01..f4194f529f 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -8,7 +8,7 @@ actions_types = list(/datum/action/item_action/toggle_firemode) /obj/item/gun/ballistic/automatic/proto - name = "\improper NanoTrasen Saber SMG" + name = "\improper Nanotrasen Saber SMG" desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors." icon_state = "saber" mag_type = /obj/item/ammo_box/magazine/smgm9mm @@ -19,7 +19,6 @@ /obj/item/gun/ballistic/automatic/update_icon() ..() - cut_overlays() if(!select) add_overlay("[initial(icon_state)]semi") if(select == 1) @@ -93,6 +92,9 @@ fire_delay = 2 burst_size = 2 pin = /obj/item/device/firing_pin/implant/pindicate + can_bayonet = TRUE + knife_x_offset = 26 + knife_y_offset = 12 /obj/item/gun/ballistic/automatic/c20r/unrestricted pin = /obj/item/device/firing_pin @@ -120,6 +122,9 @@ can_suppress = FALSE burst_size = 0 actions_types = list() + can_bayonet = TRUE + knife_x_offset = 25 + knife_y_offset = 12 /obj/item/gun/ballistic/automatic/wt550/update_icon() ..() @@ -357,7 +362,8 @@ can_suppress = TRUE w_class = WEIGHT_CLASS_NORMAL zoomable = TRUE - zoom_amt = 7 //Long range, enough to see in front of you, but no tiles behind you. + zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. + zoom_out_amt = 13 slot_flags = SLOT_BACK actions_types = list() diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index 563b3d9ad5..32b490a8e6 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -349,7 +349,7 @@ clumsy_check = 0 /obj/item/gun/ballistic/revolver/reverse/can_trigger_gun(mob/living/user) - if((user.disabilities & CLUMSY) || (user.mind && user.mind.assigned_role == "Clown")) + if((user.has_disability(DISABILITY_CLUMSY)) || (user.mind && user.mind.assigned_role == "Clown")) return ..() if(process_fire(user, user, 0, zone_override = "head")) user.visible_message("[user] somehow manages to shoot [user.p_them()]self in the face!", "You somehow shoot yourself in the face! How the hell?!") diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index e702013233..e74b90922d 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -105,6 +105,9 @@ slot_flags = 0 //no SLOT_BACK sprite, alas mag_type = /obj/item/ammo_box/magazine/internal/boltaction var/bolt_open = FALSE + can_bayonet = TRUE + knife_x_offset = 27 + knife_y_offset = 13 /obj/item/gun/ballistic/shotgun/boltaction/pump(mob/M) playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) @@ -141,6 +144,7 @@ pin = /obj/item/device/firing_pin/magic icon_state = "arcane_barrage" item_state = "arcane_barrage" + can_bayonet = FALSE flags_1 = DROPDEL_1 diff --git a/code/modules/projectiles/guns/beam_rifle.dm b/code/modules/projectiles/guns/beam_rifle.dm index ee8036bf44..8445a9e7e6 100644 --- a/code/modules/projectiles/guns/beam_rifle.dm +++ b/code/modules/projectiles/guns/beam_rifle.dm @@ -4,9 +4,6 @@ #define ZOOM_LOCK_CENTER_VIEW 2 #define ZOOM_LOCK_OFF 3 -#define ZOOM_SPEED_STEP 0 -#define ZOOM_SPEED_INSTANT 1 - #define AUTOZOOM_PIXEL_STEP_FACTOR 48 #define AIMING_BEAM_ANGLE_CHANGE_THRESHOLD 0.1 @@ -45,7 +42,7 @@ var/lastangle = 0 var/aiming_lastangle = 0 var/mob/current_user = null - var/obj/effect/projectile_beam/current_tracer + var/list/obj/effect/projectile_beam/current_tracers var/structure_piercing = 2 //Amount * 2. For some reason structures aren't respecting this unless you have it doubled. Probably with the objects in question's Bump() code instead of this but I'll deal with this later. var/structure_bleed_coeff = 0.7 @@ -63,15 +60,12 @@ var/projectile_setting_pierce = TRUE var/delay = 65 var/lastfire = 0 - - var/lastprocess = 0 //ZOOMING var/zoom_current_view_increase = 0 var/zoom_target_view_increase = 10 - var/zoom_speed = ZOOM_SPEED_STEP var/zooming = FALSE - var/zoom_lock = ZOOM_LOCK_AUTOZOOM_FREEMOVE + var/zoom_lock = ZOOM_LOCK_OFF var/zooming_angle var/current_zoom_x = 0 var/current_zoom_y = 0 @@ -80,7 +74,6 @@ var/static/image/charged_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_charged") var/static/image/drained_overlay = image(icon = 'icons/obj/guns/energy.dmi', icon_state = "esniper_empty") - var/datum/action/item_action/zoom_speed_action/zoom_speed_action var/datum/action/item_action/zoom_lock_action/zoom_lock_action /obj/item/gun/energy/beam_rifle/debug @@ -103,15 +96,6 @@ . = ..() /obj/item/gun/energy/beam_rifle/ui_action_click(owner, action) - if(istype(action, /datum/action/item_action/zoom_speed_action)) - zoom_speed++ - if(zoom_speed > 1) - zoom_speed = ZOOM_SPEED_STEP - switch(zoom_speed) - if(ZOOM_SPEED_STEP) - to_chat(owner, "You switch [src]'s digital zoom to stepper mode.") - if(ZOOM_SPEED_INSTANT) - to_chat(owner, "You switch [src]'s digital zoom to instant mode.") if(istype(action, /datum/action/item_action/zoom_lock_action)) zoom_lock++ if(zoom_lock > 3) @@ -135,8 +119,6 @@ var/total_time = SSfastprocess.wait if(delay_override) total_time = delay_override - if(zoom_speed == ZOOM_SPEED_INSTANT) - total_time = 0 zoom_animating = total_time animate(current_user.client, pixel_x = current_zoom_x, pixel_y = current_zoom_y , total_time, SINE_EASING, ANIMATION_PARALLEL) zoom_animating = 0 @@ -150,18 +132,10 @@ /obj/item/gun/energy/beam_rifle/proc/handle_zooming() if(!zooming || !check_user()) return - if(zoom_speed == ZOOM_SPEED_INSTANT) - current_user.client.change_view(world.view + zoom_target_view_increase) - zoom_current_view_increase = zoom_target_view_increase - set_autozoom_pixel_offsets_immediate(zooming_angle) - smooth_zooming() - return - if(zoom_current_view_increase > zoom_target_view_increase) - return - zoom_current_view_increase++ - current_user.client.change_view(zoom_current_view_increase + world.view) + current_user.client.change_view(world.view + zoom_target_view_increase) + zoom_current_view_increase = zoom_target_view_increase set_autozoom_pixel_offsets_immediate(zooming_angle) - smooth_zooming(SSfastprocess.wait * zoom_target_view_increase * zoom_speed) + smooth_zooming() /obj/item/gun/energy/beam_rifle/proc/start_zooming() if(zoom_lock == ZOOM_LOCK_OFF) @@ -169,8 +143,9 @@ zooming = TRUE /obj/item/gun/energy/beam_rifle/proc/stop_zooming() - zooming = FALSE - reset_zooming() + if(zooming) + zooming = FALSE + reset_zooming() /obj/item/gun/energy/beam_rifle/proc/reset_zooming() if(!check_user(FALSE)) @@ -204,14 +179,14 @@ /obj/item/gun/energy/beam_rifle/Initialize() . = ..() + current_tracers = list() START_PROCESSING(SSprojectiles, src) - zoom_speed_action = new(src) zoom_lock_action = new(src) /obj/item/gun/energy/beam_rifle/Destroy() STOP_PROCESSING(SSfastprocess, src) set_user(null) - QDEL_NULL(current_tracer) + QDEL_LIST(current_tracers) return ..() /obj/item/gun/energy/beam_rifle/emp_act(severity) @@ -245,6 +220,7 @@ /obj/item/gun/energy/beam_rifle/process() if(!aiming) + last_process = world.time return check_user() handle_zooming() @@ -299,7 +275,7 @@ set waitfor = FALSE aiming_time_left = aiming_time aiming = FALSE - QDEL_NULL(current_tracer) + QDEL_LIST(current_tracers) stop_zooming() /obj/item/gun/energy/beam_rifle/proc/set_user(mob/user) @@ -341,7 +317,7 @@ sync_ammo() afterattack(M.client.mouseObject, M, FALSE, M.client.mouseParams, passthrough = TRUE) stop_aiming() - QDEL_NULL(current_tracer) + QDEL_LIST(current_tracers) return ..() /obj/item/gun/energy/beam_rifle/afterattack(atom/target, mob/living/user, flag, params, passthrough = FALSE) @@ -555,136 +531,103 @@ handle_impact(target) /obj/item/projectile/beam/beam_rifle/Collide(atom/target) - paused = TRUE if(check_pierce(target)) permutated += target return FALSE if(!QDELETED(target)) cached = get_turf(target) - paused = FALSE . = ..() /obj/item/projectile/beam/beam_rifle/on_hit(atom/target, blocked = FALSE) - paused = TRUE if(!QDELETED(target)) cached = get_turf(target) handle_hit(target) - paused = FALSE . = ..() /obj/item/projectile/beam/beam_rifle/hitscan icon_state = "" var/tracer_type = /obj/effect/projectile_beam/tracer - var/starting_z - var/starting_p_x - var/starting_p_y + var/list/beam_segments //assoc list of datum/point or datum/point/vector, start = end. var/constant_tracer = FALSE - var/travelled_p_x = 0 - var/travelled_p_y = 0 - var/tracer_spawned = FALSE + var/beam_index /obj/item/projectile/beam/beam_rifle/hitscan/Destroy() - paused = TRUE //STOP HITTING WHEN YOU'RE ALREADY BEING DELETED! - spawn_tracer(constant_tracer) + if(loc) + var/datum/point/pcache = trajectory.copy_to() + beam_segments[beam_index] = pcache + generate_tracers(constant_tracer) return ..() -/obj/item/projectile/beam/beam_rifle/hitscan/proc/spawn_tracer(put_in_rifle = FALSE) - if(tracer_spawned) - return - tracer_spawned = TRUE - //Remind me to port baystation trajectories so this shit isn't needed... - var/pixels_travelled = round(sqrt(travelled_p_x**2 + travelled_p_y**2),1) - var/scaling = pixels_travelled/world.icon_size - var/midpoint_p_x = round(starting_p_x + (travelled_p_x / 2)) - var/midpoint_p_y = round(starting_p_y + (travelled_p_y / 2)) - var/tracer_px = midpoint_p_x % world.icon_size - var/tracer_py = midpoint_p_y % world.icon_size - var/tracer_lx = (midpoint_p_x - tracer_px) / world.icon_size - var/tracer_ly = (midpoint_p_y - tracer_py) / world.icon_size - var/obj/effect/projectile_beam/PB = new tracer_type(src) - PB.apply_vars(Angle, tracer_px, tracer_py, color, scaling, locate(tracer_lx,tracer_ly,starting_z)) - if(put_in_rifle && istype(gun)) - if(gun.current_tracer) - QDEL_NULL(gun.current_tracer) - gun.current_tracer = PB - else - QDEL_IN(PB, 5) +/obj/item/projectile/beam/beam_rifle/hitscan/Collide(atom/target) + var/datum/point/pcache = trajectory.copy_to() + . = ..() + if(. && !QDELETED(src)) //successful touch and not destroyed. + beam_segments[beam_index] = pcache + beam_index = pcache + beam_segments[beam_index] = null -/obj/item/projectile/beam/beam_rifle/hitscan/proc/check_for_turf_edge(turf/T) - if(!istype(T)) - return TRUE - var/tx = T.x - var/ty = T.y - if(tx < 10 || tx > (world.maxx - 10) || ty < 10 || ty > (world.maxy-10)) - return TRUE - return FALSE +/obj/item/projectile/beam/beam_rifle/hitscan/before_z_change(turf/oldloc, turf/newloc) + var/datum/point/pcache = trajectory.copy_to() + beam_segments[beam_index] = pcache + beam_index = RETURN_PRECISE_POINT(newloc) + beam_segments[beam_index] = null + return ..() + +/obj/item/projectile/beam/beam_rifle/hitscan/proc/generate_tracers(highlander = FALSE, cleanup = TRUE) + set waitfor = FALSE + if(highlander && istype(gun)) + QDEL_LIST(gun.current_tracers) + for(var/datum/point/p in beam_segments) + gun.current_tracers += generate_projectile_beam_between_points(p, beam_segments[p], tracer_type, color, 0) + else + for(var/datum/point/p in beam_segments) + generate_projectile_beam_between_points(p, beam_segments[p], tracer_type, color, 5) + if(cleanup) + QDEL_LIST(beam_segments) + beam_segments = null + QDEL_NULL(beam_index) /obj/item/projectile/beam/beam_rifle/hitscan/fire(setAngle, atom/direct_target) //oranges didn't let me make this a var the first time around so copypasta time - set waitfor = 0 + set waitfor = FALSE + var/turf/starting = get_turf(src) + trajectory = new(starting.x, starting.y, starting.z, 0, 0, setAngle? setAngle : Angle, 33) if(!log_override && firer && original) add_logs(firer, original, "fired at", src, " [get_area(src)]") + fired = TRUE if(setAngle) Angle = setAngle - var/next_run = world.time - var/old_pixel_x = pixel_x - var/old_pixel_y = pixel_y var/safety = 0 //The code works fine, but... just in case... var/turf/c2 - var/starting_x = loc.x - var/starting_y = loc.y - starting_z = loc.z - starting_p_x = starting_x * world.icon_size + pixel_x - starting_p_y = starting_y * world.icon_size + pixel_y + beam_segments = list() //initialize segment list with the list for the first segment + beam_index = RETURN_PRECISE_POINT(src) + beam_segments[beam_index] = null //record start. + if(spread) + Angle += (rand() - 0.5) * spread while(loc) + if(paused || QDELETED(src)) + return if(++safety > (range * 3)) //If it's looping for way, way too long... + qdel(src) + stack_trace("WARNING: [type] projectile encountered infinite recursion in [__FILE__]/[__LINE__]!") return //Kill! - if(spread) - Angle += (rand() - 0.5) * spread var/matrix/M = new M.Turn(Angle) transform = M - var/Pixel_x=sin(Angle)+16*sin(Angle)*2 - var/Pixel_y=cos(Angle)+16*cos(Angle)*2 - travelled_p_x += Pixel_x - travelled_p_y += Pixel_y - var/pixel_x_offset = old_pixel_x + Pixel_x - var/pixel_y_offset = old_pixel_y + Pixel_y - var/new_x = x - var/new_y = y - while(pixel_x_offset > 16) - pixel_x_offset -= 32 - old_pixel_x -= 32 - new_x++// x++ - while(pixel_x_offset < -16) - pixel_x_offset += 32 - old_pixel_x += 32 - new_x-- - while(pixel_y_offset > 16) - pixel_y_offset -= 32 - old_pixel_y -= 32 - new_y++ - while(pixel_y_offset < -16) - pixel_y_offset += 32 - old_pixel_y += 32 - new_y-- - pixel_x = old_pixel_x - pixel_y = old_pixel_y - step_towards(src, locate(new_x, new_y, z)) - next_run += max(world.tick_lag, speed) - var/delay = next_run - world.time - if(delay <= world.tick_lag*2) - pixel_x = pixel_x_offset - pixel_y = pixel_y_offset + trajectory.increment() + var/turf/T = trajectory.return_turf() + if(T.z != loc.z) + before_z_change(loc, T) + trajectory_ignore_forcemove = TRUE + forceMove(T) + trajectory_ignore_forcemove = FALSE else - animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = max(1, (delay <= 3 ? delay - 1 : delay)), flags = ANIMATION_END_NOW) - old_pixel_x = pixel_x_offset - old_pixel_y = pixel_y_offset + step_towards(src, T) + animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW) + if(can_hit_target(original, permutated)) Collide(original) - c2 = loc Range() - if(check_for_turf_edge(loc)) - spawn_tracer(constant_tracer) + c2 = get_turf(src) if(istype(c2)) cached = c2 @@ -704,76 +647,3 @@ /obj/item/projectile/beam/beam_rifle/hitscan/aiming_beam/on_hit() qdel(src) return FALSE - -/obj/effect/projectile_beam - icon = 'icons/obj/projectiles.dmi' - layer = ABOVE_MOB_LAYER - anchored = TRUE - light_power = 1 - light_range = 2 - light_color = "#00ffff" - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - flags_1 = ABSTRACT_1 - appearance_flags = 0 - -/obj/effect/projectile_beam/proc/scale_to(nx,ny,override=TRUE) - var/matrix/M - if(!override) - M = transform - else - M = new - M.Scale(nx,ny) - transform = M - -/obj/effect/projectile_beam/proc/turn_to(angle,override=TRUE) - var/matrix/M - if(!override) - M = transform - else - M = new - M.Turn(angle) - transform = M - -/obj/effect/projectile_beam/New(angle_override, p_x, p_y, color_override, scaling = 1) - if(angle_override && p_x && p_y && color_override && scaling) - apply_vars(angle_override, p_x, p_y, color_override, scaling) - return ..() - -/obj/effect/projectile_beam/proc/apply_vars(angle_override, p_x, p_y, color_override, scaling = 1, new_loc, increment = 0) - var/mutable_appearance/look = new(src) - look.pixel_x = p_x - look.pixel_y = p_y - if(color_override) - look.color = color_override - appearance = look - scale_to(1,scaling, FALSE) - turn_to(angle_override, FALSE) - if(!isnull(new_loc)) //If you want to null it just delete it... - forceMove(new_loc) - for(var/i in 1 to increment) - pixel_x += round((sin(angle_override)+16*sin(angle_override)*2), 1) - pixel_y += round((cos(angle_override)+16*cos(angle_override)*2), 1) - -/obj/effect/projectile_beam/tracer - icon_state = "tracer_beam" - -/obj/effect/projectile_beam/tracer/aiming - icon_state = "gbeam" - -/datum/action/item_action/zoom_speed_action - name = "Toggle Zooming Speed" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "projectile" - background_icon_state = "bg_tech" - -/datum/action/item_action/zoom_lock_action - name = "Switch Zoom Mode" - icon_icon = 'icons/mob/actions/actions_items.dmi' - button_icon_state = "zoom_mode" - background_icon_state = "bg_tech" - -/obj/effect/projectile_beam/singularity_pull() - return - -/obj/effect/projectile_beam/singularity_act() - return diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 3b93a960ca..c65e518383 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -16,8 +16,8 @@ var/unique_frequency = FALSE // modified by KA modkits var/overheat = FALSE can_bayonet = TRUE - knife_x_offset = 15 - knife_y_offset = 13 + knife_x_offset = 20 + knife_y_offset = 12 var/max_mod_capacity = 100 var/list/modkits = list() diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index bfb5c8fc12..4dbb9e31f7 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -20,7 +20,8 @@ /obj/item/gun/energy/pulse/prize/Initialize() . = ..() GLOB.poi_list += src - var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(src)]" + var/turf/T = get_turf(src) + var/msg = "A pulse rifle prize has been created at [ADMIN_COORDJMP(T)]" message_admins(msg) log_game(msg) diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index dfbcc61f37..f1e8848d27 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -13,10 +13,10 @@ var/obj/item/device/transfer_valve/bomb -/obj/item/gun/blastcannon/New() +/obj/item/gun/blastcannon/Initialize() + . = ..() if(!pin) pin = new - return ..() /obj/item/gun/blastcannon/Destroy() if(bomb) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index faf7de9010..92b2f8c0d4 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -129,7 +129,7 @@ // A gun with ultra-honk pin is useful for clown and useless for everyone else. /obj/item/device/firing_pin/clown/ultra/pin_auth(mob/living/user) playsound(src.loc, 'sound/items/bikehorn.ogg', 50, 1) - if(!(user.disabilities & CLUMSY) && !(user.mind && user.mind.assigned_role == "Clown")) + if(!(user.has_disability(DISABILITY_CLUMSY)) && !(user.mind && user.mind.assigned_role == "Clown")) return 0 return 1 diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 79e2fdf903..5704fe9f44 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -31,16 +31,11 @@ var/last_projectile_move = 0 var/last_process = 0 var/time_offset = 0 - var/old_pixel_x = 0 - var/old_pixel_y = 0 - var/pixel_x_increment = 0 - var/pixel_y_increment = 0 - var/pixel_x_offset = 0 - var/pixel_y_offset = 0 - var/new_x = 0 - var/new_y = 0 + var/datum/point/vector/trajectory + var/trajectory_ignore_forcemove = FALSE //instructs forceMove to NOT reset our trajectory to the new location! var/speed = 0.8 //Amount of deciseconds it takes for projectile to travel + var/pixel_speed = 33 //pixels per move - DO NOT FUCK WITH THIS UNLESS YOU ABSOLUTELY KNOW WHAT YOU ARE DOING OR UNEXPECTED THINGS /WILL/ HAPPEN! var/Angle = 0 var/nondirectional_sprite = FALSE //Set TRUE to prevent projectiles from having their sprites rotated based on firing angle var/spread = 0 //amount (in degrees) of projectile spread @@ -48,6 +43,9 @@ var/ricochets = 0 var/ricochets_max = 2 var/ricochet_chance = 30 + + var/colliding = FALSE //pause processing.. + var/ignore_source_check = FALSE var/damage = 10 @@ -73,9 +71,9 @@ var/impact_effect_type //what type of impact effect to show when hitting something var/log_override = FALSE //is this type spammed enough to not log? (KAs) -/obj/item/projectile/New() +/obj/item/projectile/Initialize() + . = ..() permutated = list() - return ..() /obj/item/projectile/proc/Range() range-- @@ -168,20 +166,28 @@ /obj/item/projectile/proc/vol_by_damage() if(src.damage) - return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then clamp the value between 30 and 100 + return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100 else return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume +/obj/item/projectile/proc/on_ricochet(atom/A) + return + /obj/item/projectile/Collide(atom/A) + colliding = TRUE if(check_ricochet(A) && check_ricochet_flag(A) && ricochets < ricochets_max) ricochets++ if(A.handle_ricochet(src)) + on_ricochet(A) ignore_source_check = TRUE range = initial(range) - return FALSE + return TRUE if(firer && !ignore_source_check) if(A == firer || (A == firer.loc && ismecha(A))) //cannot shoot yourself or your mech - loc = A.loc + trajectory_ignore_forcemove = TRUE + forceMove(get_turf(A)) + trajectory_ignore_forcemove = FALSE + colliding = FALSE return FALSE var/distance = get_dist(get_turf(A), starting) // Get the distance between the turf shot from and the mob we hit and use that for the calculations. @@ -197,25 +203,32 @@ if(!prehit(A)) if(forcedodge) - loc = target_turf + trajectory_ignore_forcemove = TRUE + forceMove(target_turf) + trajectory_ignore_forcemove = FALSE + colliding = FALSE return FALSE var/permutation = A.bullet_act(src, def_zone) // searches for return value, could be deleted after run so check A isn't null if(permutation == -1 || forcedodge)// the bullet passes through a dense object! - loc = target_turf + trajectory_ignore_forcemove = TRUE + forceMove(target_turf) + trajectory_ignore_forcemove = FALSE if(A) permutated.Add(A) + colliding = FALSE return FALSE else var/atom/alt = select_target(A) if(alt) if(!prehit(alt)) + colliding = FALSE return FALSE alt.bullet_act(src, def_zone) qdel(src) + colliding = FALSE return TRUE - /obj/item/projectile/proc/select_target(atom/A) //Selects another target from a wall if we hit a wall. if(!A || !A.density || (A.flags_1 & ON_BORDER_1) || ismob(A) || A == original) //if we hit a dense non-border obj or dense turf then we also hit one of the mobs or machines/structures on that tile. return @@ -246,12 +259,30 @@ return TRUE return FALSE +/obj/item/projectile/proc/return_predicted_turf_after_moves(moves, forced_angle) //I say predicted because there's no telling that the projectile won't change direction/location in flight. + if(!trajectory && isnull(forced_angle) && isnull(Angle)) + return FALSE + var/datum/point/vector/current = trajectory + if(!current) + var/turf/T = get_turf(src) + current = new(T.x, T.y, T.z, pixel_x, pixel_y, isnull(forced_angle)? Angle : forced_angle, pixel_speed) + var/datum/point/vector/v = current.return_vector_after_increments(moves) + return v.return_turf() + +/obj/item/projectile/proc/return_pathing_turfs_in_moves(moves, forced_angle) + var/turf/current = get_turf(src) + var/turf/ending = return_predicted_turf_after_moves(moves, forced_angle) + return getline(current, ending) + +/obj/item/projectile/proc/before_z_change(turf/oldloc, turf/newloc) + return + /obj/item/projectile/Process_Spacemove(var/movement_dir = 0) return TRUE //Bullets don't drift in space /obj/item/projectile/process() last_process = world.time - if(!loc || !fired) + if(!loc || !fired || !trajectory) fired = FALSE return PROCESS_KILL if(paused || !isturf(loc)) @@ -285,73 +316,70 @@ setAngle(angle) if(spread) setAngle(Angle + ((rand() - 0.5) * spread)) + var/turf/starting = get_turf(src) if(isnull(Angle)) //Try to resolve through offsets if there's no angle set. - var/turf/starting = get_turf(src) + if(isnull(xo) || isnull(yo)) + stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!") + qdel(src) + return var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z) setAngle(Get_Angle(src, target)) if(!nondirectional_sprite) var/matrix/M = new M.Turn(Angle) transform = M - old_pixel_x = pixel_x - old_pixel_y = pixel_y + trajectory = new(starting.x, starting.y, starting.z, 0, 0, Angle, pixel_speed) last_projectile_move = world.time fired = TRUE if(!isprocessing) START_PROCESSING(SSprojectiles, src) + pixel_move(1) //move it now! /obj/item/projectile/proc/setAngle(new_angle) //wrapper for overrides. Angle = new_angle - return TRUE - -/obj/item/projectile/proc/pixel_move(moves) if(!nondirectional_sprite) var/matrix/M = new M.Turn(Angle) transform = M + if(trajectory) + trajectory.set_angle(new_angle) + return TRUE - pixel_x_increment=round((sin(Angle)+16*sin(Angle)*2), 1) //round() is a floor operation when only one argument is supplied, we don't want that here - pixel_y_increment=round((cos(Angle)+16*cos(Angle)*2), 1) - pixel_x_offset = old_pixel_x + pixel_x_increment - pixel_y_offset = old_pixel_y + pixel_y_increment - new_x = x - new_y = y +/obj/item/projectile/forceMove(atom/target) + . = ..() + if(trajectory && !trajectory_ignore_forcemove && isturf(target)) + trajectory.initialize_location(target.x, target.y, target.z, 0, 0) - while(pixel_x_offset > 16) - pixel_x_offset -= 32 - old_pixel_x -= 32 - new_x++// x++ - while(pixel_x_offset < -16) - pixel_x_offset += 32 - old_pixel_x += 32 - new_x-- - while(pixel_y_offset > 16) - pixel_y_offset -= 32 - old_pixel_y -= 32 - new_y++ - while(pixel_y_offset < -16) - pixel_y_offset += 32 - old_pixel_y += 32 - new_y-- +/obj/item/projectile/proc/pixel_move(moves, trajectory_multiplier = 1) + if(!loc || !trajectory) + return + last_projectile_move = world.time + if(!nondirectional_sprite) + var/matrix/M = new + M.Turn(Angle) + transform = M + trajectory.increment(trajectory_multiplier) + var/turf/T = trajectory.return_turf() + if(T.z != loc.z) + before_z_change(loc, T) + trajectory_ignore_forcemove = TRUE + forceMove(T) + trajectory_ignore_forcemove = FALSE + pixel_x = trajectory.return_px() + pixel_y = trajectory.return_py() + else + step_towards(src, T) + pixel_x = trajectory.return_px() - trajectory.mpx * trajectory_multiplier + pixel_y = trajectory.return_py() - trajectory.mpy * trajectory_multiplier + animate(src, pixel_x = trajectory.return_px(), pixel_y = trajectory.return_py(), time = 1, flags = ANIMATION_END_NOW) - step_towards(src, locate(new_x, new_y, z)) - pixel_x = old_pixel_x - pixel_y = old_pixel_y - animate(src, pixel_x = pixel_x_offset, pixel_y = pixel_y_offset, time = 1, flags = ANIMATION_END_NOW) - old_pixel_x = pixel_x_offset - old_pixel_y = pixel_y_offset if(can_hit_target(original, permutated)) Collide(original) Range() - last_projectile_move = world.time //Returns true if the target atom is on our current turf and above the right layer /obj/item/projectile/proc/can_hit_target(atom/target, var/list/passthrough) - if(target && (target.layer >= PROJECTILE_HIT_THRESHHOLD_LAYER) || ismob(target)) - if(loc == get_turf(target)) - if(!(target in passthrough)) - return TRUE - return FALSE + return (target && ((target.layer >= PROJECTILE_HIT_THRESHHOLD_LAYER) || ismob(target)) && (loc == get_turf(target)) && (!(target in passthrough))) /obj/item/projectile/proc/preparePixelProjectile(atom/target, atom/source, params, spread = 0) var/turf/curloc = get_turf(source) @@ -362,7 +390,7 @@ if(targloc || !params) yo = targloc.y - curloc.y xo = targloc.x - curloc.x - + setAngle(Get_Angle(src, targloc)) if(isliving(source) && params) var/list/calculated = calculate_projectile_angle_and_pixel_offsets(source, params) p_x = calculated[2] @@ -372,8 +400,13 @@ setAngle(calculated[1] + spread) else setAngle(calculated[1]) - else + else if(targloc) + yo = targloc.y - curloc.y + xo = targloc.x - curloc.x setAngle(Get_Angle(src, targloc)) + else + stack_trace("WARNING: Projectile [type] fired without either mouse parameters, or a target atom to aim at!") + qdel(src) /proc/calculate_projectile_angle_and_pixel_offsets(mob/user, params) var/list/mouse_control = params2list(params) diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 323960c7f3..235f27e9e5 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -341,8 +341,8 @@ icon_state = "banana" range = 200 -/obj/item/projectile/bullet/honker/New() - ..() +/obj/item/projectile/bullet/honker/Initialize() + . = ..() SpinAnimation() // Mime @@ -364,8 +364,8 @@ damage = 6 var/piercing = FALSE -/obj/item/projectile/bullet/dart/New() - ..() +/obj/item/projectile/bullet/dart/Initialize() + . = ..() create_reagents(50) reagents.set_reacting(FALSE) @@ -388,8 +388,8 @@ reagents.handle_reactions() return TRUE -/obj/item/projectile/bullet/dart/metalfoam/New() - ..() +/obj/item/projectile/bullet/dart/metalfoam/Initialize() + . = ..() reagents.add_reagent("aluminium", 15) reagents.add_reagent("foaming_agent", 5) reagents.add_reagent("facid", 5) diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 94e8b465c1..08a087dbac 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -15,6 +15,7 @@ /datum/reagents/New(maximum=100) maximum_volume = maximum + //I dislike having these here but map-objects are initialised before world/New() is called. >_> if(!GLOB.chemical_reagents_list) //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id @@ -295,6 +296,7 @@ C.update_stamina() update_total() + /datum/reagents/proc/set_reacting(react = TRUE) if(react) flags &= ~(REAGENT_NOREACT) @@ -743,8 +745,7 @@ out += "[taste_desc]" return english_list(out, "something indescribable") - - + /datum/reagents/proc/expose_temperature(var/temperature, var/coeff=0.02) var/temp_delta = (temperature - chem_temp) * coeff if(temp_delta > 0) diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index ac8f3bc656..17fb8e1a1d 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -53,6 +53,8 @@ "toxin" ) + var/list/saved_recipes = list() + /obj/machinery/chem_dispenser/Initialize() . = ..() cell = new cell_type @@ -136,6 +138,7 @@ data["beakerTransferAmounts"] = null var/chemicals[0] + var/recipes[0] var/is_hallucinating = FALSE if(user.hallucinating()) is_hallucinating = TRUE @@ -146,7 +149,10 @@ if(is_hallucinating && prob(5)) chemname = "[pick_list_replacements("hallucination.json", "chemicals")]" chemicals.Add(list(list("title" = chemname, "id" = temp.id))) + for(var/recipe in saved_recipes) + recipes.Add(list(recipe)) data["chemicals"] = chemicals + data["recipes"] = recipes return data /obj/machinery/chem_dispenser/ui_act(action, params) @@ -179,6 +185,37 @@ beaker = null cut_overlays() . = TRUE + if("dispense_recipe") + var/recipe_to_use = params["recipe"] + var/list/chemicals_to_dispense = process_recipe_list(recipe_to_use) + for(var/r_id in chemicals_to_dispense) // i suppose you could edit the list locally before passing it + if(beaker && dispensable_reagents.Find(r_id)) // but since we verify we have the reagent, it'll be fine + var/datum/reagents/R = beaker.reagents + var/free = R.maximum_volume - R.total_volume + var/actual = min(chemicals_to_dispense[r_id], (cell.charge * powerefficiency)*10, free) + if(actual) + R.add_reagent(r_id, actual) + cell.use((actual / 10) / powerefficiency) + if("clear_recipes") + var/yesno = alert("Clear all recipes?",, "Yes","No") + if(yesno == "Yes") + saved_recipes = list() + if("add_recipe") + var/name = stripped_input(usr,"Name","What do you want to name this recipe?", "Recipe", MAX_NAME_LEN) + var/recipe = stripped_input(usr,"Recipe","Insert recipe with chem IDs") + if(name && recipe) + var/list/first_process = splittext(recipe, ";") + if(!LAZYLEN(first_process)) + return + for(var/reagents in first_process) + var/list/fuck = splittext(reagents, "=") + if(dispensable_reagents.Find(fuck[1])) + continue + else + var/temp = fuck[1] + to_chat(usr, "[src] can't process [temp]!") + return + saved_recipes += list(list("recipe_name" = name, "contents" = recipe)) /obj/machinery/chem_dispenser/attackby(obj/item/I, mob/user, params) if(default_unfasten_wrench(user, I)) @@ -222,7 +259,7 @@ if(beaker && beaker.reagents) beaker.reagents.remove_all() cell.use(total/powerefficiency) - cell.emp_act() + cell.emp_act(severity) visible_message("[src] malfunctions, spraying chemicals everywhere!") ..() @@ -310,6 +347,14 @@ beaker = null return ..() +/obj/machinery/chem_dispenser/proc/process_recipe_list(var/fucking_hell) + var/list/final_list = list() + var/list/first_process = splittext(fucking_hell, ";") + for(var/reagents in first_process) + var/list/fuck = splittext(reagents, "=") + final_list += list(fuck[1] = text2num(fuck[2])) + return final_list + /obj/machinery/chem_dispenser/drinks name = "soda dispenser" desc = "Contains a large reservoir of soft drinks." @@ -400,4 +445,4 @@ "cryoxadone", "ammonia", "ash", - "diethylamine") \ No newline at end of file + "diethylamine") diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 00fd7d56a3..6b47b99a32 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -51,9 +51,9 @@ All effects don't start immediately, but rather get worse over time; the rate is if(reac_volume >= 5) var/obj/item/book/affectedbook = O affectedbook.dat = null - to_chat(usr, "Through thorough application, you wash away [affectedbook]'s writing.") + O.visible_message("[O]'s writing is washed away by [name]!") else - to_chat(usr, "The ink smears, but doesn't wash away!") + O.visible_message("[O]'s ink is smeared by [name], but doesn't wash away!") return /datum/reagent/consumable/ethanol/reaction_mob(mob/living/M, method=TOUCH, reac_volume)//Splashing people with ethanol isn't quite as good as fuel. @@ -149,8 +149,8 @@ All effects don't start immediately, but rather get worse over time; the rate is /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-40) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.Jitter(5) return ..() @@ -541,8 +541,8 @@ All effects don't start immediately, but rather get worse over time; the rate is shot_glass_icon_state = "toxinsspecialglass" /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob) - if (M.bodytemperature < 330) - M.bodytemperature = min(330, M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature < (BODYTEMP_NORMAL + 20)) + M.bodytemperature = min((BODYTEMP_NORMAL + 20), M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/beepsky_smash @@ -721,8 +721,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "The ultimate refreshment." /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/M) - if (M.bodytemperature < 330) - M.bodytemperature = min(330, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature < (BODYTEMP_NORMAL + 20)) + M.bodytemperature = min((BODYTEMP_NORMAL + 20), M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/barefoot @@ -835,8 +835,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A spicy mix of Vodka and Spice. Very hot." /datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/M) - if (M.bodytemperature < 360) - M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature < BODYTEMP_HEAT_DAMAGE_LIMIT) + M.bodytemperature = min(BODYTEMP_HEAT_DAMAGE_LIMIT, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/red_mead @@ -874,8 +874,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A beer so frosty, the air around it freezes." /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/M) - if(M.bodytemperature > 270) - M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if(M.bodytemperature > T0C) + M.bodytemperature = max(T0C, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. return ..() /datum/reagent/consumable/ethanol/grog diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index b62afb80c0..ab241d7f43 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -70,7 +70,7 @@ //nothing if(21 to INFINITY) if(prob(current_cycle-10)) - M.cure_nearsighted() + M.cure_nearsighted(list(EYE_DAMAGE)) ..() return @@ -172,6 +172,22 @@ M.emote("laugh") ..() +/datum/reagent/consumable/superlaughter + name = "Super Laughter" + id = "superlaughter" + description = "Funny until you're the one laughing." + metabolization_rate = 1.5 * REAGENTS_METABOLISM + color = "#FF4DD2" + taste_description = "laughter" + +/datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M) + if(!iscarbon(M)) + return + if(prob(30)) + M.visible_message("[M] bursts out into a fit of uncontrollable laughter!", "You burst out in a fit of uncontrollable laughter!") + M.Stun(5) + ..() + /datum/reagent/consumable/potato_juice name = "Potato Juice" id = "potato" @@ -264,8 +280,8 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT)) if(holder.has_reagent("frostoil")) holder.remove_reagent("frostoil", 5) ..() @@ -289,8 +305,8 @@ M.AdjustSleeping(-20, FALSE) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1, 0) - if (M.bodytemperature < 310) //310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL) //310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() . = 1 @@ -326,8 +342,8 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) - if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.Jitter(5) ..() . = 1 @@ -349,8 +365,8 @@ M.AdjustSleeping(-40, FALSE) if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1, 0) - if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() . = 1 @@ -366,8 +382,8 @@ /datum/reagent/consumable/space_cola/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-5) - if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() /datum/reagent/consumable/nuka_cola @@ -387,8 +403,8 @@ M.drowsyness = 0 M.AdjustSleeping(-40, FALSE) M.status_flags |= GOTTAGOFAST - if (M.bodytemperature > 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() . = 1 @@ -405,8 +421,8 @@ /datum/reagent/consumable/spacemountainwind/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-7) M.AdjustSleeping(-20, FALSE) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.Jitter(5) ..() . = 1 @@ -423,8 +439,8 @@ /datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/M) M.drowsyness = max(0,M.drowsyness-6) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. ..() /datum/reagent/consumable/space_up @@ -439,8 +455,8 @@ /datum/reagent/consumable/space_up/on_mob_life(mob/living/M) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. ..() /datum/reagent/consumable/lemon_lime @@ -455,8 +471,8 @@ /datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/M) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. ..() /datum/reagent/consumable/pwr_game @@ -470,8 +486,8 @@ glass_desc = "Goes well with a Vlad's salad." /datum/reagent/consumable/pwr_game/on_mob_life(mob/living/M) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. ..() /datum/reagent/consumable/shamblers @@ -485,8 +501,8 @@ glass_desc = "Mmm mm, shambly." /datum/reagent/consumable/shamblers/on_mob_life(mob/living/M) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055 + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (8 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310.15 is the normal bodytemp. ..() /datum/reagent/consumable/sodawater name = "Soda Water" @@ -501,8 +517,8 @@ /datum/reagent/consumable/sodawater/on_mob_life(mob/living/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() /datum/reagent/consumable/tonic @@ -519,8 +535,8 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40, FALSE) - if (M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() . = 1 @@ -553,8 +569,8 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0, FALSE) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) @@ -575,8 +591,8 @@ M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0, FALSE) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index a3c0d2c034..835bcaaad7 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -97,10 +97,11 @@ /datum/reagent/consumable/cooking_oil/reaction_obj(obj/O, reac_volume) if(holder && holder.chem_temp >= fry_temperature) - if(isitem(O)) + if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder)) O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.") - var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location()) - F.fry(O, volume) + var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O) + F.fry(volume) + F.reagents.add_reagent("cooking_oil", reac_volume) /datum/reagent/consumable/cooking_oil/reaction_mob(mob/living/M, method = TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(!istype(M)) @@ -370,8 +371,8 @@ glass_desc = "Tasty." /datum/reagent/consumable/hot_coco/on_mob_life(mob/living/M) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() /datum/reagent/mushroomhallucinogen @@ -462,8 +463,8 @@ taste_description = "wet and cheap noodles" /datum/reagent/consumable/hot_ramen/on_mob_life(mob/living/M) - if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055 - M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if (M.bodytemperature < BODYTEMP_NORMAL)//310.15 is the normal bodytemp. + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() /datum/reagent/consumable/hell_ramen diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index ddb08db032..d49ddd57a1 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -21,10 +21,10 @@ color = "#C8A5DC" // rgb: 200, 165, 220 /datum/reagent/medicine/leporazine/on_mob_life(mob/living/M) - if(M.bodytemperature > 310) - M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) - else if(M.bodytemperature < 311) - M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) + if(M.bodytemperature > BODYTEMP_NORMAL) + M.bodytemperature = max(BODYTEMP_NORMAL, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) + else if(M.bodytemperature < (BODYTEMP_NORMAL + 1)) + M.bodytemperature = min(BODYTEMP_NORMAL, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT)) ..() /datum/reagent/medicine/adminordrazine //An OP chemical for admins @@ -44,7 +44,7 @@ M.adjustToxLoss(-5, 0) M.hallucination = 0 M.setBrainLoss(0) - M.disabilities = 0 + M.remove_all_disabilities() M.set_blurriness(0) M.set_blindness(0) M.SetKnockdown(0, 0) @@ -129,31 +129,16 @@ taste_description = "sludge" /datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/M) - switch(M.bodytemperature) // Low temperatures are required to take effect. - if(0 to 100) // At extreme temperatures (upgraded cryo) the effect is greatly increased. - M.status_flags &= ~DISFIGURED - M.adjustCloneLoss(-1, 0) - M.adjustOxyLoss(-9, 0) - M.adjustBruteLoss(-5, 0) - M.adjustFireLoss(-5, 0) - M.adjustToxLoss(-5, 0) - . = 1 - if(100 to 225) // At lower temperatures (cryo) the full effect is boosted - M.status_flags &= ~DISFIGURED - M.adjustCloneLoss(-1, 0) - M.adjustOxyLoss(-7, 0) - M.adjustBruteLoss(-3, 0) - M.adjustFireLoss(-3, 0) - M.adjustToxLoss(-3, 0) - . = 1 - if(225 to T0C) - M.status_flags &= ~DISFIGURED - M.adjustCloneLoss(-1, 0) - M.adjustOxyLoss(-5, 0) - M.adjustBruteLoss(-1, 0) - M.adjustFireLoss(-1, 0) - M.adjustToxLoss(-1, 0) - . = 1 + var/power = -0.00003 * (M.bodytemperature ** 2) + 3 + if(M.bodytemperature < T0C) + M.adjustOxyLoss(-3 * power, 0) + M.adjustBruteLoss(-power, 0) + M.adjustFireLoss(-power, 0) + M.adjustToxLoss(-power, 0) + M.adjustCloneLoss(-power, 0) + M.status_flags &= ~DISFIGURED + . = 1 + metabolization_rate = REAGENTS_METABOLISM * (0.00001 * (M.bodytemperature ** 2) + 0.5) ..() /datum/reagent/medicine/clonexadone @@ -667,16 +652,16 @@ var/obj/item/organ/eyes/eyes = M.getorganslot(ORGAN_SLOT_EYES) if (!eyes) return - if(M.disabilities & BLIND) + if(M.has_disability(DISABILITY_BLIND, EYE_DAMAGE)) if(prob(20)) to_chat(M, "Your vision slowly returns...") - M.cure_blind() - M.cure_nearsighted() + M.cure_blind(EYE_DAMAGE) + M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(35) - else if(M.disabilities & NEARSIGHT) + else if(M.has_disability(DISABILITY_NEARSIGHT, EYE_DAMAGE)) to_chat(M, "The blackness in your peripheral vision fades.") - M.cure_nearsighted() + M.cure_nearsighted(EYE_DAMAGE) M.blur_eyes(10) else if(M.eye_blind || M.eye_blurry) M.set_blindness(0) @@ -765,7 +750,7 @@ M.visible_message("[M]'s body convulses a bit, and then falls still once more.") return M.visible_message("[M]'s body convulses a bit.") - if(!M.suiciding && !(M.disabilities & NOCLONE) && !M.hellbound) + if(!M.suiciding && !(M.has_disability(DISABILITY_NOCLONE)) && !M.hellbound) if(!M) return if(M.notify_ghost_cloning(source = M)) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 219d9df8ef..8f0fb11e32 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -79,8 +79,7 @@ if(!B) B = new(T) if(data["blood_DNA"]) - B.blood_DNA[data["blood_DNA"]] = data["blood_type"] - + B.add_blood_DNA(list(data["blood_DNA"] = data["blood_type"])) /datum/reagent/liquidgibs name = "Liquid gibs" @@ -941,12 +940,12 @@ else if(O) O.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - O.clean_blood() + O.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/reaction_turf(turf/T, reac_volume) if(reac_volume >= 1) T.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) - T.clean_blood() + T.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) for(var/obj/effect/decal/cleanable/C in T) qdel(C) @@ -964,26 +963,26 @@ H.lip_style = null H.update_body() for(var/obj/item/I in C.held_items) - I.clean_blood() + I.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) if(C.wear_mask) - if(C.wear_mask.clean_blood()) + if(C.wear_mask.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) - if(H.head.clean_blood()) + if(H.head.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_head() if(H.wear_suit) - if(H.wear_suit.clean_blood()) + if(H.wear_suit.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_wear_suit() else if(H.w_uniform) - if(H.w_uniform.clean_blood()) + if(H.w_uniform.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_w_uniform() if(H.shoes) - if(H.shoes.clean_blood()) + if(H.shoes.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)) H.update_inv_shoes() H.wash_cream() - M.clean_blood() + M.SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD) /datum/reagent/space_cleaner/ez_clean name = "EZ Clean" @@ -1688,3 +1687,23 @@ description = "blue sparkles that get everywhere" color = "#4040FF" //A blueish color glitter_type = /obj/effect/decal/cleanable/glitter/blue + +/datum/reagent/pax + name = "pax" + id = "pax" + description = "A colorless liquid that suppresses violence on the subjects." + color = "#AAAAAA55" + taste_description = "water" + metabolization_rate = 0.25 * REAGENTS_METABOLISM + +/datum/reagent/pax/on_mob_add(mob/M) + ..() + if(isliving(M)) + var/mob/living/L = M + L.add_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) + +/datum/reagent/pax/on_mob_delete(mob/M) + if(isliving(M)) + var/mob/living/L = M + L.remove_disability(DISABILITY_PACIFISM, CHEMICAL_DISABILITY) + ..() \ No newline at end of file diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index b41d61be84..526a2602b6 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -51,7 +51,7 @@ if(isplatingturf(T)) var/turf/open/floor/plating/F = T if(prob(10 + F.burnt + 5*F.broken)) //broken or burnt plating is more susceptible to being destroyed - F.ChangeTurf(F.baseturf) + F.ScrapeAway() if(isfloorturf(T)) var/turf/open/floor/F = T if(prob(reac_volume)) @@ -65,7 +65,7 @@ if(iswallturf(T)) var/turf/closed/wall/W = T if(prob(reac_volume)) - W.ChangeTurf(/turf/open/floor/plating) + W.ScrapeAway() /datum/reagent/clf3/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(istype(M)) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 7bee2ef958..6e1e8046fe 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -141,7 +141,7 @@ taste_description = "mint" /datum/reagent/toxin/minttoxin/on_mob_life(mob/living/M) - if(M.disabilities & FAT) + if(M.has_disability(DISABILITY_FAT)) M.gib() return ..() diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index 222f88ba8b..8ebc470c5f 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -671,3 +671,9 @@ var/location = get_turf(holder.my_atom) for(var/i in 1 to 10) new /obj/item/stack/sheet/plastic(location) + +/datum/chemical_reaction/pax + name = "pax" + id = "pax" + results = list("pax" = 3) + required_reagents = list("mindbreaker" = 1, "synaptizine" = 1, "water" = 1) diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 6fb21e847b..640f828e18 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -119,6 +119,6 @@ /obj/item/reagent_containers/microwave_act(obj/machinery/microwave/M) reagents.expose_temperature(1000) ..() - + /obj/item/reagent_containers/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - reagents.expose_temperature(exposed_temperature) + reagents.expose_temperature(exposed_temperature) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 0a99d9da6e..e736c344db 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -130,6 +130,18 @@ Borg Hypospray reagent_ids = list ("facid", "mutetoxin", "cyanide", "sodium_thiopental", "heparin", "lexorin") accepts_reagent_upgrades = FALSE +/obj/item/reagent_containers/borghypo/clown + name = "laughter injector" + desc = "Keeps the crew happy and productive!" + reagent_ids = list("laughter") + accepts_reagent_upgrades = FALSE + +/obj/item/reagent_containers/borghypo/clown/hacked + name = "laughter injector" + desc = "Keeps the crew so happy they don't work!" + reagent_ids = list("superlaughter") + accepts_reagent_upgrades = FALSE + /obj/item/reagent_containers/borghypo/syndicate name = "syndicate cyborg hypospray" desc = "An experimental piece of Syndicate technology used to produce powerful restorative nanites used to very quickly restore injuries of all types. Also metabolizes potassium iodide, for radiation poisoning, and morphine, for offense." diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm index 6fad290676..749031b367 100644 --- a/code/modules/reagents/reagent_containers/bottle.dm +++ b/code/modules/reagents/reagent_containers/bottle.dm @@ -311,4 +311,4 @@ /obj/item/reagent_containers/glass/bottle/tuberculosiscure name = "BVAK bottle" desc = "A small bottle containing Bio Virus Antidote Kit." - list_reagents = list("atropine" = 5, "epinephrine" = 5, "salbutamol" = 10, "spaceacillin" = 10) \ No newline at end of file + list_reagents = list("atropine" = 5, "epinephrine" = 5, "salbutamol" = 10, "spaceacillin" = 10) diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 06a242cca9..2aa386e37d 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -397,4 +397,4 @@ /obj/item/reagent_containers/glass/beaker/large/bromine name = "bromine beaker" - list_reagents = list("bromine" = 50) + list_reagents = list("bromine" = 50) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 4908a55911..f5d46a240e 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -157,4 +157,4 @@ desc = "I wouldn't eat this if I were you." icon_state = "pill9" color = "#454545" - list_reagents = list("shadowmutationtoxin" = 1) + list_reagents = list("shadowmutationtoxin" = 1) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 2e34e39f8f..87d5a4bb67 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -18,16 +18,16 @@ var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode. var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode. var/stream_amount = 10 //the amount of reagents transfered when in stream mode. + var/can_fill_from_container = TRUE amount_per_transfer_from_this = 5 volume = 250 possible_transfer_amounts = list(5,10,15,20,25,30,50,100) - /obj/item/reagent_containers/spray/afterattack(atom/A, mob/user) if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics)) return - if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1) + if((A.is_drainable() && !A.is_refillable()) && get_dist(src,A) <= 1 && can_fill_from_container) if(!A.reagents.total_volume) to_chat(user, "[A] is empty.") return @@ -130,7 +130,6 @@ to_chat(user, "You heat [name] with [I]!") return ..() - /obj/item/reagent_containers/spray/verb/empty() set name = "Empty Spray Bottle" set category = "Object" @@ -205,6 +204,46 @@ /obj/item/reagent_containers/spray/waterflower/attack_self(mob/user) //Don't allow changing how much the flower sprays return +/obj/item/reagent_containers/spray/waterflower/cyborg + container_type = NONE + volume = 100 + list_reagents = list("water" = 100) + var/generate_amount = 5 + var/generate_type = "water" + var/last_generate = 0 + var/generate_delay = 10 //deciseconds + can_fill_from_container = FALSE + +/obj/item/reagent_containers/spray/waterflower/cyborg/hacked + name = "nova flower" + desc = "This doesn't look safe at all..." + list_reagents = list("clf3" = 3) + volume = 3 + generate_type = "clf3" + generate_amount = 1 + generate_delay = 40 //deciseconds + +/obj/item/reagent_containers/spray/waterflower/cyborg/Initialize() + . = ..() + START_PROCESSING(SSfastprocess, src) + +/obj/item/reagent_containers/spray/waterflower/cyborg/Destroy() + STOP_PROCESSING(SSfastprocess, src) + return ..() + +/obj/item/reagent_containers/spray/waterflower/cyborg/process() + if(world.time > last_generate + generate_delay) + return + last_generate = world.time + generate_reagents() + +/obj/item/reagent_containers/spray/waterflower/cyborg/empty() + to_chat(usr, "You can not empty this!") + return + +/obj/item/reagent_containers/spray/waterflower/cyborg/proc/generate_reagents() + reagents.add_reagent(generate_type, generate_amount) + //chemsprayer /obj/item/reagent_containers/spray/chemsprayer name = "chem sprayer" diff --git a/code/modules/recycling/disposal/pipe.dm b/code/modules/recycling/disposal/pipe.dm index 28eefde453..355d5d6b96 100644 --- a/code/modules/recycling/disposal/pipe.dm +++ b/code/modules/recycling/disposal/pipe.dm @@ -190,6 +190,7 @@ deconstruct() +// Straight/bent pipe segment /obj/structure/disposalpipe/segment icon_state = "pipe" initialize_dirs = DISP_DIR_FLIP diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 26fa304209..207b610a8c 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -12,8 +12,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). circuit = /obj/item/circuitboard/machine/circuit_imprinter var/efficiency_coeff - var/console_link = TRUE //can this link to a console? - var/requires_console = TRUE var/datum/component/material_container/materials //Store for hyper speed! @@ -32,11 +30,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). ) /obj/machinery/rnd/circuit_imprinter/Initialize() - var/datum/component/material_container/materials materials = AddComponent(/datum/component/material_container, list(MAT_GLASS, MAT_GOLD, MAT_DIAMOND, MAT_METAL, MAT_BLUESPACE), 0, FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE create_reagents(0) + RefreshParts() return ..() /obj/machinery/rnd/circuit_imprinter/RefreshParts() @@ -119,11 +117,9 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). return TRUE /obj/machinery/rnd/circuit_imprinter/proc/do_print(path, list/matlist, notify_admins) - if(notify_admins) - if(usr) - usr.investigate_log("built [path] at a circuit imprinter.", INVESTIGATE_RESEARCH) - var/turf/T = get_turf(usr) - message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [path] at a circuit imprinter at [COORD(usr)]") + if(notify_admins && usr) + investigate_log("[key_name(usr)] built [path] at a circuit imprinter.", INVESTIGATE_RESEARCH) + message_admins("[ADMIN_LOOKUPFLW(usr)] has built [path] at a circuit imprinter.") var/obj/item/I = new path(get_turf(src)) I.materials = matlist.Copy() - SSblackbox.record_feedback("nested_tally", "circuit_printed", 1, list("[type]", "[path]")) + SSblackbox.record_feedback("nested tally", "circuit_printed", 1, list("[type]", "[path]")) diff --git a/code/modules/research/departmental_circuit_imprinter.dm b/code/modules/research/departmental_circuit_imprinter.dm index 7b06aaa839..06e7c531b8 100644 --- a/code/modules/research/departmental_circuit_imprinter.dm +++ b/code/modules/research/departmental_circuit_imprinter.dm @@ -143,8 +143,7 @@ /obj/machinery/rnd/circuit_imprinter/department/proc/ui_header() var/list/l = list() - l += "

    Nanotrasen Department Circuit Imprinter: [department_tag]

    [RDSCREEN_NOBREAK]" - l += "
    Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" + l += "
    [host_research.organization] [department_tag] Department Circuit Imprinter" l += "Security protocols: [emagged? "Disabled" : "Enabled"]" l += "Material Amount: [materials.total_amount] / [materials.max_amount]" l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" diff --git a/code/modules/research/departmental_lathe.dm b/code/modules/research/departmental_lathe.dm index 4e8d33a3a3..dc3c8ad66f 100644 --- a/code/modules/research/departmental_lathe.dm +++ b/code/modules/research/departmental_lathe.dm @@ -186,8 +186,7 @@ /obj/machinery/rnd/protolathe/department/proc/ui_header() var/list/l = list() - l += "

    Nanotrasen Department Lathe: [department_tag]

    [RDSCREEN_NOBREAK]" - l += "
    Connected Technology database: [host_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" + l += "
    [host_research.organization] [department_tag] Department Lathe" l += "Security protocols: [emagged? "Disabled" : "Enabled"]" l += "Material Amount: [materials.total_amount] / [materials.max_amount]" l += "Chemical volume: [reagents.total_volume] / [reagents.maximum_volume]" diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index e16aadb7cd..b3b0f8df99 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -43,11 +43,17 @@ other types of metals and chemistry for reagents). var/lathe_time_factor = 1 //How many times faster than normal is this to build on the protolathe var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. var/departmental_flags = ALL //bitflags for deplathes. + var/list/datum/techweb_node/unlocked_by = list() + var/icon_cache /datum/design/Destroy() CRASH("DESIGN DATUMS SHOULD NOT EVER BE DESTROYED AS THEY ARE ONLY MEANT TO BE IN A GLOBAL LIST AND REFERENCED FOR US.") return ..() +/datum/design/proc/icon_html(client/user) + send_asset(user, "design_[id].png", FALSE) + return "" + //////////////////////////////////////// //Disks for transporting design datums// //////////////////////////////////////// diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 13ddd2582f..eb92bb3737 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -20,8 +20,8 @@ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE /datum/design/board/onehuman_module - name = "Module Design (OneCrew)" - desc = "Allows for the construction of a OneCrew AI Module." + name = "Module Design (OneHuman)" + desc = "Allows for the construction of a OneHuman AI Module." id = "onehuman_module" materials = list(MAT_GLASS = 1000, MAT_DIAMOND = 100) build_path = /obj/item/aiModule/zeroth/oneHuman diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index ff2ccc938f..b656b6c21c 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -600,14 +600,6 @@ build_path = /obj/item/device/electropack category = list("hacked", "Tools") -/datum/design/shock_collar - name = "Shock Collar" - id = "shock_collar" - build_type = AUTOLATHE - materials = list(MAT_METAL = 5000, MAT_GLASS = 2000) - build_path = /obj/item/device/electropack/shockcollar - category = list("hacked", "Security") - /datum/design/large_welding_tool name = "Industrial Welding Tool" id = "large_welding_tool" @@ -815,6 +807,15 @@ build_path = /obj/item/stock_parts/cell/emergency_light category = list("initial", "Electronics") +/datum/design/packageWrap + name = "Package Wrapping" + id = "packagewrap" + build_type = AUTOLATHE + materials = list(MAT_METAL = 200, MAT_GLASS = 200) + build_path = /obj/item/stack/packageWrap + category = list("initial", "Misc") + maxstack = 30 + /datum/design/holodisk name = "Holodisk" id = "holodisk" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 2343bd8814..059d9c982c 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -111,6 +111,7 @@ desc = "The circuit board for a sleeper." id = "sleeper" build_path = /obj/item/circuitboard/machine/sleeper + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL category = list ("Medical Machinery") /datum/design/board/cryotube @@ -118,6 +119,7 @@ desc = "The circuit board for a cryotube." id = "cryotube" build_path = /obj/item/circuitboard/machine/cryo_tube + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL category = list ("Medical Machinery") /datum/design/board/chem_dispenser @@ -125,12 +127,14 @@ desc = "The circuit board for a portable chem dispenser." id = "chem_dispenser" build_path = /obj/item/circuitboard/machine/chem_dispenser + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL category = list ("Medical Machinery") /datum/design/board/chem_master name = "Machine Design (Chem Master Board)" desc = "The circuit board for a Chem Master 3000." id = "chem_master" + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL build_path = /obj/item/circuitboard/machine/chem_master category = list ("Medical Machinery") @@ -138,6 +142,7 @@ name = "Machine Design (Chemical Heater Board)" desc = "The circuit board for a chemical heater." id = "chem_heater" + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL build_path = /obj/item/circuitboard/machine/chem_heater category = list ("Medical Machinery") @@ -153,12 +158,14 @@ desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console." id = "clonecontrol" build_path = /obj/item/circuitboard/computer/cloning + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL category = list("Medical Machinery") /datum/design/board/clonepod name = "Machine Design (Clone Pod)" desc = "Allows for the construction of circuit boards used to build a Cloning Pod." id = "clonepod" + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL build_path = /obj/item/circuitboard/machine/clonepod category = list("Medical Machinery") @@ -166,6 +173,7 @@ name = "Machine Design (Cloning Scanner)" desc = "Allows for the construction of circuit boards used to build a Cloning Scanner." id = "clonescanner" + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL build_path = /obj/item/circuitboard/machine/clonescanner category = list("Medical Machinery") diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index e3caef247c..05acb20f0e 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -44,6 +44,8 @@ Note: Must be placed within 3 tiles of the R&D Console to_chat(user, "You add the [O.name] to the [src.name]!") flick("d_analyzer_la", src) addtimer(CALLBACK(src, .proc/finish_loading), 10) + if (linked_console) + linked_console.updateUsrDialog() /obj/machinery/rnd/destructive_analyzer/proc/finish_loading() update_icon() @@ -93,30 +95,35 @@ Note: Must be placed within 3 tiles of the R&D Console /obj/machinery/rnd/destructive_analyzer/proc/user_try_decon_id(id, mob/user) if(!istype(loaded_item) || !istype(linked_console)) return FALSE - if(id && !(id == RESEARCH_MATERIAL_RECLAMATION_ID)) + + if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID) var/datum/techweb_node/TN = get_techweb_node_by_id(id) if(!istype(TN)) return FALSE - var/list/pos1 = techweb_item_boost_check(loaded_item) - if(isnull(pos1[id])) + var/list/can_boost = techweb_item_boost_check(loaded_item) + if(isnull(can_boost[id])) return FALSE var/dpath = loaded_item.type - if(isnull(TN.boost_item_paths[dpath])) + var/worth = TN.boost_item_paths[dpath] + if(isnull(worth)) return FALSE - var/dboost = TN.boost_item_paths[dpath] - var/choice = input("Are you sure you want to destroy [loaded_item.name] for a boost of [dboost? 0 : dboost] in node [TN.display_name]") in list("Proceed", "Cancel") + var/difference = min(worth, TN.research_cost) - linked_console.stored_research.boosted_nodes[TN.id] + if(worth && difference <= 0) + return FALSE + var/choice = input("Are you sure you want to destroy [loaded_item] to [!worth ? "reveal [TN.display_name]" : "boost [TN.display_name] by [difference] point\s"]?") in list("Proceed", "Cancel") if(choice == "Cancel") return FALSE if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) return FALSE - SSblackbox.record_feedback("nested_tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) + SSblackbox.record_feedback("nested tally", "item_deconstructed", 1, list("[TN.id]", "[loaded_item.type]")) if(destroy_item(loaded_item)) linked_console.stored_research.boost_with_path(SSresearch.techweb_nodes[TN.id], dpath) + else var/point_value = techweb_item_point_check(loaded_item) if(linked_console.stored_research.deconstructed_items[loaded_item.type]) point_value = 0 - var/choice = input("Are you sure you want to destroy [loaded_item.name] for [point_value? "[point_value] points" : "material reclaimation"]?") in list("Proceed", "Cancel") + var/choice = input("Are you sure you want to destroy [loaded_item] for [point_value ? "[point_value] research points" : "material reclamation"]?") in list("Proceed", "Cancel") if(choice == "Cancel") return FALSE if(QDELETED(loaded_item) || QDELETED(linked_console) || !user.Adjacent(linked_console) || QDELETED(src)) @@ -133,4 +140,5 @@ Note: Must be placed within 3 tiles of the R&D Console return FALSE loaded_item.forceMove(get_turf(src)) loaded_item = null + update_icon() return TRUE diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index bad8f1e5aa..d90c7e5dcc 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -664,11 +664,11 @@ /obj/item/relic/proc/teleport(mob/user) to_chat(user, "[src] begins to vibrate!") - addtimer(CALLBACK(src, .proc/do_teleport, user), rand(10, 30)) + addtimer(CALLBACK(src, .proc/do_the_teleport, user), rand(10, 30)) -/obj/item/relic/proc/do_teleport(mob/user) +/obj/item/relic/proc/do_the_teleport(mob/user) var/turf/userturf = get_turf(user) - if(loc == user && userturf.z != ZLEVEL_CENTCOM) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you! + if(loc == user && !is_centcom_level(userturf.z)) //Because Nuke Ops bringing this back on their shuttle, then looting the ERT area is 2fun4you! visible_message("[src] twists and bends, relocating itself!") throwSmoke(userturf) do_teleport(user, userturf, 8, asoundin = 'sound/effects/phasein.ogg') diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index cbd0fa9f27..1dc32e6dde 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -15,8 +15,6 @@ Note: Must be placed west/left of and R&D console to function. circuit = /obj/item/circuitboard/machine/protolathe var/efficiency_coeff - var/console_link = TRUE //allow console link. - var/requires_console = TRUE var/list/categories = list( "Power Designs", "Medical Designs", @@ -31,7 +29,7 @@ Note: Must be placed west/left of and R&D console to function. "Computer Parts" ) - var/datum/component/material_container/materials + var/datum/component/material_container/materials //Store for hyper speed! /obj/machinery/rnd/protolathe/Initialize() create_reagents(0) @@ -39,6 +37,7 @@ Note: Must be placed west/left of and R&D console to function. list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE), 0, FALSE, list(/obj/item/stack, /obj/item/ore/bluespace_crystal), CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert)) materials.precise_insertion = TRUE + RefreshParts() return ..() /obj/machinery/rnd/protolathe/RefreshParts() @@ -75,6 +74,7 @@ Note: Must be placed west/left of and R&D console to function. materials.retrieve_all() ..() + /obj/machinery/rnd/protolathe/disconnect_console() linked_console.linked_lathe = null ..() @@ -124,13 +124,11 @@ Note: Must be placed west/left of and R&D console to function. return TRUE /obj/machinery/rnd/protolathe/proc/do_print(path, amount, list/matlist, notify_admins) - if(notify_admins) - if(usr) - usr.investigate_log("built [amount] of [path] at a protolathe.", INVESTIGATE_RESEARCH) - var/turf/T = get_turf(usr) - message_admins("[key_name(usr)][ADMIN_JMP(T)] has built [amount] of [path] at a protolathe at [COORD(usr)]") + if(notify_admins && usr) + investigate_log("[key_name(usr)] built [amount] of [path] at a protolathe.", INVESTIGATE_RESEARCH) + message_admins("[ADMIN_LOOKUPFLW(usr)] has built [amount] of [path] at a protolathe") for(var/i in 1 to amount) var/obj/item/I = new path(get_turf(src)) if(!istype(I, /obj/item/stack/sheet) && !istype(I, /obj/item/ore/bluespace_crystal)) I.materials = matlist.Copy() - SSblackbox.record_feedback("nested_tally", "item_printed", amount, list("[type]", "[path]")) \ No newline at end of file + SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 0c468b184a..0b9453a62d 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -45,6 +45,7 @@ doesn't have toxins access. var/disk_slot_selected var/searchstring = "" var/searchtype = "" + var/ui_mode = RDCONSOLE_UI_MODE_NORMAL var/research_control = TRUE @@ -216,13 +217,11 @@ doesn't have toxins access. /obj/machinery/computer/rdconsole/proc/ui_header() var/list/l = list() - l += "

    Nanotrasen Research and Development

    [RDSCREEN_NOBREAK]" - l += "
    Connected Technology database: [stored_research == SSresearch.science_tech? "Nanotrasen" : "Third Party"]" - l += "Available Points: [stored_research.research_points]" + l += "
    [stored_research.organization] Research and Development Network" + l += "Available points: [round(stored_research.research_points)] (+[round(stored_research.last_bitcoins * 60)] / minute)" l += "Security protocols: [emagged? "Disabled" : "Enabled"]" - l += "Design Disk: [d_disk? "Loaded" : "Not Loaded"] | \ - Technology Disk: [t_disk? "Loaded" : "Not Loaded"]" l += "Main Menu | Back
    [RDSCREEN_NOBREAK]" + l += "[ui_mode == 1? "Normal View" : "Normal View"] | [ui_mode == 2? "Expert View" : "Expert View"] | [ui_mode == 3? "List View" : "List View"]" return l /obj/machinery/computer/rdconsole/proc/ui_main_menu() @@ -234,7 +233,7 @@ doesn't have toxins access. if(t_disk) l += "
    Tech Disk" if(linked_destroy) - l += "
    Deconstructive Analyzer" + l += "
    Destructive Analyzer" if(linked_lathe) l += "
    Protolathe" if(linked_imprinter) @@ -540,122 +539,214 @@ doesn't have toxins access. RDSCREEN_UI_DECONSTRUCT_CHECK var/list/l = list() if(!linked_destroy.loaded_item) - l += "
    No Item Loaded. Standing-by...
    " + l += "
    No item loaded. Standing-by...
    " else - l += "

    Deconstruction Menu

    " - l += "Eject Item" - l += "Name: [linked_destroy.loaded_item.name]" - l += "Select a node to boost by deconstructing this item." - l += "This item is able to boost:" - var/list/listin = techweb_item_boost_check(linked_destroy.loaded_item) - for(var/node_id in listin) - var/datum/techweb_node/N = get_techweb_node_by_id(node_id) - var/worth = listin[N.id] - if(!stored_research.researched_nodes[N.id] && !stored_research.boosted_nodes[N.id]) - l += "[N.display_name]: [worth] points" - else - l += "[RDSCREEN_NOBREAK]" + l += "
    [icon2html(linked_destroy.loaded_item, usr)][linked_destroy.loaded_item.name] Eject
    [RDSCREEN_NOBREAK]" + l += "Select a node to boost by deconstructing this item. This item can boost:" + + var/anything = FALSE + var/list/boostable_nodes = techweb_item_boost_check(linked_destroy.loaded_item) + for(var/id in boostable_nodes) + anything = TRUE + var/worth = boostable_nodes[id] + var/datum/techweb_node/N = get_techweb_node_by_id(id) + + l += "
    [RDSCREEN_NOBREAK]" + if (stored_research.researched_nodes[N.id]) // already researched + l += "[N.display_name]" + l += "This node has already been researched." + else if (worth == 0) // reveal only + if (stored_research.hidden_nodes[N.id]) + l += "[N.display_name]" + l += "This node will be revealed." + else + l += "[N.display_name]" + l += "This node has already been revealed." + else // boost by the difference + var/difference = min(worth, N.research_cost) - stored_research.boosted_nodes[N.id] + if (difference > 0) + l += "[N.display_name]" + l += "This node will be boosted by [difference] points." + else + l += "[N.display_name]" + l += "This node has already been boosted." + l += "
    [RDSCREEN_NOBREAK]" + + // point deconstruction and material reclamation use the same ID to prevent accidentally missing the points var/point_value = techweb_item_point_check(linked_destroy.loaded_item) - if(point_value && isnull(stored_research.deconstructed_items[linked_destroy.loaded_item.type])) - l += "Generic Point Deconstruction - [point_value] points" - l += "Material Reclaimation Deconstruction" + if(point_value) + anything = TRUE + l += "
    [RDSCREEN_NOBREAK]" + if (stored_research.deconstructed_items[linked_destroy.loaded_item.type]) + l += "Point Deconstruction" + l += "This item's [point_value] point\s have already been claimed." + else + l += "Point Deconstruction" + l += "This item is worth [point_value] point\s!" + l += "
    [RDSCREEN_NOBREAK]" + + var/list/materials = linked_destroy.loaded_item.materials + if (materials.len) + l += "
    Material Reclamation" + for (var/M in materials) + l += "* [CallMaterialName(M)] x [materials[M]]" + l += "
    [RDSCREEN_NOBREAK]" + anything = TRUE + + if (!anything) + l += "Nothing!" + l += "
    " return l -/obj/machinery/computer/rdconsole/proc/ui_techweb() //Legacy code. +/obj/machinery/computer/rdconsole/proc/ui_techweb() var/list/l = list() - var/list/avail = list() //This could probably be optimized a bit later. - var/list/unavail = list() - var/list/res = list() - for(var/v in stored_research.researched_nodes) - res += stored_research.researched_nodes[v] - for(var/v in stored_research.available_nodes) - if(stored_research.researched_nodes[v]) - continue - avail += stored_research.available_nodes[v] - for(var/v in stored_research.visible_nodes) - if(stored_research.available_nodes[v]) - continue - unavail += stored_research.visible_nodes[v] - l += "

    Technology Nodes:

    [RDSCREEN_NOBREAK]" - l += "

    Available for Research:

    " - for(var/datum/techweb_node/N in avail) - var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) - var/has_points = (stored_research.research_points >= N.get_price(stored_research)) - var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null - l += "[N.display_name][research_href]" - l += "

    Locked Nodes:

    " - for(var/datum/techweb_node/N in unavail) - l += "[N.display_name]" - l += "

    Researched Nodes:

    " - for(var/datum/techweb_node/N in res) - l += "[N.display_name]" + if(ui_mode != RDCONSOLE_UI_MODE_LIST) + var/list/columns = list() + var/max_tier = 0 + for (var/node_ in stored_research.tiers) + var/datum/techweb_node/node = node_ + var/tier = stored_research.tiers[node] + LAZYINITLIST(columns["[tier]"]) // String hackery to make the numbers associative + columns["[tier]"] += ui_techweb_single_node(node, minimal=(tier != 1)) + max_tier = max(max_tier, tier) + + l += "[RDSCREEN_NOBREAK]" + for(var/tier in 0 to max_tier) + l += "[RDSCREEN_NOBREAK]" + l += "
    ResearchedAvailableFuture
    [RDSCREEN_NOBREAK]" + l += columns["[tier]"] + l += "
    [RDSCREEN_NOBREAK]" + else + var/list/avail = list() //This could probably be optimized a bit later. + var/list/unavail = list() + var/list/res = list() + for(var/v in stored_research.researched_nodes) + res += stored_research.researched_nodes[v] + for(var/v in stored_research.available_nodes) + if(stored_research.researched_nodes[v]) + continue + avail += stored_research.available_nodes[v] + for(var/v in stored_research.visible_nodes) + if(stored_research.available_nodes[v]) + continue + unavail += stored_research.visible_nodes[v] + l += "

    Technology Nodes:

    [RDSCREEN_NOBREAK]" + l += "

    Available for Research:

    " + for(var/datum/techweb_node/N in avail) + var/not_unlocked = (stored_research.available_nodes[N.id] && !stored_research.researched_nodes[N.id]) + var/has_points = (stored_research.research_points >= N.get_price(stored_research)) + var/research_href = not_unlocked? (has_points? "Research" : "Not Enough Points") : null + l += "[N.display_name][research_href]" + l += "

    Locked Nodes:

    " + for(var/datum/techweb_node/N in unavail) + l += "[N.display_name]" + l += "

    Researched Nodes:

    " + for(var/datum/techweb_node/N in res) + l += "[N.display_name]" + l += "
    [RDSCREEN_NOBREAK]" + return l + +/obj/machinery/computer/rdconsole/proc/machine_icon(atom/item) + return icon2html(initial(item.icon), usr, initial(item.icon_state), SOUTH) + +/obj/machinery/computer/rdconsole/proc/ui_techweb_single_node(datum/techweb_node/node, selflink=TRUE, minimal=FALSE) + var/list/l = list() + if (stored_research.hidden_nodes[node.id]) + return l + var/price = node.get_price(stored_research) + var/display_name = node.display_name + if (selflink) + display_name = "[display_name]" + l += "
    [display_name] [RDSCREEN_NOBREAK]" + if(minimal) + l += "
    [node.description]" + else + if(stored_research.researched_nodes[node.id]) + l += "Researched" + else if(stored_research.available_nodes[node.id]) + if(stored_research.research_points >= price) + l += "[price]" + else + l += "[price]" // gray - too expensive + else + l += "[price]" // red - missing prereqs + if(ui_mode == RDCONSOLE_UI_MODE_NORMAL) + l += "[node.description]" + for(var/i in node.designs) + var/datum/design/D = node.designs[i] + l += "[D.icon_html(usr)][RDSCREEN_NOBREAK]" l += "
    [RDSCREEN_NOBREAK]" return l -/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() //Legacy code +/obj/machinery/computer/rdconsole/proc/ui_techweb_nodeview() RDSCREEN_UI_SNODE_CHECK var/list/l = list() if(stored_research.hidden_nodes[selected_node.id]) l += "

    ERROR: RESEARCH NODE UNKNOWN.

    " - l += "

    [selected_node.display_name]

    " - l += "Description: [selected_node.description]" - l += "Status: [stored_research.researched_nodes[selected_node.id]? "Researched" : "Locked"]" - l += "Point Cost: [selected_node.get_price(stored_research)].
    [RDSCREEN_NOBREAK]" - if(stored_research.researched_nodes[selected_node.id]) - l += "

    Already Researched

    [RDSCREEN_NOBREAK]" - else if(stored_research.available_nodes[selected_node.id]) - if(stored_research.research_points >= selected_node.get_price(stored_research)) - l += "

    Research

    [RDSCREEN_NOBREAK]" - else - l += "

    Not Enough Points

    [RDSCREEN_NOBREAK]" - else if(stored_research.visible_nodes[selected_node.id]) - l += "

    Prerequisites not met!

    [RDSCREEN_NOBREAK]" - else - l += "

    ERROR

    [RDSCREEN_NOBREAK]" - l += "

    Designs:

    [RDSCREEN_NOBREAK]" - for(var/i in selected_node.designs) - var/datum/design/D = selected_node.designs[i] - l += "[D.name]" - l += "

    Prerequisites:

    [RDSCREEN_NOBREAK]" - for(var/i in selected_node.prerequisites) - var/datum/techweb_node/prereq = selected_node.prerequisites[i] - var/sc = stored_research.researched_nodes[prereq.id] - var/begin - var/end - if(sc) - begin = "" - end = "" - else - begin = "" - end = "" - l += "[begin][prereq.display_name][end]" - l += "

    Unlocks:

    [RDSCREEN_NOBREAK]" - for(var/i in selected_node.unlocks) - var/datum/techweb_node/unlock = selected_node.unlocks[i] - l += "[unlock.display_name]" + return - l += "
    [RDSCREEN_NOBREAK]" + l += "[RDSCREEN_NOBREAK]" + if (length(selected_node.prerequisites)) + l += "[RDSCREEN_NOBREAK]" + l += "[RDSCREEN_NOBREAK]" + if (length(selected_node.unlocks)) + l += "[RDSCREEN_NOBREAK]" + + l += "[RDSCREEN_NOBREAK]" + if (length(selected_node.prerequisites)) + l += "[RDSCREEN_NOBREAK]" + l += "[RDSCREEN_NOBREAK]" + if (length(selected_node.unlocks)) + l += "[RDSCREEN_NOBREAK]" + + l += "
    RequiresCurrent NodeUnlocks
    [RDSCREEN_NOBREAK]" + for (var/i in selected_node.prerequisites) + l += ui_techweb_single_node(selected_node.prerequisites[i]) + l += "[RDSCREEN_NOBREAK]" + l += ui_techweb_single_node(selected_node, selflink=FALSE) + l += "[RDSCREEN_NOBREAK]" + for (var/i in selected_node.unlocks) + l += ui_techweb_single_node(selected_node.unlocks[i]) + l += "
    [RDSCREEN_NOBREAK]" return l /obj/machinery/computer/rdconsole/proc/ui_techweb_designview() //Legacy code RDSCREEN_UI_SDESIGN_CHECK var/list/l = list() var/datum/design/D = selected_design - l += "
    Name: [D.name]" + l += "
    [D.icon_html(usr)][D.name]
    [RDSCREEN_NOBREAK]" if(D.build_type) - l += "Lathe Types:" - if(D.build_type & IMPRINTER) l += "Circuit Imprinter" - if(D.build_type & PROTOLATHE) l += "Protolathe" - if(D.build_type & AUTOLATHE) l += "Autolathe" - if(D.build_type & MECHFAB) l += "Exosuit Fabricator" - if(D.build_type & BIOGENERATOR) l += "Biogenerator" - if(D.build_type & LIMBGROWER) l += "Limbgrower" - if(D.build_type & SMELTER) l += "Smelter" - l += "Required Materials:" + var/lathes = list() + if(D.build_type & IMPRINTER) + lathes += "[machine_icon(/obj/machinery/rnd/circuit_imprinter)][RDSCREEN_NOBREAK]" + if (linked_imprinter && D.id in stored_research.researched_designs) + l += "Imprint" + if(D.build_type & PROTOLATHE) + lathes += "[machine_icon(/obj/machinery/rnd/protolathe)][RDSCREEN_NOBREAK]" + if (linked_lathe && D.id in stored_research.researched_designs) + l += "Construct" + if(D.build_type & AUTOLATHE) + lathes += "[machine_icon(/obj/machinery/autolathe)][RDSCREEN_NOBREAK]" + if(D.build_type & MECHFAB) + lathes += "[machine_icon(/obj/machinery/mecha_part_fabricator)][RDSCREEN_NOBREAK]" + if(D.build_type & BIOGENERATOR) + lathes += "[machine_icon(/obj/machinery/biogenerator)][RDSCREEN_NOBREAK]" + if(D.build_type & LIMBGROWER) + lathes += "[machine_icon(/obj/machinery/limbgrower)][RDSCREEN_NOBREAK]" + if(D.build_type & SMELTER) + lathes += "[machine_icon(/obj/machinery/mineral/processing_unit)][RDSCREEN_NOBREAK]" + l += "Construction types:" + l += lathes + l += "" + l += "Required materials:" var/all_mats = D.materials + D.reagents_list for(var/M in all_mats) l += "* [CallMaterialName(M)] x [all_mats[M]]" + l += "Unlocked by:" + for (var/node in D.unlocked_by) + l += ui_techweb_single_node(node) l += "[RDSCREEN_NOBREAK]
    " return l @@ -721,6 +812,8 @@ doesn't have toxins access. if(ls["switch_screen"]) back = screen screen = text2num(ls["switch_screen"]) + if(ls["ui_mode"]) + ui_mode = text2num(ls["ui_mode"]) if(ls["lock_console"]) if(allowed(usr)) lock_console(usr) @@ -873,7 +966,8 @@ doesn't have toxins access. /obj/machinery/computer/rdconsole/interact(mob/user) user.set_machine(src) - var/datum/browser/popup = new(user, "rndconsole", name, 460, 550) + var/datum/browser/popup = new(user, "rndconsole", name, 900, 600) + popup.add_stylesheet("techwebs", 'html/browser/techwebs.css') popup.set_content(generate_ui()) popup.open() diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 663d3fc806..60b8a1d6da 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -1,5 +1,4 @@ - //All devices that link into the R&D console fall into thise type for easy identification and some shared procs. @@ -11,12 +10,14 @@ use_power = IDLE_POWER_USE var/busy = FALSE var/hacked = FALSE + var/console_link = TRUE //allow console link. + var/requires_console = TRUE var/disabled = FALSE var/shocked = FALSE var/obj/machinery/computer/rdconsole/linked_console var/obj/item/loaded_item = null //the item loaded inside the machine (currently only used by experimentor and destructive analyzer) var/allowed_department_flags = ALL - + /obj/machinery/rnd/proc/reset_busy() busy = FALSE @@ -79,28 +80,26 @@ /obj/machinery/rnd/proc/is_insertion_ready(mob/user) if(panel_open) to_chat(user, "You can't load [src] while it's opened!") - return - if (disabled) - return - if (!linked_console) // Try to auto-connect to new RnD consoles nearby. - if(!linked_console) - to_chat(user, "[src] must be linked to an R&D console first!") - return - if (busy) + return FALSE + if(disabled) + return FALSE + if(requires_console && !linked_console) + to_chat(user, "[src] must be linked to an R&D console first!") + return FALSE + if(busy) to_chat(user, "[src] is busy right now.") - return + return FALSE if(stat & BROKEN) to_chat(user, "[src] is broken.") - return + return FALSE if(stat & NOPOWER) to_chat(user, "[src] has no power.") - return + return FALSE if(loaded_item) to_chat(user, "[src] is already loaded.") - return + return FALSE return TRUE - //we eject the loaded item when deconstructing the machine /obj/machinery/rnd/on_deconstruction() if(loaded_item) @@ -115,6 +114,6 @@ else var/obj/item/stack/S = type_inserted stack_name = initial(S.name) - use_power(max(1000, (MINERAL_MATERIAL_AMOUNT * amount_inserted / 10))) + use_power(max(1000, (MINERAL_MATERIAL_AMOUNT * amount_inserted / 100))) add_overlay("protolathe_[stack_name]") addtimer(CALLBACK(src, /atom/proc/cut_overlay, "protolathe_[stack_name]"), 10) diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index af1dc853d8..0e2e788b8f 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -82,7 +82,6 @@ If you create T5+ please take a pass at gene_modder.dm [L40]. Max_values MUST fi //Rating 1 - /obj/item/stock_parts/capacitor name = "capacitor" desc = "A basic capacitor used in the construction of a variety of devices." diff --git a/code/modules/research/techweb/__techweb_helpers.dm b/code/modules/research/techweb/__techweb_helpers.dm index adfa5c78d0..af4fe7480b 100644 --- a/code/modules/research/techweb/__techweb_helpers.dm +++ b/code/modules/research/techweb/__techweb_helpers.dm @@ -130,6 +130,9 @@ CHECK_TICK /proc/calculate_techweb_nodes() + for(var/design_id in SSresearch.techweb_designs) + var/datum/design/D = SSresearch.techweb_designs[design_id] + D.unlocked_by.Cut() for(var/node_id in SSresearch.techweb_nodes) var/datum/techweb_node/node = SSresearch.techweb_nodes[node_id] node.prerequisites = list() @@ -138,7 +141,9 @@ for(var/i in node.prereq_ids) node.prerequisites[i] = SSresearch.techweb_nodes[i] for(var/i in node.design_ids) - node.designs[i] = SSresearch.techweb_designs[i] + var/datum/design/D = SSresearch.techweb_designs[i] + node.designs[i] = D + D.unlocked_by += node if(node.hidden) SSresearch.techweb_nodes_hidden[node.id] = node CHECK_TICK diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 74ace7e4c2..d59dea55d3 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -17,6 +17,9 @@ var/id = "generic" var/list/research_logs = list() //IC logs. var/max_bomb_value = 0 + var/organization = "Third-Party" //Organization name, used for display. + var/last_bitcoins = 0 //Current per-second production, used for display only. + var/list/tiers = list() //Assoc list, datum = number, 1 is available, 2 is all reqs are 1, so on /datum/techweb/New() for(var/i in SSresearch.techweb_nodes_starting) @@ -28,6 +31,7 @@ /datum/techweb/admin research_points = INFINITY //KEKKLES. id = "ADMIN" + organization = "CentCom" /datum/techweb/admin/New() //All unlocked. . = ..() @@ -38,6 +42,7 @@ /datum/techweb/science //Global science techweb for RND consoles. id = "SCIENCE" + organization = "Nanotrasen" /datum/techweb/Destroy() researched_nodes = null @@ -148,15 +153,31 @@ recalculate_nodes(TRUE) //Fully rebuild the tree. /datum/techweb/proc/boost_with_path(datum/techweb_node/N, itempath) - if(!istype(N)||!ispath(itempath)) + if(!istype(N) || !ispath(itempath)) return FALSE - var/boost = N.boost_item_paths[itempath] - if(!boosted_nodes[N]) - boosted_nodes[N] = boost - if(N.autounlock_by_boost) - hidden_nodes -= N.id + boosted_nodes[N] = max(boosted_nodes[N], N.boost_item_paths[itempath]) + if(N.autounlock_by_boost) + hidden_nodes -= N.id return TRUE +/datum/techweb/proc/update_tiers(datum/techweb_node/base) + var/list/current = list(base) + while (current.len) + var/list/next = list() + for (var/node_ in current) + var/datum/techweb_node/node = node_ + var/tier = 0 + if (!researched_nodes[node.id]) // researched is tier 0 + for (var/id in node.prereq_ids) + var/prereq_tier = tiers[node.prerequisites[id]] + tier = max(tier, prereq_tier + 1) + + if (tier != tiers[node]) + tiers[node] = tier + for (var/id in node.unlocks) + next += node.unlocks[id] + current = next + /datum/techweb/proc/update_node_status(datum/techweb_node/node, autoupdate_consoles = TRUE) var/researched = FALSE var/available = FALSE @@ -185,6 +206,7 @@ else if(visible) visible_nodes[node.id] = node + update_tiers(node) if(autoupdate_consoles) for(var/v in consoles_accessing) var/obj/machinery/computer/rdconsole/V = v diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 75faf07bf1..3ec6c4cf9d 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -23,8 +23,6 @@ actual_cost = research_cost /datum/techweb_node/proc/get_price(datum/techweb/host) - if(!host) - return actual_cost - var/discount = boost_item_paths[host.boosted_nodes[src]] - actual_cost = research_cost - discount + if(host) + actual_cost = research_cost - host.boosted_nodes[src] return actual_cost diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 96b252854b..ba43a1c24b 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -1,6 +1,6 @@ //Current rate: 132500 research points in 90 minutes -//Current cargo price: 250000 points for fullmaxed R&D. +//Current cargo price: 280000 points for fullmaxed R&D. //Base Node /datum/techweb_node/base @@ -9,7 +9,7 @@ display_name = "Basic Research Technology" description = "NT default research technologies." design_ids = list("basic_matter_bin", "basic_cell", "basic_scanning", "basic_capacitor", "basic_micro_laser", "micro_mani", - "destructive_analyzer", "protolathe", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", + "destructive_analyzer", "circuit_imprinter", "experimentor", "rdconsole", "design_disk", "tech_disk", "rdserver", "rdservercontrol", "mechfab", "space_heater") //Default research tech, prevents bricking /////////////////////////Biotech///////////////////////// @@ -18,7 +18,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("mass_spectrometer", "chem_heater", "chem_master", "chem_dispenser", "sleeper", "pandemic") + design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "pandemic") research_cost = 2500 export_price = 10000 @@ -27,7 +27,16 @@ display_name = "Advanced Biotechnology" description = "Advanced Biotechnology" prereq_ids = list("biotech") - design_ids = list("piercesyringe", "adv_mass_spectrometer", "plasmarefiller", "limbgrower") + design_ids = list("piercesyringe", "plasmarefiller", "limbgrower") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/bio_process + id = "bio_process" + display_name = "Biological Processing" + description = "From slimes to kitchens." + prereq_ids = list("biotech") + design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave") research_cost = 2500 export_price = 10000 @@ -52,8 +61,8 @@ /////////////////////////engineering tech///////////////////////// /datum/techweb_node/engineering id = "engineering" - description = "Modern Engineering Technology." display_name = "Industrial Engineering" + description = "A refresher course on modern engineering technology." prereq_ids = list("base") design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "weldingmask", "mesons", "thermomachine", "tesla_coil", "grounding_rod", "apc_control") @@ -62,13 +71,31 @@ /datum/techweb_node/adv_engi id = "adv_engi" - description = "Advanced Engineering research" display_name = "Advanced Engineering" + description = "Pushing the boundaries of physics, one chainsaw-fist at a time." prereq_ids = list("engineering", "emp_basic") design_ids = list("engine_goggles", "diagnostic_hud", "magboots") research_cost = 2500 export_price = 10000 +/datum/techweb_node/high_efficiency + id = "high_efficiency" + display_name = "High Efficiency Parts" + description = "Finely-tooled manufacturing techniques allowing for picometer-perfect precision levels." + prereq_ids = list("engineering", "datatheory") + design_ids = list("pico_mani", "super_matter_bin") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/adv_power + id = "adv_power" + display_name = "Advanced Power Manipulation" + description = "How to get more zap." + prereq_ids = list("engineering") + design_ids = list("smes", "super_cell", "hyper_cell", "super_capacitor", "superpacman", "mrspacman", "power_turbine", "power_turbine_console", "power_compressor") + research_cost = 2500 + export_price = 10000 + /////////////////////////Bluespace tech///////////////////////// /datum/techweb_node/bluespace_basic //Bluespace-memery id = "bluespace_basic" @@ -89,6 +116,26 @@ research_cost = 2500 export_price = 10000 +/datum/techweb_node/practical_bluespace + id = "practical_bluespace" + display_name = "Applied Bluespace Research" + description = "Using bluespace to make things faster and better." + prereq_ids = list("bluespace_basic", "engineering") + design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning") + research_cost = 2500 + export_price = 10000 + + +/datum/techweb_node/bluespace_power + id = "bluespace_power" + display_name = "Bluespace Power Technology" + description = "Even more powerful.. power!" + prereq_ids = list("adv_power", "adv_bluespace") + design_ids = list("bluespace_cell", "quadratic_capacitor") + research_cost = 2500 + export_price = 10000 + + /////////////////////////plasma tech///////////////////////// /datum/techweb_node/basic_plasma id = "basic_plasma" @@ -127,112 +174,6 @@ research_cost = 2500 export_price = 10000 -/////////////////////////EMP tech///////////////////////// -/datum/techweb_node/emp_basic //EMP tech for some reason - id = "emp_basic" - display_name = "Electromagnetic Theory" - description = "Study into usage of frequencies in the electromagnetic spectrum." - prereq_ids = list("base") - design_ids = list("holosign", "inducer", "tray_goggles", "holopad") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/emp_adv - id = "emp_adv" - display_name = "Advanced Electromagnetic Theory" - prereq_ids = list("emp_basic") - design_ids = list("ultra_micro_laser") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/emp_super - id = "emp_super" - display_name = "Quantum Electromagnetic Technology" //bs - description = "Even better electromagnetic technology" - prereq_ids = list("emp_adv") - design_ids = list("quadultra_micro_laser") - research_cost = 2500 - export_price = 10000 - -/////////////////////////Clown tech///////////////////////// -/datum/techweb_node/clown - id = "clown" - display_name = "Clown Technology" - description = "Honk?!" - prereq_ids = list("base") - design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", - "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone") - research_cost = 2500 - export_price = 10000 - -////////////////////////Computer tech//////////////////////// -/datum/techweb_node/comptech - id = "comptech" - display_name = "Computer Consoles" - description = "Computers and how they work." - prereq_ids = list("datatheory") - design_ids = list("cargo", "cargorequest", "stockexchange", "libraryconsole", "aifixer", "mining", "crewconsole", "comconsole", "idcardconsole", "operating", "seccamera") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/computer_hardware_basic //Modular computers are shitty and nearly useless so until someone makes them actually useful this can be easy to get. - id = "computer_hardware_basic" - display_name = "Computer Hardware" - description = "How computer hardware are made." - prereq_ids = list("comptech") - research_cost = 2500 - export_price = 10000 - design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired", - "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", - "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small") - -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Arcade Games" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "slotmachine") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/comp_recordkeeping - id = "comp_recordkeeping" - display_name = "Computerized Recordkeeping" - description = "Organized record databases and how they're used." - prereq_ids = list("comptech") - design_ids = list("secdata", "med_data", "prisonmanage", "vendor", "automated_announcement") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/telecomms - id = "telecomms" - display_name = "Telecommunications Technology" - description = "Subspace transmission technology for near-instant communications devices." - prereq_ids = list("comptech", "bluespace_basic") - research_cost = 2500 - export_price = 10000 - design_ids = list("s-receiver", "s-bus", "s-broadcaster", "s-processor", "s-hub", "s-server", "s-relay", "comm_monitor", "comm_server", - "s-ansible", "s-filter", "s-amplifier", "ntnet_relay", "s-treatment", "s-analyzer", "s-crystal", "s-transmitter") - -/datum/techweb_node/integrated_HUDs - id = "integrated_HUDs" - display_name = "Integrated HUDs" - description = "The usefulness of computerized records, projected straight onto your eyepiece!" - prereq_ids = list("comp_recordkeeping", "emp_basic") - design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/NVGtech - id = "NVGtech" - display_name = "Night Vision Technology" - description = "Allows seeing in the dark without actual light!" - prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv") - design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons") - research_cost = 2500 - export_price = 10000 - -////////////////////////AI & Cyborg tech//////////////////////// /datum/techweb_node/neural_programming id = "neural_programming" display_name = "Neural Programming" @@ -281,7 +222,7 @@ /datum/techweb_node/cyborg_upg_med id = "cyborg_upg_med" display_name = "Cyborg Upgrades: Medical" - description = "Medical upgrades for cyborgs" + description = "Medical upgrades for cyborgs." prereq_ids = list("adv_biotech", "cyborg") design_ids = list("borg_upgrade_defibrillator", "borg_upgrade_piercinghypospray", "borg_upgrade_highstrengthsynthesiser", "borg_upgrade_expandedsynthesiser") research_cost = 2500 @@ -291,7 +232,7 @@ id = "cyborg_upg_combat" display_name = "Cyborg Upgrades: Combat" description = "Military grade upgrades for cyborgs." - prereq_ids = list("adv_robotics", "adv_engi") + prereq_ids = list("adv_robotics", "adv_engi" , "weaponry") design_ids = list("borg_upgrade_vtec", "borg_upgrade_disablercooler") research_cost = 2500 export_price = 10000 @@ -307,6 +248,112 @@ research_cost = 2500 export_price = 10000 +/////////////////////////EMP tech///////////////////////// +/datum/techweb_node/emp_basic //EMP tech for some reason + id = "emp_basic" + display_name = "Electromagnetic Theory" + description = "Study into usage of frequencies in the electromagnetic spectrum." + prereq_ids = list("base") + design_ids = list("holosign", "inducer", "tray_goggles", "holopad") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/emp_adv + id = "emp_adv" + display_name = "Advanced Electromagnetic Theory" + description = "Determining whether reversing the polarity will actually help in a given situation." + prereq_ids = list("emp_basic") + design_ids = list("ultra_micro_laser") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/emp_super + id = "emp_super" + display_name = "Quantum Electromagnetic Technology" //bs + description = "Even better electromagnetic technology." + prereq_ids = list("emp_adv") + design_ids = list("quadultra_micro_laser") + research_cost = 2500 + export_price = 10000 + +/////////////////////////Clown tech///////////////////////// +/datum/techweb_node/clown + id = "clown" + display_name = "Clown Technology" + description = "Honk?!" + prereq_ids = list("base") + design_ids = list("air_horn", "honker_main", "honker_peri", "honker_targ", "honk_chassis", "honk_head", "honk_torso", "honk_left_arm", "honk_right_arm", + "honk_left_leg", "honk_right_leg", "mech_banana_mortar", "mech_mousetrap_mortar", "mech_honker", "mech_punching_face", "implant_trombone") + research_cost = 2500 + export_price = 10000 + +////////////////////////Computer tech//////////////////////// +/datum/techweb_node/comptech + id = "comptech" + display_name = "Computer Consoles" + description = "Computers and how they work." + prereq_ids = list("datatheory") + design_ids = list("cargo", "cargorequest", "stockexchange", "libraryconsole", "aifixer", "mining", "crewconsole", "comconsole", "idcardconsole", "operating", "seccamera") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/computer_hardware_basic //Modular computers are shitty and nearly useless so until someone makes them actually useful this can be easy to get. + id = "computer_hardware_basic" + display_name = "Computer Hardware" + description = "How computer hardware are made." + prereq_ids = list("comptech") + research_cost = 2500 + export_price = 10000 + design_ids = list("hdd_basic", "hdd_advanced", "hdd_super", "hdd_cluster", "ssd_small", "ssd_micro", "netcard_basic", "netcard_advanced", "netcard_wired", + "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", + "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small") + +/datum/techweb_node/computer_board_gaming + id = "computer_board_gaming" + display_name = "Arcade Games" + description = "For the slackers on the station." + prereq_ids = list("comptech") + design_ids = list("arcade_battle", "arcade_orion", "slotmachine") + research_cost = 1000 + export_price = 10000 + +/datum/techweb_node/comp_recordkeeping + id = "comp_recordkeeping" + display_name = "Computerized Recordkeeping" + description = "Organized record databases and how they're used." + prereq_ids = list("comptech") + design_ids = list("secdata", "med_data", "prisonmanage", "vendor", "automated_announcement") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/telecomms + id = "telecomms" + display_name = "Telecommunications Technology" + description = "Subspace transmission technology for near-instant communications devices." + prereq_ids = list("comptech", "bluespace_basic") + research_cost = 2500 + export_price = 10000 + design_ids = list("s-receiver", "s-bus", "s-broadcaster", "s-processor", "s-hub", "s-server", "s-relay", "comm_monitor", "comm_server", + "s-ansible", "s-filter", "s-amplifier", "ntnet_relay", "s-treatment", "s-analyzer", "s-crystal", "s-transmitter") + +/datum/techweb_node/integrated_HUDs + id = "integrated_HUDs" + display_name = "Integrated HUDs" + description = "The usefulness of computerized records, projected straight onto your eyepiece!" + prereq_ids = list("comp_recordkeeping", "emp_basic") + design_ids = list("health_hud", "security_hud", "diagnostic_hud", "scigoggles") + research_cost = 2500 + export_price = 10000 + +/datum/techweb_node/NVGtech + id = "NVGtech" + display_name = "Night Vision Technology" + description = "Allows seeing in the dark without actual light!" + prereq_ids = list("integrated_HUDs", "adv_engi", "emp_adv") + design_ids = list("health_hud_night", "security_hud_night", "diagnostic_hud_night", "night_visision_goggles", "nvgmesons") + research_cost = 2500 + export_price = 10000 + ////////////////////////Medical//////////////////////// /datum/techweb_node/cloning id = "cloning" @@ -323,7 +370,7 @@ description = "Smart freezing of objects to preserve them!" prereq_ids = list("adv_engi", "emp_basic", "biotech") design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade") - research_cost = 2500 + research_cost = 2000 export_price = 10000 /datum/techweb_node/subdermal_implants @@ -357,7 +404,7 @@ id = "adv_cyber_implants" display_name = "Advanced Cybernetic Implants" description = "Upgraded and more powerful cybernetic implants." - prereq_ids = list("neural_programming", "cyber_implants") + prereq_ids = list("neural_programming", "cyber_implants","integrated_HUDs") design_ids = list("ci-toolset", "ci-surgery", "ci-reviver") research_cost = 2500 export_price = 10000 @@ -366,40 +413,11 @@ id = "combat_cyber_implants" display_name = "Combat Cybernetic Implants" description = "Military grade combat implants to improve performance." - prereq_ids = list("adv_cyber_implants") //Needs way more reqs. + prereq_ids = list("adv_cyber_implants","weaponry","NVGtech","high_efficiency") design_ids = list("ci-xray", "ci-thermals", "ci-antidrop", "ci-antistun", "ci-thrusters") research_cost = 2500 export_price = 10000 -////////////////////////generic biotech//////////////////////// -/datum/techweb_node/bio_process - id = "bio_process" - display_name = "Biological Processing" - description = "From slimes to kitchens." - prereq_ids = list("biotech") - design_ids = list("smartfridge", "gibber", "deepfryer", "monkey_recycler", "processor", "gibber", "microwave") - research_cost = 2500 - export_price = 10000 - -////////////////////////generic engineering//////////////////////// -/datum/techweb_node/high_efficiency - id = "high_efficiency" - display_name = "High Efficiency Parts" - description = "High Efficiency Parts" - prereq_ids = list("engineering", "datatheory") - design_ids = list("pico_mani", "super_matter_bin") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/adv_power - id = "adv_power" - display_name = "Advanced Power Manipulation" - description = "How to get more zap." - prereq_ids = list("engineering") - design_ids = list("smes", "super_cell", "hyper_cell", "super_capacitor", "superpacman", "mrspacman", "power_turbine", "power_turbine_console", "power_compressor") - research_cost = 2500 - export_price = 10000 - ////////////////////////Tools//////////////////////// /datum/techweb_node/basic_mining id = "basic_mining" @@ -419,15 +437,6 @@ research_cost = 2500 export_price = 10000 -/datum/techweb_node/practical_bluespace - id = "practical_bluespace" - display_name = "Applied Bluespace Research" - description = "Using bluespace to make things faster and better." - prereq_ids = list("bluespace_basic", "engineering") - design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning") - research_cost = 2500 - export_price = 10000 - /datum/techweb_node/janitor id = "janitor" display_name = "Advanced Sanitation Technology" @@ -455,22 +464,13 @@ research_cost = 2500 export_price = 10000 -/datum/techweb_node/exp_equipment - id = "exp_equipment" +/datum/techweb_node/exp_flight + id = "exp_flight" display_name = "Experimental Flight Equipment" description = "Highly advanced construction tools." design_ids = list("flightshoes", "flightpack", "flightsuit") - prereq_ids = list("adv_engi") - research_cost = 2500 - export_price = 10000 - -/datum/techweb_node/bluespace_power - id = "bluespace_power" - display_name = "Bluespace Power Technology" - description = "Even more powerful.. power!" - prereq_ids = list("adv_power", "adv_bluespace") - design_ids = list("bluespace_cell", "quadratic_capacitor") - research_cost = 2500 + prereq_ids = list("adv_engi","integrated_HUDs", "adv_power" , "high_efficiency") + research_cost = 5000 export_price = 10000 /////////////////////////weaponry tech///////////////////////// @@ -496,7 +496,7 @@ id = "electronic_weapons" display_name = "Electric Weapons" description = "Weapons using electric technology" - prereq_ids = list("weaponry", "adv_power") + prereq_ids = list("weaponry", "adv_power" , "emp_basic") design_ids = list("stunrevolver", "stunshell", "tele_shield") research_cost = 2500 export_price = 10000 @@ -506,7 +506,7 @@ display_name = "Radioactive Weaponry" description = "Weapons using radioactive technology." prereq_ids = list("adv_engi", "adv_weaponry") - design_ids = list("nuclear_gun", "decloner") + design_ids = list("nuclear_gun") research_cost = 2500 export_price = 10000 @@ -586,8 +586,8 @@ /datum/techweb_node/adv_mecha id = "adv_mecha" - display_name = "Mechanical Exosuits" - description = "Mechanized exosuits that are several magnitudes stronger and more powerful than the average human." + display_name = "Advanced Exosuits" + description = "For when you just aren't Gundam enough." prereq_ids = list("adv_robotics", "mecha") design_ids = list("mech_repair_droid") research_cost = 2500 @@ -627,7 +627,7 @@ id = "mecha_phazon" display_name = "EXOSUIT: Phazon" description = "Phazon exosuit designs" - prereq_ids = list("adv_mecha", "weaponry") + prereq_ids = list("adv_mecha", "weaponry" , "adv_bluespace") design_ids = list("phazon_chassis", "phazon_torso", "phazon_head", "phazon_left_arm", "phazon_right_arm", "phazon_left_leg", "phazon_right_leg", "phazon_main", "phazon_peri", "phazon_targ", "phazon_armor") research_cost = 2500 @@ -637,7 +637,7 @@ id = "mech_tools" display_name = "Basic Exosuit Equipment" description = "Various tools fit for basic mech units" - prereq_ids = list("mecha", "engineering") + prereq_ids = list("mecha") design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer") research_cost = 2500 export_price = 10000 @@ -646,7 +646,7 @@ id = "adv_mecha_tools" display_name = "Advanced Exosuit Equipment" description = "Tools for high level mech suits" - prereq_ids = list("adv_mecha", "mech_tools", "adv_engi") + prereq_ids = list("adv_mecha", "mech_tools") design_ids = list("mech_rcd") research_cost = 2500 export_price = 10000 @@ -662,9 +662,9 @@ /datum/techweb_node/mech_modules id = "adv_mecha_modules" - display_name = "Basic Exosuit Modules" + display_name = "Simple Exosuit Modules" description = "An advanced piece of mech weaponry" - prereq_ids = list("adv_mecha", "adv_power") + prereq_ids = list("adv_mecha", "bluespace_power") design_ids = list("mech_energy_relay", "mech_ccw_armor", "mech_proj_armor", "mech_generator_nuclear") research_cost = 2500 export_price = 10000 @@ -779,7 +779,7 @@ /datum/techweb_node/mech_lmg id = "mech_lmg" - display_name = "Exosuit Weapon (PBT \"Pacifier\" Mounted Taser)" + display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" description = "An advanced piece of mech weaponry" prereq_ids = list("adv_mecha", "adv_weaponry", "ballistic_weapons") design_ids = list("mech_lmg") @@ -800,12 +800,12 @@ id = "alientech" display_name = "Alien Technology" description = "Things used by the greys." - prereq_ids = list("base") + prereq_ids = list("biotech","engineering") boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0, /obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0, /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) - research_cost = 2500 - export_price = 10000 + research_cost = 5000 + export_price = 20000 hidden = TRUE design_ids = list("alienalloy") @@ -813,13 +813,13 @@ id = "alien_bio" display_name = "Alien Biological Tools" description = "Advanced biological tools." - prereq_ids = list("alientech", "biotech") + prereq_ids = list("alientech", "adv_biotech") design_ids = list("alien_scalpel", "alien_hemostat", "alien_retractor", "alien_saw", "alien_drill", "alien_cautery") boost_item_paths = list(/obj/item/gun/energy/alien = 0, /obj/item/scalpel/alien = 0, /obj/item/hemostat/alien = 0, /obj/item/retractor/alien = 0, /obj/item/circular_saw/alien = 0, /obj/item/cautery/alien = 0, /obj/item/surgicaldrill/alien = 0, /obj/item/screwdriver/abductor = 0, /obj/item/wrench/abductor = 0, /obj/item/crowbar/abductor = 0, /obj/item/device/multitool/abductor = 0, /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) research_cost = 2500 - export_price = 10000 + export_price = 20000 hidden = TRUE /datum/techweb_node/alien_engi @@ -831,9 +831,38 @@ /obj/item/weldingtool/abductor = 0, /obj/item/wirecutters/abductor = 0, /obj/item/circuitboard/machine/abductor = 0, /obj/item/abductor_baton = 0, /obj/item/device/abductor = 0) design_ids = list("alien_wrench", "alien_wirecutters", "alien_screwdriver", "alien_crowbar", "alien_welder", "alien_multitool") research_cost = 2500 + export_price = 20000 + hidden = TRUE + +/datum/techweb_node/syndicate_basic + id = "syndicate_basic" + display_name = "Illegal Technology" + description = "Dangerous research used to create dangerous objects." + prereq_ids = list("adv_engi", "adv_weaponry", "explosive_weapons") + design_ids = list("decloner", "borg_syndicate_module", "suppressor", "largecrossbow") + research_cost = 10000 export_price = 10000 hidden = TRUE +/datum/techweb_node/syndicate_basic/New() //Crappy way of making syndicate gear decon supported until there's another way. + . = ..() + boost_item_paths = list() + for(var/cat in GLOB.uplink_items) + var/list/l = cat + for(var/i in l) + var/datum/uplink_item/UI = i + boost_item_paths[UI.item] = 0 //allows deconning to unlock. + +//HELPERS +/proc/total_techweb_exports() + var/list/datum/techweb_node/processing = list() + for(var/i in subtypesof(/datum/techweb_node)) + processing += new i + . = 0 + for(var/i in processing) + var/datum/techweb_node/TN = i + . += TN.export_price + /proc/total_techweb_points() var/list/datum/techweb_node/processing = list() for(var/i in subtypesof(/datum/techweb_node)) @@ -842,19 +871,3 @@ for(var/i in processing) var/datum/techweb_node/TN = i . += TN.research_cost - -/* -/datum/design/borg_syndicate_module - name = "Cyborg Upgrade (Illegal Modules)" - id = "borg_syndicate_module" - construction_time = 120 - -/datum/design/suppressor - name = "Universal Suppressor" - id = "suppressor" - -/datum/design/largecrossbow - name = "Energy Crossbow" - id = "largecrossbow" - build_path = /obj/item/gun/energy/kinetic_accelerator/crossbow/large -*/ \ No newline at end of file diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 061bb0bdda..5bcbaff705 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -199,12 +199,24 @@ to_chat(SM, "You are grateful to be self aware and owe [user.real_name] a great debt. Serve [user.real_name], and assist [user.p_them()] in completing [user.p_their()] goals at any cost.") to_chat(user, "[SM] accepts [src] and suddenly becomes attentive and aware. It worked!") SM.copy_known_languages_from(user, TRUE) + after_success(user, SM) qdel(src) else to_chat(user, "[SM] looks interested for a moment, but then looks back down. Maybe you should try again later.") being_used = 0 ..() +/obj/item/slimepotion/sentience/proc/after_success(mob/living/user, mob/living/simple_animal/SM) + return + +/obj/item/slimepotion/sentience/nuclear + name = "syndicate intelligence potion" + desc = "A miraculous chemical mix that grants human like intelligence to living beings. It has been modified with Syndicate technology to also grant an internal radio implant to the target." + +/obj/item/slimepotion/sentience/nuclear/after_success(mob/living/user, mob/living/simple_animal/SM) + var/obj/item/implant/radio/imp = new(src) + imp.implant(SM, user) + /obj/item/slimepotion/transference name = "consciousness transference potion" desc = "A strange slime-based chemical that, when used, allows the user to transfer their consciousness to a lesser being." @@ -472,7 +484,7 @@ desc = "A golem's head." resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF flags_1 = ABSTRACT_1 | NODROP_1 - + /obj/item/stack/tile/bluespace name = "bluespace floor tile" singular_name = "floor tile" diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 126cff9713..4e91f95c98 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -98,7 +98,7 @@ death = FALSE icon = 'icons/obj/machines/sleeper.dmi' icon_state = "sleeper_s" - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. DON'T abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!
    " + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Continue your research as best you can, and try to keep a low profile. DON'T abandon the base without good cause. The base is rigged with explosives should the worst happen, do not let the base fall into enemy hands!" id_access_list = list(ACCESS_SYNDICATE) outfit = /datum/outfit/lavaland_syndicate assignedrole = "Lavaland Syndicate" @@ -121,7 +121,7 @@ /obj/effect/mob_spawn/human/lavaland_syndicate/comms name = "Syndicate Comms Agent" - flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" + flavour_text = "You are a syndicate agent, employed in a top secret research facility developing biological weapons. Unfortunately, your hated enemy, Nanotrasen, has begun mining in this sector. Monitor enemy activity as best you can, and try to keep a low profile. DON'T abandon the base without good cause. Use the communication equipment to provide support to any field agents, and sow disinformation to throw Nanotrasen off your trail. Do not let the base fall into enemy hands!" outfit = /datum/outfit/lavaland_syndicate/comms /datum/outfit/lavaland_syndicate/comms diff --git a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index f98162266a..7f301bf8b9 100644 --- a/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -9,7 +9,7 @@ faction = list("ashwalker") health = 200 maxHealth = 200 - loot = null + loot = list(/obj/effect/collapse) var/meat_counter = 6 /mob/living/simple_animal/hostile/spawner/lavaland/ash_walker/death() diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index ce467a1181..e5c36d09c4 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -399,7 +399,7 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) name = "burnt stone surrounding tile" icon_state = "burnt_surrounding_tile1" tile_key = "burnt_surrounding_tile" - + #undef STABLE #undef COLLAPSE_ON_CROSS #undef DESTROY_ON_CROSS diff --git a/code/modules/ruins/spaceruin_code/listeningstation.dm b/code/modules/ruins/spaceruin_code/listeningstation.dm index 0c2ec7817d..5afdc602b8 100644 --- a/code/modules/ruins/spaceruin_code/listeningstation.dm +++ b/code/modules/ruins/spaceruin_code/listeningstation.dm @@ -24,7 +24,7 @@ /obj/item/paper/fluff/ruins/listeningstation/reports/june name = "june report" - info = "Nanotrasen communications have been noticably less frequent recently. The pirate radio station I found last month has been transmitting pro-Nanotrasen propaganda. I will continue to monitor it." + info = "Nanotrasen communications have been noticeably less frequent recently. The pirate radio station I found last month has been transmitting pro-Nanotrasen propaganda. I will continue to monitor it." /obj/item/paper/fluff/ruins/listeningstation/reports/may name = "may report" diff --git a/code/modules/ruins/spaceruin_code/oldstation.dm b/code/modules/ruins/spaceruin_code/oldstation.dm index edea4fe0c1..d023760061 100644 --- a/code/modules/ruins/spaceruin_code/oldstation.dm +++ b/code/modules/ruins/spaceruin_code/oldstation.dm @@ -44,6 +44,6 @@ /obj/item/paper/fluff/ruins/oldstation/report name = "Crew Reawakening Report" info = "Artifical Program's report to surviving crewmembers.

    Crew were placed into cryostasis on March 10th, 2445.

    Crew were awoken from cryostasis around June, 2557.

    \ - SIGNIFICANT EVENTS OF NOTE
    1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radioation detectors showed no residual \ - radioation on station. Deduction, primariy detector was malfunctioning and was producing a radioation signal when there was none.

    2: A data burst from a nearby Nanotrasen Space \ + SIGNIFICANT EVENTS OF NOTE
    1: The primary radiation detectors were taken offline after 112 years due to power failure, secondary radiation detectors showed no residual \ + radiation on station. Deduction, primarily detector was malfunctioning and was producing a radiation signal when there was none.

    2: A data burst from a nearby Nanotrasen Space \ Station was recieved, this data burst contained research data that has been uploaded to our RnD labs.

    3: Unknown invasion force has occupied Delta station." diff --git a/code/modules/ruins/spaceruin_code/spacehotel.dm b/code/modules/ruins/spaceruin_code/spacehotel.dm index 5f20bafb68..69eebd8535 100644 --- a/code/modules/ruins/spaceruin_code/spacehotel.dm +++ b/code/modules/ruins/spaceruin_code/spacehotel.dm @@ -7,6 +7,6 @@ /obj/item/paper/pamphlet/ruin/spacehotel name = "hotel pamphlet" - info = "
    The Twin Nexus Hotel

    A place of Sanctuary


    Welcome to The Twin-Nexus Hotel, \[insert name here]! The loyal staff stride to their best effort to cater for the best possible experience for all space(wo)men! If you have any questions or comments, please ask one of our on-board staff for more infomation.
    " + info = "
    The Twin Nexus Hotel

    A place of Sanctuary


    Welcome to The Twin-Nexus Hotel, \[insert name here]! The loyal staff stride to their best effort to cater for the best possible experience for all space(wo)men! If you have any questions or comments, please ask one of our on-board staff for more information.
    " diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 2c0ffd3a34..7fb23c75e5 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -29,7 +29,7 @@ GLOBAL_VAR_INIT(security_level, 0) SSshuttle.emergency.modTimer(2) GLOB.security_level = SEC_LEVEL_GREEN for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z in GLOB.station_z_levels) + if(is_station_level(FA.z)) FA.update_icon() if(SEC_LEVEL_BLUE) if(GLOB.security_level < SEC_LEVEL_BLUE) @@ -43,7 +43,7 @@ GLOBAL_VAR_INIT(security_level, 0) GLOB.security_level = SEC_LEVEL_BLUE sound_to_playing_players('sound/misc/voybluealert.ogg') for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z in GLOB.station_z_levels) + if(is_station_level(FA.z)) FA.update_icon() if(SEC_LEVEL_RED) if(GLOB.security_level < SEC_LEVEL_RED) @@ -58,7 +58,7 @@ GLOBAL_VAR_INIT(security_level, 0) GLOB.security_level = SEC_LEVEL_RED sound_to_playing_players('sound/misc/voyalert.ogg') for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z in GLOB.station_z_levels) + if(is_station_level(FA.z)) FA.update_icon() for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) pod.admin_controlled = 0 @@ -72,11 +72,16 @@ GLOBAL_VAR_INIT(security_level, 0) GLOB.security_level = SEC_LEVEL_DELTA sound_to_playing_players('sound/misc/deltakalaxon.ogg') for(var/obj/machinery/firealarm/FA in GLOB.machines) - if(FA.z in GLOB.station_z_levels) + if(is_station_level(FA.z)) FA.update_icon() for(var/obj/machinery/computer/shuttle/pod/pod in GLOB.machines) pod.admin_controlled = 0 - SSblackbox.record_feedback("tally", "security_level_changes", 1, level) + if(level >= SEC_LEVEL_RED) + for(var/obj/machinery/door/D in GLOB.machines) + if(D.red_alert_access) + D.visible_message("[D] whirrs as it automatically lifts access requirements!") + playsound(D, 'sound/machines/boltsup.ogg', 50, TRUE) + SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level()) else return diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm index dd5a60ace7..318c896efd 100644 --- a/code/modules/shuttle/arrivals.dm +++ b/code/modules/shuttle/arrivals.dm @@ -137,7 +137,7 @@ hyperspace_sound(HYPERSPACE_LAUNCH, areas) //for the new guy setTimer(dockTime) -/obj/docking_port/mobile/arrivals/dock(obj/docking_port/stationary/S1, force=FALSE) +/obj/docking_port/mobile/arrivals/initiate_docking(obj/docking_port/stationary/S1, force=FALSE) var/docked = S1 == assigned_transit sound_played = FALSE if(docked) //about to launch @@ -200,5 +200,5 @@ /obj/docking_port/mobile/arrivals/vv_edit_var(var_name, var_value) switch(var_name) if("perma_docked") - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "ShA[var_value ? "s" : "g"]") + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("arrivals shuttle", "[var_value ? "stopped" : "started"]")) return ..() diff --git a/code/modules/shuttle/assault_pod.dm b/code/modules/shuttle/assault_pod.dm index 4b55a5b155..57c6e303f7 100644 --- a/code/modules/shuttle/assault_pod.dm +++ b/code/modules/shuttle/assault_pod.dm @@ -10,7 +10,7 @@ return ..() -/obj/docking_port/mobile/assault_pod/dock(obj/docking_port/stationary/S1) +/obj/docking_port/mobile/assault_pod/initiate_docking(obj/docking_port/stationary/S1) . = ..() if(!istype(S1, /obj/docking_port/stationary/transit)) playsound(get_turf(src.loc), 'sound/effects/explosion1.ogg',50,1) diff --git a/code/modules/shuttle/computer.dm b/code/modules/shuttle/computer.dm index 3c40996029..216aea306a 100644 --- a/code/modules/shuttle/computer.dm +++ b/code/modules/shuttle/computer.dm @@ -14,6 +14,7 @@ if(..(user)) return add_fingerprint(usr) + var/list/options = params2list(possible_destinations) var/obj/docking_port/mobile/M = SSshuttle.getShuttle(shuttleId) var/dat = "Status: [M ? M.getStatusText() : "*Missing*"]

    " diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm new file mode 100644 index 0000000000..eda3bf9051 --- /dev/null +++ b/code/modules/shuttle/docking.dm @@ -0,0 +1,230 @@ +//this is the main proc. It instantly moves our mobile port to stationary port new_dock +/obj/docking_port/mobile/proc/initiate_docking(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) + // Crashing this ship with NO SURVIVORS + + if(new_dock.get_docked() == src) + remove_ripples() + return DOCKING_SUCCESS + + if(!force) + if(!check_dock(new_dock)) + return DOCKING_BLOCKED + if(!canMove()) + return DOCKING_IMMOBILIZED + + var/obj/docking_port/stationary/old_dock = get_docked() + + // The turf that gets placed under where the shuttle moved from + var/underlying_turf_type = SHUTTLE_DEFAULT_TURF_TYPE + + // The baseturf that the gets assigned to the turf_type above + var/underlying_baseturf_type = SHUTTLE_DEFAULT_BASETURF_TYPE + + // The area that gets placed under where the shuttle moved from + var/underlying_area_type = SHUTTLE_DEFAULT_UNDERLYING_AREA + + // The baseturf cache is a typecache of what counts as a baseturf to be left behind + var/list/baseturf_cache + + if(old_dock) //Dock overwrites + underlying_turf_type = old_dock.turf_type + underlying_baseturf_type = old_dock.baseturf_type + underlying_area_type = old_dock.area_type + baseturf_cache = old_dock.baseturf_cache + else + baseturf_cache = typecacheof(underlying_baseturf_type) + + /************************************************************************************************************** + Both lists are associative with a turf:bitflag structure. (new_turfs bitflag space unused currently) + The bitflag contains the data for what inhabitants of that coordinate should be moved to the new location + The bitflags can be found in __DEFINES/shuttles.dm + */ + var/list/old_turfs = return_ordered_turfs(x, y, z, dir) + var/list/new_turfs = return_ordered_turfs(new_dock.x, new_dock.y, new_dock.z, new_dock.dir) + CHECK_TICK + /**************************************************************************************************************/ + + // The underlying old area is the area assumed to be under the shuttle's starting location + // If it no longer/has never existed it will be created + var/area/underlying_old_area = locate(underlying_area_type) in GLOB.sortedAreas + if(!underlying_old_area) + underlying_old_area = new underlying_area_type(null) + + var/rotation = 0 + if(new_dock.dir != dir) //Even when the dirs are the same rotation is coming out as not 0 for some reason + rotation = dir2angle(new_dock.dir)-dir2angle(dir) + if ((rotation % 90) != 0) + rotation += (rotation % 90) //diagonal rotations not allowed, round up + rotation = SIMPLIFY_DEGREES(rotation) + + if(!movement_direction) + movement_direction = turn(preferred_direction, 180) + + var/list/moved_atoms = list() //Everything not a turf that gets moved in the shuttle + var/list/areas_to_move = list() //unique assoc list of areas on turfs being moved + + remove_ripples() + + . = preflight_check(old_turfs, new_turfs, areas_to_move, rotation, underlying_turf_type, baseturf_cache) + if(.) + return + + /*******************************************Hiding turfs if necessary*******************************************/ + // TODO: Move this somewhere sane + var/list/new_hidden_turfs + if(hidden) + new_hidden_turfs = list() + for(var/i in 1 to old_turfs.len) + CHECK_TICK + var/turf/oldT = old_turfs[i] + if(old_turfs[oldT] & MOVE_TURF) + new_hidden_turfs += new_turfs[i] + SSshuttle.update_hidden_docking_ports(null, new_hidden_turfs) + /***************************************************************************************************************/ + + if(!force) + if(!check_dock(new_dock)) + return DOCKING_BLOCKED + if(!canMove()) + return DOCKING_IMMOBILIZED + + CHECK_TICK + + takeoff(old_turfs, new_turfs, moved_atoms, rotation, movement_direction, old_dock, underlying_old_area) + + CHECK_TICK + + cleanup_runway(new_dock, old_turfs, new_turfs, areas_to_move, moved_atoms, rotation, movement_direction, underlying_old_area, underlying_turf_type, underlying_baseturf_type) + + CHECK_TICK + + /*******************************************Unhiding turfs if necessary******************************************/ + if(new_hidden_turfs) + SSshuttle.update_hidden_docking_ports(hidden_turfs, null) + hidden_turfs = new_hidden_turfs + /****************************************************************************************************************/ + + check_poddoors() + new_dock.last_dock_time = world.time + setDir(new_dock.dir) + + return DOCKING_SUCCESS + +/obj/docking_port/mobile/proc/preflight_check( + list/old_turfs, + list/new_turfs, + list/areas_to_move, + rotation, + underlying_turf_type, + baseturf_cache, + ) + + for(var/i in 1 to old_turfs.len) + CHECK_TICK + var/turf/oldT = old_turfs[i] + var/turf/newT = new_turfs[i] + if(!newT) + return DOCKING_NULL_DESTINATION + if(!oldT) + return DOCKING_NULL_SOURCE + + var/area/old_area = oldT.loc + var/move_mode = old_area.beforeShuttleMove(shuttle_areas) //areas + + var/list/old_contents = oldT.contents + for(var/k in 1 to old_contents.len) + CHECK_TICK + var/atom/movable/moving_atom = old_contents[k] + if(moving_atom.loc != oldT) //fix for multi-tile objects + continue + move_mode = moving_atom.beforeShuttleMove(newT, rotation, move_mode) //atoms + + move_mode = oldT.fromShuttleMove(newT, underlying_turf_type, baseturf_cache, move_mode) //turfs + move_mode = newT.toShuttleMove(oldT, move_mode , src) //turfs + + if(move_mode & MOVE_AREA) + areas_to_move[old_area] = TRUE + + old_turfs[oldT] = move_mode + +/obj/docking_port/mobile/proc/takeoff( + list/old_turfs, + list/new_turfs, + list/moved_atoms, + rotation, + movement_direction, + old_dock, + area/underlying_old_area, + ) + + for(var/i in 1 to old_turfs.len) + var/turf/oldT = old_turfs[i] + var/turf/newT = new_turfs[i] + var/move_mode = old_turfs[oldT] + if(move_mode & MOVE_CONTENTS) + for(var/k in oldT) + var/atom/movable/moving_atom = k + if(moving_atom.loc != oldT) //fix for multi-tile objects + continue + moving_atom.onShuttleMove(newT, oldT, movement_force, movement_direction, old_dock, src) //atoms + moved_atoms[moving_atom] = oldT + + if(move_mode & MOVE_TURF) + oldT.onShuttleMove(newT, movement_force, movement_direction) //turfs + + if(move_mode & MOVE_AREA) + var/area/shuttle_area = oldT.loc + shuttle_area.onShuttleMove(oldT, newT, underlying_old_area) //areas + +/obj/docking_port/mobile/proc/cleanup_runway( + obj/docking_port/stationary/new_dock, + list/old_turfs, + list/new_turfs, + list/areas_to_move, + list/moved_atoms, + rotation, + movement_direction, + area/underlying_old_area, + underlying_turf_type, + underlying_baseturf_type, + ) + + underlying_old_area.afterShuttleMove() + + // Parallax handling + // This needs to be done before the atom after move + var/new_parallax_dir = FALSE + if(istype(new_dock, /obj/docking_port/stationary/transit)) + new_parallax_dir = preferred_direction + for(var/i in 1 to areas_to_move.len) + CHECK_TICK + var/area/internal_area = areas_to_move[i] + internal_area.afterShuttleMove(new_parallax_dir) //areas + + for(var/i in 1 to old_turfs.len) + CHECK_TICK + if(!(old_turfs[old_turfs[i]] & MOVE_TURF)) + continue + var/turf/oldT = old_turfs[i] + var/turf/newT = new_turfs[i] + newT.afterShuttleMove(oldT, underlying_turf_type, underlying_baseturf_type, rotation) //turfs + + for(var/i in 1 to moved_atoms.len) + CHECK_TICK + var/atom/movable/moved_object = moved_atoms[i] + if(QDELETED(moved_object)) + continue + var/turf/oldT = moved_atoms[moved_object] + moved_object.afterShuttleMove(oldT, movement_force, dir, preferred_direction, movement_direction, rotation)//atoms + + for(var/i in 1 to old_turfs.len) + CHECK_TICK + // Objects can block air so either turf or content changes means an air update is needed + if(!(old_turfs[old_turfs[i]] & MOVE_CONTENTS | MOVE_TURF)) + continue + var/turf/oldT = old_turfs[i] + var/turf/newT = new_turfs[i] + oldT.blocks_air = initial(oldT.blocks_air) + oldT.air_update_turf(TRUE) + newT.blocks_air = initial(newT.blocks_air) + newT.air_update_turf(TRUE) \ No newline at end of file diff --git a/code/modules/shuttle/elevator.dm b/code/modules/shuttle/elevator.dm index de0febf2bf..4584cd5958 100644 --- a/code/modules/shuttle/elevator.dm +++ b/code/modules/shuttle/elevator.dm @@ -7,4 +7,4 @@ movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) /obj/docking_port/mobile/elevator/request(obj/docking_port/stationary/S) //No transit, no ignition, just a simple up/down platform - dock(S, TRUE) \ No newline at end of file + initiate_docking(S, TRUE) \ No newline at end of file diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index c4eb16305a..03bd36b88f 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -290,7 +290,7 @@ if(SHUTTLE_CALL) if(time_left <= 0) //move emergency shuttle to station - if(dock(SSshuttle.getDock("emergency_home")) != DOCKING_SUCCESS) + if(initiate_docking(SSshuttle.getDock("emergency_home")) != DOCKING_SUCCESS) setTimer(20) return mode = SHUTTLE_DOCKED @@ -301,6 +301,7 @@ var/datum/DBQuery/query_round_shuttle_name = SSdbcore.NewQuery("UPDATE [format_table_name("round")] SET shuttle_name = '[name]' WHERE id = [GLOB.round_id]") query_round_shuttle_name.Execute() + if(SHUTTLE_DOCKED) if(time_left <= ENGINES_START_TIME) mode = SHUTTLE_IGNITING diff --git a/code/modules/shuttle/manipulator.dm b/code/modules/shuttle/manipulator.dm index 5cbd8de9c7..721ee601f7 100644 --- a/code/modules/shuttle/manipulator.dm +++ b/code/modules/shuttle/manipulator.dm @@ -222,7 +222,7 @@ existing_shuttle.jumpToNullSpace() - preview_shuttle.dock(D) + preview_shuttle.initiate_docking(D) . = preview_shuttle // Shuttle state involves a mode and a timer based on world.time, so diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index de1b0022f6..15257a62a1 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -119,7 +119,7 @@ return if(!my_port) - my_port = new(locate(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.z)) + my_port = new() my_port.name = shuttlePortName my_port.id = shuttlePortId my_port.height = shuttle_port.height @@ -128,6 +128,7 @@ my_port.dwidth = shuttle_port.dwidth my_port.hidden = shuttle_port.hidden my_port.dir = the_eye.dir + my_port.forceMove(locate(eyeobj.x - x_offset, eyeobj.y - y_offset, eyeobj.z)) if(current_user.client) current_user.client.images -= the_eye.placed_images @@ -172,7 +173,10 @@ var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj var/turf/eyeturf = get_turf(the_eye) if(!eyeturf) - return + return SHUTTLE_DOCKER_BLOCKED + if(z_lock.len && !(eyeturf.z in z_lock)) + return SHUTTLE_DOCKER_BLOCKED + . = SHUTTLE_DOCKER_LANDING_CLEAR var/list/bounds = shuttle_port.return_coords(the_eye.x - x_offset, the_eye.y - y_offset, the_eye.dir) var/list/overlappers = SSshuttle.get_dock_overlap(bounds[1], bounds[2], bounds[3], bounds[4], the_eye.z) diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index c7a77f9457..7b196b8289 100644 --- a/code/modules/shuttle/on_move.dm +++ b/code/modules/shuttle/on_move.dm @@ -7,14 +7,25 @@ All ShuttleMove procs go here // Called on every turf in the shuttle region, returns a bitflag for allowed movements of that turf // returns the new move_mode (based on the old) /turf/proc/fromShuttleMove(turf/newT, turf_type, list/baseturf_cache, move_mode) - if(!(move_mode & MOVE_AREA) || (istype(src, turf_type) && baseturf_cache[baseturf])) + if(!(move_mode & MOVE_AREA)) return move_mode + if(istype(src, turf_type)) + if(length(baseturfs)) + if(baseturf_cache[baseturfs[1]]) + return move_mode + else if(baseturf_cache[baseturfs]) + return move_mode + return move_mode | MOVE_TURF | MOVE_CONTENTS // Called from the new turf before anything has been moved // Only gets called if fromShuttleMove returns true first // returns the new move_mode (based on the old) /turf/proc/toShuttleMove(turf/oldT, move_mode, obj/docking_port/mobile/shuttle) + . = move_mode + if(!(. & MOVE_TURF)) + return + var/shuttle_dir = shuttle.dir for(var/i in contents) var/atom/movable/thing = i @@ -38,16 +49,12 @@ All ShuttleMove procs go here else qdel(thing) - return move_mode - // Called on the old turf to move the turf data /turf/proc/onShuttleMove(turf/newT, list/movement_force, move_dir) if(newT == src) // In case of in place shuttle rotation shenanigans. return //Destination turf changes - var/destination_turf_type = newT.type - newT = copyTurf(newT) - newT.baseturf = destination_turf_type + newT.CopyOnTop(src, 1, 0) // We only want a surface copy //Air stuff newT.blocks_air = TRUE newT.air_update_turf(TRUE) @@ -63,9 +70,8 @@ All ShuttleMove procs go here /turf/proc/afterShuttleMove(turf/oldT, turf_type, baseturf_type, rotation) //Dealing with the turf we left behind oldT.TransferComponents(src) - oldT.ChangeTurf(turf_type, baseturf_type, FALSE, TRUE) + oldT.ChangeTurf(turf_type, baseturf_type, CHANGETURF_IGNORE_AIR) // TODO: make this oldT.ScrapeAway() which requires templating all shuttles - // Rotate and let the air move again if(rotation) shuttleRotate(rotation) //see shuttle_rotate.dm @@ -172,10 +178,6 @@ All ShuttleMove procs go here . = ..() GLOB.cameranet.addCamera(src) -/obj/machinery/telecomms/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) - . = ..() - listening_level = z // Update listening Z, just in case you have telecomm relay on a shuttle - /obj/machinery/mech_bay_recharge_port/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir) . = ..() recharging_turf = get_step(loc, dir) @@ -187,7 +189,7 @@ All ShuttleMove procs go here /obj/machinery/computer/auxillary_base/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() - if(z == ZLEVEL_MINING) //Avoids double logging and landing on other Z-levels due to badminnery + if(is_mining_level(z)) //Avoids double logging and landing on other Z-levels due to badminnery SSblackbox.record_feedback("associative", "colonies_dropped", 1, list("x" = x, "y" = y, "z" = z)) /obj/machinery/gravity_generator/main/beforeShuttleMove(turf/newT, rotation, move_mode) @@ -209,9 +211,9 @@ All ShuttleMove procs go here /obj/machinery/atmospherics/afterShuttleMove(turf/oldT, list/movement_force, shuttle_dir, shuttle_preferred_direction, move_dir, rotation) . = ..() var/missing_nodes = FALSE - for(DEVICE_TYPE_LOOP) - if(src.nodes[I]) - var/obj/machinery/atmospherics/node = src.nodes[I] + for(var/i in 1 to device_type) + if(nodes[i]) + var/obj/machinery/atmospherics/node = nodes[i] var/connected = FALSE for(var/D in GLOB.cardinals) if(node in get_step(src, D)) @@ -219,9 +221,9 @@ All ShuttleMove procs go here break if(!connected) - nullifyNode(I) + nullifyNode(i) - if(!src.nodes[I]) + if(!nodes[i]) missing_nodes = TRUE if(missing_nodes) diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 3811fa0e4a..3b907128f3 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -159,9 +159,9 @@ /obj/docking_port/stationary name = "dock" - turf_type = /turf/open/space - baseturf_type = /turf/open/space - area_type = /area/space + turf_type = SHUTTLE_DEFAULT_TURF_TYPE + baseturf_type = SHUTTLE_DEFAULT_BASETURF_TYPE + area_type = SHUTTLE_DEFAULT_UNDERLYING_AREA var/list/baseturf_cache @@ -203,7 +203,7 @@ for(var/i in 1 to assigned_turfs.len) var/turf/T = assigned_turfs[i] if(T.type == turf_type) - T.ChangeTurf(/turf/open/space,/turf/open/space) + T.ChangeTurf(SHUTTLE_DEFAULT_TURF_TYPE, SHUTTLE_DEFAULT_BASETURF_TYPE) T.flags_1 |= UNUSED_TRANSIT_TURF_1 /obj/docking_port/stationary/transit/Destroy(force=FALSE) @@ -224,9 +224,9 @@ name = "shuttle" icon_state = "pinonclose" - area_type = /area/shuttle + area_type = SHUTTLE_DEFAULT_SHUTTLE_AREA_TYPE - var/list/area/shuttle/shuttle_areas + var/list/shuttle_areas var/timer //used as a timer (if you want time left to complete move, use timeLeft proc) var/last_timer_length @@ -391,7 +391,7 @@ mode = SHUTTLE_RECALL /obj/docking_port/mobile/proc/enterTransit() - if((SSshuttle.lockdown && (z in GLOB.station_z_levels)) || !canMove()) //emp went off, no escape + if((SSshuttle.lockdown && is_station_level(z)) || !canMove()) //emp went off, no escape mode = SHUTTLE_IDLE return previous = null @@ -400,7 +400,7 @@ var/obj/docking_port/stationary/S0 = get_docked() var/obj/docking_port/stationary/S1 = assigned_transit if(S1) - if(dock(S1) != DOCKING_SUCCESS) + if(initiate_docking(S1) != DOCKING_SUCCESS) WARNING("shuttle \"[id]\" could not enter transit space. Docked at [S0 ? S0.id : "null"]. Transit dock [S1 ? S1.id : "null"].") else previous = S0 @@ -413,9 +413,9 @@ // Not in a fancy way, it just ceases. var/obj/docking_port/stationary/current_dock = get_docked() - var/turf_type = /turf/open/space - var/baseturf_type = /turf/open/space - var/underlying_area_type = /area/space + var/turf_type = SHUTTLE_DEFAULT_TURF_TYPE + var/baseturf_type = SHUTTLE_DEFAULT_BASETURF_TYPE + var/underlying_area_type = SHUTTLE_DEFAULT_UNDERLYING_AREA // If the shuttle is docked to a stationary port, restore its normal // "empty" area and turf if(current_dock) @@ -465,7 +465,7 @@ var/turf/T1 = L1[i] if(!T1) continue - if(T0.type != T0.baseturf) + if(T0.type != T0.baseturfs) ripple_turfs += T1 return ripple_turfs @@ -474,197 +474,6 @@ for(var/obj/machinery/door/poddoor/shuttledock/pod in GLOB.airlocks) pod.check() -//this is the main proc. It instantly moves our mobile port to stationary port new_dock -/obj/docking_port/mobile/proc/dock(obj/docking_port/stationary/new_dock, movement_direction, force=FALSE) - // Crashing this ship with NO SURVIVORS - - if(new_dock.get_docked() == src) - remove_ripples() - return DOCKING_SUCCESS - - if(!force) - if(!check_dock(new_dock)) - return DOCKING_BLOCKED - if(!canMove()) - return DOCKING_IMMOBILIZED - - var/obj/docking_port/stationary/old_dock = get_docked() - - // The turf that gets placed under where the shuttle moved from - var/underlying_turf_type = /turf/open/space - - // The baseturf that the gets assigned to the turf_type above - var/underlying_baseturf_type = /turf/open/space - - // The area that gets placed under where the shuttle moved from - var/underlying_area_type = /area/space - - // The baseturf cache is a typecache of what counts as a baseturf to be left behind - var/list/baseturf_cache - if(old_dock) //Dock overwrites - if(old_dock.turf_type) - underlying_turf_type = old_dock.turf_type - if(old_dock.baseturf_type) - underlying_baseturf_type = old_dock.baseturf_type - if(old_dock.area_type) - underlying_area_type = old_dock.area_type - if(old_dock.baseturf_cache) - baseturf_cache = old_dock.baseturf_cache - if(!baseturf_cache) - baseturf_cache = typecacheof(underlying_baseturf_type) - - /************************************************************************************************************** - old_turfs is an associative list with a turf:bitflag structure - new_turfs is a standard list composed of turf instances - The bitflag contains the data for what inhabitants of that coordinate should be moved to the new location - The bitflags can be found in __DEFINES/shuttles.dm - */ - var/list/old_turfs = return_ordered_turfs(x, y, z, dir) - var/list/new_turfs = return_ordered_turfs(new_dock.x, new_dock.y, new_dock.z, new_dock.dir) - /**************************************************************************************************************/ - - // The underlying old area is the area assumed to be under the shuttle's starting location - // If it no longer/has never existed it will be created - var/area/underlying_old_area = locate(underlying_area_type) in GLOB.sortedAreas - if(!underlying_old_area) - underlying_old_area = new underlying_area_type(null) - - var/rotation = 0 - if(new_dock.dir != dir) //Even when the dirs are the same rotation is coming out as not 0 for some reason - rotation = dir2angle(new_dock.dir)-dir2angle(dir) - if ((rotation % 90) != 0) - rotation += (rotation % 90) //diagonal rotations not allowed, round up - rotation = SIMPLIFY_DEGREES(rotation) - - if(!movement_direction) - movement_direction = turn(preferred_direction, 180) - - remove_ripples() - - var/list/moved_atoms = list() //Everything not a turf that gets moved in the shuttle - var/list/areas_to_move = list() //unique assoc list of areas on turfs being moved - - CHECK_TICK - - /****************************************All beforeShuttleMove procs*****************************************/ - - for(var/i in 1 to old_turfs.len) - CHECK_TICK - var/turf/oldT = old_turfs[i] - var/turf/newT = new_turfs[i] - if(!newT) - return DOCKING_NULL_DESTINATION - if(!oldT) - return DOCKING_NULL_SOURCE - - var/area/old_area = oldT.loc - var/move_mode = old_area.beforeShuttleMove(shuttle_areas) //areas - - var/list/old_contents = oldT.contents - for(var/k in 1 to old_contents.len) - CHECK_TICK - var/atom/movable/moving_atom = old_contents[k] - if(moving_atom.loc != oldT) //fix for multi-tile objects - continue - move_mode = moving_atom.beforeShuttleMove(newT, rotation, move_mode) //atoms - - move_mode = oldT.fromShuttleMove(newT, underlying_turf_type, baseturf_cache, move_mode) //turfs - move_mode = newT.toShuttleMove(oldT, move_mode , src) //turfs - - if(move_mode & MOVE_AREA) - areas_to_move[old_area] = TRUE - - old_turfs[oldT] = move_mode - - /*******************************************Hiding turfs if necessary*******************************************/ - - var/list/new_hidden_turfs - if(hidden) - new_hidden_turfs = list() - for(var/i in 1 to old_turfs.len) - CHECK_TICK - var/turf/oldT = old_turfs[i] - if(old_turfs[oldT] & MOVE_TURF) - new_hidden_turfs += new_turfs[i] - SSshuttle.update_hidden_docking_ports(null, new_hidden_turfs) - - /*******************************************All onShuttleMove procs******************************************/ - - CHECK_TICK - - for(var/i in 1 to old_turfs.len) - var/turf/oldT = old_turfs[i] - var/turf/newT = new_turfs[i] - var/move_mode = old_turfs[oldT] - if(move_mode & MOVE_CONTENTS) - for(var/k in oldT) - var/atom/movable/moving_atom = k - if(moving_atom.loc != oldT) //fix for multi-tile objects - continue - moving_atom.onShuttleMove(newT, oldT, movement_force, movement_direction, old_dock, src) //atoms - moved_atoms[moving_atom] = oldT - - if(move_mode & MOVE_TURF) - oldT.onShuttleMove(newT, movement_force, movement_direction) //turfs - - if(move_mode & MOVE_AREA) - var/area/shuttle_area = oldT.loc - shuttle_area.onShuttleMove(oldT, newT, underlying_old_area) //areas - - /******************************************All afterShuttleMove procs****************************************/ - - underlying_old_area.afterShuttleMove() - - // Parallax handling - // This needs to be done before the atom after move - var/new_parallax_dir = FALSE - if(istype(new_dock, /obj/docking_port/stationary/transit)) - new_parallax_dir = preferred_direction - for(var/i in 1 to areas_to_move.len) - CHECK_TICK - var/area/internal_area = areas_to_move[i] - internal_area.afterShuttleMove(new_parallax_dir) //areas - - for(var/i in 1 to old_turfs.len) - CHECK_TICK - if(!(old_turfs[old_turfs[i]] & MOVE_TURF)) - continue - var/turf/oldT = old_turfs[i] - var/turf/newT = new_turfs[i] - newT.afterShuttleMove(oldT, underlying_turf_type, underlying_baseturf_type, rotation) //turfs - - for(var/i in 1 to moved_atoms.len) - CHECK_TICK - var/atom/movable/moved_object = moved_atoms[i] - if(QDELETED(moved_object)) - continue - var/turf/oldT = moved_atoms[moved_object] - moved_object.afterShuttleMove(oldT, movement_force, dir, preferred_direction, movement_direction, rotation)//atoms - - for(var/i in 1 to old_turfs.len) - CHECK_TICK - // Objects can block air so either turf or content changes means an air update is needed - if(!(old_turfs[old_turfs[i]] & MOVE_CONTENTS | MOVE_TURF)) - continue - var/turf/oldT = old_turfs[i] - var/turf/newT = new_turfs[i] - oldT.blocks_air = initial(oldT.blocks_air) - oldT.air_update_turf(TRUE) - newT.blocks_air = initial(newT.blocks_air) - newT.air_update_turf(TRUE) - - /*******************************************Unhiding turfs if necessary******************************************/ - - if(new_hidden_turfs) - SSshuttle.update_hidden_docking_ports(hidden_turfs, null) - hidden_turfs = new_hidden_turfs - - check_poddoors() - new_dock.last_dock_time = world.time - setDir(new_dock.dir) - - return DOCKING_SUCCESS - /obj/docking_port/mobile/proc/findRoundstartDock() return SSshuttle.getDock(roundstart_move) @@ -674,7 +483,7 @@ /obj/docking_port/mobile/proc/dock_id(id) var/port = SSshuttle.getDock(id) if(port) - . = dock(port) + . = initiate_docking(port) else . = null @@ -694,9 +503,9 @@ // then try again switch(mode) if(SHUTTLE_CALL) - var/error = dock(destination, preferred_direction) + var/error = initiate_docking(destination, preferred_direction) if(error && error & (DOCKING_NULL_DESTINATION | DOCKING_NULL_SOURCE)) - var/msg = "A mobile dock in transit exited dock() with an error. This is most likely a mapping problem: Error: [error], ([src]) ([previous])" + var/msg = "A mobile dock in transit exited initiate_docking() with an error. This is most likely a mapping problem: Error: [error], ([src]) ([previous])" WARNING(msg) message_admins(msg) mode = SHUTTLE_IDLE @@ -705,7 +514,7 @@ setTimer(20) return if(SHUTTLE_RECALL) - if(dock(previous) != DOCKING_SUCCESS) + if(initiate_docking(previous) != DOCKING_SUCCESS) setTimer(20) return if(SHUTTLE_IGNITING) @@ -933,10 +742,8 @@ /obj/docking_port/mobile/pod/on_emergency_dock() if(launch_status == ENDGAME_LAUNCHED) - dock(SSshuttle.getDock("[id]_away")) //Escape pods dock at centcom + initiate_docking(SSshuttle.getDock("[id]_away")) //Escape pods dock at centcom mode = SHUTTLE_ENDGAME /obj/docking_port/mobile/emergency/on_emergency_dock() - return - -#undef DOCKING_PORT_HIGHLIGHT + return \ No newline at end of file diff --git a/code/modules/shuttle/shuttle_rotate.dm b/code/modules/shuttle/shuttle_rotate.dm index 49c7396dba..cc69fb5d15 100644 --- a/code/modules/shuttle/shuttle_rotate.dm +++ b/code/modules/shuttle/shuttle_rotate.dm @@ -84,17 +84,17 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate /obj/machinery/atmospherics/shuttleRotate(rotation, params) var/list/real_node_connect = getNodeConnects() - for(DEVICE_TYPE_LOOP) - real_node_connect[I] = angle2dir(rotation+dir2angle(real_node_connect[I])) + for(var/i in 1 to device_type) + real_node_connect[i] = angle2dir(rotation+dir2angle(real_node_connect[i])) . = ..() SetInitDirections() var/list/supposed_node_connect = getNodeConnects() var/list/nodes_copy = nodes.Copy() - for(DEVICE_TYPE_LOOP) - var/new_pos = supposed_node_connect.Find(real_node_connect[I]) - nodes[new_pos] = nodes_copy[I] + for(var/i in 1 to device_type) + var/new_pos = supposed_node_connect.Find(real_node_connect[i]) + nodes[new_pos] = nodes_copy[i] //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gateway/shuttleRotate(rotation, params) @@ -104,4 +104,10 @@ If ever any of these procs are useful for non-shuttles, rename it to proc/rotate //prevents shuttles attempting to rotate this since it messes up sprites /obj/machinery/gravity_generator/shuttleRotate(rotation, params) params = NONE - return ..() \ No newline at end of file + return ..() + +/obj/machinery/door/airlock/shuttleRotate(rotation, params) + . = ..() + if(cyclelinkeddir) + cyclelinkeddir = angle2dir(rotation+dir2angle(cyclelinkeddir)) + cyclelinkairlock() diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 579397cc4b..eacacef933 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( SSshuttle.supply = src /obj/docking_port/mobile/supply/canMove() - if(z in GLOB.station_z_levels) + if(is_station_level(z)) return check_blacklist(shuttle_areas) return ..() @@ -64,7 +64,7 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( return 2 return ..() -/obj/docking_port/mobile/supply/dock() +/obj/docking_port/mobile/supply/initiate_docking() if(getDockedId() == "supply_away") // Buy when we leave home. buy() . = ..() // Fly/enter transit. diff --git a/code/modules/shuttle/syndicate.dm b/code/modules/shuttle/syndicate.dm index 283ac0f35c..410935db5a 100644 --- a/code/modules/shuttle/syndicate.dm +++ b/code/modules/shuttle/syndicate.dm @@ -40,7 +40,7 @@ /obj/machinery/computer/shuttle/syndicate/drop_pod/Topic(href, href_list) if(href_list["move"]) - if(z != ZLEVEL_CENTCOM) + if(!is_centcom_level(z)) to_chat(usr, "Pods are one way!") return 0 ..() @@ -56,8 +56,8 @@ shuttlePortName = "custom location" jumpto_ports = list("syndicate_ne" = 1, "syndicate_nw" = 1, "syndicate_n" = 1, "syndicate_se" = 1, "syndicate_sw" = 1, "syndicate_s" = 1) view_range = 13 - x_offset = -4 - y_offset = -2 + x_offset = -7 + y_offset = -1 see_hidden = TRUE #undef SYNDICATE_CHALLENGE_TIMER \ No newline at end of file diff --git a/code/modules/shuttle/white_ship.dm b/code/modules/shuttle/white_ship.dm index 46aa4b6576..b6d9bda8b2 100644 --- a/code/modules/shuttle/white_ship.dm +++ b/code/modules/shuttle/white_ship.dm @@ -17,3 +17,4 @@ x_offset = -6 y_offset = -10 designate_time = 100 + diff --git a/code/modules/space_transition/space_transition.dm b/code/modules/space_transition/space_transition.dm index 2a8be8a761..edcad9b620 100644 --- a/code/modules/space_transition/space_transition.dm +++ b/code/modules/space_transition/space_transition.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(z_levels_list) neigbours[A] = src /datum/space_level/proc/set_neigbours(list/L) - for(var/datum/point/P in L) + for(var/datum/space_transition_point/P in L) if(P.x == xi) if(P.y == yi+1) neigbours[TEXT_NORTH] = P.spl @@ -35,13 +35,13 @@ GLOBAL_LIST_EMPTY(z_levels_list) neigbours[TEXT_WEST] = P.spl P.spl.neigbours[TEXT_EAST] = src -/datum/point //this is explicitly utilitarian datum type made specially for the space map generation and are absolutely unusable for anything else +/datum/space_transition_point //this is explicitly utilitarian datum type made specially for the space map generation and are absolutely unusable for anything else var/list/neigbours = list() var/x var/y var/datum/space_level/spl -/datum/point/New(nx, ny, list/point_grid) +/datum/space_transition_point/New(nx, ny, list/point_grid) if(!point_grid) qdel(src) return @@ -55,7 +55,7 @@ GLOBAL_LIST_EMPTY(z_levels_list) return point_grid[x][y] = src -/datum/point/proc/set_neigbours(list/grid) +/datum/space_transition_point/proc/set_neigbours(list/grid) var/max_X = grid.len var/list/max_Y = grid[1] max_Y = max_Y.len @@ -86,13 +86,13 @@ GLOBAL_LIST_EMPTY(z_levels_list) k++ var/list/point_grid[conf_set_len*2+1][conf_set_len*2+1] var/list/grid = list() - var/datum/point/P + var/datum/space_transition_point/P for(var/i = 1, i<=conf_set_len*2+1, i++) for(var/j = 1, j<=conf_set_len*2+1, j++) - P = new/datum/point(i,j, point_grid) + P = new/datum/space_transition_point(i,j, point_grid) point_grid[i][j] = P grid.Add(P) - for(var/datum/point/pnt in grid) + for(var/datum/space_transition_point/pnt in grid) pnt.set_neigbours(point_grid) P = point_grid[conf_set_len+1][conf_set_len+1] var/list/possible_points = list() diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 85956b0c6d..ae317ad861 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -13,11 +13,12 @@ var/action_icon = 'icons/mob/actions/actions_spells.dmi' var/action_icon_state = "spell_default" var/action_background_icon_state = "bg_spell" + var/base_action = /datum/action/spell_action /obj/effect/proc_holder/Initialize() . = ..() if(has_action) - action = new(src) + action = new base_action(src) /obj/effect/proc_holder/proc/on_gain(mob/living/user) return @@ -103,6 +104,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th pass_flags = PASSTABLE density = FALSE opacity = 0 + base_action = /datum/action/spell_action/spell var/school = "evocation" //not relevant at now, but may be important later if there are changes to how spells work. the ones I used for now will probably be changed... maybe spell presets? lacking flexibility but with some other benefit? @@ -149,7 +151,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th action_icon = 'icons/mob/actions/actions_spells.dmi' action_icon_state = "spell_default" action_background_icon_state = "bg_spell" - datum/action/spell_action/spell/action /obj/effect/proc_holder/spell/proc/cast_check(skipcharge = 0,mob/user = usr) //checks if the spell can be cast based on its settings; skipcharge is used when an additional cast_check is called inside the spell @@ -162,7 +163,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th return 0 var/turf/T = get_turf(user) - if(T.z == ZLEVEL_CENTCOM && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel + if(is_centcom_level(T.z) && !centcom_cancast) //Certain spells are not allowed on the centcom zlevel to_chat(user, "You can't cast this spell here.") return 0 @@ -189,7 +190,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/mob/living/carbon/human/H = user - if((invocation_type == "whisper" || invocation_type == "shout") && H.is_muzzled()) + if((invocation_type == "whisper" || invocation_type == "shout") && !H.can_speak_vocal()) to_chat(user, "You can't get the words out!") return 0 @@ -255,7 +256,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th /obj/effect/proc_holder/spell/Initialize() . = ..() - action = new(src) START_PROCESSING(SSfastprocess, src) still_recharging_msg = "[name] is still recharging." diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index ca6a534ee0..69a8ab07b7 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -209,12 +209,14 @@ to_chat(target, "A freezing darkness surrounds you...") target.playsound_local(get_turf(target), 'sound/hallucinations/i_see_you1.ogg', 50, 1) user.playsound_local(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) - target.adjust_blindness(5) + target.become_blind(ABYSSAL_GAZE_BLIND) addtimer(CALLBACK(src, .proc/cure_blindness, target), 40) target.bodytemperature -= 200 /obj/effect/proc_holder/spell/targeted/abyssal_gaze/proc/cure_blindness(mob/target) - target.adjust_blindness(-5) + if(isliving(target)) + var/mob/living/L = target + L.cure_blind(ABYSSAL_GAZE_BLIND) /obj/effect/proc_holder/spell/targeted/dominate name = "Dominate" diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm index 733d0a3270..e9b8a458a8 100644 --- a/code/modules/spells/spell_types/devil.dm +++ b/code/modules/spells/spell_types/devil.dm @@ -118,14 +118,15 @@ revert_cast() return ..() else - user.notransform = 1 + user.notransform = TRUE user.fakefire() to_chat(src, "You begin to phase back into sinful flames.") if(do_mob(user,user,150)) user.infernalphaseout() else to_chat(user, "You must remain still while exiting.") - user.ExtinguishMob() + user.notransform = FALSE + user.fakefireextinguish() start_recharge() return revert_cast() diff --git a/code/modules/spells/spell_types/dumbfire.dm b/code/modules/spells/spell_types/dumbfire.dm index bb6e4480f5..f86c29fdc2 100644 --- a/code/modules/spells/spell_types/dumbfire.dm +++ b/code/modules/spells/spell_types/dumbfire.dm @@ -1,41 +1,41 @@ //NEEDS MAJOR CODE CLEANUP -/obj/effect/proc_holder/spell/dumbfire - - var/projectile_type = "" - var/activate_on_collision = 1 - - var/proj_icon = 'icons/obj/projectiles.dmi' - var/proj_icon_state = "spell" - var/proj_name = "a spell projectile" - - var/proj_trail = 0 //if it leaves a trail - var/proj_trail_lifespan = 0 //deciseconds - var/proj_trail_icon = 'icons/obj/wizard.dmi' - var/proj_trail_icon_state = "trail" - - var/proj_type = "/obj/effect/proc_holder/spell" //IMPORTANT use only subtypes of this - - var/proj_insubstantial = 0 //if it can pass through dense objects or not - var/proj_trigger_range = 1 //the range from target at which the projectile triggers cast(target) - - var/proj_lifespan = 100 //in deciseconds * proj_step_delay - var/proj_step_delay = 1 //lower = faster - -/obj/effect/proc_holder/spell/dumbfire/choose_targets(mob/user = usr) - - var/turf/T = get_turf(user) - for(var/i = 1; i < range; i++) - var/turf/new_turf = get_step(T, user.dir) - if(new_turf.density) - break - T = new_turf - perform(list(T),user = user) - -/obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr) - playMagSound() - for(var/turf/target in targets) +/obj/effect/proc_holder/spell/dumbfire + + var/projectile_type = "" + var/activate_on_collision = 1 + + var/proj_icon = 'icons/obj/projectiles.dmi' + var/proj_icon_state = "spell" + var/proj_name = "a spell projectile" + + var/proj_trail = 0 //if it leaves a trail + var/proj_trail_lifespan = 0 //deciseconds + var/proj_trail_icon = 'icons/obj/wizard.dmi' + var/proj_trail_icon_state = "trail" + + var/proj_type = "/obj/effect/proc_holder/spell" //IMPORTANT use only subtypes of this + + var/proj_insubstantial = 0 //if it can pass through dense objects or not + var/proj_trigger_range = 1 //the range from target at which the projectile triggers cast(target) + + var/proj_lifespan = 100 //in deciseconds * proj_step_delay + var/proj_step_delay = 1 //lower = faster + +/obj/effect/proc_holder/spell/dumbfire/choose_targets(mob/user = usr) + + var/turf/T = get_turf(user) + for(var/i = 1; i < range; i++) + var/turf/new_turf = get_step(T, user.dir) + if(new_turf.density) + break + T = new_turf + perform(list(T),user = user) + +/obj/effect/proc_holder/spell/dumbfire/cast(list/targets, mob/user = usr) + playMagSound() + for(var/turf/target in targets) launch_at(target, user) /obj/effect/proc_holder/spell/dumbfire/proc/launch_at(turf/target, mob/user) diff --git a/code/modules/spells/spell_types/genetic.dm b/code/modules/spells/spell_types/genetic.dm index c6945dab50..c43dacac46 100644 --- a/code/modules/spells/spell_types/genetic.dm +++ b/code/modules/spells/spell_types/genetic.dm @@ -1,32 +1,34 @@ -/obj/effect/proc_holder/spell/targeted/genetic - name = "Genetic" - desc = "This spell inflicts a set of mutations and disabilities upon the target." - - var/disabilities = 0 //bits - var/list/mutations = list() //mutation strings - var/duration = 100 //deciseconds - /* - Disabilities - 1st bit - ? - 2nd bit - ? - 3rd bit - ? - 4th bit - ? - 5th bit - ? - 6th bit - ? - */ - -/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets,mob/user = usr) - playMagSound() - for(var/mob/living/carbon/target in targets) - if(!target.dna) - continue - for(var/A in mutations) - target.dna.add_mutation(A) - target.disabilities |= disabilities +/obj/effect/proc_holder/spell/targeted/genetic + name = "Genetic" + desc = "This spell inflicts a set of mutations and disabilities upon the target." + + var/list/disabilities = list() //disabilities + var/list/mutations = list() //mutation strings + var/duration = 100 //deciseconds + /* + Disabilities + 1st bit - ? + 2nd bit - ? + 3rd bit - ? + 4th bit - ? + 5th bit - ? + 6th bit - ? + */ + +/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets,mob/user = usr) + playMagSound() + for(var/mob/living/carbon/target in targets) + if(!target.dna) + continue + for(var/A in mutations) + target.dna.add_mutation(A) + for(var/A in disabilities) + target.add_disability(A, GENETICS_SPELL) addtimer(CALLBACK(src, .proc/remove, target), duration) /obj/effect/proc_holder/spell/targeted/genetic/proc/remove(mob/living/carbon/target) if(!QDELETED(target)) for(var/A in mutations) target.dna.remove_mutation(A) - target.disabilities &= ~disabilities + for(var/A in disabilities) + target.remove_disability(A, GENETICS_SPELL) \ No newline at end of file diff --git a/code/modules/spells/spell_types/knock.dm b/code/modules/spells/spell_types/knock.dm index bbb2b3877f..7179bed031 100644 --- a/code/modules/spells/spell_types/knock.dm +++ b/code/modules/spells/spell_types/knock.dm @@ -1,31 +1,31 @@ -/obj/effect/proc_holder/spell/aoe_turf/knock - name = "Knock" - desc = "This spell opens nearby doors and does not require wizard garb." - - school = "transmutation" - charge_max = 100 - clothes_req = 0 - invocation = "AULIE OXIN FIERA" - invocation_type = "whisper" - range = 3 - cooldown_min = 20 //20 deciseconds reduction per rank - - action_icon_state = "knock" - -/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets,mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/knock + name = "Knock" + desc = "This spell opens nearby doors and does not require wizard garb." + + school = "transmutation" + charge_max = 100 + clothes_req = 0 + invocation = "AULIE OXIN FIERA" + invocation_type = "whisper" + range = 3 + cooldown_min = 20 //20 deciseconds reduction per rank + + action_icon_state = "knock" + +/obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets,mob/user = usr) SEND_SOUND(user, sound('sound/magic/knock.ogg')) - for(var/turf/T in targets) - for(var/obj/machinery/door/door in T.contents) - INVOKE_ASYNC(src, .proc/open_door, door) - for(var/obj/structure/closet/C in T.contents) - INVOKE_ASYNC(src, .proc/open_closet, C) - -/obj/effect/proc_holder/spell/aoe_turf/knock/proc/open_door(var/obj/machinery/door/door) - if(istype(door, /obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = door - A.locked = FALSE - door.open() - -/obj/effect/proc_holder/spell/aoe_turf/knock/proc/open_closet(var/obj/structure/closet/C) - C.locked = FALSE - C.open() + for(var/turf/T in targets) + for(var/obj/machinery/door/door in T.contents) + INVOKE_ASYNC(src, .proc/open_door, door) + for(var/obj/structure/closet/C in T.contents) + INVOKE_ASYNC(src, .proc/open_closet, C) + +/obj/effect/proc_holder/spell/aoe_turf/knock/proc/open_door(var/obj/machinery/door/door) + if(istype(door, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = door + A.locked = FALSE + door.open() + +/obj/effect/proc_holder/spell/aoe_turf/knock/proc/open_closet(var/obj/structure/closet/C) + C.locked = FALSE + C.open() diff --git a/code/modules/spells/spell_types/mime.dm b/code/modules/spells/spell_types/mime.dm index 4e5c0605e2..28960fce31 100644 --- a/code/modules/spells/spell_types/mime.dm +++ b/code/modules/spells/spell_types/mime.dm @@ -125,146 +125,6 @@ ..() -/obj/item/spellbook/oneuse/mimery_blockade - spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime - spellname = "" - name = "Guide to Advanced Mimery Vol 1" - desc = "The pages don't make any sound when turned." - icon_state ="bookmime" - -/obj/item/spellbook/oneuse/mimery_guns - spell = /obj/effect/proc_holder/spell/aimed/finger_guns - spellname = "" - name = "Guide to Advanced Mimery Vol 2" - desc = "There aren't any words written..." - icon_state ="bookmime" -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall - name = "Invisible Wall" - desc = "The mime's performance transmutates into physical reality." - school = "mime" - panel = "Mime" - summon_type = list(/obj/effect/forcefield/mime) - invocation_type = "emote" - invocation_emote_self = "You form a wall in front of yourself." - summon_lifespan = 300 - charge_max = 300 - clothes_req = 0 - range = 0 - cast_sound = null - human_req = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall/Click() - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] looks as if a wall is in front of [usr.p_them()]." - else - invocation_type ="none" - ..() - - -/obj/effect/proc_holder/spell/targeted/mime/speak - name = "Speech" - desc = "Make or break a vow of silence." - school = "mime" - panel = "Mime" - clothes_req = 0 - human_req = 1 - charge_max = 3000 - range = -1 - include_user = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/targeted/mime/speak/Click() - if(!usr) - return - if(!ishuman(usr)) - return - var/mob/living/carbon/human/H = usr - if(H.mind.miming) - still_recharging_msg = "You can't break your vow of silence that fast!" - else - still_recharging_msg = "You'll have to wait before you can give your vow of silence again!" - ..() - -/obj/effect/proc_holder/spell/targeted/mime/speak/cast(list/targets,mob/user = usr) - for(var/mob/living/carbon/human/H in targets) - H.mind.miming=!H.mind.miming - if(H.mind.miming) - to_chat(H, "You make a vow of silence.") - else - to_chat(H, "You break your vow of silence.") - -// These spells can only be gotten from the "Guide for Advanced Mimery series" for Mime Traitors. - -/obj/effect/proc_holder/spell/targeted/forcewall/mime - name = "Invisible Blockade" - desc = "Form an invisible three tile wide blockade." - wall_type = /obj/effect/forcefield/mime/advanced - invocation_type = "emote" - invocation_emote_self = "You form a blockade in front of yourself." - charge_max = 600 - sound = null - clothes_req = 0 - range = -1 - include_user = 1 - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - -/obj/effect/proc_holder/spell/targeted/forcewall/mime/Click() - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] looks as if a blockade is in front of [usr.p_them()]." - else - invocation_type ="none" - ..() - -/obj/effect/proc_holder/spell/aimed/finger_guns - name = "Finger Guns" - desc = "Shoot a mimed bullet from your fingers that stuns and does some damage." - school = "mime" - panel = "Mime" - charge_max = 300 - clothes_req = 0 - invocation_type = "emote" - invocation_emote_self = "You fire your finger gun!" - range = 20 - projectile_type = /obj/item/projectile/bullet/mime - projectile_amount = 3 - sound = null - active_msg = "You draw your fingers!" - deactive_msg = "You put your fingers at ease. Another time." - active = FALSE - - action_icon_state = "mime" - action_background_icon_state = "bg_mime" - base_icon_state = "mime" - - -/obj/effect/proc_holder/spell/aimed/finger_guns/Click() - var/mob/living/carbon/human/owner = usr - if(owner.incapacitated()) - to_chat(owner, "You can't properly point your fingers while incapacitated.") - return - if(usr && usr.mind) - if(!usr.mind.miming) - to_chat(usr, "You must dedicate yourself to silence first.") - return - invocation = "[usr.real_name] fires [usr.p_their()] finger gun!" - else - invocation_type ="none" - ..() - - /obj/item/spellbook/oneuse/mimery_blockade spell = /obj/effect/proc_holder/spell/targeted/forcewall/mime spellname = "" diff --git a/code/modules/spells/spell_types/mind_transfer.dm b/code/modules/spells/spell_types/mind_transfer.dm index 023af548d0..8a646d792f 100644 --- a/code/modules/spells/spell_types/mind_transfer.dm +++ b/code/modules/spells/spell_types/mind_transfer.dm @@ -1,79 +1,79 @@ -/obj/effect/proc_holder/spell/targeted/mind_transfer - name = "Mind Transfer" - desc = "This spell allows the user to switch bodies with a target." - - school = "transmutation" - charge_max = 600 - clothes_req = 0 - invocation = "GIN'YU CAPAN" - invocation_type = "whisper" - range = 1 - cooldown_min = 200 //100 deciseconds reduction per rank - var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell - var/unconscious_amount_caster = 400 //how much the caster is stunned for after the spell - var/unconscious_amount_victim = 400 //how much the victim is stunned for after the spell - - action_icon_state = "mindswap" - -/* -Urist: I don't feel like figuring out how you store object spells so I'm leaving this for you to do. +/obj/effect/proc_holder/spell/targeted/mind_transfer + name = "Mind Transfer" + desc = "This spell allows the user to switch bodies with a target." + + school = "transmutation" + charge_max = 600 + clothes_req = 0 + invocation = "GIN'YU CAPAN" + invocation_type = "whisper" + range = 1 + cooldown_min = 200 //100 deciseconds reduction per rank + var/list/protected_roles = list("Wizard","Changeling","Cultist") //which roles are immune to the spell + var/unconscious_amount_caster = 400 //how much the caster is stunned for after the spell + var/unconscious_amount_victim = 400 //how much the victim is stunned for after the spell + + action_icon_state = "mindswap" + +/* +Urist: I don't feel like figuring out how you store object spells so I'm leaving this for you to do. Make sure spells that are removed from spell_list are actually removed and deleted when mind transferring. -Also, you never added distance checking after target is selected. I've went ahead and did that. -*/ -/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/living/user = usr, distanceoverride) - if(!targets.len) - to_chat(user, "No mind found!") - return - - if(targets.len > 1) - to_chat(user, "Too many minds! You're not a hive damnit!") - return - - var/mob/living/target = targets[1] - - var/t_He = target.p_they(TRUE) - var/t_is = target.p_are() - - if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it. - to_chat(user, "[t_He] [t_is] too far away!") - return - - if(ismegafauna(target)) - to_chat(user, "This creature is too powerful to control!") - return - - if(target.stat == DEAD) - to_chat(user, "You don't particularly want to be dead!") - return - - if(!target.key || !target.mind) - to_chat(user, "[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.") - return - - if(user.suiciding) - to_chat(user, "You're killing yourself! You can't concentrate enough to do this!") - return - - if((target.mind.special_role in protected_roles) || cmptext(copytext(target.key,1,2),"@")) - to_chat(user, "[target.p_their(TRUE)] mind is resisting your spell!") - return - - var/mob/living/victim = target//The target of the spell whos body will be transferred to. - var/mob/living/caster = user//The wizard/whomever doing the body transferring. - - //MIND TRANSFER BEGIN - var/mob/dead/observer/ghost = victim.ghostize(0) - caster.mind.transfer_to(victim) - - ghost.mind.transfer_to(caster) - if(ghost.key) - caster.key = ghost.key //have to transfer the key since the mind was not active - qdel(ghost) - - //MIND TRANSFER END - - //Here we knock both mobs out for a time. - caster.Unconscious(unconscious_amount_caster) - victim.Unconscious(unconscious_amount_victim) +Also, you never added distance checking after target is selected. I've went ahead and did that. +*/ +/obj/effect/proc_holder/spell/targeted/mind_transfer/cast(list/targets, mob/living/user = usr, distanceoverride) + if(!targets.len) + to_chat(user, "No mind found!") + return + + if(targets.len > 1) + to_chat(user, "Too many minds! You're not a hive damnit!") + return + + var/mob/living/target = targets[1] + + var/t_He = target.p_they(TRUE) + var/t_is = target.p_are() + + if(!(target in oview(range)) && !distanceoverride)//If they are not in overview after selection. Do note that !() is necessary for in to work because ! takes precedence over it. + to_chat(user, "[t_He] [t_is] too far away!") + return + + if(ismegafauna(target)) + to_chat(user, "This creature is too powerful to control!") + return + + if(target.stat == DEAD) + to_chat(user, "You don't particularly want to be dead!") + return + + if(!target.key || !target.mind) + to_chat(user, "[t_He] appear[target.p_s()] to be catatonic! Not even magic can affect [target.p_their()] vacant mind.") + return + + if(user.suiciding) + to_chat(user, "You're killing yourself! You can't concentrate enough to do this!") + return + + if((target.mind.special_role in protected_roles) || cmptext(copytext(target.key,1,2),"@")) + to_chat(user, "[target.p_their(TRUE)] mind is resisting your spell!") + return + + var/mob/living/victim = target//The target of the spell whos body will be transferred to. + var/mob/living/caster = user//The wizard/whomever doing the body transferring. + + //MIND TRANSFER BEGIN + var/mob/dead/observer/ghost = victim.ghostize(0) + caster.mind.transfer_to(victim) + + ghost.mind.transfer_to(caster) + if(ghost.key) + caster.key = ghost.key //have to transfer the key since the mind was not active + qdel(ghost) + + //MIND TRANSFER END + + //Here we knock both mobs out for a time. + caster.Unconscious(unconscious_amount_caster) + victim.Unconscious(unconscious_amount_victim) SEND_SOUND(caster, sound('sound/magic/mandswap.ogg')) SEND_SOUND(victim, sound('sound/magic/mandswap.ogg'))// only the caster and victim hear the sounds, that way no one knows for sure if the swap happened diff --git a/code/modules/spells/spell_types/projectile.dm b/code/modules/spells/spell_types/projectile.dm index 19e44ffa83..4bbd9ac4a6 100644 --- a/code/modules/spells/spell_types/projectile.dm +++ b/code/modules/spells/spell_types/projectile.dm @@ -1,33 +1,33 @@ //NEEDS MAJOR CODE CLEANUP. -/obj/effect/proc_holder/spell/targeted/projectile - name = "Projectile" - desc = "This spell summons projectiles which try to hit the targets." - - var/proj_icon = 'icons/obj/projectiles.dmi' - var/proj_icon_state = "spell" - var/proj_name = "a spell projectile" - - var/proj_trail = 0 //if it leaves a trail - var/proj_trail_lifespan = 0 //deciseconds - var/proj_trail_icon = 'icons/obj/wizard.dmi' - var/proj_trail_icon_state = "trail" - - - var/proj_type = "/obj/effect/proc_holder/spell/targeted" //IMPORTANT use only subtypes of this - - var/proj_lingering = 0 //if it lingers or disappears upon hitting an obstacle - var/proj_homing = 1 //if it follows the target - var/proj_insubstantial = 0 //if it can pass through dense objects or not - var/proj_trigger_range = 0 //the range from target at which the projectile triggers cast(target) - - var/proj_lifespan = 15 //in deciseconds * proj_step_delay - var/proj_step_delay = 1 //lower = faster - -/obj/effect/proc_holder/spell/targeted/projectile/cast(list/targets, mob/user = usr) - playMagSound() - for(var/mob/living/target in targets) +/obj/effect/proc_holder/spell/targeted/projectile + name = "Projectile" + desc = "This spell summons projectiles which try to hit the targets." + + var/proj_icon = 'icons/obj/projectiles.dmi' + var/proj_icon_state = "spell" + var/proj_name = "a spell projectile" + + var/proj_trail = 0 //if it leaves a trail + var/proj_trail_lifespan = 0 //deciseconds + var/proj_trail_icon = 'icons/obj/wizard.dmi' + var/proj_trail_icon_state = "trail" + + + var/proj_type = "/obj/effect/proc_holder/spell/targeted" //IMPORTANT use only subtypes of this + + var/proj_lingering = 0 //if it lingers or disappears upon hitting an obstacle + var/proj_homing = 1 //if it follows the target + var/proj_insubstantial = 0 //if it can pass through dense objects or not + var/proj_trigger_range = 0 //the range from target at which the projectile triggers cast(target) + + var/proj_lifespan = 15 //in deciseconds * proj_step_delay + var/proj_step_delay = 1 //lower = faster + +/obj/effect/proc_holder/spell/targeted/projectile/cast(list/targets, mob/user = usr) + playMagSound() + for(var/mob/living/target in targets) launch(target, user) /obj/effect/proc_holder/spell/targeted/projectile/proc/launch(mob/living/target, mob/user) diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 7ab3121a3a..bb454a3b19 100644 --- a/code/modules/spells/spell_types/rightandwrong.dm +++ b/code/modules/spells/spell_types/rightandwrong.dm @@ -13,7 +13,7 @@ if(H.stat == DEAD || !(H.client)) continue if(H.mind) - if(H.mind.special_role == "Wizard" || H.mind.special_role == "apprentice" || H.mind.special_role == "survivalist") + if(iswizard(H) || H.mind.special_role == "survivalist") continue if(prob(survivor_probability) && !(H.mind in SSticker.mode.traitors)) SSticker.mode.traitors += H.mind @@ -220,4 +220,4 @@ SSevents.reschedule() message_admins("Summon Events intensifies, events will now occur every [SSevents.frequency_lower / 600] to [SSevents.frequency_upper / 600] minutes.") - log_game("Summon Events was increased!") \ No newline at end of file + log_game("Summon Events was increased!") diff --git a/code/modules/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 4ee1b678f0..8a377c6c3a 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -57,13 +57,15 @@ var/mob/living/shape = new shapeshift_type(caster.loc) H = new(shape,src,caster) + clothes_req = 0 human_req = 0 /obj/effect/proc_holder/spell/targeted/shapeshift/proc/Restore(mob/living/shape) var/obj/shapeshift_holder/H = locate() in shape if(!H) - return + return + H.restore() clothes_req = initial(clothes_req) @@ -156,4 +158,4 @@ /datum/soullink/shapeshift/sharerDies(gibbed, mob/living/sharer) if(source) - source.shapeDeath(gibbed) + source.shapeDeath(gibbed) \ No newline at end of file diff --git a/code/modules/spells/spell_types/touch_attacks.dm b/code/modules/spells/spell_types/touch_attacks.dm index ffbee4789d..2000d8daea 100644 --- a/code/modules/spells/spell_types/touch_attacks.dm +++ b/code/modules/spells/spell_types/touch_attacks.dm @@ -23,6 +23,9 @@ charge_counter = 0 stoplag(1) +/obj/effect/proc_holder/spell/targeted/touch/can_cast(mob/user = usr) + return ..() && attached_hand + /obj/effect/proc_holder/spell/targeted/touch/proc/ChargeHand(mob/living/carbon/user) attached_hand = new hand_path(src) if(!user.put_in_hands(attached_hand)) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index b00dff2ef7..13216826a4 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -31,7 +31,7 @@ /datum/station_goal/proc/get_coverage() var/list/coverage = list() for(var/obj/machinery/satellite/meteor_shield/A in GLOB.machines) - if(!A.active || !(A.z in GLOB.station_z_levels)) + if(!A.active || !is_station_level(A.z)) continue coverage |= view(A.kill_range,A) return coverage.len diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index f6a2c057d0..0f8003b9b4 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -22,4 +22,4 @@ var/obj/item/bodypart/target_limb = surgery.operated_bodypart target_limb.drop_limb() - return 1 + return 1 \ No newline at end of file diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 790942d897..fa8d04d987 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -217,7 +217,7 @@ C = owner no_update = 0 - if(C.disabilities & HUSK) + if(C.has_disability(DISABILITY_HUSK)) species_id = "husk" //overrides species_id dmg_overlay_type = "" //no damage overlay shown when husked should_draw_gender = FALSE diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index f631400bee..4afe4df220 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -61,7 +61,7 @@ C = owner real_name = C.real_name - if(C.disabilities & HUSK) + if(C.has_disability(DISABILITY_HUSK)) real_name = "Unknown" hair_style = "Bald" facial_hair_style = "Shaved" diff --git a/code/modules/surgery/eye_surgery.dm b/code/modules/surgery/eye_surgery.dm index c8a47d2096..00a9a99bb0 100644 --- a/code/modules/surgery/eye_surgery.dm +++ b/code/modules/surgery/eye_surgery.dm @@ -23,9 +23,9 @@ /datum/surgery_step/fix_eyes/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] successfully fixes [target]'s eyes!", "You succeed in fixing [target]'s eyes.") - target.cure_blind() + target.cure_blind(list(EYE_DAMAGE)) target.set_blindness(0) - target.cure_nearsighted() + target.cure_nearsighted(list(EYE_DAMAGE)) target.blur_eyes(35) //this will fix itself slowly. target.set_eye_damage(0) return TRUE diff --git a/code/modules/surgery/helpers.dm b/code/modules/surgery/helpers.dm index d37b17ae35..c3322126e4 100644 --- a/code/modules/surgery/helpers.dm +++ b/code/modules/surgery/helpers.dm @@ -169,3 +169,4 @@ return 0 return 1 + diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index b9881d0e37..cfec06c7ea 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -34,7 +34,7 @@ case = locate(/obj/item/implantcase) in get_turf(target) if(case && !case.imp) case.imp = I - I.loc = case + I.forceMove(case) case.update_icon() user.visible_message("[user] places [I] into [case]!", "You place [I] into [case].") else @@ -53,4 +53,4 @@ /datum/surgery_step/mechanic_unwrench, /datum/surgery_step/extract_implant, /datum/surgery_step/mechanic_wrench, - /datum/surgery_step/mechanic_close) + /datum/surgery_step/mechanic_close) \ No newline at end of file diff --git a/code/modules/surgery/limb_augmentation.dm b/code/modules/surgery/limb_augmentation.dm index 25d914b0fb..e2316c0e4d 100644 --- a/code/modules/surgery/limb_augmentation.dm +++ b/code/modules/surgery/limb_augmentation.dm @@ -1,3 +1,4 @@ + /////AUGMENTATION SURGERIES////// diff --git a/code/modules/surgery/lipoplasty.dm b/code/modules/surgery/lipoplasty.dm index 488f2e81b1..480edb4bd3 100644 --- a/code/modules/surgery/lipoplasty.dm +++ b/code/modules/surgery/lipoplasty.dm @@ -4,7 +4,7 @@ possible_locs = list("chest") /datum/surgery/lipoplasty/can_start(mob/user, mob/living/carbon/target) - if(target.disabilities & FAT) + if(target.has_disability(DISABILITY_FAT)) return 1 return 0 @@ -50,4 +50,4 @@ newmeat.subjectjob = H.job newmeat.reagents.add_reagent ("nutriment", (removednutriment / 15)) //To balance with nutriment_factor of nutriment newmeat.forceMove(target.loc) - return 1 + return 1 \ No newline at end of file diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 657564f112..0bdef2aac9 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -82,4 +82,4 @@ /datum/surgery_step/open_hatch/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) user.visible_message("[user] begins to open the hatch holders in [target]'s [parse_zone(target_zone)].", - "You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...") + "You begin to open the hatch holders in [target]'s [parse_zone(target_zone)]...") \ No newline at end of file diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index dc8b3543fa..97e24b4cd5 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -126,7 +126,7 @@ return TRUE if(!organs.len) - to_chat(user, "There are no removeable organs in [target]'s [parse_zone(target_zone)]!") + to_chat(user, "There are no removable organs in [target]'s [parse_zone(target_zone)]!") return -1 else for(var/obj/item/organ/O in organs) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index a6635ed78d..ec1fc2bcc9 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -116,7 +116,7 @@ /obj/item/organ/cyberimp/chest/thrusters name = "implantable thrusters set" desc = "An implantable set of thruster ports. They use the gas from environment or subject's internals for propulsion in zero-gravity areas. \ - Unlike regular jetpack, this device has no stabilization system." + Unlike regular jetpacks, this device has no stabilization system." slot = ORGAN_SLOT_THRUSTERS icon_state = "imp_jetpack" implant_overlay = null diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index 98b2a84ac0..2a12005956 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -25,7 +25,7 @@ return var/mob/living/carbon/C = owner // genetic deafness prevents the body from using the ears, even if healthy - if(C.disabilities & DEAF) + if(C.has_disability(DISABILITY_DEAF)) deaf = max(deaf, 1) else if(C.ears && (C.ears.flags_2 & HEALS_EARS_2)) @@ -42,7 +42,7 @@ var/mob/living/carbon/C = owner - if(iscarbon(owner) && C.disabilities & DEAF) + if(iscarbon(owner) && C.has_disability(DISABILITY_DEAF)) deaf = 1 /obj/item/organ/ears/proc/adjustEarDamage(ddmg, ddeaf) diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 21d15fb609..5da89f125f 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -152,3 +152,17 @@ /obj/item/organ/heart/cybernetic/emp_act() Stop() + +/obj/item/organ/heart/freedom + name = "heart of freedom" + desc = "This heart pumps with the passion to give... something freedom." + var/min_next_adrenaline = 0 + +/obj/item/organ/heart/freedom/on_life() + . = ..() + if(owner.health < 5 && world.time > min_next_adrenaline) + min_next_adrenaline = world.time + rand(250, 600) //anywhere from 4.5 to 10 minutes + to_chat(owner, "You feel yourself dying, but you refuse to give up!") + owner.heal_overall_damage(15, 15) + if(owner.reagents.get_reagent_amount("ephedrine") < 20) + owner.reagents.add_reagent("ephedrine", 10) \ No newline at end of file diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index b3f3953c49..bb5301d79e 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -85,3 +85,4 @@ var/obj/item/melee/arm_blade/new_arm = new(target,TRUE,TRUE) target_zone == "r_arm" ? target.put_in_r_hand(new_arm) : target.put_in_l_hand(new_arm) return 1 + diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b10f6acdd0..e293d7c401 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -6,7 +6,7 @@ var/can_cancel = 1 //Can cancel this surgery after step 1 with cautery var/list/species = list(/mob/living/carbon/human) //Acceptable Species var/location = "chest" //Surgery location - var/requires_bodypart_type = BODYPART_ORGANIC //Prevents you from performing an operation on robotic limbs + var/requires_bodypart_type = BODYPART_ORGANIC //Prevents you from performing an operation on incorrect limbs. 0 for any limb type var/list/possible_locs = list() //Multiple locations var/ignore_clothes = 0 //This surgery ignores clothes var/mob/living/carbon/target //Operation target mob diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 577dc6547b..445628566e 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -5,7 +5,7 @@ var/accept_hand = 0 //does the surgery step require an open hand? If true, ignores implements. Compatible with accept_any_item. var/accept_any_item = 0 //does the surgery step accept any item? If true, ignores implements. Compatible with require_hand. var/time = 10 //how long does the step take? - var/repeatable = 0 + var/repeatable = 0 //does this step may be repeated? Make shure it isn't last step, or it used in surgery with `can_cancel = 1`. Or surgion will be stuck in the loop /datum/surgery_step/proc/try_op(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/uplink/uplink.dm b/code/modules/uplink/uplink.dm index 175ac9469c..34946a6286 100644 --- a/code/modules/uplink/uplink.dm +++ b/code/modules/uplink/uplink.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_EMPTY(uplinks) var/selected_cat var/owner = null var/datum/game_mode/gamemode - var/spent_telecrystals = 0 var/datum/uplink_purchase_log/purchase_log var/list/uplink_items var/hidden_crystals = 0 @@ -89,7 +88,7 @@ GLOBAL_LIST_EMPTY(uplinks) var/refundable = initial(UI.refundable) if(I.type == path && refundable && I.check_uplink_validity()) telecrystals += cost - spent_telecrystals -= cost + purchase_log.total_spent -= cost to_chat(user, "[I] refunded.") qdel(I) return diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index ebff0fdbeb..eb97d08750 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -91,7 +91,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. /datum/uplink_item/proc/spawn_item(turf/loc, datum/component/uplink/U, mob/user) if(item) - SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(name)]", "[cost]")) return new item(loc) /datum/uplink_item/Destroy() @@ -611,7 +610,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. name = "Sleepy Pen" desc = "A syringe disguised as a functional pen, filled with a potent mix of drugs, including a \ strong anesthetic and a chemical that prevents the target from speaking. \ - The pen holds one dose of the mixture, and cannot be refilled. Note that before the target \ + The pen holds one dose of the mixture, and can be refilled. Note that before the target \ falls asleep, they will be able to move and act." item = /obj/item/pen/sleepy cost = 4 @@ -700,7 +699,6 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. /datum/uplink_item/stealthy_tools/chameleon/nuke cost = 6 - exclude_modes = list() include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/stealthy_tools/syndigaloshes @@ -1059,9 +1057,9 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/device_tools/potion - name = "Sentience Potion" - item = /obj/item/slimepotion/sentience - desc = "A potion recovered at great risk by undercover syndicate operatives. Using it will make any animal sentient, and bound to serve you." + name = "Syndicate Sentience Potion" + item = /obj/item/slimepotion/sentience/nuclear + desc = "A potion recovered at great risk by undercover syndicate operatives and then subsequently modified with syndicate technology. Using it will make any animal sentient, and bound to serve you, as well as implanting an internal radio for communication." cost = 4 include_modes = list(/datum/game_mode/nuclear) @@ -1152,6 +1150,12 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. cost = 20 include_modes = list(/datum/game_mode/nuclear) +/datum/uplink_item/implants/radio + name = "Internal Syndicate Radio Implant" + desc = "An implant injected into the body, allowing the use of an internal syndicate radio. Used just like a regular headset, but can be disabled to use external headsets normally and to avoid detection." + item = /obj/item/storage/box/syndie_kit/imp_radio + cost = 4 + // Cybernetics /datum/uplink_item/cyber_implants @@ -1385,7 +1389,7 @@ GLOBAL_LIST_EMPTY(uplink_items) // Global list so we only initialize this once. if(possible_items.len) var/datum/uplink_item/I = pick(possible_items) U.telecrystals -= I.cost - U.spent_telecrystals += I.cost + U.purchase_log.total_spent += I.cost SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(I.name)]", "[cost]")) SSblackbox.record_feedback("tally", "traitor_random_uplink_items_gotten", 1, initial(I.name)) return new I.item(loc) diff --git a/code/modules/uplink/uplink_purchase_log.dm b/code/modules/uplink/uplink_purchase_log.dm index 5ec462d237..a8b1083999 100644 --- a/code/modules/uplink/uplink_purchase_log.dm +++ b/code/modules/uplink/uplink_purchase_log.dm @@ -20,6 +20,8 @@ GLOBAL_LIST(uplink_purchase_logs_by_key) //assoc key = /datum/uplink_purchase_lo /datum/uplink_purchase_log/Destroy() purchase_log = null parent = null + if(GLOB.uplink_purchase_logs_by_key[owner] == src) + GLOB.uplink_purchase_logs_by_key -= owner return ..() /datum/uplink_purchase_log/proc/MergeWithAndDel(datum/uplink_purchase_log/other) diff --git a/code/modules/vehicles/pimpin_ride.dm b/code/modules/vehicles/pimpin_ride.dm index 3925b863ff..88524366a6 100644 --- a/code/modules/vehicles/pimpin_ride.dm +++ b/code/modules/vehicles/pimpin_ride.dm @@ -13,6 +13,9 @@ var/datum/component/riding/D = LoadComponent(/datum/component/riding) D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 4), TEXT_SOUTH = list(0, 7), TEXT_EAST = list(-12, 7), TEXT_WEST = list( 12, 7))) + if(floorbuffer) + AddComponent(/datum/component/cleaning) + /obj/vehicle/ridden/janicart/Destroy() if(mybag) qdel(mybag) @@ -47,7 +50,7 @@ floorbuffer = TRUE qdel(I) to_chat(user, "You upgrade [src] with the floor buffer.") - flags_1 |= CLEAN_ON_MOVE_1 + AddComponent(/datum/component/cleaning) update_icon() else return ..() diff --git a/code/modules/vehicles/ridden.dm b/code/modules/vehicles/ridden.dm index 32975e1e0f..5690bb1ad4 100644 --- a/code/modules/vehicles/ridden.dm +++ b/code/modules/vehicles/ridden.dm @@ -1,76 +1,71 @@ -/obj/vehicle/ridden - name = "ridden vehicle" - can_buckle = TRUE - max_buckled_mobs = 1 - buckle_lying = FALSE - default_driver_move = FALSE - var/legs_required = 2 - var/arms_requires = 0 //why not? - -/obj/vehicle/ridden/Initialize() - . = ..() - LoadComponent(/datum/component/riding) - -/obj/vehicle/ridden/examine(mob/user) - . = ..() - to_chat(user, "Put a key inside it by clicking it with the key. If there's a key inside, you can remove it via Alt-Click!") - -/obj/vehicle/ridden/generate_action_type(actiontype) - var/datum/action/vehicle/ridden/A = ..() - . = A - if(istype(A)) - A.vehicle_ridden_target = src - -/obj/vehicle/ridden/post_unbuckle_mob(mob/living/M) - remove_occupant(M) - return ..() - -/obj/vehicle/ridden/post_buckle_mob(mob/living/M) - add_occupant(M) - return ..() - -/obj/vehicle/ridden/attackby(obj/item/I, mob/user, params) - if(key_type && !is_key(inserted_key) && is_key(I)) - if(user.transferItemToLoc(I, src)) - to_chat(user, "You insert \the [I] into \the [src].") - if(inserted_key) //just in case there's an invalid key - inserted_key.forceMove(drop_location()) - inserted_key = I - else - to_chat(user, "[I] seems to be stuck to your hand!") - return - return ..() - -/obj/vehicle/ridden/AltClick(mob/user) - if(user.Adjacent(src) && inserted_key) - if(!is_occupant(user)) - to_chat(user, "You must be riding the [src] to remove [src]'s key!") - return - to_chat(user, "You remove \the [inserted_key] from \the [src].") - inserted_key.forceMove(drop_location()) - user.put_in_hands(inserted_key) - inserted_key = null - return ..() - -/obj/vehicle/ridden/driver_move(mob/user, direction) - if(key_type && !is_key(inserted_key)) - to_chat(user, "[src] has no key inserted!") - return FALSE - var/datum/component/riding/R = GetComponent(/datum/component/riding) - R.handle_ride(user, direction) - return ..() - -/obj/vehicle/ridden/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) - if(user.incapacitated()) - return - for(var/atom/movable/A in get_turf(src)) - if(A.density) - if(A != src && A != M) - return - M.forceMove(get_turf(src)) - . = ..() - -/obj/vehicle/ridden/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) - if(!force && occupant_amount() >= max_occupants) - return FALSE - return ..() +/obj/vehicle/ridden + name = "ridden vehicle" + can_buckle = TRUE + max_buckled_mobs = 1 + buckle_lying = FALSE + default_driver_move = FALSE + var/legs_required = 2 + var/arms_requires = 0 //why not? + +/obj/vehicle/ridden/Initialize() + . = ..() + LoadComponent(/datum/component/riding) + +/obj/vehicle/ridden/examine(mob/user) + . = ..() + to_chat(user, "Put a key inside it by clicking it with the key. If there's a key inside, you can remove it via Alt-Click!") + +/obj/vehicle/ridden/generate_action_type(actiontype) + var/datum/action/vehicle/ridden/A = ..() + . = A + if(istype(A)) + A.vehicle_ridden_target = src + +/obj/vehicle/ridden/post_unbuckle_mob(mob/living/M) + remove_occupant(M) + return ..() + +/obj/vehicle/ridden/post_buckle_mob(mob/living/M) + add_occupant(M) + return ..() + +/obj/vehicle/ridden/attackby(obj/item/I, mob/user, params) + if(key_type && !is_key(inserted_key) && is_key(I)) + if(user.transferItemToLoc(I, src)) + to_chat(user, "You insert \the [I] into \the [src].") + if(inserted_key) //just in case there's an invalid key + inserted_key.forceMove(drop_location()) + inserted_key = I + else + to_chat(user, "[I] seems to be stuck to your hand!") + return + return ..() + +/obj/vehicle/ridden/AltClick(mob/user) + if(user.Adjacent(src) && inserted_key) + if(!is_occupant(user)) + to_chat(user, "You must be riding the [src] to remove [src]'s key!") + return + to_chat(user, "You remove \the [inserted_key] from \the [src].") + inserted_key.forceMove(drop_location()) + user.put_in_hands(inserted_key) + inserted_key = null + return ..() + +/obj/vehicle/ridden/driver_move(mob/user, direction) + if(key_type && !is_key(inserted_key)) + to_chat(user, "[src] has no key inserted!") + return FALSE + var/datum/component/riding/R = GetComponent(/datum/component/riding) + R.handle_ride(user, direction) + return ..() + +/obj/vehicle/ridden/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) + if(!in_range(user, src) || !in_range(M, src)) + return FALSE + . = ..(M, user, FALSE) + +/obj/vehicle/ridden/buckle_mob(mob/living/M, force = FALSE, check_loc = TRUE) + if(!force && occupant_amount() >= max_occupants) + return FALSE + return ..() diff --git a/code/modules/zombie/organs.dm b/code/modules/zombie/organs.dm index 07e3648417..119ed27926 100644 --- a/code/modules/zombie/organs.dm +++ b/code/modules/zombie/organs.dm @@ -58,8 +58,8 @@ life has not abandoned your broken form. You can only feel a deep and immutable hunger that \ not even death can stop, you will rise again!") var/revive_time = rand(revive_time_min, revive_time_max) - var/flags_1 = TIMER_STOPPABLE - timer_id = addtimer(CALLBACK(src, .proc/zombify), revive_time, flags_1) + var/flags = TIMER_STOPPABLE + timer_id = addtimer(CALLBACK(src, .proc/zombify), revive_time, flags) /obj/item/organ/zombie_infection/proc/zombify() timer_id = null diff --git a/code/world.dm b/code/world.dm index 955d19c6c4..660d2f272d 100644 --- a/code/world.dm +++ b/code/world.dm @@ -1,4 +1,3 @@ - //This file is just for the necessary /world definition //Try looking in game/world.dm diff --git a/config/config.txt b/config/config.txt index e43b38b568..b934ddab41 100644 --- a/config/config.txt +++ b/config/config.txt @@ -51,7 +51,8 @@ BAN_LEGACY_SYSTEM ## Unhash this to enable playtime requirements for head jobs. #USE_EXP_RESTRICTIONS_HEADS ## Unhash this to override head jobs' playtime requirements with this number of hours. -#USE_EXP_RESTRICTIONS_HEADS_HOURS 15 +## Leave this commented out to use the values defined in the job datums. Values in the datums are stored as minutes. +#USE_EXP_RESTRICTIONS_HEADS_HOURS 3 ## Unhash this to change head jobs' playtime requirements so that they're based on department playtime, rather than crew playtime. #USE_EXP_RESTRICTIONS_HEADS_DEPARTMENT ## Unhash this to enable playtime requirements for certain non-head jobs, like Engineer and Scientist. diff --git a/html/browser/techwebs.css b/html/browser/techwebs.css new file mode 100644 index 0000000000..889196cc28 --- /dev/null +++ b/html/browser/techwebs.css @@ -0,0 +1,20 @@ +[data-tooltip] { + position: relative; +} + +[data-tooltip]:hover::before { + position: absolute; + z-index: 1; + top: 100%; + padding: 0 4px; + margin-top: 1px; + border: 1px solid #40628a; + background: black; + color: white; + content: attr(data-tooltip); + min-width: 160px; +} + +.technode { + width: 256px; +} diff --git a/html/changelog.html b/html/changelog.html index d73ebdcd62..f3415e04d7 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1,1284 +1,3 @@ - - - - Citadel Station 13 Changelog - - - - - - - -
    - - - - -
    -
    Traditional Games Space Station 13
    - -

    - Visit our IRC channel: #tgstation13 on irc.rizon.net -
    - - - - - -
    - Current Project Maintainers: -Click Here-
    - Currently Active GitHub contributor list: -Click Here-
    - Coders: TLE, NEO, Errorage, muskets, veryinky, Skie, Noise, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0, Doohl, Superxpdude, Rockdtben, ConstantA, Petethegoat, Kor, Polymorph, Carn, Nodrak, Donkie, Sieve, Giacom, Ikarrus, trubble_bass, Aranclanos, Cael_Aislinn, Cheridan, Intigracy, Malkevin, SuperSayu, DumpDavidson, Tastyfish, Yvar, Elo001, Fleure, ManeaterMildred, Miauw, MrPerson
    - Spriters: Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr, Petethegoat, Kor, Ricotez, Ausops, TankNut, Pewtershmitz, Firecage, Nienhaus2
    - Sounds: Skie, Lasty/Vinyl
    - Main Testers: Tenebrosity, Anyone who has submitted a bug to the issue tracker
    - Thanks to: Baystation 12, /vg/station, NTstation, CDK Station devs, FacepunchStation, GoonStation devs, the original SpaceStation developers and Invisty for the title image.
    Also a thanks to anybody who has contributed who is not listed here :( Ask to be added here on irc.
    -
    Have a bug to report?
    Visit our Issue Tracker.
    - Please ensure that the bug has not already been reported and use the template provided here. -
    - - -
    -

    19 April 2017

    -

    QualityVan updated:

    -
      -
    • Improved stethoscopes
    • -
    -

    Thunder12345 updated:

    -
      -
    • You can no longer extract negative sheets from the ORM
    • -
    -

    XDTM updated:

    -
      -
    • APCs hacked by a malfunctioning AI are no longer immune to alien attacks.
    • -
    • Fixed bug where flashlight eyes weren't emitting light.
    • -
    - -

    07 April 2017

    -

    Qbopper updated:

    -
      -
    • Secure lockers will no longer have multiple lines about being broken.
    • -
    - -

    05 April 2017

    -

    Cyberboss updated:

    -
      -
    • Cardboard boxes and bodybags can no longer be anchored
    • -
    -

    Penguaro updated:

    -
      -
    • [Box] A fire alarm has been added to the Lawyer's office.
    • -
    • [Box] Adds access for Scientists to Starboard Maintenance Areas outside of Toxins.
    • -
    • [Box] Adjusted Science doors to more logical access codes.
    • -
    -

    QV updated:

    -
      -
    • Fixed taking max suffocation damage whenever oxygen was slightly low
    • -
    -

    RemieRichards updated:

    -
      -
    • Using TK on the supermatter will burn your head off violently, don't do this.
    • -
    • Examining clothing with pockets will now give information about the pockets: number of slots, how it is interacted with (backpack, etc.), if it has quickdraw (Alt-Click) support and whether or not it is silent to interact with.
    • -
    -

    coiax updated:

    -
      -
    • Emergency shuttles will now forget early launch authorizations if they cannot launch due to a hostile environment.
    • -
    - -

    02 April 2017

    -

    BeeSting12 updated:

    -
      -
    • Metastation's northeast radiation collector is now connected to the grid. Nanotrasen would like to apologize for any inconvenience caused to engineers, but copper is expensive.
    • -
    • Boxstation's HoP office now has a PDA tech.
    • -
    -

    Cyberboss updated:

    -
      -
    • Firedoors no longer operate automatically without power
    • -
    • Blood and other decals will no longer remain on turfs they shouldn't
    • -
    • The splashscreen is working again
    • -
    • False alarms are now guaranteed to actually announce something
    • -
    -

    Incoming5643 updated:

    -
      -
    • Lighting visuals have been changed slightly to reduce it's cost to the client. If you had trouble running the new lighting, it might run a little better now.
    • -
    -

    MMMiracles (CereStation) updated:

    -
      -
    • Added a patrol path for bots, includes 2 round-start securitrons placed on opposite sites of station.
    • -
    • Due to map size, mulebots are still somewhat unreliable on longer distances. Disposals are still advised, but mule bots are now technically an option for delivery.
    • -
    • Added multiple status displays, extinguishers, and appropriate newscasters to hallways.
    • -
    • A drone dispenser is now located underneath Engineering in maintenance.
    • -
    • Each security checkpoint now has a disposal chute that directs to a waiting cell in the Brig for rapid processing of criminals. Why run half-way across the station with some petty thief when you can just shove him in the criminal chute and have the warden deal with him?
    • -
    • Security's mail chute no longer leads into the armory. This was probably not the best idea in hindsight.
    • -
    • Virology has a bathroom now.
    • -
    • Genetics monkey pen is a bit more green now.
    • -
    • Lawyer now has access the brig cells so he can complain more effectively.
    • -
    • Xenobio kill chamber is now in range of a camera.
    • -
    • Removed rogue bits of Vault area.
    • -
    • Medbay escape pod no longer juts out far enough to block the disposal's path.
    • -
    • Captain's spare ID is now real and not just a gold ID card.
    • -
    -

    Penguaro updated:

    -
      -
    • [Meta] The Chapel Security Hatches were very intimidating. They have been changed to more inviting glass doors.
    • -
    • [Meta] The maintenance tunnels in the Xeno Lab now have radiation shielding. The Slime Euthanization Chamber will not have radiation shielding at this time as dead slimes will not mind radiation.
    • -
    -

    coiax updated:

    -
      -
    • Adds seperate languages to the game. Now Ratvarian, Drone, Machine, Swarmer, Human (now called Galactic Common), Slime and Monkey are separate languages. Each languages has its own comma prefix, for example, Galcom has the ,0 prefix, while Ratvarian has the ,r prefix. If you don't understand a language when it is spoken to you, you will hear a scrambled version that will vary depending on the language that you're not understanding.
    • -
    • This does not change who can understand what.
    • -
    • Removed the talk wheel feature.
    • -
    • Clicking the speech bubble icon now opens the Language Menu, allowing you to review which languages you speak, their keys, and letting you set which language you speak by default. Admins have additional abilities to add and remove languages from mobs using this menu.
    • -
    -

    ktccd updated:

    -
      -
    • Ninja suits have received a new software update, making them able to **actually steal tech levels** from R&D consoles and servers, thus avoid being forced to honourably kill themselves for failing their objective.
    • -
    - -

    01 April 2017

    -

    Cyberboss updated:

    -
      -
    • The contents of the shelterpod smart fridge work again
    • -
    -

    XDTM updated:

    -
      -
    • Facehuggers no longer rip masks from people protected by helmets.
    • -
    - -

    31 March 2017

    -

    Cobby updated:

    -
      -
    • Shot glasses are now more ambiguous [EASIER TO MAINTAIN]
    • -
    -

    Cyberboss updated:

    -
      -
    • Temperature changes will now properly cause atmospherics simulation to activate
    • -
    • The command report for random xeno eggs will now be delivered along with the rest of the roundstart reports
    • -
    • Drones can no longer be irradiated
    • -
    - -

    30 March 2017

    -

    coiax updated:

    -
      -
    • Autoimplanters have been renamed to autosurgeons. Currently only the CMO and nuclear operatives have access to autosurgeons. What is the CMO hiding?
    • -
    • All upgraded organs for purchase by nuclear operatives now actually come in an autosurgeon, for speed of surgery.
    • -
    - -

    29 March 2017

    -

    BeeSting12 updated:

    -
      -
    • Adds emergency launch console to the backup emergency shuttle.
    • -
    -

    Joan updated:

    -
      -
    • Putting sec armour and a helmet on a corgi no longer makes the corgi immune to item attacks.
    • -
    • All items with armour will now grant corgis actual armour.
    • -
    -

    Kevinz000 updated:

    -
      -
    • High-powered floodlights may be constructed with 5 sheets of metal, a wrench, a screwdriver, 5 cable coils, and a light tube. They require a powernet connection via direct wire node.
    • -
    -

    coiax updated:

    -
      -
    • All tophats, rather than just the ones in maintenance, hurt a tiny bit if you throw them at people.
    • -
    • Supermatter anomalies are more shortlived than regular anomalies, as intended.
    • -
    - -

    28 March 2017

    -

    Supermichael777 updated:

    -
      -
    • Backup operatives now get the nukes code.
    • -
    -

    XDTM updated:

    -
      -
    • Wooden tiles can now be quick-replaced with a screwdriver instead of a crowbar, preserving the floor tile.
    • -
    -

    octareenroon91 updated:

    -
      -
    • Bonfires that have a metal rod added should buckle instead of runtiming.
    • -
    - -

    26 March 2017

    -

    BeeSting12 updated:

    -
      -
    • The bar shuttle's buckable bar stools are now buckleable bar stools.
    • -
    -

    Gun Hog and Shadowlight213 updated:

    -
      -
    • The AI may now deploy to cyborgs prepared as AI shells. The module to do this may be research in the exosuit fabricator. Simply slot the module into a completed cyborg frame as with an MMI, or into a playerless (with no ckey) cyborg.
    • -
    • AI shells and AIs controlling a shell can be determined through the Diagnostic HUD.
    • -
    • AIs can deploy to a shell using the new action buttons or by simply clicking on it.
    • -
    • An AI shell will always have the laws of its controlling AI.
    • -
    -

    Penguaro updated:

    -
      -
    • Brig - Added Air Alarm
    • -
    • Engineering - Removed Brig Shutter
    • -
    • Omega, Meta, & Delta Stations - The Vents and Scrubbers for the Supermatter Air Alarm are now isolated from the rest of the Air Alarms in Engineering.
    • -
    -

    Qbopper updated:

    -
      -
    • Drones are now given OOC guidelines to follow as well as their IC lawset.
    • -
    -

    Robustin updated:

    -
      -
    • Added the prototype canister with expanded volume, valve pressure, and access/timer features
    • -
    -

    TrustyGun updated:

    -
      -
    • Deconstructing display cases and coffins now drop the correct amount of wood.
    • -
    -

    XDTM updated:

    -
      -
    • Some golems now spawn with more thematic names.
    • -
    • Adamantine Golems are no longer numbered, but receive a random golem name.
    • -
    • Airlocks properly remove the shock overlay when a temporary shock runs out.
    • -
    -

    coiax updated:

    -
      -
    • Teams playing CTF have their own radio channels, rather than using the Centcom and Syndicate channels.
    • -
    • Actually actually makes CTF barricades repair between rounds.
    • -
    • Blue CTF lasers have little blue effects when they hit things, rather than red effects.
    • -
    - -

    24 March 2017

    -

    BeeSting12 updated:

    -
      -
    • Auxiliary base maintenance airlock now requires the proper access. Sorry greyshirts, no loot for you!
    • -
    -

    Cyberboss updated:

    -
      -
    • The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator upgrades now give +12.5% per level instead of +25%
    • -
    • You can now successfully remove a pen from a PDA while it's in a container
    • -
    -

    Fox McCloud updated:

    -
      -
    • Modular receiver removed from the protolathe to autolathe
    • -
    • Modular receiver cost is now 15,000 metal
    • -
    -

    Joan updated:

    -
      -
    • Fixes structures being unable to go through spatial gateways.
    • -
    • Blazing Oil blobs take 33% less damage from water.
    • -
    -

    Penguaro updated:

    -
      -
    • [Meta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • -
    • [Pubby] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • -
    • [Omega] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • -
    • [Omega] Added RD and Command Modular Consoles to Bridge
    • -
    • [Delta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console
    • -
    • [Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with Modular Engineering Console
    • -
    -

    coiax updated:

    -
      -
    • Destroying a lich's body does not destroy the lich permanently, provided the phylactery is intact.
    • -
    • A lich will respawn three minutes after its death, provided the phylactery is intact.
    • -
    • The Soul Bind spell is forgotten after cast, respawn is now automatic.
    • -
    • Stationloving objects like the nuke disk are not valid objects for a phylactery.
    • -
    • Explosive implants can always be triggered via action button, even if unconscious.
    • -
    -

    rock updated:

    -
      -
    • lizards are hurt slightly more by cold but less by heat. this does not mean they are more resistant to being lasered, fortunately.
    • -
    - -

    23 March 2017

    -

    Joan updated:

    -
      -
    • Clock cults always have to summon Ratvar, but that always involves a proselytization burst.
    • -
    • The proselytization burst will no longer convert heretics, leaving Ratvar free to chase them down.
    • -
    • Places that referred to the Ark of the Clockwork Justicar as the "Gateway to the Celestial Derelict" have been corrected to always refer to the Ark.
    • -
    -

    Penguaro updated:

    -
      -
    • Wizard Ship - Bolts that floating light to the wall.
    • -
    -

    XDTM updated:

    -
      -
    • Medical Gauze now stacks up to 12
    • -
    • Pressure plates are now craftable.
    • -
    -

    bgobandit updated:

    -
      -
    • Alt-clicking a command headset toggles HIGH VOLUME mode.
    • -
    -

    coiax updated:

    -
      -
    • A dead AI no longer counts as an "unconverted AI" for clockcult.
    • -
    - -

    22 March 2017

    -

    BeeSting12 updated:

    -
      -
    • Added an autolathe circuit board to deltastation's tech storage.
    • -
    • Added 49 sheets of metal to deltastation's auxiliary tool storage.
    • -
    -

    Iamgoofball updated:

    -
      -
    • Freon no longer bypasses atmos hardsuits.
    • -
    -

    Penguaro updated:

    -
      -
    • Meta - Added Tool Belts to Engineering and Engineering Foyer
    • -
    • Meta - Removed Coffee Machine from Permabrig
    • -
    • Added Cameras for Supermatter Chamber (to view rad collectors and crystal)
    • -
    • Adjusted Engine Camera Names for Station Consistency
    • -
    • Adjusted Monitor Names / Networks to view the Engine Cameras
    • -
    -

    coiax updated:

    -
      -
    • APCs now glow faintly with their charging lights. So red is not charging, blue is charging, green is full. Emagged APCs are also blue. Broken APCs do not emit light.
    • -
    • Alien glowing resin now glows.
    • -
    - -

    21 March 2017

    -

    ExcessiveUseOfCobblestone updated:

    -
      -
    • All core traits [Hydroponics] scale with the parts in the gene machine. Time to beg Duke's Guide Read.... I mean RND!
    • -
    • Data disks with genes on them will have just the name of the gene instead of the prefix "plant data disk".
    • -
    • If you were unaware, you can rename these disks with a pen. Now, you can also change the description if you felt inclined to.
    • -
    -

    Joan updated:

    -
      -
    • Caches produce components every 70 seconds, from every 90, but each other linked, component-producing cache slows down cache generation by 10 seconds.
    • -
    -

    Lombardo2 updated:

    -
      -
    • The tentacle changeling mutation now changes the arm appearance when activated.
    • -
    -

    MrPerson updated:

    -
      -
    • Everyone's eyes aren't white anymore.
    • -
    -

    Penguaro updated:

    -
      -
    • Box Station - The Vents and Scrubbers for the Supermatter Air Alarm are now isolated from the rest of the Air Alarms in Engineering.
    • -
    -

    Supermichael777 updated:

    -
      -
    • Chasms now smooth properly.
    • -
    -

    Tokiko1 updated:

    -
      -
    • Minor supermatter balancing changes.
    • -
    • Supermatter now announces its damage half as frequently.
    • -
    • Badly unstable supermatter now occasionally zaps nearby engineers and causes anomalies to appear nearby, similar to overcharged supermatter.
    • -
    -

    XDTM updated:

    -
      -
    • Golem Shells can now be completed with medical gauze or cloth to form cloth golems, which are weaker and extremely flammable. However, if they die, they turn into a pile of cloth that will eventually re-animate back into full health. That is, unless someone lights it on fire.
    • -
    - -

    19 March 2017

    -

    BeeSting12 updated:

    -
      -
    • Nanotrasen has decided to better equip the box-class emergency shuttles with a recharger on a table in the cockpit.
    • -
    -

    Cheridan updated:

    -
      -
    • The slime created by a pyroclastic anomaly detonating is now adult and player-controlled! Reminder that if you see an anomaly alert, you should grab an analyzer and head to the announced location to scan it, and then signal the given frequency on a signaller!
    • -
    -

    Penguaro updated:

    -
      -
    • change access variables for turrets and shield gens
    • -
    • Box Station - Replaces the smiling table grilles with their more serious counterparts.
    • -
    -

    coiax updated:

    -
      -
    • The Syndicate lavaland base now has a single self destruct bomb located next to the Communications Room. Guaranteed destruction of the base is guaranteed by payloads embedded in the walls.
    • -
    -

    octareenroon91 updated:

    -
      -
    • Fixes infinite vaping bug.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Plant data disks have new sprites.
    • -
    • Fixed Monkey Recycler board not showing in Circuit Imprinter
    • -
    • Kinetic Accelerator Range Mod now takes up 25% space instead of 24%
    • -
    - -

    18 March 2017

    -

    Supermichael777 updated:

    -
      -
    • Free golems can now buy new ids for 250 points.
    • -
    -

    XDTM updated:

    -
      -
    • You can now complete a golem shell with runed metal, if you somehow manage to get both.
    • -
    • Runic golems don't have passive bonuses over golems, but they have some special abilities.
    • -
    -

    coiax updated:

    -
      -
    • The alert level is no longer lowered by a nuke's detonation.
    • -
    - -

    17 March 2017

    -

    BeeSting12 updated:

    -
      -
    • Moved Metastation's deep fryer so that the chef can walk all the way around the table.
    • -
    -

    Cobby updated:

    -
      -
    • The gulag mineral ratio has been tweaked so there are PLENTY of iron ore, nice bits of silver/plasma, with the negative of having less really high valued ores. If you need minerals, it may be a good time to ask the warden now!
    • -
    -

    Joan updated:

    -
      -
    • You can now place lights and most wall objects on shuttles.
    • -
    -

    Xhuis updated:

    -
      -
    • Added the power flow control console, which allows remote manipulation of most APCs on the z-level. You can find them in the Chief Engineer's office on all maps.
    • -
    - -

    16 March 2017

    -

    BASILMAN YOUR MAIN MAN updated:

    -
      -
    • The BM Speedwagon has been improved both in terms of aesthetics and performance!
    • -
    -

    Cyberboss updated:

    -
      -
    • The shield generators in Boxstation Xenobiology now have the correct access
    • -
    -

    Joan updated:

    -
      -
    • Cult structures that emitted light now have colored light.
    • -
    -

    MrPerson updated:

    -
      -
    • Humans can see in darkness slightly again. This is only so you can see where you are when the lights go out.
    • -
    -

    MrStonedOne updated:

    -
      -
    • Fixed lighting not updating when a opaque object was deleted
    • -
    -

    Penguaro updated:

    -
      -
    • Increased Synchronization Range on Exosuit Fabricator
    • -
    -

    Tofa01 updated:

    -
      -
    • [Delta] Fixes telecoms temperature and gas mixing / being contaminated.
    • -
    • [Delta] Fixes some doubled up turfs causing items and objects to get stuck to stuff
    • -
    • [Omega] Makes telecoms room cool down and be cold.
    • -
    -

    Tokiko1 updated:

    -
      -
    • Most gases now have unique effects when surrounding the supermatter crystal.
    • -
    • The supermatter crystal can now take damage from too much energy and too much gas.
    • -
    • Added a dangerous overcharged state to the supermatter crystal.
    • -
    • Readded explosion delaminations, a new tesla delamination and allowed the singulo delamination to absorb the supermatter.
    • -
    • The type of delamination now depends on the state of the supermatter crystal.
    • -
    • Various supermatter engine rebalancing and fixes.
    • -
    -

    kevinz000 updated:

    -
      -
    • SDQL2 now supports outputting proccalls to variables, and associative lists
    • -
    -

    peoplearestrange updated:

    -
      -
    • Fixed buildmodes full tile window to be correct path
    • -
    -

    rock updated:

    -
      -
    • if we can have glowsticks in toolvends why not flashlights amirite guys
    • -
    - -

    15 March 2017

    -

    Cyberboss updated:

    -
      -
    • You can no longer depart on the arrivals shuttle by hiding inside things
    • -
    -

    Joan updated:

    -
      -
    • Proselytizers converting clockwork floors to walls now always take 10 seconds, regardless of how fast the proselytizer is.
    • -
    • Clockwork grilles no longer provide CV.
    • -
    -

    Penguaro updated:

    -
      -
    • **Engineering** - Changed Access Level from **24** (_Atmo_) to **10** (_Engine_) on **Radiation Shutter Control**
    • -
    -

    TrustyGun updated:

    -
      -
    • Traitor Mimes with the finger guns spell now fire 3 bullets at a time, as opposed to just 1.
    • -
    -

    octareenroon91 updated:

    -
      -
    • Allow new reflector frames to be built from metal sheets.
    • -
    -

    oranges updated:

    -
      -
    • Removed patting
    • -
    - -

    14 March 2017

    -

    Joan updated:

    -
      -
    • Shuttles now have dynamic lighting; you can remove the lights on them and use your own lights.
    • -
    • All maps now use Deltastation's fancy syndicate shuttle.
    • -
    • Shadowshrooms of lower potency are much less able to blanket the station in darkness.
    • -
    -

    PKPenguin321 updated:

    -
      -
    • Lattices now require wirecutters to deconstruct, rather than welding tools.
    • -
    - -

    13 March 2017

    -

    Cyberboss updated:

    -
      -
    • You must now be on any intent EXCEPT help to weld an airlock shut
    • -
    • You can now repair airlocks with welding tools on help intent (broken airlocks still need their wires mended though)
    • -
    -

    Cyberboss, Bgobandit, and Yogstation updated:

    -
      -
    • The HoP can now prioritze roles for late-joiners
    • -
    -

    Every coder, player, and admin in Space Station 13 updated:

    -
      -
    • Adds the Tomb Of The Unknown Employee to Central Command,
    • -
    • Rest in peace, those who died after contributing to Space Station 13.
    • -
    -

    Hyena updated:

    -
      -
    • Surplus leg r/l name fixed
    • -
    • You can now carry honey in plant bags
    • -
    -

    Lordpidey updated:

    -
      -
    • Devils can no longer break into areas with sheer force of disco funk
    • -
    • The pitchfork of an ascended devil can now break down walls.
    • -
    • Hell has decided to at least clothe it's devils when sending them a brand new body.
    • -
    • Pitchforks glow red now.
    • -
    -

    Penguaro updated:

    -
      -
    • **Engineering** - Removed Tables, paper bin, and pen
    • -
    • **Engineering** - Replaced with Welder and Electrical Lockers
    • -
    • **Engineering** - Moved First-Aid Burn kit to Engineering Foyer
    • -
    • **Chapel** - Replaced one Window with Win-Door for Coffin Storage
    • -
    -

    Space Bicycle Consortium updated:

    -
      -
    • Bicycles now only cost 10,000 yen, down from 1,000,000 yen.
    • -
    -

    coiax updated:

    -
      -
    • The egg spawner on Metastation will generate a station message and inform the admins if an egg is spawned. (It's only a two percent chance, but live in hope.)
    • -
    • Glowsticks can now be found in "Swarmer Cyan" colors.
    • -
    - -

    12 March 2017

    -

    JStheguy updated:

    -
      -
    • Changed Desert Eagle sprites, changed .50 AE magazine sprites, added Desert Eagle magazine overlay to icons/obj/guns/projectile.dmi.
    • -
    • The empty Desert Eagle sprite now only displays on an empty chamber. The existence or lack thereof of the magazine is rendered using an overlay instead.
    • -
    -

    Lzimann updated:

    -
      -
    • Braindead has a more intuitive message
    • -
    -

    coiax updated:

    -
      -
    • A cloner that is EMP'd will merely eject the clone early, rather than gibbing it. Emagging the cloner will still gib the clone.
    • -
    - -

    11 March 2017

    -

    AnturK updated:

    -
      -
    • Traitors now have access to radio jammers for 10 TC
    • -
    -

    Hyena updated:

    -
      -
    • fixes anti toxin pill naming
    • -
    -

    Joan updated:

    -
      -
    • Window construction steps are slightly faster; normal windows now take 6 seconds with standard tools, from 7 and reinforced windows now take 12 seconds with standard tools, from 14.
    • -
    • Brass windows take 8 seconds with standard tools, from 7.
    • -
    • Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd expect.
    • -
    • Removed His Grace ascension.
    • -
    -

    PKPenguin321 updated:

    -
      -
    • Cryoxadone's ability to heal cloneloss has been greatly reduced.
    • -
    • Clonexadone has been readded. It functions exactly like cryoxadone, but only heals cloneloss, and at a decent rate. Brew it with 1 part cryoxadone, 1 part sodium, and 5 units of plasma for a catalyst.
    • -
    -

    Penguaro updated:

    -
      -
    • Adjusted table locations
    • -
    • Moved chair and Cargo Tech start location
    • -
    • Moved filing cabinet
    • -
    • Removed Stock Computer
    • -
    -

    Tofa01 updated:

    -
      -
    • [Meta] Fixes Supermatter Shutters Not Working
    • -
    -

    coiax updated:

    -
      -
    • Swarmer lights are coloured cyan.
    • -
    -

    kevinz000 updated:

    -
      -
    • Deadchat no longer has huge amount of F's.
    • -
    - -

    10 March 2017

    -

    Cyberboss updated:

    -
      -
    • You should no longer be seeing entities with `\improper` in front of their name
    • -
    • The arrivals shuttle will now ferry new arrivals to the station. It will not depart if any intelligent living being is on board. It will remain docked if it is depressurized.
    • -
    • You now late-join spawn buckled to arrivals shuttle chairs
    • -
    • Ghost spawn points have been moved to the center of the station
    • -
    • Departing shuttles will now try and shut their docking airlocks
    • -
    • The arrivals shuttle airlocks are now properly cycle-linked
    • -
    • You can now hear hyperspace sounds outside of shuttles
    • -
    • The map loader is faster
    • -
    • Lavaland will now load instantly when the game starts
    • -
    -

    Jordie0608 updated:

    -
      -
    • The Banning Panel now organises search results into pages of 15 each.
    • -
    -

    XDTM updated:

    -
      -
    • Slimes can now properly latch onto humans.
    • -
    • Slimes won't aggro neutral mobs anymore. This includes blood-spawned gold slime mobs.
    • -
    • Clicking on a tile with another tile and a crowbar in hand directly replaces the tile.
    • -
    -

    Xhuis updated:

    -
      -
    • Ratvar and Nar-Sie now have fancy colored lighting!
    • -
    -

    coiax updated:

    -
      -
    • Wizards can now use their magic to make ghosts visible to haunt the crew, and possibly attempt to betray the wizard.
    • -
    • When someone dies, if their body is no longer present, the (F) link will instead jump to the turf they previously occupied.
    • -
    • Stacks of materials will automatically merge together when created. You may notice differences when ejecting metal, glass or using the cash machine in the vault.
    • -
    • You can find green and red glowsticks in YouTool vending machines.
    • -
    -

    fludd12 updated:

    -
      -
    • Modifying/deconstructing skateboards while riding them no longer nails you to the sky.
    • -
    -

    lordpidey updated:

    -
      -
    • Glitter bombs have been added to arcade prizes.
    • -
    - -

    08 March 2017

    -

    Cyberboss updated:

    -
      -
    • Added roundstart animation
    • -
    • Roundstart should now be a smoother experience... again
    • -
    • You can now scan storage items with the forensic scanner
    • -
    • Unfolding paper planes no longer deletes them
    • -
    • Plastic no longer conducts electricity
    • -
    • The map rotation message will only show if the map is actually changing
    • -
    -

    Francinum updated:

    -
      -
    • Holopads now require power.
    • -
    -

    Fun Police updated:

    -
      -
    • Reject Adminhelp and IC Issue buttons have a cooldown.
    • -
    -

    Joan updated:

    -
      -
    • Circuit tiles now glow faintly.
    • -
    • Glowshrooms now have colored light.
    • -
    • Tweaked the potency scaling for glowshroom/glowberry light; high-potency plantss no longer light up a huge area, but are slightly brighter.
    • -
    -

    Kor updated:

    -
      -
    • People with mutant parts (cat ears) are no longer outright barred from selecting command roles in their preferences, but will have their mutant parts removed on spawning if they are selected for that role.
    • -
    -

    LanCartwright updated:

    -
      -
    • Adds scaling damage to buckshot.
    • -
    -

    Robustin updated:

    -
      -
    • The DNA Vault has 2 new powers
    • -
    • The DNA Vault requires super capacitors instead of quadratic
    • -
    • Cargo's Vault Pack now includes DNA probes
    • -
    -

    Supermichael777 updated:

    -
      -
    • Robust Soft Drinks LLC is proud to announce Premium canned air for select markets. There is not an air shortage. Robust Soft Drinks has never engaged in any form of profiteering.
    • -
    -

    TalkingCactus updated:

    -
      -
    • Energy swords (and other energy melee weapons) now have a colored light effect when active.
    • -
    -

    Tofa01 updated:

    -
      -
    • [All Maps] Fixes syndicate shuttles spawning too close to stations by moving their spawn further from the station
    • -
    • [Omegastation] This station now has a syndicate shuttle and syndicate shuttle spawn.
    • -
    -

    coiax updated:

    -
      -
    • Wizards now have a new spell "The Traps" in their spellbook. Summon an array of temporary and permanent hazards for your foes, but don't fall into your own trap(s)!
    • -
    • Permanent wizard traps can be triggered relatively safely by throwing objects across the trap, or examining it at close range. The trap will then be on cooldown for a minute.
    • -
    • Toy magic eightballs can now be found around the station in maintenance and arcade machines. Ask your question aloud, and then shake for guidance.
    • -
    • Adds new Librarian traitor item, the Haunted Magic Eightball. Although identical in appearance to the harmless toys, this occult device reaches into the spirit world to find its answers. Be warned, that spirits are often capricious or just little assholes.
    • -
    • You only have a headache looking at the supermatter if you're a human without mesons.
    • -
    • The supermatter now speaks in a robotic fashion.
    • -
    • Admins have a "Rename Station Name" option, under Secrets.
    • -
    • A special admin station charter exists, that has unlimited uses and can be used at any time.
    • -
    • Added glowsticks. Found in maintenance, emergency toolboxes and Party Crates.
    • -
    -

    kevinz000 updated:

    -
      -
    • The Syndicate reports a breakthrough in chameleon laser gun technology that will disguise its projectiles to be just like the real thing!
    • -
    - -

    07 March 2017

    -

    Supermichael777 updated:

    -
      -
    • Wannabe ninjas have been found carrying an experimental chameleon belt. The Spider clan has disavowed any involvement.
    • -
    - -

    06 March 2017

    -

    Cyberboss updated:

    -
      -
    • Map rotation has been made smoother
    • -
    -

    Gun Hog updated:

    -
      -
    • The Aux Base Construction Console now directs to the correct Base Management Console.
    • -
    • The missing Science Department access has been added to the Auxiliary Base Management Console.
    • -
    -

    Hyena updated:

    -
      -
    • Space bar is out of bussiness
    • -
    -

    MrStonedOne updated:

    -
      -
    • patched a hacky workaround for /vg/lights memory leaking crashing the server
    • -
    -

    Penguaro updated:

    -
      -
    • Changed DIR of Gas Filter for O2 in Waste Loop from 1 to 4
    • -
    -

    Sligneris updated:

    -
      -
    • 'xeno queen' AI hologram now actually uses the xeno queen sprite as a reference
    • -
    -

    Tofa01 updated:

    -
      -
    • [Omega] Fixes missing walls and wires new dock to the powergrid
    • -
    -

    XDTM updated:

    -
      -
    • Changelings can now click their fake clothing to remove it, without needing to drop the full disguise.
    • -
    -

    coiax updated:

    -
      -
    • The Bardrone and Barmaid are neutral, even in the face of reality altering elder gods.
    • -
    - -

    04 March 2017

    -

    Cyberboss updated:

    -
      -
    • You can build lattice in space again
    • -
    -

    Hyena updated:

    -
      -
    • Detective revolver/ammo now starts in their shoulder holster
    • -
    -

    Joan updated:

    -
      -
    • Weaker cult talismans take less time to imbue.
    • -
    -

    PJB3005 updated:

    -
      -
    • Rebased to /vg/station lighting code.
    • -
    -

    Supermichael777 updated:

    -
      -
    • Grey security uniforms have unique names and descriptions
    • -
    -

    Tofa01 updated:

    -
      -
    • Adds the new Centcomm Raven Battlecruiser to the purchasable shuttle list buy now get one free!
    • -
    -

    coiax updated:

    -
      -
    • CTF players start with their helmet toggled off, better to see the whites of their opponents eyes. Very briefly.
    • -
    • Existing CTF barricades are repaired between rounds, and deploy instantly when replaced.
    • -
    • Healing non-critical CTF damage is faster. Remember though, if you drop into crit, YOU DIE.
    • -
    • Admin ghosts can just click directly on the CTF controller to enable them, in addition to using the Secrets panel.
    • -
    • Cyborg radios can no longer have their inaccessible wires pulsed by EMPs.
    • -
    - -

    03 March 2017

    -

    Cyberboss updated:

    -
      -
    • You can now repair shuttles in transit space
    • -
    -

    Incoming5643 updated:

    -
      -
    • Server Owners: There is a new system for title screens accessible from config/title_screen folder.
    • -
    • This system allows for multiple rotating title screens as well as map specific title screens.
    • -
    • It also allows for hosting title screens in formats other than DMI.
    • -
    • See the readme.txt in config/title_screen for full details. remove: The previous method of title screen selection, the define TITLESCREEN, has been depreciated by this change.
    • -
    -

    Sligneris updated:

    -
      -
    • Updated sprites for the small xeno queen mode
    • -
    - -

    02 March 2017

    -

    Gun Hog updated:

    -
      -
    • Advanced camera, Slime Management, and Base Construction consoles may now be operated by drones and cyborgs.
    • -
    -

    Robustin updated:

    -
      -
    • The syndicate power beacon will now announce the distance and direction of any engines every 10 seconds.
    • -
    -

    Steelpoint updated:

    -
      -
    • Robotics and Mech Bay have seen a mapping overhaul on Boxstation.
    • -
    • A cautery surgical tool has been added to the Robotics surgical area on Boxstation.
    • -
    -

    XDTM updated:

    -
      -
    • Hallucinations have been modified to increase the creepiness factor and reduce the boring factor.
    • -
    • Added some new hallucinations.
    • -
    • Fixed a bug where the singularity hallucination was stunning for longer than intended and leaving the fake HUD crit icon permanently.
    • -
    -

    coiax updated:

    -
      -
    • Ghosts are polled if they want to play an alien larva that is about to chestburst. They are also told who is the (un)lucky victim.
    • -
    • Clones no longer gasp for air while in cloning pods.
    • -
    • Adds a new reagent, "Mime's Bane", that prevents all emoting while it is in a victim's system. Currently admin only.
    • -
    • Mappers now have an easier time adding posters, and specifying whether they're random, random official, random contraband or a specific poster.
    • -
    • Posters no longer have serial numbers when rolled up; their names are visible instead.
    • -
    -

    kevinz000 updated:

    -
      -
    • You can now craft pressure plates.
    • -
    • Pressure plates are hidden under the floor like smuggler satchels are, but you can attach a signaller to them to have it signal when a mob passes over them!
    • -
    • Bomb armor is now effective in lessening the chance of being knocked out by bombs.
    • -
    - -

    01 March 2017

    -

    Cyberboss updated:

    -
      -
    • Lobby music is no longer delayed
    • -
    - -

    28 February 2017

    -

    Cyberboss updated:

    -
      -
    • You will no longer be shown empty memories when the game starts
    • -
    • Built APCs now work again
    • -
    • Borg AI cameras now work again
    • -
    -

    Joan updated:

    -
      -
    • Anima Fragments now slam into non-Servants when bumping. This will ONLY happen if the fragment is not slowed, and slamming into someone will slightly damage the fragment and slow it severely.
    • -
    -

    Lzimann updated:

    -
      -
    • Communications console can also check the ID the user is wearing.
    • -
    -

    Supermichael777 updated:

    -
      -
    • The button now has a five second delay when detonating bombs
    • -
    -

    XDTM updated:

    -
      -
    • You can now change the input/output directons for Ore Redemption Machines by using a multitool on them with the panel open.
    • -
    • Diagnostic HUDs can now see if airlocks are shocked.
    • -
    - -

    27 February 2017

    -

    Kor, Jordie0608 and Tokiko1 updated:

    -
      -
    • Singularity containment has been replaced on box, meta, and delta with a supermatter room. The supermatter gives ample warning when melting down, so hopefully we'll see fewer 15 minute rounds ended by a loose singularity.
    • -
    • Supermatter crystals now collapse into singularities when they fail, rather than explode.
    • -
    -

    Tofa01 updated:

    -
      -
    • Stops AI And Borgs From Interfacing With Ferry Console
    • -
    -

    TrustyGun updated:

    -
      -
    • Box sprites are improved.
    • -
    -

    WJohnston updated:

    -
      -
    • New and improved BRPED beam. The old one was hideous.
    • -
    -

    coiax updated:

    -
      -
    • Drone shells are now points of interest in the orbit list.
    • -
    • Derelict drone shells now spawn with appropriate headgear.
    • -
    - -

    26 February 2017

    -

    Ausops updated:

    -
      -
    • New sprites for water, fuel and hydroponics tanks.
    • -
    -

    Joan updated:

    -
      -
    • Clockwork objects are overall easier to deconstruct:
    • -
    • Clockwork Walls now take 33% less time to slice through, Brass Windows now work like non-reinforced windows, and Pinion Airlocks now have less health and only two steps to decon(wrench, then crowbar).
    • -
    • EMPing Pinion Airlocks and Brass Windoors now has a high chance to open them and will not shock or bolt them.
    • -
    • Anima fragments will very gradually self-repair.
    • -
    -

    Tofa01 updated:

    -
      -
    • [Omega] Fixes ORM input and output directions
    • -
    • Fixes space bar kitchen freezer access level
    • -
    • Fixes giving IDs proper access for players who spawn on a ruin via a player sleeper/spawners
    • -
    • [Delta] Fixes varedited tiles causing tiles to appear as if they have no texture
    • -
    • Fixes robotic limb repair grammar issue
    • -
    - -

    25 February 2017

    -

    AnonymousNow updated:

    -
      -
    • Nerd Co. has sent pairs of thicker prescription glasses out to Nanotrasen stations, for your local geek to wear.
    • -
    -

    Basilman updated:

    -
      -
    • New box sprites
    • -
    -

    Robustin updated:

    -
      -
    • Hulks can no longer use pneumatic cannons or flamethrowers
    • -
    -

    Tofa01 updated:

    -
      -
    • [All Maps] The new and improved Centcom transportation ferry version 2.0 is out now!
    • -
    -

    coiax updated:

    -
      -
    • Cargo can now order plastic sheets to make plastic flaps. No doubt other uses for plastic will be discovered in the future.
    • -
    • To deconstruct plastic flaps, unscrew from the floor, then cut apart with wirecutters. Plastic flaps have examine tips like reinforced walls.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Science crates now have new sprites
    • -
    - -

    24 February 2017

    -

    MrStonedOne updated:

    -
      -
    • Limit on Mining Satchel of Holding Removed
    • -
    • Dumping/mass pickup/mass transfer of items is now lag checked
    • -
    • Dumping/mass pickup/mass transfer of items has a progress bar
    • -
    - -

    23 February 2017

    -

    Cyberboss updated:

    -
      -
    • Fixed a bug where the fire overlay wasn't getting removed from objects
    • -
    • The graphical delays with characters at roundstart are gone
    • -
    • The crew manifest is working again
    • -
    • Admins can now asay with ":p" and dsay with ":d"
    • -
    -

    Dannno updated:

    -
      -
    • Robust Softdrinks LLC. has sent out new vendies to the stendy.
    • -
    -

    Joan updated:

    -
      -
    • Off-station and carded AIs no longer prevent Judgement scripture from unlocking.
    • -
    -

    Nienhaus updated:

    -
      -
    • Updates ammo sprites to the new perspective.
    • -
    -

    Tofa01 updated:

    -
      -
    • Disables sound/frequency variance on cryo tube alert sound
    • -
    -

    coiax updated:

    -
      -
    • Nanotrasen reminds its employees that they have ALWAYS been able to taste. Anyone claiming that they've recently only just gained the ability to taste are probably Syndicate agents.
    • -
    - -

    22 February 2017

    -

    AnonymousNow updated:

    -
      -
    • Added Medical HUD Sunglasses. Not currently available on-station, unless you can convince Centcom to send you a pair.
    • -
    -

    Cyberboss updated:

    -
      -
    • Spawning to the station should now be a less hitchy experience
    • -
    -

    MrPerson updated:

    -
      -
    • Ion storms have several new additions:
    • -
    • 25% chance to flatly replace the AI's core lawset with something random in the config. Suddenly the AI is Corporate, deal w/ it.
    • -
    • 10% chance to delete one of the AI's core or supplied laws. Hope you treated the AI well without its precious law 1 to protect your sorry ass.
    • -
    • 10% chance that, instead of adding a random law, it will instead replace one of the AI's existing core or supplied laws with the ion law. Otherwise, it adds the generated law as normal. There's still a 100% chance of getting a generated ion law.
    • -
    • 10% chance afterwards to shuffle all the AI's laws.
    • -
    -

    TalkingCactus updated:

    -
      -
    • New characters will now have their backpack preference correctly set to "Department Backpack".
    • -
    -

    Tofa01 updated:

    -
      -
    • [Delta] Fixes missing R&D shutter near public autolathe
    • -
    -

    Xhuis updated:

    -
      -
    • Highlanders can no longer hide behind chairs and plants.
    • -
    • Highlanders no longer bleed and are no longer slowed down by damage.
    • -
    - -

    21 February 2017

    -

    Cyberboss updated:

    -
      -
    • You can now unshunt as a malfunctioning AI again
    • -
    -

    Kor updated:

    -
      -
    • You will now retain your facing when getting pushed by another mob.
    • -
    -

    Tofa01 updated:

    -
      -
    • [Z2] Fixed Centcomm shutters to have proper access levels for inspectors and other Admin given roles
    • -
    -

    coiax updated:

    -
      -
    • Refactors heart attack code, a cardiac arrest will knock someone unconscious and kill them very quickly.
    • -
    • Adds corazone, an anti-heart attack drug, made by mixing 2 parts Phenol, 1 part Lithium. A person with corazone in their system will not suffer any negative effects from missing a heart. Use it during surgery.
    • -
    • Abductor glands are now hearts, the abductor operation table now automatically injects corazone to prevent deaths during surgery. The gland will restart if it stops beating.
    • -
    • Cloning pods always know the name of the person they are cloning.
    • -
    • You can swipe a medical ID card to eject someone from the cloning pod early. The cloning pod will announce this over the radio.
    • -
    • Fresh clones have no organs or limbs, they gain them during the cloning process. Ejecting a clone too early is not recommended. Power loss will also eject a clone as before.
    • -
    • An ejected clone will take damage from being at critical health very quickly upon ejection, rather than before, where a clone could be stable in critical for up to two minutes.
    • -
    • Occupants of cloning pods do not interact with the air outside the pod.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • All shuttle engines should now be facing the right way
    • -
    - -

    20 February 2017

    -

    Cyberboss updated:

    -
      -
    • The frequncy fire alarms play at is now consistent
    • -
    -

    MrStonedOne updated:

    -
      -
    • bluespace ore cap changed from 100 ores to 500
    • -
    -

    Tofa01 updated:

    -
      -
    • [Meta] Replaces orange jumpsuit in holding cell with prisoner jumpsuits
    • -
    -

    XDTM updated:

    -
      -
    • Repairing someone else's robotic limb is instant. Repairing your own robotic limbs will still take time.
    • -
    • Repairing limbs with cable or welding will now heal more.
    • -
    -

    Xhuis updated:

    -
      -
    • Medipens are no longer reusable.
    • -
    - -

    19 February 2017

    -

    Basilman updated:

    -
      -
    • some toolboxes, very rarely, have more than one latch
    • -
    -

    Joan updated:

    -
      -
    • You can now put components, and deposit components from slabs, directly into the Ark of the Clockwork Justicar provided it actually requires components.
    • -
    • Taunting Tirade now leaves a confusing and weakening trail instead of confusing and weakening everyone in view.
    • -
    • Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown.
    • -
    -

    Tofa01 updated:

    -
      -
    • [Delta] Removes SSU From Mining Equipment Room
    • -
    • Changes centcomm ferry to require centcomm general access instead of admin permission.
    • -
    -

    coiax updated:

    -
      -
    • Nuke ops syndicate cyborgs have been split into two seperate uplink items. Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC.
    • -
    -

    grimreaperx15 updated:

    -
      -
    • Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, in addition to the normal healing they do.
    • -
    -

    ma44 updated:

    -
      -
    • Intercepted messages from a lavaland syndicate base reveals they have additional grenade and other miscellaneous equipment.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Shuttle engines have new sprites.
    • -
    - -

    18 February 2017

    -

    Cyberboss updated:

    -
      -
    • New round end animation. Inspired by @Iamgoofball
    • -
    -

    Gun Hog updated:

    -
      -
    • The Aux Base console now controls turrets made by the construction console.
    • -
    • The Aux Base may now be dropped at a random location if miners fail to use the landing remote.
    • -
    • The mining shuttle may now dock at the Aux Base's spot once the base is dropped.
    • -
    • Removed access levels on the mining shuttle so it can be used at the public dock.
    • -
    • The Aux Base's turrets now fire through glass. Reminder that the turrets need to be installed outside the base for full damage.
    • -
    • Added a base construction console to Delta Station.
    • -
    -

    Mysterious Basilman updated:

    -
      -
    • More powerful toolboxes are active in this world...
    • -
    -

    Scoop updated:

    -
      -
    • Condimasters now correctly drop their items in front of their sprite.
    • -
    -

    Tofa01 updated:

    -
      -
    • Re-Arranges And Extends Pubby Escape Hallway To Allow Larger Shuttle To Dock
    • -
    • [Meta] Fixes top left grounding rod from being destroyed by the Tesla engine.
    • -
    -

    TrustyGun updated:

    -
      -
    • Traitor mimes can now learn two new spells for 15 tc.
    • -
    • The first, Invisible Blockade, creates a 3x1 invisible wall.
    • -
    • The second, Finger Guns, allows them to shoot bullets out of their fingers.
    • -
    -

    kevinz000 updated:

    -
      -
    • You can now ride piggyback on other human beings, as a human being! To do so they must grab you aggressively and you must climb on without outside assistance without being restrained or incapacitated in any manner. They must also not be restrained or incapacitated in any manner.
    • -
    • If someone is riding on you and you want them to get off, disarm them to instantly floor them for a few seconds! It's pretty rude, though.
    • -
    -

    rock updated:

    -
      -
    • you can now harmlessly slap somebody by aiming for the mouth on disarm intent.
    • -
    • you can only slap somebody who is unarmed on help intent, restrained, or ready to slap you.
    • -
    - -

    17 February 2017

    -

    Arianya updated:

    -
      -
    • The Labour Camp rivet wall has been removed!
    • -
    • Fixed some typos in Prison Ofitser's description.
    • -
    -

    Cobby updated:

    -
      -
    • Flashes have been rebalanced to be more powerful
    • -
    -

    Cyberboss updated:

    -
      -
    • Rack construction progress bars will no longer be spammed
    • -
    • The round start timer will count down during subsystem initialization
    • -
    • Total subsystem initialization time will now be displayed
    • -
    -

    Joan updated:

    -
      -
    • His Grace no longer globally announces when He is awakened or falls to sleep.
    • -
    • His Grace is not a toolbox, even if He looks like one.
    • -
    • His Grace no longer requires organs to awaken.
    • -
    • His Grace now gains 4 force for each victim consumed, always provides stun immunity, and will, generally, take longer to consume His owner.
    • -
    • His Grace must be destroyed to free the bodies within Him.
    • -
    • Dropping His Grace while He is awake will cause you to suffer His Wrath until you hold Him again.
    • -
    • His Grace becomes highly aggressive after consuming His owner, and will hunt His own prey.
    • -
    • The Ark of the Clockwork Justicar now only costs 3 of each component to summon, but must consume an additional 7 of each component before it will activate and start counting down.
    • -
    • The presence of the Ark will be immediately announced, though the location will still only be announced after it has been active and counting down for 2 minutes.
    • -
    • The Ark also requires an additional invoker to invoke.
    • -
    -

    Lobachevskiy updated:

    -
      -
    • Fixed glass shards affecting buckled and flying mobs
    • -
    -

    MrStonedOne updated:

    -
      -
    • The game will now force hardware rendering on for all clients.
    • -
    -

    Nienhaus updated:

    -
      -
    • Drying racks have new sprites.
    • -
    -

    Swindly updated:

    -
      -
    • Trays can now be used to insert food into food processors
    • -
    -

    Thunder12345 updated:

    -
      -
    • It's ACTUALLY possible to pat people on the head now
    • -
    -

    WJohn updated:

    -
      -
    • Improved blueshift sprites, courtesy of Nienhaus.
    • -
    -

    XDTM updated:

    -
      -
    • Bluespace Crystals are now a material that can be inserted in Protolathes and Circuit Printers. Some items now require Bluespace Mesh.
    • -
    • Bluespace Crystal can now be ground in a reagent grinder to gain bluespace dust. It has no uses, but it teleports people if splashed on them, and if ingested it will occasionally cause teleportation.
    • -
    -

    coiax updated:

    -
      -
    • Engraved messages now have a UI, which any player, living or dead can access. See when the message was engraved, and upvote or downvote accordingly.
    • -
    • Admins have additional options with the UI, seeing the player ckey, original character name, and the ability to outright delete messages at the press of a button.
    • -
    -

    kevinz000 updated:

    -
      -
    • Flightsuits actually fly over people
    • -
    • Flightsuits don't interrupt pulls when you pass through doors
    • -
    - -

    16 February 2017

    -

    Cyberboss updated:

    -
      -
    • Test merged PRs are now more detailed
    • -
    -

    Steelpoint updated:

    -
      -
    • The Head of Security's Hardsuit is now equipped with a inbuilt Jetpack.
    • -
    -

    coiax updated:

    -
      -
    • The Hyperfractal Gigashuttle is now purchasable for 100,000 credits. Help Centcom by testing this very safe and efficient shuttle design. (Terms and conditions apply.)
    • -
    • The changeling power "Anatomic Panacea" now causes the changeling to vomit out zombie infections, along with headslugs and xeno infections, as before.
    • -
    • The main CTF laser gun disappears when dropped on the floor.
    • -
    -
    - -GoonStation 13 Development Team -
    - Coders: Stuntwaffle, Showtime, Pantaloons, Nannek, Keelin, Exadv1, hobnob, Justicefries, 0staf, sniperchance, AngriestIBM, BrianOBlivion
    - Spriters: Supernorn, Haruhi, Stuntwaffle, Pantaloons, Rho, SynthOrange, I Said No
    -
    -
    -

    Creative Commons License
    Except where otherwise noted, Goon Station 13 is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.
    Rights are currently extended to SomethingAwful Goons only.

    -

    Some icons by Yusuke Kamiyamane. All rights reserved. Licensed under a Creative Commons Attribution 3.0 License.

    -
    - - @@ -1336,855 +55,201 @@ -->
    -

    16 December 2017

    -

    Armhulen and lagnas2000 (+his team of amazing spriters) updated:

    -
      -
    • Mi-go have entered your realm!
    • -
    -

    Robustin updated:

    -
      -
    • Marauder shields now take twice as long to regenerate and only recharge one charge at a time.
    • -
    • Marauders now have 120hp down from 150hp.
    • -
    • The wizard event "race swap" should now stick to "safer" species.
    • -
    • Zombies are now properly stunned for a maximum of 2 seconds instead of 2/10ths of a second.
    • -
    • Zombie slowdown adjusted from -2 to -1.6.
    • -
    -

    SpaceManiac updated:

    -
      -
    • The shuttle will no longer be autocalled if the round has already ended.
    • -
    -

    Xhuis updated:

    -
      -
    • Vitality matrices don't have visible messages when someone crosses them anymore.
    • -
    - -

    15 December 2017

    -

    AverageJoe82 updated:

    -
      -
    • drones now have night vision
    • -
    • drones no longer have lights
    • -
    -

    Cruix updated:

    -
      -
    • Shuttles now place hyperspace ripples where they are about to land again.
    • -
    -

    Cyberboss updated:

    -
      -
    • Added "$include" directives to config files. These are recursive. Only config.txt will be default loaded if they are specified inside it
    • -
    • Added multi string list entry CROSS_SERVER. e.g. CROSS_SERVER Server+Name byond://server.net:1337
    • -
    • CROSS_SERVER_ADDRESS removed
    • -
    -

    Epoc updated:

    -
      -
    • Adds Cybernetic Lungs to the Cyber Organs research node
    • -
    -

    JStheguy updated:

    -
      -
    • Added 10 new assembly designs to the integrated circuit printer, the difference from current designs is purely aesthetics.
    • -
    • Added the icons for said new assembly designs to electronic_setups.dmi, changed the current electronic mechanism and electronic machine sprites.
    • -
    -

    MrStonedOne updated:

    -
      -
    • Added new admin flag, AUTOLOGIN, to control if admins start with admin powers. this defaults to on, and can be removed with -AUTOLOGIN
    • -
    • Admins with +PERMISSION may now deadmin or readmin other admins via the permission panel.
    • -
    -

    Naksu updated:

    -
      -
    • Preliminary work on tracking cliented living mobs across Z-levels to facilitate mob AI changes later
    • -
    • Tidied up some loc assignments
    • -
    • fixes the remaining loc assignments
    • -
    -

    ShizCalev updated:

    -
      -
    • Revamped gun dry-firing sounds.
    • -
    • Everyone around you will now hear when your gun goes click. You don't want to hear click when you want to hear bang!
    • -
    -

    SpaceManiac updated:

    -
      -
    • Remote signaler and other non-telecomms radio code has been cleaned up.
    • -
    -

    Xhuis updated:

    -
      -
    • Grinding runed metal and brass now produces iron/blood and iron/teslium, respectively.
    • -
    • As part of some code-side improvements, the amount of reagents you get from grinding some objects might be slightly different.
    • -
    • Some grinding recipes that didn't work, like dead mice and glowsticks, now do.
    • -
    • All-In-One grinders now correctly grind up everything, instead of one thing at a time.
    • -
    -

    nicbn updated:

    -
      -
    • Closet sprites changed.
    • -
    - -

    13 December 2017

    -

    Naksu updated:

    -
      -
    • glass shards and bananium floors no longer make a sound when "walked" over by a camera or a ghost
    • -
    -

    SpaceManiac updated:

    -
      -
    • Nonstandard power cells found in MULEbots, cyborgs, and elsewhere now have the correct description.
    • -
    -

    deathride58 updated:

    -
      -
    • Genetics will no longer have a random block completely disappear each round
    • -
    - -

    12 December 2017

    -

    Mark9013100 updated:

    -
      -
    • Medical Wardrobes now contain an additional standard and EMT labcoat.
    • -
    -

    Robustin updated:

    -
      -
    • The blood cult revive rune will now replace the souls of braindead or inactive cultists/constructs when properly invoked. These "revivals" will not count toward the revive limit.
    • -
    • The clock cult healing rune will now replace the souls of braindead or inactive cultists/constructs when left atop the rune. These "revivals" will not drain the rune's energy.
    • -
    -

    Swindly updated:

    -
      -
    • Swarmers can no longer deconstruct objects with living things in them.
    • -
    -

    kevinz000 updated:

    -
      -
    • You can now print telecomms equipment again.
    • -
    - -

    11 December 2017

    -

    Anonmare updated:

    -
      -
    • Booze-o-mats have beer
    • -
    -

    Cruix updated:

    -
      -
    • The white ship navigation computer now takes 10 seconds to designate a landing spot, and users can no longer see the syndicate shuttle or its custom landing location. If the white ship landing location would intersect the syndicate shuttle or its landing location, it will fail after the 10 seconds have elapsed.
    • -
    -

    Frozenguy5 updated:

    -
      -
    • Some hardsuits have had their melee, fire and rad armor ratings tweaked.
    • -
    -

    Improvedname updated:

    -
      -
    • cats now drop their ears and tail when butchered.
    • -
    -

    Robustin updated:

    -
      -
    • Modes not in rotation have had their "false report" weights for the Command Report standardized
    • -
    -

    SpaceManiac updated:

    -
      -
    • The MULEbots that the station starts with now show their ID numbers.
    • -
    • The dependency by Advanced Cybernetic Implants and Experimental Flight Equipment on Integrated HUDs has been restored.
    • -
    -

    kevinz000 updated:

    -
      -
    • flightsuits should no longer disappear when you take them off involuntarily
    • -
    • beam rifles actually fire striaght now
    • -
    • click catchers now actually work
    • -
    • you no longer see space in areas you normally can't see, instead of black. in reality you can still see space but it's faint enough that you can't tell so I'll say I fixed it.
    • -
    -

    uraniummeltdown updated:

    -
      -
    • Added MANY new types of airlock assembly that can be built with metal. Use metal in hand to see the new airlock assembly recipes.
    • -
    • Added new airlock types to the RCD and airlock painter
    • -
    • Vault door assemblies can be built with 8 plasteel, high security assemblies with 6 plasteel
    • -
    • Glass mineral airlocks are finally constructible. Use glass and mineral sheets on an airlock assembly in any order to make them.
    • -
    • Glass and mineral sheets are now able to be welded out of door assemblies rather than having to deconstruct the whole thing
    • -
    • Airlock painter no longer works on airlock assemblies (still works on airlocks)
    • -
    • Titanium airlocks no longer have any missing overlays
    • -
    - -

    10 December 2017

    -

    SpaceManiac updated:

    -
      -
    • External airlocks of the mining base and gulag are now cycle-linked.
    • -
    • The pAI software interface is now accessible via an action button.
    • -
    -

    Swindly updated:

    -
      -
    • You can kill yourself with a few more items.
    • -
    -

    XDTM updated:

    -
      -
    • Instead of activating randomly on speech, Godwoken Syndrome randomly grants inspiration, causing the next message to be a Voice of God.
    • -
    -

    Xhuis updated:

    -
      -
    • Flickering lights will now actually flicker and not go between emergency lights and normal lighting.
    • -
    • Emergency lights no longer stay on forever in some cases.
    • -
    -

    kevinz000 updated:

    -
      -
    • Nanotrasen would like to remind crewmembers and especially medical personnel to stand clear of cadeavers before applying a defibrillator shock. (You get shocked if you're pulling/grabbing someone being defibbed.)
    • -
    • defib shock/charge sounds upped from 50% to 75%.
    • -
    - -

    08 December 2017

    -

    Dax Dupont updated:

    -
      -
    • Fixed observer chat flavor of silicon chat.
    • -
    • Grilles now no longer revert to a pre-broken icon state when you hit them after they broke.
    • -
    -

    Dorsisdwarf updated:

    -
      -
    • Minor fixes to some techweb nodes
    • -
    • Made flight suits, combat implants, and combat modules require more nodes
    • -
    -

    Fox McCloud updated:

    -
      -
    • Slime blueprints can now make an area compatible with Xenobio consoles, regardless of the name of the new area
    • -
    -

    MrDoomBringer updated:

    -
      -
    • All stations have been outfitted with brand new Smoke Machines! They have nicer sprites now!
    • -
    -

    Shadowlight213 updated:

    -
      -
    • You now can get a medal for wasting hours talking to the secret debug tile.
    • -
    • Fixed runtime for the tile when poly's speech file doesn't exist.
    • -
    -

    Xhuis updated:

    -
      -
    • You can now make pet carriers from the autolathe, to carry around chef meat and other small animals without having to drag them. The HoP, captain, and CMO also start with carriers in their lockers for their pets.
    • -
    -

    YPOQ updated:

    -
      -
    • Fixed the camera failure, race swap, cursed items, and imposter wizard random events
    • -
    • The cursed items event no longer nullspaces items
    • -
    -

    jammer312 updated:

    -
      -
    • Action buttons now remember positions where you locked.
    • -
    • Now locking action buttons prevents them from being reset.
    • -
    - -

    07 December 2017

    -

    ShizCalev updated:

    -
      -
    • Games vending machines can now properly be rebuilt.
    • -
    • Games vending machines can now be refilled via supply crates.
    • -
    • Games Supply Crates have been added to the cargo console.
    • -
    -

    SpaceManiac updated:

    -
      -
    • Radio frequency 148.9 is once again serviced by the telecomms system.
    • -
    -

    Xhuis updated:

    -
      -
    • Added the Eminence role to clockcult! Players can elect themselves or ghosts as the Eminence from the eminence spire structure on Reebe.
    • -
    • The Eminence is incorporeal and invisible, and directs the entire cult. Anything they say is heard over the Hierophant network, and they can issue commands by middle-clicking themselves or different turfs.
    • -
    • The Eminence also has a single-use mass recall that warps all servants to the Ark chamber.
    • -
    • Added traps, triggers, and brass filaments to link them. They can all be constructed from brass sheets, and do different things and trigger in different ways. Current traps include the brass skewer and steam vent, and triggers include the pressure sensor, lever, and repeater.
    • -
    • The Eminence can activate trap triggers by clicking on them!
    • -
    • Servants can deconstruct traps instantly with a wrench.
    • -
    • Mending Mantra has been removed.
    • -
    • Clockwork scriptures have been recolored and sorted based on their functions; yellow scriptures are for construction, red for offense, blue for defense, and purple for niche.
    • -
    • Servants now spawn with a PDA and black shoes to make disguise more feasible.
    • -
    • The Eminence can superheat up to 20 clockwork walls at a time. Superheated walls are immune to hulk and mech punches, but can still be broken conventionally.
    • -
    • Clockwork walls are slightly faster to build before the Ark activates, taking an extra second less.
    • -
    • Poly no longer continually undergoes binary fission when Ratvar is in range.
    • -
    • The global records alert for servants will no longer display info that doesn't affect them since the rework.
    • -
    -

    coiax updated:

    -
      -
    • The drone dispenser on Box Station has been moved from the Testing Lab to the Morgue/Robotics maintenance tunnel.
    • -
    -

    deathride58 updated:

    -
      -
    • The default view range can now be defined in the config. The default is 15x15, which is simplified to 7 by BYOND. For reference, Goonstation's widescreen range is 21x15. Do note that changing this value will affect the title screen. The title screen images and the title screen area on the Centcom z-level will have to be updated if the default view range is changed.
    • -
    - -

    06 December 2017

    -

    Dax Dupont & Alek2ander updated:

    -
      -
    • Binary chat messages been made more visible.
    • -
    -

    Revenant Defile ability updated:

    -
      -
    • Revenant's Defile now removes salt piles
    • -
    -

    XDTM updated:

    -
      -
    • Brain damage has been completely reworked! remove: Brain damage now no longer simply makes you dumb. Although most of its effects have been shifted into a brain trauma.
    • -
    • Every time you take brain damage, there's a chance you'll suffer a brain trauma. There are many variations of brain traumas, split in mild, severe, and special.
    • -
    • Mild brain traumas are the easiest to get, can be lightly to moderately annoying, and can be cured with mannitol and time.
    • -
    • Severe brain traumas are much rarer and require extensive brain damage before you have a chance to get them; they are usually very debilitating. Unlike mild traumas, they require surgery to cure. A new surgery procedure has been added for this, the aptly named Brain Surgery. It can also heal minor traumas.
    • -
    • Special brain traumas are rarely gained in place of Severe traumas: they are either complex or beneficial. However, they are also even easier to cure than mild traumas, which means that keeping these will usually mean keeping a mild trauma along with it.
    • -
    • Mobs can only naturally have one mild trauma and one severe or special trauma.
    • -
    • Brain damage will now kill and ruin the brain if it goes above 200. If it somehow goes above 400, the brain will melt and be destroyed completely.
    • -
    • Many brain-damaging effects have been given a damage cap, making them non-lethal.
    • -
    • The Unintelligible mutation has been removed and made into a brain trauma.
    • -
    • Brain damage no longer makes using machines a living hell.
    • -
    • Abductors give minor traumas to people they experiment on.
    • -
    -

    coiax updated:

    -
      -
    • The drone dispenser on Metastation has been moved to the maintenance by Robotics.
    • -
    - -

    05 December 2017

    -

    Cyberboss updated:

    -
      -
    • Reduced the volume of showers
    • -
    -

    Dax Dupont updated:

    -
      -
    • Nanotrasen is happy to announce the pinnacle in plasma research! The Disco Inferno shuttle design is the result of decades of plasma research. Burn, baby, burn!
    • -
    -

    MrPerson & ninjanomnom updated:

    -
      -
    • Completely changed how keyboard input is read.
    • -
    • Holding two directions at the same time will now move you diagonally. This works with the arrow keys, wasd, and the numpad.
    • -
    • Moving diagonally takes twice as long as moving a cardinal direction.
    • -
    • You can use control to turn using wasd and the numpad instead of just the arrow keys.
    • -
    • Some old non-hotkey mode behaviors, especially in relation to chatbox interaction, can't be kept with the new system. Of key note: You can't type while walking. This is due to limitations of byond and the work necessary to overcome it is better done as another overhaul allowing custom controls.
    • -
    -

    Robustin updated:

    -
      -
    • Reverted changes in 3d sound system that tripled the distance that sound would carry.
    • -
    -

    SpaceManiac updated:

    -
      -
    • Energy values are now measured in joules. What was previously 1 unit is now 1 kJ.
    • -
    • Syndicate uplink implants now work again.
    • -
    -

    Xhuis updated:

    -
      -
    • Stethoscopes now inform the user if the target can be defibrillated; the user will hear a "faint, fluttery pulse."
    • -
    -

    coiax updated:

    -
      -
    • Quiet areas of libraries on station have now been equipped with a vending machine containing suitable recreational activities.
    • -
    - -

    04 December 2017

    -

    AnturK updated:

    -
      -
    • You can now record and replay holopad messages using holodisks.
    • -
    • Holodisks are printable in autolathes.
    • -
    -

    Xhuis updated:

    -
      -
    • You now need fuel in your welder to repair mechs.
    • -
    - -

    03 December 2017

    -

    ExcessiveUseOfCobblestone updated:

    -
      -
    • You can now lay (buckle!) yourself to a bed to avoid being burnt to a crisp during "the floor is lava" event.
    • -
    -

    Robustin updated:

    -
      -
    • Igniting plasma statues no longer ignores ignition temperature and only creates as much plasma as was used in its creation.
    • -
    -

    Xhuis updated:

    -
      -
    • Light fixtures now turn an ominous, dim red color when they lose power, and draw from an internal power cell to maintain it until either the cell dies (usually after 10 minutes) or power is restored.
    • -
    • You can override emergency light functionality from an APC. You can also click on individual lights as a cyborg or AI to override them individually. Traitor AIs also have a new ability that disables emergency lights across the entire station.
    • -
    -

    zennerx updated:

    -
      -
    • fixed some typos in the weapon firing mechanism description
    • -
    - -

    02 December 2017

    -

    BeeSting12 updated:

    -
      -
    • Occupand ---> Occupant on opened cryogenic pods.
    • -
    • Cyrogenic ---> Cryogenic on opened cryogenic pods.
    • +

      29 December 2017

      +

      Awesine updated:

      +
        +
      • added some things which happen to be mining scanner things to that gulag thing
      • +
      +

      CitadelStationBot updated:

      +
        +
      • Projectiles that pierce objects will no longer be thrown off course when doing so!
      • +
      • Projectiles now use /datum/point/vectors for trajectory calculations.
      • +
      • Beam rifle reflections will no longer glitch out.
      • +
      • Clown modules have been added for cyborgs! Modules: Bikehorn, Airhorn, instrumental bikehorn, clown stamp, multicolor paint, rainbow crayon, soap, razor, purple lipstick, nonstunning selfcharging creampie cannon, nonslipping selfcharging water sprayer, lollipop fabricator, metallic picket sign, mini extinguisher, laughter reagent hypospray, and the ability to hug. experimental: When emagged they get a fire spray, "super" laughter injector, and shocking or crushing hugs. Also, the module is adminspawn only at the moment.
      • +
      • "Download N research nodes" objective is now checked correctly again.
      • +
      • Objects that can have materials inserted into them only will do so on help intent
      • +
      • Play Internet Sound now has an option to show the song title to players.
      • +
      • Emagged cleanbots can acid people again
      • +
      • Headgear worn by monkeys can be affected by acid
      • +
      • The R&D console has been made more responsive by tweaking how design icons are loaded.
      • +
      • you can now pick up corgi's and pAIs, how disgustingly cute
      • +
      • Ghost lights will follow the ghost while orbiting

      CosmicScientist updated:

        -
      • You can make plushies kiss one another!
      • +
      • timestop now inverts the colours of those frozen in time!
      • +
      +

      Dax Dupont updated:

      +
        +
      • Borgs will no longer have their metal/glass/etc stacks commit sudoku when it runs out of metal. They will also show the correct amount instead of a constant of "1" on menu interaction.

      Frozenguy5 updated:

        -
      • The Particle Accelerator's wires can no longer be EMP'd
      • +
      • Soapstones now give the correct time they were placed down.
      -

      Naksu updated:

      +

      Kor updated:

        -
      • Cleans up some loc assignments
      • -
      -

      Robustin updated:

      -
        -
      • Damage examinations now include a "moderate" classification. Before minor was <30 and severe was anything 30 or above. Now minor is <25, moderate is 25 to <50, and severe is 50+.
      • -
      • Clockwork magicks will now prevent Bags of Holding from being combined on Reebe.
      • -
      • Flashes will now burn out AFTER flashing when they fail instead of being a ticking time bomb that waits to screw you over on your next attempt.
      • -
      -

      SpaceManiac updated:

      -
        -
      • The R&D Console has been given a much prettier interface.
      • -
      • Research scanner goggles now show materials and technology prospects in a nicer way.
      • -
      -

      uraniummeltdown updated:

      -
        -
      • Construct shells have a new animated sprite
      • -
      - -

      30 November 2017

      -

      ninjanomnom updated:

      -
        -
      • Reduced the max volume of sm by 1/5th and made the upper bounds only play mid delamination.
      • -
      -

      psykzz updated:

      -
        -
      • Fixing the broken turbine computer
      • -
      - -

      29 November 2017

      -

      MrStonedOne updated:

      -
        -
      • The sloth no longer suspiciously moves fast when gliding between tiles.
      • -
      • The sloth's movespeed when inhabited by a player has been lowered from once every 1/5 of a second to once every second.
      • -
      -

      SpaceManiac updated:

      -
        -
      • The techweb node for mech LMGs no longer claims to be for mech tasers.
      • -
      - -

      28 November 2017

      -

      ACCount updated:

      -
        -
      • "Machine prototype" is removed from the game.
      • -
      • Mass-spectrometers are removed. Would anyone notice if not for this changelog entry?
      • -
      -

      Cruix updated:

      -
        -
      • AI and observer diagnostic huds will now show the astar path of all bots, and Pai bots will be given a visible path to follow when called by the AI.
      • -
      -

      JJRcop updated:

      -
        -
      • Fixed the Make space ninja verb.
      • -
      -

      Naksu updated:

      -
        -
      • rejiggered botcode a little bit
      • -
      -

      SpaceManiac updated:

      -
        -
      • Admin-added "download research" objectives are now consistent with automatic ones.
      • -
      -

      improvedname updated:

      -
        -
      • toolbelts can now carry geiger counters
      • -
      -

      uraniummeltdown updated:

      -
        -
      • You can make many different types of office and comfy chairs with metal
      • -
      • Stack menus use /datum/browser
      • -
      - -

      27 November 2017

      -

      ACCount updated:

      -
        -
      • New integrated circuit components: list constructors/deconstructors. Useful for building lists and taking them apart.
      • -
      • Fixed multiple bugs in integrated circuits UIs, improved overall usability.
      • +
      • During Christmas you will be able to click on the tree in the Chapel to receive one present per round. That present can contain any item in the game.

      More Robust Than You updated:

        -
      • Fixed cult leaders being de-culted upon election if they had a mindshield implant
      • +
      • Vending machines now use TGUI
      • +
      • The Radiance can now enter the chapel

      Naksu updated:

        -
      • Hopefully fixed mesons granting the ability to hear people through walls.
      • +
      • frying oil actually works
      -

      Okand37 updated:

      +

      Nero1024 updated:

        -
      • Re-organized Delta's departmental protolathes for all departments.
      • -
      • Re-organized Delta's ORM placement by connecting it to the mining office, which now has a desk for over handing materials to the outside.
      • -
      • Added a second Nanomed to Deltastation's medical bay.
      • -
      • Nanotrasen has decided to add proper caution signs to most docking ports on Deltastation, warning individuals to be cautious around these areas.
      • -
      • Two health sensors are now placed in Deltastation's robotics area for medibots.
      • -
      • Atmospheric Technicians at Deltastation can now open up their gas storage in the supermatter power area as intended.
      • +
      • blast doors and shutters will now play a sound when they open and close.
      • +
      +

      PsyKzz updated:

      +
        +
      • Jaws of life can now cut handcuffs
      • +
      +

      Robustin updated:

      +
        +
      • The EMP door shocking effect has a new formula. Heavy EMP's will no longer shock doors while light EMP's have a 10% chance (down from 13.33%).
      • +
      • Hallucinations will no longer show open doors "bolting".
      • +
      • Splashing a book with ethanol should no longer produce errant messages.
      • +
      • Dead cultists can now be moved across the "line" on Reebe.
      • +
      • The action button for spells should now accurately reflect when the spell is on cooldown
      • +
      • You can now reliably use the button for "touch" spells to "recall" the spell

      WJohnston updated:

        -
      • Fixed a case where items would sometimes be placed underneath racks.
      • +
      • Syndicate nuke op infiltrator shuttle is no longer lopsided.

      XDTM updated:

        -
      • Viruses' healing symptoms have been reworked!
      • -
      • All existing healing symptoms have been removed in favour of new ones.
      • -
      • Weight Even and Weight Gain have been removed, so hunger can be used for balancing in symptoms.
      • -
      • Starlight Condensation heals toxin damage if you're in space using starlight as a catalyst. Being up to two tiles away also works, as long as you can still see it, but slower.
      • -
      • Toxolysis (level 7) rapidly cleanses all chemicals from the body, with no exception.
      • -
      • Cellular Molding heals brute damage depending on your body temperature: the higher the temperature, the faster the healing. Requires above-average temperature to activate, and the speed heavily increases while on fire.
      • -
      • Regenerative Coma (level 8) causes the virus to send you into a deep coma when you are heavily damaged (>70 brute+burn damage). While you are unconscious, either from the virus or from other sources, the virus will heal both brute and burn damage fairly quickly. Sleeping also works, but at reduced speed.
      • -
      • Tissue Hydration heals burn damage if you are wet (negative fire stacks) or if you have water in your bloodstream.
      • -
      • Plasma Fixation (level 8) stabilizes temperature and heals burns while plasma is in your body or while standing in a plasma cloud. Does not protect from the poisoning effects of plasma.
      • -
      • Radioactive Resonance gives a mild constant brute and burn healing while irradiated. The healing becomes more intense if you reach higher levels of radiation, but is still less than the alternatives.
      • -
      • Metabolic Boost (level 7) doubles the rate at which you process chemicals, good and bad, but also increases hunger tenfold.
      • +
      • Rebalanced healing symptoms.
      • +
      • Cellular Molding was replaced by Nocturnal Regeneration, which only works in darkness.
      • +
      • All healing symptoms now heal both brute and burn damage, although the basic ones will still be more effective on one damage type.
      • +
      • Plasma Fixation and Radioactive Metabolism heal toxin damage, offsetting the damage done by their healing sources.
      • +
      • Changed healing symptoms' stats, generally making them less punishing.
      -

      kevinz000 updated:

      +

      Xhuis updated:

        -
      • Cryo cells can now be properly rotated with a wrench.
      • +
      • You can no longer elect two Eminences simultaneously.
      • +
      • The Eminence no longer drifts in space.
      • +
      • The Eminence's mass recall now works on unconscious servants.
      • +
      • The Eminence's messages now have follow links for observers.
      • +
      • Floors blessed with holy water prevent servants from warping in and the Eminence from crossing them.
      • +
      • The Eminence can never enter the Chapel.
      • +
      • Maintenance drones and cogscarabs can now spawn with holiday-related hats on some holidays!
      • +
      +

      coiax updated:

      +
        +
      • Golems can now wear labcoats.
      • +
      • The kitchen gibber must be anchored in order to use.
      • +
      • The gibber requires bodies to have no external items or equipment.
      • +
      • Ghosts can now use the *spin and *flip emotes.
      • +
      +

      deathride58 updated:

      +
        +
      • Praise the lord! The shift+scroll hotkey to zoom in/out as a ghost works properly again!
      • +
      • Mediborgs now have an alternate sprite taken from Paradise, featuring heavy modifications from Vivi.
      • +
      • Standard security borgs now has two alternative sprites that were previously unused in TG's files!
      • +
      • Engineering borgs now have an alternative sprite that was previously unused in TG's files.
      • +
      • Mining borgs are now able to choose between the current lavaland paintjob or the old asteroid paintjob.
      • +
      • Dogborgs are now modularized.
      • +
      • All of the copypasta brought by the new borg icons has been removed. Custom borg sprites are now modular.
      • +
      • The additional modules in the borg module select menu have been modularized.
      • +
      • The module select icon file is now able to be modular. This does not yet restore the regressed dogborg module select icons.

      ninjanomnom updated:

        -
      • You can now make a new tasty traditional treat: butterdogs. Watch out, they're slippery.
      • +
      • Non movement keys pressed while moving no longer stop movement.
      • +
      • The backup shuttle has it's own area now and you should no longer occasionally be teleported there by the arena shuttle.
      • +
      • The auxiliary mining base can no longer be placed on top of lava, indestructible turfs, or inside particularly large ruins.
      -

      25 November 2017

      -

      CosmicScientist updated:

      -
        -
      • bolas are back in tablecrafting!
      • -
      -

      Dorsisdwarf updated:

      -
        -
      • Catpeople are now distracted instead of debilitated
      • -
      • Normal cats now go for laser pointers
      • -
      -

      SpaceManiac updated:

      -
        -
      • You can no longer buckle people to roller beds from inside of a locker.
      • -
      -

      YPOQ updated:

      -
        -
      • AIs and cyborgs can interact with unscrewed airlocks and APCs.
      • -
      -

      ninjanomnom updated:

      -
        -
      • Fixes thermite burning hotter than the boiling point of stone
      • -
      -

      zennerx updated:

      -
        -
      • Zombies don't reanimate with no head!
      • -
      - -

      24 November 2017

      +

      16 December 2017

      ACCount updated:

        -
      • Removed "console screen" stock part. Just use glass sheets instead.
      • -
      -

      More Robust Than You updated:

      -
        -
      • Spessmen are now smart enough to realize you don't need to turn around to pull cigarette butts
      • -
      -

      SpaceManiac updated:

      -
        -
      • Fix water misters being inappropriately glued to hands in some cases.
      • -
      • Some misplaced decals in the Hotel brig have been corrected.
      • -
      -

      ninjanomnom updated:

      -
        -
      • Custom shuttle dockers can no longer place docking regions inside other custom docker regions.
      • -
      - -

      23 November 2017

      -

      GupGup updated:

      -
        -
      • Fixes hostile mobs attacking surrounding tiles when trying to attack someone
      • -
      -

      MrStonedOne and Jordie updated:

      -
        -
      • As a late note, serverops be advise that mysql is no longer supported. existing mysql databases will need to be converted to mariadb
      • -
      -

      Robustin updated:

      -
        -
      • RND consoles will no longer display options for machines or disks that are not connected/inserted.
      • -
      -

      ShizCalev updated:

      -
        -
      • Aliens in soft-crit will now use the correct sprite.
      • -
      -

      XDTM updated:

      -
        -
      • Added two new symptoms: one allows viruses to still work while dead, and allows infection of undead species, and one allows infection of inorganic species (such as plasmapeople or golems).
      • -
      - -

      22 November 2017

      -

      ACCount updated:

      -
        -
      • Old integrated circuit save file format is ditched in favor of JSON. Readability, both of save files and save code, is improved greatly.
      • -
      • Integrated circuit panels now open with screwdriver instead of crowbar, to match every single other thing on this server.
      • -
      • Integrated circuit printer now stores up to 25 metal sheets.
      • -
      • Fixed integrated circuit rechargers not recharging guns properly and not updating icons.
      • -
      • Fixed multiple bugs in integrated circuits UIs, improved overall usability.
      • +
      • "Tail removal" and "tail attachment" surgeries are merged with "organ manipulation".
      • +
      • New sprites for reflectors. They finally look like something.
      • +
      • You can lock reflector's rotation by using a screwdriver. Use the screwdriver again to unlock it.
      • +
      • Reflector examine now shows the current angle and rotation lock status.
      • +
      • You can now use a welder to repair damaged reflectors.
      • +
      • Multiple reflector bugs are fixed.

      Anonmare updated:

        -
      • Laserpoitners now incapcitate catpeople
      • +
      • Adds new grindables
      • +
      +

      AnturK updated:

      +
        +
      • Dying in shapeshifted form reverts you to the original one. (You're still dead)
      • +
      +

      Armhulen updated:

      +
        +
      • Wizards may now shapeshift into viper spiders.
      • +
      +

      Armhulen and lagnas2000 (+his team of amazing spriters) updated:

      +
        +
      • Mi-go have entered your realm!

      AutomaticFrenzy updated:

      • cell chargers weren't animating properly
      • disable_warning wasn't getting checked and the chat was being spammed
      -

      Code by Pyko, Ported by Frozenguy5 updated:

      +

      AverageJoe82 updated:

        -
      • Rat Kebabs and Double Rat Kebabs have been added!
      • +
      • drones now have night vision
      • +
      • drones no longer have lights
      -

      Cyberboss updated:

      +

      BeeSting12 updated:

        -
      • Server tools API changed to version 3.2.0.1
      • -
      • "ahelp" chat command can now accept a ticket number as opposed to a ckey
      • +
      • Occupand ---> Occupant on opened cryogenic pods.
      • +
      • Cyrogenic ---> Cryogenic on opened cryogenic pods.
      -

      DaxDupont updated:

      -
        -
      • CentCom has issued a firmware updated for the operating computers. It is no longer needed to manually refresh the procedure and patient status.
      • -
      • Proximity sensors no longer beep when unarmed.
      • -
      • Plant trays will now properly process fluorine and adjust toxins and water contents.
      • -
      -

      Francinum updated:

      -
        -
      • The shuttle build plate is now better sized for all stations.
      • -
      -

      Iamgoofball updated:

      -
        -
      • fixes grammar on logic gate descriptions
      • -
      • fixes grammar on list circuits
      • -
      • fixes grammar on trig circuits
      • -
      • fixed grammar on output circuits
      • -
      -

      JJRcop updated:

      -
        -
      • Fixes changeling eggs not putting the changeling in control if the brainslug is destroyed before hatching.
      • -
      • The silicon airlock menu looks a little more like it used to.
      • -
      -

      Kor updated:

      -
        -
      • Blobbernauts will no longer spawn if a player is not selected to control it, preventing AI blobbernauts from running off the blob and to their deaths.
      • -
      • Following complaints that cargo has been selling all the materials they receive rather than distributing them, mineral exporting has been removed.
      • -
      -

      MMMiracles updated:

      -
        -
      • Power regen on the regular tesla relay has been reduced to 50, from 150.
      • -
      -

      Naksu updated:

      -
        -
      • Sped up saycode to remove free lag from highpop
      • -
      • Using a chameleon projector will now dismount you from any vehicles you are riding, in order to prevent wacky space glitches and being sent to a realm outside space and time.
      • -
      -

      Shadowlight213 updated:

      -
        -
      • Added round id to the status world topic
      • -
      -

      ShizCalev updated:

      -
        -
      • Chameleon goggles will no longer go invisible when selecting Optical Tray scanners.
      • -
      • Engineering and Atmos scanner goggles will now have correctly colored inhand sprites.
      • -
      • The computers on all maps have have been updated for the latest directional sprite changes. Please report any computers facing in strange directions to your nearest mapper.
      • -
      • MetaStation - The consoles in medbay have had their directions corrected.
      • -
      • The Nanotrasen logo on modular computers has been fixed, rejoice!
      • -
      • PubbyStation - Unpowered air injectors in various locations have been fixed.
      • -
      • MetaStation - Air injector leading out of the incinerator has been fixed
      • -
      • MetaStation - Corrected a couple maintenance airlocks being powered by the wrong areas.
      • -
      • Computers will no longer rotate incorrectly when being deconstructed.
      • -
      • You can now rotate computer frames during construction.
      • -
      • Chairs, PA parts, infrared emitters, and doppler arrays will now rotate clockwise.
      • -
      • Throwing drinking glasses and cartons will now consistently cause them to break!
      • -
      • Humans missing legs or are legcuffed will no longer move slower in areas without gravity.
      • -
      • The structures external to stations are now properly lit. Make sure you bring a flashlight.
      • -
      • Computers will no longer delete themselves when being built, whoops!
      • -
      • Space cats will no longer have a smashed helmet when they lay down.
      • -
      -

      Skylar Lineman, your local R&D moonlighter updated:

      -
        -
      • Research has been completely overhauled into the techweb system! No more levels, the station now unlocks research "nodes" with research points passively generated when there is atleast one research server properly cooled, powered, and online.
      • -
      • R&D lab has been replaced by the departmental lathe system on the three major maps. Each department gets a lathe and possibly a circuit imprinter that only have designs assigned by that department.
      • -
      • The ore redemption machine has been moved into cargo bay on maps with decentralized research to prevent the hallways from becoming a free for all. Honk!
      • -
      • You shouldn't expect balance as this is the initial merge. Please put all feedback and concerns on the forum so we can revise the system over the days, weeks, and months, to make this enjoyable for everyone. Heavily wanted are ideas of how to add more ways of generating points.
      • -
      • You can get techweb points by setting off bombs with an active science doppler array listening. The bombs have to have a theoretical radius far above maxcap to make a difference. You can only go up, not down, in radius, so you can't get 6 times the points with 6 TTVs. The algorithm is exponentially/logarithmically scaled to prevent "world destroyer" bombs from instantly finishing research.
      • -
      -

      SpaceManiac updated:

      -
        -
      • HUDs from mechs and helmets no longer conflict with HUD glasses and no longer inappropriately remove implanted HUDs.
      • -
      • Chasm code has been refactored to be more sane.
      • -
      • Building lattices over chasms no longer sometimes deletes the chasm.
      • -
      • Ladders have been refactored and should be far less buggy.
      • -
      • Jacob's ladder actually works again.
      • -
      • Pizza box stacking works again.
      • -
      • Fix some permanent-on and permanent-off bugs caused by the HUD stacking change.
      • -
      -

      WJohnston updated:

      -
        -
      • A bunch of new turf decals for mappers to play with, coming in yellow, white, and red varieties!
      • -
      • Green banded default airlocks now have extended click area like all other airlocks.
      • -
      -

      Y0SH1 M4S73R updated:

      -
        -
      • The R&D Server's name is now improper.
      • -
      • The R&D Server now has an explanation of what it does.
      • -
      -

      arsserpentarium updated:

      -
        -
      • now lists should work properly
      • -
      -

      duncathan updated:

      -
        -
      • The RPD has a shiny new UI!
      • -
      • The RPD can now paint pipes as it lays them, for quicker piping projects.
      • -
      • Atmos scrubbers (vent and portable) can now filter any and all gases.
      • -
      -

      ike709 updated:

      -
        -
      • Added new vent and scrubber sprites by Partheo.
      • -
      • Fixed some computers facing the wrong direction.
      • -
      -

      jammer312 updated:

      -
        -
      • fixed conjuration spells forgetting about conjured items
      • -
      -

      kevinz000 updated:

      -
        -
      • purple bartender suit and apron added to clothesmates!
      • -
      • long hair 3 added, check it out. both have sprites from okand!
      • -
      -

      nicbn updated:

      -
        -
      • Now rolling beds and office chairs have a sound!
      • -
      -

      oranges updated:

      -
        -
      • Removed the shocker circuit
      • -
      -

      psykzz updated:

      -
        -
      • Grilles have new damaged and default sprites
      • -
      • Added TGUI for Turbine computer
      • -
      -

      tserpas1289 updated:

      -
        -
      • Any suit that could hold emergency oxygen tanks can now also hold plasma man internals
      • -
      • Hydroponics winter coats now can hold emergency oxygen tanks just like the other winter coats.
      • -
      • Plasma men jumpsuits can now hold accessories like pocket protectors and medals.
      • -
      -

      zennerx updated:

      -
        -
      • fixed a bug that made you try and scream while unconscious due to a fire
      • -
      • Skateboard crashes now give slight brain damage!
      • -
      • Using a helmet prevents brain damage from the skateboard!
      • -
      - -

      15 November 2017

      -

      Fury updated:

      -
        -
      • Added new sprites for the Heirophant Relay (clock cultist telecomms equipment).
      • -
      -

      Naksu updated:

      -
        -
      • Removed fire-related free lag. change: fire alarms and cameras no longer work after being ripped off a wall by a singulo
      • -
      • Minor speedups to movement processing. change: Fat mobs no longer gain temperature by running.
      • -
      -

      Robustin updated:

      -
        -
      • Cult population scaling no longer operates on arbitrary breakpoints. Each additional player between the between the breakpoints will add to the "chance" that an additional cultist will spawn.
      • -
      • On average you will see less roundstart cultists in lowpop and more roundstart cultists in highpop.
      • -
      • Damage examinations now include a "moderate" classification. Before minor was <30 and severe was anything 30 or above. Now minor is <25, moderate is 25 to <50, and severe is 50+.
      • -
      • The tesla will now move toward power beacons at a significantly slower rate.
      • -
      -

      SpaceManiac updated:

      -
        -
      • The post-round station integrity report is now functional again.
      • -
      -

      ninjanomnom updated:

      -
        -
      • Gas overlays no longer block clicks, on 512
      • -
      - -

      14 November 2017

      -

      ike709 updated:

      -
        -
      • Added directional computer sprites. Maps haven't been changed yet.
      • -
      -

      psykzz updated:

      -
        -
      • AI Airlock UI to use TGUI
      • -
      • Allow AI to swap between electrified door states without having to un-electrify first.
      • -
      -

      selea/arsserpentarium updated:

      -
        -
      • Integrated circuits have been added to Research!
      • -
      • You can use these to create devices with very complex behaviors.
      • -
      • Research the Integrated circuits printer to get started.
      • -
      - -

      13 November 2017

      Cobby updated:

      • The Xray now only hits the first mob it comes into contact with instead of being outright removed from the game.
      -

      Floyd / Qustinnus updated:

      +

      Code by Pyko, Ported by Frozenguy5 updated:

        -
      • Reebe now has ambience sounds
      • +
      • Rat Kebabs and Double Rat Kebabs have been added!
      -

      Floyd / Qustinnus: updated:

      +

      CosmicScientist updated:

        -
      • Adds a few sound_loop datums to machinery.
      • +
      • bolas are back in tablecrafting!
      -

      Frozenguy5 updated:

      +

      Cruix updated:

        -
      • Broken cable cuffs no longer has an invisible sprite.
      • +
      • Shuttle navigation computers can now place new transit locations over the shuttle's current position.
      -

      PKPenguin321 updated:

      -
        -
      • Welders must now be screwdrivered open to reveal their fuel tank.
      • -
      • You can empty welders into open containers (like beakers or glasses) when they're screwdrivered open.
      • -
      • You can now insert any chemical into a welder, but all most will do is clog the fuel. Welding fuel will refuel it as usual. Plasma in welders tends to explode.
      • -
      -

      Qbopper and JJRcop updated:

      -
        -
      • The default internet sound volume was changed from 100 to 25. Stop complaining in OOC about your ears!
      • -
      -

      SpaceManiac updated:

      -
        -
      • Posters may no longer be placed on diagonal wall corners.
      • -
      -

      WJohnston updated:

      -
        -
      • Removes stationary docking ports for syndicate infiltrator ships on all maps. Use the docking navigator computer instead! This gives the white ship and syndicate infiltrator more room to navigate and place custom locations that are otherwise occupied by fixed shuttle landing zones that are rarely used.
      • -
      -

      Xhuis updated:

      -
        -
      • Deep fryers now have sound.
      • -
      • Deep fryers now use cooking oil, a specialized reagent that becomes highly damaging at high temperatures. You can get it from grinding soybeans and meat.
      • -
      • Deep fryers now become more efficient with higher-level micro lasers, using less oil and frying faster.
      • -
      • Deep fryers now slowly use oil as it fries objects, instead of all at once.
      • -
      • You can now correctly refill deep fryers with syringes and pills.
      • -
      -

      nicn updated:

      -
        -
      • Damage from low pressure has been doubled.
      • -
      -

      ninjanomnom updated:

      -
        -
      • You can now select a nearby area to expand when using a blueprint instead of making a new area.
      • -
      • New shuttle areas can be created using blueprints. This is currently not useful but will be used later for shuttle construction.
      • -
      • Blueprints can modify existing areas on station.
      • -
      • Blueprint functionality has been added to the debug tab as a verb.
      • -
      - -

      12 November 2017

      Cyberboss updated:

      • Clockwork slabs no longer refer to components
      - -

      11 November 2017

      +

      Dax Dupont updated:

      +
        +
      • Nanotrasen is happy to announce the pinnacle in plasma research! The Disco Inferno shuttle design is the result of decades of plasma research. Burn, baby, burn!
      • +
      +

      Dax Dupont & Alek2ander updated:

      +
        +
      • Binary chat messages been made more visible.
      • +

      DaxDupont updated:

        -
      • Medbots can inject from one tile away again.
      • +
      • Fancy boxes(ie: donut boxes) now show the proper content amount in the sprite and no longer go invisible when empty.
      -

      SpaceManiac updated:

      +

      Dorsisdwarf updated:

        -
      • The detective and heads of staff are no longer attacked by portable turrets.
      • +
      • Catpeople are now distracted instead of debilitated
      • +
      • Normal cats now go for laser pointers
      -

      deathride58 updated:

      +

      Epoc updated:

        -
      • You can no longer delete girders, lattices, or catwalks with the RPD
      • -
      • Fixes runtimes that occur when clicking girders, lattices, catwalks, or disposal pipes with the RPD in paint mode
      • +
      • Adds Cybernetic Lungs to the Cyber Organs research node
      -

      ninjanomnom updated:

      +

      ExcessiveUseOfCobblestone updated:

        -
      • Fixes ruin cable spawning and probably some other bugs
      • -
      - -

      10 November 2017

      -

      Anonmare updated:

      -
        -
      • Adds an organ storage bag to the syndicate medborg.
      • -
      -

      AnturK updated:

      -
        -
      • Dying in shapeshifted form reverts you to the original one. (You're still dead)
      • +
      • You can now lay (buckle!) yourself to a bed to avoid being burnt to a crisp during "the floor is lava" event.

      Floyd / Qustinnus updated:

        @@ -2195,43 +260,127 @@
      • Adds about 30 new ambience sounds
      • added new defines for ambience lists.
      +

      Floyd / Qustinnus: updated:

      +
        +
      • Adds a few sound_loop datums to machinery.
      • +
      +

      Fox McCloud updated:

      +
        +
      • Slime blueprints can now make an area compatible with Xenobio consoles, regardless of the name of the new area
      • +
      +

      Francinum updated:

      +
        +
      • The shuttle build plate is now better sized for all stations.
      • +
      +

      Frozenguy5 updated:

      +
        +
      • Broken cable cuffs no longer has an invisible sprite.
      • +
      +

      Fury updated:

      +
        +
      • Added new sprites for the Heirophant Relay (clock cultist telecomms equipment).
      • +
      +

      Gun Hog updated:

      +
        +
      • The GPS item now correctly changes its name when the GPS tag is changed.
      • +
      +

      GupGup updated:

      +
        +
      • Fixes hostile mobs attacking surrounding tiles when trying to attack someone
      • +

      Iamgoofball updated:

      • Cooldown on the Ripley's mining drills has been halved.
      • The frequency of the Ripley's ore pulse has been doubled.
      +

      Improvedname updated:

      +
        +
      • Reverts katana's to its orginal size being huge
      • +
      +

      JJRcop updated:

      +
        +
      • The heart of darkness revives you as a shadowperson if you aren't one already.
      • +
      +

      JStheguy updated:

      +
        +
      • Added 10 new assembly designs to the integrated circuit printer, the difference from current designs is purely aesthetics.
      • +
      • Added the icons for said new assembly designs to electronic_setups.dmi, changed the current electronic mechanism and electronic machine sprites.
      • +

      Jalleo updated:

      • Removed a variable to state which RCD's can deconstruct reinforced walls
      • Made combat (ERT ones) and admin RCDs able to deconstruct r walls alongside borg ones
      +

      JamieH updated:

      +
        +
      • Buildmode map generators will now show you a preview of the area you're changing
      • +
      • Buildmode map generators will now ask before nuking the map
      • +
      • Buildmode map generator corners can now only be set by left clicking
      • +

      Kor updated:

        -
      • Cult mode will once again print out names at round end.
      • +
      • Blob is now a side antagonist.
      • +
      • Event and admin blobs will now be able to choose their spawn location.
      • +
      • Blob can now win in any mode by gaining enough tiles to reach Critical Mass.
      • +
      • Blobs that have Critical Mass have unlimited points, and a minute after achieving critical mass, they will spread to every tile on station, killing anyone still on board and ending the round.
      • +
      • Using an analyzer on a blob will now reveal its progress towards Critical Mass.
      • +
      • The blob event is now more common.
      • +
      +

      Kor and JJRcop updated:

      +
        +
      • Added vampires. They will be available as a roundstart race during the Halloween holiday event.
      • +
      +

      MMMiracles updated:

      +
        +
      • Power regen on the regular tesla relay has been reduced to 50, from 150.

      Mark9013100 updated:

        -
      • Deltastation now has a Whiteship.
      • -
      • Charcoal bottles have been renamed, and have been given a more informative description.
      • +
      • The Medical Cloning manual has been updated.

      Mercenaryblue updated:

        -
      • spellchecked the hotel staff.
      • -
      • Added frog masks. Reeeeeeeeee!!
      • +
      • when decapitated, banana-flavored cream no longer hovers where your head used to be.

      More Robust Than You updated:

        -
      • Blobbernauts and spores are no longer killed by blob victory
      • -
      • New blob overminds off the station Z level are moved to the station
      • -
      • You can now use banhammers as a weapon
      • -
      • Monkeys can no longer transmit diseases through hardsuits
      • -
      • Xenobio blobbernauts can no longer walk on blob tiles
      • +
      • EI NATH! now causes a flash of light
      • +
      +

      MrDoomBringer updated:

      +
        +
      • All stations have been outfitted with brand new Smoke Machines! They have nicer sprites now!
      • +
      +

      MrPerson & ninjanomnom updated:

      +
        +
      • Completely changed how keyboard input is read.
      • +
      • Holding two directions at the same time will now move you diagonally. This works with the arrow keys, wasd, and the numpad.
      • +
      • Moving diagonally takes twice as long as moving a cardinal direction.
      • +
      • You can use control to turn using wasd and the numpad instead of just the arrow keys.
      • +
      • Some old non-hotkey mode behaviors, especially in relation to chatbox interaction, can't be kept with the new system. Of key note: You can't type while walking. This is due to limitations of byond and the work necessary to overcome it is better done as another overhaul allowing custom controls.
      • +
      +

      MrStonedOne updated:

      +
        +
      • Created a system to profile code on a line by line basis and return detailed info about how much time was spent (in milliseconds) on each line(s).
      • +
      +

      MrStonedOne and Jordie updated:

      +
        +
      • As a late note, serverops be advise that mysql is no longer supported. existing mysql databases will need to be converted to mariadb

      Naksu updated:

        -
      • Added deterministic output slots to the slime processor
      • -
      • Fixed some interactions with ghosts and items
      • -
      • Nonhumans such as monkeys can now be scanned for chemicals with the health analyzer.
      • +
      • Pinned notes will now show up on vault, abductor, centcom and large glass airlocks.
      • +
      • Removed a misleading message when handling full stacks of sheets.
      • +
      • Pre-filled glass bottles (uplink, medbay, botany) will now give visual feedback about how much stuff is left inside, and the color of contents will match an empty bottle being filled with the same reagent.
      • +
      • Player-controlled "neutral" mobs such as minebots are now considered valid targets by clock cult's ocular wardens.
      • +
      +

      Okand37 updated:

      +
        +
      • Re-organized Delta's departmental protolathes for all departments.
      • +
      • Re-organized Delta's ORM placement by connecting it to the mining office, which now has a desk for over handing materials to the outside.
      • +
      • Added a second Nanomed to Deltastation's medical bay.
      • +
      • Nanotrasen has decided to add proper caution signs to most docking ports on Deltastation, warning individuals to be cautious around these areas.
      • +
      • Two health sensors are now placed in Deltastation's robotics area for medibots.
      • +
      • Atmospheric Technicians at Deltastation can now open up their gas storage in the supermatter power area as intended.

      Okand37 (DeltaStation Updates) updated:

        @@ -2244,27 +393,46 @@
      • Bar now has a door from the backroom to the theatre stage
      • Tweaked Locker Room/Dormitories
      +

      PKPenguin321 updated:

      +
        +
      • You can now use beakers/cups/etc that have welding fuel in them on welders to refuel them.
      • +
      +

      Qbopper and JJRcop updated:

      +
        +
      • The default internet sound volume was changed from 100 to 25. Stop complaining in OOC about your ears!
      • +
      +

      Revenant Defile ability updated:

      +
        +
      • Revenant's Defile now removes salt piles
      • +
      +

      Robustin updated:

      +
        +
      • The smoke machine now properly generates transparent smoke, transmits chemicals, and displays the proper icons.
      • +
      +

      Shadowlight213 updated:

      +
        +
      • Added round id to the status world topic
      • +

      ShizCalev updated:

        -
      • You can now -actually- load pie cannons.
      • -
      • The captain's winter coat can now hold a flashlight.
      • -
      • The captain's and security winter coats can now hold internals tanks.
      • -
      • All winter coats can now hold toys, lighters, and cigarettes.
      • -
      • The captain's hardsuit can now hold pepperspray.
      • -
      • Updated the Test Map debugging verb to report more issues regarding APCs. DELTASTATION
      • -
      • Reverted Okand37's morgue changes which broke power in the area.
      • -
      • Corrected wrong area on the Southern airlock leading into electrical maintenance. ALL STATIONS
      • -
      • Corrected numerous duplicate APCs in areas which led to power issues.
      • +
      • You can no longer build reinforced floors directly on top of dirt, asteroid sand, ice, or beaches. You'll have to first construct flooring on top of it instead.
      • +
      • Corrected mapping issues introduced with the latest SM engine/radiation update across all relevant maps.
      • +
      • The tools on the Caravan Ambush space ruin have had their speeds corrected.
      • +
      • Slappers will no longer appear as a latex balloon in your hand.
      • +
      • Renault now has a comfy new bed on Metastation!
      • +
      • Engineering cyborgs now have access to geiger counters.
      • +
      +

      Skylar Lineman, your local R&D; moonlighter updated:

      +
        +
      • Research has been completely overhauled into the techweb system! No more levels, the station now unlocks research "nodes" with research points passively generated when there is atleast one research server properly cooled, powered, and online.
      • +
      • R&D; lab has been replaced by the departmental lathe system on the three major maps. Each department gets a lathe and possibly a circuit imprinter that only have designs assigned by that department.
      • +
      • The ore redemption machine has been moved into cargo bay on maps with decentralized research to prevent the hallways from becoming a free for all. Honk!
      • +
      • You shouldn't expect balance as this is the initial merge. Please put all feedback and concerns on the forum so we can revise the system over the days, weeks, and months, to make this enjoyable for everyone. Heavily wanted are ideas of how to add more ways of generating points.
      • +
      • You can get techweb points by setting off bombs with an active science doppler array listening. The bombs have to have a theoretical radius far above maxcap to make a difference. You can only go up, not down, in radius, so you can't get 6 times the points with 6 TTVs. The algorithm is exponentially/logarithmically scaled to prevent "world destroyer" bombs from instantly finishing research.

      SpaceManiac updated:

        -
      • Ghosts can no longer create sparks from the hand teleporter's portals.
      • -
      • Digging on Lavaland no longer shows two progress bars.
      • -
      • The holodeck now has an "Offline" option.
      • -
      • Injury and crit overlays are now scaled properly for zoomed-out views.
      • -
      • Already-downloaded software is now hidden from the NTNet software downloader.
      • -
      • The crafting, language, and building buttons are now positioned correctly in zoomed-out views.
      • -
      • Bluespace shelter walls no longer smooth with non-shelter walls and windows.
      • +
      • Admins can once again spawn nuke teams on demand.

      Swindly updated:

        @@ -2280,6 +448,10 @@
        • Spamming runes / battlecries / etc will no longer trigger spam prevention
        +

        Thunder12345 updated:

        +
          +
        • Sentient cats no longer forget to fall over when they die
        • +

        WJohnston updated:

        • Ancient station lighting fixed on beta side (medical and atmos remains)
        • @@ -2290,131 +462,24 @@

        Xhuis updated:

          -
        • Ratvar and Nar-Sie plushes now have a unique interaction.
        • -
        • Clockwork marauders are now on harm intent.
        • -
        • The Clockwork Marauder scripture now takes five seconds longer to invoke per marauder summoned in the last 20 seconds, capping at 30 extra seconds.
        • -
        • Clockwork marauders no longer gain a health bonus when war is declared.
        • -
        • Moved the BoxStation deep fryers up one tile.
        • -
        • Microwaves have new sounds!
        • +
        • Cogged APCs can now be correctly unlocked with an ID card.
        • +
        +

        Y0SH1 M4S73R updated:

        +
          +
        • The R&D; Server's name is now improper.
        • +
        • The R&D; Server now has an explanation of what it does.
        • +
        +

        Y0SH1_M4S73R updated:

        +
          +
        • Disabling leg actuators sets the power drain per step to the correct value.

        YPOQ updated:

        • EMPs can pulse multiple wires
        -

        as334 updated:

        +

        arsserpentarium updated:

          -
        • Pluoxium can now be formed by irradiating tiles with CO2 in the air.
        • -
        • Rad collectors now steadily form Tritium at a slow pace.
        • -
        • Nerfs fusion by making it slower, and produce radioactivity.
        • -
        • Noblium formation now requires significantly more energy input.
        • -
        • Tanks now melt if their temperature is above 1 Million Kelvin.
        • -
        -

        deathride58 updated:

        -
          -
        • Directional character icon previews now function properly. Other things relying on getflaticon probably work with directional icons again, as well.
        • -
        -

        nicbn updated:

        -
          -
        • Canister sprites for the new gases
        • -
        -

        ninjanomnom updated:

        -
          -
        • Shuttle parallax has been fixed once more
        • -
        • You can no longer set up the auxiliary base's shuttle beacon overlapping with the edge of the map
        • -
        -

        uraniummeltdown updated:

        -
          -
        • Replica fabricatoring airlocks and windoors keeps the old name
        • -
        • Narsie and Ratvar converting airlocks and windoors keeps the old name
        • -
        - -

        02 November 2017

        -

        ACCount updated:

        -
          -
        • "Tail removal" and "tail attachment" surgeries are merged with "organ manipulation".
        • -
        • New sprites for reflectors. They finally look like something.
        • -
        • You can lock reflector's rotation by using a screwdriver. Use the screwdriver again to unlock it.
        • -
        • Reflector examine now shows the current angle and rotation lock status.
        • -
        • You can now use a welder to repair damaged reflectors.
        • -
        • Multiple reflector bugs are fixed.
        • -
        -

        Improvedname updated:

        -
          -
        • Removes statues from gold slime pool
        • -
        -

        Mercenaryblue updated:

        -
          -
        • Updated Clown Box sprite to match the others.
        • -
        -

        More Robust Than You updated:

        -
          -
        • ONLY ADMINS CAN ACTIVATE THE ARK NOW
        • -
        • The Ark's time measurements are now a bit more readable
        • -
        -

        MrStonedOne updated:

        -
          -
        • Meteor events will not happen before 25 minutes, the worst versions before 35 and 45 minutes.
        • -
        • Meteor events are now player gated to 15, 20, and 25 players respectively
        • -
        • The more destructive versions of meteor events now have a slightly higher chance of triggering, to offset the decrease in how often it is that they will even qualify.
        • -
        • Fixed the changelog generator.
        • -
        -

        Naksu updated:

        -
          -
        • Smartfridges and chem/condimasters now output items in a deterministic 3x3 grid rather than in a huge pile in the middle of the tile.
        • -
        -

        SpaceManiac updated:

        -
          -
        • Admins can once again spawn nuke teams on demand.
        • -
        -

        Xhuis updated:

        -
          -
        • Admins can now create sound emitters (/obj/effect/sound_emitter) that can be customized to play sounds to different people, at different volumes, and at different locations such as by z-level. They're much more versatile for events than the Play Sound commands!
        • -
        • You can now add grenades to plushies! You'll need to cut out the stuffing first.
        • -
        • Clockwork cult tips of the round have been updated to match the rework.
        • -
        • Abscond and Reebe rifts now place servants directly at the Ark instead of below the "base" area.
        • -
        -

        nicbn updated:

        -
          -
        • Brown gas renamed to nitryl.
        • -
        -

        ninjanomnom updated:

        -
          -
        • Fixes decals not rotating correctly with the turf.
        • -
        • Fixes a runtime causing some turfs to be left behind by removed shuttles.
        • -
        • Shuttles should be roughly 40-50% smoother.
        • -
        • Fixes the cargo shuttle occasionally breaking if a mob got on at exactly the right time.
        • -
        - -

        30 October 2017

        -

        PKPenguin321 updated:

        -
          -
        • You can now use beakers/cups/etc that have welding fuel in them on welders to refuel them.
        • -
        -

        bgobandit updated:

        -
          -
        • Due to cuts to Nanotrasen's Occupational Safety and Health Administration (NO-SHA) budget, station fixtures no longer undergo as much safety testing. (Translation for rank and file staff: More objects on the station will hurt you.)
        • -
        - -

        29 October 2017

        -

        Armhulen updated:

        -
          -
        • Frost Spiders now use Frost OIL!
        • -
        -

        Mercenaryblue updated:

        -
          -
        • Skeletons can now have their own spectral instruments
        • -
        • \[Dooting Intensifies\]
        • -
        • the variable "too_spooky" defines if it will spawn new instruments, by default TRUE.
        • -
        -

        Naksu updated:

        -
          -
        • Removed meteor-related free lag
        • -
        • Cleaned up dangling mob references from alerts
        • -
        -

        Xhuis updated:

        -
          -
        • You can no longer become an enhanced clockwork golem with mutation toxin.
        • -
        • Normal clockwork golems now have 20% armor, down from 40%.
        • +
        • now lists should work properly

        as334 updated:

          @@ -2437,276 +502,51 @@
        • Freon has been removed. Use cold nitrogen for your SME problems now.
        • Water vapor now freezes the tile it is on when it is cooled heavily.
        -

        naltronix updated:

        +

        bgobandit updated:

          -
        • fixes that table that wasnt accessible in Metastation
        • +
        • Due to cuts to Nanotrasen's Occupational Safety and Health Administration (NO-SHA) budget, station fixtures no longer undergo as much safety testing. (Translation for rank and file staff: More objects on the station will hurt you.)
        - -

        28 October 2017

        -

        Mark9013100 updated:

        +

        coiax updated:

          -
        • The Medical Cloning manual has been updated.
        • -
        - -

        27 October 2017

        -

        Anonmare updated:

        -
          -
        • Adds new grindables
        • -
        -

        JamieH updated:

        -
          -
        • Buildmode map generators will now show you a preview of the area you're changing
        • -
        • Buildmode map generators will now ask before nuking the map
        • -
        • Buildmode map generator corners can now only be set by left clicking
        • -
        -

        Kor updated:

        -
          -
        • Cloth golems will be available as a roundstart race during Halloween.
        • -
        -

        MrStonedOne updated:

        -
          -
        • Created a system to profile code on a line by line basis and return detailed info about how much time was spent (in milliseconds) on each line(s).
        • -
        -

        Xhuis updated:

        -
          -
        • Servants can no longer teleport into the gravity generator, EVA, or telecomms.
        • -
        -

        ninjanomnom updated:

        -
          -
        • Hardsuit helmets work like geiger counters for the user.
        • -
        • Radiation should perform a little better in places.
        • -
        • Various radiation symptom thresholds have been tweaked.
        • -
        • Contamination strengths at different ranges have been tweaked.
        • -
        • Contaminated objects have less range for their radiation.
        • -
        • Hitting something with a contaminated object reduces its strength faster.
        • -
        • Contaminated objects decay faster.
        • -
        • Both radiation healing medicines have been buffed a bit.
        • -
        • Passive radiation loss for mobs is nerfed.
        • -
        • There is a soft cap for mob radiation now.
        • -
        • Projectiles, ammo casings, and implants are disallowed from becoming contaminated.
        • -
        • Suit storage units can completely cleanse contamination from stored objects
        • -
        • The first time an object is contaminated enough to spread more contamination admins will be warned. This is also added to stat tracking.
        • -
        • Thermite works on floors and can be ignited by sufficiently hot fires now
        • -
        • Thermite has been made into a component
        • -
        • Thermite no longer removes existing overlays on turfs
        • -
        - -

        26 October 2017

        -

        Kor and JJRcop updated:

        -
          -
        • Added vampires. They will be available as a roundstart race during the Halloween holiday event.
        • -
        -

        ShizCalev updated:

        -
          -
        • Reflectors will no longer drop more materials than they took to make when deconstructed.
        • -
        • You will no longer be prompted to reenter your body while being defibbed if you can't actually be revived.
        • -
        • You can no longer teleport past the ticket stands of the Luxury Emergency Shuttle.
        • -
        • Lightgeists can now -actually- be spawned with gold slime cores.
        • -
        • The Staff of Change will now randomly assign a cyborg module when transforming a mob into a cyborg.
        • -
        -

        Xhuis updated:

        -
          -
        • Clockwork marauders now move more slowly below 40% health.
        • -
        • Instead of a 40% chance (or more) chance to block projectiles, clockwork marauders now have three fixed 100% blocks; after using those three, they cannot block anymore without avoiding projectiles for ten seconds. This number increases to four if war is declared.
        • -
        • Projectiles that deal no damage DO reduce marauders' shield health. Use disabler shots to open them up, then use lasers to go for the kill!
        • -
        • Cogscarab shells and marauder armor now appear in the spawners menu.
        • -
        • You can no longer stack infinitely many stargazers on one tile.
        • -
        -

        nicbn updated:

        -
          -
        • Chemical heater and smoke machine resprited.
        • -
        -

        ninjanomnom updated:

        -
          -
        • Portable generators have a sound while active.
        • -
        • The supermatter has a sound that scales with stored energy.
        • -
        -

        ninjanomnom & Wjohn updated:

        -
          -
        • Cable cuffs now inherit the color of the cables used to make them.
        • -
        • Split cable stacks keep their color.
        • -
        • The blue cable color is now a better blue.
        • -
        - -

        25 October 2017

        -

        Cruix updated:

        -
          -
        • Shuttle navigation computers can now place new transit locations over the shuttle's current position.
        • -
        -

        JJRcop updated:

        -
          -
        • The heart of darkness revives you as a shadowperson if you aren't one already.
        • -
        -

        ShizCalev updated:

        -
          -
        • Shades will no longer always hear a heartbeat.
        • -
        • Golem abilities will now be start on cooldown when they are made.
        • -
        - -

        24 October 2017

        -

        Armhulen updated:

        -
          -
        • Wizards may now shapeshift into viper spiders.
        • -
        -

        Improvedname updated:

        -
          -
        • Blacklists holoparasite's from surplus crates
        • -
        -

        Kor updated:

        -
          -
        • Added dullahans, which will be available from the character set up menu during the Halloween event.
        • -
        • Severed heads will no longer appear bald.
        • -
        -

        More Robust Than You updated:

        -
          -
        • Fixes champrojector camera bugs
        • -
        -

        Naksu updated:

        -
          -
        • Grinders will now grind grown items like cocoa pods again
        • -
        • Cameras no longer keep hard references to mobs in their motion tracking list.
        • -
        -

        ShizCalev updated:

        -
          -
        • Creatures made via gold slime cores will now be given the proper name of their master.
        • -
        -

        deathride58 updated:

        -
          -
        • Deltastation's armory now contains reinforced windows surrounding the lethal weaponry. This makes Delta's armory consistent with Box.
        • -
        • There are now decals in places where extra Security lockers can spawn.
        • -
        • Cleaned up semicolons in Meta and Boxstation's .dmms
        • -
        - -

        22 October 2017

        -

        More Robust Than You updated:

        -
          -
        • Blood Brother now properly shows up in player panel
        • -
        -

        Naksu updated:

        -
          -
        • Paper bins no longer let server admins know that pens were eaten.
        • -
        • Removed dangling mob references to last attacker/attacked
        • -
        -

        Robustin updated:

        -
          -
        • Medical biosuits (and hardsuits) now offer heavy, but not complete, radiation resistance.
        • -
        -

        ninjanomnom updated:

        -
          -
        • Contents of silicon mobs are no longer considered for targets of radiation. This blocks them from being contaminated.
        • -
        - -

        21 October 2017

        -

        More Robust Than You updated:

        -
          -
        • Heads of staff will now have cat organs removed at roundstart
        • -
        -

        Robustin updated:

        -
          -
        • Spray tan no longer stuns when ingested.
        • -
        -

        Thunder12345 updated:

        -
          -
        • Sentient cats no longer forget to fall over when they die
        • -
        - -

        20 October 2017

        -

        Kor updated:

        -
          -
        • You can now select your Halloween race, rather than having it assigned randomly via event.
        • -
        -

        Robustin updated:

        -
          -
        • Fixed a bug where detonating maxcaps, especially multiple maxcaps, on Reebe guaranteed that everyone would die and thus the Clock Cult would immediately lose; Reebe maxcap is now 2/5/10.
        • -
        -

        ShizCalev updated:

        -
          -
        • All reflector prisms/mirrors have had their angles corrected.
        • -
        • Remains left over by dusting or soul-stoning a mob are now dissoluble with acid.
        • -
        • Changelings using biodegrade to escape restraints will now leave a pile of goop.
        • -
        • Fixed messages related to changelings using biodegrade not appearing.
        • -
        - -

        19 October 2017

        -

        Kor updated:

        -
          -
        • Blob is now a side antagonist.
        • -
        • Event and admin blobs will now be able to choose their spawn location.
        • -
        • Blob can now win in any mode by gaining enough tiles to reach Critical Mass.
        • -
        • Blobs that have Critical Mass have unlimited points, and a minute after achieving critical mass, they will spread to every tile on station, killing anyone still on board and ending the round.
        • -
        • Using an analyzer on a blob will now reveal its progress towards Critical Mass.
        • -
        • The blob event is now more common.
        • -
        -

        Mercenaryblue updated:

        -
          -
        • You will no longer trip on inactive honkbots.
        • -
        • Sentient Honkbots are no longer forced to speak when somebody trip on them.
        • -
        -

        Naksu updated:

        -
          -
        • Manned turrets stop firing when there's no-one in the turret shooting.
        • -
        • mobs will enter a deep power-saving state when there's not much to do except wander around. change: bees are slightly more passive in general
        • +
        • Quiet areas of libraries on station have now been equipped with a vending machine containing suitable recreational activities.

        deathride58 updated:

        • You can now press Ctrl+H to stop pulling, or simply H to stop pulling if you're in hotkey mode.
        -

        ninjanomnom updated:

        -
          -
        • Engineering scanner goggles have a radiation mode now
        • -
        • Objects placed under showers are cleansed of radioactive contamination over a short time.
        • -
        • Showers make sound now.
        • -
        -

        oranges updated:

        -
          -
        • Removed the bluespace pipe
        • -
        - -

        18 October 2017

        -

        DaxDupont updated:

        -
          -
        • Fixes automatic fire on guns.
        • -
        -

        Gun Hog updated:

        -
          -
        • The GPS item now correctly changes its name when the GPS tag is changed.
        • -
        -

        Improvedname updated:

        -
          -
        • Reverts katana's to its orginal size being huge
        • -
        -

        Mercenaryblue updated:

        -
          -
        • it should be far easier to clean out your face from multiple cream pies.
        • -
        -

        More Robust Than You updated:

        -
          -
        • People that are burning slightly less will appear to be burning... slightly less.
        • -
        -

        Robustin updated:

        -
          -
        • The smoke machine now properly generates transparent smoke, transmits chemicals, and displays the proper icons.
        • -
        -

        ShizCalev updated:

        -
          -
        • You can no longer build reinforced floors directly on top of dirt, asteroid sand, ice, or beaches. You'll have to first construct flooring on top of it instead.
        • -
        • Corrected mapping issues introduced with the latest SM engine/radiation update across all relevant maps.
        • -
        • The tools on the Caravan Ambush space ruin have had their speeds corrected.
        • -
        • Slappers will no longer appear as a latex balloon in your hand.
        • -
        • Renault now has a comfy new bed on Metastation!
        • -
        • Engineering cyborgs now have access to geiger counters.
        • -
        -

        Xhuis updated:

        -
          -
        • You can no longer pick up brass chairs.
        • -
        -

        Y0SH1_M4S73R updated:

        -
          -
        • Disabling leg actuators sets the power drain per step to the correct value.
        • -

        duncathan updated:

          -
        • Filters no longer stop passing any gas through if the filtered output is full.
        • +
        • Portable air pumps can output to a maximum of 25 atmospheres.
        • +
        +

        ike709 updated:

        +
          +
        • Added directional computer sprites. Maps haven't been changed yet.
        • +
        +

        improvedname updated:

        +
          +
        • toolbelts can now carry geiger counters
        • +
        +

        jammer312 updated:

        +
          +
        • fixed conjuration spells forgetting about conjured items
        • +
        +

        kevinz000 updated:

        +
          +
        • Legacy projectiles have been removed. Instead, all projectiles are now PIXEL PROJECTILES!
        • +
        • Reflectors can now be at any angle you want. Alt click them to set angle!
        • +
        • Pipes can now be layered up to 3 layers.
        • +
        +

        naltronix updated:

        +
          +
        • fixes that table that wasnt accessible in Metastation
        • +
        +

        nicbn updated:

        +
          +
        • Chemical heater and smoke machine resprited.
        • +
        +

        nicn updated:

        +
          +
        • Damage from low pressure has been doubled.

        ninjanomnom updated:

          @@ -2720,40 +560,43 @@
        • Fixed turfs not rotating
        • Fixed stealing structures you shouldn't be moving
        - -

        17 October 2017

        -

        DaxDupont updated:

        +

        ninjanomnom & Wjohn updated:

          -
        • Fancy boxes(ie: donut boxes) now show the proper content amount in the sprite and no longer go invisible when empty.
        • +
        • Cable cuffs now inherit the color of the cables used to make them.
        • +
        • Split cable stacks keep their color.
        • +
        • The blue cable color is now a better blue.
        -

        Mercenaryblue updated:

        +

        oranges updated:

          -
        • when decapitated, banana-flavored cream no longer hovers where your head used to be.
        • +
        • Removed the bluespace pipe
        -

        More Robust Than You updated:

        +

        psykzz updated:

          -
        • EI NATH! now causes a flash of light
        • +
        • AI Airlock UI to use TGUI
        • +
        • Allow AI to swap between electrified door states without having to un-electrify first.
        -

        Naksu updated:

        +

        selea/arsserpentarium updated:

          -
        • Pinned notes will now show up on vault, abductor, centcom and large glass airlocks.
        • -
        • Removed a misleading message when handling full stacks of sheets.
        • -
        • Pre-filled glass bottles (uplink, medbay, botany) will now give visual feedback about how much stuff is left inside, and the color of contents will match an empty bottle being filled with the same reagent.
        • -
        • Player-controlled "neutral" mobs such as minebots are now considered valid targets by clock cult's ocular wardens.
        • +
        • Integrated circuits have been added to Research!
        • +
        • You can use these to create devices with very complex behaviors.
        • +
        • Research the Integrated circuits printer to get started.
        -

        Xhuis updated:

        +

        tserpas1289 updated:

          -
        • Cogged APCs can now be correctly unlocked with an ID card.
        • +
        • Any suit that could hold emergency oxygen tanks can now also hold plasma man internals
        • +
        • Hydroponics winter coats now can hold emergency oxygen tanks just like the other winter coats.
        • +
        • Plasma men jumpsuits can now hold accessories like pocket protectors and medals.
        -

        duncathan updated:

        +

        uraniummeltdown updated:

          -
        • Portable air pumps can output to a maximum of 25 atmospheres.
        • +
        • Replica fabricatoring airlocks and windoors keeps the old name
        • +
        • Narsie and Ratvar converting airlocks and windoors keeps the old name
        -

        kevinz000 updated:

        +

        zennerx updated:

          -
        • Legacy projectiles have been removed. Instead, all projectiles are now PIXEL PROJECTILES!
        • -
        • Reflectors can now be at any angle you want. Alt click them to set angle!
        • -
        • Pipes can now be layered up to 3 layers.
        • +
        • fixed a bug that made you try and scream while unconscious due to a fire
        • +
        • Skateboard crashes now give slight brain damage!
        • +
        • Using a helmet prevents brain damage from the skateboard!
    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ab40b78512..ce998456e5 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1,14377 +1,919 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. --- -2015-04-04: - ACCount: - - rscadd: Emergency welding tool added to emergency toolbox. - - rscadd: Changed industrial welding tool sprite. - - tweak: Replaced welder in syndicate toolbox with industrial one. - - tweak: All tools in syndicate toolbox are red. Corporate style! - - tweak: Red crowbar is a bit more robust. - - bugfix: 'Fixed two bugs: welder icon disappearing and drone toolbox spawning with - invisible cable coil.' - AnturK: - - rscadd: 'Picket signs: table crafted with a rod and two cardboard sheets, write - on them with pen or crayon.' - Cheridan: - - wip: The bar's layout has been changed with a poker table and re-arranged seating. - Dannno: - - rscadd: Added gun lockers for shotguns and energy guns. Click on the lockers with - an item to close them if they're full. - Gun Hog: - - rscadd: Nanotrasen research has finalized improvements for the experimental Reactive - Teleport Armor. The armor is now made of a thinner, lightweight material which - will not hinder movement. In addition, the armor shows an increase in responsiveness, - activating in at least 50% of tests. - Incoming: - - rscadd: The iconic blood-red hardsuits of nuke ops can now be purchased for a - moderate sum of 8 TC by traitors. - Jordie0608: - - tweak: Cyborg mining drills now use up their internal battery before drawing power - from a borg's cell. - - bugfix: Fixes cyborg mining drills not recharging. - RemieRichards: - - rscadd: Burning mobs will ignite others they bump into or when they are stepped - on. - Xhuis: - - tweak: Malfunctioning AIs can no longer leave the station z-level. Upon doing - this, they will fail the round. - - tweak: Phazon exosuits now require an anomaly core as the final step in their - construction. - xxalpha: - - rscadd: Added Nutriment Pump, Nutriment Pump Plus and Reviver implants. - - tweak: Added origin technologies to all implants. - - tweak: 'The following implants are now much harder to obtain: X-ray, Thermals, - Anti-Stun, Nutriment Pump Plus, Reviver.' - - tweak: Cauterizing a surgery wound will now heal some of the damage done by the - bonesaw if it was used as part of the same surgery. - - tweak: Added ability for Medical HUDs to detect cybernetic implants in humans. -2015-04-09: - Iamgoofball: - - rscadd: Quite a lot of cleanables can now be scooped up with a beaker in order - to acquire the contents. - - rscadd: Light a piece of paper on fire with a lighter, and scoop up the ashes! - - rscadd: Scoop up the flour the clown sprayed everywhere as a 'joke'! - - rscadd: Scoop up the oil left behind by exploding robots for re-usage in chemistry! - - rscadd: You can splash the contents of a beaker onto the floor to create a Chemical - Pile! This pile can be heated or blown up and have the reagents take the effects. - Make a string of black powder around a department in maint. and then heat it - with a welder today! - - rscadd: Reagents now can have processing effects when just sitting in a beaker. - - rscadd: Pyrosium and Cryostylane now feed off of oxygen and heat/cool the beaker - without having to be inside of a person! - - rscadd: Reagents can now respond to explosions! - - rscadd: Black Powder now instantly detonates if there is an explosion that effects - it. - - rscadd: Fire now heats up beakers and their contents! - - rscadd: Activate some smoke powder in style by lighting the beaker on fire with - a burning hot plasma fire! - RemieRichards: - - tweak: Ninja stars are summoned to your hand to be thrown rather than automatically - targetting nearby mobs. - - rscadd: 'Added Sword Recall: pulls your katana towards you, hitting mobs in the - way. Free if within sight, cost scales with distance otherwise.' - - rscadd: Enemies can be electrocuted by a ninja as the cost of his energy, stunning - and injuring them. - - rscdel: Removed SpiderOS, functions moved to status panel. - - bugfix: Fixed energy nets not anchoring target, katana emag spam and sound delay. - optimumtact: - - bugfix: Mimes can't use megaphone without breaking their vow anymore. - phil235: - - tweak: Flying animals no longer triggers mouse traps, bear traps or mines. -2015-04-11: - Gun Hog: - - tweak: Nanotrasen has approved an access upgrade for Cargo Technicians! They are - now authorized to release minerals from the ore redemption machine, to allow - proper inventory management and shipping. - Iamgoofball: - - tweak: Blobbernauts no longer deal chemical damage, brute damage increased however. - Ikarrus: - - experiment: Getting converted by a rev or cultist will stun you for a few seconds. - Incoming5643: - - bugfix: Fixes some AI malf powers being usable when dead. - MrPerson: - - tweak: Reduces movement speed penalty from being cold. - Xhuis: - - rscadd: Adds a pizza bomb traitor item for 4 telecrystals. It's a bomb, diguised - as a pizza box. You can also attempt to defuse it by using wirecutters. - kingofkosmos: - - rscadd: Activating internals with an adjusted breath mask will automatically push - it up to normal state. - - tweak: Masks can now be adjusted when buckled to a chair. - optimumtact: - - tweak: Stun batons no longer lose charge over time when on. - phil235: - - tweak: The AI holopads now use a popup window just like computers and other machines. - - rscdel: Nerfs kinetic accelerator and plasma cutters. Plasma cutter is no longer - in the mining vendor. Reduces the drilling cost of all drills. - - rscadd: Adding 40+ new food and drink recipes, mostly using the newest plants. - Notably rice recipes, burritos, nachos, salads, pizzas. - - tweak: Opening the tablecrafting window can now also be done by dragging the mouse - from any food (that's on a table) onto you. - - rscadd: The kitchen cabinet starts with one rice pack. - - tweak: Glasses with unknown reagent will no longer be always brown but will take - the color of their reagents. -2015-04-13: - AnturK: - - rscadd: 'Spacemen have learned the basics of martial arts: Boxing, unleash it''s - power by wearing Boxing Gloves.' - - rscadd: While boxing you can't grab or disarm, but you hit harder with a knockout - chance that scales off stamina damage above 50. - - rscadd: Rumors have been heard of powerful martial styles avaliable only to the - gods themselves. - CosmicScientist: - - rscadd: Added a dehydrated space carp to traitor items, bought with telecrystals. - Use dehydrated space carp in hand to school them on loyalty. Add water to create - a vicious murder machine just for the halibut. - - tweak: The toy carp plushie now has attack verbs for fun, hit your friend with - one today. I put my sole into this mod. - - wip: If you can think of a better fish pun let minnow but I shouldn't leave it - to salmon else. - Ikarrus: - - tweak: Gang bosses can no longer purchase certain potent traitor items but instead - have access to some of a nuke op's arsenal of weapons. - Incoming5643: - - rscadd: 'Three new chemical types of blob can occur: Omnizine, Morphine and Space - Drugs.' - MrPerson: - - experiment: New lighting system! Lighting now smoothly transfers from one lighting - level to the next. - Xhuis: - - rscadd: There have been... odd sighting in Space Station 13's sector. Alien organisms - have appeared on stations 57, 23, and outlying. - - rscadd: Nanotrasen personnel have reason to believe that Space Station 13 is under - attack by shadowlings. We have little intel on these creatures, but be on the - lookout for odd behavior and dark areas. Use plenty of lights. - Zelacks: - - tweak: Defibs no longer have a minimum damage requirement for a successful revive. - Patients will have 150 total damage on a successful revive. - - tweak: Additional feedback is given for several failure states of the defib. - xxalpha: - - wip: Airlock crushing damage increased. -2015-04-16: - AnturK: - - rscadd: Nanotrasen authorities are reporting sightings of unidentified space craft - near space station 13. Report any strange sightings or mental breakdowns to - central command. - - rscadd: 'PS : Abductions are not covered by health insurance.' - - rscadd: Shadowlings and their thralls now have HUD icons. - - rscadd: Thralls learn their master's objectives when enthralled. - - rscadd: Regenerate Chitin ability lets shadowlings re-equip their armor if lost. - - tweak: Loyalty implanted people take 25% longer to enthrall, but lose their implant - and become immune to re-implanting. - - experiment: Shadowlings now have a message in their spawning text which specifies - that cooperation is mandatory. - - bugfix: Veil now works on equipped lights. - - bugfix: Shadowlings now take correct amount of burn damage and in light and heal - clone and brain damage in darkness. - - bugfix: Fixes 'Round end code broke' displaying every round. - - bugfix: Shadowlings who ascend will nore greentext properly. - Gun Hog: - - rscadd: Thinktronic Systems, LTD. has increased the Value of the Value-PAK PDA - cartridge! Standard issue for Captain PDAs, it can now access security bots, - medibots, cleanbots, and floorbots ALL AT ONCE! In addition, it can also connect - to your station's Newscaster network at NO EXTRA CHARGE! As a Thank you for - our contract with them, they have thrown in Newscaster access for the HumanResources9001 - cartridge, Heads of Personnel rejoice! - - tweak: The Newscaster app has also gotten a free upgrade which allows it to display - images and comments inside of posts! - - bugfix: Nanotrasen has concurrently released a patch for bots which will allow - off-station bots to properly patrol. - Incoming5643: - - rscadd: Changeling head slugs have been given player control, ventcrawling, and - a short escape period after egg laying. - MrStonedOne: - - rscadd: Admin ghosts can now drag ghosts to mobs to put that ghost in control - of that mob. - Xhuis: - - rscadd: Nanotrasen scientists have recently observed a strange genome shift in - green slimes. Experiments have shown that injection of radium into an active - green slime extract will create a very unstable mutation toxin. Use with caution. -2015-04-19: - AnturK: - - bugfix: Observers can now see abductor hivemind messages. - - rscadd: 'Adds advanced baton for abductors: Stun, Sleep and Cuff in one tool.' - - rscadd: Abductor agents now have vest cameras. - - imageadd: New sprites for abductors and their gear made by Ausops. - Fayrik: - - rscadd: Added jobban options for Abductors and Deathsquads. - - tweak: Made admin antag spawning buttons more efficient and less prone to failure. - Xhuis: - - rscadd: Recent sightings aboard space stations shows that spirits seem to be manifesting - as malevolent revenants and draining the life of crew. The chaplain may be helpful - in stopping this new threat. - kingofkosmos: - - wip: Girder and machine frame construction protocols has been changed. They can - now be secured/unsecured with a wrench and disassembled with a welder. -2015-04-20: - Fayrik: - - rscadd: Abductors now get advanced camera consoles. - - tweak: Redesigned Centcom again. There's a bar at the thunderdome now. - - rscadd: Headsets can now be locked to a spesific frequency, this only occurs for - nuke ops and deathsquads. - - rscadd: The Centcom channel is now available over all z-levels, regardless of - telecomms status. - - tweak: The Deathsquad space suits have been upgraded to hardsuits. - - rscadd: The Deathsquad now have thermal imaging huds, which can swap which hud - they display on the fly. - phil235: - - tweak: Reagents are now back to being metabolized every tick. Fixes frost oil - and capsaicin not working. - - tweak: Fixes not being able to make sterilizine. - - rscadd: Adding overdose to space drug, causing mild hallucination and toxin and - brain damage. - - tweak: Nerfed healing power of stimulant reagent. Buffed ephedrine a bit. - - rscadd: Nitroglycerin can now be stabilized with stabilizing agent, and explodes - when heated. -2015-04-21: - Ikarrus: - - wip: Gang mode has had some considerable work done on it, including a new objective - and currency dynamic. - - rscadd: New objective: Claim half the station as territory by tagging it - with spray cans supplied to gang bosses, but usable by any member. - - wip: An area can only be tagged by one gang at a time, remove your opponent's - tag or spray over it. - - rscadd: New recruitment: Recruiment pens replace flashes, stab people to - recruit them. - - experiment: Recruitment is silent, but causes brief seizures and has a cooldown - that scales upwards with a gang's size. - - rscadd: New tool: The Gangtool is used by bosses and lieutenants to recall - the shuttle and purchase supplies. - - rscadd: Pistols, ammo, spraycans, recruitment pens and additional gangtools can - all be bought. - - tweak: Gangtools also alert the user of promotions, purchases and territory changes - within the gang. - - rscadd: Lieutenants are promoted from gang members when given their own gangtool; - they're immune to deconversion and able to do anything a boss can except promotion. - - rscadd: New currency: Influence is used to purchase with the gangtool and - is generated every 5 minutes by each territory owned by the gang. - - tweak: Thermite can be cleaned off walls now. -2015-04-22: - Incoming5643: - - rscadd: 'Adds a new fun button for admins: ''Set Round End Sound''. You can use - the set round end sound button to set the round end sound. Glad we cleared that - up!' - Miauw62: - - wip: Very slightly expanded atmos and added an external airlock. - Xhuis: - - bugfix: A few issues have been fixed for revenants. In addition, the Mind Blast/Mind - Spike sound effect has been removed. - - rscadd: Adds the Hypnotize ability to revenants. It will cause a target to fall - asleep after a short time. - xxalpha: - - rscadd: Added an Exosuit Mining Scanner to the robotics fabricator. - - tweak: Buffed Ripley's movement and drilling speed in low pressure environments. -2015-04-25: - Boggart: - - rscadd: Generalizes handheld instrument code and Ports Nienhaus's guitar, sounds - by BartNixon of Tau Ceti. - - rscadd: Fixes being unable to build disposal pipes on walls, makes changing the - RPD's settings not affect pipes that are currently building, makes the RPD use - the datum/browser ui, makes it use categories and makes it show the selected - mode. - Gun Hog: - - rscadd: Nanotrasen has provided designs for fabrication of APC power control modules. - You may print them at any autolathe. - Ikarrus: - - rscadd: Gangs can now purchase switchblades, a relatively cheap and decently robust - melee weapon. - - tweak: Gangs now require at least 66% control of the station to win. - - tweak: Gang spraycan uses reduced to 15. - - tweak: Pistol cost increased to 30 Influence - - tweak: Promotions now start off cheap at 20 influence but get more expensive the - more people you promote. - Xhuis: - - rscadd: Added a Create Antagonist button for revenants. - - rscdel: Removed Mind Blast. - - bugfix: Revenants no longer get killed by explosions. - - tweak: Mind spike cooldown increased to 4 seconds. - - tweak: Harvest now takes 8 seconds and requires you to be adjacent to the target. - - tweak: Hypnotise sleeps targets for longer. - - tweak: Revenant now starts with 3 strikes. - phil235: - - tweak: Telecom machines are now deconstructed the same way as all other constructable - machines. - - tweak: You can no longer overdose on nicotine but you can get addicted (very mild - effects). -2015-04-29: - AndroidSFV: - - tweak: Dehydrated carp now are friendly to both the imprinter of the plushie as - well as any coded-in allies (I.E. Nuke Ops team), and unfriendly to carp of - other origin othan than yourself or your coded-in allies. Dehydrated carp that - are not imprinted will still have the same behavior as regular carp. - AnturK: - - rscadd: Advanced cameras now have all functionality of the abductor consoles. - - tweak: Pinpoint teleportation takes 8 seconds and spawns a flashy silhouette at - the target location. Can be used as distraction since it appears even if teleporter - is empty. - - bugfix: Abductors are now immune to viruses. - - bugfix: Dissection surgery ignores clothes. - - bugfix: Non-abductors can escape the ship by fiddling with consoles enough. - - rscadd: Three new negative glands. - - rscadd: Bloody glands spray blood everywhere and injure the host. - - rscadd: Bodysnatch glands turn the host into a cocoon that hatches doppelgangers. - - rscadd: Plasma glands cause the host to explode into a cloud of plasma. - GoonOnMoon: - - rscadd: Added a new assault rifle to the game for use by Nanotrasen fighting forces - in special events. Also happens to be available in the Liberation Station vending - machine and the summon guns spell usable by the wizard and badminnery. - Iamgoofball: - - rscdel: Acid blob has been removed. - - tweak: Charcoal and Silver Sulf are more powerful now. - - tweak: Styptic power and Silver Sulf metabolize at the default rate. - Ikarrus: - - rscadd: Spraycans and crayons can now draw Poseur Tags, aka Fake Gang Tags, as - grafiti. - - tweak: Influence income changed to provide weaker gangs a bigger boost, while - slowing down stronger gangs to promote opportunity for comebacks. - - tweak: Gangs only earn influence on territories they have held on to since the - previous Status Report (the income calculation every 5 minutes). This places - more significance on defending your existing territory. - - bugfix: You must be in the territory physically to tag it now. So no more tagging - everything from maint. - - tweak: Gang income delay reduced to 3 minutes intervals. - - tweak: Gang Capture goal reduced to 50% - - tweak: Gang spraycan use increased to 20 - - tweak: Gang Boss icon is now a red [G] icon to make it stand out better from regular - gang icons - JJRcop: - - tweak: TED's kill duration has been halved. - - tweak: Escaping from the TED's field no longer kills you. - RemieRichards: - - rscadd: Adds Easels and canvases for custom drawings. - - imageadd: Place a canvas on an easel and draw on it with crayons, clean one pixel - with a rag or soap and activate it in-hand to erase the whole canvas. - - rscadd: Ports VG's Ventcrawling overhaul! - - tweak: Crawling through vents is no longer instant, you now have to move and navigate - manually - - rscadd: While inside pipes and other atmos machinery, you now see pipe vision - phil235: - - bugfix: Podplants are no longer unharvestable. - - tweak: Choosing your clown, mime, cyborg and AI name as well as religion and deity - is now done in the preferences window. As a chaplain , your bible's icon is - now chosen by clicking the bible. -2015-04-30: - Fayrik: - - rscadd: Ported NanoUI to most atmospherics equipment. - TheVekter: - - tweak: Hooch is now made with 2 parts Ethanol, 1 part Welder fuel and 1 part Universal - Enzyme as a catalyst. - - tweak: No-slip shoes are paintable, painting them doesn't remove no-slip properties. -2015-05-01: - Ikarrus: - - rscadd: Gang bosses can now rally their gang to their location with their gangtool. - - rscadd: Gangtools can no longer recall the shuttle if station integrity is lower - than 70% - - rscdel: Removed requirement to be in the territory to tag it. - - tweak: Recruitment Pen cost reduced to 40. - - bugfix: Communications console should now accurately print the (lack of a) location - of the last shuttle call. - Xhuis: - - rscdel: Revenants will no longer spawn without admin intervention. They are pending - a remake. -2015-05-02: - Boggart: - - bugfix: Cryo tubes can no longer be used for ventcrawling. - Ikarrus: - - rscadd: Admins can choose the strength and size of Centcom teams to send, ranging - from officials to deathsquads, with the 'Make Centcom Respone Team' button. - phil235: - - tweak: Space carps can no longer knock down anyone, but they now deal additional - stamina damage to humans. - - tweak: Radiation effects from uranium walls are nerfed to the level of uranium - floor. - - rscadd: You can no longer put an inactive MMI in a cyborg shell. Ghosted brains - now get an alert when someone puts their brain in a MMI. You can now examine - the MMI to see if its brain is active. -2015-05-03: - AnturK: - - rscadd: Abductors can purchase spare gear with experimentation points. - Ikarrus: - - rscadd: Admins can now adjust the pre-game delay time. - MrStonedOne: - - experiment: MasterController and subsystem rejiggering! - - rscadd: The MC can now dynamcially change the rate a subsystem is triggered based - on how laggy it's being. This has been applied to atmos to allow for faster - air processing without lagging the server - - tweak: Pipes and atmos machinery now processes in tune with air, rather than seperately. - - bugfix: Fixed hotspots and fire causing more lag than they needed to - - bugfix: Fixed some objects not getting garbage collected because they didn't properly - clear references in Destory() - - tweak: The qdel subsystem will now limit its processing time to a 5th of a second - each tick to prevent lag when a lot of deletes happen - - bugfix: Fixed the ticker not showing a tip of the round if an admin forces the - round to start immediately -2015-05-04: - Firecage: - - bugfix: Emagged windoors can now be deconstructed. - RemieRichards: - - rscadd: Adds Plasmamen, a species that breathes plasma and bursts into flames - if they don't wear special suits. - - imageadd: New burning icon for all humanoid mobs. - - imageadd: New sprite for Skeletons to match Plasmamen. - oranges: - - tweak: Thanks to recent advances in fork science, you no longer need to aim at - your eyes to eat the food off a fork - xxalpha: - - rscadd: 'Adds a new barsign: ''The Net''.' -2015-05-05: - Firecage: - - bugfix: Golems and skeletons no longer fall over when stepping on shards. - Gun Hog: - - bugfix: Mining borg diamond drill upgrade now functional. - Ikarrus: - - tweak: Doubled the initial charge of SMESs in Engineering. - - tweak: Influence cap for gangs has been increased. - incoming5643: - - bugfix: All modes now select their antagonists before job selection, this means - that a player who prefers roles normally immune to being certain antagonists - (implanted roles/silicons) can still have a fair shot at every antagonist roll - they opt into. If they're selected they simply will not end up with an incompatible - job. - - bugfix: As an example if someone loved to play Head of Security (humor me here) - and had it set to high, and the only other jobs he had set were security officer - at medium and botanist at low but he was selected to be a traitor, he would - spawn as a botanist even if there ended up being no Head of Security. - - experiment: Please give playing security another chance if you'd written it off - because it affected your antag chances. - xxalpha: - - bugfix: Hulks can now break windoors. - - bugfix: Fixed smoking pipe messages. Fixed emptying a smoking pipe with nothing - in it. -2015-05-06: - Jordie0608: - - bugfix: Borgs can now open lockers with the 'Toggle Open' verb. - Thunder12345: - - bugfix: Severed the cryo tube's connection to the spirit world. Ghosts will no - longer be able to eject people from cryo. Please report further instances of - poltergeist activity to your local exorcist. - Xhuis: - - tweak: Many minor technical changes have been made to cult. - - rscadd: Cultist communications now show the name of the person using them. Emergency - communications do not do this. - - rscadd: Emergency communication does less damage. - xxalpha: - - rscadd: Engineering cyborgs can now pick their cable coil color whenever they - want. -2015-05-07: - Xhuis: - - rscadd: Emagged defibrillators will now do burn damage and stop the patient's - heart if used in harm intent. - - tweak: The previous stunning functionality of the emagged defibrillator has been - moved to disarm intent. - phil235: - - tweak: Temperature effects from frost oil and capsaicin reagents and basilisk - have been buffed to be significant again. - xxalpha: - - tweak: Hulks can now break windoors. -2015-05-08: - Firecage: - - tweak: Mobs can now be buckled to operating tables. - Gun Hog: - - rscadd: 'Top scientists at Nanotrasen have made strong progress in Artificial - Intelligence technology, and have completed a design for replicating a human - mind: Positronic Brains. Prototypes produced on your research station should - be compatible with all Man-Machine Interface compliant machines, be it Mechs, - AIs, and even Cyborg bodies. Please note that Cyborgs created from artificial - brains are called Androids.' - - tweak: The pAI role preference and related jobbans have been renamed to properly - reflect that they are not soley for pAI, but include drones and positroinc prains. - astralenigma: - - tweak: Cargo packages are now delivered with their manifests taped to the outside. - Click on them with an open hand to remove them. - optimumtact: - - tweak: Machine frame and girder deconstruction now uses a screwdriver instead - of welding tool. -2015-05-09: - Firecage: - - tweak: Increased the manifestation chance of super powers. - Ikarrus: - - experiment: 'Loyalty implants will no longer survive deconverting a gangster. - Security now needs to use two of them if they want the permanent effects: The - first to deconvert them, and the second to make them loyal.' - KorPhaeron: - - tweak: Slime mutation chance now starts at 30%. - - rscadd: Baby slimes have a -5% to 5% difference of their parent's mutation chance, - allowing you to breed slimes that are more likely to mutate. - - rscdel: Plasma and epinephrine no longer affect mutation chance of slimes. - - rscadd: Red slime extract and plasma makes a potion that can increase mutation - chance, Blue slime extract and plasma potions will decrease it. -2015-05-10: - AnturK: - - bugfix: Fixed borg's cells draining much faster than they're meant to. - Gun Hog: - - tweak: Station bot performance greatly increased. - - rscadd: Captain PDA cartridge now includes nearly all utilities and functions, - including signaller and all bots! HoP now has janitor and quartermaster functions! - The RD and Roboticists now have access to Floor, Clean, and Medibots! - - tweak: Bot access on PDA is now one button across all PDAs. You will only see - what bots you can access, however. - - rscadd: Cartridges that include a signaller have been improved so they will work - on a larger frequency range. - - tweak: All bots now have Robotics access, so they may be set to patrol and released - once constructed. - - tweak: Roboticists now have access to bot navigation beacons. They are found under - the floor tiles as patrol route nodes. -2015-05-11: - Firecage: - - imageadd: New icons for Industrial and Experimental welding tools. - Gun Hog: - - rscdel: The power mechanic for mining drills and the jackhammer has been removed. - They no longer require cells or recharging. - - bugfix: The diamond drill upgrade for mining cyborgs has been fixed. - Xhuis: - - rscadd: Adds the pneumatic cannon, attach an air tank and shoot anything out of - it. - - rscadd: Improvised pneumatic cannons can be tablecrafted with a wrench, 4 metal, - 2 pipes, a pipe manifold, a pipe valve and 8 package wrappers. - spasticVerbalizer: - - bugfix: False walls no longer stackable. -2015-05-13: - Firecage: - - rscadd: Kudzu is now admin-logged in Investigate. - GunHog: - - tweak: Positronic brains are now entered by clicking on an empty one, in the same - manner as drones. - - rscadd: Ghosts are alerted when a new posibrain is made. - Jordie0608: - - rscadd: Borg reagent containers (beakers, spraybottles, shakers etc.) are no longer - emptied when stowed. - - bugfix: Fixes North and West Mining Outposts having empty SMESs. - - bugfix: Aliens and slimes can smash metal foam again. - - rscdel: Deconstructing reinforced walls no longer creates additional rods out - of nowhere. - - imageadd: Pepperspray now has inhand sprites. - Xhuis: - - bugfix: Fixes the recipe for pneumatic cannons; it now only requires a wrench, - 4 metal, 2 pipes and 8 package wrappers . -2015-05-15: - xxalpha: - - bugfix: Fixed emitter beams not being reflectable. -2015-05-16: - MartiUK: - - bugfix: Fixed a typo when cleaning a Microwave. - - bugfix: Fixed a typo when burning someone with a lighter. -2015-05-20: - xxalpha: - - rscadd: Added three drone shells to the derelict. -2015-05-22: - Jordie0608: - - tweak: Smothering someone with a damp rag when in harm intent will apply reagents - onto them, for acid-burning their face; otherwise it will inject them, for drugging - with chloral hydrate. - - imageadd: The healthdoll is now blue when at full health to make it more clear - when a body part is injured. -2015-05-25: - spasticVerbalizer: - - tweak: Glass airlocks can now be made heat-proof by using a sheet of reinforced - glass to create the window, regular glass creates a normal glass airlock. - xxalpha: - - bugfix: You can no longer drop items inside mechas nor machinery (this includes - gas pipes, disposal pipes, cryopods, sleepers, etc.). - - bugfix: Fixed exploit of changelings being able to keep thermal vision after resetting - their powers. - - bugfix: Fixed being able to implant NODROP items with cavity implant surgery. -2015-05-26: - CosmicScientist: - - spellcheck: Corrected wording for the pAI, donksoft riot darts and some tip of - the round tips. - xxalpha: - - bugfix: Fixed changeling revival. -2015-05-30: - duncathan: - - bugfix: Fixes passive gates not auto-coloring. - spasticVerbalizer: - - tweak: Players trying to speak but unable to will now get a message. -2015-05-31: - duncathan: - - tweak: Clarified the ability to retract changeling armblades. -2015-06-04: - Cuboos: - - rscadd: Added casting and firing sounds for wizard spells and staves. - - rscadd: A new title theme has been added. - Gun Hog: - - rscadd: Nanotrasen has approved the designs for destination taggers and hand labelers - in the autolathe. - Palpatine213: - - tweak: Allows sechuds to have their id locks removed via emag as well as EMP -2015-06-05: - CandyClown: - - tweak: Ointments, bruise packs, and gauze are now stacked to 6 instead of 5. - CorruptComputer: - - bugfix: Security lockers no longer spawn in front of each other on Box. - - bugfix: Hooked up the scrubbers in QM's office on Box. - - bugfix: Fixed bar disposals on Box - - bugfix: Fixed the stacked heater+freezer in expirementor maint on Box - - tweak: Made the turbine into Atmos and Engineering access only, and renamed the - doors to Turbine on Box. - Ikarrus: - - rscadd: Gang Bosses will now be able to discreetly send messages to everyone in - their gang for 5 influence a message. - - tweak: Conversion pens now use a flat 60sec cooldown rate. - KorPhaeron: - - rscadd: You can now lay tiles on the asteroid. Go nuts building forts. -2015-06-06: - Incoming5643: - - rscadd: Antagonists with escape alone can now escape with others on the shuttle, - so long as they are also antagonists. - - rscadd: Antagonists with escape alone can also win if non-antagonists are on the - shuttle provided they are locked in the brig. - - rscadd: Escaping to syndicate space on board the nuke op shuttle is now a valid - way to escape the station. - Jordie0608: - - rscadd: Admin-delaying the round now works once it has finished. -2015-06-07: - Aranclanos: - - rscadd: Malfunctioning AIs can preview placement of a Robotic Factory. - Iamgoofball: - - rscadd: Bicardine, Dexalin, Kelotane, Anti-toxin, Inaprovaline and Tricordrazine - have been re-added. - RemieRichards: - - rscadd: Lizards can now wag their tails, emote *wag to start and *stopwag to stop. - kingofkosmos: - - tweak: Mops can now be wet from normal buckets and sinks. -2015-06-08: - AnturK: - - imageadd: Improved the interface of Spellbooks. - Cheridan: - - tweak: Push-force from Atmospherics now depends on an entity's weight, heavier - objects are less prone to being pushed. - - rscadd: Magboots and No-Slip shoes now prevent pushing from spacewind. - Firecage: - - rscadd: Protolathes can now build Experimental Welding Tools. -2015-06-09: - Aranclanos: - - wip: Structures and machines can now be built on shuttles. - Iamgoofball: - - rscadd: 'Adds the Bluespace Rapid Part Exchange Device: holds up to 400 stock - parts and can be used to upgrade machines at range without needing to open their - maintenance panel.' - - rscadd: A new tier of stock parts have been added, they're very expensive to produce - but provide ample improvements. - - experiment: Many machines can now also be upgraded. - - tweak: 'Emitter: Lasers decrease firing delay and Capacitors decrease power consumption.' - - tweak: 'Gibber: Matter Bins increase yield of meat and Manipulators speed up operation - time, at high level can gib creatures with clothes.' - - tweak: 'Seed Extractor: Matter Bins increase storage and Manipulators multiply - seed production.' - - tweak: 'Monkey Recycler: Matter Bins increase the amount of monkey cubes produced - and Manipulators reduce the monkey-to-cubes ratio to a minimum of 1-to-1.' - - tweak: 'Crusher: Matter Bins increase material yield and Manipulators increase - chance to yield materials, at high level there is a chance for rarer materials.' - - tweak: 'Holopad: Capacitors increase an AI''s traversal range from the holopad.' - - tweak: 'Smartfridge: Matter Bins increase storage.' - - tweak: 'Processor: Matter Bins increase yield and Manipulators speed up operation - time.' - - tweak: 'Microwave: Matter Bins increase storage.' - - tweak: 'Ore Redemption Machine: Matter Bins increase yield per ore, Lasers increase - points per ore and Manipulators speed up operation time.' - - tweak: 'Hydroponics Tray: Manipulators improve water and nutrients efficiency.' - - tweak: 'Biogenerator: Matter Bins increase storage.' - bananacreampie: - - rscadd: Added several new options to the ghostform sprites -2015-06-11: - Cheridan: - - rscdel: Removes the powerdrain for individiual active modules on cyborgs. -2015-06-12: - Ikarrus: - - experiment: Gang Updates - - rscadd: 'New objective: To win, Gangs must now buy a Dominator machine (50 influence) - and defend it for a varying time frame.
    * The location of the dominator is - broadcasted to the entire station the moment it is activated
    * The more territories - the gang controls, the less time it will take
    * Gangs no longer win by capturing - territories' - - rscadd: A choice of gang outfits are now purchasable for 1 influence each - - rscadd: Thompson SMGs aka "tommy guns" are now purchasable for 50 influence - - rscadd: Bulletproof armor vests are now purchasable for 10 influence - - tweak: Gang messages are now free to send - - tweak: Prices of pistols and pens reduced to 20 and 30, respectively - - tweak: Gang spraycans have been made a lot less obvious. They look nearly identical - to regular ones, now. - - rscdel: Gangs will no longer be notified how much territory the enemy controls - Incoming5643: - - rscadd: Growing tired of reports of slain members, the Wizard Federation has cautiously - sactioned the dark path of lichdom. Beware of the powerful lich who hides his - phylactery well, for he is immortal! - - rscadd: The trick to defeating liches is to destroy either their body or their - phylactery item before they can ressurect to it. The more a lich is slain the - longer it will take him to make use of his phylactery and the more likely the - crew is to catch him during a vunerable moment. - - rscremove: Due to the addition of proper liching, skeletons as a choosable race - from magic mirrors has been discontinued. My apologies to the powergamers. A - special admin version of the mirror that allows for skeletons has also been - added to the code. - Miauw: - - tweak: 'AIs have received several minor nerfs in order to increase antagonist - counterplay:' - - tweak: AI tracking is no longer instant, it takes an amount of time that increases - with distance from the AI eye, up to 4 seconds. The AI detector item will light - up when an AI begins tracking. - - tweak: A random camera failure event has been added, which will break one or two - random cameras. - - tweak: You can no longer keep tracking people that are outside of your camera - vision. - - tweak: Camera wires have been removed. Screwdriver a camera to open the panel, - then use wirecutters to disable it or a multitool to change the focus. - - tweak: You can now hit cameras with items to break them. To repair a camera, simply - open the panel and use wirecutters on it. - - tweak: Camera alerts now only happen after a camera is reactivated. - RemieRichards: - - rscadd: New optional explosion effect ported from /vg/'s DeityLink, Explosions - that are affected by Walls and Doors -2015-06-14: - Ikarrus: - - rscadd: White suits added to gang outfits - - tweak: Gang outfits are now free, but are now limited in stock (that replenishes - over time) - - tweak: While attempting a Hostile Takeover, gangs do not gain influence. Instead, - the takeover timer will be reduced by how many territories they control. - - tweak: Spraycan cost reduced to 5 influence. - - tweak: Recruitment Pen cooldown increased to 2 minutes, but is reduced if the - enemy gang has more members than yours. - - tweak: Tommy guns no longer deal stamina damage. - - rscdel: Gangtools can no longer recall the shuttle if the game mode is not Gang - War -2015-06-15: - Incoming5643: - - rscadd: Lizards can now choose from a wide varity of physical appearances in character - creation! Sprites made by WJohn. Hiss Responsibly. - Kor: - - rscadd: A terrible new creature stalks the halls of SS13. - - rscadd: The wizard has a new artefact related to said creature. - - rscadd: Added a new sepia slime plasma reaction. Try it out! - spasticVerbalizer: - - bugfix: Drones can now properly quick-equip. -2015-06-18: - AnturK: - - rscadd: Added new photo-over-pda function. Apply the photo to PDA to send it with - your next message! - Ikarrus: - - rscadd: Department Management consoles have been added to Head of Staff offices. - These will enable heads to modify ID's access to their department, as well as - preform demotions. - Miauw: - - tweak: Bullets can now damage cameras. - - tweak: Camera alarms now trigger 90 seconds after the first EMP pulse, instead - of when all EMP pulses run out. - - tweak: Makes the force required to damage cameras greater than or equal to ten - instead of greater than ten. - - tweak: Camera alarms now trigger when cameras are disabled with brute force or - bullets. - Xhuis: - - rscadd: Nanotrasen scientists have determined that a delaminating supermatter - shard combining with a gravitational singularity is an extremely bad idea. They - advise keeping the two as far apart as possible. - phil235: - - rscdel: Nerfed the xray gun. Its range is now 15 tiles. -2015-06-20: - Dorsisdwarf: - - tweak: Syndicate Bulldog Shotguns now use slug ammo instead of buckshot by default - - rscadd: Nuke Ops can now buy team grab-bags of bulldog ammo at a discount. - Ikarrus: - - rscadd: Wearing your gang's outfit now increases influence and shortens takeover - time faster. - - rscadd: Added several more options for gang outfits - - rscadd: Pinpointers will now point at active dominators. - - tweak: Gang outfits are now slightly armored - - tweak: Gang tags are now named 'graffiti' to make them harder to detect - - tweak: Initial takeover timer is now capped at 5 minutes (50% control) - - tweak: 'Server Operators: The default Delta Alert texts have changed. Please check - if your game_options.txt is up to date.' - - rscdel: Loyalty implants now treat gangs as it treats cultists. Implants can no - longer deconvert gangsters, but it can still prevent recruitments. - - tweak: Replaced tommy guns with 9mm 2-burst 32 mag uzis that costs 40 influence. - Unlike tommy guns gangs will be able to purchase ammo for uzis. - Jordie0608: - - tweak: 'For Admins: Jump-to-Mob (JMP) notification command replaced with Follow - (FLW).' - - rscadd: Message and Follow links added to many notifications. - - rscadd: New buttons to toggle nuke and set security level. - - spellcheck: Flamethrowers are logged in attack_log. - Thunder12345: - - rscadd: Combat shotguns are now semi automatic, and will be pumped automatically - after firing. - - tweak: Combat shotgun capacity has been reduced to six shells. - Xhuis: - - rscadd: You will now trip over securitrons if you run over them whilst they are - chasing a target. - - rscadd: An admin-spawnable drone dispenser has been added that will automatically - create drone shells when supplied with materials. - - rscadd: Airlock charges are available to traitors and will cause a lethal explosion - on the next person to open the door. - - rscadd: Nuclear operatives can now buy drum magazines for their Bulldog shotguns - filled with lethal poison-filled darts. - - rscadd: When a malfunctioning AI declares Delta, all blue tiles in its core will - begin flashing red. - - rscadd: Back-worn cloaks have been added for all heads except the HoP. LARPers - rejoice! - - rscadd: More suicide messages have been added for a few items. -2015-06-21: - GunHog: - - tweak: The Hostile Lockdown ability for Malfunctioning AIs has been nerfed. It - now costs 30 CPU, is much more obvious, and automatically resets in 90 seconds. - - tweak: Buffed the Upgrade Turrets Malfunction ability. Turrets will now fire heavy - lasers instead of simply shooting faster. - - rscadd: Nanotrasen has released an Artificial Intelligence firmware upgrade under - the ID 41ST0L3MYB1K3. It contains drivers for interacting with all variants - of exosuit technology, from the Ripley APLU design to even experimental Phazon - units. Simply upload your AI to the exosuit's internal computer via the InteliCard - device. Per safety regulations, the exosuit must have maintenance protocols - enabled in order to remove an AI from it. - - rscadd: Malfunctioning AIs may wirelessly steal mechs via a new power, Mech Domination. - For 30 CPU, a Malf AI may permanently upload itself to a mech, ejecting any - pilots. Malf AIs will still lose if they leave the Z-level, and the Malf will - be gibbed if the mech is destroyed - they cannot be carded out of the mech or - shunt to an APC. - Iamgoofball: - - rscdel: Blobs can no longer have Morphine as their chemical. - duncathan: - - tweak: Heat exchangers now update their color to match that of the pipe connected - to them. - - tweak: Heat exchangers are on longer dense. -2015-06-22: - Iamgoofball: - - rscdel: Removed failure chance and delay when emagging an APC. - KorPhaeron: - - tweak: Rebalanced armor to be less effective, reducing the melee, bullet and/or - laser damage reduction of all armor suits. - LaharlMontogmmery: - - rscadd: You can now click and drag a storage container to empty it's contents - into another container, disposal bin or floor tile. - Xhuis: - - experiment: Revenants have received a considerable overhaul. - - rscadd: Revenants will no longer share spawn points with space carp and will spawn - in locations like the morgue and prisoner transfer center. - - rscadd: Revenants can no longer cross tiles covered in holy water. - - rscadd: Revenants have a new ability called Defile for 30E. It will cause robots - to malfunction, holy water over tiles to evaporate, and a few other effects. - - rscadd: Upon death, revenants will appear and play a sound before rapidly fading - away and leaving behind glimmering residue as evidence of their demise. - - rscadd: This residue lingers with the essence of the revenant. If left unattended, - it may reform into a new revenant. Simply scattering it is enough to stop this, - but it also has high research levels. - - rscadd: Revenants now have fluff objectives as well as a set essence goal. - - tweak: Revenanants will be revealed for longer when using abilities and also receive - feedback on this revealing. - - tweak: Revenants can now only spawn via random event with a specific amount of - dead mobs on the station. The default for this is 10. - - bugfix: Revenants can no longer use abilities from inside walls. - - rscdel: Directly lethal abilities have been removed from revenants. In addition, - they can no longer harvest unconscious people, only the dead. -2015-06-23: - Fayrik: - - rscadd: NanoUI is now Telekenesis aware, but due to other constraints, NanoUI - interfaces are read only at a distance. - - tweak: Refactored all NanoUI interfaces to use a more universal proc. - - tweak: Adjusted the refresh time of the NanoUI SubSystem. All interfaces will - update less, but register mouse clicks faster. - - bugfix: Removed automatic updates on atmospheric pumps, canisters and tanks, making - them respond to button clicks much faster. - - bugfix: Atmos alarm reset buttons work now. Probably. - Iamgoofball: - - rscadd: Adds a progress bar when performing actions. - Ikarrus: - - rscadd: New gang names with tags created by Joan - - rscadd: C4 explosive can be purchased by gangs for 10 influence. - - tweak: Recruitment pen cost increased to 50. - - rscadd: Lieutenants recieve one free recruitment pen. - - tweak: Recruitment pens are now stealthy and no longer give a tiny prick message. - - tweak: Increased chance of deconversion with head trauma - - tweak: Recalling the shuttle now takes about a minute to work, during which you - won't be able to use your gangtool. - - rscadd: Pinpointers no longer point at dominators. Instead, dominators will beep - while active. - - rscadd: Added puffer jackets and vests. - - tweak: Increased gang outfit armor. It is moderately resistant to bullets now. - - rscdel: Removed bulletproof vests from gangtool menu. - Jordie0608: - - rscadd: Admins can now flag ckeys to be alerted when they connect to the server. - MrStonedOne: - - rscadd: Admins can now reject poor adminhelps. This will tell the player how to - construct a useful adminhelp and give them back their adminhelp verb - RemieRichards: - - tweak: Cumulative armour damage resistance is now capped at 90%, you will now - always take at bare minimum, 10% of the incoming damage. - - rscadd: Added a system for Armour Penetration to items, it works by temporarily - (It does NOT damage the armour or anything) reducing the armour values by the - AP value during the attack instance. - - rscadd: 'The formula for AP is Armour-ArmourPenetration = AdjustedArmour and AdjustedArmour - is used for all the remaining calculations instead of Armour (Eg: 80 Melee - - 15 AP = 65 Melee).' - - rscadd: The Ninja's Energy Katana has 15 AP, Xenomorphs have an inbuilt AP of - 10. - - tweak: You can now unwrench pipes who's internal pressures are greater than that - of their environment... - - rscadd: However it will throw you away from the pipe at extreme speed! (You are - warned beforehand if the pipe will do this, allowing you to cancel) - Vekter: - - bugfix: Finally fixed immovable rods! They will now properly bisect the station - (and crit anyone unlucky enough to be in their path). - - tweak: Increased Meteor activity detected in the vicinity of the station. Be advised - that many storms may be more violent than they once were. - - rscadd: Gravitational anomalies will now throw items at mobs in their vicinity. - Take care while scanning them. - - rscadd: Flux anomalies explode much more violently now. Get there and destroy - them, or risk losing half a department. - xxalpha: - - rscadd: 'Added a new Reviver implant: now it revives you from unconsciousness - rather than death.' - - rscadd: Added cybernetic implants and a cybernetic implants bundle to the Nuke - Ops uplink. - - bugfix: Fixed Nutriment pump implant printing. - - tweak: Health Analyzers now have the ability to detect cybernetic implants. - - tweak: X-Ray implants are now much harder to unlock. -2015-06-24: - Ikarrus: - - rscadd: Request Console message sent to major departments will now be broadcasted - on that department's radio. - - rscadd: Request Consoles can be used to quicly declare a security, medical, or - engineering emergency. -2015-06-25: - Iamgoofball: - - rscadd: Changes up how Explosive Implants work. - - rscadd: They have become Microbomb Implants. They cost 1 TC each. Each implant - you inject increases the size of the explosion. You gib on usage, regardless - of explosion size. - - rscadd: A Macrobomb implant was added for 20 TC. It is the equivalent of injecting - 20 microbombs. - - rscadd: Nuke Ops start with microbomb implants again. -2015-06-26: - Ikarrus: - - imageadd: Added a couple of new gang tag resprites by Joan. - Kor: - - tweak: Summon Guns has returned to its former glory. The spell will once again - create antagonists, now with the objective to steal as many guns as possible. - - tweak: Summon Guns once again costs a spell point, rather than granting one. - phil235: - - tweak: Buffs traitor stimpack (and adrenalin implant) to be more efficient against - stuns/knockdowns. - pudl: - - rscadd: You can now play games of mastermind to unlock abandoned crates found - throughout space. -2015-06-27: - Ikarrus: - - rscadd: Some objects can be burned now. - - rscadd: Bombs will shred your clothes, with respect to their layering and armor - values. Exterior clothing will shield clothing underneath. Storage items will - drop their contents when bombed this way. - Laharl Montogmmery: - - rscadd: 'Storage Content Transfer : Bluespace Boogaloo! You can now transfer the - content of the BoH/BRPED into tiles/bins/bags out of your reach. Range is 7 - tiles.' - MrStonedOne: - - tweak: Admins will now receive a notification when one of them starts to reply - to an adminhelp to cut down on multiple responses to adminhelps and let admins - know when an adminhelp isn't getting replied to. - - rscadd: The keyword finder in admin helps (adds a (?) link next to player names - in the text of adminhelps) has been added for all player to admin pms, as well - as admin say. - NullQuery: - - wip: Introduces html_interface, a module to streamline the management of browser - windows. - - rscadd: Adds playing cards that utilize a new HTML window management system. - Vekter: - - rscadd: Added a new military jacket to the Autodrobe and ClothesMate. -2015-06-28: - Ikarrus: - - rscadd: Gang Lieutenants can buy gang tools now, but at a higher cost than the - original boss - - rscadd: Gang leaders can register additional gangtools to themselves for use as - spares. - - tweak: Number of maximum lieutenants lowered to 2 - - tweak: Pistol cost increased to 25 influence - - tweak: Uzi cost increased to 50 influence - - tweak: Uzi Ammo decreased to 20 influence - - rscadd: Overcoats added to items the biogenerator can produce. - - rscdel: Micro and Macro bomb implants are now restricted to the Nuclear game mode. - phil235: - - tweak: Smoke (and foam) no longer distribute more reagents than they have. The - amount of clouds in a smoke now depends on the amount of smoke created. Acid - no longer melts items on a mob at low volume, and the chances to melt them increases - with the amount applied on the mob. Sprays can now contain acid again. -2015-06-29: - Ikarrus: - - rscadd: Clothing has been separated out of equipment lockers into wardrobes to - reduce clutter. - Incoming5643: - - rscadd: The secrets of the rainbow slimes have finally been revealed. To attain - this rare blob you must breed a slime with a 100% mutation chance! - - rscadd: Rainbow slime cores will generate a randomly colored slime when injected - with plasma. It's a good plan B if the slimes aren't cooperating in terms of - colors. You can get any color slime this way, pray to the RNG! - Xhuis: - - rscadd: The Sleeping Carp clan has made its presence known on Space Station 13. - Some gangs will name themselves after this group and practice martial arts rather - than using traditional gang weaponry. These shadowboxers are not to be taken - lightly. - oranges: - - tweak: Thanks to a breakthrough in directed vector thrusting, all nanotrasen brand - jetpacks have been greatly improved in speed and handling -2015-07-01: - Ikarrus: - - rscadd: Multiple gang leaders are spawned at round start, the number which depends - on server population - - rscdel: Gangsters can no longer be promoted mid-game. - - rscadd: Security can once again deconvert gangsters with loyalty implants - - rscadd: Added an Implant Breaker item to the gangtool as a purchasable item for - 10 influence each
    * They are a one-use item that destroys all implants in - the target, including loyalty implants
    * They will also attempt to recruit - the target before destroying itself - - rscdel: Implanters no longer work if the target is wearing headgear. Remove them - first. - NullQuery: - - tweak: The crew monitoring computer, AI crew monitoring popup and the handheld - crew monitor now update automatically. - - tweak: 'Crew monitoring: The health information has been turned into a health - indicator. It goes from green to red. Hovering over the icon shows detailed - information (if available).' - - tweak: 'Crew monitoring: The location coordinates have been hidden. You can see - them by hovering over the ''Location'' column.' - - rscadd: 'Crew monitoring: A minimap has been added so you can easily see where - people are.' - - tweak: 'Crew monitoring: Players who are not in range of a camera are not shown - on the minimap.' - - tweak: 'Crew monitoring: AI players can quickly move to other locations or track - players by clicking the minimap or items in the table.' - - tweak: 'Crew monitoring: For AI players, health information always shows a white - indicator instead of green-to-red. This is a deliberate limitation to prevent - the AI from becoming too omnipresent.' - phil235: - - tweak: Space drug overdose no longer cause brute/brain damage but you hallucinate - more. Space Drug Blob now makes you hallucinate even if you don't overdose on - its space drug. - xxalpha: - - rscadd: 'Added a new traitor objective: steal the station''s self-destruct nuke - plutonium core.' -2015-07-02: - Ikarrus: - - rscadd: Throwing reagent containers such as drinks or beakers may spill their - contents onto whatever they hit - - rscadd: Slipping while carrying items in your hand may cause ~accidents~ - - tweak: Mounted and portable flashers can now only be burned out from overuse, - similar to flashes. - oranges: - - tweak: Thanks to department budget cuts we've had to remove the security cameras - built into officer helmets, Nanotrasen apologies for this inconvenience. -2015-07-03: - Ikarrus: - - experiment: Added support for up to six gangs at a time. Admins may add additional - gangs to any round. - - experiment: Gang mode now has a chance to start with a third gang. - - rscadd: Promotion of lieutenants have been re-added - - rscadd: Every lieutenant promoted will lengthen the gang's recruitment cooldowns - by one minute. - - rscdel: Only gang bosses will be able to recall the shuttle from their gangtool. - - rscadd: A recruitment pen that has not been used for a while will accumilate charges, - so you are no longer punished for waiting to convert people. - - rscadd: Gangs are now fully functional outside of gang mode. - Ricotez: - - rscadd: 'Added two categories of mutant bodyparts for humans with the same system - that lizards use: ears and tails. Right now only admins can edit these.' - - rscadd: Updated the system that checks for which jobs your character qualifies - to be species-dependant. At this moment you won't notice any differences, but - in the future coders can use this to be more specific about which jobs a species - is allowed in under which circumstances. - - imageadd: 'Added one option to both categories, taken from the kitty ears: a cat - tail and cat ears.' - - rscadd: 'Added a new button to the VV menu drop-down list for admins: Toggle Purrbation. - Putting a human on purrbation will give them cat ears and a cat tail, and send - them the message ''You suddenly feel valid.'' Using the button a second time - removes the effects.' - - wip: 'Adding categories for tattoos and scars is in the works. (Read: I need sprites!)' - oranges: - - tweak: Engineers in nanotrasen's safety equipment department announced the release - of a new and improved version of the X25 taser trigger, previous triggers, which - suffered from a long line of misfire problems were recalled enmasse. Nanotrasen - refused to comment on rumours that the previous trigger design was the work - of a saboteur. -2015-07-04: - Gun Hog: - - tweak: The Ore Redemption Machine now allows users to release minerals without - having to insert an ID first. - Ikarrus: - - bugfix: Fixed items that logically shouldn't spill, spilling their contents when - thrown - - bugfix: Fixed Bartender's non-spilling powers - - bugfix: Fixed thrown beakers not applying their contents onto floors - - bugfix: Fixed unable to transfer reagents between beakers you are holding - - bugfix: Fixed bombs shredding clothes that should have been protected by covering - clothes - - bugfix: Fixed gang mode. - MMMiracles: - - rscadd: Added patriotic underwear apparel due to the most god damn american holiday - being just around the corner. - - rscadd: Also adds some other stuff for those inferior countires too, I guess. -2015-07-05: - AlexanderUlanH & Xhuis: - - rscadd: Shadowling Ascendants have a new ability to send messages to the world. - - bugfix: Glare now properly silences targets. - - bugfix: Veil now turns off held lights. - - tweak: Drain Thralls replaced with Drain Life, which targets all nearby humans. - - rscadd: Spatial Relocation replaced with Black Recuperation which lets you revive - a dead thrall every five minutes. - - rscdel: Removed Vortex. - - tweak: Shadowlings can now only enthrall five people before being forced to hatch; - Hatched shadowlings can continue to enthrall however non-hatched ones can't - pass the global limit. - - tweak: Enthralling sends a message to all nearby humans. - - tweak: Removed cooldown on Glacial Freeze. - Ikarrus: - - tweak: Reactive armor may now teleport user to space tiles. Be careful using it - around space. - Razharas: - - tweak: Firing pins can now be removed by tablecrafting a gun with a plasmacutter, - screwdriver and wirecutters. - RemieRichards: - - imageadd: Melee attacks with weapons now display and animation of the weapon over - the target. - - rscadd: Tablecrafting window now shows all recipies and has been split into categorized - tabs. - - rscdel: 30 item limit removed. - Sabbat: - - rscadd: Updated the cult armor rune to let you get additional equipment or abilities - based on what you're wearing or holding. Some nerfed versions of wizard spells - can be used by the cult in exchange for unique clothing, these spells require - the cult robes or armor in order to use. No armor choices are mandatory, you - will always have the option of the default choice. - - rscadd: Zealot - Default armor rune. If none of the required clothing is worn - this will be chosen automatically. Is the same as ever. - - rscadd: Summoner - If you are wearing the wizard robe and hat when using the armor - rune this choice will be available. User will receive magus robes and hat and - nerfed versions of the summon shard and summon shell spells. - - rscadd: Traveler - Available to people wearing EVA suit and helmet. Replaces the - EVA suit and helmet with the cult space suit and space helmet. Gives you a sword. - - rscadd: Marauder - Available to people wearing the captain's space suit and helmet. - Same as Traveler except user is given a spell of summon creature (two creatures). - They can and will attack the user. - - rscadd: Trickster - Available if wearing the RD's reactive teleport armor. Gives - you magus robes, a wand of doors, and a nerfed version of Blink. - - rscadd: Physician - Available if wearing the CMO's labcoat. Gives you a wand of - life. - TheVekter: - - rscadd: Ian now has a dog-bed in the HoP's office. - nukeop: - - rscadd: Uplinks now have a syndicate surgery bag containing surgery tools, a muzzle, - a straightjacket and a syndicate MMI. - - rscadd: Syndicate MMIs can only be placed in cyborgs to create an unlinked cyborg - with syndicate laws. -2015-07-06: - Ikarrus: - - tweak: Increased Uzi SMG cost to 60 influence. - - tweak: Increased Uzi ammo cost to 40 influence. - - tweak: Domination attempt limit is reduced to 1 per gang while the shuttle is - docked with the station. - - tweak: Gang bosses can promote and recall the shuttle using spare gangtools - - bugfix: Fixed Gang bosses getting deconverted with head trauma - - rscadd: Lizard characters can now get random names unique from humans. -2015-07-07: - Ikarrus: - - bugfix: Fixed bug where gang messages would occasionally fail to send. - - bugfix: Fixed bug that prevented implant breakers from recruiting security. - - tweak: Implanters are now only blocked by helmets with THICKMATERIAL - - rscdel: Light severity explosions no longer shred clothes. - MMMiracles: - - rscadd: Adds a new crate to cargo in the security section, for when desperate - times call for desperate measures. - NullQuery: - - bugfix: Crew monitoring computers now sort by department and rank again. - - tweak: 'Crew monitoring computer: Hovering over a dot on the minimap will now - jump to the appropriate entry in the table.' - - bugfix: sNPCs were given ID cards with blank assignments. -2015-07-09: - AlexanderUlanH: - - rscadd: Riot Shotguns now spawn loaded with rubber pellet shells that deal high - stamina damage. - kingofkosmos: - - tweak: Both beakers and drinking glasses can now be be drunk from, fed to mobs - and splashed on mobs, turfs and most objects with harm intent. - nukeop: - - tweak: RCDs have a larger storage and can be loaded with glass, metal and plasteel. - - rscadd: Grilles and Windows can be made with an RCD. - - rscadd: Engi-Vend machine now has three RCDs. - - rscdel: Removed RCD as a steal objective. -2015-07-10: - Ikarrus: - - rscadd: 'New Changeling Ability: False Armblade Sting. It creates an undroppable - armblade on the target temporarily. It will appear exactly like a real one, - except you can''t do anything with it.' - - tweak: Transform stings are no longer stealthy. -2015-07-11: - Dorsidwarf: - - tweak: Due to a new Syndicate budget, uplink implants are now only 14 TC. - - tweak: In order to facilitate inter-agent communication, Syndicate Encryption - Keys have been reduced to 2TC. They retain the ability to intercept all channels - and speak on a private frequency. - Ikarrus: - - tweak: Robotic augmentations have been made a bit more difficult to maintain. -2015-07-13: - Ikarrus: - - imageadd: Loyalty Implant HUD Icon has been updated. - duncathan: - - tweak: Greatly shortened the time it takes to lay pipes with the RPD and to unwrench - pipes in general. - - rscadd: Added Optical T-Ray scanners to R&D and Atmospheric Technician closets. - Optical T-Ray Scanners function identically to a handheld scanner. -2015-07-14: - AnturK: - - rscadd: New species of mimic was spotted in the wilderness of space. Watch out! - Jordie0608: - - rscadd: Added a Local Narrate verb for admins. -2015-07-17: - Ikarrus: - - bugfix: Virology is no longer all-access. - - rscadd: Changelings now have the ability to swap forms with another being. - - tweak: Halved Domination Time. - - tweak: Reinforced windows and windoors are a bit more resistant to fires and blasts. - MrStonedOne: - - tweak: 'Scrubbers now use power: 10w + 10w for every gas its configured to filter. - (60w for siphon)' - - rscadd: Scrubbers can now be configured to operate on a 3x3 range via the air - alarm at a high cost (ranging from 100w to 1000w depending on how many tiles - are near it that aren't blocked and how much power it's using normally) - - tweak: Huge portable scrubbers (like in toxins storage) now use a 3x3 range rather - then a higher volume rate - - bugfix: Fixed issue with atmos not allowing low levels of plasma to spread - - bugfix: Fixed issue with atmos not adding or removing plasma overlays in some - cases - - tweak: Panic siphon now uses a 3x3 area range rather then increasing the scrubbers - intake rate by 8x - - tweak: Replace air uses 3x3 range for the first stage - - rscadd: 'Air alarms now have 3 new environmental modes:' - - rscadd: Siphon - Panic siphon without the panic, operates on a 1 tile range - - rscadd: Contaminated - Activates all gas filters and 3x3 scrubbing mode - - rscadd: Refill Air - 3 times the normal vent output -2015-07-18: - AlexanderUlanH: - - tweak: Reduced stun duration of tabling to be closer to other stuns. - Iamgoofball: - - tweak: The Bioterror Chemical Sprayer is now filled with a more deadly mix of - chemicals. - RemieRichards: - - tweak: Changelings now regenerate chemicals and geneticdamage while dead, but - only up to specific caps (50% of their max chem storage, and 50 geneticdamage) - - tweak: Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s - dead - - rscadd: Changelings now get to see the last 8 messages the person they absorbed - said, to allow them to better impersonate their victim's speech patterns - Steelpoint: - - tweak: Reduced weight of Sechailer, it now fits in boxes. - phil: - - tweak: Smoke and foam touch reactions gets buffed. - - rscadd: Reagent dispensers (watertank, fueltank) tells you how much reagents they - have left when examined. - - tweak: Liquid dark matter blob spore smoke now cannot throw you. The effects of - sorium, blob sorium, liquid dark matter and blob liquid dark matter are now - scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are - close but simply moves the mobs that are further away. -2015-07-19: - Gun Hog: - - rscadd: Nanotrasen advancements in cyborg technology now allow for integrated - headlamps! As such, the flashlight package normally used as a module is now - seamlessly merged with their systems! - Ikarrus: - - rscadd: Asimov's subject of "human beings" can now be modified by uploaders. - - rscadd: Eaxmining AI modules while adjacent to them will show you what laws it - will upload. - MMMiracles: - - soundadd: Adds a TWANG sound effect when hitting things with a guitar. -2015-07-20: - AnturK: - - tweak: Lightning Bolt now always bounces 5 times and deals 15 to 50 burn damage - to each target depending on the chargeup - KorPaheron: - - rscadd: Added the Multiverse Sword, a new wizard artifact that can summon clones - of yourself from other universes, allowing for dangerous amounts of recursion. - phil235: - - tweak: Mechs no longer use object verbs and the exosuit interface tab. They now - use action buttons. Mechs now have a cycle equipment action button to change - weapon faster than by using the view stats window. Mechs get two special alerts - when their battery or health is low. Mechs now properly consume energy when - moving and having their lights on. Using a mech tool that takes time to act - now shows a progress bar (e.g. mech drill). - - rscadd: Mechs now have a cycle equipment action button to change weapon faster - than by using the view stats window. - - rscadd: Mechs get two special alerts when their battery or health is low. - - tweak: Mechs now properly consume energy when moving and having their lights on. - - rscadd: Using a mech tool that takes time to act now shows a progress bar (e.g. - mech drill). -2015-07-21: - Fayrik: - - tweak: Syndicate Donksoft gear now costs less. - Xhuis: - - rscadd: Firelocks may now be constructed and deconstructed with standard tools. - Circuit boards can be produced at a standard autolathe. - phil235: - - tweak: Thrown things no longer bounces off walls, unless they're in no gravity. - Heavy items and mobs thrown can push the mobs and non anchored objects they - land on. Throwing a mob onto a mob in no gravity will push each one in opposite - direction. Thrown mobs landing on wall, or dense object or mob gets stunned - and a bit injured. The damage when mob hit a wall is nerfed. -2015-07-23: - NullQuery: - - tweak: 'Crew monitoring: The minimap now supports scaling. You can zoom in and - out using the buttons. Hovering over an entry in the table centers the minimap - on that part of the screen.' - - tweak: 'Crew monitoring: If the window is wide enough the health indicator will - expand to show full health data (if available).' - - tweak: 'Crew monitoring: Clicking on the area name will now copy the coordinates - to your clipboard.' - - tweak: 'Crew monitoring: The AI can view health information again, but there is - a 5 second delay between updates for everyone watching.' - freerealestate: - - rscadd: Added resist hotkeys for borgs and humans. With hotkeys mode, use CTRL+C - or C as a human and CTRL+C, C or END as a borg. With hotkeys mode off, use CTRL+C - as a human and END as a borg. - xxalpha: - - bugfix: Changeling augmented eyesight night vision is now working. -2015-07-24: - Incoming5643: - - rscadd: The spells disintegrate and flesh to stone have had their mechanics changed. - Using these spells will spawn a special touch weapon in a free hand (your dominant - hand if possible) that can then be used to inflict the spell on the target of - your choice. Having the touch weapon out is obvious, this is not a stealth based - change. Clicking the spell while the hand is out will let you return the charge - without using it. - - rscdel: The spell won't begin to recharge until the hand attack is either used - or returned. Additionally these changes mean you can no longer use these spells - while stunned or handcuffed. As a suggestion remember that the mutate spell - allows you to break out of cuffs very easily, and warping abilities will keep - you from getting cuffed to begin with! -2015-07-25: - Dorsisdwarf: - - tweak: Due to a fire sale at Syndicate HQ, many of the more interesting traitor - gadgets have been cut in price dramatically. Please take this opportunity to - make full use, as we cannot guarantee that the sale will last! - bgobandit: - - bugfix: Under pressure from the Animal Rights Consortium, Nanotrasen has improved - conditions at its cat and dog breeding facilities. Cats and pugs are now much - more responsive to their owners. - duncathan: - - tweak: Restores RPD delay on disposals machines. - xxalpha: - - tweak: Agent IDs are now rewrittable. -2015-07-26: - Phil235: - - rscadd: Sechailers will now break when used too often. - - imageadd: Mechs now have new action button sprites. - Steelpoint: - - rscadd: Security Officers now spawn with a security breathmask in their internals - box. - - imageadd: Abductor's batons now changes color with modes. - - imageadd: Unique sprites for Abductor hand cuffs and paper. - goosefraba19: - - imageadd: Updated the Power Monitoring Console with better alignment and colorized - readouts. -2015-07-27: - Bgobandit: - - bugfix: Burgers can now be made from corgi meat again. - Ikarrus: - - rscadd: Added shutters to the armory to allow quick access when needed. - - bugfix: Security can now use the Brig external airlocks. - - rscadd: Added a join queue when the server has exceeded the population cap. - - tweak: Decreased the cost of Body Swap and removed it's genetic damage. - kingofkosmos: - - rscadd: Added a link to re-enter corpse to alert when your body is placed in a - cloning scanner. -2015-07-28: - Anonus: - - imageadd: New gang tags for Omni and Prima gangs. - Chiefwaffles: - - rscadd: After realizing how often AIs tend to 'disappear', Central Command has - authorized the shipment of the Automated Announcement System to take over the - AI's responsibility of announcing new arrivals. - - rscadd: In addition, users are able to configure the messages to their liking. - Early testing has shown that this feature may be vulnerable to malicious external - elements! - - rscadd: The station's R&D software has been updated so it can now succesfully - create its own prototype AAS board once the prerequisite levels have been met. - Dorsisdwarf: - - tweak: Increased the cost of Bioterror darts to 6TC. - Incoming5643: - - experiment: Double Agents no longer know they're Double Agents and not just standard - Traitors. - xxalpha: - - rscdel: Removed Anti-Drop and Nutriment Pump implants from Nuclear Operative's - uplink. -2015-07-29: - AnturK: - - rscadd: Aliens can now mine through asteroid rock. - GunHog: - - tweak: Cyborg headlamps have a short cooldown before reactivation when forcibly - deactivated. - - bugfix: Shadowling's Veil now shuts down headlamps for the ability's entire duration. - Kor: - - rscadd: Eating the heart of a Slaughter Demon will grant you dark powers. - freerealestate: - - bugfix: Fixed bug where copying with ctrl+C didn't work due to it being assigned - to resist. - - rscadd: Changed resist to B (hotkeys mode) and ctrl+B (either mode) instead. - - rscdel: Removed End resist from cyborgs. -2015-07-30: - Gun Hog: - - tweak: The Reactivate Camera power for Malfunctining AIs now costs 10 CPU, and - works on the entire camera network, up to 30 cameras fixed. - - tweak: The Upgrade Cameras power now costs 35 CPU, upgrades all cameras in the - network to have EMP proofing, X-ray, and gives the AI night-vision. - Ikarrus: - - rscadd: Door Access buttons can now be emagged to remove access restrictions. - LordPidey: - - rscadd: Added a new medication, Miner's Salve. It heals brute/burn damage over - time, and has the side effect of making the patient think their wounds are fully - healed. It is mixed with water+iron+oil, or grind a twinkie, a sheet of metal, - and a sheet of plasma. - - rscadd: Added a grinder to the mining station. - Midaychi: - - rscadd: Random loot has been added to the derelict as salvage for drones. - Scones: - - rscadd: Adds a Rice Hat to the biogenerator. -2015-08-02: - Incoming5643: - - rscadd: Syndicate toolboxes now come with never before seen red insulated gloves. - Steelpoint: - - bugfix: Fixed multiple mapping errors for Boxstation and the mining base. - - rscadd: A circuit imprinter and exosuit fabrication board have been added to tech - storage. - SvartaSvansen: - - rscadd: Our lizard engineers have worked hard and managed to improve Centcom airlocks - so they no longer disintegrate when the electronics are removed! - - tweak: Put a safety net in place so future airlocks without assemblies produce - the default assembly instead of disintegrating. -2015-08-04: - Kor: - - rscadd: Soulstones will now attempt to pull ghosts from beyond if the targeted - corpse has no soul. - Summoner99: - - rscadd: Added the *roar emote back to Alien Larva - - bugfix: Fixed aliens not being able to do the *hiss and *screech emotes - - tweak: 'Changed how the plural emote system works and now some emotes have plural - versions, example is: *hiss and *hisses.' -2015-08-05: - CoreOverload: - - rscadd: Implants, implant cases and implanters got RnD levels and can be DA'ed - for science. - - rscadd: Surgically removed implant can be placed into an implant case. Remove - implant with empty implant case in inactive hand. - - rscadd: Surgical steps now got progress bars. - - rscadd: You can cancel a surgery by using drape on operable body part again. This - works only before you perform surgery's first step. - - rscadd: Operating computer shows next step for surgeries. No more alt-tabbing - to view next step on wiki while operating. - - tweak: You cannot start two surgeries on one body part at once. You can start - two multiloc surgeries (i.e. two augumentations) on diffirent body parts at - once. - - tweak: Monkey <-> Human transformations now keep your internal organs, cyberimplants - and xeno embryos included. - Ikarrus: - - rscdel: Head beatings no longer deconvert gangsters. - LordPidey: - - rscadd: 'Added a new chemical. Spray tan. It is made by mixing orange juice with - oil or corn oil. Warning: overexposure may result in orange douchebaggery.' - Xhuis: - - rscadd: Shadowling thralls can now be deconverted via surgery or borging. - - rscadd: Thralls can be revealed by examining them. They can hide this by wearing - a mask. - - rscadd: Thralls have a few minor abilities they can use in addition to night vision. - - rscadd: Hatch-exclusive abilities can no longer be used if you are not the shadowling - mutant race. - - rscadd: Ascendants are now immune to bombs and singularities. Honk. - - rscadd: A Centcom report has been added for shadowlings. - - tweak: Ascending no longer kills all shadowling thralls. This allows antagonists - who were enthralled to succeed along with the ascendants. - - tweak: Annihilate now has different sound and a shorter delay before the target - explodes. In addition, it now works on all mobs, instead of just humans. - - bugfix: Glacial Blast now properly has no cooldown if used while phase shifting. - - bugfix: Fixes a runtime if a target with no mind is enthralled. - bgobandit: - - rscadd: Nanotrasen scientists have achieved the tremendous breakthrough of injecting - gold slime extracts with water. Pets ensued. -2015-08-06: - AnturK: - - rscadd: Adds the voodoo doll as a mining treasure, link it with a victim with - an item previously held by them. - - rscadd: Once linked the voodoo doll can be used to injure, confuse and control - the victim. - Core0verlad: - - tweak: Items can now be removed from storage containers inside storage containers. - - imageadd: Beds and bedsheets have new sprites. - - rscdel: MMIs are no longer ID locked. - KorPhaeron: - - tweak: Slaughter Demon's have had their health reduced to 200 and their speed - reduced but they get a speed boost when exiting blood. - MrPerson: - - rscadd: Items stacks now automatically merge unless thrown when moved onto the - same tile. -2015-08-07: - KorPhaeron: - - rscadd: Added a new Guardian Mob that can be summoned to manifest inside a mob. - - rscadd: Guardians can communicate with their host and materialize themselves to - protect their host with magic powers. - - rscadd: Guardians are invincible but cannot live without or too far from their - host, they also relay injuries they suffer to the host. - Phil235: - - bugfix: Fixed being able to run into your own bullet. - RemieRichards: - - rscadd: You no longer need to click on an item in a storage container to remove - it, clicking anywhere around the item works. - bustygoku: - - rscdel: Removed the chance for a disease to make you a carrier on transfer. - phil235: - - tweak: The plasma cutter's fire rate is now a bit lower but its projectile can - pierce multiple asteroid walls and its range isn't lowered in pressurized environment - anymore. -2015-08-09: - RemieRichards: - - rscadd: 'Nanotrasen Mandatory FunCo Subsidiary: CoderbusGames, would like to announce - an update to Orion Trail!' - - rscadd: 'Spaceports: Buy/Sell Crew, Trade Fuel for Food, Trade Food for Fuel, - Buy Spare Electronics, Engine Parts and Hull Plates, or maybe you think you''re - tough enough to attack the spaceport?' - - rscadd: 'Changelings: Changelings can now sneak into your crew, Changelings eat - double the standard food ration and have a chance to Ambush the rest of the - crew!' - - rscadd: 'Kill Crewmembers: Do you suspect changelings? or dont feel you have enough - food rations? Just shoot somebody in the head, at any time!' -2015-08-12: - CosmicScientist: - - rscadd: Added Space Carp costume to the code, get it from an autodrobe near you. - - rscadd: Added Ian costume to the code, take his place under the HoP's hand, get - it from an autodrobe or corgi hide, keep it away from washing machines or it'll - meat its end as clothing. - - rscadd: Added Space Carp spacesuit to the code, I know what I'm praying for. - bgobandit: - - rscadd: After multiple complaints from WaffleCo food activists, Nanotrasen has - added real chocolate, berry juice and blue flavouring to its ice cream products. -2015-08-13: - CoreOverload: - - rscadd: 'Added a new 8TC traitor item: subspace storage implant. It allows you - to store two box-sized items in (almost) undetectable storage. ' - - tweak: Changed the way most of the surgical operations work. See wiki for new - steps. - - tweak: You can cancel step 2+ surgeries with drapes and cautery in inactive hand. - - tweak: Defib no longer works on humans who have no heart. Changeling/thrall/cult/strange - reagent revives are still working, and this is intended. - - rscadd: You can eat all organs raw now, with exception for brains and cyberimplants. - - rscadd: Some xenos abilities are linked to their organs. Play with xenos' guts - for fun and profit! - RemieRichards: - - rscadd: Modifying a string (Text) variable with View Variables or View Variables - Mass Modify now allows you to embed variables like real byond strings, For example - the variable real_name; you could set a text var to [real_name] and it would - be replaced with the actual contents of the var, This allows for Mass fixing - of certain variables but it's also useful for badmin gimmickery -2015-08-15: - Miauw: - - rscadd: Changeling transformations have been upgraded to also include clothing - instead of just DNA. - - tweak: Patches no longer work on dead people. - - rscadd: Added 15-force edaggers that function like pens when off. - MrPerson: - - rscadd: Objects being dragged will no longer get shoved out of your grasp by space - wind. Retrieving dead bodies should be possible. - RemieRichards: - - rscadd: Added Changeling Team Objectives, these are handed out to all lings, with - the chance of a round having one being 20*number_of_lings% (3 lings = 60%) - - rscadd: 'Impersonate Department (Team Objective): As many members of a department - as can reasonably be picked are chosen for the lings to kill, replace and escape - as' - - rscadd: 'Impersonate Heads (Team Objective): 3 to 6 Heads of Staff are chosen - for the lings to kill, replace and escape as' - - tweak: If the Changelings have a Team Objective, their usual Kill, Maroon, Etc. - objectives will not pick other changelings, to discourage backstabbing in teamling - - tweak: Changeling Engorged Glands is now the default storage and regen rate, Engorged - Glands remains for an extra boost - - rscadd: Armblades can now be used to open powered doors, however it takes 10 seconds - of the changeling standing still, Their ability to instantly open unpowered - doors remains unchanged - - rscdel: Debrain objective is no longer handed out to lings, it's as good as broken - these days - - rscadd: Changelings may now purchase a togglable version of the Chameleon Skin - genetics mutation, for 2 DNA -2015-08-16: - Joan: - - rscadd: Revenants will now occasionally spawn as an event. - - tweak: Revenants gain more energy from Harvesting, and can Harvest from people - in crit. - - tweak: Revenant powers are more effective, and no longer freeze you in place, - besides Harvest. - - tweak: Slain Revenants will respawn much faster. - - bugfix: Fixed a whole bunch of revenant bugs, including one that caused the objective - to always fail. - Kor: - - rscadd: The wizard can now stop time. - MMMiracles: - - tweak: Revamps bioterror darts into a less-lethal, syringe form. Removed the coniine - and spore toxins to keep it solely for quiet take-downs. -2015-08-18: - CoreOverload: - - rscadd: Added a new low-tech eye cyberimplant in RnD - welding shield implant. - - rscadd: Implanter and empty implant case added to protolathe. - - rscadd: You can sell tech disks and maxed reliability design disks in cargo for - supply points. - - tweak: DA menu shows current research levels. - - tweak: You can print cyberimplants in updated mech fab. - Supermichael777: - - bugfix: Added an ooc hotkey for borgs = O. They simply didn't have one and it - was a consistency issue - - rscadd: Also added Ctrl+O as an any mode keycombo so you dont have to backspace - and type ooc. Added to hotkey mode to remain consistent with all other Ctrl - combos - bustygoku: - - tweak: Most backpacks now have 21 or more slots, but are still weight restricted. - What this means is that you can have a lot of tiny weight items, but only 7 - medium items just like before. - phil235: - - tweak: Janicart rider no longer slip on wet floor or bananas. Moving on a floor - tile with lube while buckled (chair, roller bed, etc) will make you fall off. -2015-08-19: - Joan: - - rscadd: Added a new revenant ability; Malfunction. It does bad stuff to machines. - - tweak: Defile and Overload Lights now briefly stun the revenant. - - tweak: You can now Harvest a target by clicking on them while next to them. - - bugfix: Harvesting no longer leaves you draining if the target is deleted mid-drain - attempt. - - rscdel: Defile no longer emags bots or disables cyborgs, Malfunction does that - now. - Kor: - - rscadd: The Ranged and Scout guardian types have been merged, and gained a new - surveillance snare ability. - SconesC: - - rscadd: Added Military Belts to traitor uplinks. - bgobandit: - - rscadd: CentComm now offers its cargo department toys, as well as detective gear - so their boss can figure out which tech wasted all the points on them. - phil235: - - rscadd: You can now partially protect yourself from blob attack effects by wearing - impermeable clothes like hardsuits, medical clothes, masks, etc. Max protection - effect is capped at 50%. - - rscdel: Splashing someone with chemicals no longer injects those chemicals in - their body. - - bugfix: Fixes splashing acid on items or floor with items not having any effect. -2015-08-28: - bgobandit: - - bugfix: 'Overheard at CentComm: ''This burn kit said salicyclic acid would heal - my burns! WHO MADE THIS SHIT?'' A muffled honking is heard in the background. - (Burn first-aid kits now contain an appropriate burn pill.)' - - rscadd: Oxandrolone, a new burn healing medication, has been added to burn first-aid - kits and to chemistry. Ingesting 25 units or more causes burn and brute damage. -2015-09-01: - Dorsidwarf: - - tweak: Changelings' Digital Camoflague ability now renders them totally invisible - to the AI - ExcessiveUseOfCobblestone: - - rscadd: Added health analyzer to the autolathe. - - tweak: Moved Cloning board to Medical Machinery section. - - tweak: Moved Telesci stuff to Teleporter section. - Fox P McCloud: - - tweak: Adds the emitter board to to the circuit imprinter for R&D. - Gun Hog: - - tweak: The Disable RCD Malfunction power is now Destroy RCDs! It costs 25 CPU - (down from 50), causes RCDs to explode, can be used multiple times, and no longer - affects cyborgs. - Kor: - - rscadd: Revheads and Gang leaders now spawn with chameleon security HUDs, for - keeping track of loyalty implanted crew. - - rscadd: Syndicate thermals now have a chameleon function as well, allowing you - to disguise the goggles to match your job. - Miauw: - - tweak: Edaggers actually work now and have been buffed to 18 brute and 2 TC. - Oisin100: - - rscadd: Nanotransen discover ancient human knowledge confirming that trees produce - Oxygen From Carbon Dioxide - - tweak: Trees now require Oxygen to live. And will die in extreme temperatures - Xhuis: - - rscadd: The arcade machines have been stocked with a xenomorph action figure that - comes with realistic sounds! - - rscadd: Darksight now has its own icon. - - rscadd: Empowered thralls have been added. While obvious, they are more powerful - and can resist dethralling while conscious. Only 5 can exist at one time. - - rscadd: Shadowlings can now change their night vision radius by using the action - button their eyes (glasses) now provide. - - tweak: Torches are dimmer, being as bright as flashlights, and no longer fit on - belts. - - tweak: Black Recuperation now has a 1 minute cooldown, down from 5. It can also - be used to empower living thralls. - - tweak: Guise can now be used outside of darkness and makes the user more invisible - than before. - - bugfix: Enthrall now functions properly when a shadowling is not hatched, allowing - them to enthrall up to 5 people before hatching. - xxalpha: - - tweak: Blood crawling is now a spell. - - rscadd: Engineering cyborgs now have a constant magpulse. - - tweak: Changed foam spreading to be like gas spreading. -2015-09-05: - Shadowlight213: - - rscadd: The syndicate have taken notice of the camera bug's woeful underuse, and - have managed to combine all of its upgrades into one! -2015-09-06: - Fox P McCloud: - - bugfix: Fixes gold sheets having plasma as their material. - Xhuis: - - bugfix: Nanotrasen inspectors have discovered a fault in the buckles of chairs - and beds. This has been fixed and you are now able to buckle again. -2015-09-07: - xxalpha: - - tweak: Changed xeno weed spread to be like gas spread. -2015-09-09: - Joan: - - rscadd: New blob chemical; Cryogenic Liquid. Cools down targets. - - tweak: Tweaked names, colors, and effects of remaining blob chemicals; - - tweak: Skin Ripper is now Ripping Tendrils and does minor stamina damage, in addition - to the brute damage. - - tweak: Toxic Goop is now Envenomed Filaments and injects targets with spore toxin - and causes hallucinations, in addition to the toxin damage. - - tweak: Lung Destroying Toxin is now Lexorin Jelly and does brute damage instead - of toxin damage. The oxygen loss it causes can also no longer crit you in one - hit. - - tweak: Explosive Gelatin is now Kinetic Gelatin and does random brute damage, - instead of randomly exploding targets. - - rscdel: Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals - are gone. - bgobandit: - - rscadd: Nanotrasen has commissioned two new corporate motivational posters for - your perusal and edification. - - rscadd: Nanotrasen also wishes to remind the crew that non-authorized posters - ARE CONTRABAND. Especially those new ones with Rule 34. Perverts. -2015-09-11: - CosmicScientist: - - tweak: Drone dispenser now has a var for its cooldown, get var editing. -2015-09-13: - Fox P McCloud: - - bugfix: Fixes an exploit and inconsistency issue with a few material amounts on - a few items and designs. - - bugfix: Fixes Bibles/holy books not properly revealing runes. - - bugfix: fixes stimulants not properly applying its speedbuff. - Gun Hog: - - tweak: Nanotrasen scientists have proposed a refined prototype design for the - nuclear powered Advanced Energy guns to include a taser function along with - the disable and kill modes. Addtionally, they have modified the chassis blueprint - to include a hardpoint for attachable seclites. - Iamgoofball: - - tweak: Reduced the cost of changeling armor to 1 and increased it's armor values. - Jordie0608: - - rscadd: You can now view the reason of a jobban from character setup. - xxalpha: - - rscadd: Drying agent splashed on galoshes will turn them into absorbent galoshes - that dry wet floors they walk on. - - rscadd: Drying agent can be made with ethanol, sodium and stable plasma. -2015-09-14: - Fox P McCloud: - - tweak: Adds a mining voucher to the Quartermaster's locker. - Thunder12345: - - rscadd: The captain has been issued with a new jacket for formal occasions. - - tweak: Research has shown that is is possible to build technological shotshells - without the need for silver. The design blueprints supplied to your station - have been updated accordingly. - xxalpha: - - bugfix: Fixed not being able to grab things from storage while inside aliens. - - bugfix: Fixed two progress bars when devouring. - - rscadd: Shields will now block alien hunter pounces. - - tweak: Alien hunters health reduced to 125 from 150. Alien sentinels health increased - to 150 from 125. - - tweak: Alien hunters will no longer be transparent when stalking, this ability - was given to alien sentinels. - - tweak: Alien slashing now deals constant 20 damage but has a chance to miss. - - tweak: Reduced alien disarm stun duration vs cyborgs, from 7 seconds to 2 seconds. - - tweak: Alien sentinels now move as fast as humans. - - tweak: Facehuggers and alien eggs layers increased to be higher than resin walls. -2015-09-16: - Razharas: - - tweak: Replaces the space cube with space torus. Space levels are now each round - randomly placed on the grid with at least one neigbour, any side of the space - level that doesnt have neigbour will loop either onto itself or onto the opposite - side of the furthest straight-connected space level on the same axis. - Supermichael777: - - tweak: The detomax pda cartridge no longer blows its user up. - Xhuis: - - experimental: Cultists will now be able to create all runes without needing to - research or collect words. This is subject to change. - - tweak: Cult code has been significantly improved and will run much faster and - be more responsive. - - tweak: Conversion runes can now be invoked with less than three cultists, but - take a small amount of time to convert the target. - - tweak: Armor runes will only outfit the user with standard armor, rather than - having different loadouts for different worn clothing items. - - tweak: Astral Journey runes will now pull the user back to the rune if they are - moved. The user also has a different color while on the rune. - - tweak: Free Cultist has been removed. Summon Cultist now works even if the target - is restrained. - - tweak: Sacrifice and Raise Dead runes now offer more precise target selection. - - soundadd: Sacrifice runes now have different sounds, and gib rather than dust - (assuming the target is not a silicon). - - tweak: There is no longer a maximum cap on active runes. - - tweak: Runes have been renamed to Rites. For instance, the Teleport rune is now - the Rite of Translocation. The only exception to this is the rune to summon - Nar-Sie, which is a Ritual. - - tweak: Nar-Sie now has a new summon sound. - - tweak: The Nar-Sie summon rune has a new 3x3 sprite. - - tweak: The stun rune no longer stuns cultists. - - rscadd: The Rite of False Truths had been added, that will make all nearby runes - appear as if they were drawn in crayon. - - rscadd: Runes can now be examined by cultists to determine their name, function, - and words. - phil235: - - tweak: Riot and energy shield users now have a chance to block things thrown at - them as well as xeno leaping at them. -2015-09-17: - bgobandit: - - rscadd: Meatspikes can now be constructed and deconstructed with metal and rods, - as well as wrenched and unwrenched! Humans and corgis can be used on them as - well. - xxalpha: - - tweak: 'Reworked nuke deconstruction: Standardized steps, partial reparation (use - metal) to contain radiation.' - - rscadd: New portable nuke, self-destruct terminal, syndie screwdriver sprites - by WJohnston. -2015-09-19: - Xhuis: - - rscadd: Shadowlings are now able to sacrifice a thrall to extend the shuttle timer - by 15 minutes. This will not stack. - - bugfix: Additional abilities granted by Collective Mind will now properly have - icons. - - bugfix: Shadowlings now have their antagonism removed if turned into a silicon. - - tweak: The order of abilities unlocked by Collective Mind has been changed. It - now starts with Sonic Screech. - - tweak: Veil now destroys glowshrooms in a much larger radius than before. -2015-09-20: - Xhuis: - - tweak: Rites have been renamed to their old runes, which reflect their functionality. - - tweak: Examining a talisman no longer opens the paper GUI. - - tweak: Armor talismans have been re-added. - - tweak: EMP talismans now have the same range as their rune counterpart. - - tweak: Some talismans now cost health to use, costing more or less depending on - their effect. - - tweak: Scribing runes now deals 0.1 brute damage instead of 1. - - tweak: Bind Talisman runes no longer deal 5 brute damage when invoking. - - tweak: Rune shapes and colors are now identical to their old versions. - - tweak: Conversion runes can no longer be used by yourself, and require a static - 2 cultists. -2015-09-22: - Kor: - - rscadd: A new admin command, Offer Control to Ghosts, can be found in the view - variables menu. It will randomly select a willing candidate from among dead - players, providing a fair method of replacing antagonists. - Xhuis: - - tweak: When a morph changes form, a message is shown to nearby people. This also - happens upon undisguising. - - tweak: Morphs now have an attack sound and message. - - tweak: The Spawn Morph event now plays a sound to the chosen candidate. - - tweak: Slaughter demons (and other creatures with blood crawl) now take two seconds - to emerge from blood pools. Entering is still instantaneous. - - tweak: The demon heart's sprite has been updated. - - tweak: Eating a demon heart now surgically implants the heart into your chest. - If the heart is removed from you, you lose the ability. Someone else can eat - the heart to gain the ability. - - tweak: Blood Crawl no longer has a 1-second cooldown, instead having none. - - tweak: You can no longer hold items when attempting to Blood Crawl, nor can you - use any items while Blood Crawling. - - tweak: Creatures that can Blood Crawl now take two seconds to emerge from blood - pools. - - tweak: Slaughter demons now store devoured creatures, and will drop them upon - death. - - tweak: Revenants now have the ability to speak to the dead. - - tweak: Revenant abilities now have icons. - - tweak: Malfunction no longer EMPs a specific area - it will instead EMP nearby - machines directly and stun cyborgs. Dominators are immune to this. - - tweak: Revenants now have directional sprites. - - tweak: Overload Lights now has a smaller radius. - - tweak: Defile no longer corrupts tiles. - - tweak: When glimmering residue reforms, the game will attempt to place the old - revenant in control of the new one. If this cannot be done, it will find a random - candidate. - - tweak: Revenants can no longer see ghosts. They can see other revenants, however, - and ghosts can still see revenants. - - tweak: The Spawn Slaughter Demon event now plays a sound to the chosen candidate. - phil235: - - rscdel: Lizards and other non human species can no longer acquire the hulk mutation. - Hulks no longer have red eyes - - bugfix: Monkeys now always have dna and a blood type (compatible with humans). - - bugfix: Monkey transformation no longer deletes the human's clothes. - - bugfix: Space Retrovirus now correctly transfers dna SE to the infected human. - - bugfix: Changeling's Anatomic Panacea removes alien embryo again. - - bugfix: Cloning someone now correctly sets up their dna UE. - - bugfix: Fixes the laser eyes mutation not giving glowing red eyes to the human. - - bugfix: Using changeling readaptation now properly removes all evolutions bought - (arm blade, chameleon skin, organic suit). - xxalpha: - - rscadd: Added a researchable cyborg self-repair module to the robotics fabricator. -2015-09-23: - Xhuis: - - rscadd: Syndicate medical cyborgs have been added. - - rscadd: The Dart Pistol is now available from the uplink for 4 telecrystals. It - functions as a pocket-sized syringe gun with a quieter firing sound. - - tweak: Boxes of riot foam darts now cost 2 telecrystals, down from 10, and are - available to traitors. - - tweak: Foam dart pistols now cost 3 telecrystals, down from 6. - - tweak: Syndicate cyborg teleporters now allow a choice between Assault and Medical - cyborgs. - - tweak: Syndicate cyborgs are now distinguished as Syndicate Assault. - - tweak: Syndicate cyborg energy swords now cost 50 energy per use, down from 500. - - tweak: Airlock charges now cost 2 telecrystals, down from 5. - - tweak: Airlock charges are much more powerful. - - tweak: There is no longer a 25% chance to detonate an airlock charge while removing - it. - - tweak: The description of many uplink items has been changed to better reflect - their use. -2015-09-24: - Jordie0608: - - tweak: Advanced energy guns now only critically fail after successive minor failures. - Cease firing after multiple recent minor failures to avoid critical ones. - Kor: - - rscadd: Guardian Spirit types and powers have been heavily reworked. Full details - of each type are available on the wiki. - - rscadd: Guardian damage transfer to users now deals cloneloss if their user is - in crit. - - rscadd: Guardians are now undergoing a trial run in the traitor uplink, under - the name of Holoparasites. - - rscadd: You can now hang human mobs (dead or alive) from meatspikes. Escaping - the meatspike will further damage the victim. - - rscdel: You can no longer slam humans into the meatspike as an attack. -2015-09-25: - Xhuis: - - rscadd: Changelings have a new ablity, Biodegrade. Costing 30 chemicals and having - an unlock cost of 1, it allows them to dissolve handcuffs and straight jackets - in 3 seconds, and escape from lockers in 7. - - tweak: Fleshmend's effectiveness is now halved each time it is used in a short - time span. - - tweak: Last Resort now blinds and confuses nearby humans and briefly disables - silicons upon use. - - tweak: Headslugs now have 50 health, up from 20. -2015-09-26: - MMMiracles: - - rscadd: Nanotrasen's genetic researchers have rediscovered the inactive dwarfism - genetic defect inside all bipedal humanoids. Suffer not the short to live. - WJohnston: - - tweak: Repiped the entire station. Atmosia and the disposals loop were not touched. - - tweak: Moved mulebot delivery from misc lab to RnD. -2015-09-28: - Feemjmeem: - - bugfix: Rechargers can now be wrenched and unwrenched by cyborgs. - - bugfix: Rechargers no longer stop working forever if you move them from an unpowered - area to a powered area, and now actually look powered off when they are. - - bugfix: Guns and batons can no longer be placed in unwrenched chargers. - Razharas: - - rscadd: Added button to preferences menu that kills all currently playing sounds - when pressed, now you can kill midis and any other sounds for real. - phil235: - - bugfix: Fixed the syndicate cyborg's grenade launcher. - - tweak: You can modify the dna of corpses again. -2015-09-29: - Kor: - - bugfix: The Chaos holoparasite can now actually set people on fire properly. - - tweak: Guardian powers are now used via alt+click rather than shift+click. - - tweak: Added an alert chime for ghosts when someone is summoning a Guardian. -2015-10-04: - Fox P McCloud: - - tweak: Adds a bar of soap to the janitor's locker. - - rscadd: Re-adds the advanced mop as a researchable R&D item. - - rscadd: Adds a bluespace trashbag as a researchable R&D item; can hold large quantities - of garbage. - Jordie0608: - - rscadd: Added Special Verb 'Create Poll', an in-game interface to create server - polls for admins with +permissions. - MrPerson: - - rscdel: Removed NTSL. Sorry. People could write scripts that crashed the server, - and this is the only thing that can be done to prevent them from doing that. - MrStonedOne: - - rscdel: Removed feature where quick consecutive ghost orbits while moving could - be used to fuck with your sprite - - bugfix: Fixed ghosts losing floating animation when returning from an orbit - - bugfix: Fixed logic error that prevented orbit's automatic cancel when the orbiting - thing moved in certain situations. - - rscadd: Ghost Orbit size now changes based on the icon size of the thing they - are orbiting (for that sweet sweet singulo orbiting action) - - tweak: Removed needless checks in ghost orbit, you can now orbit yourself and - restart an orbit around the thing you are already orbiting - Xhuis: - - rscadd: Syndicate Medical cyborgs now have cryptographic sequencers. - - rscdel: Syndicate Medical cyborgs no longer have syringes. - - tweak: Restorative Nanites now heal much more damage per type. - - bugfix: Operative pinpointers now actually point toward the nearest operative. - - bugfix: Syndicate Assault cyborgs no longer start with medical supplies. - - bugfix: Energy saws now have a proper icon. - - bugfix: Non-operatives can now longer use operative pinpointers or Syndicate cyborg - teleporters. - - tweak: Doctor's Delight now requires cryoxadone in its recipe instead of omnizine. - - tweak: Doctor's Delight now restores half a point of brute, burn, toxin, and oxygen - damage per tick. - - tweak: Doctor's Delight now drains nutrition while it's in your system (that is, - unless you're a doctor). - - bugfix: Syndicate roboticists have given Syndicate medical cyborgs sharper hypospray - needles - they are now able to penetrate armor. -2015-10-06: - Gun Hog, for WJohnston: - - rscadd: 'Add new Xenomorph caste: The Praetorian. Drones may become this on their - way to growing into a full queen, and a queen may promote one if there is not - one already.' - - tweak: Xenomorph queens are now GIGANTIC, along with the new Praetorian. Together, - they are considered royals. - - tweak: Queens are now significantly tougher to make up for their huge size. - - bugfix: All forms of dead xenomorph may now be grabbed and placed on a surgery - table for organ harvesting! - Xhuis: - - rscadd: Maintenance drones now have a more descriptive message when examined. - - tweak: A recent Nanotrasen firmware update to drones has increased vulnerability - to foreign influences. Please periodically check drones for abnormal behavior - or status LED malfunction. Note, however, that cryptographic sequencers will - not incur this behavior. - - tweak: In response to complaints about rogue drones, Nanotrasen engineers have - allowed factory resets on all drones by simply using a wrench. - - experiment: Central Command reminds drones to immediately retreat, if possible, - when a law override is begun. Not doing so may anger the gods and incur their - wrath! - - rscadd: Some virus symptoms that had no messages now have them. - - rscadd: 'New virology symptom: Weakness. This will cause stamina damage and fainting - spells.' - - tweak: Many virus symptom messages have been changed to be more threatening. -2015-10-07: - Kor: - - rscadd: The alien queen can now perform a tail sweep attack, throwing back and - stunning all nearby foes. -2015-10-13: - AnturK: - - rscadd: Display cases can now be built using 5 wood planks and 10 glass sheets. - - rscadd: Add airlock electronics to open it with id later, otherwise you'll have - to use crowbar - - tweak: Broken display cases can be fixed with glass sheets or removed using crowbar - - tweak: Added start_showpiece_type variable for mappers to create custom displays - - rscadd: Syndicate Lone Operatives spotted near the nanotrasen stations! Keep the - disk safe! - - tweak: Admin spawned nuclear operatives will now have access to nukeop equipment - Gun Hog: - - rscadd: Nanotrasen's research team has released a new, high tech design for Science - Goggles, which previously did nothing! They new come fitted with a portable - scanning module which will display the potential research data gained from experimenting - with an object. Nanotrasen has also released drivers which shall enable the - prototype hardsuit's built in scan visor. - - rscadd: Supporting this new design, Nanotrasen has seen fit to provide blueprints - for Science Goggles to the station's protolathe. - Kor: - - tweak: Gang implanters now only break implants/deconvert gangsters, meaning you - will have to use a pen to convert them afterwards. - - rscadd: An important function, accessible via alt+click, has been restored to - the detectives hat. - - sounddel: When Nar-Sie is created, they now use the old sound effect. - Steelpoint: - - rscadd: The Chief Medical Officers 'Medical Hardsuit' has been added to the CMO's - office. Boasts the usage of lightweight materials allowing fast movement while - wearing the suit as well as complete biological protection to airborne and similar - pathogens. - - rscadd: The Head of Security's personal 'HoS Hardsuit' has been added to the HoS's - office. This Hardsuit is slightly more armored than the regular Security Hardsuit. - - rscadd: The Research Directors 'Prototype Hardsuit' has been added to the RD's - office. This Hardsuit offers the highest levels of protection against explosive, - as well as biological, attacks, as well as fireproofing. - - rscdel: The Command EVA space suits, due to budget concerns, have been removed - and reloacted to another space station. - Xhuis: - - rscdel: All instances of autorifles have been removed from Security. - - rscadd: The armory has been re-mapped. - - tweak: The spell book has received a rebalancing! There are now ten uses by default, - but most spells cost two uses. Some underused spells, like Blind, Smoke, and - Forcewall, only cost a single use. - - experiment: After searching through the Sleeping Carp's ancient monastery in deep - space, more secrets have been uncovered of their traditional fighting techniques. - - tweak: Members of the Sleeping Carp gang are now able to deflect all ranged projectiles. - - tweak: Members of the Sleeping Carp gang are now uanble to use any type of ranged - weaponry. Doing so would be dishonorable. - - tweak: The Sleeping Carp martial art's effects are more damaging, and many stuns - have been increased in duration. - phil235: - - bugfix: Fixes critical bug causing multiple hits from single projectile. - - bugfix: Fixes not being able to shoot a mob on same tile as the shooter. - - bugfix: Clicking your mob (without targeting your mouth) no longer causes you - to shoot yourself. - - bugfix: Fixes not being able to shoot non human mobs at point blank. - - rscdel: Morphs no longer automatically drop the things they swallowed, you have - to butcher their corpse to retrieve their contents. - - bugfix: butchering a corpse no longer also attacks it. - - rscdel: Dipping cigarette (to asbsorb liquids) in a glass can now only be done - with an unlit cigarette. Lit cigarette now heats up the glass content (like - other heat sources). - - bugfix: Fixes trashbag not being able to pickup drinks and ammo casings. - - tweak: Slimes now attaches themselves to mobs via buckling. -2015-10-16: - MrStonedOne: - - rscadd: Added a reconnect option to the file menu. This will allow you to reconnect - to the game server without closing and re-opening the game window. This should - also prevent another byond ad from playing during reconnections. - Xhuis: - - rscadd: A gamebreaking bug has been fixed with buckets. You can now wear them - on your head. - bgobandit: - - rscadd: The Grape Growers Consortium has complained that Nanotrasen kitchens do - not use their products enough. HQ has come up with a few recipes to pacify them. - Goddamn winos. -2015-10-19: - AnturK: - - rscadd: Handheld T-Ray Scanners now detect critters in pipes. - Kor: - - tweak: Weapons and projectiles that are armour piercing now have an increased - chance to bypass riot shields. - - tweak: Slipping on lube now deals slightly more damage, but is concentrated on - a random body part, rather than spread to your entire body. - - tweak: Slipping on water no longer deals damage - - rscadd: You can now attach grenades and C4 to spears to create explosive lances. - This is done via table crafting. Alt+click the spear to set a war cry. - Shadowlight213: - - rscadd: In response to reports of stranded drones, Nanotrasen has added magnets - to drone legs. They are no longer affected by lack of gravity or spacewind! - - bugfix: Drones can now set Airlock access on RCDs. - bgobandit: - - rscadd: Nanotrasen loves recycling! In the highly unlikely occasion that your - space station accumulates gibs, scoop 'em up and bring them to chemistry to - recycle into soap, candles, or even delicious meat product! - - rscadd: L3 biohazard closets now contain bio-bag satchels for the safe collection - of biowaste products, such as slime extracts. - phil235: - - rscdel: Removing Smile, Swedish, Chav and Elvis mutations from genetics. These - mutation can still be acquired via adminspawned dna injector. - - rscadd: Added a dna injector for laser eyes mutation for admin use. - - bugfix: Fixes winter coat hood sprite appearing as a bucket. - - bugfix: Fixes using razor on non human shaving non existent hair. - - bugfix: Fixes chair deconstruction dropping too much metal. - - bugfix: Fixes snapcorn not giving seeds. - - bugfix: Fixes portable chem dispenser. - - tweak: Changing the transfer amount of all reagent containers (beaker, bucket, - glass) is now done by clicking them, similar to spray. Reagent dispensers (watertank, - fueltank, pepperspray dispenser) no longer have their own transfer amounts and - use the reagent container's transfer amount instead (except for sprays which - get 50u for faster refilling). -2015-10-23: - Incoming5643: - - rscadd: 'Syndicate bomb payloads will now detonate if set on fire long enough. - Note that the casings for the bombs is fireproof, so if you want to set fire - to a bombcore you''ll need to remove it from the case first (cut all wires, - then crowbar it out). A reassurance from our explosives department: it is, and - always has been, impossible to detonate a syndicate bomb that isn''t ticking - with wirecutters alone.' - Xhuis: - - rscadd: Geiger counters have been added and are obtainable from autolathes and - EngiVends. They will measure the severity of radiation pulses while in your - pockets, belt, or hands. One can scan a mob's radiation level by switching to - Help intent and clicking on it. These counters never really discard the radiation - they store, and rumor has it this can be used in nefarious ways... - - tweak: When a mob is impacted by radiation, the radiation is now relayed to all - items on the mob. -2015-10-24: - Kor: - - rscadd: The friendly gold slime reaction now spawns three mobs. - phil235: - - tweak: Changed the effects of alcohol to be more realistic. The effects of alcohol - now appear twice as fast. Drunkenness now scales with how much alcohol is in - you, not how long you've been drinking. This means drinking very little but - continuously no longer makes you very drunk, or confused/slurring for a long - time or give you alcohol poisoning. The dizziness and slurring effects now properly - scale with how drunk you are (and dizziness is generally more pronounced). -2015-10-25: - Incoming5643: - - rscadd: The spell Charge has been added to the spellbook. It can be used to extend - the life of magic and energy weapons and even reset the cooldowns of held wizards! - It cannot reset your own cooldowns. - - rscadd: The Staff of Healing has been added to the spellbook. Heals all damage - and raises the dead! Can't be used on yourself however. - - bugfix: The exploit that allowed you to use the staff of healing on yourself by - suicide has been fixed. - Jordie0608: - - rscadd: You can now selectively mute non-admin players from OOC with the Ignore - verb in the OOC tab. - Tkdrg: - - rscadd: Added chainsaws. They can be tablecrafted using a circular saw, a plasteel - sheet, some cable coil, and a welding tool. Don't forget to turn it on! -2015-10-26: - Fox P McCloud: - - tweak: Standardizes the slowdown of most spacesuits to 1 as opposed to 2. - Incoming5643: - - rscadd: 48x48 pixel mode (x1.5 zoom) has been added to the Icons menu (top left). - While playing in 32x32 or 64x64 will still provide a clearer looking station, - for those of us with resolutions that fall into the gap between the two zooms - this can provide a more consistant looking station than stretch to fit. - - rscadd: 96x96 pixel mode (x3 zoom) has also been added for our players who enjoy - looking at spacemen on their 4k monitors at a crisp and consistent scale. - - tweak: The lich spell has been subjected to some gentle nerfing. When you die - a string of energy will tie your new body to your old body for a short time, - aiding others in determining your location. The duration of this beam scales - with the number of deaths you've avoided. - - tweak: Additionally the post revival stun now also scales in this way. - - tweak: The spell will also fail if the item and the wizard don't share the same - z level, though the nature of space means the odds of the item (or the wizard) - looping around back to the station is pretty high. - - rscadd: The spell is still really good. -2015-10-27: - Joan: - - bugfix: You can now click on things under timestop effects, instead of clicking - the effect and looking like a fool. - Kor: - - rscadd: Added a zombie mob that turns its kills into more zombies. Currently adminspawn - and xenobio only. - - rscadd: Using water with a red slime extract will now yield a speed potion. Using - the speed potion on an item of clothing will paint it red and remove its slowdown. - MrStonedOne: - - rscadd: You may now access the setup character screen when not in the lobby via - the game preferences verb in the preferences tab - - rscadd: The round end restart delay can now be configured by server operators. - New servers will default to 90 seconds while old servers will default to the - old 25 seconds until they import the config option to their server. -2015-10-28: - Tkdrg: - - rscadd: Added a Ghost On-screen HUD. It can be toggled using the "Toggle Ghost - HUD" verb. Thank you Razharas for the sprites! - - rscadd: Ghosts can now use the "Toggle med/sec HUD" verb to see the basic secHUD - (jobs only) or the medHUD of humans. - - rscadd: Ghost will now get clickable icon alerts from events such as being put - in a cloner, drones being created, Nar-sie being summoned, among others. The - older chat messages were kept. These alerts can not be toggled. -2015-10-29: - Kor: - - tweak: Slightly changed what items spawn on the captain vs in his locker, hopefully - saving some annoying inventory shuffle at roundstart. -2015-10-30: - Incoming5643: - - rscadd: Slimepeople can now split if they contain 200 units of slime jelly, and - slimepeople will now slowly generate slime jelly up to 200 units provided they - are very well fed. Split slimepeople are NOT player controlled, but rather the - original slime person can swap between the two mobs at will. If one of the slimepeople - should die under player control, the player won't be able to swap back to their - living body. Splitting only creates a new body, any items you have on you are - not duplicated. - - rscadd: Slimepeople now take half damage from sources of heat, but double damage - from sources of cold. Lasers good, Space bad. -2015-11-01: - Gun Hog: - - rscadd: Nanotrasen listens! After numerous complaints and petitions from Security - personnel regarding energy weapon upkeep, we have authorized the construction - and maintenance of your station's weapon rechargers. As an added bonus, we have - also provided a more modular design for the devices, allowing for greater recharge - rates if fitted with a more efficient capacitor! - - rscadd: Added Diagnostic HUDs! They can be used to view the health and cell status - of borgs and mechs. Silicons have them built in, Roboticists get two in their - locker, and the RD's hardsuit has one built in. - Incoming5643: - - rscadd: The number of roundstart head revolutionaries nows depends on the roundstart - security force as well as the roundstart heads - - rscadd: The maximum number of head revs is 3, the minimum is 1. If there is fewer - than three station heads there will never be more than that number of head revs - at roundstart. For every three vacant security roles (Head of Security/Warden/Security - Officer/Detective) at roundstart the number of starting head revs will be reduced - by 1. - - rscadd: Head revolutionaries can be gained during play if the security/head roles - are filled. They are drawn from existing revolutionaries. - - rscadd: Added dental implant surgery. While targeting the mouth drill a hole in - a tooth then stick a pill in there for hands free later use. - Kor: - - rscadd: Added an experimental control console for Xenobiology. Ask the admins - if you'd like to try it out. It may not work on maps other than Box if they - have renamed the Xenobiology Lab. - - rscadd: Injecting blood into a cerulean slime will yield a special one use set - of blueprints that will allow you to expand the territory your camera can cover. - Kor and Remie: - - rscadd: Added as series of laser reflector structures, the frame of which can - be built with 5 metal sheets. - - rscadd: Completing the frame with 5 glass sheets creates a mirror that will reflect - lasers at a 90 degree angle. - - rscadd: Completing the frame with 10 reinforced glass sheets creates a double - sided mirror that reflects lasers at a 90 degree angle. - - rscadd: Completing the frame with a single diamond sheet creates a box that will - redirect all lasers that hit it from any angle in a single direction. - MMMiracles: - - tweak: Energy Swords can now embed when thrown for a 75% chance. Embedding -2015-11-05: - AnturK: - - rscadd: Added wild shapeshift spell for wizards. -2015-11-08: - Cuboos: - - soundadd: Added a new and better sounding flashbang sound and a ringing sound - for flashbang deaf effect - JJRcop: - - tweak: Chronosuits have had their movement revised, they now take time to teleport - depending on how far you've traveled, and don't teleport automatically anymore - unless you stop moving for a short moment, or press the new ' Teleport Now' - button. - - rscadd: Added new outfit that allows admins to dress people up in the chrono equipment - easier. - Jalleo: - - tweak: Due to a recently discovered report it turns out The Wizard Federation - has devised a way for CEOs to stop having some teas from their Smartfridges - due to this change all smartfridges will temporarily be unable to stack contents. - Joan: - - tweak: Revenant draining now takes about 5 seconds to complete and can be interrupted - by dragging the target away. - - tweak: Revenants can now tell if they are currently visible. - - tweak: Revenant ability costs tweaked; Defile now costs 40 essence to cast, Overload - Lights now costs 45 essence to cast, and Malfunction now costs 50 essence to - cast. - - tweak: Malfunction now affects non-machine objects, even if they're not being - held by a human. - - tweak: Defile does an extremely low amount of toxin damage to humans and confuses, - but does much less stamina damage and stuns the revenant for slightly longer. - - tweak: Overload Lights will no longer shock if the light is broken after a light - is chosen to shock an area. - Kor: - - rscadd: Using water on a dark blue slime extract will now yield a new potion capable - of completely fireproofing clothing items. - - rscadd: You can once again click+drag mobs into disposal units. Xenobiologists - rejoice. - Xhuis: - - tweak: Shadowling abilities now require the user to be human. - - tweak: Enthralling now takes 21 seconds (down from 30). - - tweak: Regenerate Chitin has been renamed to Rapid Re-Hatch. - - tweak: Dethralling surgery's final step now requires a flash, penlight, or flashlight. - - tweak: Dethralling surgery now produces a black tumor, which has a high biological - tech origin but dies quickly in the light. - - rscdel: Shadowlings no longer have Enthrall before hatching. - - rscadd: Shadowling clothing now has icons to better reflect its existence. - - rscdel: Ascendant Broadcast has been removed. - - rscdel: Destroy Engines is now removed from the user after it is used once. -2015-11-11: - AnturK: - - tweak: DNA Injectors now grant temporary powers on every use. Duration dependent - on activated powers and machine upgrades - - rscadd: 'Delayed Transfer added to DNA Scanner - It will activate on the next - closing of scanner door ' - - rscadd: 'UI+UE injectors/buffer transfers added for convinience ' - - tweak: Injector creation timeout cut in half - Firecage: - - rscadd: NanoTrasen specialists has developed a new type of operating table. You - can now make one yourself with only some rods and a sheet of silver! - Kor: - - rscadd: Adds immovable and indestructible reflector structures for badmin use. - - rscadd: The Mjolnir has been added to the wizards spellbook. - - rscadd: The Singularity Hammer has been added to the wizards spellbook. - - rscadd: The Supermatter Sword has been added to the wizards spellbook. - - rscadd: The Veil Render has been added to the wizards spellbook. - - rscadd: Trigger Multiverse War (give the entire crew multiswords) has been added - to the wizards spellbook, at a cost of 8 points. - - rscadd: Converting (to cultist, rev, or gangster) a jobbaned player will now automatically - offer control of their character to ghosts. - - rscadd: Emergency Response Teams and Deathsquads no longer accept non-human members - if the server is configured to bar mutants from being heads of staff. - LordPidey: - - rscadd: Nanotransen doctors have re-approved Saline-Glucose Solution for usage - in IV drips, when blood supplies are low. Simple pills will not suffice. - MMMiracles: - - tweak: Water slips have been nerfed to a more reasonable duration. It is still - a guaranteed way to disarm an opponent and obtain their weapon, but you can - no longer manage to cuff/choke everyone who manages to slip without a problem. - MrStonedOne: - - bugfix: Fixes the smartfridge not stacking items. - Xhuis: - - soundadd: The emergency shuttle now plays unique sounds (thanks to Cuboos for - creating them) when launching from the station and arriving at Central Command. - torger597: - - rscadd: Added a syringe to boxed poison kits. -2015-11-12: - Dunc: - - rscdel: DNA injectors have been restored to their original permanent RNG state - from the impermanent guaranteed state. - Xhuis: - - rscadd: Reagents can no longer be determined by examining a reagent container - without the proper apparatus. Silicons and ghosts can always see reagents. - - rscadd: Science goggles now allow reagents to be seen on examine. In addition, - chemists now start wearing them. The bartender has a pair that looks and functions - like sunglasses. -2015-11-13: - as334: - - rscadd: Nanotrasen has hired a brand new supply of ~~expendable labor~~ *LOYAL - CREW MEMBERS* please welcome them with open arms. - - rscadd: Plasmamen are now a playable race. They require plasma gas to survive - and will ignite in oxygen environments. -2015-11-15: - CosmicScientist: - - tweak: Hopefully made the dehydrated carp's uplink description 100% clear. - - tweak: Made the dehydrated carp cost 1 TC (instead of 3) to help with your traitor - gear combos. - Incoming5643: - - tweak: The supermatter sword was being far too kind in the hands of men. They - should now have the desired effect when swung at people. - Joan: - - tweak: Anomalies move more often, are resistant to explosions and will only be - destroyed if they are in devastation range. You shouldn't bomb them, though. - - tweak: Hyper-energetic flux anomaly will shock mobs that run into it, or if it - runs into them. - - tweak: Bluespace anomaly will occasionally teleport mobs away from it in a small - radius. - - tweak: Vortex anomalies will sometimes throw objects at nearby living mobs. - - tweak: Pyroclastic anomalies will produce bigger, hotter fires, and if not disabled, - it will release an additional burst of flame. In addition, the resulting slime - will be rabid and thus attack much more aggressively. - - bugfix: Gravitational anomalies will now properly throw objects at nearby living - things. - MrStonedOne: - - bugfix: Away mission loading will no longer improperly expand the width of the - game world to two times the size of the away mission map. - - tweak: This should also improve the speed of loading away missions, since the - game doesn't have to resize the world - RemieRichards: - - rscadd: Deities now start off with the ability to place 1 free turret - - tweak: HoG Claymores now do 30 Brute (Down from 40) but now have 15 Armour Penetration - (Up from 0) - - bugfix: Killing the other god objective is fixed - - tweak: Turrets will no longer attack handcuffed people - - rscadd: Followers are now informed of their god's death - - rscadd: Followers are now informed of the location of their god's nexus when it - is placed - - tweak: Gods can no longer place structures near the enemy god's nexus -2015-11-16: - Gun Hog: - - tweak: The Combat tech requirement for Loyalty Firing Pins has been reduced from - 6 to 5. - Joan: - - tweak: Plasmamen can now man the bar. - - tweak: Defile no longer directly affects mobs. Instead, it rips up floors and - opens most machines and lockers. - - rscadd: Blight added. Blight infects humans with a virus that does a set amount - of damage over time and is relatively easily cured. Blight also badly affects - nonhuman mobs and other living things. - - experiment: While the cure to Blight is simple, it's not in this changelog. Use - a medical analyzer to find the cure. - - tweak: Tweaked costs and stuntimes of abilities; - - tweak: Defile now costs 30 essence and stuns for about a second. - - tweak: Overload Lights now costs 40 essence. - - tweak: Malfunction now costs 45 essence. - - rscadd: Blight costs 50 essence and 200 essence to unlock. - - imageadd: Transmit has a new, spookier icon. - - bugfix: Revenant abilities can be given to non-revenants, and will work as normal - spells instead of runtiming. - bgobandit: - - rscadd: Blood packs can now be labeled with a pen. -2015-11-17: - Xhuis: - - tweak: Many medicines have received rebalancing. Expect underused chemicals like - Oxandralone to be much more effective in restoring damage. - - tweak: Many toxins are now more or less efficient. - - tweak: The descriptions of many reagents have been made more accurate. - - rscadd: 'New poison: Heparin. Made from Formaldehyde, Sodium, Chlorine, and Lithium. - Functions as an anticoagulant, inducing uncontrollable bleeding and small amounts - of bruising.' - - rscadd: 'New poison: Teslium. Made from Plasma, Silver, and Black Powder, heated - to 400K. Modifies examine text and induces periodic shocks in the victim as - well as making all shocks against them more damaging.' - - rscadd: Two Chemistry books have been placed in the lab. When used, they will - link to the wiki page for chemistry in the same vein as other wiki books. -2015-11-18: - oranges: - - tweak: Nanotrasen apologies for a recent bad batch of synthflesh that was shipped - to the station, any rumours of death or serious injury are false and should - be reported to your nearest political officer. At most, only light burns would - result. - phil235: - - bugfix: Remotely detonating a planted c4 with a signaler now works again. -2015-11-19: - Joan: - - rscadd: Constructs have action buttons for their spells. - - imageadd: The Juggernaut forcewall now has a new, more cult-appropriate sprite. - - imageadd: Cult floors and walls now have a glow effect when being created. - - bugfix: Nar-Sie and Artificers will properly produce cult flooring. - - spellcheck: Nar-Sie is a she. -2015-11-20: - AnturK: - - tweak: Staff of Doors now creates random types of doors. - Incoming5643: - - bugfix: Setting your species to something other than human (if available) once - again saves properly. Note that if you join a round where your species setting - is no longer valid it will be reset to human. - PKPenguin321: - - tweak: Healing Fountains in Hand of God now give cultists a better and more culty - healing chemical instead of Doctor's Delight. - kingofkosmos: - - rscadd: Added the ability to upgrade your grab by clicking the grabbed mob repeatedly. - octareenroon91: - - rscadd: Add the four-color pen, which writes in black, red, green, and blue. - - rscadd: Adds two such pens to the Bureaucracy supply pack. -2015-11-21: - Joan: - - rscadd: Blobs now have a hud, with jump to node, create storage blob, create resource - blob, create node blob, create factory blob, readapt chemical, relocate core, - and jump to core buttons. - - tweak: Manual blob expansion is now triggered by clicking anything next to a blob - tile, instead of by ctrl-click. - - tweak: 'Rally Spores no longer has a cost. Reminder: You can middle-click anything - you can see to rally spores to it.' - - tweak: Creating a Shield Blob with hotkeys is now ctrl-click instead of alt-click. - - rscadd: Removing a blob now refunds some points based on the blob type, usually - around 40% of initial cost. Hotkey for removal is alt-click. - - rscadd: Blobs now have the *Blob Help* verb which will pull up useful information, - including what your reagent does. - - tweak: Storage Blobs now cost 20, from 40. Storage Blobs also cannot be removed - by blob removal. - - tweak: Readapt Chemical now costs 40, from 50. - octareenroon91: - - rscadd: Add numbers and a star graffiti to crayon/spraycan designs. -2015-11-23: - octareenroon91: - - rscadd: Spilling oxygen or nitrogen will obtain a release of the corresponding - atmospheric gas in the effected tile. - - rscadd: 'Carbon Dioxide has been added as a reagent. Recipe: 2:1 carbon:oxygen, - heated to 777K.' - - rscadd: Spilling CO2 will produce CO2 gas. -2015-11-24: - Kor: - - rscadd: Added a lava turf. Expect to see it in away missions or in admin 'events' -2015-11-25: - Incoming5643: - - experiment: A number of popular stunning spells have undergone balance changes. - Note that for the most part the stuns themselves are untouched. - - experiment: 'Lightning Bolt Changes:' - - rscdel: You can no longer throw the bolt whenever you want, it will fire itself - once it's done charging. - - rscadd: Getting hit by a bolt will do a flat 30 burn now, as opposed to scaling - with how long the wizard spent charging the spell. Unless said wizard made a - habit of charging lightning bolt to near maximum every time this is a buff to - damage. - - rscdel: Every time the bolt jumps the next shock will do five less burn damage. - - rscadd: Lightning bolts can still jump back to the same body, so the maximum number - of bolts you can be hit by in a single casting is three, and the maximum amount - of damage you could take for that is 60 burn. - - experiment: 'Magic Missile Changes:' - - rscdel: Cooldown raised to 20 seconds, up from 15 - - rscadd: Cooldown reduction from taking the spell multiple times raised from 1.5 - seconds to 3.5 seconds. Rank 5 magic missile now has a cooldown of 6 seconds, - down from 9, and is effectively a permastun. - - experiment: 'Time Stop Changes:' - - rscadd: Time Stop field now persists for 10 seconds, up from 9 - - rscdel: Cooldown raised to 50 seconds, up from 40 - - rscadd: Cooldown reduction from taking the spell multiple times raised from 7.75 - seconds to 10 seconds. Rank 5 time stop now has a cooldown of 10 seconds, up - from 9, and is effectively a permastun. - Kor: - - rscadd: Escape pods can now be launched to the asteroid during red and delta level - security alerts. Pods launched in this manner will not travel to Centcomm at - the end of the round. - - rscadd: Each pod is now equipped with a safe that contains two emergency space - suits and mining pickaxes. This safe will only open during red or delta level - security alerts. - MrStonedOne: - - bugfix: fixes interfaces (like the "ready" button) being unresponsive for the - first minute or two after connecting. - - tweak: Burn related code has been changed - - tweak: This will give a small buff to fires by making them burn for longer - - tweak: This will give a massive nerf to plasma related bombs - - tweak: I am actively seeking feedback, if the nerf to bombs is too bad we can - still tweak stuff - PKPenguin321: - - rscadd: Chainsaws (both arm-mounted and not arm-mounted) can now be used in surgeries - as a ghetto sawing tool. Arm-mounted chainsaws are a teeny bit more precise - than regular ol' everyday chainsaws. - YotaXP: - - tweak: Spruced up the preview icons on the Character Setup dialog. - incoming5643: - - rscdel: Citing shenanigan quality concerns the wizard federation has withdrawn - supermatter swords and veil renderers from spellbooks. - neersighted: - - bugfix: Make Airlock Electronics use standard ID checks, allowing Drones to use - them. -2015-11-26: - neersighted: - - tweak: Cyborg Toner is now refilled by recharging stations. - oranges: - - tweak: Removed the 'gloves' from the sailor dress which looked weird since it - was a blouse basically - - tweak: Made the skirt on the blue/red skirts less blocky, - - tweak: Made the striped dress consistent at every direction -2015-11-27: - AnturK: - - rscadd: Turret control panels can now be made through frames available at autolathe. - - rscadd: Unlocked turrets can be linked with built controls with multiool - JJRcop: - - bugfix: Restores golem shock immunity. - Kor and Ausops: - - rscadd: Added four different suits of medieval plate armour. - - rscadd: The Chaplain starts with a suit of Templar armour in his locker. God wills - it! - - rscadd: Rumour has it that Nanotrasen is now training a new elite unit of soldiers - to deal with paranormal threats. Corporate was unable to be reached for comment. - MMMiracles: - - rscadd: Adds a brand new away mission for the gateway called 'Caves'. - - rscadd: The away mission has multiple levels to explore and could be quite dangerous, - running in without proper preparation is unadvised. - YotaXP: - - bugfix: Drones can now use the pick-up verb, and watertanks no longer get jammed - in their internal storage. - bgobandit: - - rscadd: Due to changes in Nanotrasen's mining supply chain, ore redemption machines - now offer a variety of upgraded items! However, certain items are more expensive. - Point values for minerals have been adjusted to reflect their scarcity. - - rscadd: Nanotrasen R&D has discovered how to improve upon the resonator and kinetic - accelerator. - - rscadd: After a colossal tectonic event on Nanotrasen's asteroid, ores are distributed - more randomly. - - rscadd: Bluespace crystals have been discovered to be ore. They will now fit into - satchels and ore boxes. - - rscadd: Mech advanced mining scanners now include meson functionality. - neersighted: - - bugfix: Wooden Barricades now take bullet damage. - - tweak: Rebalance Wooden Barricade damage. -2015-11-28: - TechnoAlchemisto: - - tweak: Cloaks are now worn in your exosuit slot! -2015-11-29: - Firecage: - - rscadd: Hand tools now have variable operating speeds. - GunHog: - - tweak: Nanotrasen has improved the interface for the hand-held teleportation device. - It will now provide the user with the name of the destination tracking beacon. - JJRcop: - - bugfix: Fixes changeling Hive Absorb DNA ability runtime. - Joan: - - imageadd: When sacrificing a target with the sacrifice rune, Nar-Sie herself will - briefly appear to consume them. - - imageadd: When an artificer repairs a construct, there is a visible beam between - it and the target. - - imageadd: When reviving a target with the raise dead rune, there is a visible - beam between the two corpses used. - - imageadd: When draining a target with the blood drain rune, there is a visible - beam between you and the rune. - - imageadd: Construct sprites are now consistent and all bob in the air. - - rscadd: Most cult messages now use the cult span classes, though visible messages - from cult things generally do not. - - bugfix: Examining a cultist talisman as a cultist no longer causes the paper popup - to appear. - - bugfix: You no longer need to press two buttons to read a cultist tome. - - spellcheck: Cult should have a few less typos and grammatical errors. - - spellcheck: The sacrifice rune now uses the proper invocation. - KorPhaeron: - - rscadd: Guardians and holoparasites can now be manually recalled by their master. - - rscadd: The ghost controlling a guardian or holoparasite can be repicked by their - master, only one use which is removed when a new ghost is chosen. - MrStonedOne: - - rscadd: Re-adds 100% chance timed injectors, as it was removed over a misunderstanding. - - bugfix: Fixes bug with injectors having a 100% power chance despite not being - timed - - bugfix: Fixes the excessive amount of time it took the game to initialize. - - bugfix: Fixes some interface bugs. - - rscadd: when an interface window has to send a lot of resources before it can - open, it will now tell you with a "sending resources" line so you know why it's - not opening right away. - PKPenguin321: - - rscadd: Teleprods can now be constructed. Make them via tablecrafting, or by putting - a bluespace crystal onto a stunprod. They warp the target to a random nearby - area (which may include space/the inside of a wall) in addition to giving the - victim a brief stun. Like stunprods, they require a power cell to function. - - rscadd: Teleprods can have their crystal removed and be made back into stunprods - by using them in your hand when they have no cell installed. - - imageadd: Mounted chainsaws now have a unique inhand sprite. - Remie + Kor: - - tweak: Holopads now use AltClick to request the AI - Shadowlight213: - - tweak: Syndie melee mobs have been buffed. - TheNightingale: - - rscadd: Nuclear operatives can now buy the Elite Syndicate Hardsuit for 8 TC that - has better armor and fireproofing. - - tweak: Added throwing stars and Syndicate playing cards to nuclear operative's - uplink. - Yolopanther12: - - rscadd: Added the ability to use a box of lights on a light replacer to more quickly - refill it to capacity. - incoming5643: - - rscadd: OOC will now take steps to try and prevent accidental IC from people who - mistakenly use OOC instead of say. This doesn't catch all mistakes, so please - don't test it. - ktccd: - - bugfix: Blob pieces on some areas no longer count for blob mode victory (Such - as space or asteroid). - - bugfix: Blobcode no longer spawns and destroys blobs uselessly, which fixes other - stuff too. - - bugfix: Asteroid areas are no longer valid gang territory. - neersighted: - - experiment: Nanotrasen would like to announce NanoUI 2.0, now being rolled out - across all our stations. Existing NanoUI devices have been updated, and more - will be added soon. Please report any bugs to Nanotrasen Support. - - tweak: Many NanoUI interfaces have had +/- buttons replaced with input fields. - - tweak: Some NanoUI interfaces have had more information added. - - bugfix: Drones can now interact with NanoUI windows. - swankcookie: - - bugfix: Fixes issue of space-Christians forgetting about the true, humbling values - of space-Christmas. - - rscadd: Adds snowmen outfits -2015-11-30: - neersighted: - - bugfix: Nanotrasen would like to apologize for Chemistry being stuck on NanoUI - 1.0... Please report any further bugs to Nanotrasen Support. - - tweak: NanoUI becomes... difficult to operate with brain damage. Who would have - guessed? - - tweak: Telekinesis enables you to use NanoUI at a distance. - - bugfix: Canisters require physical proximity to actuate... - - bugfix: NanoUI no longer leaks memory on click. -2015-12-01: - Kor: - - rscadd: The away mission Listening Post, originally mapped by Petethegoat, has - removed as a mission. It is now present in normal deep space. - neersighted: - - tweak: Attack animations are now directional! - - rscadd: Nanotrasen brand Airlock Electronics now sport our latest NanoUI interface! - Upgrade your electronics today! - - bugfix: Cryo now knocks you out. - - bugfix: Resisting out of cryo has a delay. - - rscadd: Cryo auto-ejection can now be configured. - - rscdel: Remove Cryo eject verb (resist out). - - bugfix: Cryo works... Love, neersighted - swankcookie: - - tweak: Switches cloak usage to overclothing slot -2015-12-02: - GunHog: - - bugfix: Nanotrasen has discovered a flaw in the weapon recharging station's design - that makes it incompatible with the Rapid Part Exchange Device. This has been - corrected. - neersighted: - - tweak: You can now stop pulling by trying to pull the same object again. - - rscadd: Nanotrasen is proud to announce that even the dead can use our state of - the art NanoUI technology. -2015-12-03: - Joan: - - rscadd: Artificers now have feedback when healing other constructs, showing how - much health the target has. - - tweak: Constructs can move in space. - - imageadd: Fixes cult flooring not lining up with normal floors. - - imageadd: Fixes a juggernaut back spine not glowing where it should. - Spudboy: - - tweak: Realigned the librarian's PDA. - Swankcookie: - - bugfix: Cakehat now creates light - YotaXP: - - rscadd: Rolled out a new line of space heaters around the station. This new model - has the functionality to cool down the environment, as well as heat it. Additionally, - they can be built and upgraded like any other machine. - neersighted: - - bugfix: Dominator now shows the correct area name on non-Box maps. - - bugfix: Unwrenching atmos pipes is less... nuts... - - bugfix: You don't get hopelessly spun when standing on a unwrenched pipe... Don't - try it, though. - - tweak: You can now cancel pulling by Ctrl+Clicking anything else - - tweak: Chemistry Dispensers now have a built-in drain! -2015-12-05: - Joan: - - rscdel: Magic missiles no longer do damage. -2015-12-06: - Gun Hog: - - rscadd: Nanotrasen is proud to announce that it has improved its Diagnostic HUD - firmware to include the station's automated robot population! New features include - integrity tracking, Off/On status, and mode tracking! If your little robot friend - suddenly manages to acquire free will, you will be able to track that as well! - - tweak: Artificial Intelligence units may find that their bot management interface - now shows when a robot gains free will. This is also displayed on the Personal - Data Assistant's bot control interface. - neersighted: - - bugfix: Cryo now properly checks it is on before healing... -2015-12-07: - octareenroon91: - - rscadd: Wallets now use the access of all IDs stored inside them. - - rscadd: As the accesses of all IDs are merged, two IDs in a wallet may grant access - to a door that neither one alone would open. - - bugfix: Wallets used to be useless for access if the first ID card put into it - was taken out, until another ID card was put back in. That should not happen - anymore. -2015-12-08: - Joan: - - experiment: Revenants can no longer move through walls and windows while revealed, - though they can move through tables, plastic flaps, mobs, and other similarly - thin objects. - - tweak: Defile now reveals for 4 seconds, from 8. - - tweak: Overload lights now reveals for 10 seconds, from 8. - - tweak: Blight now reveals for 6 seconds, from 8. - - rscadd: Blight has a higher chance of applying stamina damage to the infected. - Kor: - - rscadd: The blocking system has been completely overhauled. Any held item, exosuit, - or jumpsuit can now have a chance to block, or a custom on hit effect. Different - shields can now have different block chances. - - rscadd: The clowns jumpsuit now honks when you beat the owner. - - rscadd: There is a new (admin only for now) suit of reactive armour that ignites - attackers instead of warping you. - - rscadd: Shields will no longer block hugs. Give peace a chance. - neersighted: - - tweak: MC tab reworked, more items made available. - - rscadd: Admins can now click entries in the MC tab to debug. -2015-12-09: - GunHog: - - tweak: Nanotrasen has discovered new strains of Xenomorph which resist penetration - by known injection devices, including syringes. This seems to only extend to - the large 'Royal' strains, designed 'Queen' and 'Praetorian'. Extreme caution - is advised should these specimens escape containment. - - rscadd: Ghosts may now use Diagnostic HUD. - - tweak: Feedback added for which HUD is active. - Kor: - - rscadd: Security barricades now block gunfire 80% of the time while deployed. - - rscadd: Standing adjacent to barricades will allow you to shoot over them. - MrStonedOne: - - rscadd: noslip floors make you slightly faster - Shadowlight213: - - rscadd: Admins can now interact with mos of the station's machinery as if they - were an AI when ghosting. - incoming5643: - - rscadd: a mutation of glowshrooms, glowcaps, have recently been discovered in - botany. - ktccd: - - bugfix: Blobs now require the correct amount of blobs to win that scales depending - on number of blobs, instead of a set value of 700. -2015-12-12: - Joan: - - tweak: The blob Split Consciousness ability now requires a node under the overmind's - selector, instead of picking the oldest living node to spawn a core on. - - bugfix: Revenant antagonist preference can once again be toggled from the Game - Preferences menu. - Kor: - - rscadd: You now have a chance to flip while attacking with a dualsaber. - - rscadd: Bluespace survival capsules have been added to escape pod safes. - - rscadd: Standing between activating shield generators now has disastrous consequences. - Lo6a4evskiy: - - bugfix: Ninja drains power properly, no more infinite stealth. - RemieRichards: - - rscadd: Adds a Synth Species - - rscadd: Species can now react to being force set by admins, used for Synth species -2015-12-13: - Kor: - - rscadd: Adds reactive stealth armor. Admin spawn only. -2015-12-15: - Incoming5643: - - rscadd: The summon events... event "RPG loot" now allows for items to have bonuses - of up to +15! - - rscadd: The "RPG loot" event now also improves the damage reduction of armor! - - rscadd: Check out the item mall for new item fortification scrolls! - as334: - - rscadd: New research has shown that when when plasma reaches a high enough temperature - in the presence of a carbon catalyst, it undergoes a violent and powerful fusion - reaction. - - rscadd: Adds a new gas reaction, fusion. Heat up plasma and carbon dioxide in - order to produce large amounts of energy and heat. - oranges: - - tweak: hulk no longer stuns - - tweak: John Cena -2015-12-16: - AnturK: - - rscadd: Medical Beam Gun now available for Nuclear Operatives and ERT Medics. - Joan: - - tweak: Revenant Overload Lights reveal time lowered from 10 seconds to 8 seconds, - shock damage increased from 18 to 20. - - tweak: Revenant Blight reveal time lowered from 6 seconds to 5 seconds. - Kor: - - rscadd: Styptic once again works in patches. - - rscadd: Nuke Op team leaders can now activate challenge mode if more than 50 players - are online. - - rscadd: Xenobio mobs will no longer spontaneously murder their friends if you - give them sentience - The-Albinobigfoot: - - bugfix: The Wishgranter now displays its faith in humans with curbed enthusiasm. - Tkdrg: - - experiment: Cult has been overhauled in an attempt to make the gamemode more fun. - - rscdel: Cult onversion and stunpapers have been removed. So have most cult objectives. - - tweak: The cult's single objective is now defend and feed a large construct shell - in order to summon the Geometer. - - tweak: The cult must sacrifice souls in order to acquire summoning orbs, which - must be inserted inside said shell. - - tweak: The large construct shell can be procured by using a summoning orb in hand, - but it is vulnerable to attack. - - tweak: Once enough orbs are inserted, the station will go Delta. After three minutes, - the cult will have won. - - rscadd: Cult communications now no longer damage you when done without a tome. - - rscadd: Cultists now start with a sacrificial dagger, with bleeding effects and - high throwing damage. - - rscadd: Most existing runes were buffed, merged, or removed. A Immolate rune and - a Time Stop rune were added. Experiment! - - experiment: Each cultist now gets a random set of runes in their tomes. Pool together - your knowledge in order to thrive. - neersighted: - - experiment: NanoUI 3.0 - - experiment: Completely rewrite NanoUI frontend; rework backend. - - tweak: Re-design NanoUI interface to be much more attractive. - - tweak: Reduce NanoUI LOC count/resource size. - - tweak: Reduce NanoUI tickrate; make UIs update properly. - - rscadd: Add chromeless NanoUI mode. - - rscadd: NanoUI's chromeless mode can be toggled with the 'Fancy NanoUI' preference. - - bugfix: Allow NanoUI to work on IE8-IE11, and Edge. - - bugfix: Close holes that allow NanoUI href spoofing. -2015-12-17: - Kor: - - rscadd: Security barricades are now deployed via grenade. You can no longer move - them after they've been deployed, you must destroy them. - - rscadd: You can now shoot through wooden barricades while adjacent, while any - other gunfire has a 50% chance of being blocked. - - rscadd: There are no longer restrictions against implanting the nuclear disk in - people. - - rscadd: If the station is destroyed in a nuclear blast, any surviving traitors - will complete their "escape alive" objective regardless of their location. - - rscadd: Hulks now lose hulk when going into crit, rather than at 25 health. - - rscadd: Shuttles will no longer drag random tiles of space with them. This means - you can be thrown out of partially destroyed escape shuttles very easily. - - rscadd: The people and objects on destroyed tiles won't be along for the ride - when the shuttle moves either. - - rscadd: Adds hardsuits with built in energy shielding. CTF and security versions - are admin only. - - rscadd: Nuclear operatives can buy a shielded hardsuit for 30tc. - - rscadd: Traitors can now buy a Mulligan for 4 telecrystals, a syringe that completely - randomizes your name and appearance. - - rscadd: The spy bundle now includes a switchblade and Mulligan. - MMMiracles: - - rscadd: A set of coordinates have recently reappeared on the Nanotrasen gateway - project. Ask your local central official about participation. - MrStonedOne: - - tweak: 'Ghosts can now double click on ANY movable thing (ie: not a turf) to orbit - it' - PKPenguin321: - - rscadd: Dope golden necklaces have been added. They're a jumpsuit attachment like - ties and are completely cosmetic. - - rscadd: Dope necklaces can be bought from the clothesmate with a coin. Three are - in the clothesmate by default, so you can get your posse going. Gangs that aren't - Sleeping Carp can also purchase necklaces for 1 influence each. Dope. - xxalpha: - - tweak: Restores the ability to bolt and unbolt operating airlocks. -2015-12-18: - Incoming5643: - - rscadd: Soon to be blobs in blob mode can now burst at their choosing. However - they will still burst if they wait too long. - - rscadd: Burst responsibly. - Joan: - - rscadd: 'New blob chemicals:' - - rscadd: Pressurized Slime, which is grey, does low brute, oxygen, and stamina - damage, but releases water when damaged or destroyed. - - rscadd: Energized Fibers, which is light yellow, does low burn damage, high stamina - damage, and heals if hit with stamina damage. - - rscadd: Hallucinogenic Nectar, which is pink, does low toxin damage, causes vivid - hallucinations, and does some bonus toxin damage over time. - - tweak: Replaces Kinetic Gelatin with Reactive Gelatin, which does less brute damage, - but if hit with brute damage in melee, damages all nearby objects. - - wip: 'Changes three of the old blob chemicals:' - - tweak: Ripping Tendrils does slightly more stamina damage - - tweak: Envenomed Filaments no longer causes hallucinations, but does some stamina - damage in addition to toxin damage over time. - - tweak: Cryogenic Liquid will freeze targets more effectively. - Kor: - - rscadd: Shooting someone who is holding a grenade has a chance to set the grenade - off. - - rscadd: Shooting someone who is holding a flamethrower has a chance to rupture - the fuel tank. - - tweak: Shields have a bonus against blocking thrown projectiles. - Swankcookie: - - rscadd: lanterns no longer turn into flashlights when you pick them up. - bgobandit: - - rscadd: Lizard tails can now be severed by surgeons with a circular saw and cautery, - and attached the same way augmented limbs are. - - rscadd: The Animal Rights Consortium is horrified by Nanotrasen stations' sudden - rise of illegal lizard tail trade, with such atrocities as lizardskin hats, - lizard whips, lizard clubs and even lizard kebab! - neersighted: - - tweak: NanoUI should now load much faster, as the filesize and file count have - been reduced -2015-12-20: - Joan: - - tweak: Reduces Lexorin Jelly's oxygen damage significantly. - - experiment: Blobbernaut chemical application on attack is back, but much less - absurd this time; blobbernauts with an overmind will do 70% of the normal chem - damage(plus 4) and attack at a much slower rate than the blob itself can. - - wip: As an example, a blobbernaut with the Ripping Tendrils chemical would do - 14.5 brute and 10.5 stamina damage per hit. - Kor: - - rscadd: Adds reactive tesla armour. Adminspawn only. - - rscadd: Adds the legendary spear, Grey Tide. Admin only. - - rscadd: Nuke Ops can now purchase penetrator rounds for their sniper rifles. - - rscadd: Nuke ops can now purchase additional team members for 25 telecrystals. - They don't come with any gear other than a pistol however, so remember to save - some points for them. - - rscadd: Nuke Ops now have an assault pod. A 30tc targeting device will allow you - to select any area on the station as its landing zone. The pod is one way, so - don't forget your nuke. - - rscdel: The teleporter board is no longer available for purchase in the uplink. - - rscdel: After finding absolutely nothing of value, Nanotrasen away teams placed - charges and scuttled the abandoned space hotel. - - rscadd: Metastation now has xenobiology computers. - - rscadd: Metastation now has escape pod computers. - - rscadd: A distress signal has been detected broadcasting in an asteroid field - near Space Station 13. - - rscadd: Clicking the (F) follow link for AI speech will now make you orbit their - camera eye. - MMMiracles: - - tweak: The SAW has been revamped slightly. It now requires a free hand to fire, - but includes 4 new ammo variants along with a TC cost decrease for both the - gun and the ammo boxes. - MrStonedOne: - - bugfix: Fixes ghost orbit breaking ghost floating - - bugfix: Fixes orbiting ever breaking golem spawning - - bugfix: 'Fixes orbiting ever preventing that ghost from showing up in pictures - taken by ghost cameras resdel: Fixes being able to break your ghost sprite by - multiple quick consecutive orbits (FINAL SOLUTION, PROVE ME WRONG YOU CAN''T)' - Remie: - - rscadd: 'Byond members can now choose how their ghost orbits things, their choices - are: Circle, Triangle, Square, Pentagon and Hexagon!' - - tweak: orbit() should be much cheaper for clients now, allowing those of you with - potato PCs to survive mega ghost swirling better. - incoming5643: - - bugfix: the terror of double tailed lizards and featureless clones should now - be over - - rscdel: the emote *stopwag no longer works, just *wag again to stop instead -2015-12-21: - AnturK: - - tweak: Ghost HUD and Ghost Inquisitiveness toggles are now persistent between - rounds. - Kor: - - rscadd: Malfunctioning AIs have been merged with traitor AIs. They no longer appear - in their own mode. - - rscadd: Hacking APCs now gives you points to spend on your modules. Save up enough - points and you can buy a doomsday device on a 450 second timer. - - rscadd: The detectives revolver reskins on alt click now. - - rscadd: You can now dual wield guns. Firing a gun will automatically fire the - gun held in your off hand if you are on harm intent. - LanCartwright: - - tweak: The TC costs for nuke ops have been rebalanced. Guns, viscerators and mechs - are cheaper, ammo and borgs are more expensive. - - rscadd: Most guns can now be bought in bundles, together with some ammo and freebies - for a special discount. - The-Albinobigfoot: - - rscadd: Nuclear Operative families may once again requisition ultra-adhesive footwear. -2015-12-22: - Iamgoofball: - - rscadd: Tesla engine has been added alongside the singularity engine to all maps. - Joan: - - wip: 'Adds three new blob chemicals:' - - rscadd: Replicating Foam, which is brown, does brute damage, has bonus expansion, - and has a chance to expand when damaged. - - rscadd: Sporing Pods, which is light orange, does low toxin damage, and has a - chance to produce weak spores when expanding or killed. - - rscadd: Synchronous Mesh, which is teal, does brute damage and bonus damage for - each blob tile near the target, and splits damage taken between nearby blobs. - - experiment: Synchronous Mesh blobs take 25% more damage, to compensate for the - spread damage. - Kor: - - rscadd: Cayenne will no longer be targeted by the syndicate turrets. - - tweak: Energy shields now only reflect energy projectiles. - - rscadd: Added accelerator sniper rounds to uplink, a weak projectile that ramps - up damage the farther it flies. - MMMiracles: - - bugfix: Saber magazines have been dropped to 21 per magazine. When asked, Nanotrasens - official ballistic department replied "There is indeed such a thing as too much - bullet." - Xhuis: - - tweak: Stun batons can now be blocked by shields, blocked hits don't deduct charge. - xxalpha: - - rscadd: Janitor cyborgs now have a bottle of drying agent. -2015-12-25: - Joan: - - rscdel: The blob Split Consciousness ability has been removed. - - tweak: The blob mode now spawns more roundstart blobs, instead. - Kor: - - rscadd: AI holograms no longer drift in zero gravity - LanCartwright: - - tweak: Shotguns shells now have one extra pellet. - MrStonedOne: - - bugfix: Screen shakes will no longer allow you to see through walls - - tweak: Screen shakes will now move with you when moving rather than lag your client - behind your mob - - tweak: Screen shakes are now less laggy in higher tickrates -2015-12-26: - Buggy123: - - tweak: Salicyclic Acid now rapidly heals severe bruising and slowly heals minor - ones. - Iamgoofball: - - tweak: Telsa energy ball now shoots only a single, powerful beam of lightning - that can arc between mobs. - - soundadd: Energy ball can now be heard when near-by. - Incoming5643: - - tweak: Animated objects now revert if they have no one to attack for a while. - - rscadd: Added Golden revolver, a powerful sounding gun with large recoil. - Kor: - - rscadd: Transform Sting is now actually functional. - MrStonedOne: - - tweak: Movement in no gravity now allows you to push off of things only dense - to some mobs if it is dense to you (such as tables/blob tiles) rather than just - objects that are only dense to all mobs. - - bugfix: Long/timed actions will now cancel properly if you move and quickly move - back to the right location. -2015-12-27: - Joan: - - rscadd: Overmind-created blobbernauts are now player-controlled if possible. - - tweak: Creating a blobbernaut no longer destroys the factory, instead doing heavy - damage to it and preventing it from spawning spores for one minute. - - tweak: You cannot spawn blobbernauts from overly damaged factories. - - rscadd: Procedure 5-6 may be issued for biohazard containment under certain situations. - - tweak: Blobs will now burst slightly later on average, and the nuke report with - the nuke code will arrive slightly earlier. - Kor: - - soundadd: Spacemen now announce when they are changing magazines. - - rscadd: Command headsets now have a toggle to let you have larger radio speech. - LanCartwright: - - rscdel: The Syndicate Ship no longer spawns with Bulldog shotguns, operative have - been given 10 extra telecrystals instead. - MrStonedOne: - - bugfix: Flashes that were emp'ed were incorrectly flashing people in range of - the emper, not in range of the flash. - - tweak: Flashes in a mob's inventory that are emp'ed will only aoe stun if it is - not inside of a container like a backpack/box -2015-12-28: - AnturK: - - rscadd: You can now write an entire word with crayons by setting it as a buffer - and then clicking the target tiles in the right order. - Joan: - - rscdel: Blobbernauts can no longer smash walls of any type. - MrStonedOne: - - tweak: Progress bars now have 20 states instead of 5. - - bugfix: Bump mining should be fixed. - - tweak: Long actions now checks for movement/changed hands/etc more often to prevent - edge cases. - - tweak: Multiple progress bars will now stack properly, rather than fight each - other for focus. - Ressler: - - rscadd: Adds the reagent Haloperidol. - - rscadd: It is an anti-drug reagent, good for stopping assistants hyped up on meth, - bath salts, and equally illegal drugs. - - rscadd: It can be made with Chlorine, Fluorine, Aluminum, Potassium Iodide, and - Oil. - neersighted: - - bugfix: Make NanoUIs transfer upon (un)ghosting. - - bugfix: Fix NanoUIs jumping when resized/dragged. - - bugfix: Lots of other NanoUI bugs. -2015-12-31: - Bawhoppen: - - rscadd: Nanotrasen has opened the availability of tactical SWAT gear to station's - cargo department - - rscadd: Due to a new trade agreement with Chinese space suit manufacturers, Nanotrasen - can now obtain basic space suits much cheaper; This has been reflected in the - cargo prices - - rscadd: Amateur medieval enthusiasts have found a quick way to easily make wooden - bucklers. - Joan: - - imageadd: Replaced every book sprite in the game with new, consistent versions. - - imageadd: Except the one-use wizard spellbooks, which already got new sprites. - PKPenguin321: - - rscadd: Chest implants have been added that allow you to morph your arms into - a gun and back at will. There are two variants, a taser version and a laser - version. Both versions are self-charging. Getting EMPed with one of these implants - results in the implant breaking and loads of fire damage. The implants are currently - admin-only. - - tweak: The telecrystal price for thermal imaging goggles has been lowered from - 6 to 4. - incoming5643: - - rscadd: The wizard federation has finally updated their assortment of guns for - the summon guns event. Look forward to getting shot in the face with a whole - new batch of interesting and rarely seen weaponry! -2016-01-01: - Iamgoofball: - - experiment: Redid how objectives are assigned, they're now a lot more random in - terms of what you can get. - Incoming5643: - - tweak: Removed gender restrictions from socks. - Joan: - - rscdel: Storage Blobs are gone; they were effectively a waste of resources, as - there are more or less no points at which you should need them, unless you were - winning excessively hard. - - rscdel: Blobs can no longer burst early; instead, the button gives some early - help and serves to indicate you're a blob. - - wip: Blobbernauts now poll candidates instead of grabbing a candidate immediately. - The poll is 5 seconds, so that there's no significant pause between making a - blobbernaut and it doing stuff. - - rscadd: Blobbernaut creation replaces Storage Blob creation on the blob HUD. - - tweak: Overmind communication is now much larger and easier to see, and blob mobs, - such as blobbernauts, will hear it. - Kor: - - rscadd: The wizard has a new spell, Lesser Summon Guns. This summons an unending - stream of single shot bolt action rifles into his hands, automatically replacing - themselves as you fire. - - bugfix: Fixes successive generations of grey tide clones not despawning. - - tweak: Using challenge ops now delays shuttle refuel. - - rscadd: Added a new wizard event, Advanced Darkness. - MrStonedOne: - - experiment: GHOST POPUP RE-WORK - - bugfix: Ghost popups will no longer steal focus - - bugfix: Ghost popups will no longer submit on key press (regardless of focus) - unless you tab to a button first - - tweak: Ghost popups will close themselves after the time out has ended - - rscadd: Ghost popups are now themed. - - tweak: Long actions (like resisting out of handcuffs) will no longer count space/nograv - drifting as the user moving. - - tweak: This does not apply to the target of a long action if that target isn't - you. Pulling something while space drifting and working on it intentionally - won't work. -2016-01-02: - Kor: - - rscadd: Guardians/Parasites are now named after constellations, and have new sprites - from Ausops. - Kor and GunHog: - - rscadd: Malfunctioning AIs can now purchase Enhanced Surveillance for 30 points, - which allows them to "hear" with their camera eye. - MMMiracles: - - rscadd: A distress signal was recently discovered with gateway coordinates attached - to a far-off research facility owned by Nanotrasen. The signal was sent out - in hopes of someone competent receiving it, unfortunately, your station was - the only one to respond. Local security forces may not be welcoming your arrival - group with open arms. -2016-01-07: - KorPhaeron: - - tweak: Doubled cost of Lesser Summon Guns to 4 and increased charge time to 75 - seconds. - TrustyGun: - - rscadd: 'Added two new UI styles: black and green Operative and pale green Slimecore.' -2016-01-09: - Wjohnston: - - wip: AI Satellite has been remapped to make it more secure. -2016-01-11: - Joan: - - rscdel: Blob cores and nodes no longer cause normal pulsed blobs to animate. Factories - and resource nodes will still animate. - - imageadd: Holoparasite sprites have been updated again, are now named after silvery - metals and flowers and can also be colored purple, blue or yellow. - xxalpha: - - tweak: Pipes and cables under walls, intact floors, grilles and reinforced windows - will now be shielded from explosions until exposed. -2016-01-13: - Joan: - - imageadd: Alien whisper ability has a new icon - MrStonedOne: - - tweak: Control clicking on the thing you are pulling will no longer unpull, instead - control clicking on anything too far away to be pulled will unpull. (reminder - that the delete key also unpulls) - OneArmedYeti: - - imageadd: To help with colorblindness, gang HUDs have been changed so leaders - have a border and normal gangster icons are smaller. -2016-01-15: - Joan: - - bugfix: Holoparasites can no longer beat their owner to death while inside of - them. - - spellcheck: Updates traitor holoparasite descriptions for accuracy. - - spellcheck: Adds 8 additional silvery metals to the holoparasite name pool. - - imageadd: Adds two new holoparasite colors, light purple and red. - - imageadd: Holoparasite HUD buttons now have new sprites. - - imageadd: Adds glow effects when guardians teleport or recall, including fire - guardian teleporting and support guardian teleporting. - Kor: - - rscadd: Washing machines are activated via alt+click rather than a right click - verb. -2016-01-16: - Joan: - - imageadd: Alien queens and praetorians have suitably large speechbubbles. - - imageadd: Syndicate cyborgs and syndrones have suitably evil robotic speechbubbles. - - imageadd: Blob mobs have suitably uncomfortable-looking speechbubbles. - - imageadd: Holoparasites and guardians have suitably robotic and magical speechbubbles. - - imageadd: Swarmers have suitably holographic speechbubbles. - - imageadd: Slimes have suitably slimy speechbubbles. -2016-01-17: - Joan: - - bugfix: You can once again repair a hacked APC by using an APC frame on it instead - of welding it off the wall, at the same stage as you'd weld it off the wall. - MrStonedOne: - - bugfix: Control clicking on a turf now un-pulls -2016-01-19: - neersighted: - - rscadd: Many many interfaces have been ported to tgui; uplinks and MULEbots being - the most important - - rscadd: You can now tune radios by entering a frequency - - bugfix: Air Alarms now support any gas -2016-01-23: - neersighted: - - experiment: Refactor wires; port wire interface to tgui. - - rscadd: Wire colors are now fully randomized. - - rscdel: Remove pizza bombs, as the code and sprites were terrible. - - rscadd: Add pizza bomb cores, which can be combined with a pizza box to make a - pizza bomb. - octareenroon91: - - bugfix: Chemistry machinery should now all equally accept beakers, drinking glasses, - etc. -2016-01-27: - Joan: - - tweak: Golems have about a 40% chance to stun with punches, from about 60%. - - tweak: Millitary Synths have about a 50% chance to stun with punches, from literally - 100%. - - wip: Blobbernaut creation costs 30 points, and does much more damage to the factory. - - rscdel: Blob factories regenerate at half normal rate. - - tweak: Blob reagents tweaked; - - rscadd: Ripping Tendrils does slightly more brute damage, but less stamina damage. - - rscdel: Lexorin Jelly does less brute damage. - - rscadd: Energized Fibers does slightly more burn damage. - - rscadd: Sporing Pods does slightly more toxin damage. - - rscadd: Replicating Foam will try to replicate when hit more often. - - rscadd: Hallucinogenic Nectar does slightly more toxin damage and causes hallucinations - for longer. - - rscadd: Cryogenic Liquid does more burn damage. - - experiment: Synchronous Mesh does slightly less damage with one blob but massive - damage with more than one nearby blob. - - rscdel: Dark Matter does less brute damage. - - rscdel: Sorium does slightly less brute damage. - - rscdel: Pressurized Slime has a lower chance to emit water when killed and when - attacking targets. - - tweak: Supermatter explosion is no longer capped, and under normal conditions - will produce a 8/16/24 explosion when delaminating. - - imageadd: Blob tiles now do an attack animation when failing to expand into a - turf. - - imageadd: Overmind-directed expansion is more visible than automatic expansion. - Kor: - - rscadd: Capture the flag has been added in space near central command. The spawners - are disabled by default, so be sure to harass admins when you die until they - let you play. The arena was mapped by Ausops. - - rscadd: Nuke ops can purchase mosin nagants for 2 telecrystals. - MrStonedOne: - - bugfix: Fixes the powersink drawing less power than the smeses put out. - - tweak: Made the powersink hold significantly more power before overloading and - going boom. - - tweak: Buffed the explosion of the power sink when it overloads. You are suggested - to think twice about wiring the engine to the grid. - PKPenguin321: - - rscadd: The Autoimplanter, a device that can insert cyberimplants into humans - instantly and without the need of surgery, has been added to the game. It is - currently only obtainable by nuke ops, by way of being included in the Box of - Implants. -2016-01-28: - Joan: - - rscadd: Blobs can communicate before bursting to allow for more coordination. - Kor: - - rscadd: Butchering mobs by attacking them with sharp objects will only happen - on harm intent. This means it is possible to do surgery on aliens again. -2016-01-29: - Joan: - - rscadd: Holoparasites can now see their summoner's health at all times. The health - displayed is a percentage, with 0 being dead. - - imageadd: Holoparasites now have visual flashes on the summoner's location when - recalled due to range limits and when manifesting. - Kor: - - rscadd: Red xenobio potions now work on vehicles (janitor cart, ATV, secway, etc), - causing them to go faster. - - rscadd: Stuffing people in bins uses clickdrag instead of grab. -2016-01-30: - Boredone: - - tweak: Due to an experiment gone wrong, the Research Director's Teleport Armor - now causes some mild radiation poisoning on teleportation to the wearer. - Francinum: - - rscadd: Added two new female underwear styles. - Kor: - - rscadd: You can now use the abandoned white ship as an escape route at round end. - This is possible on Box, Meta, and Dream. - - rscadd: Added support so that mappers can make any shuttle function as an escape - shuttle. - MMMiracles: - - rscadd: Three new bra sets have been added for the ladies out there who want to - show their patriotism. - xxalpha: - - rscadd: Blueprints will now allow the expansion of an existing area by giving - its name to a new adjacent area. - - rscadd: Added a no power warning cyborg verb to Robot Commands. -2016-01-31: - Kor: - - rscadd: Added a special AI upgrade disk that allows normal AIs to use malf modules - and hack APCs. It is admin only. - - rscadd: Added an AI upgrade disk that grants AIs the lipreading power. It is admin - only. -2016-02-01: - Erwgd: - - rscadd: The Kitchen Vending machine now stocks salt shakers and pepper mills! - - rscadd: The NutriMax now stocks spades, cultivators and plant analyzers. - - rscadd: Rice seeds are now stocked in the MegaSeed Servitor, and the seeds supply - crate now contains a pack of rice seeds. - - rscdel: Botanists should be aware that wheat stalks can no longer mutate into - rice. - Fayrik: - - rscadd: pAI cards can now be inserted into simple robots, to allow for more robust - robot personalities. - PKPenguin321: - - rscadd: You can now store knives, pens, switchblades, and energy daggers in certain - types of shoes (such as jackboots, workboots, winter boots, combat boots, or - no-slips). - - rscadd: Horns can now be stored in clown shoes. Honk. - TrustyGun: - - rscadd: Adds gag handcuffs to the prize pool for arcade machines. They act like - regular handcuffs, but you break out of them in a second. - WJohnston: - - rscadd: Adds missing booze & soda dispenser, library console, fixes door access - and a few other minor things to Efficiency Station - - rscadd: Also adds direction tags so people can find their way around better. - bgobandit: - - rscadd: On Valentine's Day, all spacemen will receive candy hearts and valentines - for their special someones! Label valentines with a pen. - - rscadd: Note that today is not Valentine's Day. -2016-02-05: - Joan: - - experiment: Blob expansion is faster near the expanding blob, but slower further - away from it. - - tweak: Blob spores produce a slightly larger smoke cloud when dying. Sporing Pods - spores and blob zombies produce the current small cloud. - - rscdel: Blobbernauts can no longer pull anything at all. - - tweak: Blobbernauts health reduced to 200, but blobbernauts now take half brute - damage. - - tweak: Blobbernauts now take massive damage from fire. - - tweak: Blobbernauts do approximately 3 more damage when attacking. - - wip: Replicating Foam will expand more actively when damaged. - - rscadd: Adds Electromagnetic Web, which is light blue, does burn damage and EMPs - targets, and causes a small EMP when dying. - - rscadd: Electromagnetic Web takes more damage; a normal blob that hasn't been - near a node or the core for 6~ seconds can be oneshotted by a laser. - - rscadd: Anomalies, such as pyroclastic and vortex anomalies, now appear at the - bottom of the ghost orbit and observe menus. - Kor: - - rscadd: Nuke ops can purchase sentience potions for 4tc - MMMiracles: - - tweak: Bulldog now starts with stun-slugs instead of its usual 60-brute slugs. - Slugs now cost 3 TC instead of 2. - - tweak: Most SAW ammo has been slightly buffed in damage so maybe it'll be worth - buying now along with a slight cost decrease for the gun itself. - - tweak: Incen shells for the shotgun now apply extra firestacks on hit so it actually - sets people on fire instead of turning them into a light show. - - tweak: Incen rounds for the SAW now leave a fire trail similar to the bulldog's - dragonsbreath round. - - rscadd: Nuke Ops now have the ability to purchase breaching shells, a weaker variant - of the meteorslugs that can still push back people/airlocks/mechs/corgis. - - bugfix: SAW should now use its in-hand sprites for an open-closed magazine - PKPenguin321: - - rscadd: You can now sharpen carrots into shivs by using a knife or hatchet on - them. - bgobandit: - - rscadd: Seven new emoji have been added to hasten the death of the English language. - octareenroon91: - - rscadd: Player-controlled medibots can examine a patient to know what chems are - in the patient's body. - - bugfix: autolathes have been showing extra copies of the hacked designs, but no - more. -2016-02-06: - LordPidey: - - rscadd: Added suicide command for pipe valves. It's quite messy. - Lzimann: - - tweak: Combat Mechas now have a increased chance of destroying a wall with punches - (40% for walls and 20% for reinforced walls)! - - rscadd: Combat mechas can now destroy tables and racks with a punch! - neersighted: - - rscadd: The Syndicate has stolen the latest tgui improvements from Nanotrasen! - All uplinks now feature filtering/search. - - rscadd: Nanotrasen is proud to announce its next generation sleepers, featuring - tgui! - - rscadd: Portable atmospheric components have been overhauled to use the latest - interface technology. - - rscdel: The Area Atmosphere Computer has been removed. - - rscadd: Huge scrubbers now require power. - - rscdel: Borg jetpacks are now refilled from a recharger and not a canister. - - rscadd: Power monitors now have a state of the art graph. Hopefully they're actually - useful to someone. - - rscadd: Cargo consoles have been redesigned and now feature search and a shopping - cart! -2016-02-08: - Incoming5643: - - rscadd: Poly will now speak a line or emote when pet. - - rscadd: Poly now responds to getting fed crackers by becoming more annoying for - the round. - - experiment: Every day he is growing stronger - Kor: - - rscadd: A certain hygiene obsessed alien is now obtainable via xenobiology gold - cores. - - rscadd: Add laserguns with swappable, rechargeable magazines. They are adminspawn - only. - - rscadd: Operatives now get their pinpointers in their pocket when they spawn, - meaning reinforcements automatically come with them (and hopefully people stop - forgetting them in general). - - rscadd: Capture the flag now features a high speed instagib mode, with guns courtesy - of MMMiracles. - phil235: - - tweak: The vision updates for mobs are now instantaneous (e.g. you don't have - to wait one second to see again when removing your welding helmet) - - tweak: Your vision is now affected when you're inside something or viewing through - a camera. You can no longer see mobs or objects when ventcrawling (unless you - have xray for example), an xray user viewing through a camera do not see through - walls around the camera. On the other hand, cameras with an xray upgrade let - you see through walls. Unfocused camera now give you the same effect as when - you are nearsighted. Being inside closets, morgue container and disposal bins - give you some vision impairments. - - rscadd: The ability to toggle your hud on and off (with f12) is now available - to all mobs not just humans. -2016-02-09: - AnturK: - - rscadd: Syndicate Operatives can now buy bags full of plastic explosives for 9 - TC. - Gun Hog: - - rscadd: '"Nanotrasen has drafted a design for an exosuit version of the medical - nanite projector normally issued to its Emergency Response Personnel. With sufficient - research, a prototype may be fabricated for field testing!"' - incoming5643: - - rscadd: The wizard spell wild shapeshift has been made less terrible. - neersighted: - - rscadd: Internals tanks now provide an action button - - rscadd: Jetpacks now emit the gas consumed for propulsion onto their turf - - rscdel: Jetpacks no longer have object verbs - - rscdel: tgui no longer has internals buttons - - bugfix: Malf AI's flood ability now correctly sets vent pressure bounds -- the - results are devastating... Try it! -2016-02-10: - Joan: - - rscadd: Blob mobs now heal for 2.5% of their maxhealth when blob_act()ed, basically - whenever they're on blobs near a node or the core. - - tweak: Blob expansion no longer has a chance to fail inversely proportional with - the expanding blob's health. Blobs still, however, expand at roughly the same - rate as they do currently. - - experiment: Adds five new blob chemicals. - - rscadd: Adds Penetrating Spines, which is sea green and does brute damage through - armor. The damage can still be reduced by bio protection. - - rscadd: Adds Explosive Lattice, which is dark orange and does brute damage to - all mobs near the target. Explosive Lattice is very resistant to explosions. - - rscadd: Adds Cyclonic Grid, which is a light blueish green and does oxygen damage, - in addition to randomly throwing or pulling nearby objects. - - rscadd: Adds Zombifying Feelers, which is a fleshy zombie color and does toxin - damage, in addition to killing and reviving unconscious humans as blob zombies. - - rscadd: Adds Regenerative Materia, which is light pink and does toxin damage, - in addition to making the attacked mob think it is at full health. - - wip: Tweaks some of the existing blob chemicals slightly. - - rscadd: Sporing Pods can produce spores when killed by damage less than 21, from - less than 20. This means lasers can produce spores. - - rscadd: Reactive Gelatin has a slightly higher maximum damage and will attack - the nearby area when hit with brute damage projectiles, from just when attacked - by brute damage in melee. - - tweak: Sorium, Dark Matter, and the new Cyclonic Grid will not throw mobs with - the 'blob' faction, such as blobbernauts and spores. - Kor: - - rscadd: The chaplain can now transform the null rod into a holy weapon of his - choice by using it in hand. Each one has different strengths and drawbacks. - MrStonedOne: - - tweak: Tesla balance changes - - tweak: Tesla will now require increasingly more energy to trigger new orbiting - balls. First ball comes with 32 energy (down from 300), fourth requires 256 - (down from 1200), and so on and on, doubling with each new ball. Balls after - 7 are increasingly harder to get than before, whereas balls before 6 are easier - to get. - - rscadd: MULTIBOLT IS BACK! - - tweak: Be warned that in multibolt all but 1 primary bolt now have a random shocking - range, meaning they may still target a close human over a far away grounding - rod as the rod may be out of range. - - tweak: Power output of tesla massively dropped, it should no longer put out almost - twice the power of a stage 3 singulo with maxed collectors without any balls, - you'll need at least 3 balls for that now. - - tweak: Tesla can now lose power, causing ball count to drop. Tesla will never - shrink out of existence, just lose its balls. - - tweak: Tesla is now more likely to head in the direction of the thing it last - zapped. - PKPenguin321: - - rscadd: Chameleon Jumpsuits now have slight melee, bullet, and laser protection. - - tweak: The armor values for security helmets, caps, and berets have all been brought - in line. Consequently, helmets and berets are a teeny bit better, and caps now - have the slight bomb protection that the other two had. - - experiment: The time needed to complete most tablecrafting recipes has been cut - in half to make tablecrafting less annoying to use. - Shadowlight213: - - rscadd: pAI controlled mulebots can now run people over. - - tweak: Mulebot health has been greatly decreased. - neersighted: - - rscadd: Horizontal (lying) mobs now fit into crates - - rscadd: Mobs may now be stuffed into crates, as with lockers - - rscadd: Stuffing into a locker deals a mild stun (the same as tabling) - octareenroon91: - - rscadd: New designs can now be added to Autolathes via a design disk. Simply use - a disk containing a suitable design on your autolathe. -2016-02-11: - neersighted: - - rscdel: Remove all cyborg jetpacks... They were awful... - - rscadd: Adds borg ion thrusters, which are available as an upgrade module for - any borg. - - rscdel: Jetpack stabilizers are always on, but now we have... - - rscadd: Jetpack turbo mode, to move at sanic speed in space. -2016-02-12: - Kor: - - rscadd: Malf AIs can now get the objective to have a robot army by the end of - the round. - - rscadd: Malf AIs can now get the objective to ensure only human crew (no mutants) - are on the shuttle at round end. - - rscadd: Malf AIs can now get the objective to prevent a crewmember from escaping - the station, while requiring that crewmember still be alive. - neersighted: - - rscadd: Cybernetic implants purchased from the uplink now include a free autoimplanter! - octareenroon91: - - rscdel: You can no longer kill yourself with the SORD - - rscadd: Suicide attempts with the SORD will inflict 200 stamina damage. You will - only die of shame. - - bugfix: Cleanup to suicide verb code. -2016-02-13: - Buggy123: - - rscadd: You can now build cable coils using the autolathe. - Fox McCloud: - - bugfix: Fixes the sleeping carp martial arts grab not being an instant aggressive - grab - KazeEspada: - - rscadd: 'New backpack options available! New options include: Department Bags, - Leather Satchels, and Dufflebags!' - Kor: - - rscadd: Chainsaw sword, force weapon, and war hammer have all been added as Chaplain - weapon options. - Malkevin: - - tweak: Tracking implants have been upgraded. The old clunky manually adjusted - number system has been replaced with an automated ID scanner, this will show - the implant carrier's name on both the Prisoner Management Console and the hand - tracker. Happy deep striking! - PKPenguin321: - - tweak: 'Traitor EMP kits have had their cost reduced from 5 to 2, and no longer - contain the EMP flashlight. rcsadd: EMP flashlights can now be bought separately - for 2 TCs.' - Zerrien: - - rscadd: Conveyor pieces can be placed as corner pieces when building in non-cardinal - directions. - - rscadd: Using a wrench on a conveyor rotates it while in place. - neersighted: - - tweak: Gibtonite can now be pulled. - - tweak: Slowdown factors are ignored when in zero gravity. - phil235: - - rscadd: Brains can no longer be blinded. - - bugfix: Fixes brain being immortal. They are immune to everything but melee weapon - attacks. Brains not inside a MMI can now be attacked just like MMIs. Damaged - brain can't be put into a robot, they can still be put inside a brainless humanoid - corpse and cloned, but deffibing the corpse always fails (can't revive someone - with a brain beaten to a pulp). -2016-02-14: - Joan: - - rscadd: Blobbernauts can now speak to overminds and other blobbernauts with :b - - rscadd: Blobs can now expand onto lattices and catwalks. - - rscdel: Blob expansion on space tiles with no supports is much slower. - - tweak: Blob Sorium and Dark Matter now have less range on targets with bio protection. - - tweak: Blob Sorium does slightly less damage. -2016-02-17: - Fox McCloud: - - tweak: Laser eyes mutation no longer drains nutrition - Joan: - - rscdel: The sleeping carp gang no longer has special equipment and an inability - to use pneumatic cannons. - PKPenguin321: - - tweak: The traitor surgery bag now costs 3 TC, down from 4. - Zerrien: - - rscadd: adds unique icons for the two medical patch types -2016-02-18: - Kor: - - rscadd: 'Four more chaplain weapon options have been added: hanzo steel, light - energy sword, dark energy sword, and monk''s staff.' -2016-02-19: - AnturK: - - rscadd: Chairs and stools can now be picked up and used as weapons by dragging - them over your character. - PKPenguin321: - - rscadd: The cleanbot uprising has begun. - - rscadd: Emagged cleanbots are much scarier now. Standing on top of one will yield - very devastating results, namely in the form of powerful flesh-eating acid. -2016-02-20: - CPTANT: - - tweak: Due to new crystals Nanotrasen lasers weapons may now set you on FIRE. - Joan: - - imageadd: Blobbernauts and blob spores now have a visual healing effect when being - healed by the blob. - xxalpha: - - rscadd: 'New event: Portal Storm.' - - rscadd: Kinetic accelerators now reload automatically. -2016-02-24: - CPTANT: - - tweak: stamina regeneration is now 50% faster. - Joan: - - rscadd: Revenants now have an essence display on their HUD - - rscadd: Revenants retain the essence cap from the previous revenant when reforming, - minus any perfect souls. - - rscadd: Revenants can now toggle their night vision. - - tweak: Revenant Defile has one tile more of range, but does less damage to windows. - - tweak: Revenant Blight kills space vines and glowshrooms slightly more rapidly. - - tweak: Delays before appearing when harvesting are slightly randomized. - - tweak: Revenant fluff objectives have been changed to be slightly more interesting. - RemieRichards: - - rscadd: Cursed heart item for wizards, allows them to heal themselves in exchange - for having to MANUALLY beat their heart every 6 seconds. Heals 25 brute/burn/oxy - damage per correctly timed pump. - Steelpoint: - - tweak: Syndicate engineers have reinforced the exterior of their stealth attack - ships. Nuclear Operative ship hull walls are now, once again, indestructible. - - tweak: In addition Syndicate engineers had the opportunity to revamp the interior - of stealth attack ships. The inside of Op ships now has a slightly new layout, - including a expanded medbay, as well as additional medical and explosive equipment. - - rscadd: Thanks to covert Syndicate operatives, strike teams can now bring the - stealth attack ship within very close proximity to the station codenamed 'Boxstation'. - A new ship destination labeled 'south maintenance airlock' is now available - to Op strike teams. - phil235: - - rscadd: Holo tape is replaced by holo barriers. - - rscadd: The action button of gas tanks and jetpacks now turn green when you turn - your internals on. -2016-02-26: - Iamgoofball: - - rscadd: Adds the Chameleon Kit to uplinks for 4 telecrystals containing a Chameleon - Jumpsuit/Exosuit/Gloves/Shoes/Glasses/Hat/Mask/Backpack/Radio/Stamp/Gun/PDA. - - rscadd: The chameleon gun fires no-damage lasers regardless of what it looks like. - - rscadd: The Voice Changer has been merged into the Chameleon Mask. - - rscadd: No-slip shoes have been combined into Chameleon Shoes. - - rscdel: Space Ninjas no longer have voice changing capabilities. - - rscdel: The Chameleon Jumpsuit has been replaced by the Chameleon Kit in the uplink - for the same price. - - tweak: All chameleon clothing items have lost EMP vulnerability. - - tweak: Chameleon equipment provides very minor armor. - - experimental: Agent ID Cards can now use chameleon technology to look like any - other ID card. - - bugfix: The Chameleon Kit is actually purchasable now. It doesn't give a single - chameleon jumpsuit anymore. - PKPenguin321: - - rscadd: The kitchen vendor now contains two sharpening blocks. - - rscadd: Only items that are already sharp (such as fire axes, knives, etc) can - be sharpened. Items used on sharpening blocks become sharper and deadlier. The - sharpening blocks themselves can only be used once, and you can only sharpen - items once. - - tweak: The EMP kit has been buffed. It now contains five EMP grenades, up from - two. - - tweak: The EMP implant found in the EMP kit has been buffed. It now has three - uses, up from two. -2016-03-02: - CoreOverload: - - rscadd: A new "breathing tube" mouth implant. It allows you to use internals without - a mask and protects you from being choked. It doesn't protect you from the grab - itself. - - tweak: Arm cannon implants are now actually implanted into the arms, not into - the chest. - - bugfix: Arm cannons have an action button again. - - tweak: Heart removal is no longer instakill. It puts you in condition similar - to heart attack instead. You can fix it by installing a new heart and applying - defibrillator if it wasn't beating. - - rscadd: You can now make a stopped heart beat again by squeezing it. It will stop - beating very soon, so you better be quick if you want to install it without - using defibrillator. - - rscadd: There is now a chance to recover some of the internal organs when butchering - aliens or monkeys. - - rscadd: A new organ - lungs. When removed, it will give you breathing and speaking - troubles. - - rscadd: Human burgers are, once again, named after the generous meat donors that - made them possible. - Fox McCloud: - - rscadd: Gibbing mobs will now throw their internal organs - Gun Hog: - - rscadd: Ghost security HUDs now show arrest status and implants. - - tweak: The Alien queen, upon her death, will now severely weaken the remaining - alien forces. - Joan: - - tweak: Replicating Foam has a lower chance to expand when hit. - - tweak: Penetrating Spines is now purple instead of sea green. - - imageadd: Blobbernauts now have a brief animation when produced. - - experiment: Adds five new blob chemicals. This is a total of 25 blob chemicals. - Will it ever stop? - - rscadd: Draining Spikes, which is reddish pink and does medium brute damage, and - drains blood from targets. - - rscadd: Shifting Fragments, which is tan and does medium brute damage, and shifts - position when attacked. - - rscadd: Flammable Goo, which is reddish orange and does low burn and toxin damage, - and when hit with burn damage, emits a burst of flame. It takes more damage - from burn, though. - - rscadd: Poisonous Strands, which is lavender and does burn, fire, and toxin damage - over a few seconds, instead of instantly. - - rscadd: Adaptive Nexuses, which is dark blue and does medium brute damage, and - reaps 5-10 resources from unconscious humans, killing them in the process. - - wip: Confused about what the chemical you're fighting does? Look at https://tgstation13.org/wiki/Blob#Blob_Chemicals - - rscadd: Adds 'Support and Mechanized Exosuits' and 'Space Suits and Hardsuits' - categories to the syndicate uplink. - - rscadd: Nuke op reinforcements and mechs have been moved to the first category. - Syndicate space suits and hardsuits have been moved to the second category. - - bugfix: Traitors can now properly buy the blood-red hardsuit for 8 TC. - - tweak: Nuke ops can no longer buy the blood-red hardsuit, as the elite hardsuit - costs the same amount while being absolutely better. - Kor: - - rscadd: Added door control remotes. Clicking on doors while holding them will - let you open/bolt/toggle emergency access depending on the mode. They will not - work on doors that have their IDscan disabled (rogue AIs take note!) - - rscadd: The Captain, RD, CE, HoS, CMO, and QM all now have door control remotes - in their lockers. - LanCartwright: - - rscadd: Adds Uranium to Virus reaction. Will create a random symptom between 5 - and 6 when mixed with blood. - - rscadd: Adds Virus rations, which creates a level 1 symptom when mixed with blood. - - rscadd: Adds Mutagenic agar, which creates a level 3 symptom. - - rscadd: Adds Sucrose agar which creates a level 4 symptom. - - rscadd: Adds Weak virus plasma, which creates a level 5 symptom. - - rscadd: Adds Virus plasma, which creates a level 6 symptom. - - rscadd: Adds Virus food and Mutagen reaction, creating Mutagenic agar. - - rscadd: Adds Virus food and Synaptizine reaction, creating Virus rations. - - rscadd: Adds Virus food and Plasma reaction, creating Virus plasma. - - rscadd: Adds Synaptizine and Virus plasma reaction, creating weakened virus plasma. - - rscadd: Adds Sugar and Mutagenic agar reaction, creating sucrose agar. - - rscadd: Adds Saline glucose solution and Mutagenic agar reaction, creating sucrose - agar. - - rscadd: Adds Viral self-adaptation symptom, which boosts stealth and resistance, - but lowers stage speed. - - rscadd: Adds Viral evolutionary acceleration, which bosts stage speed and transmittability, - but lowers stealth and resistance. - - rscadd: Flypeople now vomit when they eat nutriment. - - rscadd: Flypeople can now suck the vomit off the floor to gain it's nutritional - content. - - rscadd: Flypeople now must suck puke chunks and vomit to fill themselves of food - content. - Malkevin: - - tweak: Sec officers have two sets of cuffs again (one on spawn, one in locker) - - tweak: Done some optimisation of sec spawn equipment lists and lockers to remove - some of the repetitive clicking, sec belts are now preloaded with equipment. - - tweak: HoS has a full baton instead of the collapsible one - - tweak: Detective has a classic police baton and pepper spray instead of the collapsible - baton (someone made police batons shit, so don't get overly happy) - - bugfix: pop scaled additional lockers spawned were the wrong type, changed them - to the right type which has batons now (actually belts now that I've changed - them). - MrStonedOne: - - tweak: Suit sensors will now favor higher levels for starting amount with the - exception of the max level, that remains unchanged. - - tweak: 'Old odds: 25% off 25% binary lifesigns 25% full lifesigns 25% coordinates' - - tweak: 'New odds: 12.5% off 25% binary lifesigns 37.5% full lifesigns 25% coordinates' - PKPenguin321: - - rscadd: Bolas are now in the game. They're a simple device fashioned from a cable - and two weights on the end, designed to entangle enemies by wrapping around - their legs upon being thrown at them. The victim can remove them rather quickly, - however. - - rscadd: Bolas can be crafted by applying 6 metal sheets to cablecuffs. They can - also be tablecrafted. - Sestren413: - - rscadd: Botanists have access to a new banana mutation now, bluespace bananas. - These will teleport anyone unfortunate enough to slip on their peel. - Shadowlight213: - - rscadd: A wave of dark energy has been detected in the area. Corgi births may - be affected. - Shadowlight213 and Robustin: - - rscadd: '"Old Cult is back baby!"' - - tweak: '"Cult survival objective disabled"' - - tweak: '"Imbuing talismans now consumes the imbue rune"' - - tweak: '"Invoking the stun talisman now hurts the cultist more"' - - tweak: '"The stun talisman duration is nerfed by 10%, mute is nerfed by 60% but - a stutter and special new slur effect will last much longer"' - - tweak: '"The old cult has retained the rune of time stop, now requiring 3 cultists - to invoke"' - - rscdel: '"New Cult is removed!"' - bgobandit: - - rscadd: CentComm has been informed that cargo is receiving new forms of contraband - in crates. Remember, Nanotrasen has a zero-tolerance contraband policy! - lordpidey: - - rscadd: New virology symptom, projectile vomiting. It is a level four symptom. -2016-03-03: - Joan: - - tweak: Blobbernauts now die slowly when not near a blob. - - rscadd: Blobbernauts can now see their health and the core health of the overmind - that created them. -2016-03-05: - CoreOverload: - - imageadd: Cyborg tools (screwdriver, crowbar, wrench, etc) now have new fancy - sprites. - - tweak: Said cyborg tools have received a buff and are now two times faster than - their non-cyborg counterparts. - Joan: - - tweak: Replicating Foam has lower expand chances when hit and on normal expand. - - bugfix: Shifting Fragments will no longer try and fail to swap with invalid blobs - when hit. - - tweak: Electromagnetic Web no longer always EMPs targets, instead doing it at - a 25% chance. - - tweak: Synchronous Mesh now only takes bonus damage from fire, bombs, and flashbangs. - - tweak: Synchronous Mesh no longer tries to split damage to blob cores or nodes. - Cores and nodes still split damage to nearby blobs, however. - - tweak: Blobbernauts now attack much slower. - - tweak: Blobbernauts are now maximum one per factory, reduce that factory's health - drastically, and die slowly if that factory is destroyed. - - experiment: Factories must still have above 50% health to produce blobbernauts. -2016-03-07: - WJohnston: - - tweak: Queens and praetorians have new sprites! -2016-03-09: - Joan: - - rscadd: Blobs can now attack people that end up on top of blob tiles with Left-Click - or the Expand/Attack Blob verb. - - tweak: The Toxin Filter virology symptom now heals 4-8 toxin damage instead of - 8-14. - - tweak: The Damage Converter virology symptom will now do toxin damage for each - limb healed. - MrStonedOne: - - tweak: Centcom has improved the the tesla generator! The generated tesla energy - balls should now be more stable! Growing quicker and dissipating slower. It - seems to also move around a touch more but that shouldn't be an issue as the - the tesla escaping containment is unheard of! -2016-03-10: - Joan: - - rscadd: The blob can now be shocked by the tesla. - - tweak: Strong blobs are now much more resistant to brute damage. - - wip: Tweaks blob reagents; - - rscdel: Removes Ripping Tendrils. - - rscdel: Removes Draining Spikes. - - tweak: Cryogenic Liquid does less burn damage. - - tweak: Pressurized Slime does less brute damage. - - tweak: Reactive Gelatin now has a lower minimum damage. - - tweak: Poisonous Strands applies its damage over a longer period of time. - - tweak: Sporing Pods now does much less damage, and is less likely to produce spores - when killed. - - tweak: Regenerative Materia, Hallucinogenic Nectar, and Envenomed Filaments do - less toxin damage. - - rscadd: Energized Fibers no longer heals when hit with stamina damage, and is - instead immune to the tesla. - - rscadd: Boiling Oil now takes damage from extinguisher blasts. Boiling Oil blobbernauts, - however, do not. - - tweak: Replicating Foam now takes increased brute damage and when expanding from - damage, will not expand again. - - tweak: Flammable Goo takes 50% increased burn damage, from 30%. - - tweak: Explosive Lattice now takes much higher damage from fire, flashbangs, and - the tesla. - - experiment: Electromagnetic Web takes full brute damage, lasers will now one-hit - normal blobs, and the death EMP is smaller. -2016-03-12: - Joan: - - bugfix: Blobbernauts and blob spores can now move near blob tiles in no gravity. - - tweak: Boiling Oil does slightly more damage and takes slightly less damage when - extinguished. - - rscadd: Flammable Goo now applies firestacks to targets, but does not ignite them. - Jordie0608: - - rscadd: Show Server Revision will now tell you if a PR is test merged currently. - PKPenguin321: - - rscadd: Added reinforced bolas. They do a very short stun in addition to normal - functions, and take twice as long to break out of when compared to regular bolas. - - tweak: The traitor's Throwing Star Box has been made into the Throwing Weapons - Box. It now contains two reinforced bolas in addition to its old contents. It - also costs 5 TCs, down from 6. - tkdrg: - - tweak: The detective's revolver now takes three full seconds to reload. - xxalpha: - - rscadd: Detective can be a Traitor/Double Agent. - - tweak: Removed Detective's access to security lockers and secbots. - - tweak: Removed bowman's headset from Detective's locker. - - tweak: Box Brig Security Office and Locker Room require a higher access level - (Security Officer level). -2016-03-13: - Dorsisdwarf: - - rscadd: 'Adds Robo-Doctor board (The Hippocratic Oath: Now on your beepbot)' - - rscadd: Adds Reporter board (The truth will set ye free (termsandconditionsmayapply)) - - rscadd: Adds Live and Let Live board - - rscadd: Adds Thermodynamics as a dangerous board. - Impisi: - - tweak: Improvised shells now deal more far more damage but are more inaccurate. - - tweak: Overloaded shells now require liquid plasma in addition to black powder. - Shells now fire explosive pellets that are good at hurting you and everything - in front of you. - Joan: - - rscdel: Blob gamemode blobs will no longer burst from people. - - rscadd: Instead, the blob gamemode spawns overminds, which can place their blob - core underneath them in an unobserved area. - - rscadd: The overminds can, until they have placed a blob core, move to any non-space, - non-shuttle tile. - - rscadd: If the overminds fail to place a blob core within a time limit, it will - be automatically placed for them at a random blob spawnpoint. - - tweak: The time before the overmind automatically places the core is slightly - lower than the previous average time it'd take a blob to burst. -2016-03-15: - Cuboos: - - soundadd: Modded the current door sound and added a few new ones, unique sound - for closing, bolting up/down and a nifty denied sound. - Isratosh: - - rscadd: Security flashlights can now be attached to the bulletproof helmets. - Joan: - - tweak: Resource blobs produce resources for their overmind slightly slower for - each resource blob their overmind has. - - rscadd: Blob overminds get one free chemical reroll. - - rscadd: Blob overminds can no longer place resource and factory blobs out of range - of cores and nodes, unless they Toggle Node Requirement off. It is on by default. - - rscadd: Blob UI buttons now have tooltips. - - tweak: Cores and nodes will expand slightly slower. - - tweak: Blob Chemicals no longer trigger effects on dead mobs. - - tweak: Shifting Fragments has a lower chance to move shields with normal expansion - and will no longer shift blobs to the location of a dying blob. - - tweak: Flammable Goo no longer applies fire to tiles with blobs. - - tweak: Electromagnetic Web has a slightly higher EMP range. - Kor: - - rscadd: Hunger was accidentally disabled sometime back in October 2015. We finally - noticed and fixed it. - Kor (And all the lovely maintainers and spriters who helped me along the way): - - rscadd: Adds a new, lava themed planet to mine on,with randomly generated rivers - of lava and islands of volcanic rock. This mine is used on Box and Metastation. - Other mappers may enable it at their discretion. - - rscadd: Added deadly ash storms to mining. - - rscadd: Added slightly deadlier variants of mining mobs to lavaland, with sprites - done by my girlfriend. - - rscadd: Added portable survival capsules to mining equipment lockers. Don't forget - these, or you might get caught out by a storm. You may purchase more at the - venders. - - rscadd: Added randomly loaded ruins to mining. These maps contain new and unique - items not seen elsewhere in thegame. There are around a dozen of them added - with the "release" of lavaland, though I plan for many more. - - rscadd: Some ruins contain sleepers which allow you to spawn as various roles, - such as survivors of a shuttle crash stranded in the wilderness. You can find - these sleepers in the orbit list. - - rscadd: You can now fly the abandoned white ship to lavaland. - LanCartwright: - - tweak: Choking now deals damage based on virus' Stage speed and virus Stealth. - - tweak: Fever heats the body based on Transmittability and Stage speed. - - tweak: Spontaneous Combustion now adjusts firestacks based on stage speed minus - Stealth. - - tweak: Necrotizing Fasciitis now deals damage based on lower Stealth values. - - tweak: Toxic Filter now heals based on Stage speed. - - tweak: Deoxyribonucleic Acid Restoration now heals brain damage based on Stage - speed minus Stealth. - - tweak: Shivering now chills based on Stealth and Resistance. - - rscadd: Proc for the total stage speed of a virus' symptoms. - - rscadd: Proc for the total stealth of a virus' symptoms. - - rscadd: Proc for the total resistance of a virus' symptoms. - - rscadd: Proc for the total transmittance speed of a virus' symptoms. - MrStonedOne: - - rscdel: 'Lag has been removed from the following systems: mob life()/virus process, - machine/object/event processing, atmos, deletion subsystem, lighting, explosions, - singularity''s eat(), timers, wall smoothing, mass var edit, mass proc calls(and - all of sdql2), map loader, and the away mission loader.' - - rscdel: Removed limit on bomb cap of 32,64,128, it can now go to the MOON. - - tweak: Minimap generation is now a config option that defaults to off so coders - don't have to wait for it to generate to test their code, server operators should - note that they need to enable it on production servers that want minimap generation. - - wip: if you find any things that still lag, please report them to MrStonedOne - for lag removal. - - experiment: I'm gonna take this time to shill out that, Lummox JR, byond's only - dev, coded the tool that made this change possible, he lives off of byond membership - donations, if you like the lag removal, become a byond member or at least throw - 5 bucks byond's way for doing this. - - experiment: Feel free to ask for bomb cap removals when solo antag, but remember, - the later in the round it is, the more likely you'll get it. - PKPenguin321: - - rscadd: Scooters and skateboards have been added. - - rscadd: Use rods to make a scooter frame. From there, apply metal to make wheels, - creating a skateboard. Apply a few more rods to make a full scooter. You can - also use tablecrafting to create them, their recipes can be found under the - Misc. category. - - rscadd: Each step of scooter deconstruction is performed with either a wrench - or a screwdriver, depending on the step. - xxalpha: - - rscadd: Scrubber clog event now ejects cockroaches. -2016-03-17: - CoreOverload: - - rscdel: The recent jetpacks nerf is finally reverted. Turbo mode is dead and stabilization - is once again can be toggled on and off. - - rscadd: 'Added a new chest cyberimplant: implantable thrusters set. This implant - is a built-in jetpack that has no stabilization mode at all and can use gas - from environment (if 30+ kPa) or from internals. It can also use plasma from - plasma vessel organ, if you have one.' - Joan: - - tweak: Moved the security hud's icons down slightly to allow it to coexist with - medical and antag huds. - Shadowlight213: - - rscadd: HOG deity can now be heard by all of its followers! - - tweak: The prophet no longer needs to wear his hat to speak with his deity. - - rscadd: The prophet's hat and staff have a new functionality! Use the staff inhand - to reveal hidden structures. - - rscadd: Deities can now hide their structures from view! Pretend to be a book - club when sec bursts in. experiment:Only enemy prophets or your own deity can - reveal these structures and they are disabled when hidden. -2016-03-19: - Joan: - - imageadd: Xray lasers now have unique inhands. - - imageadd: Xray lasers have been recolored to match R&D equipment. - Zombehz: - - rscadd: Adds 'chicken' nuggets* in 4 shapes, including regular, star, corgi, and - lizard. it. They are made with one cutlet of meat. -2016-03-20: - Joan: - - rscadd: Nar-Sie will now corrupt airlocks, tables, windows, and windoors. - - rscadd: Corrupted airlocks have no access restrictions. - - tweak: Nar-Sie no longer causes destruction while moving around in favor of additional - corruption. - - tweak: The surplus crate is less likely to give you eight space suits. - - bugfix: Nukeops can once again buy noslips. The nuke op magboots are still better - than noslips, buy them instead. - Kor: - - rscadd: Runtime now has a chance to spawn with a more classic look. - - rscadd: Killing a necropolis tendril will now drop a chest full of spooky loot. - - rscadd: Killing a necropolis tendril will now cause the ground to collapse around - it after 5 seconds. -2016-03-21: - CoreOverload: - - rscadd: You can now construct and deconstruct wall mounted flashes by using a - wrench on empty wall flash. A crate with four linked "flash frame - flash controller" - pairs is added to cargo. - Joan: - - rscadd: Explosive Holoparasites now have a 33% chance to explosively teleport - attacked targets, doing damage to everyone near the target's appearance point. - - tweak: Explosive Holoparasite bombs can now detonate when living mobs bump them. - - rscadd: Adds lightning holoparasites, which have medium damage resist, a weak - attack, have a lightning chain to their summoner, and apply lightning chains - when attacking targets. - - rscadd: Lightning chains shock everyone nearby, doing low burn damage. This is - excluding the parasite and summoner; chains will shock enemies they're attached - to. - - tweak: Holoparasites can now smash tables and lockers. - PKPenguin321 && !JJRcop: - - rscadd: Milk, which is good for your bones, is now extra beneficial to species - that are mostly comprised of bones. - kingofkosmos: - - rscdel: The backpack close-button has got a visual overhaul. - - rscadd: All storage items can be closed by clicking on them again. -2016-03-23: - Iamgoofball: - - rscadd: Cargo now works off of Credits. - - rscadd: Cargo now plays the Stock Market. - - rscadd: Buy Low, Sell High -2016-03-24: - Iamgoofball: - - rscadd: CLF3 now melts, burns, and destroys floors a lot more often, as it should - be. - - rscadd: CLF3 now makes 3x3 fireballs on tiles it touches now, instead of a single - fireball. - Joan: - - tweak: Lightning Holoparasites will actually shock relatively often instead of - 'sometimes, maybe, if you're really lucky' - PKPenguin321: - - tweak: Sand now fits in your pockets - - rscadd: Sand can now be thrown into people's eyes, doing slight stamina damage, - making their vision slightly blurry, and making them stumble when they walk - for a short time. - RemieRichards: - - rscadd: BEES - - rscadd: Hydroponics can now manage bee colonies, bees produce honeycombs that - can be grinded to obtain honey, a decent nutriment+healing chemical - - rscadd: Hydroponics can inject a queen bee with a syringe of a reagent to alter - her DNA to match that reagent, meaning all honeycombs produced will contain - that reagent in small amounts - - rscadd: Bees with reagents will attack with that reagent - Xhuis: - - experiment: Alcohol has received multiple tweaks. - - tweak: Drunkenness will now be displayed on examine as long as the target's face - is not hidden, ranging from a slight flush to being a completely drunken wreck. - This also helps to measure alcohol poisoning, although the appearance will remain - for thirty seconds after the alcohol leaves the imbiber's bloodstream. - - tweak: Alcohol poisoning now has different effects. It begins with standard things - such as confusion, dizziness, and slurring, but eventually escalates to constant - vomiting, blacking out, and toxin damage. - - tweak: Drinks now have a wide variety of alcoholism. Grog is barely a drink whatsoever, - for instance, but Manly Dorf will completely floor you with too much consumption. - Note that drinks based off of whiskey and vodka are the hardest, whereas beer - and wine are the softest. - - tweak: The speed of alcohol poisoning has been slightly reduced. - - rscadd: Some drinks have received unique effects. Experiment! - - rscadd: A new base alcohol joins the lineup! Absinthe has been added, and is very - strong. - - rscadd: Whiskey Sour, made with Whiskey, Lemon Juice, and Sugar, simply expands - the existing whiskey-based lineup. - - rscadd: Fetching Fizz, made with Nuka-Cola and Iron, will pull all nearby ores - in the direction of the imbiber. - - rscadd: Hearty Punch, made with Brave Bull, Syndicate Bomb, and Absinthe, will - provide extreme healing in critical condition. - - rscadd: Bacchus' Blessing, made with four of the most powerful alcohols on the - station, is over three times stronger than any other alcohol on the station. - Consume in small amounts or risk death. -2016-03-26: - CPTANT: - - tweak: Nanotrasen found a new taser supplier. The new tasers hold 12 shots, down - people with 2 hits and hybrid tasers now have a light laser attached. - CoreOverload: - - tweak: Sorting junctions now support multiple sorting tags. - Fox McCloud: - - bugfix: Fixes Shadowlings not being spaceproof to pressure - - bugfix: Fixes being able to receive multiple spells as a Lesser Shadowling - Joan: - - rscadd: Adds assassin holoparasites, which do low damage and take full damage, - but can go invisible, causing their next attack to do massive damage and ignore - armor. - - rscadd: Assassin holoparasite stealth will be broken by attacking or taking damage, - which will briefly prevent the parasite from recalling. - - rscadd: Traitor holoparasite injectors include this parasite type. - Kor: - - rscadd: There are a couple new lavaland ruins, including one with a new ghost - role. - PKPenguin321: - - tweak: The RD's reactive teleport armor now has a cooldown between teleports. - EMPing it will cause it to shut down and have a longer cooldown applied. - - imageadd: Bolas, both reinforced and regular, now have newer, sexier sprites. -2016-03-29: - Bawhoppen: - - tweak: Bruisepacks, ointment, and gauze now will apply significanty faster. - - rscdel: SWAT crates no longer contain combat knives. - - rscadd: SWAT crates now contain combat gloves. - - rscadd: Combat knives now can be ordered in their own crate. - Iamsaltball: - - rscadd: GRAB SUPER NERFED - - rscadd: IT'S WAY EASIER TO ESCAPE GRABS NOW - - rscadd: IT TAKES WAY LONGER TO UPGRADE GRABS NOW - - rscadd: 'YOU CAN ACTUALLY FUCKING ESCAPE GRABS NOW TOO #WOW #WHOA' - - rscadd: GRAB TEXT IS ALL BIG BOLD AND RED MUCH LIKE YOUR MOM LAST NIGHT - - experiment: GIT GUDDERS GO FUCK YOURSELVES YOU CAN'T GET GOOD AGAINST "LOL INSTANT - PERMASTUN THAT ISN'T OBVIOUS IN CHAT LIKE THE REST OF THE STUNS" - Joan: - - tweak: Ghost revival/body creation alerts now use the ghost's hud style. - - imageadd: Support holoparasites now have a healing effect with their color when - successfully healing a target. - - tweak: Ranged holoparasite projectiles now take on the color of the holoparasite. - - bugfix: Holoparasite communication(holo->summoner) now sends the message to all - holoparasites the summoner has. - - bugfix: If you have multiple holoparasites for some reason, Reset Guardian allows - you to choose which to reset. - - tweak: Resetting a holoparasite also resets its color and name, to make it more - obvious it's a new player. - - rscadd: Holoparasites can now see their summoner's health and various ability - cooldowns from the status panel. - - rscadd: Blobbernauts are now alerted when their factory is destroyed. - KazeEspada: - - bugfix: Blob Mobs no longer swap with other mobs. - RemieRichards: - - rscadd: Added the ability to make Apiaries and Honey frames with wood - - rscadd: Added the ability to make Royal Bee Jelly from 10 Mutagen and 40 Honey - - rscadd: Added the ability to make more Queen Bees from Royal Bee Jelly by using - it on an existing Queen, to split her into two Queens - - tweak: Made homeless bees more obvious - - bugfix: Fixed a typo that made almost all bees homeless, severely reducing the - odds of getting honeycomb - - tweak: Made bee progress reports (50% towards new honeycomb, etc.) always show, - even if it's 0% - - tweak: Made some feedback text more obvious - - bugfix: Fixed being able to duplicate the bee holder object, this was not exploity, - just weird - - bugfix: Fixed being able to put two (or more) queens in the same apiary - - bugfix: Fixed some runtimes from hydro code assuming a plant gene exists - - bugfix: Fixed runtime when you use a honeycomb in your hand - - tweak: It now takes and uses 5u of a reagent to give a bee that reagent - - rscdel: Removed unused icon file - Ricotez: - - imageadd: The default white ghost form now has directional sprites. - - rscadd: The default white ghost form now also has (your) hair! Here's how it works. - - experiment: If you ghost from a body, you'll get the hair from that body. If it - has hair. - - experiment: If you hit Observe, you'll get the hair from the character you had - active in your setup window. If they had hair. - - wip: This only works with the default white ghost form right now (because the - other forms have the wrong shape or lack directional sprites), and with human - bodies since they're the only ones that have hair. Sorry lizards and plasmamen! - You'll get your turn next time. - - rscadd: A new preference called Ghost Accessories. This lets you configure if - you want your ghost sprite to show both hair and directional sprites, only directional - sprites or just use its original default version without directional sprites. - - rscadd: 'A new preference called Ghosts of Others. This preference is clientside - and lets you configure how other ghosts appear to you: as their own setting, - as the form they chose but without any hair or directional sprites, or as the - simple white ghost sprite if you''re sick of those premium users with their - rainbow ghosts.' - - experiment: The layout of the ghost preference buttons has slightly changed. The - old Choose Ghost Form and Choose Ghost Orbit are now a part of Ghost Customization, - which also contains the new Ghost Accessories button. Clicking Ghost Customization - will send you directly to Ghost Accessories if you don't have premium. The Preferences - tab now also contains the Ghost Display button, which lets you configure how - other ghosts appear to you. - - bugfix: Fixed a bug where the toggles for Ghost Accessories and Ghosts of Others - in the Preferences menu wouldn't save your preference update to your save file. - - bugfix: Renamed the "Ghost Display Settings" preference toggle button to "Ghosts - of Others", so it fits with the name the preference has everywhere else. - TehZombehz: - - rscadd: Paper sacks are now craftable by tablecrafting with 5 sheets of paper. - - rscadd: 'Comes in 5 different designs: Use a pen on a paper sack to change the - design.' - - rscadd: Certain paper sack designs can be modified with a sharp object to craft - a (creepy) paper sack hat. - Xhuis: - - bugfix: Portal storm messages now use the station name rather than the world name. - - bugfix: Shadowlings can no longer glare while shadow walking. - - bugfix: Progress bars are now properly shown when reloading revolvers. - - bugfix: Cyborgs and AIs are no longer knocked out when being stuffed into lockers. - - bugfix: Plasmamen can no longer be the patient zero of the space retrovirus. - - bugfix: Cyborgs and AIs now properly display death messages. - - bugfix: Revenants can no longer be closed into lockers. - - bugfix: Airlocks no longer play sounds or flash lights when denying access if - the airlock has no power. - - bugfix: Job spawn icons in mapping have been fixed. - - bugfix: Gibtonite's disarm message no longer include the outside viewer. - - bugfix: Cult walls and girders are now more streamlined and can be built with - runed metal. - - bugfix: Positronic brains and MMIs can no longer see ghosts. - - rscadd: When someone is turned into a statue, the statue now appears as a greyscale - version of them. - - rscadd: Returning from a statue to a human now knocks you down. - - rscdel: Flesh to Stone no longer works on dead mobs. - - bugfix: Wall-mounted flasher crates now have the proper price. - - bugfix: Wall-mounted flasher frames now have icons. - - bugfix: Upgraded resonators now have an inhand sprite. -2016-03-30: - Coiax: - - rscadd: Geiger counters can now be stored in the suit storage of radiation suits - RemieRichards: - - bugfix: fixes shift-clicking action buttons not instantly resetting their location. - (I'm only making a changelog for this because apparently barely noone even knows - you can move the buttons, let alone reset them...) - TehZombehz: - - rscadd: Honey buns and honey nut bars are now craftable using honey. - - tweak: Brewing mead now requires actual honey. -2016-04-01: - Erwgd: - - bugfix: Weed Killer bottles and Pest Killer bottles now contain 50 units. - - rscadd: The biogenerator can now make empty bottles and black pepper. - Isratosh: - - rscadd: Added an admin jump button to explosion logs. - Joan: - - rscadd: Traitors can now buy charger holoparasites. - - rscadd: Charger holoparasites move extremely fast, do medium damage, and can charge - at a location, damaging the first target it hits and forcing them to drop any - items they're holding. - Kor: - - rscadd: Mechas are now storm proof - - rscadd: Kinetic Accelerators now require two hands to fire, but are free standard - gear for miners. - - rscadd: All mining scanners are now automatic, with the advanced version having - longer range. - - rscadd: The QM and HoP no longer have spare vouchers. - - rscadd: You can buy a pack of two survival capsules with your mining voucher. - - rscadd: Mining Bots will no longer cause friendly fire incidents. They'll hold - fire if you are between them and their target - - rscadd: There are now four different mining drone upgrades available in the vendor. - - rscadd: Resonators can now have more fields and deal more melee damage. - - rscadd: Lavaland miners now have explorer's suits instead of hardsuits. Sprites - by Ausops. - - rscadd: You can now butcher Goliath's for their meat. It cooks well in lava. - Shadowlight213: - - rscadd: Clients now have a volume preference for admin-played sounds. - TehZombehz: - - rscadd: The 'Plasteel Chef' program has provided station chefs with complimentary - ingredient packages. There are several package themes, and chefs are provided - a random package on arrival. - coiax: - - rscadd: Free Golems on Lavaland have been naming their newborn siblings with a - wider range of geology terms -2016-04-02: - Eaglendia: - - rscadd: Central Command has released a new, more functional run of their most - stylish fashion line. - - rscadd: Head of Staff cloaks can now hold specific items - the antique laser gun - for the Captain, the replica energy gun for the Head of Security, the hypospray - for the Chief Medical Officer, the Hand Teleporter or RPED for the Research - Director, and the RCD or RPD for the Chief Engineer. -2016-04-03: - Erwgd: - - rscadd: Our valued colleagues in the security department are reminded to search - boots for hidden items (such as knives or syringes) as part of standard search - procedures. Alt-click a pair of boots to remove any hidden items. - Isratosh: - - bugfix: Fixed rudimentary transform not working properly on ghosts with minds. - - rscadd: Admin logs for bluespace capsules not activated on the mining Z level. -2016-04-04: - TechnoAlchemisto: - - rscadd: The recipes for some Trekchems are now back in the game - - rscadd: Bicaridine can be made with carbon, oxygen, and sugar. - - rscadd: Kelotane can be made with silicon and carbon. - - rscadd: Antitoxin can be made with nitrogen, silicon, and potassium - - rscadd: tricordrazine can be made by combining all three. -2016-04-05: - Erwgd: - - rscadd: Utility belts of all kinds can now accept gloves. Most belts, except janitorial - belts, may now also hold station bounced radios. - - rscadd: Hazard vests and most jackets can carry a station bounced radio as well. - Labcoats can be used to store a handheld crew monitor. - - rscadd: The autolathe can now make toolboxes. - Joan: - - rscadd: Adds protector holoparasites to traitor holoparasite injectors. - - rscadd: Protector holoparasites cause the summoner to teleport to them when out - of range, instead of the other way around. - - rscadd: Protector holoparasites have two modes; Combat, where they do and take - medium damage, and Protection, where they do and take almost no damage, but - move slightly slower. - - tweak: Explosive Holoparasites no longer teleport non-mobs when attacking, but - have a higher chance to teleport mobs. - - rscdel: Explosive Holoparasite bombs no longer trigger on their summoner or any - other parasites their summoner has. - - bugfix: Ranged Holoparasites no longer have nightvision active by default. It - can still be toggled on. - - tweak: Ranged Holoparasite snares no longer alert if the crossing mob is their - summoner or one of the parasites their summoner has. - - tweak: Ranged Holoparasites are slightly less visible in scout mode. - - tweak: Standard Holoparasites attack 20% faster than other parasite types. - - rscdel: Support Holoparasite beacons no longer require safe atmospheric conditions, - but the warp channel takes slightly longer, and is preceded with a visible message. - - tweak: Zombies can no longer destroy more than one airlock at a time. - - rscadd: The mining station has been updated. - MrStonedOne: - - bugfix: Centcom is glad to announce the end of sending workers to our control - group for space exposure testing, a fake station in "space" that noticeably - had air in "space". - TechnoAlchemisto: - - tweak: Detective scanners are now smaller. - - tweak: Pickaxes now fit in explorer suit exosuit slots. - bgobandit: - - rscadd: Alt-clicking a fire extinguisher cabinet opens and closes it. That is - all. -2016-04-06: - CoreOverload: - - rscadd: You can now put slimes in stasis by exposing them to room temp CO2. Useful - for both fighting the slimes and safely storing them. - Erwgd: - - rscadd: The autolathe can now make hydroponics tools! Access the design routines - in the Misc. category of the machine. - LanCartwright: - - tweak: Custom viruses with stealth values of 3 or above are now invisible on the - PANDEMIC and no longer visible on health huds. - MrStonedOne: - - bugfix: Centcom is happy to report that our single sided windows and our windoors - should once again create an airtight seal. - bgobandit: - - rscadd: Honk! Nanotrasen's clowning and development department has invented the - clown megaphone, standard in all clowning loadouts! Honk honk! -2016-04-07: - Kor: - - rscadd: The Laser Cannon in RD has been replaced with the Accelerator Laser Cannon. - Try it out! - - rscadd: Mechas now have armour facings. Attacking the front will deal far less - damage, while attacking the back will deal massive bonus damage. - - rscadd: EMPs now deal far less damage/drain to mechas. - Kor and Ausops: - - rscadd: Survival pod interiors have been redone. - - rscadd: Survival pods now contain a stationary GPS computer. - - rscadd: You can now toggle your GPS off with alt+click. - bgobandit: - - rscadd: Due to budget cuts, Nanotrasen is no longer utilizing copy-protected paper - for its classified documents. Fortunately, our world-class security team has - always prevented any thefts or photocopies from being made! - - rscadd: Secret documents can be photocopied. If you have an objective to steal - any set of documents, a photocopy will be accepted. If you must steal red or - blue documents, a photocopy will NOT be accepted. Enterprising traitors can - forge the red/blue seal with a crayon to take advantage of this. -2016-04-09: - GunHog: - - rscadd: Aliens may now force open unbolted, unwelded airlocks. Unpowered airlocks - open faster than powered ones. Has a cool sound provided by @Ultimate-Chimera! - - tweak: Alien Drone health increased to 125 hp. - - tweak: Alien drone is now faster! - - tweak: Alien egg and larva maturation times halved. - - tweak: Resin membrane health increased to 160 hp. - - rscadd: Aliens may now open firelocks. - - rscadd: Aliens may now unweld scrubbers and vents. (From the outside!) - - tweak: Droppers no longer affect aliens. - Joan: - - rscdel: You can no longer drop survival capsules on top of dense objects, such - as the windows in the emergency shuttle. You can still drop them on non-dense - objects and mobs, however. - - tweak: Swarmers can now deconstruct objects simply by clicking. - - rscadd: Swarmers can still teleport mobs away via ctrl-click. - - bugfix: Emps will now properly damage swarmers. - Kor: - - rscadd: Added wisp lanterns to necropolis chests. - - rscadd: Added red/blue cube pairs to necropolis chests. - - rscadd: Added meat hooks to necropolis chests. - - rscadd: Added immortality talismans to necropolis chests. - - rscadd: Added paradox bags to necropolis chests. - - rscadd: Ripley drills work again. Go tear up lavaland. - PKPenguin321: - - tweak: Goofball's grab nerf has been reverted. - TechnoAlchemisto: - - tweak: Pickaxe upgrades are now better. - coiax: - - tweak: Efficiency Station Testing Lab now has a Drone Shell Dispenser - - tweak: Fixed an issue with a door on the Golem Ship - - rscadd: The unfathomable entity Carp'sie has blessed vir followers with mysterious - carp guardians. - - rscadd: Nanotrasen Cyborgs are now able to empty ore boxes without human assistance - - rscadd: Ore boxes are now craftable with 4 planks of wood - - tweak: Ore boxes now drop their contents when destroyed, or dismantled with a - crowbar - coiax, bobdobbington, Core0verload: - - rscadd: An experimental plant DNA manipulator, based on machinery recovered from - ancient seed vaults, has been installed in the Botany department. -2016-04-11: - Joan: - - rscadd: Blob cores will take slight brute damage from explosions. - RandomMarine: - - rscadd: Additional luxuries have been added to golem ships. Including new rewards. - Praise be to The Liberator! - - rscdel: However, jaunters are no longer easily obtained by free golems. - RemieRichards: - - rscadd: The Station Blueprints now display the piping/wiring and some of the machinery - the station started with, to assist in repairs - coiax: - - rscadd: Emagging the cargo console also unlocks regular contraband, in addition - to syndicate gear - - rscadd: A working drone shell dispenser is now on display in MetaStation's museum, - displaying the virtue of the tireless little workers! - - rscadd: Dreamstation now has a drone shell dispenser in the Toxins Launch Room -2016-04-12: - Incoming5643: - - rscadd: Leading scientists have finally proven that humans (and xenos) in fact - have tongues in their mouths. - - rscadd: Swapping out tongues allows the various races to change their speech impediments. - Putting a xeno tongue in someone allows them to make the hissing sound like - a xeno whenever they speak. - - rscdel: There are no erp mechanics tied to this feature. - - experiment: Remember that tongues are stored in the MOUTH, selecting the head - isn't good enough. - Kor: - - rscadd: Ash walker starting gear has been rebalanced. - - rscadd: Ash walkers can no longer use guns. - TrustyGun: - - rscadd: After carefully investing in the market, the Captain had enough money - to replace his silver flask with a golden one! - - rscadd: The Detective is now bringing his personalized flask to work, due to the - grim work he has to do. - - rscadd: The Booze-O-Mat now stocks 3 flasks. -2016-04-16: - Bawhoppen: - - tweak: Cryo is no longer god-awful. - CoreOverload: - - rscadd: A lot of items are now exportable in cargo. - - rscadd: Use Export Scanner to check any item's export value. - Erwgd: - - rscadd: Forks, bowls, drinking glasses, shot glasses and shakers can now be made - and recycled in the autolathe! Access the designs in the new 'Dinnerware' category. - - tweak: Kitchen knives have been moved to the Dinnerware category of the autolathe. - - rscadd: Butcher's cleavers can now be made in a hacked autolathe. - Fox McCloud: - - rscadd: Slime batteries now self-recharge. - - rscadd: Adds transference potion. A potion that allows the user to transfer their - consciousness to a simple mob. - - rscadd: Adds rainbow slime core reaction that generates a consciousness transference - potion when injected with blood. - Iamgoofball, Lati, Geo_Jerkal, Tanquetsunami25: - - rscadd: Lati requested that the Slime Processor will now automatically scoop up - any dead slimes into itself for processing. - - rscadd: Geo_Jerkal requested that you be able to mix Arnold Palmers with Tea and - Lemon Juice. - - rscadd: Tanquetsunami25 requested that cyborg be able to boop. - Incoming5643: - - rscdel: Removed the horrible meme skeletons, please don't sue us. - Kor: - - rscadd: Adrenals, no slips, surplus crates and SUHTANDOS now have minimum population - requirements before they can be purchased. - KorPhaeron: - - rscadd: You now need to butcher goliaths and watchers on lavaland to receive their - loot. Use the combat knives to do so. - Lati: - - rscadd: Custom floor tiles can now be added to floorbots. They will start replacing - other tiles with these tiles if the option is toggled on. - coiax: - - rscadd: Boxstation, not to be outdone by all the other competing station designs, - has installed a drone shell dispenser in the Testing Lab, which makes automated - drones to help fix the station. - - rscadd: Toy fans, rejoyce! The famous skeleton brothers from the beloved game - Belowyarn now have toys that you can win from the arcade machines! - - rscadd: Airlock painters can be printed at your local autolathe - - rscadd: Please do not attempt suicide with the airlock painter or the medical - wrench. - - rscadd: Metastation now has a plant DNA manipulator in Botany. - - rscadd: Using the fire extinguisher on yourself or others while in HELP intent - will spray you or them, rather than beat their probably flaming body with a - metal object. - - tweak: Alt-clicking extinguishers to empty them now wets the floor underneath - them. - lordpidey: - - rscadd: Meth labs can now blow up if you don't purify the ingredients or over-heat - the end product. - nullbear: - - rscadd: Added attack verbs for heart and tongue organs - - tweak: Maximum output of air pumps has been raised. -2016-04-18: - Joan: - - rscdel: Crates are now dense even when open. - - rscadd: You can now climb onto crates in the same way as table and sandbags, though - climbing onto crates is very fast and does not stun you. - - wip: You can walk on crates, provided both are closed/open or the crate you're - on is closed. - - rscdel: You can't close or open a crate if there's a large mob on top of it. - - rscadd: Stuffing items into a closet or crate is now instant and does not close - the closet or crate. Stuffing mobs into a closet or crate still takes time and - closes the closet/crate in question. - - imageadd: Crowbars and wirecutters have new inhand sprites. Crowbars can now be - distinguished from wrenches in-hand. - RandomMarine: - - tweak: Cloth items removed from biogenerator. Instead, it can create stacking - cloth that crafts those items. - - rscadd: In addition, cloth can be used to create grey jumpsuits, backpacks, dufflebags, - bio bags, black shoes, bedsheets, and bandages. - - tweak: Bedsheets now tear into cloth instead of directly into bandages. - Shadowlight213: - - tweak: AI will be notified when one of their cyborgs is detonated. - coiax: - - bugfix: Fixed slime grinders not sucking up more than one slime - - rscadd: Drones now start with a spacious dufflebag full of tools, so they will - stop stealing the captain's - - bugfix: Fixed issues with drones wearing chameleon headgear. - - rscadd: Added admin-only "snowflake drone" (also known as drone camogear) headgear. - nullbear: - - bugfix: Fixes air canisters being silent when bashed. -2016-04-20: - Erwgd: - - rscadd: The autolathe can now make trays. - Fox McCloud: - - bugfix: Fixes abductor vests having no cooldown between uses - Kor: - - rscadd: You can now craft boats and oars out of goliath hides. These boats can - move in lava. - - rscadd: Added a spooky, upgraded boat to necropolis chests. - coiax: - - tweak: Slime grinders now cease suction of new slimes while grinding - coiax, Joan: - - rscadd: Drone dufflebags now have their own sprite. - kevinz000: - - rscadd: 'Admin Detection Multitool: A multitool that shows when administrators - are watching you! Now you can grief in safety!' - - tweak: Syndicate R&D scientists have significantly increased the range of their - "AI detection multitools", making them turn yellow when an AI's tracking is - near, but not on you just yet! -2016-04-21: - Kor: - - rscadd: Mechas can now toggle strafing mode. -2016-04-22: - Bawhoppen: - - rscadd: Security belts can now hold any type of grenade. This includes barrier - grenades. - - rscadd: Janitorial belts are now able to store chem grenades. - - rscadd: Military belts have been given a size upgrade, so they can now hold larger - items. - - rscadd: Bandoliers have been given a buff and now can hold a much larger amount - of ammunition. - nullbear: - - bugfix: xenobio console is deconstructable again. - - tweak: syndibomb recipe calls for any matter bin, scaling effectiveness with tier. -2016-04-23: - Joan: - - bugfix: Aliens can now open crates and lockers. - - bugfix: Aliens and monkeys can now climb climbable objects, such as crates and - sandbags. - - rscadd: Aliens climb very, very fast. - Kor: - - rscadd: Running HE pipes over lava will now heat the gas inside. - - rscadd: Alt+clicking on your mecha (while inside it) will toggle strafing mode. - Mercenaryblue: - - rscadd: Allowed all corgis to wear red wizard hats. - TechnoAlchemisto: - - rscadd: Goliaths now drop bones, and Watchers drop sinews. - - rscadd: You can craft primitive gear from bone and sinew. - coiax: - - bugfix: Non-humans are now able to interact with bee boxes. -2016-04-25: - Joan: - - bugfix: You can once again hit a closet or crate with an item to open it. - Kor Razharas: - - rscadd: Adds support for autoclicking. - - rscadd: The Shock Revolver has been added to RnD. - - rscadd: The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick - to fire as you hold down the mouse. - - rscadd: The Research Director now starts with a box of firing pins. - - rscadd: The SABR and Stun Revolver recipes have been removed from RnD - coiax: - - rscadd: Laughter demons are like slaughter demons, but they tickle people to death - - tweak: Slaughter demons are no longer able to cast spells while phased. - - tweak: Wizards can now speak while ethereal, but still cannot cast spells while - ethereal. - - rscadd: 'Centcom''s "drone expert" reports that drones vision filters have been - upgraded to include the option of making all beings appear as harmless animals. - info: As always, all drone filters are togglable.' - - rscadd: As a sign of friendship between the Free Golems and Centcom, they have - modified Centcom's jaunter to be worn around a user's waist, which will save - them from falling to their death in a chasm. - - experiment: The Golems warn that these modifications have created a risk of accidental - activation when exposed to heavy electromagnetic fields. - - tweak: Renamed hivelord stabilizer to stabilizing serum. - - rscadd: Centcom regret to inform you that new instabilities with nearby gas giants - are causing exospheric bubbles to affect the telecommunications processors. - Please contact your supervisor for further instructions. - - rscadd: The Janitor's Union has mandated additional features to station light - replacer devices. - - rscadd: The light replacer now can be used on the floor to replace the bulbs of - any lights on that tile. - - rscadd: The light replacer now eats replaced bulbs, and after a certain number - of bulb fragments (four) will recycle them into a new bulb. - - tweak: The description of the light replacer is now more informative. - - rscadd: Clown mask appearance toggle now has an action button. -2016-04-26: - Iamgoofball & Super Aggro Crag: - - tweak: Fluorosulfuric Acid now has doubled acid power. - - experiment: Fluorosulfuric Acid now does BONUS burn damage scaling on the time - it's been inside the consumer. - Joan: - - tweak: Blobbernauts now spawn at half health. - - tweak: Blobbernauts regeneration on blob is now 2.5 health per tick, from 5. - - tweak: Blobbernauts now cost 40 resources to produce, from 30. - - rscdel: Factories supporting blobbernauts do not spawn spores. - Lati: - - tweak: Syndicate bomb can be only delayed once by pulsing the delay wire. Time - gained from this is changed from 10 seconds to 30 seconds. - TechnoAlchemisto: - - tweak: Goliath plates can now be stacked. - phil235: - - rscadd: More structures and machines are now breakable and/or destroyable with - melee weapon. Additionally, Some structures and machines that are already breakable/destroyable - are now affected by more attack methods (gun projectiles, thrown items, melee - weapons, xeno/animal attacks, explosions). - - rscadd: Hitting any machine now always makes a sound. - - rscadd: You can hit closed closets/crates and doors by using an item on harm intent - (but it doesn't actually hurt them). - - rscadd: you can now burst filled water balloons with sharp items. - - bugfix: Wooden barricade drops wood when destroyed. - - bugfix: Slot machines with coins inside are deconstructable now. -2016-04-27: - TechnoAlchemisto: - - rscadd: Miners can now select explorer belts from the mining vendor using their - vouchers, or mining points. -2016-04-28: - Bawhoppen: - - tweak: Sandbags are no longer tablecrafted. Now you just put in sand (or ash) - by hand to make them. - - rscadd: Miners and Engis now get boxes of empty sandbags in their lockers. Miners - also get a few premade aswell. - - rscadd: You can now break sandstone down into normal sand. - Joan: - - rscadd: Attacking a blob with an analyzer will tell you what its chemical does, - its health, and a small fact about the blob analyzed. - - rscdel: 'NERFS:' - - tweak: Zombifying Feelers does less toxin damage. - - tweak: Adaptive Nexuses does slightly less brute damage. - - tweak: Replicating Foam does slightly less brute damage. - - tweak: Blob Sorium does slightly less brute damage. - - tweak: Blob Dark Matter does slightly less brute damage. - - tweak: Cyrogenic Liquid injects slightly less frost oil and ice and does slightly - less stamina damage. - - tweak: Pressurized Slime does less brute, oxygen, and stamina damage, and extinguishes - objects and people on turfs it wets. - - rscdel: Blob core strong blobs no longer give points when removed. - - wip: 'PROBABLY BUFFS:' - - tweak: Flammable Goo now does slightly more burn damage and applies more firestacks, - but applies fire to blob tiles that don't share its chemical. - - tweak: Energized Fibers does slightly more burn damage, slightly less stamina - damage, and now takes damage from EMPs. - - rscadd: 'BUFFS:' - - tweak: Boiling Oil does slightly more burn damage and applies more firestacks. - - tweak: Reactive Gelatin does slightly more damage on average. - - tweak: Penetrating Spines now also ignores bio resistance in addition to armor. - - tweak: Hallucinogenic Nectar causes more hallucinations. - - tweak: Normal strong blobs now refund 4 points when removed, from 2. - - rscadd: Charger holoparasites now play a sound when hitting a target, as well - as shaking the target's camera. - PKPenguin321: - - rscadd: The warden's locker now contains krav maga gloves. - TechnoAlchemisto: - - rscadd: You can now craft skull helmets from bones. - - rscadd: Syndicate bombs are now harder to detect -2016-04-29: - Bawhoppen: - - rscadd: Several lesser-used uplink's TC cost have been rebalanced. - - tweak: Steckhin down from 9TC to 7TC. - - tweak: Tactical medkit down from 9TC to 4TC. - - tweak: Syndicate magboots from 3TC to 2TC. - - tweak: Powersinks down from 10TC to 6TC. - - tweak: Stealth rad-laser down from 5TC to 3TC. - - tweak: Bundles have been updated accordingly. - Incoming5643: - - rscadd: The staff/wand of door creation can now also be used to open airlock doors. - - rscadd: Doors spawned by the staff/wand now start open. Keep this in mind the - next time you try to turn every wall on the escape shuttle into a door. - Robustin: - - rscdel: The Teleport Other, Veil, Imbue, Reveal, Disguise, Blood Drain, Timestop, - Stun, Deafen, Blind, Armaments, Construct Shell and Summon Tome runes are gone. - - rscadd: Disguise, Veil/Reveal, Construct Shell and Armaments are now talismans. - The Construction talisman requires 25 sheets of metal. - - rscadd: Cultists will now receive a warning when attempting to use emergency communion - or create the Nar-Sie rune - - rscadd: Cultists can now create talismans with a super-simple Talisman-Creation - rune. It takes about 10 seconds to invoke and will present a menu of all the - talisman choices available. Its as simple as tossing the paper on, clicking - the rune, and selecting your talisman. - - rscadd: Cultists now have a proc, "How to Play" that will give a basic explanation - of how to succeed as a cultist. - - rscadd: The new Talisman of Horror is a stealthy talisman that will cause hallucinations - in the victim. Great for undermining security without having to commit to murder - them in middle of the hall. - - rscadd: Creating the Summon Nar-Sie rune does takes slightly less time, but now - adds a 3x3 square of red barrier shields (60hp each) to prevent the rune-scriber - from being bumped by other idiots. This works in conjunction with the rune's - warning to give crew a chance to stop the summoning. Manifest ghost has a weaker - 1x1 shield to prevent bumps as well. - - rscadd: Talismans are now color-coded by their effect so you can easily organize - and deploy talismans. - - rscadd: You can now make colored paper in the washing machine using crayons or - stamps, honk. - - rscadd: The Electromagnetic Disruption rune will now scale with the number of - cultists invoking the rune. **A full 9-cultist invocation will EMP the entire - station!** - - rscadd: Armaments will now give the recipient a new cult bola. - - rscadd: The new Talisman of Shackling will apply handcuffs directly to the victim. - These cuffs will disappear when removed. - - tweak: Cult slur is a little less potent so victims might be able to squeeze in - a coherent word or two if you let them keep jabbering on the radio, stun talismans - now have less of a health cost and the stun is back to 10 seconds, from 9. - - tweak: Rune and Talisman names now give a much clearer idea of what they do. - - experiment: The following changes are courtesy of ChangelingRain - - rscadd: The Teleport rune now allows cultists to select which rune to teleport - to, and teleports everything on it. - - rscadd: Veil and Reveal are merged into Talisman of Veiling. Veiling has two uses, - the first use will hide and the second use will reveal. - - rscadd: New icons for the cult bola - - tweak: You can now attack fellow cultists with a Talisman of Arming to arm them - with robes and a sword. - - tweak: You can now only place one rune per tile. - - tweak: Ghosts are notified when a new manifest rune is created. - TechnoAlchemisto: - - rscadd: Sinew can now be fashioned into restraints. - coiax: - - tweak: Internals Crate now contains breath masks and small tanks. - - rscadd: Metal foam grenade box crate added for 1000 points - - rscadd: Added two Engineering Mesons to Engineering Gear Crate - - tweak: Engineering Gear now costs 1300 - - rscadd: Breach Shield Generator Crate added for 2500 points - - rscadd: Grounding Rod Crate added for 1700 points - - rscadd: PACMAN Generator Crate added for 2500 - - rscadd: Defibrillator Crate added for 2500 - - rscadd: Added more helmets to the Laser Tag Crate. - - rscadd: Nanotrasen Customs report that some wide band suppliers have been providing - "alternative" firing pins. Nanotrasen reminds all crewmembers that contraband - is contraband. - - rscadd: Contraband crates now appear visually similar to legitimate crates. - - bugfix: The cargo shuttle's normal transit time has been restored. - nullbear: - - rscadd: Adds a preference option, allowing players to toggle whether recipes with - no matching components should be hidden. -2016-04-30: - Joan: - - rscadd: Blobs attempting to attack the supermatter will instead be eaten by it. - - experiment: This doesn't mean throwing a supermatter shard at the blob is a good - idea; blobs attacking it will gradually damage it, eventually resulting in a - massive explosion, and it will not consume blobs if on a space turf. - - tweak: Hitting a locker or crate with an ID, PDA with ID, or wallet with ID will - try to toggle the lock instead of trying to open it. - - imageadd: Cable coils, cablecuffs, and zipties now all have properly colored inhands. - Kor: - - rscadd: Megafauna have been added to lavaland. - - rscadd: Ash Drakes have been spotted roaming the wastes. Use your GPS to track - their fiery signals. - - rscadd: You can now knock on the Necropolis door, but it's probably best that - you don't. - Mercenaryblue: - - rscadd: Adds a basic paper plane to the game. Fold paper with alt-clicking. - - rscadd: Paper planes are now fully compatible with every stamps on station. - bgobandit: - - rscadd: 'Nanotrasen has released Cards Against Spess! Visit your local library - for a copy. Warning: may cause breakage of the fourth wall.' -2016-05-02: - Joan: - - tweak: Blob spores spawn from factories 2 seconds faster, but the factory goes - on cooldown when any of its spores die. - - experiment: You can examine tomes, soulstones, and construct shells to see what - you can do with them. - - rscadd: Releasing a shade from a soulstone now allows you to reuse that soulstone - for capturing shades or souls, instead of preventing the stone's use forever - if the shade dies. - - imageadd: Runes now actually pulse red on failure. - - rscadd: The Summon Cultist rune no longer includes the cultists invoking it in - the selection menu. - - tweak: Imperfect Communication renamed to Emergency Communication. - - rscdel: You can no longer hide the Nar-Sie rune with a Talisman of Veiling/Revealing. - Kor: - - rscadd: Engineering cyborgs now have internal blueprints. - Lzimann: - - tweak: Automatic nexus placing time changed from 2 to 15 minutes. - - tweak: Prophet's gear(hat and staff) prioritizes the backpack instead of automatically - equipping. - - rscadd: Divine telepathy and prophet to god speak now have a follow button for - ghosts. - - rscadd: Divine telepathy and prophet to god speak now has the god's color. - - bugfix: CTF spawn protection trap is no longer constructable - Mercenaryblue: - - tweak: Drastically reduced the chances of eye damage when throwing a paper plane. - RandomMarine: - - tweak: Medical HUDs improved. To better prioritize patients, subjects deep into - critical condition have a blinking red outline around the entire HUD icon, and - will blink more rapidly when very close to death. - TechnoAlchemisto: - - tweak: Security uniforms have been made more professional, and more tactical. - TrustyGun: - - rscadd: By crafting together a legion skull, a goliath steak, ketchup, and capsaicin - oil, you can create Stuffed Legion! Be careful, it's hot. - coiax: - - rscadd: Centcom Department of [REDACTED] have announced a change of supplier of - [EXPLETIVE DELETED]. As such, for security reasons, the absinthe [MOVE ALONG - CITIZEN] will instead be [NOTHING TO SEE HERE]. We hope that this will not affect - the performance of the [INFORMATION ABOVE YOUR SECURITY CLEARANCE]. - nullbear: - - rscadd: A reminder for crew to avoid mopping floors in cold rooms, as the water - will freeze and provide a dangerous slipping hazard known as 'ice'. Running - on it is not recommended. - - rscadd: Frostoil is an effective chemical for rapidly cooling areas in the event - of a fire. - - rscadd: Added X4, a breaching charge more destructive than C4, it can be purchased - from uplinks. - - rscadd: C4 can be used with assemblies. - - bugfix: Fixes chembomb recipe to use any matter bin. Again. - - bugfix: ARG's disappear once finished reacting. -2016-05-03: - coiax, Robustin: - - tweak: Changeling Fleshmend is much less effective when used repeatedly in a short - time. Changeling Panacea is much more effective at purging reagents, reducing - radiation and now reduces braindamage. -2016-05-04: - Fox McCloud: - - tweak: shock revolver projectiles are now energy instead of bullets - Joan: - - rscdel: Cultists no longer communicate via tomes. - - rscadd: Cultists now communicate via the 'Communion' action button. - - rscadd: Examining the blob with an active research scanner or medical hud will - display effects, akin to hitting it with an analyzer. - - rscadd: Improved medical HUDs to work on all living creatures. - - rscadd: Drones and swarmers, being machines, require a diagnostic HUD for analysis - instead. - TechnoAlchemist: - - rscadd: You can now craft cloaks from the scales of fallen ash drakes, look for - the recipe in tablecrafting! - coiax: - - rscadd: The Service and the Standard cyborg module now have a spraycan built in, - for hijinks and passing on important urban messages. The Service cyborg module - also has a cyborg-hand labeler, in case anything needs to be labelled. - - rscadd: 'Centcom Suicide Prevention wishes to remind the station: Please do not - kill yourself with a hand labeler.' - xxalpha: - - bugfix: Fixed the mk-honk prototype shoes. -2016-05-05: - Joan: - - tweak: Revenants are slower while revealed. - - rscdel: Revenants can no longer cast inside dense objects. - - tweak: Lying down will cure Blight much, much faster. - \"Macho Man\" Randy Savage: - - rscadd: OOOHHH YEAAAAHHHH - - rscadd: SNAP INTO A JLIM SIM WITH THE ALL NEW WRESTLING BELT - - rscadd: YOU CAN FREAKOUT YOUR OPPONENTS WITH THE 5 HOT MOVES ON THIS BELT YEAH - - rscadd: PRAY TO THE LOCAL SPACE GODS TO EXCHANGE YOUR TELECRYSTALS TO ENSURE THE - CREAM RISES TO THE TOP -2016-05-07: - Robustin: - - rscadd: A small pantry has been added to SW maintenance. - nullbear: - - rscadd: Makes Shift+Middleclick the hotkey for pointing. - phil235: - - rscadd: DISMEMBERMENT! Humans can now lose their bodyparts. Explosions and being - attacked with a heavy sharp item on a specific bodypart can cause dismemberment. - - rscadd: You can't be handcuffed or legcuffed if you're missing an arm or leg. - You can't use items when you have no legs, your arms are too busy helping you - crawl, unless your are buckled to a chair. You're slower when missing a leg. - - rscadd: You lose organs and items if the bodypart they are inside gets cut off. - You can always retrieve them by cutting the dropped bodypart with a sharp object. - - rscadd: Medbay can replace your missing limbs with robotic parts via surgery, - or amputate you. - - rscadd: Changelings do not die when decapitated! They can regrow all their limbs - with Fleshmend, or just one arm with Arm Blade or Organic Shield. - - rscadd: Your chest cannot be dropped, but it will spill its organs onto the ground - when dismembered. -2016-05-08: - CoreOverload: - - rscadd: You can now de-power inactive swarmers with a screwdriver to prevent them - from activating. - - rscadd: Recycle depowered swarmers in autolathe or sell them in cargo! - Joan: - - rscadd: Cultist constructs, and shades, can now invoke runes by clicking them. - - rscdel: This does not include Manifest Ghost, Blood Boil, or Astral Journey runes. - - rscadd: Medical huds will now show parasites in dead creatures. - KorPhaeron: - - rscadd: Burn weapons can now dismember, and they reduce the limb to ash in the - process - - rscadd: Weapons with high AP values will now dismember limbs much easier. These - values are subject to change depending on how things play out over the next - week or two. - - rscadd: Various weapons with high AP values had them lowered (chaplain scythe, - energy sword, dualsaber) to prevent them taking limbs off in a single hit. - - rscadd: The chaplain has two new weapons (they are mechanically identical to previous - weapons, before anyone gets upset about balance). One is dismemberment themed, - the other is related to a new antagonist. - Mercenaryblue: - - rscadd: Throwing a Banana Cream Pie will now knock down and cream the target's - face. - - rscadd: You can clean off the cream with the usual methods, such as soap, shower, - cleaner spray, etc. - - rscadd: The Clown Federation would like to remind the crew that the HoS is worth - double points! Honk! - Robustin: - - experiment: There are rumors that the Cult's 'Talisman of Construction', which - turns ordinary metal for construct shells, can be used on plasteel to create - structures. If the stories are true, the cult has been producing relics of incredible - power through this transmutation. - coiax: - - rscadd: To save credits, Centcom has subcontracted out emergency shuttle design - to third parties. Rest assured, all of these produced shuttles meet our stringent - quality control. - - tweak: Lavaland ruins spawning chances have been modified. Expect to see more - smaller and less round affecting ruins, and no duplicates of major ruins, like - ash walkers or golems. - lordpidey: - - rscadd: Infernal devils have been seen onboard our spacestations, offering great - boons in exchange for souls. - - rscadd: Employees are reminded that their souls already belong to nanotrasen. If - you have sold your soul in error, a lawyer or head of personnel can help return - your soul to Nanotrasen by hitting you with your employment contract. - - rscadd: Nanotrasen headquarters will be bluespacing employment contracts into - the Lawyer's office filing cabinet when a new arrival reaches the station. It - is recommended that the lawyer create copies of some of these for safe keeping. - - rscadd: Due to the recent infernal incursions, the station library has been equipped - with a Codex Gigas to help research infernal weaknesses. Please note that reading - this book may have unintended side effects. Also note, you must spell the devil's - name exactly, as there are countless demons with similar names. - - rscadd: When a devil dies, if the proper banishment ritual is not performed on - it's remains, the devil will revive itself at the cost of some of it's power. The - banishment ritual is described in the Codex Gigas. - - rscadd: When a demon gains enough souls, It's form will mutate to a more demonic - looking form. The Arch-demon form is known to be on par with an ascended shadowling - in power. -2016-05-09: - Joan: - - tweak: Sporing Pods produces spores when expanding slightly more often. - - tweak: Replicating Foam now only expands when hit with burn damage, from all damage, - but does so at a higher chance. Free expansion from it is, however, more rare. - - tweak: Penetrating Spines does slightly more brute damage, and Poisonous Strands - does its damage 50% faster. - KorPhaeron: - - rscadd: The AI no longer has a tracking delay because artificial lag is the most - miserable thing in the world. - Razharas: - - tweak: crafting can now be done everywhere, little button near the intents with - hammer on it(its not T) opens the crafting menu, if you are in a locker or mech - only things in your hands will be considered for crafting - coiax: - - tweak: Skeletons now have bone "tongues" -2016-05-11: - Joan: - - rscadd: Shades can move in space. - - rscadd: Artificers can now heal shades. - coiax: - - tweak: Added action button to chameleon stamp - - rscadd: Added APPROVED and DENIED stamps to Bureaucracy Crate - - rscadd: Added the cream pie closet to various maps. Added contraband Cream Pie - Crate to Cargo. - pudl: - - rscadd: The armory has been redesigned. -2016-05-12: - Shadowlight and coiax: - - rscdel: Due to numerous reports of teams using human weapons instead of stealth - when carrying out their assignments, future teams have been genetically modified - to only be able to use their assigned blaster and are unable to use human weapons. -2016-05-13: - Joan: - - rscadd: Cultists can now unanchor and reanchor cult structures by hitting them - with a tome. Unanchored cult structures don't do anything. - KorPhaeron: - - rscadd: Drake attacks are now much easier to avoid. - - rscadd: Player controlled drakes can now consume bodies to heal, and alt+click - targets to divebomb them. - TechnoAlchemisto: - - rscadd: More items have been added to the mining vendor, check them out! -2016-05-14: - Cruix: - - bugfix: Fixed foam darts with the safety cap removed being reset when fired. - - rscadd: Added the ability to remove pens from foam darts. - - bugfix: Foam darts with pens inside them are no longer destroyed when fired. - - bugfix: Foam darts no longer drop two darts when fired at a person on a janicart. - Joan: - - rscdel: The Raise Dead rune no longer accepts dead cultists as a sacrifice to - raise the dead. - Metacide: - - rscadd: 'A small update for MetaStation, changes include:' - - rscadd: Added extra grounding rods to the engine area to stop camera destruction. - - rscadd: Added canvases and extra crayons to art storage and some easels to maint. - - rscadd: Added formal security uniform crate for parades to the warden's gear area. - - rscadd: The armory securitron now starts active. - - rscadd: The genetics APC now starts unlocked. - - rscadd: Other minor changes and fixes as detailed on the wiki page. - coiax, Nienhaus: - - rscdel: Unfortunately, the Belowyarn toys have been withdrawn from distribution - due to Assistants choking on the batteries. Centcom has sent their condolences - to the battery manufacturing plant. - - rscadd: We are introducing Oh-cee the original content skeleton figurines. Pull - its string, and hear it say a variety of phrases. Not suitable for infants or - assistants under 36 months. - - tweak: Note that pulling the string of all talking toys is now visible to others. - - rscadd: Talking toys produce a lot more chatter than they did before. So do some - skeleton "tongues". - pudl: - - rscadd: Adds normal security headsets to security lockers - xxalpha: - - bugfix: Fixed drone dispenser multiplying glass or metal. -2016-05-15: - Iamgoofball: - - rscadd: Nanotrasen is short on cash, and are now borrowing escape shuttles from - other stations, and Space Apartments. - Mercenaryblue: - - rscadd: Turns out a bike horn made with Bananium is flipping awesome! Honk! -2016-05-18: - Cruix: - - bugfix: unwrapping an item with telekinesis no longer teleports the item into - your hand. - Metacide: - - rscadd: 'MetaStation: the library and chapel have had windows removed to make - them feel more isolated.' - MrStonedOne: - - tweak: Tesla has been rebalanced. - - tweak: It should now lose balls slower, increase balls faster, and be a bit more - aggressive about finding nearby grounding rods. - - tweak: additional zaps from it's orbiting balls should be a bit more varied, but - a touch less powerful. - Robustin: - - rscadd: Lings have a new default ability, Hivemind Link. This lets you bring a - neck-grabbed victim into hivemind communications after short period of time. - You can talk to victims who are in crit/muted and perhaps persuade them to help - you, give you intel, or even a PDA code. The link will stabilize crit victims - to help ensure they do not die during the link. - Shadowlight213: - - bugfix: Cleanbot and floorbot scanning has greatly improved. they should prioritize - areas next to them, as well as resolve themselves stacking on the same tiles. - coiax: - - rscadd: Kinetic accelerators only require one hand to be fired, as before - - rscdel: Kinetic accelerators recharge time is multiplied by the number of KAs - that person is carrying. - - rscdel: Kinetic accelerators lose their charge quickly if not equipped or being - held - - rscadd: Kinetic accelerator modkits (made at R&D or your local Free Golem ship) - overcome these flaws -2016-05-19: - Razharas: - - rscadd: HE pipes once again work in space and in lava. - - rscadd: Space cools down station air again -2016-05-20: - KorPhaeron: - - rscadd: The HoS now has a pinpointer, the Warden now has his door remote. - bgobandit: - - rscadd: Nanotrasen has begun to research BZ, a hallucinogenic gas. We trust you - will use it responsibly. - - rscadd: BZ causes hallucinations once breathed in and, at high doses, has a chance - of doing brain damage. - - rscadd: BZ is known to cause unusual stasis-like behavior in the slime species. - coiax: - - rscadd: Neurotoxin spit can be used as makeshift space propulsion -2016-05-21: - Iamsaltball: - - rscadd: Heads of Staff now have basic Maint. access. - NicholasM10: - - rscadd: The chef can now make Khinkali and Khachapuri - coiax: - - rscdel: NOBREATH species (golems, skeletons, abductors, ash walkers, zombies) - no longer have or require lungs. They no longer take suffocation/oxyloss damage, - cannot give CPR and cannot benefit from CPR. Instead of suffocation damage, - during crit they take gradual brute damage. - - rscdel: NOBLOOD (golems, skeletons, abductors, slimepeople, plasmamen) species - no longer have or require hearts. - - tweak: NOBREATH species that require hearts still take damage from heart attacks, - as their tissues die and the lack of circulation causes toxins to build up. - - rscdel: NOHUNGER (plasmamen, skeletons) species no longer have appendixes. - coiax, OPDingo: - - tweak: Renamed and reskinned legion's heart to legion's soul to avoid confusion; - it is not a substitute heart, it is a supplemental chest organ. - - rscadd: Legion's souls are now more obviously inert when becoming inert. - nullbear: - - tweak: Wetness updates less often. - - rscadd: Wetness now stacks. Spraying lube over a tile that already has lube, will - make the lube take longer to dry. Likewise, dumping 100 units of lube will take - longer to dry than if only 10 units were dumped. (lube used to last just as - long, regardless of whether it was 1u, or 100u) There is a limit, however, and - you can't stack infinite lube. - - tweak: Hotter temperatures cause water to evaporate more quickly. At 100C, water - will boil away instantly. - - rscadd: About 5 seconds of wetness are removed from a tile for each unit of drying - agent. Absorbant Galoshes remain the most effective method of drying, and dry - tiles instantly regardless of wetness. -2016-05-22: - coiax: - - rscdel: Lavaland monsters now give ruins a wide berth. - - bugfix: Glass tables now break when people are pushed onto them. -2016-05-23: - CoreOverload: - - rscadd: New cyberimplant, "Toolset Arm", is now available in RnD. - coiax, OPDingo: - - rscadd: Crayons and spraycans are now easier to use. - - rscdel: Centcom announce due to budget cuts their supplier of rainbow crayons - has been forced to use more... exotic chemicals. Please do not ingest your standard - issue crayon. - kevinz000: - - rscadd: 'Peacekeeper borgs: Security borgs but without any stuns or restraints! - Modules: Harm Alarm, Cookie Dispenser, Energy Bola Launcher, Peace Injector - that confuses living things, and a weak holobarrier projector! It also comes - with the ability to hug.' - - rscadd: 'Cookie Synthesizer: Self recharging RCD that prints out cookies!' - - tweak: Nanotrasen scientists have added a hugging module to medical and peacekeeper - cyborgs to boost emotions during human-cyborg interaction. -2016-05-24: - Joan: - - rscdel: You can no longer scribe the Summon Nar-Sie rune under non-valid conditions. - Kiazusho: - - rscadd: Added three new advanced syringes to R&D -2016-05-26: - Xhuis: - - rscadd: Purge all untruths and honor Ratvar. - coiax: - - bugfix: Fixes bug where bolt of change to the host would kill an attached guardian. - - bugfix: Fixes bug where bolt of change to laughter demon would not release its - friends. - - bugfix: Fixes bug where bolt of change to morphling would not release its contents. - - bugfix: Fixes bug where bolt of change transforming someone into a drone would - not give them hacked laws and vision. - - bugfix: Blobbernauts created by a staff of change are now "independent" and will - not decay if seperated from a blob or missing a factory. - - rscadd: Independent blobbernauts added to gold slime core spawn pool. - - rscadd: Medical scanners now inform the user if the dead subject is within the - (currently) 120 second defib window. - - rscadd: Ghosts now have the "Restore Character Name" verb, which will set their - ghost appearance and dead chat name to their character preferences. - - bugfix: Mob spawners now give any generated names to the mind of the spawned mob, - meaning ghosts will have the name they had in life. - - bugfix: Fixes interaction with envy's knife and lavaland spawns. - - bugfix: Fixes a bug where swarmers teleporting humans would incorrectly display - a visible message about restraints breaking. - - rscdel: Emagging the emergency shuttle computer with less than ten seconds until - launch no longer gives additional time. - - rscadd: The emergency shuttle computer now reads the ID in your ID slot, rather - than your hand. -2016-05-27: - coiax: - - rscdel: Gatling gun removed from R&D for pressing ceremonial reasons. - phil235: - - tweak: Pull and Grab are merged together. Pulling stays unchanged. Using an empty - hand with grab intent on a mob will pull them. Using an empty hand with grab - intent on a mob that you're already pulling will try to upgrade your grip to - aggressive grab>neck grab>kill grab. Aggressive grabs no longer stun you, but - they act exactly like a handcuff, preventing you from using your hands until - you escape the grip. You can break free from the grip by trying to move or using - the resist button. - - tweak: Someone pulling a restrained mob now swap position with them instead of - getting blocked by the mob, unable to even push them. -2016-05-29: - GunHog: - - rscadd: The CE, RD, and CMO have been issued megaphones. - Paprika, Crystalwarrior, Korphaeron and Bawhoppen: - - rscadd: Pixel projectiles. This is easier to see than explain, so go fire a weapon. - Xhuis: - - rscadd: Ratvar and Nar-Sie now actively seek each other out if they both exist. - - tweak: Celestial gateway animations have been twweaked. - - tweak: Ratvar now has a new sound and message upon spawning. - - tweak: Ratvar now only moves one tile at a time. - - bugfix: The celestial gateway now takes an unreasonably long amount of time. - - bugfix: God clashing is now much more likely to work properly. - - bugfix: Function Call now works as intended. - - bugfix: Break Will now works as intended. - - bugfix: Holy water now properly deconverts servants of Ratvar. - - bugfix: Deconverted servants of Ratvar are no longer considered servants. - pudl: - - rscadd: Chemicals should now have color, instead of just being pink. -2016-05-30: - coiax: - - rscadd: A new Shuttle Manipulator verb has been added for quick access to probably - the best and most mostly bugfree feature on /tg/. - - rscadd: Spectral sword is now a point of interest for ghosts. - - bugfix: Clicking the spectral sword action now orbits the sword, instead of just - teleporting to its location. - - bugfix: Gang tags can again be sprayed over. - - bugfix: Fixes bug where the wisp was unable to be recalled to the lantern. - xxalpha: - - rscdel: Engineering, CE and Atmos hardsuits no longer have in-built jetpacks. -2016-05-31: - CoreOverload: - - rscadd: 'Cleanbot software was updated to version 1.2, improving pathfinding and - adding two new cleaning options: "Clean Trash" and "Exterminate Pests".' - - experiment: New cleaning options are still experimental and disabled by default. - Kiazusho: - - bugfix: Changeling organic suit and chitin armor can be toggled off once again. - Kor: - - rscadd: The Japanese Animes button is back, - - rscadd: 'The chaplain has three new weapons: The possessed blade, the extra-dimensional - blade, and the nautical energy sword. The former has a new power, the latter - two are normal sword reskins.' - - rscadd: The chapel mass driver has been buffed. - coiax: - - rscdel: Zombies can no longer be butchered - - rscadd: If you encounter an infectious zombie, be cautious, its claws will infect - you, and on death you will rise with them. If you manage to kill the beast, - you can remove the corruption from its brain via surgery, or just chop off the - head to stop it coming back. - - rscadd: Adds some stock computers and lavaland to Birdboat Station. - - bugfix: Free Golem scientists have proved that as beings made out of stone, golems - are immune to all electrical discharges, including the tesla. - - rscadd: Nuclear bombs are now points of interest. Never miss a borg steal a nuke - from the syndicate shuttle again! - - rscadd: Alt-clicking a spraycan toggles the cap. -2016-06-01: - coiax: - - rscadd: Added a mirror to the beach biodome. Beach Bums, rejoyce! - pudl: - - rscadd: The brig infirmary has received a redesign. -2016-06-02: - Joan: - - tweak: Closed false walls will block air. - Lati: - - rscadd: R&D required levels and origin tech levels have been rebalanced - - experiment: Overall, items buildable in R&D have lower tech levels and items in - other departments have their tech levels raised. Remember to use science goggles - to see tech levels of items! - - tweak: There are now level gates at high levels. R&D scientists will need help - from others to get past these level gates. - - tweak: Other departments such as hydroponics and genetics will be important to - R&D's progress now and xenobio, mining and cargo are more important than before - - tweak: Efficiency upgrades are back in R&D machines and tweaked to be less powerful - in autolathes - - rscdel: Reliability has been removed from all items - - bugfix: Most bugs in R&D machines should be fixed - PKPenguin321 & Nienhaus: - - rscadd: Letterman jackets are now available from the ClothesMate. - Quiltyquilty: - - rscadd: The bar has seen a redesign. - coiax: - - rscadd: Clone pods now notify the medical channel on a successful clone. They - also notify the medical channel if the clone dies or is horribly mutilated; - but not if it is ejected early by authorised medical personnel. - - rscadd: Cloning pods now are more capable of cloning humanoid species that do - not breathe. - - bugfix: You can only be damaged once by a shuttle's arrival. It is still unpleasant - to be in the path of one though; try to avoid it. - - rscadd: Adds Asteroid emergency shuttle to shuttle templates. It is a very oddly - shaped one though, it might not be compatible with all stations. - - rscdel: The Chaplain soulshard can only turn a body into a shade once. A released - shade can still be reabsorbed by the stone to heal it. - - rscadd: The shuttle manipulator now has a Fast Travel button, for those admins - that really want a shuttle to get to where its going FAST. -2016-06-04: - MrStonedOne: - - bugfix: fixes see_darkness improperly hiding ghosts in certain cases. - Xhuis: - - tweak: Clockwork marauders can now smash walls and tables. - - tweak: Servants are no longer turned into harvesters by Nar-Sie but instead take - heavy brute damage and begin to bleed. Similarly, cultists are no longer converted - by Ratvar but instead take heavy fire damage and are set ablaze. - - rscadd: Added clockwork reclaimers. Ghosts can now click on Ratvar to become clockwork - reclaimers - small constructs capable of forcefully converting those that still - resist Ratvar's reign. Alt-clicking a valid target will allow the reclaimer - to leap onto the head of any non-servant, latching onto their head and converting - the target if they are able. The target will be outfitted with an unremovable, - acid-proof hat version of the reclaimer. The reclaimer will be able to speak - as normal and attack its host and anything nearby. If the reclaimer's host goes - unconscious or dies, it will leap free. - - rscadd: Added pinion airlocks. These airlocks can only be opened by servants and - conventional deconstruction will not work on them. They can be created by proselytizing - a normal airlock or from Ratvar. - - rscadd: Added ratvarian windows. They are created when Ratvar twists the form - of a normal window, and there are both single-direction and full-tile variants. - - bugfix: Non-servants can no longer use clockwork proselytizers or mending motors. - - bugfix: Servants are now deconverted properly. - coiax: - - bugfix: The cloning pod now sounds robotic on the radio. - - rscadd: For extra observer drama, ghosts can now visibly see the countdown of - syndicate bombs, nuclear devices, cloning pods, gang dominators and AI doomsday - devices. -2016-06-05: - Joan: - - rscadd: Clockwork structures can be damaged by projectiles and simple animals, - and will actually drop debris when destroyed. - - rscadd: AIs and Cyborgs that serve Ratvar can control clockwork airlocks and clockwork - windoors. - - rscadd: The clockwork proselytizer can now proselytize windows, doors, grilles, - and windoors. - - rscadd: The clockwork proselytizer can proselytize wall gears and alloy shards - to produce replicant alloy. It can also proselytize replicant alloy to refill, - in addition to refilling by attacking it with alloy. - - rscadd: The clockwork proselytizer can replace clockwork floors with clockwork - walls and vice versa. - - rscadd: Ratvar will convert windoors, tables, and computers in addition to everything - else. - - tweak: Ratvar now moves around much faster. - - rscadd: Ratvar and Nar-Sie will break each other's objects. - - tweak: The blind eye from a broken ocular warden now serves as a belligerent eye - instead of as replicant alloy. The pinion lock from a deconstructed clockwork - airlock now serves as a vanguard cogwheel instead of as replicant alloy. - - rscadd: Clockwork walls drop a wall gear when removed by a welding tool. The wall - gear is dense, but can be climbed over or unwrenched, and drops alloy shards - when broken. Clockwork walls drop alloy shards when broken by other means. - - bugfix: Fixed Nar-Sie wandering while battling Ratvar. - - bugfix: Ratvarian Spears now last for the proper 5 minute duration. - - bugfix: Servant communication now has ghost follow links. - - imageadd: New sigil sprites, courtesy Skowron. - - imageadd: Sigils of Transgression have a visual effect when stunning a target. - - imageadd: Clockwork spears now have a visual effect when breaking. - PKPenguin321: - - rscadd: The CMO's medical HUD implant now comes with a one-use autoimplanter for - ease of use. - RemieRichards: - - rscadd: Slimes may now be ordered to attack! You must be VERY good friends with - the slime(s) to give this command, asking them to attack their friends or other - slimes will result in them liking you less so be careful! - X-TheDark: - - rscadd: Mech battery replacement improved. The inserted battery's charge will - be set to the same percentage of the removed one's (or 10%, if removed one's - was less). - coiax: - - bugfix: Clicking the (F) link when an AI talks in binary chat will follow its - camera eye, the same as when (F) is clicked for its radio chat. - - bugfix: Laughter demons should now always let their friends go when asked correctly. - - rscadd: Cloning pods now grab the clone's mind when the body is ejected, rather - than when it starts cloning. - - rscadd: Wizards have been experimenting with summoning the slightly less lethal - "laughter demon". Please be aware that these demons appear to be nearly as dangerous - as their slaughter cousins. But adorable, nonetheless. - kevinz000: - - rscadd: Gravity Guns! It is a mildly expensive R&D gun that has a 5 second cooldown - between shots, but doesn't need to be recharged. It has two modes, attract and - repulse. For all your gravity-manipulation needs! -2016-06-07: - Bobylein: - - rscadd: Nanotrasen is finally able to source transparent bottles for chemistry. - Iamgoofball: - - experiment: The Greytide Virus got some teeth. - Joan: - - wip: This is a bunch of Clockwork Cult changes. - - rscadd: Added the Clockwork Obelisk, an Application scripture that produces a - clockwork obelisk, which can Hierophant Broadcast a large message to all servants - or open a Spatial Gateway with 5 uses and a 10 second duration to any conscious - servant or clockwork obelisk. - - wip: Spatial Gateways of any source have doubled uses and duration when the target - is a clockwork obelisk. - - rscadd: Added the Mania Motor, an Application scripture that produces a mania - motor, which, while active, causes hallucinations and brain damage in all nearby - humans. - - wip: The Mania Motor will try to convert any non-servant human directly adjacent - to it at an additional power cost and will remove brain damage, hallucinations, - and the druggy effect from servants. - - rscadd: Added the Vitality Matrix, an Application scripture that produces a sigil - that will slowly drain health from non-servants that remain on it. Servants - that remain on the sigil will instead be healed with the vitality drained from - non-servants. - - wip: The Vitality Matrix can revive dead servants for a cost of 25 vitality plus - all non-oxygen damage the servant has. If it cannot immediately revive a servant, - it will still heal their corpse. - - experiment: Most clockwork structures, including the Mending Motor, Interdiction - Lens, and the newly added Clockwork Obelisk and Mania Motor, now require power - to function. - - wip: Mending Motors can still use alloy for power. - - tweak: The Sigil of Transmission has been remade into a power battery and will - power directly adjecent clockwork structures. Sigils of Transmission start off - with 4000 power and can be recharged with Volt Void. - - tweak: Volt Void drains somewhat more power, but will not damage the invoker unless - they drain too much power. Invokers with augmented limbs will instead have those - limbs healed unless they drain especially massive amounts of power. - - wip: Using Volt Void on top of a Sigil of Transmission will transfer most of the - power drained to the Sigil of Transmission, effectively making it far less likely - to damage the invoker. - - rscdel: You can no longer stack most sigils and clockwork objects with themself. - You can still have multiple different objects or sigils on a tile, however. - - tweak: The Break Will Script has been renamed to Dementia Doctrine, is slightly - faster, and causes slightly more brain damage. - - tweak: The Judicial Visor now uses an action button instead of alt-click. Cultists - of Nar-Sie judged by the visor will be stunned for half duration, but will be - set on fire. - - tweak: Multiple scriptures have had their component requirements changed. The - Summon Judicial Visor Script has been reduced from a Script to a Driver. - - rscadd: Recollection will now show both required and consumed components. - - tweak: Clockwork Marauders can now emerge from their host if their host is at - or below 60% total health(for humans, this is 20 health out of crit) - - tweak: Clockwork Marauders will slowly heal if directly adjacent to their host - and have a slightly larger threshold for their no-Fatigue bonus damage. - Quiltyquilty: - - rscadd: Botany, atmospherics and cargo now all have access to high-capacity watertanks. - - rscadd: The bar has now been outfitted with custom bar stools. - Xhuis: - - rscdel: Removed the global message played when Nar-Sie _begins_ to spawn (but - not when it actually spawns). - - tweak: Drunkenness recovery speed now increases with how drunk the imbiber is - and is much quicker when the imbiber is asleep. - - tweak: Suit storage units now take three seconds to enter (up from one) and have - different sounds and messages for UV ray cauterization. - - bugfix: Fixed some bugs with the suit storage unit, inserting mobs, and contents - to seemed to duplicate themselves. - - bugfix: The Summon Nar-Sie rune can now only be drawn on original station tiles - and fails to invoke if scribed on the station then moved elsewhere. - coiax: - - rscdel: Bluespace shelter capsules can no longer be used on shuttles. - - rscadd: Bluespace shelters may have different capsules stored. View what your - capsule has inside by examining it. - - rscdel: The Nar'sie rune cannot be scribed on shuttles or off Z-level. - - rscadd: The Raise Dead rune automatically grabs the ghost of the raised corpse. - - rscadd: Deadchat is now notified when a sentient mob dies. - phil235: - - rscadd: Monkeys and all other animals that should have blood now has it. Beating - them up will make you and your weapon bloody, just like beating a human does. - Dragging them when wounded and lying will leave a blood trail. Their blood is - still mostly cosmetic, they suffer no effects from low blood level, unlike humans. - - rscadd: When a mob leaves a blood trail while dragged, it loses blood. You can - no longer drag a corpse to make an inifinite amount of blood trails, because - once the victim's blood reaches a certain threshold it no longer leaves a blood - trail (and no longer lose any more blood). The threshold depends on how much - damage the mob has taken. You can always avoid hurting the dragged mob by making - them stand up or by buckling them to something or by putting them in a container. - - rscdel: You can no longer empty a mob of its blood entirely with a syringe, once - the mob's blood volume reaches a critically low level you are unable to draw - any more blood from it. - - tweak: A changeling absorbing a human now sucks all their blood. -2016-06-08: - Cruix: - - bugfix: Changelings no longer lose the regenerate ability if they respect while - in regenerative stasis. - Fox McCloud: - - bugfix: Fixes Experimentor critical reactions not working - - bugfix: Fixes Experimentor item cloning not working - - bugfix: Fixes Experimentor producing coffee vending machines instead of coffe - cups - - tweak: Experimentor can only clone critical reaction items instead of anything - with an origin tech - GunHog: - - rscadd: Nanotrasen has approved the Hyper-Kenetic Accelerator upgrade for cyborg - mining modules. - - tweak: Each of the heads' ID computers are now themed for their department! - Joan: - - tweak: Anima Fragments have slightly more health and move faster, but slow down - temporarily when taking damage. Also they can move in space now. - Kor: - - rscadd: The clown will play a sad trombone noise upon death. - - rscadd: Colossi now roam the wastes. - - rscadd: Bubblegum now roams the wastes. - PKPenguin321: - - rscadd: You can now emag chemical dispensers, such as the ones in chemistry or - the bar, to unlock illegal chemicals. - lordpidey: - - tweak: Infernal jaunt has been significantly nerfed with an enter and exit delay. -2016-06-09: - GunHog: - - rscadd: Nanotrasen scientists have completed a design for adapting mining cyborgs - to the Lavaland Wastes in the form of anti-ash storm plating. Research for this - technology must be adapted at your local station. - Joan: - - tweak: Anima Fragments have slightly less health and damage and will slow down - for longer when hit. - Kor: - - rscadd: The captain now spawns with the station charter, which allows him to name - the station. - Papa Bones: - - tweak: Loyalty implants have been refluffed to mindshield implants, they are mechanically - the same. - Xhuis: - - rscadd: You can now remove all plants and weeds from a hydroponics tray by using - a spade on it. - - rscadd: Added meatwheat, a mutated variant of wheat that can be crushed into meat - substitute. - - rscadd: Added ambrosia gaia, a mysterious plant that is rumored to provide nutrients - and water to any soil - hydroponic or otherwise - that it's planted in. - - rscadd: Added cherry bombs, a mutated variant of blue cherries that have an explosively - good taste. Oh, and don't pluck the stems. - coiax: - - tweak: The beacons from support guardians are now structures, rather than replacing - the floor tile. In practice, this will change little, aside from not leaving - empty plating when a beacon is removed because a new one has been placed. - nullbear: - - tweak: Removes the restriction on wormhole jaunters, preventing them from teleporting - you to beacons on other z-levels. - - tweak: No longer able to use beacons to bypass normal shuttle/centcomm anti-bluespace - measures. -2016-06-11: - Joan: - - rscadd: Clockwork Slabs, Clockwork Caches near walls, and Tinkerer's Daemons will - now be more likely to generate components that the clockwork cult has the least - of. - - rscadd: Destroyed Clockwork Caches will drop all Tinkerer's Daemons in them. - - tweak: Clockwork Caches can now only generate a component every 30 seconds(when - near a clockwork wall), Clockwork Slabs can only generate a component every - 40 seconds, and Tinkerer's Daemons can only generate a component every 20 seconds. - This should result in higher component generation for everything except Clockwork - Caches near clockwork walls. - - tweak: Adding a component to a Clockwork Slab instead puts that component in the - global component cache. - - tweak: Clockwork Slabs only generate components if held by a mob or in a mob's - storage, and when generating a component will prevent other Slabs held from - generating a component. - - tweak: The Replicant Driver no longer costs a Replicant Alloy to invoke; basically - you can throw free Slabs at converts. - - rscdel: Clockwork Slabs no longer have Repository as a menu option; instead, you - can examine them to see how many components they have access to. - - rscdel: Clockwork Caches directly on top of clockwork walls won't generate components - from that wall. - Lzimann: - - rscadd: Bar stools are now constructable with metal! - coiax: - - rscadd: Ghosts are notified when someone arrives on the Arrivals Shuttle. This - is independent of the announcement system, and the (F) link will follow the - arrived person. - - tweak: Slimes and aliens with custom names now retain those names when changing - forms. - kevinz000: - - bugfix: Malf AI hacking an APC that is then destroyed will no longer bug the AI - - bugfix: Being turned into a Revolutionary now stuns you for a short while. - - bugfix: Kinetic Accelerators no longer drop their firing pin or cell when destroyed - by lava - phil235: - - rscadd: Firelock assemblies can be reinforced with plasteel to construct heavy - firelocks. -2016-06-12: - Joan: - - rscadd: Attacking a human you are pulling or have grabbed with a ratvarian spear - will impale them, doing massive damage, stunning the target, and breaking the - spear if they remain conscious after being attacked. - - tweak: The Function Call verb is now an action button. - Xhuis: - - rscdel: While experimenting with floral genetic engineering, Nanotrasen botanists - discovered an explosive variety of the cherry plant. Due to gross misuse, the - genes used to produce this strain have been isolated and removed while Central - Command decides how best to modify it. - xxalpha: - - rscadd: 'New wizard spell: Spacetime Distortion.' - - rscadd: 3x1 grafitti -2016-06-13: - Joan: - - tweak: Sigils of Transgression will now only stun for about 5 seconds, from around - 10 seconds. - - tweak: Sigils of Submission take about 5 seconds to convert a target, from around - 3 seconds, and will glow faintly. - - rscadd: Sigils of any type can be attacked with an open hand to destroy them, - instead of requiring harm intent. Servants still require harm intent to do so. - Lati: - - rscadd: Nanotrasen has added one of their rare machine prototypes to cargo's selection. - It might be valuable to research. - Xhuis: - - rscadd: You can now create living cake/cat hybrids through a slightly expensive - crafting recipe. These "caks" are remarkably resilient, quickly regenerating - any brute damage dealt, and can be attacked on harm intent to take a bite to - be fed by a small amount. They serve as mobile sources of food and make great - pets. - - rscadd: If a brain occupied by a player is used in the crafting recipe for caks, - that player then takes control of the cak! -2016-06-14: - Joan: - - tweak: The Gateway to the Celestial Derelict now takes exactly 5 minutes to successfully - summon Ratvar and has 500 health, from 1000. - - rscadd: You can now actually hit people adjacent to the Gateway; only the center - of the Gateway can be attacked. The Gateway is also now dense, allowing you - to more easily shoot at it. - - rscadd: All Scripture in the Clockwork Slab's recital has a simple description. - Razharas: - - rscadd: Wiki now has the method of cultivating kudzu vines that was in game for - over a year. https://tgstation13.org/wiki/Guide_to_hydroponics#Kudzu - kevinz000: - - tweak: Gravity Guns should no longer destroy local reality when set to attract - and shot in an east cardinal direction. Added safety checks has slightly increased - the cost of the gun's fabrication. Nanotrasen apologizes for the inconvenience. - - bugfix: Gravity guns now have an inhand sprite. -2016-06-16: - GunHog: - - rscadd: In response to alarmingly high mining cyborg losses, Nanotrasen has equipped - the units with an internal positioning beacon, as standard within the module. - Joan: - - rscadd: You can now strike a Tinkerer's Cache with a Clockwork Proselytizer to - refill the Proselytizer from the global component cache. - - tweak: The Clockwork Proselytizer requires slightly less alloy to convert windows - and windoors. - - tweak: Several clockwork objects have more useful descriptions, most notably including - structures, which will show a general health level to non-servants and exact - health to servants. - - imageadd: The Clockwork Proselytizer has new, more appropriate inhands. - - tweak: Invoking Inath-Neq, the Resonant Cogwheel, now gives total invulnerability - to all servants in range for 15 seconds instead of buffing maximum health. - - tweak: Impaling a target with a ratvarian spear no longer breaks the spear. - - tweak: Judicial Markers(the things spawned from Ratvar's Flame, in turn spawned - from a Judicial Visor) explode one second faster. - - rscdel: Removed Dementia Doctrine, replacing it with an Application sigil. - - rscadd: Adds the Sigil of Accession, the previously-mentioned Application sigil, - which is much like a Sigil of Submission, except it isn't removed on converting - un-mindshielded targets and will disappear after converting a mindshielded target. - - tweak: Sigil of Submission is now a Script instead of a Driver; It's unlocked - one tier up, so you have to rely on the Drivers you have until you get Scripts, - instead of spamming both Driver sigils for free converts. - - rscadd: To replace Sigil of Submission in the Driver tier; Added Taunting Tirade, - which is a chanted scripture with a very fast invocation, which, on chanting, - confuses, dizzies, and briefly stuns nearby non-servants and allows the invoker - a brief time to relocate before continuing the chant. - - rscadd: Ghosts can now see the Gateway to the Celestial Derelict's remaining time - as a countdown. - - tweak: Anima Fragments are now slightly slower if not at maximum health and no - longer drop a soul vessel when destroyed. - Quiltyquilty: - - rscdel: Patches now hold only 40u. - - rscdel: Patches in first aid kits now only contain 20u of chemicals. - coiax: - - rscadd: Polymorphed mobs now have the same name, and where possible, the same - equipment as their previous form. -2016-06-19: - Joan: - - tweak: Assassin holoparasite attack damage increased from 13 to 15, stealth cooldown - decreased from 20 seconds to 16 seconds. - - tweak: Charger holoparasite charge cooldown decreased from 5 seconds to 4 seconds. - - tweak: Chaos holoparasite attack damage decreased from 10 to 7, range decreased - from 10 to 7. - - tweak: Lightning holoparasite attack damage increased from 5 to 7, chain damage - increased by 33%. - - rscdel: Clock cult scripture unlock now only counts humans and silicons. - - rscadd: Servants of ratvar can now create cogscarab shells with a Script scripture. - Adding a soul vessel to one will produce a small, drone-like being with an inbuilt - proselytizer and tools. - - imageadd: Clockwork mobs have their own speechbubble icons. - - tweak: Invoking Sevtug now causes massive hallucinations, brain damage, confusion, - and dizziness for all non-servant humans on the same zlevel as the invoker. - - rscdel: Invoking Sevtug is no longer mind control. RIP mind control 2016-2016. - - tweak: Clockwork slabs now produce a component every 50 seconds, from 40, Tinkerer's - Caches now produce(if near a clockwork wall) a component every 35 seconds, from - 30. - - experiment: 'Tinkerer''s daemons have a slightly higher cooldown for each component - of the type they chose to produce that''s already in the cache: This is very - slight, but it''ll add up if you have a lot of one component type and are trying - to get more of it with daemons; 5 of a component type will add a second of delay.' - Kor and Iamgoofball: - - rscadd: Miners can now purchase fulton extraction packs. - - rscadd: Miners can now purchase fulton medivac packs. - - rscadd: Two new fulton related bundles are available for purchase with vouchers. - Quiltyquilty: - - rscadd: Beepsky now has his own home in the labor shuttle room. - Wizard's Federation: - - bugfix: We've fired the old Pope, who was actually an apprentice in disguise. - We've a-pope-riately replaced him with a much more experienced magic user. - - rscadd: Some less-then-sane people have been sighted forming mysterious cults - in lieu of recent Pope sightings, lashing out at anyone who speaks ill of him. - - bugfix: We've rejiggered our trans-dimensional rifts, and almost all cases of - clergy members being flung into nothingness should be resolved. - - bugfix: All members of the Space Wizard's Clergy have been appropriately warned - about usage of skin-to-stone spells, and such there should be no more instances - of permanent statueification. - Xhuis: - - tweak: Revenants have been renamed to umbras and have undergone some tweaks. - coiax: - - rscadd: Drones can hear robotic talk, but cannot communicate on it. AIs and cyborgs - are encouraged to share information with station repair drones. - - rscadd: Potted plants can now be ordered from cargo. - - rscdel: AI turrets no longer fire at drones. -2016-06-20: - Kor: - - rscadd: Cult runes can only be scribed on station and on mining. - - rscadd: The comms console now has a new option allowing you to communicate with - the other server. - Quiltyquilty: - - rscadd: The detective has been moved to above the post office. - coiax: - - rscadd: Birdboat's supply loop has been split into two unconnected halves, to - maintain award winning air quality. - incoming5643: - - experiment: New abilities for some races! - - rscadd: Skeletons (liches) and zombies now are much more susceptible to limb loss, - but can also reattach lost limbs manually without surgery. - - rscadd: Slimepeople can now lose their limbs, but also can regenerate them if - they have the jelly for it. Additionally slimepeople will (involuntarily) lose - limbs and convert them to slime jelly if they're extremely low on jelly. - - rscadd: Zombies and slimepeople now have reversed toxic damage, what usually heals - now hurts and what usually hurts now heals. Keep in mind that while you could - for example heal with unstable mutagen, you'd still mutate. Beware of secondary - effects! Drugs like antitoxin are especially dangerous to these races now since - not only do they do toxin damage, but they remove other toxic chems before they - can heal you. Be wary also of wide band healing drugs like omnizine. - - rscadd: For slime people the above mechanic also adds/drains slime jelly. So yes - inhaling plasma is now a valid way to build jelly (but you'll still suffocate - if there's no oxygen). - - rscadd: Pod people now mutate if shot with the mutation setting of the floral - somatoray. -2016-06-22: - Cheridan: - - tweak: Flashes no longer stun cyborgs, instead working almost exactly like a human, - causing them to become confused and unequip their current module. - Joan: - - rscdel: Those who do not serve Ratvar cannot understand His creations. - - rscadd: You can now repair clockwork structures with a clockwork proselytizer. - This is about a third as efficient as a mending motor, costing 2 liquified alloy - to 1 health, and also about a third as fast. - - tweak: Scarab proselytizers are more efficient and will reap more alloy from metal - and plasteel. - - rscadd: They can also directly convert rods to alloy. - - tweak: Nuclear bombs will no longer explode the station if in space. Please be - aware of this. - Kor: - - rscadd: You can now pick up potted plants. - PKPenguin321: - - rscadd: You can now pick up a skateboard and use it as a weapon by dragging it - to yourself. - - imageadd: Skateboards have been given brand new sprites, courtesy of JStheguy - Quiltyquilty: - - rscadd: The AI is back in the center of the station. The gravity generator is - now where the SMES room used to be. The SMESes are in the equipment room. - Supermichael777: - - rscadd: Flaps are no longer space-racist and now accept all bots. - Xhuis: - - tweak: Holy weapons, such as the null rod and possessed blade, now protect from - Ratvar's magic. - coiax: - - rscadd: Certain custom station names may be rejected by Centcom. - - rscadd: Drone shells can be ordered in Emergency supplies at Cargo. -2016-06-23: - Joan: - - tweak: Tinkerer's Caches generate components(when near clockwork walls) every - minute and a half, from every 35 seconds. Clockwork Slabs generate components - once per minute, from once per 50 seconds. - - tweak: Spatial Gateway will last four seconds per invoker, instead of two per - invoker. - - rscdel: Clockwork floors now only heal toxin damage on servants of Ratvar. - - rscdel: You can no longer place ocular wardens very close to other ocular wardens. - - tweak: The Flame produced by a Judicial Visor is no longer an effective melee - weapon and will trigger on all intents, not just harm intent. - Wizard's Federation: - - bugfix: Acolytes of Hades have revealed their true forms. - - rscadd: We've discovered a way to traverse portals left behind by Hades, and have - discovered a great treasure through it. - - bugfix: Hades has undergone Anger Management classes, and should no longer remain - wrathful for the duration of his visit. - coiax: - - rscadd: Changelings now evolve powers via the cellular emporium, which they can - access via an action button. - - rscadd: Due to budget cuts, the shuttle's hyperspace engines now create a visual - distortion at their destination, a few seconds before arrival. Crewmembers are - encouraged to use these "ripples" as an indication of where not to stand. - - bugfix: Shuttles now only run over mobs in turfs they are moving into, rather - than the entire rectangle. - - rscadd: If you are an observer, you can click on transition edges of a Z-level - in order to move as a mob would. - - rscadd: Due to safety concerns, the Hyperfractal Gigashuttle now has some safety - grilles to prevent accidental matter energising. - coiax, incoming: - - rscadd: Due to budget cuts, the builtin anti-orbit engines on the station have - been removed. As such, expect the station to start orbiting the system again, - and encounter an unpredictable stellar environment. - - rscdel: All permanent structures (not on station, Centcom or lavaland) have been - removed. - - rscadd: All removed structures are now space ruins, and can be placed randomly - in space ruin zlevels. - - wip: The White Ship remains at its current location, but has lost any reliable - landmarks near it. Its starting position will be made more random in a coming - update. - - rscadd: The Space Bar has a small atmos system added and a teleporter. Some other - ruins have been cleaned up to not have atmos active turfs. -2016-06-24: - Joan: - - experiment: The Interdiction Lens has been reworked; instead of allowing you to - disable Telecomms, Cameras, or non-Servant Cyborgs, it drains power from all - APCs, SMES units, and non-Servant cyborgs in a relatively large area, funneling - that power into nearby Sigils of Transmission, then disables all cameras and - radios in that same area. - - wip: If it fails to find anything it could disable or drain any power, it turns - off for 2 minutes. - - tweak: You can now target yourself with Sentinel's Compromise, allowing you to - heal yourself with it. - - rscadd: Flashes will once again stun borgs, but for a much shorter time than they - previously did; average stun time is reduced from the previous average of 15 - seconds to about 6 seconds. The confusion remains, but it will no longer unequip - borg modules. - MMMiracles: - - tweak: Metastation xenobiology's lights and cell have been modified so it won't - drain 5 minutes into the round. - SnipeDragon: - - bugfix: Changelings created at round start now correctly receive their Antag HUD. - Xhuis: - - rscadd: Cardboard cutouts have been added. Now you can set up advertisements for - your clown mart. -2016-06-26: - Basilman: - - rscadd: The Donor prompt for becoming an alien queen maid is now an action button - instead, and can be toggled on and off. - Joan: - - rscadd: Fellowship Armory now invokes faster for each nearby servant and provides - clockwork gauntlets, which are shock-resistant and provide armor to the arms. - - tweak: It's not wise to equip clockwork armor if you don't serve Ratvar. - - bugfix: A full set of clockwork armor will now actually cover all limbs. - coiax: - - rscadd: Our administrators, here at /tg/, don't get enough credit for their wealth - of experience and knowledge. Now they get the chance to share that with you - by giving out custom tips! - - tweak: Gang domination now uses the same timing method as shuttles, making their - domination times more accurate. - - rscdel: The default shuttle transit time is now 15 seconds. - - rscadd: Please do not commit suicide with the nuclear authentication disk. - - rscadd: Observers now have a visible countdown for borg factories, silicons can - examine the factory to determine how long it has remaining until it is ready. - - rscadd: Clockwork mobs sound like Ratvar chants if you do not serve Ratvar. - - rscadd: When servants recite, they now talk in a strange voice that is more noticable. -2016-06-28: - CoreOverload: - - rscadd: Kinetic accelerator now supports seclite attachment. - - rscadd: All cyborgs have been outfitted with ash-proof plating. - - rscadd: Mining cyborg module now includes a welder and a fire extinguisher. - - rscadd: 'Mining cyborgs now have a new upgrade: lavaproof tracks.' - Joan: - - rscdel: Clockwork Marauders are no longer totally invincible to damage unless - a holy weapon was involved. - - rscadd: Clockwork Marauders will take damage when attacked, but unless they're - fighting excessive amounts, they'll be forced to return to their host before - they'd normally die. - - experiment: A holy weapon held in either hand in the presence of a marauder will - massively increase the damage they take, making it much more likely the marauder - can be killed. - - tweak: Clockwork Marauders do slightly less damage at low fatigue levels. - - rscadd: Clockwork Marauders now have a chance to block melee attacks, negating - the damage from them, and an additional chance to immediately counter, attacking - whoever tried to attack them. - - wip: If Ratvar has awoken, Marauders have a much higher chance to block and counter, - will block thrown items and projectiles, and gradually regenerate. - - experiment: Clockwork Marauders no longer have a verb to communicate; they instead - use :b to do so. - - rscadd: Faked deaths are now effectively indistinguishable from real deaths. - MMMiracles: - - rscadd: Adds some ruins for space and lavaland. Balance not included. - - rscadd: Adds spooky ghosts. - SnipeDragon: - - bugfix: Cardboard Cutouts now become opaque when their appearance is changed. - Wizard's Federation: - - rscadd: Acolytes of Hades have been scolded for gluing their clothes to themselves, - and their clothes can now be cut off them. - - rscadd: Hades has learned a few new tricks, to ensure the ultimate demise of his - target. - - bugfix: Hades has faced a council of his repeated use of time magic inside chapels, - and as it was deemed unholy, he will no longer do it. - - rscadd: Wizards of the Wizard's Federation have been granted access to Dark Seeds, - ancient relics used to call upon Hades in a time of need. - Xhuis: - - rscdel: You can no longer put paper cups back onto water coolers. In addition, - they're now just called "liquid coolers" instead of changing based on their - contents. - coiax: - - rscadd: Status displays added to a variety of shuttle templates. - - rscdel: Large graffiti now consumes 5 uses from limited use crayons and spraycans, - as well as taking three times the amount of time to draw. - - rscadd: All items inside the supply shuttle will now be sold, regardless of whether - they're inside a container or not. - - bugfix: Fixes issue where the AI core APC on Metastation would not charge. - 'name: Lzimann': - - rscadd: Engineer and atmos wintercoat can hold the RPD now! - optional name here: - - rscdel: Shadowlings have been completely removed. - oranges: - - tweak: You can now hear dice - timkoster1: - - rscadd: adds a hud soul counter for devils. Sprites by PouFrou and special thanks - to lordpidey for about everything. -2016-06-29: - Joan: - - rscadd: Ghosts spawning via Ratvar can now choose to spawn as a Cogscarab with - a usable slab instead of as a Reclaimer. - - bugfix: You can no longer permanently block hostile simple mobs with sandbags - and other barricades. - MrStonedOne: - - rscadd: Ghosts may now jump between the two linked servers using the new Server - Hop verb. Rather than whine in deadchat about dieing, you can just go play a - new round on the other server. - coiax: - - rscadd: Adds a new UI to slimepeople, allowing them to select more easily which - body to swap to - - rscadd: Slimepeople swapping consciousness between bodies is now visible to onlookers - - bugfix: The AI malfunction "Hostile Lockdown" power now restores the station doors - to normal after 90 seconds, rather than keeping everything shut forever. -2016-07-01: - Flavo: - - bugfix: fixed a bug where lights would not update. - Joan: - - rscadd: Clockwork Slabs now use an action button to communicate instead of the - "Report" option in the menu after using a slab. - - tweak: Clockwork Slabs now fit in pockets, the belt slot, or in the suit storage - slot(if wearing clockwork armor), where they can be used as hands-free communication. - - imageadd: Clockwork items with action buttons have a new, clockwork-y background. - - rscadd: Judicial Visors now tell the user how many targets the Judicial Blast - struck. - - soundadd: Judicial Markers now have sounds when appearing and exploding. - - tweak: Wet turfs should remain that way for slightly longer than 5 seconds now. - - rscadd: Drones and Swarmers should now sound more robotic. - - tweak: Ratvarian Spears will stun cyborgs and cultists for twice as long when - thrown; on cyborgs, this should be long enough to use Guvax on them. - - rscdel: Removed the Justicar's Gavel application scripture. - - tweak: Vitality Matrices will drain and heal 50% faster, and the base cost to - revive is 20% lower; 20, from 25. - - rscadd: Vitality Matrices will not revive or heal corpses unless they can grab - the ghost of the corpse, and will immediately grab the ghost when reviving. - - rscadd: Swarmers consuming swarmer shells now refunds the swarmer the entire cost - of the shell instead of 2% of the shell's cost. - - experiment: Application scriptures require at least 75 CV, from 50. - - experiment: Revenant scriptures require at least 4 Caches, from 3, and at least - 150 CV, from 100. - - experiment: Judgement scripture requires at least 12 servants, from 10, 5 Caches, - from 3, and at least 250 CV, from 100. - - experiment: Script and Application scripture have had their component costs and - requirements tweaked to reduce overuse of certain components. - - wip: Invoke times for a few scriptures that were instant are now very short instead. - Kor: - - rscdel: Holoparasites are no longer in the uplink - NikNak: - - tweak: Showcases are now movable and deconstructable. Wrench them to unanchor - and then screwdriver and crowbar to deconstruct. - Papa Bones: - - tweak: Security now has energy bolas available to them in their vending machines, - check them out! - bobdobbington: - - rscadd: Added skub to the AutoDrobe as a premium item. - coiax: - - rscadd: The CTF arena regenerates every round, and the blue team now shoot blue - lasers. - - rscadd: Adds some descriptions to alien surgery tools - - rscadd: The agent vest can be locked and unlocked (toggling the NODROP flag) - - rscadd: An abductor team can spend data points to purchase an agent vest (note - that only abductor agents are trained in their use) - - rscadd: The nuke disk reappears on the station in far more random locations, but - tends to re-materialise in safe pressurised areas that aren't on fire. - 'name: Lzimann': - - tweak: Mulebots with pAI cards no longer stun people -2016-07-02: - Joan: - - rscadd: Clockwork Proselytizers can now reform stored alloy into usable component - alloy when used in-hand. - - rscdel: Mending motors start with 2500W of power in alloy, from 5000. Sigils of - Transmission start with 2500W of power, from 4000. Clockwork Proselytizers start - with 90 alloy, from 100. - - rscdel: Umbras have been removed. - - rscadd: Revenants have been readded, though they are now vulnerable to salt piles. - MMMiracles: - - rscadd: Added the power fist, a gauntlet with a piston-powered ram attached to - the top for traitors to punch people across the station. Punch people into walls - for added fun. - incoming5643: - - rscadd: 'Nuke ops can now harness the power of METAL BOXES: special versions of - cardboard boxes that can take a lot of abuse and can fit the whole team if need - be. They''re not nearly as light as their cardboard brothers though...' - kevinz000: - - rscadd: Some new emojis have been added to OOC for your enjoyment. Try them out. - - rscadd: 'New emojis are : coffee, trophy, tea, gear, supermatter, forceweapon, - gift, kudzu, dosh, chrono, nya, and tophat. Type :nameofemoji: in OOC to use.' -2016-07-03: - Cruix: - - bugfix: Hand labelers can now label storage containers. - - bugfix: You can now properly resist out of wrapped lockers. - - bugfix: You can now resist out of morgues if you are in a bodybag. - - bugfix: Mechs can no longer spam doors they do not have access to. - Joan: - - tweak: Clock Cult can now happen at 24 players, same as cult. - - tweak: Clock Cult player scaling is lower; 3 people, plus one for every 15 players - above 30, from 1 for every 10 players with a player minimum of 30. - - experiment: Guvax now invokes 1 second faster(5 seconds), but is 0.75 seconds - slower for each scripture-valid servant above 5, up to a maximum of 15 seconds. - - experiment: Clockwork Slabs generate components 20 seconds slower for each scripture-valid - servant above 5, up to a maximum of 1 component every 5 minutes. - - tweak: Tinkerer's Daemons that would be useless cannot be made. -2016-07-04: - Gun Hog: - - rscadd: The Space Wizard Federation has finally begun teaching its pupils how - to properly aim the Fireball spell! - - tweak: Fireball spells, including the Devil version, are now aimed via mouse click. - It is recommended to avoid firing at anything too close, as the user can still - blow himself up! - Joan: - - rscdel: Mecha are no longer immune to ocular wardens. - Lzimann: - - rscadd: Throwing active stunbatons now has a chance to stun whoever it hits! - MMMiracles: - - rscadd: Adds space ruins. Balance not included. - - tweak: Simple mob ghosts actually work now. - - rscdel: Puzzle1 ruin removed due to issues with projectiles. - X-TheDark: - - rscadd: Switching mobs/ghosting/etc related actions during the round will now - no longer reset your hotkey settings. - Xhuis: - - bugfix: Ash storms can now occur again. - bgobandit: - - rscadd: Bluespace polycrystals, basically stacks of bluespace crystals, have been - added. The ore redemptor accepts them now. - - tweak: The ore redemptor machine should be less spammy now. - coiax: - - rscadd: The zone of hyperspace that a shuttle travels in is dynamically determined - when a shuttle begins charging its engines. This is signified by the shuttle - mode IGN. All shuttles must now charge engines before launching. This time is - already included in the emergency shuttle timer. - - rscdel: The cargo shuttle can only be loaned to Centcom while at Centcom. - - rscadd: Immovable rods now notify ghosts when created, allowing them to orbit - it and follow their path of destruction through the station. - - bugfix: Fixed bugs where no meteors would come or go from the south. Seriously, - that was a real bug. Meteor showers are now about 33% stronger as a result. -2016-07-06: - Cruix: - - bugfix: Vending machine restocking units now work. - Joan: - - rscadd: Servants should now be more aware of when scripture tiers are locked or - unlocked. - - experiment: Judicial Explosions from a Judicial Visor now mute for about 10 seconds. - MrStonedOne: - - rscadd: Instant Runoff Voting polls are now available. - RemieRichards: - - tweak: Fixes accidental buff to botany, all modifiers should now be at the point - they were at pre-bees (this does not remove, nerf or alter bees) - Xhuis: - - rscadd: The Necropolis gate now looks as regal as it should. Credit goes to KorPhaeron - for turf and wall sprites. - - bugfix: Ash storms are actually damaging now. - coiax: - - bugfix: Gulag prisoners can no longer duplicate their mining efforts through window - breaking on the shuttle. - - bugfix: Fixes pickaxes inside walls on lavaland, along with lava having eaten - one of the storage units. - - rscadd: More fire extinguishers for lavaland mining base. - - bugfix: You can now reload your gun in CTF. - - rscadd: Dying in CTF will spawn a short lived ammo pickup, which you can walk - over to reload all your weapons. - - rscadd: If reduced to critical status in CTF, you will automatically die, so you - no longer have to succumb or be coup de graced. If you are conscious, you will - now heal slowly if some damage got through your shield and didn't crit you. - - bugfix: The tesla now dusts all carbon mobs on the turf that it moves to, grounding - rod or no. - coiax, Niknakflak: - - rscadd: Added fireplaces, fuel with logs or paper and set on fire and enjoy that - warm comforting glow. - - bugfix: Cardboard cutouts are now flammable. - - rscadd: Cigarettes, fireplaces and candles now share a pool of possible igniters. - So you can now esword that candle on, but turn it on first. - - rscadd: Eswords will ignite plasma in the air if turned on. - kevinz000: - - tweak: Kudzu is no longer unstoppable - optional name here: - - bugfix: Suit Storage Units can now disinfect items other than living and dead - creatures. -2016-07-09: - CoreOverload: - - rscadd: You can remove jetpack from a hardsuit by using screwdriver on it. - Crazylemon: - - bugfix: The map loader no longer resets when reading another map mid-load - Goofball Sanders: - - rscadd: Added a new plant to the game to encourage the Chef to be a more relevant - job, alongside a recipe for a food related to it. Throw a cannabis leaf on a - table and check the recipes list to find it. - Gun Hog: - - rscdel: Malf (Traitor) AI's Fireproof Core ability has been removed, as it was - entirely obsolete. - - rscadd: Nanotrasen is proud to announce that conveyor belts can now be fabricated - at your station's autolathes! - Iamgoofball: - - bugfix: Fixes the Atheist's Fedora's throw damage. - Joan: - - rscadd: Tips for Clock Cult may now show up. - - experiment: The global component cache can only be accessed by clockwork slabs - if there is at least one Tinkerer's Cache active. - - rscadd: Ratvarian Spears are now sharp and can be used to cut off limbs or butcher - mobs. - - rscadd: Clock Cult silicons get an action button to communicate with other servants. - - tweak: Clockwork Slabs now produce a component every 1 minute, 30 seconds, from - every 1 minute. - - experiment: The slab production time gain from each servant above 5 has been increased - from 20 seconds to 30 seconds, and the maximum production time has been increased - from 5 minutes to 6 minutes. - - rscadd: You can now transfer components between two clockwork slabs by attacking - one slab, or a person holding a slab, with the other; this will transfer the - attacking slab's components into the target slab. - - tweak: Application scripture now requires 100 CV, from 75, Revenant scripture - now requires 200 CV, from 150, and Judgment scripture now requires 300 CV, from - 250. - - experiment: However, converted windows, windoors, airlocks, and grilles will all - provide some CV. - Lzimann & Keekenox: - - rscadd: You can now craft a baseball bat with 5 sheets of wood! - MrStonedOne: - - experiment: Atmos on planets is now more realistic. There is an unseen upper atmosphere - that gas changes get carried away into, causing planet turfs to revert back - to their original gas mixture. - - tweak: This should massively improve atmos run speed as all of lavaland won't - be processing the moment somebody opens a door anymore - MrStonedOne, coiax: - - rscadd: View Variables can expand on associated lists with type keys. Only 90s - admins will truely understand. - RemieRichards: - - rscadd: Added a Compact mode to the crafting tgui - - tweak: Modified the back end of the crafting tgui so that it has well let's just - say "a lot less" calls to certain functions, should lag a little less but don't - expect miracles (you'd have to wait till we get a new version of ractive for - those!) - coiax: - - rscadd: Podpeople (and venus human traps) are now no longer damaged, poisoned - or obstructed by space vines. Explosive vines still damage them, because there's - an actual explosion. - - rscadd: During a meteor shower, observers can automatically orbit threatening - meteors via an action button and watch them hit the station. - - rscadd: Added Major Space Dust event, which is a meteor shower containing only - space dust. - - bugfix: Fixes bug where meteors wouldn't move when spawned. - - rscadd: Meteor Shower split into three different events, Normal, Threatening and - Catastrophic. They all have the same crew messages, but admins can tell the - difference. - - bugfix: Damage to a shuttle while it is moving will now correctly make transit - space turfs, rather than non-moving space. - - rscadd: AIs get a notification when hacking an APC, which can be clicked to jump - your camera to the APC's location. AIs also get notification sounds when a hack - has completed or failed. - - rscadd: Nuclear bombs now use a more accurate timer system, the same as gang dominators - and shuttles. - - rscadd: Nuclear bombs now have a TGUI interface. - - rscdel: Fleshmend no longer regrows lost limbs. - - rscadd: Added free Regenerate power to changelings, which regrows all external - limbs and internal organs (including the tongue if you lost your head). It costs - 10 chemicals to use. - - rscadd: Fleshmend now costs 20 chemicals, down from 25. - - tweak: Changeling revive power name changed from Regenerate to Revive. - - rscadd: When a player uses a communication console to ask for the codes to the - self destruct, for better or for worse, the admins can set them with a single - click. Whether the admins a) click the button b) actually give the random person - the codes, is another thing entirely. - - rscadd: Servants of Ratvar get an alert if they have no tinkerer's caches constructed. - Because it's important that they should. -2016-07-11: - Iamgoofball: - - bugfix: Fixes Nicotine's stun reduction - Joan: - - tweak: The Function Call action that summons a Ratvarian Spear is no longer one-use; - instead, it can be reused once every five minutes. - - experiment: Clockwork Walls and Floors will appear as normal walls and plating - to mesons, respectively. - coiax: - - tweak: Syndicate bombs now use a more accurate timer. - - bugfix: Fixed a separate bug that caused bomb timers to take twice as long (ie. - 60 seconds took 120 seconds) - - tweak: The AI doomsday device timer is more accurate. - - bugfix: Fixes a bug where the doomsday device would take twice as long as it should. - optional name here: - - bugfix: The search function on security records consoles now works. -2016-07-12: - MMMiracles: - - bugfix: Hotel staff can now actually use their own lockers. - RemieRichards: - - bugfix: fixed Kor's plant disguises - - bugfix: fixed some issues with Alternate Appearances not being added/removed - hornygranny: - - bugfix: Attacks will no longer miss missing limbs -2016-07-14: - Basilman: - - rscadd: Added a new hairstyle "Boddicker" - Bawhoppen: - - rscadd: Added two new materials, Titanium and plastitanium. Titanium is naturally - occuring, and plastitanium is an alloy made of plasma and titanium. - - rscadd: These materials can be used to build shuttle walls and floors, though - this serves no current purpose. - CoreOverload: - - rscadd: Some clothing has pockets now. - Firecage: - - tweak: Mechas can no longer pass through Plastic Flaps - Fox McCloud: - - bugfix: Fixes borg stun arm not having a hitsound, bypassing shields, and not - doing an attack animation - - bugfix: Fixes simple mobs not properly having armor penetration - Joan: - - rscadd: Added dextrous guardians to the code, able to hold and use items and store - a single item within themselves. - - experiment: Dextrous guardians do low damage on punches, have medium damage resist, - and recalling or leashing will force them to drop any items in their hands. - Kor: - - tweak: Shuttle travel time has been shortened from 25 seconds to 6 seconds - Lzimann: - - tweak: Alt clicking a jumpsuit now removes the accessories(if there's any)! - Papa Bones: - - tweak: Security's lethal injections are actually lethal now. - Xhuis: - - rscadd: Nanotrasen electricians have introduced a software update to all licensed - pinpointers. The new pinpointers are more responsive and automatically switch - modes based on the current crisis. - - rscadd: It should be noted that some of these pinpointers have been reported as - missing from their distribution warehouse and are presumed to have been stolen. - This is likely nothing to worry about. - lordpidey: - - tweak: Infernal jaunt now has a cooldown, to prevent trying to jaunt while already - jaunting. This should have no practical changes. - - bugfix: Infernal jaunt no longer occasionally leaves you permanently on fire. - - bugfix: Pitchforks no longer burn devils and soul-sellers, as intended. -2016-07-15: - Cheridan: - - rscadd: Added an aesthetic new space ruin -2016-07-16: - Gun Hog and WJohnston: - - rscadd: Aliens (Xenos) now have the ability to sense the direction and rough distance - of their queen! - Iamgoofball: - - bugfix: Fixed the lag when opening the foodcrafting menu by splitting everything - up into categories. - Joan: - - rscadd: Cogscarabs(and other nonhuman mobs able to hold clockwork slabs) can now - check the stats of the clockwork cult by using a clockwork slab. They remain - unable to use slabs under normal conditions. - MrStonedOne: - - experiment: Added a system to detect when stickybans go rogue and revert all recent - matches. -2016-07-18: - CoreOverload: - - rscadd: Sterilizine now reduces probability of step failure if you apply it after - starting surgery. Useful while operating in less-than-perfect conditions. - - rscadd: Potent alcohol can be used as replacement for sterilizine. - Joan: - - experiment: The Vanguard scripture no longer prevents you from using slabs while - active, but you cannot reactivate it if it is currently active. - - tweak: It now only lasts 20 seconds, instead of 30. - - tweak: When Vanguard deactivates, it now stuns for half the time of all stuns - absorbed, instead of all of them. - - tweak: Invoking Sevtug is less potent at long ranges, and slightly more potent - if extremely close. - - experiment: Invoking Sevtug now requires 3 invokers instead of 1. - - rscadd: The Clockwork Slab now has action buttons for rapidly invoking Guvax and - Vanguard. - - tweak: Belligerent is now chanted more often. - - experiment: Taunting Tirade now weakens nearby nonservants, but is now only invoked - once every 6 seconds(1 second chant, 5 second flee time) and is only chanted - five times. - lordpidey: - - rscadd: Flyswatters are now included in beekeeping crates, they are great at killing - insects and flies of all sizes. -2016-07-19: - Joan: - - tweak: Cogscarabs can no longer pass mobs and have slightly less health. - - experiment: The Gateway to the Celestial Derelict can now take damage from bombs. - RemieRichards: - - rscadd: Added VR Sleepers that allow users to enter a virtual body in a virtual - world (Currently not mapped in ;_;) - Xhuis: - - rscadd: Added communication intercept texts for gamemodes that were missing them. - - tweak: Changed all intercept texts and improved grammar for a lot of key game - code. - - rscdel: The shuttle can now leave while a celestial gateway exists. - - rscadd: If the shuttle docks at Central Command while a celestial gateway exists, - Ratvar's servants will win a minor victory. His arrival will still award a major - victory. - - rscadd: The celestial gateway can now take damage from explosions. -2016-07-22: - Bawhoppen: - - rscadd: Titanium now spawns in mining again. - - rscadd: It has uses in R&D and robotics production. - - rscadd: All shuttle walls are now using a new proper smoothing path. Mappers please - make sure to use this path correctly in the future. (along with tiles) - Cheridan: - - rscadd: Added another space ruin. - Cruix: - - bugfix: Camera bugs can now show camera views. - - bugfix: The chameleon masks in the chameleon kit can once again have their voice - changers toggled. - Incoming5643: - - rscadd: You now have the ability to automatically "back out" of a round if you - miss your chance at all the jobs you have set to low or higher. This is found - on the toggle at the bottom of the jobs window - - rscadd: Due to a quirk of game mode code this option will fail to work if you've - been selected as an antag (what a tragedy!) In this situation, you'll be assigned - a random job. - Joan: - - bugfix: You can now throw items and mobs over chasms without causing them to drop. - - bugfix: You can now throw items over lava without burning them. Mobs will still - burn, however. - - experiment: Tinkerer's Caches now link to a nearby unlinked clockwork wall, and - will not generate components unless linked. As compensation, they will link - to nearby walls(and can generate components) in a larger area. - - wip: Guvax is now slightly slower when above 5 valid servants; 1 additional second - of invoke time for each one above 5, from 0.75 additional seconds, up to a maximum - of 20 seconds of invoke time, from 15 seconds. - - tweak: Sigils of Transgression now stun for about 7 seconds. - - experiment: Sigils of Submission/Accession now take 7 seconds to convert successfully, - and have an obvious message to the person on them that their mind is being invaded. - - tweak: Ocular Wardens do 17% less damage. - - tweak: Mania Motors cause less brain damage and hallucinations. - - rscadd: If you lack the components to recite a scripture, you will be informed - of how many components that scripture requires. - - experiment: Tinkerer's Caches now cost an additional one of each non-alloy component - to construct for every three existing Tinkerer's Caches, up to a maximum of - 5 of each non-alloy component. - - rscadd: Revenant scriptures now announce to all servants and ghosts when used - instead of having a visible message. - Lzimann: - - tweak: Blood packs are now back in surgery room. - MMMiracles: - - rscadd: A giant wad of paper has been seen hurling through the nearby sector of - SS13, officials deny existence of giant paper ball hurling through space because - 'thats really fucking stupid'. - MrStonedOne: - - bugfix: Fixes super darkness from lighting creating two darkness overlays on the - same turf but only changing the darkness of one of the overlays - PKPenguin321: - - rscadd: Added Canned Laughter for the clown. Hehehe - RemieRichards: - - tweak: Auto-generated ratvarian now follows all the rules of hand-written ratvarian, - but you probably won't notice. - Shadowlight213: - - tweak: Angels can now equip satchels - - rscadd: Players will now receive an achievement for killing their first megafauna - after this point. - - rscadd: Additionally, megafauna kills are now tracked on a hub page. Rack up those - kills for first place! - Xhuis: - - rscadd: Clockwork cultists may now have the "Escape" and "Silicon" objectives, - requiring a certain amount of servants to escape on the shuttle and all silicons - to be converted respectively. - - rscadd: Ocular wardens are now forced to target bibles rather than the people - holding them. -2016-07-28: - Cruix: - - bugfix: Fixed a bug where some objects in photos would not be displayed if they - were facing a certain direction. - - bugfix: Photograph descriptions will no longer claim that mobs with low max health - are hurt when they are not. - Incoming5643: - - rscadd: The previously underwhelming viscerator robot has been made a lot more - terrifying by the new ability to proactively target and dismember limbs. - Joan: - - tweak: The Tinkerer's Cache cost increase for having multiple Tinkerer's Caches - now happens every 5 caches, from every 3. - - experiment: If the invoker of Nzcrentr is knocked unconscious or killed, they - will gib instead of producing a lighting blast. - - tweak: Anima Fragments slow down for slightly less time when hit. - - tweak: Clockwork Marauders do 1 more damage on every attack. - - tweak: Wraith Spectacles are now less hard on the eyes, and can be used without - permanent vision impairment for about 50% longer; from 40~ seconds to about - 1 minute. - - tweak: Halves the Interdiction Lens' disrupt cost from 100 per disrupted object - to 50 per disrupted object. - - tweak: Clockwork Sigils will now be destroyed by any level of explosion, except - for Sigils of Transmission, which will gain a small amount of power if hit by - a light explosion instead of breaking. - - bugfix: Clockwork Structures will now properly take damage from explosions instead - of variably not taking damage or instantly being destroyed. - - rscadd: Ghosts can now click Spatial Gateways to teleport to the other gateway. - - bugfix: Spatial Gateways are now properly disrupted by devastating explosions(but - not heavy or light explosions) - - rscadd: Striking a Sigil with any damaging item as a non-servant will remove it. - Servants still need to be on harm intent with an empty hand to remove Sigils. - Kor: - - rscadd: The Staff of Storms, dropped by Legion, can now be used on station. - MMMiracles: - - rscadd: Adds jump boots, a mid/end-tier mining equipment that allows the user - to dash over 4-wide chasms. - ModernViolence: - - bugfix: Hulk now has default cooldown for melee attacks against dominator - MrStonedOne: - - tweak: Space wind (movement from pressure differentials (like a hole to space)) - has been improved. - - tweak: Space wind's rate of movement now scales with pressure differential amount. - - experiment: Actively moving (as in holding down a move key) reduces chance/rate - of getting moved by space wind. - - rscadd: 'Having a wall or dense anchored object to your left or right will lower - the chance/rate of getting moved by space wind for each direction (IE: a wall - on both sides of you will be a double reduction)' - - rscadd: Added Lazy airlock cycling. Bump opening an airlock with this system will - close its partner. This system has been added to most airlocks that go to space - on boxstation, as well as airlocks to secure areas like brig, bridge, engine. - - tweak: This can be overridden by click opening, having a shuttle docked, or setting - emergency mode on one of the doors. - PKPenguin321: - - bugfix: Laughter no longer makes you laugh if you're muted. - - rscadd: Laughter can now be brewed with banana juice and sugar. - Thunder12345: - - rscadd: An old rapier was found rusting in the back of a closet. We cleaned it - up, polished it, and assigned it to your captain as a ceremonial weapon only. - Warranty void if used in combat. - incoming5643: - - tweak: viscerator grenades are now more generous with viscerators spawned -2016-07-30: - astralenigma: - - bugfix: Admins can now turn people into red god. -2016-07-31: - Arctophylax: - - bugfix: Birdboat's atmospheric tanks now function normally again. - - bugfix: Birdboat's TEG is now orientated to match the pipe layout. - Bawhoppen: - - tweak: toolboxes fit in backpacks - Gun Hog: - - rscadd: In an effort to reduce the demoralizing effects that accompany the death - of a crew member, Nanotrasen has provided the prototype designs for the Sad - Trombone implant. It can be fabricated at your station's protolathe, if you - manage to secure the ever elusive Bananium ore. - Joan: - - rscadd: Megafauna will now seek and consume corpses of enemies to heal or otherwise. - - tweak: Toolboxes are slightly more robust. - - tweak: Vanguard now only stuns for 25% of absorbed stuns, from 50%. - Kor: - - rscadd: Hostile mobs will now attack turrets. - Robustin: - - rscdel: Amber ERT Commanders no longer have thermal goggles - lordpidey: - - rscadd: Added Devil agent gamemode, where multiple devils are each trying to buy - more souls than the next in line. - - rscadd: If you've already sold your soul, you can sell it again to a different - devil. You can even go back and forth for INFINITE POWER. -2016-08-01: - Bawhoppen: - - rscadd: Added crowns. Make them from gold. Cap gets a fancy one. - Fox McCloud: - - rscadd: Adds in generic uplink refund system that potentially allows for even - regular traitors to refund uplink items - Joan: - - rscadd: Soul Vessels can now be used on unconscious or dead humans to extract - their consciousness, much like a soulstone. - - tweak: Soul Vessels no longer automatically ping ghosts when created, though they - can still be used in-hand to ping ghosts. - - rscadd: Soul Vessels can now communicate over the Hierophant Network - - experiment: Xenobiology golems enslaved to someone will become convertable if - their enslaver is converted to the enslaving antag type; this applies to gang - and both cult types. - oranges: - - rscdel: Reverted toolboxes fitting in backpacks due to being incorrectly merged -2016-08-02: - CoreOverload: - - rscadd: Pockets in coats! -2016-08-05: - Arctophylax: - - bugfix: The Emergency Medical and Winter Wonderland Holodeck programs work once - again. - Cruix: - - bugfix: RCDs can no longer place multiple grilles on the same tile. - - bugfix: RCDs will no longer use all their ammo if you try to build a wall on the - same turf multiple times. - - tweak: RCDs will now inform their user if they do not have enough ammo to complete - an operation. - Incoming5643: - - rscadd: Parrots have been made more robust. - Joan: - - rscadd: Clockwork Constructs, including anima fragments, marauders, and reclaimers, - can now communicate over the Hierophant Network. - - rscadd: Plasma cutters(normal, advanced, and mech) now have double range in low - pressure areas, but slightly lower range in high pressure areas. - - rscadd: Vitality Matrices will consume dead non-servant mobs to gain a large amount - of Vitality. This doesn't work on mobs that did not have a mind at some point. - Lordpidey and PKPenguin321: - - rscadd: Recent studies have revealed that fly amanita can give you a huge trip. - Lzimann: - - tweak: Holy water no longers makes you confused. - ModernViolence: - - bugfix: 'Photocopier fixes: proper sprites for not empty copies; removing originals - now does not delete them' - PKPenguin321: - - rscadd: Chef, do your station a favor and make a home run baseball burger (TM) - Robustin: - - rscadd: The initial supply talisman can now be used to create runed metal, 5 per - use - - rscadd: The void torch is now available from the altar, use it to transport any - item instantly to any cultist! It appears alongside the veil shifter as part - of the "Veil Walker" set. - - rscadd: Cult floors no longer appear on mesons! - - tweak: Flagellant's Robes now increases damage taken by 50%, down from 100% - - tweak: Veil Shifter has 4 uses, up from 2 - - tweak: Shuttle curse now delays shuttle 3 minutes, up from 2.5 minutes - - tweak: Cult forges, archives, and airlocks have had their cost reduced by 1 runed - metal each - Shadowlight213: - - rscadd: You will now receive an achievement for winning a pulse rifle at the arcade. - TheCarlSaganExpress: - - rscadd: Added lighting effects to the welder. -2016-08-07: - Arctophylax: - - bugfix: You can unbuckle mobs from meat spikes by clicking on the spike once again. - Joan: - - tweak: Barrier runes will now block air while active. - - rscadd: Trying to use sleeping carp against the colossus will now anger it. - frtbngll: - - bugfix: Fixed Paper Wizard summoning only 9 minions in its lifespan by making - the dead stickman decrease it's summoned_minions variable - lordpidey: - - bugfix: Centcom has received reports of cyborgs electrocuting themselves when - working on the power grid, and we have decided to stop storing important electronics - on the wirecutter's blade. -2016-08-08: - Ergovisavi: - - rscadd: Added bonfires to botany. Requires five tower cap logs to create, and - mobs can be buckled to them if an iron rod is added to the bonfire and the mob - is restrained. - Joan: - - rscadd: Added the clockcult "Global Records" alert, which clock cultists can mouse - over to check a variety of information on the clockcult's status, including - living servants, number of caches, CV, tinkerer's daemons, if there's an unconverted - AI, what clockwork generals can be invoked, and what scripture is unlocked. - Shadowlight213: - - rscadd: Ghosts can now see human player's huds when using the OOC -> Observe verb - WJohnston, Gun Hog: - - tweak: Xenos are now considered female. - - tweak: Hunter pounce are now always blocked by shields, and may be blocked more - often by other protective items. - - tweak: Alien Queen is now somewhat faster. - - tweak: Adjusted larva growth sprites. - - tweak: Removed 20% facehugger failure chance for masks. - - tweak: Disarm now always forces a person to drop an item in the active hand, and - if a person's hand is empty/undroppable, Disarm will always result in a tackle. - - tweak: Cyborgs disarmed by a Xeno will first disable their selected module, and - if there is none selected, the cyborg will be pushed back and stunned. - - tweak: Tail Sweep now has a slightly longer stun. -2016-08-10: - Cruix: - - rscadd: Sentient minebots can now toggle meson vision, a flashlight, their mode, - and dump their stored ore. - - bugfix: Sentient minebots can now be repaired if they were made sentient while - the AI was active. - - bugfix: Healing minebots will no longer switch them to attack mode. - - tweak: Sentient minebots can now shoot at humans. - - bugfix: The cooldown on wizard lightning will no longer break if you ethereal - jaunt or RISE! after the initial cast. - Kor: - - rscadd: You can now detonate drones with the RD console - LanCartwright: - - rscadd: Acute respiratory distress syndrom symptom. - - rscadd: Toxic metabolism. - - rscadd: Alkali perspiration - - rscadd: Autophagocytosis Necrosis - - rscadd: Apoptoxin filter - - rscadd: 3 different lategame/Non-roundstart virus reagents - - rscadd: 4 different lategame/Non-roundstart virus recipes - MrStonedOne: - - tweak: Tweaked space wind, it should now only trigger at higher pressure differences, - but be quicker to become aggressive as the pressure difference gets higher. - This should alleviate issues where small differences was still moving a lot - of things. - - tweak: Paper still moves with any pressure difference. - PKPenguin321: - - rscadd: There's now an achievement for managing to examine a meteor as a living - mob! - RemieRichards: - - rscadd: 'Added a new PDA button/app: Drone Phone!' -2016-08-14: - Cheridan: - - tweak: Greatly reduced amount of Hydroponics yield multipliers - - tweak: Somewhat reduced gaia'd tray sustainability. - - tweak: Mutagen will no longer potentially cause plant instadeath based on RNG. - Ergovisavi: - - tweak: Watchers no longer randomly fire beams at you when damaged, and no longer - beam you at point blank. - Gun Hog: - - tweak: The AI's Crew Manifest button now uses the updated styling. - Joan: - - rscadd: Sigils of Transgression now glow brightly when stunning a target. - - rscadd: The Global Records alert now shows the location and countdown time of - the Gateway to the Celestial Derelict. - - tweak: Clockcult tooltips now all have the clockcult tooltip style. - - rscdel: You can no longer become a Reclaimer when clicking on Ratvar. You can - still become a Cogscarab, however. - - bugfix: You can no longer invoke Vanguard while under its effects. - - bugfix: Servants of Ratvar should now always get an announcement when scripture - states change. - - tweak: Function Call can be used to summon a Ratvarian Spear once every 3 minutes, - from 5, but the spear summoned will now only last 3 minutes. - - rscadd: Belligerent now does minor damage to the legs on each invocation, up to - a maximum of 30 damage per recital. - - tweak: Ratvarian Spears will now stun any mob they're thrown at instead of just - enemy cultists and silicons, though the stun is still longer on enemy cultists - and silicons. - Jordie0608: - - rscdel: Removed clicking clown mask to morph it's shape, use action button instead. - Kor: - - rscadd: Added support for projectiles which can dismember - - rscadd: Added a new wizard sword, the spellblade, which fires dismembering projectiles. - Sprites from Lexorion. - - rscadd: Plasmacutter blasts can now take limbs off, but they still do pitiful - damage in a pressurized environment. - - rscadd: Humans and drones now have a UI button that allows them to create new - areas, in the same manner as blueprints. Unlike blueprints, this button does - not allow you to edit existing areas. - - rscadd: You can now use mineral doors (or any other object that blocks atmos) - to complete rooms with blueprints - - rscadd: Players created by sentience potions, mining drone upgrades, or Guardian/Holoparsite - summoners will now automatically join the users antagonist team, if any. - - rscadd: Mobs created in this manner will no longer be convertable/deconvertable - unless their creator is first converted/deconverted. - - rscadd: Cayenne will now officially become an operative when given a sentience - potion. - LanCartwright: - - bugfix: Fixes the recipes not working. - - tweak: Changes Stable uranium virus food recipe from Plasma virus food to just - plasma. - RemieRichards: - - bugfix: You can no longer use the incorrect limb type during augmentation - - bugfix: You can no longer use the incorrect limb type during prosthetic replacement - Shadowlight213: - - rscadd: Security has two new weapons in their arsenal. The security temperature - gun, and the DRAGnet capture and recovery system. - optional name here: - - bugfix: The syndicate uplink ui has been refactored to majorly reduce lag -2016-08-15: - Joan: - - rscadd: The Ark of the Clockwork Justicar can now be constructed even if Ratvar's - rise is not the objective. - - experiment: Accordingly, its behavior is different; instead of summoning Ratvar, - it will convert a massive amount of the station, and should effectively instantly - complete the clockwork cult's objectives. - MrStonedOne: - - tweak: Tweaked the lag stop numbers to hopefully reduce lag during 80+ population - - tweak: Fixed the blackbox not blackboxing. - OSCAR MIKE: - - rscadd: CONTACT ON THE LEFT SIDE! -2016-08-16: - MrStonedOne: - - rscadd: Automated the granting of profiler access to admins - oranges: - - rscadd: Nanotrasen is an all right kind of company -2016-08-17: - Basilman: - - rscadd: Added an admin-spawnable only "Cosmohonk" hardsuit that has the same protection - values of an engineering hardsuit. Comes with built-in lights and requires clown - roundstart role to be equipped. - Ergovisavi: - - rscadd: Adds the "Proto-Kinetic Crusher", a new melee mining weapon. Available - at a mining vendor near you! - Gun Hog: - - tweak: Nanotrasen has improved the coolant system in the stations automated robots. - They will no longer violently explode in hot rooms. - Joan: - - rscadd: Once the blob alert message is sent in the blob game mode, all mobs get - to see how many tiles the blob has until it wins, via the Status tab. - - rscdel: Removed/merged a bunch of blob chems, you probably don't care about the - specifics. - - tweak: The remaining blob chems should, overall, be more powerful. - - tweak: Shield blobs soak brute damage less well. - - tweak: Flashbangs do higher damage to blobs up close, but their damage falls off - faster. - - experiment: Shield blobs now cost 15 resources to make instead of 10. Node blobs - now cost 50 resources to make instead of 60. - - experiment: Expanding/attacking now costs 4 resources instead of 5, and blobs - can now ATTACK DIAGONALLY. Diagonal attacks are weaker than normal attacks, - especially against cyborgs(which may be entirely immune, depending), and they - remain unable to expand diagonally. - - rscadd: Shield blobs no longer block atmos while under half health. Shield blobs - are still immune to fire, even if they can't block atmos. - - tweak: Blobs should block explosions less well. - - rscadd: Blob cores and nodes are no longer immune to fire and no longer block - atmos. - - rscadd: Blobs can only auto-expand one tile at a time per expanding thing, and - should be easier to beat back in general. - - tweak: Blobbernauts now attack faster. - - tweak: Blob Overminds attack mobs slower but can attack non-mobs much faster. - - rscadd: Blob Overminds start with some amount of resources; in the gamemode, it's - 80 divided by the number of overminds, in the event, it's 20 plus the number - of active players, and otherwise, it's 60. - - bugfix: You can no longer move blob cores into space, onto the mining shuttle, - white ship, gulag shuttle, or solars. - - bugfix: Blob rounds might be less laggy, if they were laggy? - - tweak: Blobs don't heal as fast, excluding the core. - - experiment: Blobs are marginally less destructive to their environment. - MrStonedOne: - - rscdel: The server will no longer wait until the next tick to process movement - key presses. Movements should now be ~25-50ms more responsive. - Shadowlight213: - - rscadd: Adds modular computers -2016-08-21: - Ergovisavi: - - tweak: Consolidates the fulton packs into a single item and makes them more user - friendly - Google Play Store: - - spellcheck: Minor Text Fixes. - Incoming5643: - - rscadd: Smuggler satchels left behind hidden on the station can now reappear in - a later round. - - experiment: There's absolutely no way of knowing when exactly it will reappear - however... - - rscadd: Only one item in the satchel will remain when the satchel reappears. - - rscadd: Items are saved in their initial forms, so saving things like chemical - grenades will only disappoint you. - - rscadd: The item pool is map specific and needs to be a certain size before satchels - can start reappearing, so get to hiding that loot! - - rscadd: The staff of change has been expanded to turn you into even more things - that don't have hands. - Jalleo: - - bugfix: Gulag Teleporter of two issues any more please report them. - Jordie0608: - - rscadd: Advanced Energy Guns once again have a chance to irradiate you if EMPed. - Kor: - - rscadd: Kinetic Accelerators are now modular. You can find mod kits in the mining - vendor and in RnD. - - bugfix: Chaplain's dormant spellblade is no longer invisible. - Papa Bones: - - rscadd: A new, scandalous outfit is now available as contraband from the clothesmate - vendor, check it out! Fulfill your deep, dark fantasies. - Shadowlight213: - - tweak: Service and cargo have lost roundstart tablets and engineering has gained - them - - tweak: you can now charge battery modules in cell chargers. Use a screwdriver - on a computer to remove them. As a note, tablets and laptops can be charged - directly by placing them in a security charger. - WJohnston: - - rscadd: Metastation and Boxstation now boast auxillary mining construction rooms - in arrivals. These allow you to build a base and then launch it to wherever - you want on lavaland. - Wjohnston, Gun Hog: - - rscadd: Aliens with Neurotoxic Spit readied will now have drooling animations. - - rscadd: Hunters may now safely leap over lava. - - tweak: Hulk punches no longer stun Xenos. - - tweak: Alien evolve and promotion buttons updated to current Xeno sprites - - bugfix: Handcuff sprites for Xenos now show properly. -2016-08-22: - Bawhoppen: - - rscdel: Stock computers have been temporarily removed due to imbalances. - Ergovisavi: - - bugfix: Bubblegum's charge indicator should be significantly more accurate now. - ExcessiveUseOfCobblestone: - - rscdel: Reverts getting partial credit for discovered seeds. - - tweak: 'Tweaks Money Tree Potency Values [For instance: 1000 Space Cash requires - 98-100 Potency]' - Lzimann & Lexorion: - - rscadd: Adds a bow to the game, currently not craftable - Shadowlight213: - - bugfix: The efficiency AI sat SMES will now charge the APCs instead of itself. - XDTM: - - rscdel: Removed the Longevity symptom. - - rscadd: Added Viral Aggressive Metabolism, which will make viruses act quickly - but decay over time. - - rscadd: Cloning can now give bad mutations if unupgraded! - - rscadd: Cloning can, however, give you good ones if upgraded! -2016-08-24: - Bones: - - rscadd: The detective's closet now contains a seclite, get sleuthing! - Cargo Intelligence Agency: - - rscdel: You don't get to bring traitor items. - Ergovisavi: - - rscadd: Adds "Sacred Flame", a spell that makes everyone around you more flammable, - and lights yourself on fire. Share the wealth. Of fire. - - tweak: Replaces the fireball spellbook as a possible reward from a Drake chest - with a book of sacred flame. - Gun Hog: - - rscadd: The Aux mining base can now call the mining shuttle once landed! The mining - shuttle beacon that comes with the base must be deployed to enable this functionality. - - tweak: Multiple landing zones may now be set for the mining base. - - tweak: The coordinates of each landing zone is shown in the list. - - rscadd: Miners now each get a remote in their starting lockers. tweak The Aux - mining base now requires lighting while on station. - - tweak: The Aux Mining Base now has a GPS signal. - - tweak: The Aux Mining Base now has an alarm for when it is about to drop. - Incoming5643: - - rscadd: 'A slight change to the secret satchel system described below: If a satchel - cannot be spawned due to there not being enough hidden satchels to choose from, - a free empty satchel will spawn hidden SOMEWHERE on the station. Dig - it up and bury it with something interesting!' - Joan: - - rscadd: Using a resonator on an existing resonator field will immediately detonate - that field. Normal resonators will reduce the damage dealt to 80% of normal, - while upgraded resonators will not reduce it at all. - - rscadd: Adds a KA mod that does damage in an AoE, found only in necropolis chests. - - rscadd: You can now install any KA mods into a mining cyborg, though its mod capacity - is slightly lower. - - tweak: Mining cyborgs now have a crowbar to remove mods from their KA. - - tweak: Kinetic Accelerators now have a larger mod capacity, though most mods can - still only be installed the same amount of times as they can currently. - - tweak: You can now hit modkits with Kinetic Accelerators to install that modkit - into the accelerator. Mining cyborgs are unable to do so. - - rscadd: Added white and adjustably-coloured tracer round mods to the mining equipment - vendor, so you can see where your projectile is going(and look cool). - - rscadd: Added the super and hyper chassis mods to the mining equipment vendor, - so you can use excess mod space to have a cool-looking KA. - MrStonedOne: - - rscdel: Removes check on lights preventing you from turning them on while in a - locker - PKPenguin321: - - rscadd: Xeno queens now have an action button that makes them appear to themselves - as the old, small queen sprite. Now they should be able to interact with things - that are above them more easily. - Shadowlight213: - - tweak: Reviver and nutriment implants are far easier to get and have lower tech - origins. - - rscdel: Centcom has cut back on their cat carrier budget and will now only be - able to bring kittens along with runtime. - - rscadd: A new event has been added. The automated grid check. All apcs in non - critical areas will be shut off for some time, but can be manually rebooted - via interaction. - Yackemflam: - - tweak: Boxes are worth >26 tc at LEAST -2016-08-28: - CoreOverload: - - tweak: You can now use sheets from any hand, not just the active one. - Iamgoofball: - - tweak: Station and Character names are now allowed to be longer. - - rscdel: Gender Reassignment surgery has been removed. - Incoming5643: - - experiment: 'Due to a bad case of "being terrible" the save system for secret - satchels has been reworked. All saves are now unified in a single data file: - /data/npc_saves/SecretSatchels' - - rscdel: 'Old savefiles such as: /data/npc_saves/SecretSatchels_Box Station can - now be safely removed.' - - rscadd: A new slime reaction has been found for pink slimes using blood. The potion - produced from this reaction can be used to change the gender of living things. - Decently useful for animal husbandry, but otherwise mostly just for pranks/"""roleplay"""/enforcing - a brutal regime composed entirely of female slime people. - Joan: - - bugfix: Bumping the AI on help intent will no longer cause it and you to swap - positions, even if it is unanchored. If unanchored, it will properly push the - AI around. - - rscadd: The staff of lava can now turn lava back into basalt. - - bugfix: Placing a singularity or energy ball generator directly in front of an - active particle accelerator may be a bad idea. - Kor: - - rscadd: Added Battlemage armour to the spellbook. The armour is heavily shielded, - but will not recharge once the shields are depleted. - - rscadd: Added armour runes to the spellbook, which can grant additional charges - to the Battlemage armour. - MrStonedOne: - - rscadd: The game window will now flash in the taskbar on incoming admin pm, and - to all admins when an admin help comes in. - PKPenguin321: - - rscadd: The tesla is now much more dangerous, and can cause electronics to explode - violently. - - rscadd: It now hurts to get thrown into another person. - Shadowlight213: - - tweak: The radiation storm random event will automatically enable and disable - emergency maint. - - rscadd: The radiation storm random event is now a weather type that affects the - station. - - bugfix: The security temperature gun now has a firing pin making it 0.0000001% - more useful! - - rscadd: Added config option to use byond account creation age for job limits. - WJohnston: - - imageadd: Lavaland lava probably sorta looks better I guess. - Yackemflam: - - rscadd: Sniper kit have been given as a syndicate bundle set. Be warned though, - they are not as equipped as the nuclear agent kits. - kilkun: - - rscadd: Adds a shielded deathsquad hardsuit. it has four charges and recharges - after 15 seconds of not being shot (compared to the syndicate 3 charges and - 20 second recharge rate) - - tweak: All death commandos now spawn with this new hardsuit. The previous hardsuit - was not removed. - pubby: - - rscadd: Mining scanner module to standard borgs - - rscdel: Sheet snatcher module from standard borgs - xxalpha: - - rscadd: Cigarette packs, donut boxes, egg boxes can now be closed and opened with - Ctrl+Click. - - rscadd: Lighters are now represented in cigarette packs with a sprite of their - own. - - rscadd: You can now remove a lighter from a cigarette pack quickly with Alt+Click. - - bugfix: Reduced the amount of cigars that cigar cases can hold to 5 because the - cigar case sprite doesn't support more than that. -2016-08-29: - Cruix: - - rscadd: Space floppy-disk technology has advanced to the point that multiple technologies - or designs can be stored on a single disk. - Joan: - - rscadd: Lava bubbling up from basalt turfs now glows if in sufficient concentration. - - rscadd: Necropolis tendrils now glow. - - rscadd: Lava rivers now have riverbanks, and should overall look much nicer. - Shadowlight213: - - bugfix: The revenant ectoplasm sprite is no longer invisible. - Xhuis: - - rscadd: Highlander has been revamped. Now you can butcher your coworkers in cold - blood like never before! -2016-08-30: - oranges: - - tweak: The ed209 can now only fire as fast as the portaturrets -2016-08-31: - Iamgoofball: - - rscadd: Adds a new experimental gas to the game. Check it out! - Joan: - - rscadd: Vanguard now has a tooltip showing the amount of stuns you've absorbed - and will be affected by. - MMMiracles: - - bugfix: Xenomorphs can now actually damage barricades. - Shadowlight213: - - bugfix: Fixed runtime preventing access locked programs from being downloaded - XDTM: - - rscadd: Metal slimes now spawn a few sheets of glass when injected with water. - xxalpha: - - tweak: Opening and closing of donut boxes, etc. is now done with clicking the - object with itself. - yackemflam: - - rscadd: The standard rounds now blow off limbs. Happy hunting! -2016-09-01: - Cruix: - - bugfix: fortune cookies will now drop their fortunes when they are eaten. - Iamgoofball: - - tweak: NULL Crate in cargo was added again because people are fucking idiots so - if we're going to have this stupid fucking crate might as well make it not fucking - garbo - Kor: - - rscadd: Watertanks will now explode when shot. - Lzimann: - - tweak: You can now open all access doors while restrained. - Shadowlight213: - - tweak: Rad storms are more obvious - - bugfix: Pizza bombs will now delete after exploding. - phil235: - - tweak: Putting packagewrap or hand labeler in a backpack is now done by clicking - and dragging. - - bugfix: You can now wrap backpacks and other storage items with packagewrap. -2016-09-02: - A-t48: - - bugfix: Fixed cyborgs being able to use Power Warning emote when broken. - Iamgoofball: - - experiment: Freon has been reworked completely. - - rscadd: Water Vapor has been added to the Janitor's Closet. - RemieRichards: - - bugfix: Cutting bedsheets with a sharp object/wirecutters no longer puts the resulting - cloth INSIDE OF YOU if you're holding it, what a bug. - bgobandit: - - tweak: You can hide small items in urinals now. Use a screwdriver to screw open - the drain enclosure. - - rscadd: Every space urinal comes complete with space urinal cake. Do not eat. -2016-09-04: - A-t48: - - bugfix: Radiation storms no longer spam "Your armor softened the blow." - - bugfix: Radiation always gives a message that you are being irradiated, regardless - of armor level (only an issue if you stripped off all clothing) - - bugfix: Radiation now displays a message appropriate for all mob types (no longer - references clothes). - Gun Hog: - - rscadd: Ghosts may now read an AI or Cyborg's laws by examining them. - Joan: - - rscadd: The talisman of construction now has 25 uses, each of which can convert - a sheet of plasteel to a sheet of runed metal. It can still convert metal into - construct shells, and requires no specific amount of uses to do so. - - rscadd: Added the 'Drain Life' rune to the runes cultists can make. It will drain - life from all creatures on the rune, healing the invoker. - - imageadd: The 'Astral Communion' rune has a new sprite, made by WJohnston. - - rscdel: You can no longer use telekinesis to hit people with items they're holding, - items inside items they're holding, items embedded in them, items actually implanted - in them, or items they're wearing. - MMMiracles: - - rscadd: A set of combat gear for bears has been added, see your local russian - for more information. - XDTM: - - tweak: Nanotrasen has now stocked the DNA Manipulators with potassium iodide instead - of epinephrine as rejuvenators. -2016-09-07: - A-t48: - - bugfix: you can now scrub freon and water vapor - - bugfix: you can now label canisters as freon and water vapor - AnturK: - - rscadd: Watch out for special instructions from Centcom in the intercept report. - Cheridan: - - tweak: Brain damage no longer causes machines to be inoperable. - Ergovisavi: - - bugfix: Stops ash drakes from swooping across zlevels - Impisi: - - tweak: Increased chances of Modular Receiver drop in Maintenance - Incoming5643: - - rscdel: Wizards can no longer purchase the Cursed Heart from their spellbook. - Joan: - - experiment: The lava staff now has a short delay before creating lava, with a - visible indicator. - - tweak: The lava staff's cooldown is now somewhat shorter, and turning lava back - into basalt has a much shorter cooldown and no delay. - Lzimann: - - tweak: Stunprods no longer fit in your backpack, they go on your back now. - MrStonedOne: - - bugfix: Fixed lava sometimes doing massive amounts of damage. - - tweak: AFK players will no longer default to continue playing during restart votes. - XDTM: - - bugfix: Cloners now preserve your genetic mutations. - pubby: - - tweak: Changed military belt TC cost from 3 -> 1 - - tweak: Update ingredient boxes to have more useful ingredients -2016-09-08: - Jordie0608: - - rscadd: Notes can now be tagged as secret to be hidden from player viewed notes. - Lzimann: - - tweak: Legion implants now have a full heal when implanted instead of passive - heal + spawn tentacles. The healing also goes off when you enter crit. - Yackemflam: - - rscadd: You can now buy a box for a chance to mess with the stations meta for - ops. -2016-09-09: - Ergovisavi: - - rscadd: Adds new loot for the colossus, the "Anomalous Crystal" - - tweak: Enabled colossus spawning again - Joan, Ausops: - - rscadd: Added some very fancy tables, constructed by adding carpet tiles to a - standard table frame. - MrStonedOne: - - experiment: Blessed our beloved code with dark magic. - Shadowlight213: - - tweak: Radiation storm direct tox loss removed - - tweak: Radiation storms now cause a radiation alert to appear for the duration -2016-09-12: - Joan: - - rscadd: Cult structures can once again be constructed with runed metal. - - experiment: Cult structures can now take damage and be destroyed. Artificers can - repair them if they're damaged. - - tweak: The Recollection function of the clockwork slab is much more useful and - easier to parse. - - wip: Tweaked the Recital menus for scripture so the scripture are all in the proper - order. This might fuck you up if you were used to the incorrect order, but you'll - get used to it. - Nanotrasen Anti-Cheese Committee: - - bugfix: A glitch in the hydroponics tray firmware allowed it to retain plant growth - even after the plant was removed, resulting in the next planted seed being grown - instantaneously. This is no longer possible. - PKPenguin321: - - bugfix: Tesla shocks from grilles will no longer do thousands and thousands of - damage. They now properly deal burn damage that is equal to the current power - in the powernet divided by 5000. - Papa Bones: - - tweak: You can now rename the captain's sabre by using a pen on it. - RemieRichards: - - rscadd: Added the functionality for mobs to have multiple hands, this might have - broken some things, so please report any weirdness - Shadowlight213: - - rscdel: The surplus crate and random item will now only contain items allowed - by the gamemode - - rscdel: removes sleeping carp scroll from surplus crates - - experiment: Minimaps will now try to load from a cache or backup file if minimap - generation is disabled. - TheCarlSaganExpress: - - rscadd: Crayons, lipstick, cigarettes, and penlights can now be inserted into - PDAs. - phil235: - - rscadd: Monkeys can be dismembered. - - rscadd: Humans, monkeys and aliens can drop limbs when they are gibbed. - - rscadd: Roboticists can remove flashes, wires and power cells that they inserted - in robot head or torso by using a crowbar on it. - - rscadd: visual wounds appear on a monkey's bodyparts when injured, exactly like - humans. - - rscadd: Using a health analyzer on a monkey or alien shows the injuries to each - bodypart. - - rscadd: Monkeys can become husks. - - bugfix: Human-monkey transformations now respect missing limbs. No more limb regrowth - by becoming a monkey. - - bugfix: Changeling's regenerate ability also work while in monkey form. - - bugfix: Alien larva has its own gib and dust animation. - - bugfix: A bodypart that looks wounded still looks bloody when dismembered. - - bugfix: Amputation surgery now works on robotic limbs, and monkeys. -2016-09-14: - Ergovisavi: - - bugfix: Fixes lockers, bodybags, etc, giving you ash storm / radiation storm protection - Erwgd: - - rscadd: Upgraded sleepers can now inject inacusiate to treat ear damage. - Joan: - - rscadd: Added brass, producible by proselytizing rods, metal, or plasteel, or - by using Replicant Alloy in-hand, and usable to construct a variety of cult-y - brass objects. - - tweak: Objects constructable with brass include; wall gears, pinion airlocks, - brass windoors, brass windows, brass table frames and tables, and brass floor - tiles. - - rscadd: Cogscarabs can convert brass sheets into liquified alloy with their proselytizer. - - tweak: You can use brass sheets on wall gears to produce clockwork walls, or, - if the gear is unanchored, false clockwork walls. - - bugfix: Fixed a bug preventing you from converting grilles into ratvar grilles. - - experiment: Please note that conservation of mass exists. - Sligneris: - - tweak: Captain's space armor has been readapted with modern hardsuit technology. - oranges: - - tweak: Examine code for dismembered humans now has better easter eggs -2016-09-17: - BoxcarRacer41: - - rscadd: Added a new food, bacon. Bacon is made by processing raw meat cutlets. - - rscadd: Added a new burger recipe, the Bacon Burger. It is made with one bun, - one cheese wedge and three pieces of cooked bacon. - Ergovisavi: - - rscadd: Added a nightvision toggle to Shadowpeople - - tweak: Made several anomalous crystal variants more easily identified/easier to - see the effects thereof, and removed the "magic" activation possibility (replaced - with the "bomb" flag) - Gun Hog: - - tweak: Nanotrasen Robotics Division is proud to announce slightly less clunky - leg servo designs relating to the "Ripley" APLU and "Firefighter" exosuits. - Tests show increased mobility in both high and low pressure environments. The - previous designer has been fired for incompetence. - Improves tablets design: - - imageadd: Brings the tablet icons into the holy light of having depth - Joan: - - rscadd: Megafauna will now use ranged attacks even if they don't have direct vision - on their target. - - rscadd: Volt Void and Interdiction Lenses will now drain mech cells of energy. - - tweak: Ocular Wardens do slightly more damage to mechs. - - experiment: Replicant, Soul Vessel, Cogscarab, and Anima Fragment now take an - additional second to recite. - - tweak: Anima Fragments do slightly less damage in melee. - - tweak: Mending Motors and Clockwork Obelisks have slightly less health. - - tweak: Invoking Nezbere now requires 3 invokers. - - rscdel: Clockwork armor no longer has 5% energy resistance. - - bugfix: You can no longer construct clockwork structures on space turfs. - Papa Bones: - - tweak: BZ gas is no longer available on Box and Metastation layouts. - phil235: - - tweak: You no longer have to click a megaphone to use it, you simply keep it in - your active hand and talk normally. - - rscadd: Added new things - - imageadd: added some icons and images -2016-09-20: - Ergovisavi: - - bugfix: fixed "friendly" xenobio mobs and mining drones attacking station drones - Joan: - - rscadd: Miners can now buy KA AoE damage mods from the mining vendor for 2000 - points per mod. - - rscadd: 'Combined the Convert and Sacrifice runes into one rune. It''ll convert - targets that are alive and eligible, and attempt to sacrifice them otherwise. - The only changes to mechanics are that: Converting someone will heal them of - all brute and burn damage they had, and sacrificing anything will always produce - a soulstone(but will still only sometimes fill it)' - - tweak: You can no longer teleport to Teleport runes that have dense objects on - top of them. - - experiment: Wall runes will now activate other nearby wall runes when activated, - but will automatically disable after a minute and a half of continuous activity - and become unusable for 5 seconds. - - experiment: The Blood Boil rune no longer does all of its damage instantly or - stuns, but if you remain in range for the full duration you will be sent deep - into critical. - - experiment: Bubblegum has been seen reaching through blood. Try not to get hit. - - experiment: The Raise Dead rune no longer requires a noncultist corpse to revive - a cultist; instead, it will draw from the pool of all people sacrificed to power - the rune. - Mekhi: - - rscadd: Nanotrasen has been experimenting on cybernetics for a while, and rumors - are they have a few combat prototypes available... - - experiment: 'New arm implants: Energy-blade projector, implanted medical beamgun, - stun-arm implant (Like the borg version), flash implant that is automatically-regenerating - and doubles as a powerful flashlight. There is also one with all four items - in one. Also, a surgery toolkit implant. Adminspawn only for the moment.' - MrStonedOne: - - bugfix: Fixed space/nograv movement not triggering when atoms moved twice quickly - in space/nograv - Nanotrasen Stress Relief Board: - - rscadd: Latecomers to highlander can now join in on the fun. - - rscadd: The crew are encouraged to less pacifistic during highlander. Failing - to shed blood will result in your soul being devoured. Have a nice day. - Nicho1010: - - bugfix: Fixed lattices appearing after exploding lava - Screemonster: - - tweak: Abandoned crates no longer accept impossible guesses. - - tweak: Lets players know that all the digits in the code must be unique. - - tweak: Reads the last guess back on the multitool along with the correct/incorrect - guess readout. - - bugfix: multitool output on crates no longer returns nonsense values. - XDTM: - - rscadd: Positive viruses are now recognized by medical HUDs with a special icon. - - tweak: fully_heal no longer removes nonharmful viruses. This affects legion souls, - staffs of healing, and changeling's revive. - - rscadd: Canisters of any type of gas are now orderable in cargo. Dangerous experimental - gases will require Research Director approval. - Yackemflam: - - rscadd: The syndicate has learned on how to give their agents a true syndicate - ninja experience. - chickenboy10: - - rscadd: Added a Experimental Limb Grower to the medbay department, now medical - stuff can grow synthetic limbs using Synthflesh to help crew that suffer any - work related accidents. There may also be a limb that can be grown with a special - card... - feemjmeem: - - tweak: You can now disassemble meatspike frames with a welding tool. - phil235: - - experiment: 'adds a talk button next to the crafting button. Clicking it makes - a "wheel" appear around you with short predetermined messages that you click - to say them. This lets you say common responses without having to type in the - chat bar. Current messages available are: "Hi", "Bye", "Thanks", "Come", "Help", - "Stop", "Get out", "Yes", and "No". The talk button can be activated with the - hotkey "H" or "CTRL+H"' - - rscadd: Wearing colored glasses colors your vision. This option can be enabled/disabled - by alt-clicking any glasses with such feature. -2016-09-21: - Cyberboss: - - bugfix: The food processor's sprite's maintenance panel is no longer open while - closed and vice/versa - - tweak: Tesla arcs no longer lose power when passing through a coil that isn't - connected to a grid - MrStonedOne: - - bugfix: Fixes minimap generation crashes by making parts of it less precise -2016-09-23: - Cyberboss: - - rscadd: Wire layouts of NanoTransen devices for the round can now be found in - the Station Blueprints - Incoming5643 + WJohnston: - - imageadd: Lizard sprites have received an overhaul, sprites courtesy of WJohnston! - - rscdel: While there are some new bits, a few old bits have gone by the wayside, - if your lizard has been affected by this the specific feature will be randomized - until you pick a new setting. - - rscadd: Lizards can now choose to have digitigrade legs (those weird backwards - bending ones). Keep in mind that they can only be properly seen in rather short - pants. They also preclude the use of shoes. By default no lizard will have these - legs, you have to opt in. - - rscadd: All ash walker lizards however are forced to have these legs. - - experiment: There is absolutely no tactical benefits to using digitigrade legs, - you are only crippling yourself if you use them. - Papa Bones: - - tweak: You can now quick-draw the officer's sabre from its sheath by alt-clicking - it. - XDTM: - - bugfix: Holy Water no longer leaves you stuttering for years. -2016-09-24: - Cheridan: - - tweak: Nerfed Critical Hits - MrStonedOne: - - tweak: Orbits now use a subsystem. - - tweak: Orbits now bind to object's moving to allow for quicker updates, subsystem - fallback for when that doesn't work (for things inside of things or things that - move without announcing it) - XDTM: - - rscdel: Viruses start with 0 in every stat instead of 1. - - bugfix: Atomic Bomb, Pan-Galactic Gargle Blaster, Neurotoxin and Hippie's Delight - are now proper alcoholic drinks, and as such can disinfect, ignite, and be purged - by antihol. - optional name here: - - tweak: Changes cursed heart description to something slightly more clear. - - bugfix: Fixes a capitalization issue -2016-09-26: - Cuboos: - - rscadd: Added E-cigarettes as contraband to cigarettes vending machines. They - take reagents instead of dried plants and also hold more than cigarettes or - pipes. You can modify them to puff out clouds of reagents or emag them to fill - a whole room with reagent vapor. - - rscadd: Added a new shirt to the clothing vendor relating to the newly added vapes. - Joan: - - tweak: Blobs will generally require fewer blobs to win during the blob mode, which - should hopefully make the mode end faster at lower overmind amounts. - Razharas: - - rscadd: '"Kudzu now keeps the mutations it had before and thus can be properly - cultivated to be whatever you want"' - TheCarlSaganExpress: - - rscadd: You may now insert crayons, lipstick, penlights, or cigarettes in your - PDA. - - bugfix: Removing cartridges from the PDA will no longer cause them to automatically - fall to the floor. - oranges: - - rscadd: It looks like a pizza delivery from an un-named station got misplaced -2016-09-27: - Cobby: - - tweak: Nanotrasen has buffed the electronic safety devices found in Secure Briefcases - and Wallsafes, making them... well... more secure. In Particular, we added more - wires that do absolutely nothing but hinder the use of the multitool, along - with removing the ID slot only used by syndicates to emag the safe. - Incoming5643: - - rscadd: The secret satchels system has been updated to hide more smuggler's satchels - hidden randomly under the station - - experiment: In case you forgot about the secret satchel system, basically if you - take a smuggler's satchel (a traitor item also occasionally found under a random - tile in the station [USE T-RAYS]), stow away an item in it, and bury it under - the floor tiles that item can reappear in a random later round! - MrStonedOne: - - tweak: Custom Round end sounds selected by admins will be preloaded to all clients - before actually rebooting the world - Shadowlight213: - - bugfix: Fixes broken icon states when replacing warning floor tile - Supermichael777: - - tweak: Cat men have finally achieved equal discrimination. - TrustyGun+Pubby: - - imageadd: Lawyers now have unique speech bubbles. - XDTM: - - tweak: Using plasma on dark blue slimes will now spawn freon instead of arbitrarily - freezing mobs. - uraniummeltdown: - - tweak: Protolathe stock parts now build 5 times faster -2016-09-28: - Cuboos: - - bugfix: Removed the admin message spam from the smoke_spread proc. You may now - vape in peace without the threat of a Blue Space Artillery - LanCartwright: - - rscdel: Removed Stimulants and Coffee from survival pens. - - tweak: Nanites have been replaced with Mining Nanites which heal more when you - are lower health, and do not have the ridiculous healing Adminorazine had. -2016-10-01: - Incoming5643: - - rscadd: After years of having to live on a mostly blown up hunk of junk the wizard's - ship has finally been repaired - - rscdel: No one paid attention to that lore anyway -2016-10-07: - WJohnston: - - imageadd: Improved/resprited AI card, pAI, easel/canvases, shotgun shells, RCD - cartridge, speedloaders, and certain older buttons. - - imageadd: Improved/resprited a few bar signs, basketball/dodgeball/hoop, blood - bags, and body bags. - - imageadd: Improved/resprited Paper, stamps, folders, small fires, pens, energy - daggers, cabinets, newspaper and other bureaucracy related items. -2016-10-10: - ChemicalRascal: - - bugfix: Previously, improving the incinerator's efficiency made the RPM decay - more quickly, instead of less quickly. No more! - Cyberboss: - - rscadd: More reagent containers can be used for filling your dirty vapor cancer - sticks - - spellcheck: Fixed some vape spelling/grammar - MrStonedOne: - - tweak: Player Preferences window made slightly faster. - Nanotrasen Stress Relief Board: - - rscdel: Claymores created through Highlander no longer thirst for blood or announce - their wielder's location incessantly. - - bugfix: Claymores should now properly absorb fallen foes' corpses. - - bugfix: Losing a limb now properly destroys your claymore. - Supermichael777: - - bugfix: The wizards federation have instituted a strict 1 demon limit on demon - bottles. - XDTM: - - rscadd: Using blood on an Oil Slime will create Corn Oil. - - rscadd: Using blood on Pyrite Slimes will create a random crayon. - - rscadd: Using water on Orange Slimes will create a small smoke cloud. - - rscadd: Using water on Blue Slimes will spawn foam. - - rscadd: You can now retrieve materials inserted in a Drone Shell Dispenser with - a crowbar. - phil235: - - rscadd: A whole bunch of structures and machines can now be broken and destroyed - using conventional attack methods. - - rscadd: The effect of fire on objects is overhauled. When on fire, your external - clothes now take fire damage and can become ashes, unless fire proof. All objects - caught in a fire can now take fire damage, instead of just flammable ones, unless - fire proof. - - rscadd: Acid effect is overhauled. Splashing acid on something puts a green effect - on it and start slowly melting it. Throwing acid on mobs puts acid on their - clothes. Acid can destroy structures and items alike, as long as they're not - acid proof. The more acid put on an object, the faster it melts. Walking on - an acid puddle puts acid on your shoes or burns your bare feet. Picking up an - item with acid without adequate glove protection burns your hand. Acid can be - washed away with any sort of water source (extinguisher, shower, water glass,etc...). - - rscadd: When a mob receives melee attacks, its clothes also get damaged. Clothes - with enough damage get a visual effect. Damaged clothes can be repaired with - cloth (produced with botany's biogenerator). Clothes that receives too much - melee damage become shreds. - - tweak: Clicking a structure/machine with an item on help intent can never result - in an attack. - - tweak: Hostile animals that are environment destroyers no longer destroys tables&closets - in one hit. It now takes several hits depending on the animal. -2016-10-11: - Cyberboss: - - rscadd: The waste line now has a digital valve leading to space (off by default) - along with a port on it's far side - Incoming5643: - - rscadd: Wizards may finally use jaunt and blink on the escape shuttle. Maybe elsewhere - too? - - bugfix: The previously broken radios in the wizards den should work now. You still - have to turn them on though. - Kor: - - rscadd: Added frogs, with sprites by WJ and sounds by Cuboos. - Papa Bones: - - rscadd: Flora now spawns in lavaland tunnels, they can be harvested with a knife. - - rscadd: Flora have a range of effects, be careful what you eat! - - bugfix: You harvest flora on lavaland with your hands, not a knife. My bad. - Shadowlight213: - - rscadd: Cargo can order the antimatter engine -2016-10-12: - Cyberboss: - - bugfix: Fixed motion alarms instantly triggering and de/un/re/triggering - - bugfix: Airlock speed mode now works - Joan: - - rscadd: You can now deconstruct AI cores that contain no actual AI. - WJohnston: - - imageadd: Recolored and resprited candles and ID cards. Folders should have improved - color contrast. - XDTM: - - rscadd: Exhausted slime extracts will now dissolve instead of leaving useless - used slime extracts. - - tweak: Airlocks are now immune to any damage below 20, to prevent pickaxe prison - breaks. - - tweak: High-Security Airlocks, such as the vault or the AI core's airlocks, are - now immune to any damage below 30. -2016-10-13: - Razharas: - - tweak: Makes clicking something in heat of battle a bit easier by making drag&drops - that dont have any effect be counted as clicks - XDTM: - - rscadd: 'Added four new symptoms: Regeneration and Tissue Regrowth heal respectively - brute and burn damage slowly; Flesh Mending and Heat Resistance are the level - 8 version of those symptoms, and heal faster.' - - rscdel: The Toxic Compensation, Toxic Metabolism and Stimulants symptoms have - been removed. - - rscdel: Viruses no longer stack. Viruses can be overridden if the infecting virus - has higher transmittability than the previous virus' resistance. - - tweak: Viruses can now have 8 symptoms, up from 6. - - rscadd: You can now store monkey cubes in bio bags; using bio bags on the consoles - will load them with the monkey cubes inside the bags. - ma44: - - rscadd: Cargo can now order a 2500 supply point crate that requires a QM or above - to unlock. This crates contains a explorer suit, compact pickaxe, mesons, and - a bag to hold ore with. -2016-10-16: - Cuboos: - - rscadd: Added a new unique tool belt to the CE - - rscadd: Added new power tools, a hand drill that can be used as a screw driver - or wrench and jaws of life which can be used as either a crowbar or wire cutters - - rscadd: Power tools can also be made from the protolathe with engineering and - electromagnet 6 - - tweak: slightly revamped how construction/deconstruction handle sound - - soundadd: added new sounds for the power tools - - soundadd: added a new sound for activating and deactivating welding tools, just - because. - Cyberboss: - - bugfix: Plasma fires no longer cause cameras to break. - Joan: - - tweak: Blazing Oil blobs are now outright immune to fire. This does not affect - damage taken from other sources that happen to do burn damage. - - tweak: Normal blob spores now take two welder hits to die, from three. - - tweak: Cyborgs now die much less rapidly to blob attacks. - Lzimann: - - tweak: 'Changed two admin hotkeys: f7 is now stealth-mode and f8 to toggle-build-mode-self.' - Shadowlight213: - - bugfix: Modular consoles have been fixed. - Supermichael777: - - tweak: Changeling Sting is now one part screwdriver cocktail and 2 parts lemon-lime - soda. - - bugfix: Triple citrus now actually displays its sprite. - Yackemflam: - - tweak: extinguishers now spray faster - coiax: - - rscadd: RCDs have a Toggle Window Type verb allowing the rapid construction of - reinforced windows, rather than regular windows. - - rscadd: RCDs can now finish and deconstruct wall girders. - phil235: - - tweak: Clicking a floor with a bodybag or roller bed now deploys them directly - (and the bodybag starts open) - scoopscoop: - - bugfix: The cult shifter will now properly spawn as part of the veil walker set. -2016-10-18: - Basilman: - - rscadd: A third martial art, CQC, has been added and is now available to nuke - ops instead of sleeping carp - Kor: - - rscadd: Added sloths to cargobay on Box and Meta - MrPerson: - - rscadd: New toxin - Rotatium. It doesn't quite do what it does on other servers. - Instead it rocks your game view back and forth while slowly doing toxin damage. - The rocking gets more intense with time. - - rscadd: To make it, mix equal parts mindbreaker, neurotoxin, and teslium. - MrStonedOne: - - experiment: Byond 511 beta users may now choose their own FPS. This will apply - to animations and other client side only effects. Find it in your game preferences. - Shadowlight213: - - bugfix: fixed removing modular computer components - TheCarlSaganExpress: - - tweak: Provided you have access, you may now use your ID to unlock the display - case. - - tweak: The fire axe cabinet and display case may now be repaired with the welder. - XDTM: - - rscadd: You can now grind slime extracts in a reagent grinder. If the slime was - unused it will result in slime jelly, while if used it will only output the - reagents inside the extract. - Yackemflam: - - bugfix: fixed the standard vest being weaker than the slim variant - lordpidey: - - rscadd: There is a new potential obligation for devils to have. Musical duels. Ask - your nearest devil for a musical duel, there's a 14% chance he's obligated to - do it. - - rscdel: Removed the old offering a drink obligation for devils, it overlapped - too much with the food obligation. - - tweak: Trying to clone people who've sold their soul now results in FUN. - - tweak: Devils can no longer spam ghosts with revival contracts. - phil235: - - rscadd: Visual effects appear on the target of an attack, similar to the item - attack effect. - - rscdel: You now only see a message in chat when witnessing someone else getting - attacked or hit by a bullet if you are close enough to the action. -2016-10-19: - Cyberboss: - - bugfix: Physically speaking is no longer delayed by your radio's lag - - bugfix: You can now attack doors with fireaxes and crowbars when using the harm - intent - - tweak: The BSA is no longer ready to fire when constructed - - bugfix: The BSA can no longer be reloaded faster by rebuilding the console - MrStonedOne: - - tweak: tweaked the settings of the space drift subsystem to be less effected by - anti-lag slowdowns - Pubby: - - rscadd: 'A new map: PubbyStation. Set it to your favorite in map preferences!' - XDTM: - - rscadd: PanD.E.M.I.C. now displays the statistics of the viruses inside. - phil235: - - tweak: Made the singularity gen and tesla gen immune to fire. - - tweak: All unique traitor steal objective item are now immune to all damage except - severity=1 explosion. - - tweak: Mobs on fire no longer get damage to their worn backpacks, belts, id, pocket - stuff, and suit storage. - - bugfix: Mob receiving melee attacks now only have its outer layer of clothes damaged, - e.g. no damage to jumpsuit when wearing a suit. - - bugfix: now all hardsuit have 50% more health, as intended. - wrist: - - rscadd: Toxins is different now. -2016-10-21: - Adam E.: - - tweak: Added cargo and engi access to auxillary mine base launching console. - Cyberboss: - - tweak: Your brain is now gibbed upon chestburst - - bugfix: The safe is indestructible again - Joan: - - rscadd: Wraith Spectacles will now slowly repair the eye damage they did to you - as long as you aren't wearing them. - - experiment: You can now see how much eye damage the spectacles have done to you - overall, as well as how close you are to being nearsighted/blinded. - - tweak: Mending Motors heal for more. - - wip: Mania Motors are overall more powerful; they have greater effect, but require - more power to run and less power to convert adjacent targets. - - experiment: Interdiction Lenses no longer require power to disrupt electronics - and will no longer disrupt the radios of servants. - - bugfix: You need to be holding teleport talismans and wizard teleport scrolls - in your hands when you finish the input, and cannot simply open the input and - finish it whenever you get stunned. - - tweak: The range for seeing visible messages in combat is a tile higher. - Screemonster: - - tweak: The anti-tamper mechanism on abandoned crates now resists tampering. - - tweak: Secure, non-abandoned crates can be given a %chance of exploding when tampered - with. Defaults to 0. - Shadowlight213: - - bugfix: The Swap minds wizard event will now function - Swindly: - - rscadd: The action button for a dental implant now includes the name of the pill - - bugfix: The pill activation button now properly displays the pill's icon - uraniummeltdown: - - rscadd: Adds more replacements to the Swedish gene -2016-10-22: - Shadowlight213: - - experiment: Breathing has been moved from species to the lung organ - - rscadd: Lung transplants are now possible! -2016-10-23: - Cyberboss: - - bugfix: Fixed a bug that caused door buttons to open doors one after another rather - than simultaneously like they are suppose to - - bugfix: NOHUNGER species no longer hunger - - bugfix: Appropriate gloves now protect you from getting burned by cheap cigarette - lighters - - rscdel: Labcoats no longer have pockets - Yackemflam: - - tweak: Riot helmets are now more useful in melee situations and the standard helmet - is now slightly weaker - uraniummeltdown: - - rscadd: Atmos grenades are now in the game and uplink -2016-10-24: - Batman: - - tweak: The sniper rifle descriptions are less edgy. - Cobby: - - rscadd: Finally, a way to relate to Bees! - Cyberboss: - - bugfix: Morphs no longer gain the transparency of chameleons - - bugfix: Turrets can no longer shoot when unwrenched - - bugfix: Spray bottle can now be used in the chem dispenser - Joan: - - rscadd: Clockwork marauders now have a HUD, showing block chance, counter chance, - health, fatigue, and host health(if applicable), as well as including a button - to try to emerge/recall. - - experiment: Clockwork marauders can now block bullets and thrown items, even if - Ratvar has not risen. - - rscadd: The Judicial Visor no longer requires an open hand to use. Instead, clicking - the button will give you a target selector to place the Judicial Marker. - - experiment: Tinkerer's Daemons are now a structure instead of a Cache addon. - - wip: Tinkerer's Daemons now consume a small amount of power when producing a component, - but produce components every 12 seconds with no additional delay. - - tweak: Adjusted the costs of the Tinkerer's Daemon and Interdiction Lens. - - imageadd: Floaty component images appear when Tinkerer's Caches and Daemons produce - components. - MrStonedOne: - - bugfix: Spectral sword now tracks orbiting ghosts correctly. - Shadowlight213: - - imageadd: Damaged airlocks now have a sparking effect - Swindly: - - rscadd: Added a button to the ChemMaster that dispenses the entire buffer to bottles. - ma44: - - rscadd: Reminds the user that reading or writing a book is stupid. -2016-10-27: - Chowder McArthor: - - rscadd: Added a neck slot. - - tweak: Modified some of the attachment items (ties, scarves, etc) to be neck slot - items instead. - Cyberboss: - - rscadd: NEW HOTKEYS - - rscadd: The number pad can be used to select the body part you want to target - (Cycle through head -> eyes -> mouth with 8) in hotkey mode. Be sure Numlock - is on! - - rscadd: Holding shift can be used as a modifier to your current run state in both - hotkey and normal mode. - - bugfix: Emag can no longer be spammed on shuttle console - Gun Hog: - - bugfix: Fixed AIs uploaded to mechs having their camera view stuck to their card. - Joan: - - rscadd: Clockwork Floors now have a glow when healing servants of toxin damage. - Only other servants can see it, so don't get any funny ideas. - - bugfix: The Interdiction Lens now properly has a high Belligerent Eye cost instead - of a high Replicant Alloy cost. - Pubby: - - tweak: PubbyStation's bar is now themed like a spooky castle! - Swindly: - - bugfix: Chem implants can now be properly filled and implanted - WJohnston: - - rscadd: Adds an unlocked miner equipment locker on Boxstation and Metastation's - Aux Base Construction area, as well as a telescreen to the camera inside. All - mining outpost computers can also see through that camera. - lordpidey: - - rscadd: The wizard federation has teamed up with various LARP groups to invent - a new type of spell. -2016-10-28: - Erwgd: - - rscadd: You can now use cloth to make black or fingerless gloves. - - tweak: Biogenerators require less biomass to produce botanist's leather gloves. - Tacolizard: - - rscadd: Added a new contraband crate to cargo, the ATV crate. -2016-10-29: - Chowder McArthor: - - bugfix: Added in icons for the neck slot for the other huds. - Cobby: - - rscadd: Adds several Halloween-Themed Emojis. See if you can get them all! [no - code diving cheaters!] - Erwgd: - - rscadd: The NanoMed Plus now stocks premium items. - Joan: - - experiment: Guvax is now targeted; invoking it charges your slab to bind and start - converting the next target attacked in melee within 10 seconds. This makes your - slab visible in-hand. - - tweak: Above 5 Servants, the invocation to charge your slab is not whispered, - and the conversion time is increased for each Servant above 5. - - wip: Using Guvax on an already bound target will stun them. The bound target can - resist out, which will prevent conversion. - - experiment: Sentinel's Compromise is now targeted, like Guvax, but can select - any target in vision range. - - rscadd: Sentinel's Compromise now also removes holy water from the target Servant. - - wip: Clicking your slab will cancel these scriptures. - - imageadd: Both of these will change your cursor, to make it obvious they're active - and you can't do anything else. - - rscadd: Arks of the Clockwork Justicar that do not summon Ratvar will still quick-call - the shuttle. - - bugfix: Clockwork structures that return power can now return power to the APC - of the area they're in if there happens to be one. - - bugfix: Clockwork structures that use power from an APC will cause that APC to - start charging and update the tgUI of anyone looking at the APC. - - bugfix: Converting metal, rods, or plasteel to brass with a clockwork proselytizer - while holding it will no longer leave a remainder inside of you. - - tweak: Plasteel to brass is now a 2:1 ratio, from a 2.5:1 ratio. Accordingly, - you now only need 2 sheets of plasteel to convert it to brass instead of 10 - sheets. - - tweak: Wall gears are now converted to brass sheets instead of directly to alloy. - - rscdel: You can no longer do other proselytizer actions while refueling from a - cache. - - bugfix: Fixed a bug where certain stacks wouldn't merge with other stacks, even - when they should have been. - - bugfix: Clockwork structures constructed from brass sheets now all have appropriate - construction value to replicant alloy ratios. - - bugfix: Tinkerer's Caches no longer need to see a clockwork wall to link to it - and generate components. - MrStonedOne: - - experiment: Shoes do not go on heads. - NikNak: - - rscadd: Action figures are finally winnable at arcade machines. Comes in boxes - of 4. - Pubby: - - rscadd: The holodeck has been upgraded with new programs. Try them out! - Shadowlight213: - - rscdel: The HOS and other heads of staff no longer have a chance to be revheads - TehZombehz: - - tweak: Custom food items can now fit inside of smaller containers, such as paper - sacks. - - rscadd: Small cartons can be crafted using 1 piece of cardboard. Don't be late - for school. - - rscadd: Apples can now be juiced for apple juice. Chocolate milk can now be crafted - using milk and cocoa. - - tweak: Chocolate bar recipe has been modified to compensate for chocolate milk. - The soy milk version of the chocolate bar recipe remains unchanged. - - bugfix: Grapes can now be properly juiced for grape juice using a grinder. - XDTM: - - tweak: Wizards no longer need sandals to cast robed spells. - Xhuis: - - rscadd: Syndicate and malfunctioning AIs may now be transferred onto an intelliCard - if their parent core has been destroyed. This may only be done with the AI's - consent, and the AI may not be re-transferred onto another APC or the APC it - came from. - - rscadd: New additions have been made for this Halloween and all future ones. Happy - Halloween! - ma44: - - rscadd: You can now solidify liquid gold into sheets of gold with frostoil and - a very little amount of iron -2016-10-30: - Joan: - - rscadd: The Recollection option in the Clockwork Slab has been significantly improved, - with a better information to fluff ratio, and the ability to toggle which tiers - of scripture that are visible in Recollection. - Lzimann: - - bugfix: You can once again order books by its ID in the library. - Mysak0CZ: - - bugfix: You no longer need to deconstruct emagged (or AI-hacked) APC to fix them, - replacing board is sufficient - - bugfix: You can no longer unlock AI-hacked APCs - - bugfix: Removing APC's and SMES's terminal no longer ignore current tool's speed - - rscadd: You can repair APC's cover (only if APC is not compleatly broken) by using - APC frame on it - - rscadd: closing APC's cover will lock it - bgobandit: - - rscadd: The creepy clown epidemic has arrived at Space Station 13. - - rscadd: Honk. -2016-10-31: - Joan: - - experiment: Brass windows will now survive two fireaxe hits, and are slightly - more resistant to bullets. - Lzimann: - - rscdel: Changelings no longer have the Swap Forms ability. - Xhuis: - - rscadd: Disposal units, outlets, etc. are now fireproof. - - rscadd: Changelings can now use biodegrade to escape silk cocoons. -2016-11-02: - Iamgoofball: - - rscadd: Added a new lobby menu sound. - Joan: - - rscdel: Brass windows and windoors no longer drop full sheets of brass when destroyed. - - rscadd: Instead, they'll drop gear bits, which can be proselytized for a small - amount of liquified alloy; 80% of the materials used to construct the window. - - tweak: Mending Motors have an increased range and heal for more. - - experiment: Mending Motors will no longer waste massive amounts of power on slightly - damaged objects; instead, they will heal a small amount, use a small amount - of power, and stop if the object is fully healed. - - wip: Mending Motors can now heal all clockwork objects, including pinion airlocks, - brass windows, and anything else you can think of. - - rscadd: Ocular Wardens will no longer attack targets that are handcuffed, buckled - to something AND lying, or in the process of being converted by Guvax. - - tweak: Also, they do very slightly more damage. - - rscdel: Hulks no longer one-shot most clockwork structures and will no longer - four-shot the Gateway to the Celestial Derelict. - - bugfix: Hulks are no longer a blob counter. - XDTM: - - tweak: Ninjas are now slightly visible when stealthing. - phil235: - - rscadd: Spray cleaner and soap can now wash off paint color. -2016-11-03: - Cobby: - - rscadd: Adds a geisha outfit to the clothesmate on hacking. QT space ninja BF - not included - Joan: - - rscadd: 'Proselytizing a window will automatically proselytize any grilles under - it. This is free, so don''t worry about wasting alloy. rcsadd: Trying to proselytize - something that can''t be proselytized will try to proselytize the turf under - it, instead.' - - experiment: Clockcult's "Convert All Silicons" objective now also requires that - Application scripture is unlocked. - - wip: The "Convert All Silicons" objective will also only be given if there is - an AI, instead of only if there is a silicon. -2016-11-05: - Joan: - - rscadd: Proselytizer conversion now accounts for existing materials, and deconstructing - a wall, a girder, or a window for its materials is no longer more efficient - than just converting it. - - imageadd: Heal glows now appear when mending motors repair clockwork mobs and - objects. - Lzimann: - - rscdel: You can no longer walk holding shift. -2016-11-06: - Joan: - - bugfix: Dragging people over a Vitality Matrix will actually cause the Matrix - to start working on them instead of failing to start draining because it's "active" - from when the dragging person crossed it. - phil235: - - rscadd: You can now climb on transit tube, like tables. - - rscadd: You can now use tabs when writing on paper by writing "[tab]" -2016-11-07: - Basilman: - - rscadd: CQC users can now block attacks by having their throw mode on. - - tweak: The CQC kick and Disorient-disarm combos are now much easier to use, CQC - harm intent attacks are stronger aswell. - - bugfix: Fixed being able to CQC restrain someone, let him go, then 10 minutes - later disarm someone else to instantly chokehold them. - - tweak: CQC costs more TC (13) - Cyberboss: - - bugfix: Tesla zaps that don't come from an energy ball can no longer destroy nukes - and gravity generators - El Tacolizard: - - rscadd: A space monastery and chaplain job have been added to PubbyStation. - - rscadd: Improved pubby's maint detailing - Joan: - - tweak: Ratvarian Spears now do 18 damage and ignore a small amount of armor on - normal attacks, but have a slightly lower chance to knowdown/knockout. Impaling - also ignores a larger amount of armor. - - rscadd: Throwing a Ratvarian Spear at a Servant will not damage them and may cause - them to catch the spear. - - rscadd: Standard drones will be converted to Cogscarabs by Ratvar and the Celestial - Gateway proselytization. - - rscdel: Cogscarabs no longer receive station alerts. - - bugfix: Anima Fragments, Clockwork Marauders, and cult constructs are now properly - immune to heat and electricity. - - tweak: Clockwork armor is much stronger against bullets and bombs but much weaker - against lasers. - - wip: Specific numbers; Bullet armor from 50% to 70%, bomb armor from 35% to 60%, - laser armor from -15% to -25%. This means lasers are a 4-hit crit. - - rscadd: You can now Quickbind scripture other than Guvax and Vanguard to the Clockwork - Slab's action buttons, via Recollection. - - rscadd: You can also recite scripture directly from Recollection, if doing so - suits your taste. Of course it suits your taste, it's way easier than menus. - - tweak: You can also toggle compact scripture in Recollection, so that you don't - see description, invocation time, component cost, or tips. - - tweak: Dropping items into Spatial Gateways no longer consumes a use from the - gateway. - - rscadd: If your Spatial Gateway target is unconscious, you can pick a new target - instead. - Kor: - - rscadd: Multiverse teams now have HUD icons. - - rscadd: Multiverse war is back in the spellbook. - phil235: - - rscadd: Altclicking a PDA without id now removes its pen. - - rscadd: The PDA's sprite now shows whether it has an id, a pAI, a pen, or if its - light is on. -2016-11-09: - Changes: - - tweak: Old mining asteroid is more interesting (mining world can be picked in - ministation.dm) - - tweak: Space around ministation is now half(?) the size of normal space - - rscadd: Loot spawners to maintenance - - bugfix: Rad storms frying maintenance - - bugfix: Bad conveyor belts in mining/cargo area of station - - bugfix: Bombs completely destroying toxins test site - - rscadd: Cyborg job available again - - tweak: Mining cyborgs can use steel rods when asteroid mining is enabled - Joan: - - tweak: Repairing clockwork structures with a Clockwork Proselytizer now only costs - 1 alloy per point of damage. - - experiment: Vitality Matrices will no longer heal dead Servants that they cannot - outright revive. - - rscadd: The Celestial Gateway will now prevent the emergency shuttle from leaving. - - tweak: However, Centcom will alert, in general terms, the location of the Celestial - Gateway two minutes after it is summoned. - - rscadd: Reciting scripture while not on the station, centcom, or mining/lavaland - will double recital time and component costs. - Kor: - - rscadd: You can now examine an r-wall to find out which tool is needed to continue - deconstructing it. - - rscadd: The game will now recognize a successful detonation of the nuclear bomb - in the syndicate base. - - rscadd: Cloaks are now cosmetic items that can be worn in the neck slot, allowing - you to wear them over armour. - Shadowlight213: - - rscdel: Removed the restriction on attacking people with a fire extinguisher on - help intent if the safety is on. - uraniummeltdown: - - rscadd: Added Cortical Borers, a brainslug parasite. - - rscadd: Added Cortical Borer Event -2016-11-10: - Kor: - - rscadd: The wizard has a new spell, Rod Form, which allows him to transform into - an immovable rod. - uraniummeltdown: - - bugfix: fixed brains not having ckeys when removed - - bugfix: hopefully fixed multiple ghosts entering a borer ghosting all but one - - tweak: tweaked the formula for hosts needed for borer event to 1+humans/6 - - tweak: borer endround report is a lot nicer -2016-11-11: - Cyberboss: - - bugfix: Promotion of revheads won't occur if they are restrained/incapacitated - - bugfix: Facehuggers can no longer latch onto mobs without a head... How the fuck - did you get a living mob without a head? - - bugfix: Hulks and monkeys can no longer bypass armor - - rscadd: Metastation now has a waste to space line - - bugfix: Objects will no longer get stuck behind the recycler on Boxstation - Joan: - - rscadd: You can now repair reinforced walls by using the tool you'd use to get - to the state they're currently in. Examining will give you a hint as to which - tool to use. - - spellcheck: Renamed Guvax to Geis. This also applies to the component, which has - been similarly renamed. - Kor: - - rscadd: The Captain can now purchase alternate escape shuttles from the communications - console. This drains from the station supply of cargo points, and you can only - do so once per round, so spend wisely. - - rscadd: Some shuttles are less desirable than the default, and will instead grant - the station a credit bonus when purchased. - - rscadd: Explosions are no longer capped on the mining z level. - - rscadd: The forcewall spell now creates a 3x1 wall which the caster can pass through. - - rscadd: Bedsheets are now worn in the neck slot, rather than the back slot. -2016-11-13: - Cyberboss: - - rscadd: Using a screwdriver on a conveyor belt will reverse it's direction - - bugfix: Medibots, by default, can no longer OD you on tricord - - tweak: They will now use charcoal instead of anti-toxin to heal tox damage - - bugfix: Silicons no longer get warm skin when irradiated - Gun Hog: - - tweak: Wizard (and Devil) fireballs now automatically toggle off once fired. - Joan: - - tweak: Judicial Visors now protect from flashes. - - rscadd: Reciting Scripture is now done through an actual interface, and can thus - be done much faster. - - rscdel: The recital and quickbind functions that Recollection had have been moved - to this interface instead. - - rscadd: Servants of Ratvar can now unsecure and move most Clockwork Structures - with a wrench, though doing so will damage the structure by 25% of its maximum - integrity. - - rscadd: Clockwork Structures become less effective as their integrity lowers, - reducing their effect by up to 50% at 25% integrity. - - tweak: You can now deconstruct unsecured wall gears with a screwdriver. - - tweak: Wall gears now have much more health and can be repaired with a proselytizer. - Mysak0CZ: - - rscadd: You can now use wrech to anchor (as long as it is not in space) / unanchor - lockers - - bugfix: Cyborgs can now simply use "hand" to open / close lockers (instead of - using toggle open verb) - - bugfix: You can now properly put unlit welder inside lockers - - bugfix: Lockers using different decostruction tools (like cardboard boxes wirecutters) - can now be deconstructed too - Xhuis: - - rscadd: All computers now have sounds. Try them out! - coiax: - - rscadd: Swarmers can now use :b to talk on Swarm Communication. - - rscadd: Lich phylacteries are now in the "points of interest" for ghosts. - uraniummeltdown: - - bugfix: Cancel Assume Control works as borer now - - rscadd: Added the cueball helmet, scratch suit, joy mask to Autodrobe -2016-11-14: - Joan: - - rscdel: You can no longer pick up cogscarabs. - - rscadd: Servants of Ratvar can now reactivate Cogscarabs with a screwdriver. - - tweak: Cogscarab proselytizers proselytize things twice as fast. - - tweak: Cogscarabs now have 1.6 seconds of delay when firing guns, as much as an - unmodded kinetic accelerator. - - bugfix: Fixed Vitality Matrices and Raise Dead runes not reviving if the target - happened to be in their body already. - Kor: - - rscadd: Extended mode now has a special command report that tells you the round - type. This is to let people know they have time to start on large scale projects - rather than milling about waiting for antagonists to attack. - - rscadd: All station goals are now unlocked during extended. - Mysak0CZ: - - bugfix: MetaStation's xenobiology disposals now work properly - uraniummeltdown: - - tweak: Changed the Command and Security radio colors - - rscadd: Added raw telecrystals to the uplink, can be used with uplinks and uplink - implants. - - rscadd: Added 10mm ammo variants to uplink -2016-11-15: - Cyberboss: - - bugfix: Brains and heads with brains trigger the emergency stop on the recycler - Kor: - - rscadd: The vault is now home to a new machine which can accept cash deposits, - adding to the cargo point total. - - rscadd: You can also use this machine to steal credits from the cargo point total. - Doing so takes time, and will set off an alarm. - - rscadd: You can now buy an asteroid with engines strapped to it to replace the - emergency escape shuttle. - - rscadd: You can now buy a luxury shuttle to replace the emergency escape shuttle. - Each crewmember must bring 500 credits worth of cash or coins to board though. - Lexorion & Lzimann: - - tweak: Wizards have developed a new spell. It's called Arcane Barrage and it has - been reported that it has a similar function to Lesser Summon Guns! - Supermichael777: - - rscdel: The atmos grenades have been removed. if you want to burn down the shuttle - use canisters or something but at least work at it. - coiax: - - rscadd: Mice (the rodent, not the peripheral) now start in random locations. -2016-11-16: - Mysak0CZ: - - rscadd: Door can now have higher security, making them stronger and wires harder - to access - - rscadd: More info can be found on github or wiki (if this passes) - - imageadd: Protected wires now have sprites - Pubby: - - bugfix: cyclelinked airlock pairs now close behind you even when running through - at full speed. - Swindly: - - rscadd: Dice can now be rigged by microwaving them. -2016-11-18: - Cyberboss: - - bugfix: The amount of metal used to construct High Security airlocks with the - RCD is now consistent with the actual cost - Incoming5643: - - bugfix: The charge spell should once again work correctly with guns/wands - Joan: - - rscadd: Clockcult AIs have power as long as they are on a Clockwork Floor or next - to a Sigil of Transmission. This is in addition to having power under normal - conditions. - - rscadd: Clockcult silicons can now activate Clockwork Structures from a distance. - - rscdel: Interdiction Lenses will not disable cameras if there are no living unconverted - AIs. - - rscadd: Clockcult Cyborgs can charge from Sigils of Transmission by crossing them; - after a 5 second delay, the cyborg regains either their missing charge or the - amount of power in the sigil(whichever is lower) over 10 seconds. - - rscadd: You can now cancel out of selecting a robot module! - - imagedel: Robot modules now only have a generic transform animation when selected; - the borg is locked in place for 5 seconds in a small cloud of smoke while the - base borg sprite fades out and the new module fades in. - - tweak: Resetting a borg will do that animation. - - rscadd: Adds Networked Fibers, which gains points instead of automatic expansion - and causes manual expansion near its core to move its core. - - rscadd: Added a new UI style, Clockwork. - NikNak: - - rscadd: Added tator tots, made my putting a potato in the food processor - - tweak: French fries are now made by cutting up a potato into wedges and putting - the wedges (plate and all) into the food processor - coiax: - - bugfix: The observer visible countdown timer for the malfunctioning AI doomsday - device is now formatted and rounded appropriately. - erwgd: - - rscadd: You can now make emergency welding tools in the autolathe. -2016-11-19: - Crushtoe: - - imageadd: Added a shiny new icon for the reaper's scythe in-hand and normal sprite. - It's 25% less gardener. - RandomMarine: - - rscadd: An instruction paper has been added to the morgue on most maps, because - somehow it's needed. - Shadowlight213: - - rscadd: Added the AI integrity restorer as a modular computer program - - rscadd: Added an AI intelliCard slot. Insert an Intellicard into it to be able - to use the restoration program. - - bugfix: Fixes Alarm program detecting ruins - - bugfix: Fixes being unable to toggle the card reader module power - - tweak: The downloader will now tell you if a program is incompatible with your - hardware -2016-11-20: - Basilman: - - rscadd: Added a new beard style, Broken Man. - Cobby: - - tweak: Airlock security is only given to vault doors, centcomm, and Secure Tech - [Secure Tech just requires a welder] - Incoming5643: - - rscadd: The warp whistle has been added to the wizard's repertoire of spells and - artifacts. - - rscadd: The drop table for summon magic has been expanded. - Joan: - - rscdel: Servant cyborgs no longer have emagged modules. - - rscadd: Servant cyborgs now have a limited selection of scripture and tools, which - varies by cyborg type. - Kor: - - bugfix: Station goals will once again function in extended. - Swindly: - - rscadd: Added a nitrous oxide reagent. It can be created by heating 3 parts ammonia, - 1 part nitrogen, and 2 parts oxygen to 525K. The process produces water as a - by-product and will cause an explosion if too much heat is applied. -2016-11-21: - Cobby: - - tweak: mining/labor shuttles are now radiation proof. -2016-11-23: - Crushtoe: - - rscadd: Added more tips. - - bugfix: Fixes some sprites and spelling issues, namely bedsheet capes. - Cyberboss: - - bugfix: Changing an airlock's security level no longer heals it - Gun Hog: - - bugfix: Medibots now heal toxin damage again. - Joan: - - rscadd: Clockcult AIs can now listen to conversations through cameras. - - rscadd: Due to complaints that the new slab interface was too difficult to navigate, - it now starts off in compressed format. The button to toggle this is now also - larger. - Kor: - - rscadd: Rounds ending on one server will send a news report to the other server. - Shadowlight213: - - tweak: Borers now have a 10 second delay before waking up after sugar leaves the - host system - - tweak: There is a chance for borers to lose control, based on brain damage levels - Swindly: - - rscadd: Most small items can now be placed in the microwave. Remember not to microwave - metallic objects. - XDTM: - - rscadd: 'Golems now have special properties based on the mineral they''re made - of:' - - rscadd: Silver golems have a higher chance of stun when punching - - rscadd: Gold golems are faster but less armoured - - rscadd: Diamond golems are more armoured - - rscadd: Uranium golems are radioactive - - rscadd: Plasma golems explode on death - - rscadd: Iron and adamantine golems are unchanged. - jakeramsay007: - - tweak: Borers can no longer take control of people who have a mindshield implant - or are a member of either cult. This however does not stop them from infesting - and controlling them through other means, such as chemicals. -2016-11-24: - Kor: - - rscadd: Shaft miners now have access to the science channel. - Lzimann: - - rscdel: Multiverse sword is no longer buyable by wizards - erwgd: - - rscadd: Plasmamen get their own random names. -2016-11-25: - Joan: - - rscadd: Clockcult AIs with borgs 'slaved' to them will convert them when hacking - via the robotics console. - - experiment: Replaced the "No Cache" alert with an alert that will show what you - need for the next tier of scripture. - Kor: - - rscadd: The captain may now purchase an unfinished shuttle chassis, which will - dock immediately when bought, but will not launch until the end of the regular - shuttle call procedure. The shuttle is empty and devoid of atmosphere however, - so you'll need to do some work on it if you want a safe trip home. - Shadowlight213: - - bugfix: The activation button for the AI integrity restorer modular program actually - works now! - - rscdel: The cortical borer event is now admin only -2016-11-27: - Cyberboss: - - bugfix: False armblades are now removed after one minute. Start feeling the P - A R A N O I A when you see em - Gun Hog: - - rscadd: AIs piloting a mech may now be recovered with an Intellicard from the - wreckage if the mech is destroyed. They will be require repair once recovered. - - tweak: Instructions for piloting mechs as an AI are now more obvious. - - tweak: Traitor and Ratvar AIs may now be carded from mechs, at their discretion. - Joan: - - tweak: Clockwork walls are now about as hard for hulks to break as rwalls. - - rscadd: You can now quickbind up to 5 scriptures from the recital menu, and the - recital menu has less empty space. - - tweak: Clockwork slabs now only start with only Geis pre-bound. - Kor: - - rscadd: Shaft miners can now redeem their starting voucher for a conscription - kit, which contains everything they need to rope their friend into joining them - on lavaland. - - rscadd: You can now see which emergency shuttle is coming in the status panel. - Lzimann: - - rscadd: The robots stole Santa's Elfs jobs. - MMMiracles: - - tweak: Jump boots now have a pocket - - imageadd: Jump boots from mining now have on-character icons. - Mervill: - - imageadd: Disposal units now use a tgui instead of plain html - - rscadd: 'As the AI: Click an AI status display to bring up the prompt for changing - the image' - Swindly: - - rscadd: Wet leather can be dried by putting it on a drying rack. - Xhuis: - - bugfix: Plastic explosives now actually explode when you commit suicide with them. - - bugfix: Resisting out of straight jackets now works properly. - - rscdel: Highlander will no longer announce the last man standing. - - rscadd: Cyborgs can now open morgue trays. This does not include crematoriums! - uraniummeltdown: - - rscdel: Borers no longer randomly lose control based on host brain damage - - tweak: Borer Dominate Victim stun time reduced from 4 -> 2. - - tweak: Borers no longer force unhidden when infesting someone. - - tweak: Borer event is rarer (weight 20->15). - - tweak: Borer reproduction chemicals required increased from 100 to 200. -2016-11-29: - Joan: - - tweak: Interdiction Lenses are more likely to turn off if damaged. - - tweak: Reduced Interdiction Lens and Tinkerer's Daemon CV from 25 to 20. - RemieRichards: - - rscadd: Devils may now spawn with an obligation to accept dance off challanges, - if they have this obligation they also gain a spell to summon/unsummon a 3x3 - dance floor at will. - Swindly: - - rscadd: Microwaves now heat open reagent containers to 1000K. - XDTM: - - rscadd: 'Added new types of golem: glass, sand, wood, plasteel, titanium, plastitanium, - alien alloy, bananium, bluespace, each with their own traits. Experiment!' - - tweak: Golems will be told what their traits are when spawning. - - rscadd: Putting a golem in a gibber will give ores of its mineral type, instead - of meat. - - rscadd: Using Iron on an adamantine slime extract will spawn an incomplete golem - shell, that will be slaved to whoever completes it, much like a normal adamantine - golem. - jughu: - - tweak: Proselytizing airlocks into pinion airlocks takes longer. -2016-11-30: - ANGRY CODER: - - tweak: NT news reports the clandestine criminal organization known as the syndicate - may have upgraded one of their illegally stolen cyborg modules with additional - healing technology. - Cobby [Idea stolen from Shaps]: - - rscadd: For objects that you could previously rename with a pen, you can now edit - their description as well. - Cyberboss: - - rscdel: Due to budget cuts. Firelocks no longer have safety features - - bugfix: Roundstart airlock electronics now properly generate the correct accesses - - bugfix: tgui windows will now close on round end - Gun Hog: - - bugfix: Syndicate Medical Cyborg hyposprays now properly work through Operative - hardsuits and other thick clothing. - Joan: - - tweak: Cogscarabs will once again convert metal, rods, and plasteel directly to - alloy. - - tweak: Tinkerer's caches now increase in cost every 4 caches, from 5. - - rscadd: The Ark of the Clockwork Justicar now converts all silicons once it finishes - proselytizing the station. - Mervill: - - rscadd: AI hologram can move seamlessly between holopads - Thunder12345: - - rscadd: Added anti-armour launcher. A single-use rocket launcher capable of penetrating - all but the heaviest of armour. Deals massively increased damage to cyborgs - and mechs. -2016-12-02: - Cobby: - - bugfix: Removes the exploit that allowed you to bypass grabcooldowns with Ctrl+Click - PeopleAreStrange: - - tweak: Changed F7 to buildmode, F8 to Invismin (again). Removed stealthmin toggle - RemieRichards: - - rscadd: Added a new lavaland "boss" - - tweak: Hostile mobs will now find a new target if they failed to attack their - current one for 30 seconds, this reduces cheese by simply making the mob find - something else to do/someone to kill - - bugfix: Hostile mobs with search_objects will now regain that value after a certain - amount of time (per-mob, base 3 seconds), this is because being attacked causes - mobs with this var to turn it off, so they can run away, however it was literally - never turned on which caused swarmers to get depression and never do anything. -2016-12-03: - Joan: - - rscadd: Trying to move while bound by Geis will cause you to start resisting, - but the time required to resist is up by half a second. - - experiment: Resisting out of Geis now does damage to the binding, and as such - being stunned while bound will no longer totally reset your resist progress. - - rscadd: Using Geis on someone already bound by Geis will interrupt them resisting - out of it and will fully repair the binding. - - tweak: Geis's pre-binding channel now takes longer for each servant above 5. Geis's - conversion channel also takes slightly longer for each servant above 5. - - rscadd: Converted engineering and miner cyborgs can now create Sigils of Transgression. - RandomMarine: - - tweak: Airlocks will keep their original name when their electronics are removed - and replaced. You may still use a pen to rename the assembly if desired. -2016-12-04: - Durkel: - - tweak: Recent enemy reports indicate that changelings have grown bored with attacking - near desolate stations and have shifted focus to more fertile hunting grounds. -2016-12-06: - BASILMAN YOUR MAIN MAN: - - bugfix: fixes people "walking over the glass shard!" when they're on the ground, - changes message when incapacitated - Chnkr: - - rscadd: Nuclear Operatives can now customize the message broadcast to the station - when declaring war. - Cyberboss: - - bugfix: The atmos waste lines for the Metastation Kitchen and Botany departments - is now actually connected - Gun Hog: - - rscadd: Nanotrasen Janitorial Sciences Division is proud to announce a new concept - for the Advanced Mop prototype; It now includes a built-in condenser for self - re-hydration! See your local Scientist today! In the event that janitorial staff - wish to use more expensive solutions, the condenser may be shut off with a handy - handle switch! - Incoming5643: - - bugfix: The timer for shuttle calls/recalls now scales with the security level - of the station (Code Red/Green, etc.). You no longer have to feel dumb if you - forget to call Code Red before you call the shuttle! - - rscadd: Shuttles called in Code Green (the lowest level) now take 20 minutes to - arrive, but may be recalled for up to 10 minutes. They also don't require a - reason to be called. - - experiment: That doesn't mean you should call a code green shuttle every round - the moment it finishes refueling. - - rscadd: Server owners may now customize the population levels required to play - various modes. Keep in mind that this does not preserve the balance of the mode - if you change it drastically. See game_modes.txt for details. - Joan: - - rscadd: You can now proselytize floor tiles at a rate of 20 tiles to 1 brass sheet - or 2 tiles to 1 liquified alloy for cogscarabs. - - rscadd: Proselytizers will automatically pry up floor tiles if those tiles can - be proselytized. - - tweak: Brass floor tiles no longer exist. Instead, you can just apply brass sheets - to a tile. Crowbarring up a clockwork floor will yield that brass sheet. - - rscadd: You can now cancel AI intellicard wiping. - - tweak: Geis now takes 5 seconds to resist. - Mervill: - - bugfix: Examining now lists the neck slot - MisterTikva: - - rscadd: Nanotrasen informs that certain berry and root plants have been infused - with additional genetic traits. - - rscadd: Watermelons now have water in them! - - rscadd: Blumpkin's chlorine production has been reduced for better workplace efficiency. - - rscadd: Squishy plants now obey the laws of physics and will squash all over you - if fall on them. - Shadowlight213: - - bugfix: The lavaland syndicate agents, as well as the ID for all simple_animal - syndicate corpses should have their ID actually have syndicate access on it - now! - Swindly: - - rscadd: 'Adds a new toxin: Anacea. It metabolizes very slowly and quickly purges - medicines in the victim while dealing light toxin damage. Its recipe is 1 part - Haloperidol, 1 part Impedrezene, 1 part Radium.' - WJohn: - - bugfix: AI core turrets can once again hit you if you are standing in front of - the glass panes, or in the viewing area's doorway. - XDTM: - - rscadd: Quantum Pads are now buildable in R&D! - - rscadd: Quantum Pads, once built, can be linked to other Quantum Pads using a - multitool. Using a Pad who has been linked will teleport everything on the sending - pad to the linked pad! - - rscadd: 'Pads do not need to be linked in pairs: Pad A can lead to Pad B which - can lead to pad C.' - - rscadd: Upgrading a Quantum Pad will reduce the cooldown, charge-up time, and - power consumption. - - rscadd: Quantum Pads require a bluespace crystal, a micro manipulator, a capacitor - and a cable piece. - kilkun: - - rscadd: New lore surrounding the various SWAT suits. - - tweak: Captain's hardsuit/SWAT suit got a few buffs. It's now much more robust. - - bugfix: Captain's space suit is now heat proof as well as fireproof. Long overlooked - no longer. -2016-12-07: - Cyberboss: - - bugfix: Atmos canisters now stay connected after relabeling them - Incoming5643: - - rscadd: Server owners that use the panic bunker feature can now optionally redirect - new players to a different server. See config.txt for details. - LOOT DUDE: - - tweak: Swarmers will drop bluespace crystals on death, non-artificial crystals. - MisterTikva: - - rscadd: Nanotrasen Mushroom Studies Division proudly announces that growth serum - producing plants were genetically reassembled. You no longer alternate between - sizes with doses 20u+ and more effects were added to higher doses. - Thunder12345: - - bugfix: You can now only order a replacement shuttle once -2016-12-08: - Fox McCloud: - - rscadd: The ability to harvest a plant, repeatedly, is now a gene-extractable - trait that can be spliced into other plants - - rscadd: can extract the battery capabilities of potatoes and splice them into - other plants - - rscadd: Plants types are now gene traits that can be added/removed from plants - - rscadd: Adds new stinging plant trait that will inject a bit of a plant's reagents - when thrown at someone - Joan: - - rscadd: The clockwork slab's interface is now TGUI. - - imageadd: You can now see what an ocular warden is attacking. - Mervill: - - rscadd: The light replacer can now create bulbs from glass shards - - rscadd: Click a light replacer while holding a glass shard to add the shard to - the replacer - - rscadd: Click a glass shard while holding a light replacer to consume the shard - MrStonedOne: - - tweak: world initialization is now faster. - - bugfix: fixed the modify bodypart admin tool not working - PKPenguin321: - - tweak: Swarmer beacons now have 750 health, down from 3000. - TehZombehz: - - rscadd: Nanotrasen Culinary Division has authorized the production of tacos, both - plain and classic. - XDTM: - - bugfix: Replica Pod cloning now works on people who have been decapitated. - coiax: - - rscadd: Additional mice sometimes appear in the maintenance tunnels. Engineers - beware! -2016-12-10: - Cyberboss: - - bugfix: The slips bug (which made freon laggy) is fixed - Kor: - - imagedel: Deleted all (3000+) left handed inhand icons. They are now automatically - mirrored from the right hand, saving spriters a lot of tedious busywork. - - rscadd: By crafting a wall mounted flasher frame (can be ordered via cargo), a - flash, and a riot shield, you can now construct a strobe shield. The strobe - shield combines the functionality of a riot shield and a flash, and can be reloaded - with flash bulbs. - Supermichael777: - - tweak: Conveyors have been more firmly anchored. No fun allowed - Thunder12345: - - rscadd: Added the Standby Emergency Vessel "Scrapheap Challenge" as a new emergency - shuttle option. You'll even be paid 1000 credits to use it! - coiax: - - rscadd: Due to a combination of radiation and water supply contamination, stations - have been reporting animals gaining self awareness. - optional name here: - - bugfix: fixed ashdrake's flame wall. - - bugfix: fixed walls decon spawning metal in a random location in the same room. -2016-12-11: - Cobby: - - bugfix: Fixes literally everything regarding renaming so far. When adding unique_rename - to objects, make sure the attackby checks for inheritance. - - bugfix: You can pull as other mobs now. Sorry, clickcode is stupid. - Cyberboss: - - bugfix: Frozen things will now unfreeze above 0C - Joan: - - tweak: Invoking Nezbere now increases ocular warden damage slightly more, but - increases ocular warden range slightly less. - Swindly: - - tweak: The recipe for moonshine now calls for 5 units of nutriment and 5 units - of sugar instead of 10 units of nutriment. - Thunder12345: - - bugfix: Scrapheap Challenge shuttle now actually works - coiax: - - rscadd: Cyborgs now have a reset module wire, that when pulsed, triggers the cyborg's - reset module hardware. - - rscadd: Cyborgs now eject all upgrades when reset, rather than the upgrades being - destroyed. - - rscdel: Removed redundant reset module. -2016-12-12: - Dannno: - - rscadd: more chaplain outfits - - rscadd: animal and tribal masks to the theater vendor -2016-12-13: - Fox McCloud: - - rscadd: Adds in random botany seeds; never the same twice. - - rscadd: Adds in new trait that makes a grown release smoke when squashed - - rscadd: Weed rates and chances are now core seed genes - Joan: - - experiment: Clockwork proselytizers suffer doubled cost and proselytization time - when not on the station, mining, or centcom. - - soundadd: Trying to recite scripture offstation is more clearly disapproved of. - XDTM: - - bugfix: The internal rage of the crew has been suppressed, and they will no longer - attack their own backpacks when opening them. -2016-12-14: - Incoming5643: - - rscadd: Recently we've been receiving reports of cheap knock off nuclear authentication - disks circulating among the syndicate network. Don't be fooled by these decoys, - only the real deal can be used to destroy the station! - - experiment: Please don't destroy the station in an attempt to make sure the disk - is real. - Joan: - - rscdel: The Ark of the Clockwork Justicar can no longer be repaired. - - tweak: The Ark now has 20% more health. - - rscadd: The Ark of the Clockwork Justicar will now force objects away from it. - - tweak: Faster-than-normal tools are somewhat slower than before. - - tweak: Mania Motors now require a much larger amount of power to convert people - adjacent, and people converted by it are knocked out. - Mindustry: - - bugfix: Goliath meat can be cooked in lava again - Okand37: - - rscadd: DeltaStation's emergency shuttle - XDTM: - - rscadd: Abductor Agents have now been equipped with extremely advanced construction - and hacking tools. -2016-12-18: - Dannno: - - rscadd: Sec hailers can now be emagged for a more rational, calm message. - Erwgd: - - rscadd: Limb Grower circuit boards can now be made in Research and Development, - requiring level 3 in data theory and level 2 in biological technology. - Firecage: - - rscadd: The NanoTrasen Airlock Builder Federation(NTABF) has recently released - the blueprints involving building and deconstructing Titanium Airlocks! These - airlocks are now being used on all of our shuttles. - Fox McCloud: - - bugfix: Fixes the personal crafting cost of ED-209's being too expensive - Hyena: - - tweak: adds 2 geiger counters to radition protection crates and a gift from the - russians - Joan: - - rscadd: Adds Replicant and Tinkerer's Cache to the default slab quickbind. - - rscadd: Revenants will be revealed by ocular wardens when targeted. - Joan, Dagdammit: - - rscadd: You can now push Wraith Spectacles up to avoid vision damage, but lose - xray vision. - - wip: Do note that flicking them on and off very quickly may cause you to lose - vision rather quickly. - Kor: - - rscadd: Added the treasure hunter's hat, coat, uniform, and whip. These aren't - available on the map yet, but will be available to the librarian soon. - Mervill: - - rscadd: Notice boards can now have photographs pined to them - - tweak: Items removed from the notice board are placed in your hands - - bugfix: Intents can be cycled forward and backwards with hotkeys again - - bugfix: Russian revolver ammo display works correctly - - rscadd: Added a credit deposit to pubbystation's vault - - rscdel: Removed a rather garish golden statue of the HoP from pubbystation's vault - Okand37 & Lexorion: - - rscadd: Added a new hair style, the Sidecut! - Supermichael777: - - rscadd: Clockwork components the chaplain picks up are now destroyed. - Swindly: - - rscadd: Adds eggnog. It can be made by mixing 5 parts rum, 5 parts cream, and - 5 parts egg yolk. - XDTM: - - rscadd: Changelings can now buy Tentacles on the Cellular emporium for 2 evolution - points. - - rscadd: Tentacles, once used, can be fired once against an item or mob to pull - it towards yourself. Items will be automatically grabbed. Costs 10 chemicals - per tentacle. - - rscadd: 'On humanoid mobs tentacles have a varying effect depending on intent: - - Help intent simply pulls the target closer without harming him; - Disarm intent - does not pull the target but instead pulls whatever item he''s holding in his - hands to yours; - Grab intent puts the target into an aggressive grab after - it is pulled, allowing you to throw it or try to consume it; - Harm intent will - briefly stun the target on landing; if you''re holding a sharp weapon you''ll - also impale the target, dealing increased damage and a longer stun.' - - bugfix: Random golems now properly acquire the properties of the golem they pick. - - rscadd: When becoming a random golem the user is informed of the properties of - the picked golem. - coiax: - - rscadd: Chameleon clothing produced by the syndicate has been found to react negatively - to EMPs, randomly switching forms for a time. - - rscadd: Anomalies now have observer-visible countdowns to their detonation. - - rscadd: Adds upgrades for the medical cyborg! - - rscadd: The Hypospray Expanded Synthesiser that adds chemicals to treat blindness, - deafness, brain damage, genetic corruption and drug abuse. - - rscadd: The Hypospray High-Strength Synthesiser, containing stronger versions - of drugs to treat brute, burn, oxyloss and toxic damage. - - rscadd: The Piercing Hypospray (also applicable to the Standard and Peacekeeper - borgs) that allows a hypospray to pierce thick clothing and hardsuits. - - rscadd: The Defibrillator, giving the medical cyborg an onboard defibrillator. - - rscadd: Loose atmospherics pipes are now dangerous to be hit by. - - rscadd: Whenever you automatically pick up ore with an ore satchel, if you are - dragging a wooden ore box, the satchel automatically empties into the box. - dannno: - - rscadd: Adds a villain costume to the autodrobe. - - bugfix: Fixes autodrobe failing to stock items. - jughu: - - tweak: 'sandals are not fireproof or acidproof anymore :add: Magical sandals for - the wizard that are still fireproof/acid proof :tweak: makes the marisa boots - acid and fire proof too' - karlnp: - - bugfix: made facehuggers work again - - bugfix: vendors, airlocks, etc now cannot shock at a distance - uraniummeltdown: - - tweak: Side entrance to Box Medbay, a few layout changes. -2016-12-19: - spudboy: - - bugfix: Fixed items not appearing in the detective's fedora. -2016-12-20: - Kor: - - rscadd: You can put a variety of hats on cyborgs using help intent (the engiborg - can't wear hats though, as it is shaped too oddly. Sorry!) - - rscadd: 'The complete list of currently equippable hats is as follows: Cakehat, - Captains Hat, Centcomm Hat, Witch Hunter Hat, HoS Cap, HoP Cap, Sombrero, Wizard - Hat, Nurse Hat.' - Lzimann: - - bugfix: Mjor the Creative will drop his loot correctly now. - Mekhi Anderson: - - rscdel: Fixes various PAI bugs, various tweaks and bullshit. - MrPerson: - - rscadd: Starlight will have more of a gradient and generally shine a more constant - amount of light regardless of how many tiles are touching space. In dark places - with long borders to space, starlight will be much darker. -2016-12-21: - FTL13, yogstation, Iamgoofball, and MrStonedOne: - - rscadd: Space is pretty. - - tweak: You can configure how pretty space is in preferences, those of you on toasters - should go to low to remove the need to do client side animations. (standard - fanfare as job selection, left click to increase, right click to decrease) (Changes - are applied immediately in most cases, on reconnect otherwise) - Joan: - - rscadd: EMPs will generally fuck up clockwork structures. - - rscdel: Cogscarabs can no longer hold slabs to produce components. - - rscadd: Slabs will now produce components even if in a box in your backpack inside - of a bag of holding on your back; any depth you can hide the slab in will still - produce components. - - bugfix: Non-Servants in possession of clockwork slabs will also no longer produce - components. - Mekhi Anderson: - - bugfix: PAI notifications no longer flood those who do not wish to be flooded. - Shadowlight213: - - imageadd: 2 new performer's outfits have been added to the autodrobe -2016-12-24: - AnturK: - - rscadd: Implants now work on animals. - Cyberboss: - - bugfix: Dead things can no longer be used to open doors - F-OS: - - bugfix: swarmers can no longer destroy airlocks. - MrStonedOne: - - tweak: AI's call bot command has been throttled to prevent edge cases causing - lag. You will not be able to call another bot until the first bot has finished - mapping out it's route. - TehZombehz: - - tweak: Observers can now orbit derelict station drone shells, much like current - lavaland ghost role spawners, to make finding them easier. Regular drone shells - are not affected by this. - XDTM: - - rscadd: Autolathes are now true to their name and can queue 5 or 10 copies of - the same item. - coiax: - - rscadd: Cyborg renaming boards cannot be used if no name has been entered. - - rscdel: Cyborg rename and emergency reboot modules are destroyed upon use, and - not stored inside the cyborg to be ejected if modules are reset. - - rscadd: Emagging the book management console and printing forbidden lore now has - a chance of producing a clockwork slab rather than an arcane tome. - kevinz000: - - experiment: Flightsuits now have their own subsystem! - - bugfix: Flightsuits properly account for power before calculating drifting - - experiment: Flightpack users will automatically fly over anyone buckled without - crashing. - - experiment: Flightpack users automatically slip through mineral doors - - experiment: Flightpack users will crash straight through grills at appropriate - times - - experiment: Flightpack users automatically slip through unbolted airlocks - - experiment: Flightpacks are faster in space, but their space momentum decay has - been upped significantly to compensate - - experiment: Flighthelmets now have a function to allow the wearer to zoom out - to see further. Helps you not crash eh? - spudboy: - - bugfix: Gave cyborgs some hotkeys they should have had. -2016-12-27: - Firecage: - - bugfix: The Nanotrasen Sewing Club has finally fixed the problem which rendered - NT, Ian, and Grey bedsheets invisible when worn! - Hyena: - - tweak: Detective coats can now hold police batons - - bugfix: Fixes disabler in hand sprites - Joan: - - rscadd: You can now put syndicate MMIs and soul vessels into AI cores. - - rscadd: The Hierophant boss will now create an arena if you try to leave its arena. - - imageadd: The Hierophant boss, its arena, and the weapon it drops all have new - sprites. - - soundadd: And new sounds. - - wip: And new text. - - rscadd: Wizards can now buy magic guardians for 2 points. They are not limited - to one guardian, meaning they can have up to 5. If that's wise is an entirely - different question. - - experiment: Wizards cannot buy support guardians, but can buy dexterous guardians, - which can hold items. - Shadowlight213: - - tweak: Shuttle are now safe from radstorms - XDTM: - - bugfix: HUD implants now properly allow you to modify the records of those you - examine, like HUD glasses do. - - bugfix: Organ Manipulation surgery now properly heals on the cautery step. - - bugfix: The maintenance door adjacent to R&D in metastation is now accessible - to scientists, instead of requiring both science and robotics access. -2016-12-28: - Erwgd: - - rscadd: A new access level is available, named "Cloning Room". Medical Doctors, - Geneticists and CMOs start with it. - - tweak: On Box Station and on Meta Station, the cloning lab doors require Cloning - Room access in addition to each door's previous requirements. - - tweak: Cloning pods are now unlocked with Cloning Room access only. - Incoming5643: - - rscadd: There's a new category in uplinks for discounted gear. These special discounts - however can only be taken once, so even if you are lucky enough to see syndibombs - for 75% off you won't be able to nuke the entire station with them. - - bugfix: The charge spell will no longer bilk you on wand charges, and wands that - are dead won't show up as charged. - Joan: - - rscdel: Clockwork Marauders no longer have Fatigue. It was difficult to balance - and made them too easy to force into recalling. This means they just have health; - they aren't forced to recall by anything, but can accordingly die much more - easily. - - rscadd: Accordingly Clockwork Marauders now have more health, do slightly more - damage, block slightly more often, and have to go slightly further from their - host to take damage. - - rscadd: Marauders that are not recovering(from recalling while the host's health - is too high to emerge) and are inside their host, or are within a tile of their - host, will gradually heal their host until their host is above the health threshold - to emerge. - - tweak: Chaos guardians transfer slightly less damage to their summoner. - XDTM: - - tweak: Armblades now go slash slash instead of thwack thwack - - imageadd: Tentacles have some fancier sprites -2016-12-29: - Mervill: - - bugfix: Patched an exploit related to pulling a vehicle as its driver while in - space - - bugfix: Fixed evidence bags not displaying their contents when held - - bugfix: Clothing without a casual variant will no longer say it can be worn differently - when examined - - bugfix: Only standard handcuffs can be used to make chained shoes - - bugfix: Fixed cards against space - - bugfix: Drying rack sprite updates properly when things are removed without drying - XDTM: - - rscadd: Colossi now drop the Voice of God, a mouth organ that, if implanted, allows - you to speak in a HEAVY TONE. This voice can compel hearers to briefly obey - certain codewords, such as "STOP". Using these codewords will severely increase - this ability's cooldown, and only one will be used per sentence. - - rscadd: 'Use .x, :x, or #x as a prefix to use Voice of God or any future vocal - cord organs.' - - rscadd: Chaplains, being closer to the gods, and command staff, being used to - giving orders, gain an increased effect when using the Voice of God. The mime, - not being used to speaking, has a reduced effect. -2016-12-31: - hyena: - - bugfix: fixes caps suit fire immunity - kevinz000: - - bugfix: Machine overloads/overrides aren't as bullshit as you'll actually be able - to dodge it now. -2017-01-01: - A whole bunch of spiders in a SWAT suit: - - bugfix: spiders can't wrap anchored things -2017-01-02: - MrStonedOne: - - tweak: Throwing was refactored to cause less lag and be more precise - - rscadd: Item throwing now imparts the momentum of the user throwing. Throwing - in the direction you are moving throws the item faster, throwing away from the - direction you are moving throws the item slower. This should make hitting yourself - with floor tiles less likely. - XDTM: - - bugfix: Storage bags should now cause less lag when picking up large amounts of - items. - - bugfix: Storage bags now don't send an error message for every single item they - fail to pick up. -2017-01-03: - Cyberboss: - - bugfix: AIs can no longer see cult runes properly - Mervill: - - bugfix: Can't kick racks if weakened, resting or lying -2017-01-06: - Cruix: - - bugfix: Fixed the leftmost and bottommost 15 turfs not having static for AIs and - camera consoles - Joan: - - bugfix: Tesla coils and grounding rods must be anchored with a closed panel to - function, ie; not explode when shocked. - - tweak: Metastation's xenobio has been slightly modified to avoid getting hit by - some standard shuttles. - Mervill: - - bugfix: Regular spraycans aren't silent anymore - MrStonedOne and Ter13: - - rscadd: Added some ping tracking to the game. - - rscadd: Your ping shows in the status tab - - rscadd: Other players ping shows in who to players and admins. - Nabski89: - - bugfix: Re-Vitiligo Levels to match wiki. - XDTM: - - tweak: Voice of God's Sleep lasts less than the other stuns. - - rscadd: You can also use people's jobs to single them out, instead of only names. - - tweak: If multiple people share the same name/job they'll all be included, although - at a reduced bonus. - - tweak: Names and jobs will only be accepted if they're the first part of the command, - and not in the middle, to prevent unintended focusing. - - bugfix: Voice of God now shows speech before the emotes it causes. - - bugfix: Special characters are no longer over-sanitized. - - bugfix: You can now properly apply items to clothing with pockets, such as slime - speed potions on clown shoes. - - bugfix: Mechs are now able to enter wormhole-sized portals. -2017-01-08: - Mervill: - - bugfix: pre-placed posters don't retain their pixel offset when taken down carefully - - bugfix: Dinnerware Vendor will show it's wire panel - Nanotrasen Station Project Advisory Board: - - wip: It is highly recommended that, when constructing the Meteor Shield project, - you are able to see, at minimum, two meteor shields from a stationary location. - The Nanotrasen Station Project Advisory Board is not liable for meteor damage - taken under wider shield arrangements. - Speed of Light Somehow Changed: - - tweak: Dynamic lights are no longer animated, and update instantly - - tweak: Increased maximum radius of mob and mobile lights -2017-01-10: - Arianya: - - bugfix: Doors and vending machines once again make a sound when you screwdriver - them. - Cyberboss: - - bugfix: Explosions can no longer be dodged - - tweak: Airlocks are now destroyed by the same level explosion that destroys walls - - tweak: Diamond/External/Centcomm airlocks and firedoors now block explosions as - walls do - Joan: - - experiment: Clockwork Proselytizers no longer require Replicant Alloy to function; - instead, they gradually charge themselves with power, which is used more or - less the same as alloy. - - tweak: Clockwork Proselytizers now produce brass sheets when used in-hand, instead - of Replicant Alloy. - - rscdel: Tinkerer's Caches can no longer have Replicant Alloy removed from them; - using an empty hand on them will simply check when they'll next produce a component. - - rscdel: Mending Motors can no longer use Replicant Alloy in place of power. - Mervill: - - bugfix: Controlling the station status displays no longer overrides the cargo - supply timer - MrStonedOne: - - experiment: Lighting was made more responsive. - XDTM: - - rscadd: Earmuffs and null rods protect against the Voice of God. - - rscadd: Earmuffs are now buildable in autolathes. - - tweak: Voice of God stuns have a longer cooldown. - coiax: - - rscadd: Girders now offer hints to their deconstruction when examined. -2017-01-13: - Cyberboss: - - bugfix: Walls blow up less stupidly - - bugfix: You no longer drop a beaker after attempting to load it into an already - full cryo cell - Joan: - - bugfix: Instant Summons is no longer greedy with containers. - Mervill: - - bugfix: Hardsuits, amour and other suits that cover the feet now protect against - glass shards - - bugfix: You will now lose the lawyer's speech bubble effect if you unequip the - layer's badge - MrStonedOne: - - tweak: More performance tweaks with the modulated reactive ensured entropy frame - governor system - PKPenguin321: - - tweak: Ash walker tendrils will now restore 5% of their HP when fed. - Shadowlight213: - - bugfix: Borg emotes should now play at the correct pitch - - bugfix: The ID console now properly handles authorization - - bugfix: Clicking on one of the ID cards in the UI will no longer eject both of - them - Thunder12345: - - bugfix: Morphs will no longer retain the colour of the last thing mimicked when - reverting to their true form - XDTM: - - bugfix: Patches' application is now properly delayed instead of instant. - - bugfix: Accelerator laser cannons' projectile now properly grows with distance. - coiax: - - rscadd: The end of round stats include the number of people who escaped on the - main emergency shuttle. -2017-01-14: - Cyberboss: - - bugfix: Explosions now flash people properly - Lzimann: - - bugfix: Fixes TGUI not working for people without IE11 - Thunder12345: - - bugfix: Recoloured mobs and objects will no longer produce coloured fire. - XDTM: - - bugfix: Nanotrasen decided that the "violent osmosis" method for refilling fire - extinguishers was, while cathartic, too expensive, due to the water tank repair - bills. Water tanks now have a tap. - - bugfix: (refilling extinguishers from tanks won't make you hit them) - - bugfix: Golems no longer drop belt, id, and pocket contents in a fit of extreme - clumsiness when drawing a sword from a sheath. - - bugfix: Wrenching portable chem dispensers won't cause you to immediately try - unwrenching them. - coiax: - - bugfix: Blue circuit floors are now restored to their normal colour if an AI doomsday - device is disabled. -2017-01-16: - Cyberboss: - - bugfix: Firedoors no longer have maintenance panels - - tweak: Firedoors must now be welded and screwdrivered prior to be deconstructed - Joan: - - rscadd: Ratvar will now convert lattices and catwalks to clockwork versions. - XDTM: - - tweak: Updating your PDA info with an agent id card inside will also overwrite - the previous name. - - bugfix: Loading a xenobiology console with a bio bag won't cause you to smack - it with it. - - tweak: Chemical splashing is now based on distance rather than affected tiles. - - bugfix: You can now properly wet floors by putting enough water in a grenade. - - bugfix: Floating without gravity won't drain hunger. -2017-01-18: - Mervill: - - bugfix: Using a welder to repair a mining drone now follows standard behaviour - - bugfix: Redeeming the mining voucher for a mining drone now also provides welding - goggles - - bugfix: ntnrc channels are now deleted properly - Tofa01: - - bugfix: Moved all sprites for heat pipe manifold either up or down by one so that - they will line up correctly when connected to adjacent pipes. - uraniummeltdown: - - rscadd: More AI holograms! -2017-01-19: - Cyberboss: - - bugfix: Various abstract entities will no longer be affected by spacewind - - bugfix: Ash will, once again, burn in lava - - rscadd: Active testmerges of PRs will now be shown in the MOTD - - bugfix: You will no longer appear to bleed while bandaged - Joan: - - spellcheck: Clockwork airlocks now have more explicit deconstruction messages, - using the same syntax as rwall deconstruction. - Mervill: - - bugfix: Raw Telecrystals won't appear in the Traitor's purchase log at the end - of the round - MrStonedOne: - - bugfix: Fixed excessive and immersion ruining delay on the smoothing of asteroid/mining - rock after a neighboring rock turf was mined up. - XDTM: - - bugfix: Plasmamen that are set on fire by reacting with oxygen will burn even - if they have protective clothing. It will still protect from external fire sources. - - tweak: Atmos-sealing clothing, like hardsuits, will protect plasmamen from reacting - with the atmosphere. - - tweak: Plasmamen can survive up to 1 mole of oxygen before burning, instead of - burning with any hint of oxygen. - - bugfix: Nanotrasen no longer ships self-glueing posters. You'll have to finish - placing the posters to ensure they don't fall on the ground. - - bugfix: Exosuits can't push anchored mobs, such as megafauna or tendrils, anymore. - coiax: - - bugfix: AIs can no longer activate the Doomsday Device off-station. Previously - it would activate and then immediately turn off, outing the AI as a traitor - without any benefit. -2017-01-20: - CoreOverload: - - tweak: Any sharp item can now be used for "incise" surgery step, with 30% success - probability. - Joan: - - rscadd: Sentinel's Compromise will also convert oxygen damage into half toxin, - in addition to brute and burn. - - tweak: Reduced the Ark of the Clockwork Justicar's health from 600 to 500 - - rscadd: You can now pull objects past the Ark of the Clockwork Justicar without - them being moved and or destroyed by its power. - MrStonedOne: - - tweak: Server side timing of the parallax shuttle launch animation now runs on - client time rather than byond time/server time. This will fix the odd issues - it has during lag. The parallax shuttle slowdown animation will still have issues, - those will be fixed in another more involved update to shuttles. - - rscadd: The window will flash in the taskbar when a new round is ready and about - to start. - Tofa01: - - bugfix: Moved The CentComm station 6 tiles to the left in order to prevent large - shuttles such as "asteroid with engines on it" from clipping off the end of - the right side of the map. - XDTM: - - bugfix: Chameleon PDAs can now morph into assistant PDAs. - - bugfix: A few iconless items have been blacklisted from chameleon clothing. - - tweak: Reviver implants now warn you when they're turning on or off, or when giving - a heart attack due to EMP. -2017-01-22: - ChemicalRascal: - - tweak: Voice analyzers in "inclusive" mode (the default mode) are now case-insensitive. - Cyberboss: - - tweak: You can no longer meatspike bots and silicons - - bugfix: Secbots will now drop the baton type they were constructed with - Dannno: - - rscadd: yeehaw.ogg is now a round end sound - Fox McCloud: - - tweak: drying meat slabs and grapes now yields a healthy non-junkfood snack - Hyena: - - rscadd: Adds paint remover to the janitors closet - Joan: - - rscadd: Clockwork Proselytizers can now convert lattices and catwalks. This has - negative gameplay benefit, but looks cool. - - rscadd: Sigils of Transmission can be accessed by clockwork structures in a larger - range. - - tweak: You can see, when examining a clockwork structure, how many sigils are - in range of it. - - rscadd: Clockwork constructs will toggle clockwork structures instead of attacking - them. - Shadowlight213: - - bugfix: Zombies will now get their claws upon zombification - Thunder12345: - - rscadd: The indestructible walls on CentComm will now smooth. - Tofa01: - - tweak: Changed alert message on early launch Authorization shuttle repeal message. - - bugfix: Makes the repeal message work and push a alert to the crew properly, also - reports every Authorization repeal now. - - bugfix: Auto Capitalisation will now work with all types of MMI chat - Ultimate-Chimera: - - rscadd: Adds a new costume crate to the cargo ordering console. - XDTM: - - rscadd: Xenobiology consoles are now buildable from circuitboards in R&D. They'll - be limited to the area they're built in plus any area with the same name. - - rscadd: Stock Exchange computers are now also buildable this way. - - rscadd: Androids now speak in a more robotic tone of voice. - - imageadd: Armblades now look a bit more bladelike. - coiax: - - rscadd: The Delta emergency shuttle now travels towards the south, rather than - the north. This changes nothing except which direction the stars rushing past - the windows are moving. - - bugfix: Fixed dragging the spawn protection traps on CTF. -2017-01-24: - CoreOverload: - - rscadd: You can now buckle handcuffed people to singularity/tesla generators, - RTGs, tesla coils and grounding rods. - Cyberboss: - - tweak: Firealarms now go off if it's too cold - - bugfix: World start will no longer lag - - bugfix: Dismembered heads will now use a mob's real name - Joan: - - rscadd: Clockwork Slabs can now focus on a specific component type to produce. - - experiment: 'Redesigned: Volt Void now allows you to fire up to 5 energy rays - at targets in view; each ray does 25 laser damage to non-Servants in the target - tile. The ray will consume power to do up to double damage, however.' - - wip: Failing to fire a Volt Void ray will damage you, though you won't die from - it unless you have access to a lot of power and are either low on health or - fail all five rays in a row. - - rscadd: The Ark of the Clockwork Justicar will gradually convert objects near - it with increasing range as it gets closer to activating. - - tweak: 'Brass windows have 20% less health, and are accordingly easier to destroy. - Fun fact: Lasers do more damage to brass windows!' - - tweak: 'Wall gears have 33% less health and are slightly faster to deconstruct. - Fun fact: You can climb over wall gears!' - - tweak: Marauders will heal more of their host's damage, on average, per life tick. - - rscadd: Clockwork Proselytizers can now repair Servant silicons and clockwork - mobs. This works in the same manner as repairing clockwork structures. - - tweak: Cogscarabs work slightly differently, and act as though the proselytizer - is a screwdriver. - Kor: - - rscadd: Megafauna will not heal while on the station. Do not be afraid to throw - your life away to get in a few toolbox hits. - Shadowlight213: - - rscdel: PAIs can no longer ventcrawl - Tofa01: - - rscadd: '[Delta Station] Adds a tracking beacon to AI MiniSat Exterior Hallway' - coiax: - - rscdel: Statues are now just incredibly tough mobs, rather than GODMODE. As a - side effect, they are no longer immune to bolts of change. - - bugfix: Fixed some issues with X (as Y) names on polymorphed mobs. -2017-01-26: - Robustin: - - tweak: Unholy Water can now be thrown or vaporized to deliver a powerful poison - unto the cult's enemies - or healing and stun resistance to its acolytes. - Tofa01: - - tweak: Moved Meta station AI MiniSat tracking beacon to AI MiniSat entrance. Should - prevent being regular teleported into space. - - bugfix: Added missing row of pixels to Flypeople torso so head connects to body - properly. - Tofa01 & XDTM: - - rscadd: Adds radio alert messages going to medical channel to the cryo tube when - a patient is fully restored. - - soundadd: Adds new alert sound for cryo tube. (cryo_warning.ogg) - XDTM: - - rscadd: Voice of God has received a few more commands. - - rscadd: You can now use job abbreviations (ex. hos > head of security) and first - names (ex. Duke > Duke Hayka) to focus targets. - coiax: - - rscadd: The nuclear operative cybernetic implant bundle now actually contains - implants. - - rscdel: The cybernetic implant bundle is no longer eligible for discounts (bundles - are, in general, not eligible). - - rscadd: Telecrystals can be purchased in stacks of five and twenty. - - rscadd: The entire stack of telecrystals are added to the uplink when charging - them. -2017-01-27: - Joan: - - tweak: Buckshot now does a maximum of 75 damage, from 90. - - tweak: The unique cyborg scriptures(Linked Vanguard, Judicial Marker) take 3 seconds - to invoke, from 4. - - tweak: Invoking Inath-neq and Invoking Nzcrentr now both take 10 seconds to invoke, - from 15. - Lzimann: - - rscadd: Now you can choose what department you want to be as security! (This may - not be completly reliable). - RemieRichards: - - rscadd: 'Emagging a sleeper now randomises the buttons, the buttons remain the - same until randomised again so you can "learn" the new button config if you''re - a masochist, Inject omnizine but realise far too late that it''s all morphine, - woops! (Note: Epinephrine can always be injected, regardless of chem levels, - this means if something !!FUN!! ends up on the Epinephrine button, it will always - be injectable!)' - Sweaterkittens: - - tweak: There are now updated names and descriptions for the items that your plasma-based - crewmembers start with and use frequently. -2017-01-28: - Joan: - - tweak: Brass windows no longer start off anchored, but are constructed instantly. - - bugfix: You can no longer stack multiple windows of the same direction on a tile. - - rscadd: Vitality Matrices now share vitality globally, allowing you to use vitality - gained from any Matrix. - - tweak: Geis now mutes human targets if there are less than 6 Servants. - - tweak: Geis no longer produces resist messages below 6 Servants; this isn't a - change, as Geis cannot be successfully resisted below 6 Servants. - - tweak: Applying Geis to an already bound target will also mute them, in addition - to preventing resistance. - RemieRichards: - - rscadd: A New weapon for clown mechs, the Oingo Boingo Punch-face! it's a giant - boxing glove that extends out on a spring and sends atoms flying (including - anchored ones and things that make no sense to move because -clowns-) - Tofa01: - - bugfix: Mop will no longer try and clean tile under janitorial cart when wetting - the mop. - - rscadd: Adds modular computers to Metastation. - - bugfix: Fixes no air in Deltastation maintenance kitchen. - - rscadd: Adds a modular computer to the CE office on Pubbystation. - Xhuis: - - rscadd: Energy-based weapons can now light cigarettes. - coiax: - - rscadd: Communication consoles now share cooldowns on announcements. - - rscadd: Cyborgs can now alter the messages of the announcement system. - - bugfix: Deadchat is now notified of any deaths on the shuttle or on Centcom. The - CTF arena does not generate death messages, due to the high levels of death. - - rscadd: The Human-level Intelligence event now occurs slightly more often, and - produces a classified message. - kevinz000: - - rscadd: Emitters and Tesla Coils now have activation wires! - - rscadd: Emitters will shoot out an emitter bolt when pulsed, regardless of it - is on. - - rscadd: Tesla coils will shoot lightning when pulsed, if it is connected to a - cable that has power. - - bugfix: Bolas no longer restrain your hands for 10 seconds when you try to remove - them and fail. -2017-01-29: - BASILMAN YOUR MAIN MAN: - - rscadd: Added a new sailor outfit to the autodrobe, now you can play sailors vs - pirates. - BlakHoleSun: - - rscadd: Added new reaction with the rainbow slime extract. Injecting a rainbow - slime extract with 5u of holy water and 5u of uranium gives you a flight potion. - Cobby: - - tweak: AI's can now be your banker by manipulating the stock machine. - Cyberboss: - - experiment: Nuclear bombs now detonate - - rscadd: You can now link additional cloning pods in the same powered area to a - single computer using a multitool. - Fox McCloud: - - bugfix: Fixes Kudzu seed gene stats not being properly altered by certain reagents - - bugfix: Fixes Kudzu vine dropped seeds not properly having gene stats set - - bugfix: Fixes glowshrooms having an invalidly high lifespan - - bugfix: Fixes explosive vines not properly chaining - Joan: - - rscadd: Clockwork Marauders now grant their host action buttons to force them - to emerge/recall and communicate with them, instead of requiring the host to - type their name or use a verb, respectively. - - rscdel: Clockwork Marauders no longer see their block and counter chances; this - was mostly useless info, as knowing the chance didn't matter as to what you'd - do. - - rscdel: Clockwork Marauders can no longer change their name. - - tweak: Clockwork Marauders have a slightly lower chance to block, and take slightly - more damage when far from their host. - - bugfix: Fixes a bug where Clockwork Marauders never suffered reduced damage and - speed at low health and never got the damage bonus at high health. - Kor: - - rscdel: Stimpacks are no longer available in the mining vendor. - Lzimann: - - rscadd: You can now change your view range as ghost. To do so, either use the - View Range verb in the ghost tab, the mouse scroll up/down or control + "+"/"-". - The verb also works as a reset if you changed your view. - Sogui: - - tweak: There are now 2 less traitors in the double agent mode - - tweak: All security (and captain) suit sensors are set to max by default - Supermichael777: - - tweak: The wooden chair with wings is now craft-able. -1 non reconstruct-able - map object - - rscadd: Added the Tiki mask, you can make it in wood's crafting menu. - - imageadd: Ported Tiki mask's sprites from Hippie station. It is under the same - Creative Commons 3.0 BY-SA as the rest of our sprites. They are from Nienhaus. - Tofa01: - - rscadd: Adds a camera network onto the Omega Station. - - imageadd: Added new sprite for the AI Slipper. - XDTM: - - tweak: Implanting chainsaws is now a prosthetic replacement instead of its own - surgery. - - rscadd: You can now implant synthetic armblades (from an emagged limb grower) - into people's arms to use it at its full potential. - - rscdel: Chainsaw removal surgery has been removed as well; you'll have to sever - the limb and get a new one. - Xhuis: - - rscadd: AI control beacons are a new item created from the exosuit fabricator. - When installed into a mech, it allows AIs to jump to and from that mech freely. - Note that malfunctioning AIs with the domination power unlocked will instead - be forced to dominate the mech. - - tweak: Some timed actions are no longer interrupted while drifting through space. - - rscadd: Riot foam darts can now be constructed from a hacked autolathe. - bgobandit: - - rscadd: The library computer can now upload scanned books to the newscaster. Remember, - seditious or unsavory news channels should receive a Nanotrasen D-Notice! - - rscadd: The library computer can now print corporate posters as well as Bibles. - - rscdel: Cargo no longer offers a corporate poster crate. Nobody ever bought it - anyway. - coiax: - - rscadd: The Librarian now starts with a chisel/soapstone/chalk/magic marker capable - of engraving messages for subsequent shifts, and permanently erasing messages - that the Librarian is unhappy with. It has limited uses, so order more at Cargo. - - bugfix: The contraband cream pie crate is now locked, and requires Theatre access. - - rscadd: Any silicons created by bolts of change have no laws. - - rscadd: Cyborgs are immune to polymorph while changing module. - - rscadd: Adds Romerol to the traitor uplink for 25 TC. (This means you need a discount, - or to work with another traitor to afford it). Romerol is a highly experimental - bioterror agent which silently create dormant nodules to be etched into the - grey matter of the brain. On death, these nodules take control of the dead body, - causing limited revivification, along with slurred speech, aggression, and the - ability to infect others with this agent. - - rscdel: Zombie infections are no longer visible on MediHUD. - - rscdel: Zombies no longer tear open airlocks, since they can just smash them open - just as fast. - - rscdel: Zombies are no longer TOXINLOVING. - - rscadd: EMPs may cause random wires to be pulsed. Please ensure that sensitive - equipment avoids exposure to heavy electromagnetic pulses. - jughu: - - tweak: Changes some cargo export prices - ma44: - - tweak: Nanotrasen has improved training of the crew, teaching crewmembers like - you to unscrew the top off the bottle and pour it into containers like beakers. - vcordie: - - bugfix: Loads the HADES carbine with the correct bullet. - - tweak: The SRM-8 Rocket Pods have been loaded with new explosives designed to - do maximum damage to terrain. These explosives are less effective on people, - however. -2017-01-30: - BASILMAN YOUR MAIN MAN: - - rscadd: Added BM SPEEDWAGON THE BEST (AND ONLY) SPACE CAR ON THE MARKET. - CoreOverload: - - tweak: Clicking item slot now clicks the item in it. - Cyberboss: - - bugfix: Judicial visors now recharge properly - - bugfix: Gluon grenades now properly freeze turfs - - bugfix: Revs are now properly jobbanned - Fox McCloud: - - tweak: Plant analyzers will now display plant traits - - tweak: Plant analyzers will now display all of a grown's genetic reagents - Joan: - - rscdel: Cutting off legs no longer stuns. - - tweak: Volt Void now only allows you to fire 4 volt rays instead of 5, and the - damage of each ray has been reduced to 20, from 25. - - rscdel: Cyborgs using Volt Void now take damage if they fail to fire. - - experiment: 'Clockwork scripture can no longer require more components than it - consumes: This means that most scriptures ""cost"" one less component.' - MrStonedOne: - - rscadd: Because of abuse, actions on interfaces are throttled. Some bursting is - allowed. You will get a message if an action is ignored. Server operators can - configure this in config.dm - Tofa01: - - bugfix: '[Delta] Fixes area names for Deltastation' - - bugfix: '[Delta] Fixes custodial closet being cold all the time on Deltastation' - bgobandit: - - rscadd: Nanotrasen supports the arts. We now offer picture frames! - coiax: - - rscdel: The Syndicate "Uplink Implant" now has no TC precharged. You can charge - it with the use of physical telecrystals. The price has been reduced from 14TC - to 4TC accordingly. (The uplink implant in the implant bundle still has 10TC). - - rscadd: Syndicate bombs and nuclear devices now have a minimum timer of 90 seconds. - - rscadd: Camoflaged HUDs given to head revolutionaries now function the same as - chameleon glasses in the chameleon kit bundle, giving them an action button - and far more disguise options. - - rscadd: Syndicate thermals are also now more like chameleon glasses as well. - - rscadd: You can regain a use of a soapstone by erasing one of your own messages. - (This means you can remove a message if you don't like the colour and want to - try rephrasing it to get a better colour). Erasing someone else's message still - uses a charge. - - bugfix: Fixes bugs where you'd spend a charge without engraving anything. - - bugfix: Fixes a bug where the wrong ckey was entered in the engraving, you won't - be able to take advantage of the "recharging" on messages made before this change. -2017-01-31: - Cyberboss: - - tweak: The cyborg hugging module can no longer self target - Joan: - - tweak: Changed what scriptures and tools Servant cyborgs get; a full list can - be found on the clockwork cult wiki page. - RemieRichards: - - rscadd: Added the ability to choose where your uplink spawns, choose between the - classic PDA, the "woops you don't actually have a PDA" fallback Radio uplink - and the brand new Pen uplink! -2017-02-01: - Cyberboss: - - bugfix: AI integrity restorer computer now respects power usage - - bugfix: Progress bars will now stack vertically instead of on top of each other - - bugfix: Progress bars will no longer be affected by lighting - Xhuis: - - rscadd: You can now fold up bluespace body bags with creatures or objects inside. - You can't fold them up if too many things are inside, but anything you fold - up in can be carried around in the object and redeployed at any time. -2017-02-03: - Cobby: - - rscadd: Ghosts will now be informed when an event has been triggered by our lovely - RNG system. - Cyberboss: - - tweak: Firedoors will eventually reseal themselves if left open during a fire - alarm - Joan: - - tweak: Clockwork Marauders have 25% less health, 300 health from 400. - - wip: The Vitality Matrix scripture is now a Script, from an Application. Its cost - has been accordingly adjusted. - - tweak: Vitality Matrices will be consumed upon successfully reviving a Servant. - They also drain and heal conscious targets slightly slower. - - wip: The Fellowship Armory scripture is now an Application, from a Script. Its - cost has been accordingly adjusted. - - tweak: Fellowship Armory now affects all Servants in view of the invoker, and - will replace weaker gear and armor with its Ratvarian armor. Also, clockwork - treads now allow you to move in no gravity like magboots. - - rscdel: Mania Motors no longer instantly convert people next to them. - - rscadd: Instead, you have to remain next to them for several seconds, after which - you will be knocked out, then converted if possible. - - tweak: Mania Motors now cost slightly less power to run. - Jordie0608: - - tweak: Admin notes, memos and watchlist entries now use a generalized system, - they can all be accessed from the former notes browser. - - rscadd: Added to this are messages, which allow admins to leave a message for - players that is delivered to them when they next connect. - Lexorion: - - tweak: Laser projectiles have a new sprite! They also have a new effect when they - hit a wall. - Sweaterkittens and Joan: - - rscadd: Ocular Wardens will now provide auditory feedback when they acquire targets - and deal damage. - - soundadd: adds ocularwarden-target.ogg, ocularwarden-dot1.ogg and ocularwarden-dot2.ogg - to the game sound files. - Tofa01: - - bugfix: '[Delta] Allows Station Engineers to access Delta Atmospherics Solar Panel - Array Room.' - - rscadd: '[Omega] Adds a Massdriver room to chapel on Omegastation.' - bgobandit: - - rscadd: All art storage facilities offer construction paper now! - coiax: - - rscadd: A victim of a transformation disease will retain their name. - - tweak: The slime transformation disease can turn you into any colour or age of - slime. - - rscadd: The Abductor event can now happen at any time, rather than thirty (30) - minute plus rounds. -2017-02-04: - Cyberboss: - - bugfix: Modular computers now explode properly - - bugfix: Emagged holograms can no longer be exported for credits - - bugfix: Abstract entities no longer feed the singularity - - tweak: Machine frames will no longer be anchored when created - Joan: - - rscadd: Vanguard now shows you how long you have until it deactivates. - Kor: - - rscadd: 'By combing two flashlights and cable coil, you can create a new eye implant: - flashlight eyes. People with flashlights for eyes can not see, but they will - provide an enormous amount of light to their friends.' - - rscadd: Valentines day will now randomly pair up crew members on dates. The paired - crewmembers will get an objective to protect each other at all costs. - Steelpoint: - - rscadd: Addition of two security DragNETs to Deltastations, Omegastations and - Metastations armouries. - Tofa01: - - rscadd: '[Delta] Removes space money from gold crate replaces with 3 Gold Bars - Gold Wrestling belt is still there.' - - rscadd: '[Delta] Removes space money from silver crate replaces with 5 Silver - Coins.' - - bugfix: Fixes incorrect placement of RD modular computer on Metastation. - WhiteHusky: - - rscadd: Fields are supported when printing with a modular computer - - rscadd: PRINTER_FONT is now a variable - - rscdel: Removed the [logo] tag on Modular computers as the logo no longer exists - - tweak: New lines on paper are parsed properly - - tweak: '[tab] is now four non-breaking spaces on papers' - - tweak: Papers have an additional proc, reload_fields, to allow fields made programmatically - to be used - - tweak: 'stripped_input stripped_multiline_input has a new argument: no_trim' - - bugfix: Modular computers no longer spew HTML when looking at a file, rather it - is unescaped like it should - - bugfix: Modular computers no longer show escaped HTML entities when editing - - bugfix: Modular computers can now propperly read and write from external media - - bugfix: Modular computers' file browser lists files correctly - - spellcheck: NTOS File Manager had a spelling mistake; Manage instead of Manager - coiax: - - bugfix: Engraved messages can no longer be moved by a gravitational singularity. - - tweak: The deadchat notification of randomly triggered events now uses the deadsay - span. - - rscdel: The wizard spell "Rod Form" does not produce a message in deadchat everytime - it is used. -2017-02-05: - Cyberboss: - - bugfix: Shuttle docking/round end shouldn't lag as much - - rscadd: There's a new round end sound! - Hyena: - - bugfix: The bible now contains 1 whiskey - Joan: - - rscadd: Ratvar-converted AIs become brass-colored, speak in Ratvarian, and cannot - be carded. - Kor: - - rscadd: Eyes are now organs. You can remove or implant them into peoples heads - with organ manipulation surgery. A mob without eyes will obviously have trouble - seeing. - - rscadd: All special eye powers are now tied to their respective organs. For example, - this means you can harvest an alien or shadow persons eyes, have them implanted, - and gain toggle-able night vision. - - rscadd: All cybernetic eye implants are now cybernetic eyes, meaning you must - replace the patients organic eyes. HUD implants are still just regular implants. - Lzimann: - - rscadd: Tesla zaps can now generate an energy ball if they zap a tesla generator! - Sweaterkittens: - - rscadd: The station's Plasmamen have been issued a new production of envirosuits. - The most notable change aside from small aesthetic differences is the addition - of an integrated helmet light. - - tweak: Tweaked a few of the Plasma Envirosuit sprites to be more fitting thematically. - Swindly: - - bugfix: Saline-glucose solution can no longer decrease blood volume - - rscadd: Cyborg hyposprays can now dispense saline-glucose solution - - rscadd: Saline-glucose solution now increases blood volume when it heals - coiax: - - bugfix: The mulligan reagent can now be created with 1u stable mutation toxin - + 1u unstable mutagen. - - rscdel: Tesla balls cannot dust people near grounding rods. - - rscadd: Soapstones/chisel/magic markers/chalk can remove messages for free. Removing - one of your own messages still grants a use. - - rscadd: The Janitor starts with a dull soapstone for removing unwanted messages. - xmikey555: - - tweak: The tesla engine no longer destroys energy ball generators. -2017-02-06: - Xhuis: - - rscadd: Traitor janitors can now order EZ-clean grenades for 6 telecrystals per - bundle. They function like normal cleaning grenades with an added "oh god my - face is melting" effect, and can also be found in surplus crates. -2017-02-07: - Cyberboss: - - bugfix: Wire, atmos, and disposal networks no longer work across hyperspace when - on the border of a shuttle - - bugfix: Implants that work on death will now work for simple_animals - - bugfix: The target moving while being implanted will no longer continue the implant - - bugfix: Implanters now show progress bars as they were intended to - - bugfix: Pipe painters are no longer aggressive - - bugfix: Carding the AI will now stop a doomsday device - - rscadd: The job subsystem now loads instantly. No more waiting to set your occupation - prefs! - - bugfix: The rare case of duping your inventory at roundstart has been fixed - - bugfix: Self deleting stackable items are fixed - Dannno: - - tweak: We've switched to a new brand of colored jumpsuit. - JJRcop: - - tweak: Adds 4% chance when assigning a valentines day date to also assign someone - else to the same date, but your date will still have you as their only date. - Poojawa: - - bugfix: '[Delta] Active turfs down from 300+' - - bugfix: '[Delta] Janitor closet isn''t 2.7K anymore' - - bugfix: '[Delta] Various pipe fixes' - RemieRichards: - - rscadd: Added a new checmial, Skewium, it's produced by mixing rotatium, plasma - and sulphuric acid in the ratio 2:2:1, which results in 5 Skewium. - Swindly: - - bugfix: Robotic eyes can no longer be eaten - Tofa01: - - bugfix: Fixes grammar issue when changing someones appearance via plastic surgery. - - tweak: '[OmegaStation] Allows Chaplain job to be selectable.' - - bugfix: '[Omega] Fixes Overpressurization In Mass Driver Room' - Xhuis: - - rscadd: Traitor clowns can now buy a reverse revolver. I'll leave it up to you - to guess what it does. Honk. - iamthedigitalme: - - imageadd: Legion has a new, animated sprite. - kevinz000: - - rscadd: 'ADMINS: SDQL2 has been given some new features!' - - bugfix: SDQL2 now gives you an exception on runtime instead of flooding server - runtime logs. - - rscadd: SDQL2 now supports usr, which makes that variable reference to whatever - mob you are in, src, which targets the object it is being called on itself, - and marked, which targets the datum marked by the admin calling it. Also, it - supports hex references (the hex number at the top of a VV panel) in {}s, so - you can target nearly anything! Also, global procs are supported by global.[procname](args), - for CALL queries. - - bugfix: SDQL2 can no longer edit /datum/admins or /datum/admin_rank, and is protected - from changing x/y/z of a turf and anything that would cause broken movement - for movable atoms. - - rscadd: SDQL2 can now get list input with [arg1, arg2]! - - experiment: Do '""' to put strings inside of SDQL2 or it won't work. -2017-02-09: - Cyberboss: - - bugfix: Certain firedoors that should have closed during an alarm now actually - close - - soundadd: You can now knock on firedoors - - bugfix: Supermatter in a closet/crate will now properly fee the singulo - - bugfix: Paper planes can be unfolded again - - bugfix: Paper planes can be stamped properly - Joan: - - tweak: Impaling someone with a sharp item by pulling them with a changeling Tentacle - now does significantly less damage and stuns for less time. - Jordie0608: - - rscadd: Admins can now filter watchlist entries to only users who are connected. - - tweak: Messages no longer delete themselves when sent. - Kor: - - rscadd: The limb grower has been replaced with a box of surplus limbs. Visit robotics - or harvest limbs from another person if you want quality. - Reeeeimstupid: - - rscadd: Silly Abductee objectives. Try not to go crazy trading life stories with - Lord Singulo. - Tofa01: - - tweak: Removes virology access to jobs including Medical Doctor, Geneticist and - Chemist. - - tweak: '[Delta] Changes NW supermatter filter to filter O2 instead of N2' - - rscadd: '[Delta] Adds wardrobes to Dorms & Arrivals Shuttle' - - rscadd: '[Delta] Adds access buttons to virology doors for extra security' - - rscadd: '[Delta] Adds bolt door button to all dorms' - - rscadd: '[Delta] Adds three pairs of optical meson scanners to supermatter room' - - rscadd: '[Delta] Adds a disk fridge to botany' - - rscadd: '[Delta] Adds a cake hat to the bar' - - bugfix: '[Delta] Fixes misplaced station intercom in Supermatter SMES room' - XDTM: - - rscadd: A Law Removal module can be build in RnD. It can remove a specified core - or freeform law. - - tweak: 'When stating laws, silicons won''t skip a number when hiding laws. (example: - 1. Law 1; 2. Law 2; 3. Law 4 if you choose not to state Law 3)' - Xhuis: - - rscadd: Artistic toolboxes now spawn in maintenance and possess various supplies - for wire art and crayon art. - - rscadd: Traitors can now obtain His Grace. Chaplains can buy it for 20 TC, or - it can be found in a surplus crate. - - rscadd: Soapstone messages can now be rated! Attack the message with your hand - to rate it positive or negative. Anyone can see the rating, and you cannot rate - a message more than once, even across rounds. - - rscdel: Soapstones no longer have a write time. - - tweak: Soapstones now have a fixed vocabulary to write messages with. - chanoc1: - - tweak: The salt and pepper shakers have new sprites. - coiax: - - rscadd: Added metal rods and floor tiles to Standard cyborgs. - - rscadd: Added a remote signaling device to Engineering cyborg. - - rscadd: Adds a 'Guardian of Balance' lawset and AI module, currently admin spawn - only. - uraniummeltdown: - - tweak: Kinetic Accelerator Cosmetic and Tracer Modkits now don't use mod capacity. - Cosmetic kits change the name of the KA. -2017-02-10: - Ausops: - - rscadd: Air tanks and plasma tanks have been resprited. - ChemicalRascal: - - tweak: Pen is able to wind up ruined tapes. - CoreOverload: - - rscadd: You can now emag the escape pods to launch them under any alert code. - - tweak: Shuttle name is no longer displayed on "Status" panel. Instead, you can - now examine a status screen to see it. - Cyberboss: - - bugfix: Simple animals now deathgasp properly again - - bugfix: Testmerged PRs will no longer duplicate in the list - - bugfix: Pods and shuttles now have air again - Joan: - - experiment: Clockwork Cults must always construct and activate the Ark. - - imageadd: Updates air tank inhands to match Ausops' new sprites. - Mekhi Anderson: - - rscadd: All mobs can now *spin! - - rscadd: Cyborgs now have handholds. This means you can ride around on them, but - if you get stunned or hit, you fall off! The cyborg can also throw you off by - spinning. - Tofa01: - - soundadd: Changes fire alarm to make new sound FireAlarm.ogg - Xhuis: - - rscdel: The Syndicate will no longer prank their operatives by including reverse - revolvers in surplus crates. - coiax: - - rscadd: A reverse revolver now comes in a box of hugs. - - rscadd: 'Added a new admin only event: Station-wide Human-level Intelligence. - Like the random animal intelligence event, but affecting as many animals as - there are ghosties.' - - rscadd: The Luxury Shuttle grabs cash in your wallet and backpack, and shares - approval between the entrance gates. - - rscadd: The NES Port shuttle now costs 500 credits. -2017-02-11: - Dannno: - - tweak: hahaha I switched your toolboxes you MORONS - Kor: - - rscadd: Killing bubblegum now unlocks a new shuttle for purchase. - Lzimann: - - tweak: Hardsuit built-in jetpacks no longer have a speed boost. - Pyko: - - bugfix: Fixed legit posters and map editing official/serial number for poster - decals. - Tofa01: - - bugfix: '[Delta] Fixes doors walls and windows being incorrectly placed due to - mapmerge issues.' - - bugfix: '[Box] Fixes access levels for HOP shutters.' -2017-02-12: - AnturK: - - rscadd: Added Poison Pen to uplink. - Drunk Musicians: - - rscadd: Drunk music - Gun Hog: - - rscadd: Nanotrasen Engineering has devised a construction console to assist with - building the Auxiliary Mining Base, usually located near a station's Arrivals - hallway. A breakthrough in bluespace technology, this console employs an advanced - internal Rapid Construction Device linked to a camera-assisted holocrane for - rapid, remote construction! - Lzimann: - - bugfix: MMIs/posibrains works with mechas again - RandomMarine: - - rscadd: The Russians have expanded to the shuttle business. A new escape shuttle - is available for purchase. - Sweaterkittens: - - tweak: Plasmamen burn damage multiplier reduced to 1.5x from 2x - coiax: - - rscdel: Removes the STV5 shuttle from purchase. - - rscadd: Swarmers no longer consume the deep fryer, since they have too much respect - for the potential fried foods it can produce. - - rscadd: The clown's survival/internals box is now a box of hugs. Dawww. -2017-02-13: - ChemicalRascal: - - tweak: Delta station brig cell chairs have been replaced with beds. One bed per - cell, no funny business. - Cyberboss: - - bugfix: Simple animals that are deleted when killed will now deathrattle - - bugfix: Fixed Alt-click stack duplication - Joan: - - imageadd: Updated the back and belt sprites for airtanks to match the new sprites. - Kor: - - rscadd: Mobile pAIs are now slower than humans. - Swindly: - - rscadd: Added Nuka Cola as a premium item in Robust Softdrinks - Tofa01: - - bugfix: '[Delta] Fixes double windoor on chemistry windows.' - - tweak: Lowered volume of fire alarm sound also makes it more quiet. - coiax: - - rscadd: Added an admin only tool, the life candle. Touch the candle, and when - you die, you'll respawn shortly afterwards. Touch it again to stop. Used for - testing, thunderdome brawls and good old fashioned memery. - - bugfix: Fried foods no longer shrink to miniature size. -2017-02-14: - Cyberboss: - - bugfix: Fixed unequipping items while stunned - - bugfix: Fixed various things deleting when unequipped - - bugfix: Fixed tablet ID slots deleting cards - - bugfix: Fixed water mister nozzle getting stuck in hands - - tweak: Title music now starts immediately upon login - - tweak: You can no longer sharpen energy weapons - Joan: - - tweak: Mania Motors are overall less effective and only affect people who can - see the motor. - - tweak: Mania Motors have slightly more health; 100, from 80. - MrStonedOne: - - tweak: Station time is now always visible in the status tab. - - tweak: Both server time and station time now displays seconds so you can actively - see how game time (ByondTime[tm]) is progressing along side real time. - - rscadd: Added a time dilation tracker, this allows you to better understand how - time will progress in game. It shows the time dilation percent for the last - minute as well as some rolling averages. - RandomMarine: - - tweak: Pre-made charcoal pills now contain 10 units instead of 50. The amount - of pills inside of toxin first aid kits and the smartfridge have been increased - to compensate. Keep in mind that each ten unit pill recovers 100 points of toxin - damage and purges 50 units of other reagents. - Steelpoint: - - tweak: All Drones now have a walking animation. - Tofa01: - - bugfix: '[Delta] Fixes space cleaner being empty in brig medbay' - - bugfix: '[Delta] Fixes some areas that are not radiation proof' - - bugfix: '[Meta] Fixes Atmospherics Freezer Spawning As A Heater' - uraniummeltdown: - - rscadd: Window Flashing is now a preference - - rscadd: Your game window will flash when alerted as a ghost. This includes being - revived by defibs/cloning and events such as borers, swarmers, revenant, etc. -2017-02-16: - Cyberboss: - - rscadd: Test merged PRs are now more detailed - Steelpoint: - - rscadd: The Head of Security's Hardsuit is now equipped with a inbuilt Jetpack. - coiax: - - rscadd: The Hyperfractal Gigashuttle is now purchasable for 100,000 credits. Help - Centcom by testing this very safe and efficient shuttle design. (Terms and conditions - apply.) - - rscadd: The changeling power "Anatomic Panacea" now causes the changeling to vomit - out zombie infections, along with headslugs and xeno infections, as before. - - bugfix: The main CTF laser gun disappears when dropped on the floor. -2017-02-17: - Arianya: - - tweak: The Labour Camp rivet wall has been removed! - - spellcheck: Fixed some typos in Prison Ofitser's description. - Cobby: - - experiment: Flashes have been rebalanced to be more powerful - Cyberboss: - - bugfix: Rack construction progress bars will no longer be spammed - - tweak: The round start timer will count down during subsystem initialization - - tweak: Total subsystem initialization time will now be displayed - Joan: - - rscdel: His Grace no longer globally announces when He is awakened or falls to - sleep. - - rscdel: His Grace is not a toolbox, even if He looks like one. - - experiment: His Grace no longer requires organs to awaken. - - tweak: His Grace now gains 4 force for each victim consumed, always provides stun - immunity, and will, generally, take longer to consume His owner. - - experiment: His Grace must be destroyed to free the bodies within Him. - - experiment: Dropping His Grace while He is awake will cause you to suffer His - Wrath until you hold Him again. - - rscadd: His Grace becomes highly aggressive after consuming His owner, and will - hunt His own prey. - - experiment: The Ark of the Clockwork Justicar now only costs 3 of each component - to summon, but must consume an additional 7 of each component before it will - activate and start counting down. - - rscadd: The presence of the Ark will be immediately announced, though the location - will still only be announced after it has been active and counting down for - 2 minutes. - - tweak: The Ark also requires an additional invoker to invoke. - Lobachevskiy: - - bugfix: Fixed glass shards affecting buckled and flying mobs - MrStonedOne: - - experiment: The game will now force hardware rendering on for all clients. - Nienhaus: - - rscadd: Drying racks have new sprites. - Swindly: - - rscadd: Trays can now be used to insert food into food processors - Thunder12345: - - bugfix: It's ACTUALLY possible to pat people on the head now - WJohn: - - imageadd: Improved blueshift sprites, courtesy of Nienhaus. - XDTM: - - rscadd: Bluespace Crystals are now a material that can be inserted in Protolathes - and Circuit Printers. Some items now require Bluespace Mesh. - - rscadd: Bluespace Crystal can now be ground in a reagent grinder to gain bluespace - dust. It has no uses, but it teleports people if splashed on them, and if ingested - it will occasionally cause teleportation. - coiax: - - rscadd: Engraved messages now have a UI, which any player, living or dead can - access. See when the message was engraved, and upvote or downvote accordingly. - - rscadd: Admins have additional options with the UI, seeing the player ckey, original - character name, and the ability to outright delete messages at the press of - a button. - kevinz000: - - bugfix: Flightsuits actually fly over people - - bugfix: Flightsuits don't interrupt pulls when you pass through doors -2017-02-18: - Cyberboss: - - imageadd: New round end animation. Inspired by @Iamgoofball - Gun Hog: - - rscadd: The Aux Base console now controls turrets made by the construction console. - - rscadd: The Aux Base may now be dropped at a random location if miners fail to - use the landing remote. - - rscadd: The mining shuttle may now dock at the Aux Base's spot once the base is - dropped. - - tweak: Removed access levels on the mining shuttle so it can be used at the public - dock. - - tweak: The Aux Base's turrets now fire through glass. Reminder that the turrets - need to be installed outside the base for full damage. - - rscadd: Added a base construction console to Delta Station. - Mysterious Basilman: - - rscadd: More powerful toolboxes are active in this world... - Scoop: - - tweak: Condimasters now correctly drop their items in front of their sprite. - Tofa01: - - bugfix: Re-Arranges And Extends Pubby Escape Hallway To Allow Larger Shuttle To - Dock - - bugfix: '[Meta] Fixes top left grounding rod from being destroyed by the Tesla - engine.' - TrustyGun: - - rscadd: Traitor mimes can now learn two new spells for 15 tc. - - rscadd: The first, Invisible Blockade, creates a 3x1 invisible wall. - - rscadd: The second, Finger Guns, allows them to shoot bullets out of their fingers. - kevinz000: - - rscadd: You can now ride piggyback on other human beings, as a human being! To - do so they must grab you aggressively and you must climb on without outside - assistance without being restrained or incapacitated in any manner. They must - also not be restrained or incapacitated in any manner. - - rscadd: If someone is riding on you and you want them to get off, disarm them - to instantly floor them for a few seconds! It's pretty rude, though. - rock: - - soundadd: you can now harmlessly slap somebody by aiming for the mouth on disarm - intent. - - soundadd: you can only slap somebody who is unarmed on help intent, restrained, - or ready to slap you. -2017-02-19: - Basilman: - - rscadd: some toolboxes, very rarely, have more than one latch - Joan: - - rscadd: You can now put components, and deposit components from slabs, directly - into the Ark of the Clockwork Justicar provided it actually requires components. - - experiment: Taunting Tirade now leaves a confusing and weakening trail instead - of confusing and weakening everyone in view. - - tweak: Invoking Inath-neq/Nzcrentr is now 33% cheaper and has a 33% lower cooldown. - Tofa01: - - rscdel: '[Delta] Removes SSU From Mining Equipment Room' - - tweak: Changes centcomm ferry to require centcomm general access instead of admin - permission. - coiax: - - rscadd: Nuke ops syndicate cyborgs have been split into two seperate uplink items. - Medical cyborgs now cost 35 TC, assault cyborgs now cost 65 TC. - grimreaperx15: - - tweak: Blood Cult Pylons will now rapidly regenerate any nearby cultists blood, - in addition to the normal healing they do. - ma44: - - tweak: Intercepted messages from a lavaland syndicate base reveals they have additional - grenade and other miscellaneous equipment. - uraniummeltdown: - - rscadd: Shuttle engines have new sprites. -2017-02-20: - Cyberboss: - - bugfix: The frequncy fire alarms play at is now consistent - MrStonedOne: - - tweak: bluespace ore cap changed from 100 ores to 500 - Tofa01: - - tweak: '[Meta] Replaces orange jumpsuit in holding cell with prisoner jumpsuits' - XDTM: - - tweak: Repairing someone else's robotic limb is instant. Repairing your own robotic - limbs will still take time. - - tweak: Repairing limbs with cable or welding will now heal more. - Xhuis: - - bugfix: Medipens are no longer reusable. -2017-02-21: - Cyberboss: - - bugfix: You can now unshunt as a malfunctioning AI again - Kor: - - bugfix: You will now retain your facing when getting pushed by another mob. - Tofa01: - - bugfix: '[Z2] Fixed Centcomm shutters to have proper access levels for inspectors - and other Admin given roles' - coiax: - - rscadd: Refactors heart attack code, a cardiac arrest will knock someone unconscious - and kill them very quickly. - - rscadd: Adds corazone, an anti-heart attack drug, made by mixing 2 parts Phenol, - 1 part Lithium. A person with corazone in their system will not suffer any negative - effects from missing a heart. Use it during surgery. - - rscadd: Abductor glands are now hearts, the abductor operation table now automatically - injects corazone to prevent deaths during surgery. The gland will restart if - it stops beating. - - bugfix: Cloning pods always know the name of the person they are cloning. - - rscadd: You can swipe a medical ID card to eject someone from the cloning pod - early. The cloning pod will announce this over the radio. - - rscdel: Fresh clones have no organs or limbs, they gain them during the cloning - process. Ejecting a clone too early is not recommended. Power loss will also - eject a clone as before. - - rscdel: An ejected clone will take damage from being at critical health very quickly - upon ejection, rather than before, where a clone could be stable in critical - for up to two minutes. - - rscadd: Occupants of cloning pods do not interact with the air outside the pod. - uraniummeltdown: - - bugfix: All shuttle engines should now be facing the right way -2017-02-22: - AnonymousNow: - - rscadd: Added Medical HUD Sunglasses. Not currently available on-station, unless - you can convince Centcom to send you a pair. - Cyberboss: - - bugfix: Spawning to the station should now be a less hitchy experience - MrPerson: - - experiment: 'Ion storms have several new additions:' - - rscadd: 25% chance to flatly replace the AI's core lawset with something random - in the config. Suddenly the AI is Corporate, deal w/ it. - - rscadd: 10% chance to delete one of the AI's core or supplied laws. Hope you treated - the AI well without its precious law 1 to protect your sorry ass. - - rscadd: 10% chance that, instead of adding a random law, it will instead replace - one of the AI's existing core or supplied laws with the ion law. Otherwise, - it adds the generated law as normal. There's still a 100% chance of getting - a generated ion law. - - rscadd: 10% chance afterwards to shuffle all the AI's laws. - TalkingCactus: - - bugfix: New characters will now have their backpack preference correctly set to - "Department Backpack". - Tofa01: - - bugfix: '[Delta] Fixes missing R&D shutter near public autolathe' - Xhuis: - - tweak: Highlanders can no longer hide behind chairs and plants. - - tweak: Highlanders no longer bleed and are no longer slowed down by damage. -2017-02-23: - Cyberboss: - - bugfix: Fixed a bug where the fire overlay wasn't getting removed from objects - - bugfix: The graphical delays with characters at roundstart are gone - - bugfix: The crew manifest is working again - - rscadd: Admins can now asay with ":p" and dsay with ":d" - Dannno: - - imageadd: Robust Softdrinks LLC. has sent out new vendies to the stendy. - Joan: - - rscdel: Off-station and carded AIs no longer prevent Judgement scripture from - unlocking. - Nienhaus: - - tweak: Updates ammo sprites to the new perspective. - Tofa01: - - bugfix: Disables sound/frequency variance on cryo tube alert sound - coiax: - - rscadd: Nanotrasen reminds its employees that they have ALWAYS been able to taste. - Anyone claiming that they've recently only just gained the ability to taste - are probably Syndicate agents. -2017-02-24: - MrStonedOne: - - rscdel: Limit on Mining Satchel of Holding Removed - - tweak: Dumping/mass pickup/mass transfer of items is now lag checked - - rscadd: Dumping/mass pickup/mass transfer of items has a progress bar -2017-02-25: - AnonymousNow: - - rscadd: Nerd Co. has sent pairs of thicker prescription glasses out to Nanotrasen - stations, for your local geek to wear. - Basilman: - - rscadd: New box sprites - Robustin: - - tweak: Hulks can no longer use pneumatic cannons or flamethrowers - Tofa01: - - rscadd: '[All Maps] The new and improved Centcom transportation ferry version - 2.0 is out now!' - coiax: - - rscadd: Cargo can now order plastic sheets to make plastic flaps. No doubt other - uses for plastic will be discovered in the future. - - rscadd: To deconstruct plastic flaps, unscrew from the floor, then cut apart with - wirecutters. Plastic flaps have examine tips like reinforced walls. - uraniummeltdown: - - rscadd: Science crates now have new sprites -2017-02-26: - Ausops: - - imageadd: New sprites for water, fuel and hydroponics tanks. - Joan: - - experiment: 'Clockwork objects are overall easier to deconstruct:' - - wip: Clockwork Walls now take 33% less time to slice through, Brass Windows now - work like non-reinforced windows, and Pinion Airlocks now have less health and - only two steps to decon(wrench, then crowbar). - - rscadd: EMPing Pinion Airlocks and Brass Windoors now has a high chance to open - them and will not shock or bolt them. - - rscadd: Anima fragments will very gradually self-repair. - Tofa01: - - bugfix: '[Omega] Fixes ORM input and output directions' - - bugfix: Fixes space bar kitchen freezer access level - - bugfix: Fixes giving IDs proper access for players who spawn on a ruin via a player - sleeper/spawners - - bugfix: '[Delta] Fixes varedited tiles causing tiles to appear as if they have - no texture' - - bugfix: Fixes robotic limb repair grammar issue -2017-02-27: - Kor, Jordie0608 and Tokiko1: - - rscadd: Singularity containment has been replaced on box, meta, and delta with - a supermatter room. The supermatter gives ample warning when melting down, so - hopefully we'll see fewer 15 minute rounds ended by a loose singularity. - - rscadd: Supermatter crystals now collapse into singularities when they fail, rather - than explode. - Tofa01: - - bugfix: Stops AI And Borgs From Interfacing With Ferry Console - TrustyGun: - - imageadd: Box sprites are improved. - WJohnston: - - imageadd: New and improved BRPED beam. The old one was hideous. - coiax: - - rscadd: Drone shells are now points of interest in the orbit list. - - rscadd: Derelict drone shells now spawn with appropriate headgear. -2017-02-28: - Cyberboss: - - tweak: You will no longer be shown empty memories when the game starts - - bugfix: Built APCs now work again - - bugfix: Borg AI cameras now work again - Joan: - - rscadd: Anima Fragments now slam into non-Servants when bumping. This will ONLY - happen if the fragment is not slowed, and slamming into someone will slightly - damage the fragment and slow it severely. - Lzimann: - - tweak: Communications console can also check the ID the user is wearing. - Supermichael777: - - tweak: The button now has a five second delay when detonating bombs - XDTM: - - rscadd: You can now change the input/output directons for Ore Redemption Machines - by using a multitool on them with the panel open. - - rscadd: Diagnostic HUDs can now see if airlocks are shocked. -2017-03-01: - Cyberboss: - - bugfix: Lobby music is no longer delayed -2017-03-02: - Gun Hog: - - tweak: Advanced camera, Slime Management, and Base Construction consoles may now - be operated by drones and cyborgs. - Robustin: - - rscadd: The syndicate power beacon will now announce the distance and direction - of any engines every 10 seconds. - Steelpoint: - - rscadd: Robotics and Mech Bay have seen a mapping overhaul on Boxstation. - - rscadd: A cautery surgical tool has been added to the Robotics surgical area on - Boxstation. - XDTM: - - tweak: Hallucinations have been modified to increase the creepiness factor and - reduce the boring factor. - - rscadd: Added some new hallucinations. - - bugfix: Fixed a bug where the singularity hallucination was stunning for longer - than intended and leaving the fake HUD crit icon permanently. - coiax: - - rscadd: Ghosts are polled if they want to play an alien larva that is about to - chestburst. They are also told who is the (un)lucky victim. - - bugfix: Clones no longer gasp for air while in cloning pods. - - rscadd: Adds a new reagent, "Mime's Bane", that prevents all emoting while it - is in a victim's system. Currently admin only. - - experiment: Mappers now have an easier time adding posters, and specifying whether - they're random, random official, random contraband or a specific poster. - - rscdel: Posters no longer have serial numbers when rolled up; their names are - visible instead. - kevinz000: - - rscadd: You can now craft pressure plates. - - rscadd: Pressure plates are hidden under the floor like smuggler satchels are, - but you can attach a signaller to them to have it signal when a mob passes over - them! - - experiment: Bomb armor is now effective in lessening the chance of being knocked - out by bombs. -2017-03-03: - Cyberboss: - - tweak: You can now repair shuttles in transit space - Incoming5643: - - imageadd: 'Server Owners: There is a new system for title screens accessible from - config/title_screen folder.' - - rscadd: This system allows for multiple rotating title screens as well as map - specific title screens. - - rscadd: It also allows for hosting title screens in formats other than DMI. - - rscadd: 'See the readme.txt in config/title_screen for full details. remove: The - previous method of title screen selection, the define TITLESCREEN, has been - depreciated by this change.' - Sligneris: - - imageadd: Updated sprites for the small xeno queen mode -2017-03-04: - Cyberboss: - - bugfix: You can build lattice in space again - Hyena: - - tweak: Detective revolver/ammo now starts in their shoulder holster - Joan: - - tweak: Weaker cult talismans take less time to imbue. - PJB3005: - - rscadd: Rebased to /vg/station lighting code. - Supermichael777: - - rscadd: Grey security uniforms have unique names and descriptions - Tofa01: - - rscadd: Adds the new Centcomm Raven Battlecruiser to the purchasable shuttle list - buy now get one free! - coiax: - - rscadd: CTF players start with their helmet toggled off, better to see the whites - of their opponents eyes. Very briefly. - - bugfix: Existing CTF barricades are repaired between rounds, and deploy instantly - when replaced. - - tweak: Healing non-critical CTF damage is faster. Remember though, if you drop - into crit, YOU DIE. - - rscadd: Admin ghosts can just click directly on the CTF controller to enable them, - in addition to using the Secrets panel. - - bugfix: Cyborg radios can no longer have their inaccessible wires pulsed by EMPs. -2017-03-06: - Cyberboss: - - experiment: Map rotation has been made smoother - Gun Hog: - - bugfix: The Aux Base Construction Console now directs to the correct Base Management - Console. - - bugfix: The missing Science Department access has been added to the Auxiliary - Base Management Console. - Hyena: - - rscdel: Space bar is out of bussiness - MrStonedOne: - - bugfix: patched a hacky workaround for /vg/lights memory leaking crashing the - server - Penguaro: - - bugfix: Changed DIR of Gas Filter for O2 in Waste Loop from 1 to 4 - Sligneris: - - imageadd: '''xeno queen'' AI hologram now actually uses the xeno queen sprite - as a reference' - Tofa01: - - bugfix: '[Omega] Fixes missing walls and wires new dock to the powergrid' - XDTM: - - rscadd: Changelings can now click their fake clothing to remove it, without needing - to drop the full disguise. - coiax: - - rscadd: The Bardrone and Barmaid are neutral, even in the face of reality altering - elder gods. -2017-03-07: - Supermichael777: - - rscadd: Wannabe ninjas have been found carrying an experimental chameleon belt. - The Spider clan has disavowed any involvement. -2017-03-08: - Cyberboss: - - imageadd: Added roundstart animation - - experiment: Roundstart should now be a smoother experience... again - - bugfix: You can now scan storage items with the forensic scanner - - bugfix: Unfolding paper planes no longer deletes them - - bugfix: Plastic no longer conducts electricity - - tweak: The map rotation message will only show if the map is actually changing - Francinum: - - bugfix: Holopads now require power. - Fun Police: - - tweak: Reject Adminhelp and IC Issue buttons have a cooldown. - Joan: - - rscadd: Circuit tiles now glow faintly. - - rscadd: Glowshrooms now have colored light. - - tweak: Tweaked the potency scaling for glowshroom/glowberry light; high-potency - plantss no longer light up a huge area, but are slightly brighter. - Kor: - - rscadd: People with mutant parts (cat ears) are no longer outright barred from - selecting command roles in their preferences, but will have their mutant parts - removed on spawning if they are selected for that role. - LanCartwright: - - rscadd: Adds scaling damage to buckshot. - Robustin: - - tweak: The DNA Vault has 2 new powers - - tweak: The DNA Vault requires super capacitors instead of quadratic - - tweak: Cargo's Vault Pack now includes DNA probes - Supermichael777: - - rscadd: Robust Soft Drinks LLC is proud to announce Premium canned air for select - markets. There is not an air shortage. Robust Soft Drinks has never engaged - in any form of profiteering. - TalkingCactus: - - rscadd: Energy swords (and other energy melee weapons) now have a colored light - effect when active. - Tofa01: - - bugfix: '[All Maps] Fixes syndicate shuttles spawning too close to stations by - moving their spawn further from the station' - - rscadd: '[Omegastation] This station now has a syndicate shuttle and syndicate - shuttle spawn.' - coiax: - - rscadd: Wizards now have a new spell "The Traps" in their spellbook. Summon an - array of temporary and permanent hazards for your foes, but don't fall into - your own trap(s)! - - rscadd: Permanent wizard traps can be triggered relatively safely by throwing - objects across the trap, or examining it at close range. The trap will then - be on cooldown for a minute. - - rscadd: Toy magic eightballs can now be found around the station in maintenance - and arcade machines. Ask your question aloud, and then shake for guidance. - - rscadd: Adds new Librarian traitor item, the Haunted Magic Eightball. Although - identical in appearance to the harmless toys, this occult device reaches into - the spirit world to find its answers. Be warned, that spirits are often capricious - or just little assholes. - - rscadd: You only have a headache looking at the supermatter if you're a human - without mesons. - - rscadd: The supermatter now speaks in a robotic fashion. - - rscadd: Admins have a "Rename Station Name" option, under Secrets. - - rscadd: A special admin station charter exists, that has unlimited uses and can - be used at any time. - - rscadd: Added glowsticks. Found in maintenance, emergency toolboxes and Party - Crates. - kevinz000: - - rscadd: The Syndicate reports a breakthrough in chameleon laser gun technology - that will disguise its projectiles to be just like the real thing! -2017-03-10: - Cyberboss: - - bugfix: You should no longer be seeing entities with `\improper` in front of their - name - - rscadd: The arrivals shuttle will now ferry new arrivals to the station. It will - not depart if any intelligent living being is on board. It will remain docked - if it is depressurized. - - tweak: You now late-join spawn buckled to arrivals shuttle chairs - - tweak: Ghost spawn points have been moved to the center of the station - - tweak: Departing shuttles will now try and shut their docking airlocks - - bugfix: The arrivals shuttle airlocks are now properly cycle-linked - - bugfix: You can now hear hyperspace sounds outside of shuttles - - experiment: The map loader is faster - - tweak: Lavaland will now load instantly when the game starts - Jordie0608: - - tweak: The Banning Panel now organises search results into pages of 15 each. - XDTM: - - bugfix: Slimes can now properly latch onto humans. - - bugfix: Slimes won't aggro neutral mobs anymore. This includes blood-spawned gold - slime mobs. - - rscadd: Clicking on a tile with another tile and a crowbar in hand directly replaces - the tile. - Xhuis: - - imageadd: Ratvar and Nar-Sie now have fancy colored lighting! - coiax: - - rscadd: Wizards can now use their magic to make ghosts visible to haunt the crew, - and possibly attempt to betray the wizard. - - rscadd: When someone dies, if their body is no longer present, the (F) link will - instead jump to the turf they previously occupied. - - bugfix: Stacks of materials will automatically merge together when created. You - may notice differences when ejecting metal, glass or using the cash machine - in the vault. - - rscadd: You can find green and red glowsticks in YouTool vending machines. - fludd12: - - bugfix: Modifying/deconstructing skateboards while riding them no longer nails - you to the sky. - lordpidey: - - rscadd: Glitter bombs have been added to arcade prizes. -2017-03-11: - AnturK: - - rscadd: Traitors now have access to radio jammers for 10 TC - Hyena: - - bugfix: fixes anti toxin pill naming - Joan: - - tweak: Window construction steps are slightly faster; normal windows now take - 6 seconds with standard tools, from 7 and reinforced windows now take 12 seconds - with standard tools, from 14. - - tweak: Brass windows take 8 seconds with standard tools, from 7. - - rscadd: Added Shadowshrooms as a glowshroom mutation. They do exactly what you'd - expect. - - rscdel: Removed His Grace ascension. - PKPenguin321: - - tweak: Cryoxadone's ability to heal cloneloss has been greatly reduced. - - rscadd: Clonexadone has been readded. It functions exactly like cryoxadone, but - only heals cloneloss, and at a decent rate. Brew it with 1 part cryoxadone, - 1 part sodium, and 5 units of plasma for a catalyst. - Penguaro: - - tweak: Adjusted table locations - - tweak: Moved chair and Cargo Tech start location - - tweak: Moved filing cabinet - - rscdel: Removed Stock Computer - Tofa01: - - bugfix: '[Meta] Fixes Supermatter Shutters Not Working' - coiax: - - rscadd: Swarmer lights are coloured cyan. - kevinz000: - - bugfix: Deadchat no longer has huge amount of F's. -2017-03-12: - JStheguy: - - imageadd: Changed Desert Eagle sprites, changed .50 AE magazine sprites, added - Desert Eagle magazine overlay to icons/obj/guns/projectile.dmi. - - tweak: The empty Desert Eagle sprite now only displays on an empty chamber. The - existence or lack thereof of the magazine is rendered using an overlay instead. - Lzimann: - - tweak: Braindead has a more intuitive message - coiax: - - rscdel: A cloner that is EMP'd will merely eject the clone early, rather than - gibbing it. Emagging the cloner will still gib the clone. -2017-03-13: - Cyberboss: - - tweak: You must now be on any intent EXCEPT help to weld an airlock shut - - rscadd: You can now repair airlocks with welding tools on help intent (broken - airlocks still need their wires mended though) - Cyberboss, Bgobandit, and Yogstation: - - rscadd: The HoP can now prioritze roles for late-joiners - Every coder, player, and admin in Space Station 13: - - rscadd: Adds the Tomb Of The Unknown Employee to Central Command, - - rscadd: Rest in peace, those who died after contributing to Space Station 13. - Hyena: - - bugfix: Surplus leg r/l name fixed - - bugfix: You can now carry honey in plant bags - Lordpidey: - - bugfix: Devils can no longer break into areas with sheer force of disco funk - - rscadd: The pitchfork of an ascended devil can now break down walls. - - rscadd: Hell has decided to at least clothe it's devils when sending them a brand - new body. - - rscadd: Pitchforks glow red now. - Penguaro: - - rscdel: '**Engineering** - Removed Tables, paper bin, and pen' - - rscadd: '**Engineering** - Replaced with Welder and Electrical Lockers' - - rscadd: '**Engineering** - Moved First-Aid Burn kit to Engineering Foyer' - - tweak: '**Chapel** - Replaced one Window with Win-Door for Coffin Storage' - Space Bicycle Consortium: - - bugfix: Bicycles now only cost 10,000 yen, down from 1,000,000 yen. - coiax: - - rscadd: The egg spawner on Metastation will generate a station message and inform - the admins if an egg is spawned. (It's only a two percent chance, but live in - hope.) - - rscadd: Glowsticks can now be found in "Swarmer Cyan" colors. -2017-03-14: - Joan: - - rscadd: Shuttles now have dynamic lighting; you can remove the lights on them - and use your own lights. - - tweak: All maps now use Deltastation's fancy syndicate shuttle. - - tweak: Shadowshrooms of lower potency are much less able to blanket the station - in darkness. - PKPenguin321: - - tweak: Lattices now require wirecutters to deconstruct, rather than welding tools. -2017-03-15: - Cyberboss: - - bugfix: You can no longer depart on the arrivals shuttle by hiding inside things - Joan: - - tweak: Proselytizers converting clockwork floors to walls now always take 10 seconds, - regardless of how fast the proselytizer is. - - tweak: Clockwork grilles no longer provide CV. - Penguaro: - - bugfix: '**Engineering** - Changed Access Level from **24** (_Atmo_) to **10** - (_Engine_) on **Radiation Shutter Control**' - TrustyGun: - - tweak: Traitor Mimes with the finger guns spell now fire 3 bullets at a time, - as opposed to just 1. - octareenroon91: - - rscadd: Allow new reflector frames to be built from metal sheets. - oranges: - - rscdel: Removed patting -2017-03-16: - BASILMAN YOUR MAIN MAN: - - rscadd: The BM Speedwagon has been improved both in terms of aesthetics and performance! - Cyberboss: - - bugfix: The shield generators in Boxstation Xenobiology now have the correct access - Joan: - - rscadd: Cult structures that emitted light now have colored light. - MrPerson: - - rscadd: Humans can see in darkness slightly again. This is only so you can see - where you are when the lights go out. - MrStonedOne: - - bugfix: Fixed lighting not updating when a opaque object was deleted - Penguaro: - - tweak: Increased Synchronization Range on Exosuit Fabricator - Tofa01: - - bugfix: '[Delta] Fixes telecoms temperature and gas mixing / being contaminated.' - - bugfix: '[Delta] Fixes some doubled up turfs causing items and objects to get - stuck to stuff' - - tweak: '[Omega] Makes telecoms room cool down and be cold.' - Tokiko1: - - rscadd: Most gases now have unique effects when surrounding the supermatter crystal. - - tweak: The supermatter crystal can now take damage from too much energy and too - much gas. - - rscadd: Added a dangerous overcharged state to the supermatter crystal. - - rscadd: Readded explosion delaminations, a new tesla delamination and allowed - the singulo delamination to absorb the supermatter. - - tweak: The type of delamination now depends on the state of the supermatter crystal. - - tweak: Various supermatter engine rebalancing and fixes. - kevinz000: - - rscadd: SDQL2 now supports outputting proccalls to variables, and associative - lists - peoplearestrange: - - bugfix: Fixed buildmodes full tile window to be correct path - rock: - - tweak: if we can have glowsticks in toolvends why not flashlights amirite guys -2017-03-17: - BeeSting12: - - bugfix: Moved Metastation's deep fryer so that the chef can walk all the way around - the table. - Cobby: - - tweak: The gulag mineral ratio has been tweaked so there are PLENTY of iron ore, - nice bits of silver/plasma, with the negative of having less really high valued - ores. If you need minerals, it may be a good time to ask the warden now! - Joan: - - rscadd: You can now place lights and most wall objects on shuttles. - Xhuis: - - rscadd: Added the power flow control console, which allows remote manipulation - of most APCs on the z-level. You can find them in the Chief Engineer's office - on all maps. -2017-03-18: - Supermichael777: - - rscadd: Free golems can now buy new ids for 250 points. - XDTM: - - rscadd: You can now complete a golem shell with runed metal, if you somehow manage - to get both. - - rscadd: Runic golems don't have passive bonuses over golems, but they have some - special abilities. - coiax: - - bugfix: The alert level is no longer lowered by a nuke's detonation. -2017-03-19: - BeeSting12: - - rscadd: Nanotrasen has decided to better equip the box-class emergency shuttles - with a recharger on a table in the cockpit. - Cheridan: - - tweak: The slime created by a pyroclastic anomaly detonating is now adult and - player-controlled! Reminder that if you see an anomaly alert, you should grab - an analyzer and head to the announced location to scan it, and then signal the - given frequency on a signaller! - Penguaro: - - bugfix: change access variables for turrets and shield gens - - bugfix: Box Station - Replaces the smiling table grilles with their more serious - counterparts. - coiax: - - tweak: The Syndicate lavaland base now has a single self destruct bomb located - next to the Communications Room. Guaranteed destruction of the base is guaranteed - by payloads embedded in the walls. - octareenroon91: - - bugfix: Fixes infinite vaping bug. - uraniummeltdown: - - rscadd: Plant data disks have new sprites. - - bugfix: Fixed Monkey Recycler board not showing in Circuit Imprinter - - tweak: Kinetic Accelerator Range Mod now takes up 25% space instead of 24% -2017-03-21: - ExcessiveUseOfCobblestone: - - experiment: All core traits [Hydroponics] scale with the parts in the gene machine. - Time to beg Duke's Guide Read.... I mean RND! - - tweak: Data disks with genes on them will have just the name of the gene instead - of the prefix "plant data disk". - - tweak: If you were unaware, you can rename these disks with a pen. Now, you can - also change the description if you felt inclined to. - Joan: - - experiment: Caches produce components every 70 seconds, from every 90, but each - other linked, component-producing cache slows down cache generation by 10 seconds. - Lombardo2: - - rscadd: The tentacle changeling mutation now changes the arm appearance when activated. - MrPerson: - - bugfix: Everyone's eyes aren't white anymore. - Penguaro: - - tweak: Box Station - The Vents and Scrubbers for the Supermatter Air Alarm are - now isolated from the rest of the Air Alarms in Engineering. - Supermichael777: - - bugfix: Chasms now smooth properly. - Tokiko1: - - tweak: Minor supermatter balancing changes. - - tweak: Supermatter now announces its damage half as frequently. - - tweak: Badly unstable supermatter now occasionally zaps nearby engineers and causes - anomalies to appear nearby, similar to overcharged supermatter. - XDTM: - - rscadd: Golem Shells can now be completed with medical gauze or cloth to form - cloth golems, which are weaker and extremely flammable. However, if they die, - they turn into a pile of cloth that will eventually re-animate back into full - health. That is, unless someone lights it on fire. -2017-03-22: - BeeSting12: - - rscadd: Added an autolathe circuit board to deltastation's tech storage. - - rscadd: Added 49 sheets of metal to deltastation's auxiliary tool storage. - Iamgoofball: - - bugfix: Freon no longer bypasses atmos hardsuits. - Penguaro: - - rscadd: Meta - Added Tool Belts to Engineering and Engineering Foyer - - rscdel: Meta - Removed Coffee Machine from Permabrig - - rscadd: Added Cameras for Supermatter Chamber (to view rad collectors and crystal) - - tweak: Adjusted Engine Camera Names for Station Consistency - - bugfix: Adjusted Monitor Names / Networks to view the Engine Cameras - coiax: - - rscadd: APCs now glow faintly with their charging lights. So red is not charging, - blue is charging, green is full. Emagged APCs are also blue. Broken APCs do - not emit light. - - rscadd: Alien glowing resin now glows. -2017-03-23: - Joan: - - tweak: Clock cults always have to summon Ratvar, but that always involves a proselytization - burst. - - rscdel: The proselytization burst will no longer convert heretics, leaving Ratvar - free to chase them down. - - spellcheck: Places that referred to the Ark of the Clockwork Justicar as the "Gateway - to the Celestial Derelict" have been corrected to always refer to the Ark. - Penguaro: - - bugfix: Wizard Ship - Bolts that floating light to the wall. - XDTM: - - rscadd: Medical Gauze now stacks up to 12 - - bugfix: Pressure plates are now craftable. - bgobandit: - - tweak: Alt-clicking a command headset toggles HIGH VOLUME mode. - coiax: - - bugfix: A dead AI no longer counts as an "unconverted AI" for clockcult. -2017-03-24: - BeeSting12: - - bugfix: Auxiliary base maintenance airlock now requires the proper access. Sorry - greyshirts, no loot for you! - Cyberboss: - - tweak: The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator - upgrades now give +12.5% per level instead of +25% - - bugfix: You can now successfully remove a pen from a PDA while it's in a container - Fox McCloud: - - rscadd: Modular receiver removed from the protolathe to autolathe - - tweak: Modular receiver cost is now 15,000 metal - Joan: - - bugfix: Fixes structures being unable to go through spatial gateways. - - tweak: Blazing Oil blobs take 33% less damage from water. - Penguaro: - - rscadd: '[Meta] Replaced Power Monitoring Console in Engineering with Modular - Engineering Console' - - rscadd: '[Pubby] Replaced Power Monitoring Console in Engineering with Modular - Engineering Console' - - rscadd: '[Omega] Replaced Power Monitoring Console in Engineering with Modular - Engineering Console' - - rscadd: '[Omega] Added RD and Command Modular Consoles to Bridge' - - rscadd: '[Delta] Replaced Power Monitoring Console in Engineering with Modular - Engineering Console' - - rscadd: '[Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with - Modular Engineering Console' - coiax: - - rscadd: Destroying a lich's body does not destroy the lich permanently, provided - the phylactery is intact. - - rscadd: A lich will respawn three minutes after its death, provided the phylactery - is intact. - - rscadd: The Soul Bind spell is forgotten after cast, respawn is now automatic. - - rscdel: Stationloving objects like the nuke disk are not valid objects for a phylactery. - - rscadd: Explosive implants can always be triggered via action button, even if - unconscious. - rock: - - tweak: lizards are hurt slightly more by cold but less by heat. this does not - mean they are more resistant to being lasered, fortunately. -2017-03-26: - BeeSting12: - - spellcheck: The bar shuttle's buckable bar stools are now buckleable bar stools. - Gun Hog and Shadowlight213: - - rscadd: The AI may now deploy to cyborgs prepared as AI shells. The module to - do this may be research in the exosuit fabricator. Simply slot the module into - a completed cyborg frame as with an MMI, or into a playerless (with no ckey) - cyborg. - - rscadd: AI shells and AIs controlling a shell can be determined through the Diagnostic - HUD. - - rscadd: AIs can deploy to a shell using the new action buttons or by simply clicking - on it. - - experiment: An AI shell will always have the laws of its controlling AI. - Penguaro: - - rscadd: Brig - Added Air Alarm - - rscdel: Engineering - Removed Brig Shutter - - tweak: Omega, Meta, & Delta Stations - The Vents and Scrubbers for the Supermatter - Air Alarm are now isolated from the rest of the Air Alarms in Engineering. - Qbopper: - - spellcheck: Drones are now given OOC guidelines to follow as well as their IC - lawset. - Robustin: - - rscadd: Added the prototype canister with expanded volume, valve pressure, and - access/timer features - TrustyGun: - - bugfix: Deconstructing display cases and coffins now drop the correct amount of - wood. - XDTM: - - tweak: Some golems now spawn with more thematic names. - - tweak: Adamantine Golems are no longer numbered, but receive a random golem name. - - bugfix: Airlocks properly remove the shock overlay when a temporary shock runs - out. - coiax: - - bugfix: Teams playing CTF have their own radio channels, rather than using the - Centcom and Syndicate channels. - - bugfix: Actually actually makes CTF barricades repair between rounds. - - bugfix: Blue CTF lasers have little blue effects when they hit things, rather - than red effects. -2017-03-28: - Supermichael777: - - rscadd: Backup operatives now get the nukes code. - XDTM: - - bugfix: Wooden tiles can now be quick-replaced with a screwdriver instead of a - crowbar, preserving the floor tile. - octareenroon91: - - bugfix: Bonfires that have a metal rod added should buckle instead of runtiming. -2017-03-29: - BeeSting12: - - rscadd: Adds emergency launch console to the backup emergency shuttle. - Joan: - - rscdel: Putting sec armour and a helmet on a corgi no longer makes the corgi immune - to item attacks. - - rscadd: All items with armour will now grant corgis actual armour. - Kevinz000: - - rscadd: High-powered floodlights may be constructed with 5 sheets of metal, a - wrench, a screwdriver, 5 cable coils, and a light tube. They require a powernet - connection via direct wire node. - coiax: - - bugfix: All tophats, rather than just the ones in maintenance, hurt a tiny bit - if you throw them at people. - - bugfix: Supermatter anomalies are more shortlived than regular anomalies, as intended. -2017-03-30: - coiax: - - rscadd: Autoimplanters have been renamed to autosurgeons. Currently only the CMO - and nuclear operatives have access to autosurgeons. What is the CMO hiding? - - bugfix: All upgraded organs for purchase by nuclear operatives now actually come - in an autosurgeon, for speed of surgery. -2017-03-31: - Cobby: - - tweak: Shot glasses are now more ambiguous [EASIER TO MAINTAIN] - Cyberboss: - - bugfix: Temperature changes will now properly cause atmospherics simulation to - activate - - bugfix: The command report for random xeno eggs will now be delivered along with - the rest of the roundstart reports - - bugfix: Drones can no longer be irradiated -2017-04-01: - Cyberboss: - - bugfix: The contents of the shelterpod smart fridge work again - XDTM: - - bugfix: Facehuggers no longer rip masks from people protected by helmets. -2017-04-02: - BeeSting12: - - bugfix: Metastation's northeast radiation collector is now connected to the grid. - Nanotrasen would like to apologize for any inconvenience caused to engineers, - but copper is expensive. - - rscadd: Boxstation's HoP office now has a PDA tech. - Cyberboss: - - tweak: Firedoors no longer operate automatically without power - - bugfix: Blood and other decals will no longer remain on turfs they shouldn't - - bugfix: The splashscreen is working again - - bugfix: False alarms are now guaranteed to actually announce something - Incoming5643: - - rscadd: Lighting visuals have been changed slightly to reduce it's cost to the - client. If you had trouble running the new lighting, it might run a little better - now. - MMMiracles (CereStation): - - rscadd: Added a patrol path for bots, includes 2 round-start securitrons placed - on opposite sites of station. - - wip: Due to map size, mulebots are still somewhat unreliable on longer distances. - Disposals are still advised, but mule bots are now technically an option for - delivery. - - rscadd: Added multiple status displays, extinguishers, and appropriate newscasters - to hallways. - - rscadd: A drone dispenser is now located underneath Engineering in maintenance. - - rscadd: Each security checkpoint now has a disposal chute that directs to a waiting - cell in the Brig for rapid processing of criminals. Why run half-way across - the station with some petty thief when you can just shove him in the criminal - chute and have the warden deal with him? - - tweak: Security's mail chute no longer leads into the armory. This was probably - not the best idea in hindsight. - - tweak: Virology has a bathroom now. - - tweak: Genetics monkey pen is a bit more green now. - - bugfix: Lawyer now has access the brig cells so he can complain more effectively. - - bugfix: Xenobio kill chamber is now in range of a camera. - - bugfix: Removed rogue bits of Vault area. - - bugfix: Medbay escape pod no longer juts out far enough to block the disposal's - path. - - bugfix: Captain's spare ID is now real and not just a gold ID card. - Penguaro: - - tweak: '[Meta] The Chapel Security Hatches were very intimidating. They have been - changed to more inviting glass doors.' - - bugfix: '[Meta] The maintenance tunnels in the Xeno Lab now have radiation shielding. - The Slime Euthanization Chamber will not have radiation shielding at this time - as dead slimes will not mind radiation.' - coiax: - - rscadd: Adds seperate languages to the game. Now Ratvarian, Drone, Machine, Swarmer, - Human (now called Galactic Common), Slime and Monkey are separate languages. - Each languages has its own comma prefix, for example, Galcom has the ,0 prefix, - while Ratvarian has the ,r prefix. If you don't understand a language when it - is spoken to you, you will hear a scrambled version that will vary depending - on the language that you're not understanding. - - experiment: This does not change who can understand what. - - rscdel: Removed the talk wheel feature. - - rscadd: Clicking the speech bubble icon now opens the Language Menu, allowing - you to review which languages you speak, their keys, and letting you set which - language you speak by default. Admins have additional abilities to add and remove - languages from mobs using this menu. - ktccd: - - bugfix: Ninja suits have received a new software update, making them able to **actually - steal tech levels** from R&D consoles and servers, thus avoid being forced to - honourably kill themselves for failing their objective. -2017-04-05: - Cyberboss: - - bugfix: Cardboard boxes and bodybags can no longer be anchored - Penguaro: - - rscadd: '[Box] A fire alarm has been added to the Lawyer''s office.' - - rscadd: '[Box] Adds access for Scientists to Starboard Maintenance Areas outside - of Toxins.' - - tweak: '[Box] Adjusted Science doors to more logical access codes.' - QV: - - bugfix: Fixed taking max suffocation damage whenever oxygen was slightly low - RemieRichards: - - bugfix: Using TK on the supermatter will burn your head off violently, don't do - this. - - rscadd: 'Examining clothing with pockets will now give information about the pockets: - number of slots, how it is interacted with (backpack, etc.), if it has quickdraw - (Alt-Click) support and whether or not it is silent to interact with.' - coiax: - - bugfix: Emergency shuttles will now forget early launch authorizations if they - cannot launch due to a hostile environment. -2017-04-07: - Qbopper: - - bugfix: Secure lockers will no longer have multiple lines about being broken. -2017-04-09: - 4dplanner: - - bugfix: Gas analyzers can now detect more gases in pipes - Joan: - - bugfix: Fixed a bug where getting caught between two shield generators as they - activated wouldn't cause you to gib and die. - QV: - - tweak: Refactored the way limbs that aren't limbs work - octareenroon91: - - bugfix: Hackable wires should work as intended again. -2017-04-11: - BeeSting12: - - spellcheck: '"the herpes of arts and crafts" is now "The herpes of arts and crafts."' - Cyberboss: - - bugfix: Runes no longer make you/themselves/random atoms yuge - JJRcop: - - tweak: Refactors whisper, now all living mobs can use it - - rscadd: 'Prefix any message with # to whisper, for example, "# Man, that guy is - weird.", you can still use the whisper verb if you whish.' - - rscadd: This is compatible with languages, for example "#,r That HoS is a problem, - we should kill him" - - rscdel: 'Removes #a #b #c etc radio codes, as well as :w and .w, which used to - be whisper.' - MrStonedOne: - - tweak: Nightvision was heavily modified. - - rscadd: Nightvision has been given 3 levels of nightvisionness. (some, most, and - full) - - tweak: ghosts, aliens, guardians, night vision eyes, and statues were given all - 3 levels in a cycling toggle - - tweak: thermals, and hud+NV goggles give "some" nightvisionness - - tweak: standalone masons are unchanged. - - tweak: Nightvision goggles (that aren't also sec huds or medhuds or the like) - give "most" nightvisionness. Nightvision masons also give "most" nightvisionness - - tweak: Most simple mobs with the ability to see in the dark were given "most" - nightvisionness, others got full nightvisionness. - - bugfix: Fixed certain ghost only things disappearing when disabling darkness. - - bugfix: Fixed ash storms not being visible when using things that modified your - ability to see darkness - - bugfix: fix a bug with the new github web processor - Shadowlight213: - - bugfix: The anime admin button will no longer cause equipped items to drop. - coiax: - - rscadd: Examining a ghost determines whether it is visible. -2017-04-13: - Cyberboss: - - bugfix: Fixed the incorrectly named Brig APC on Box Station= - - spellcheck: Fixed simple animal attack grammar - - bugfix: Roundstart department head announcements have been fixed - - bugfix: Brig cell doors now properly require the correct access - - bugfix: Fixed a bug preventing chameleon stamps from being picked up - - bugfix: Fixed a bug where honey frames couldn't be picked up - - bugfix: Photocopied papers will now retain their stamps - Davidj361: - - bugfix: Made it so chemsprayers, peppersprays, extinguishers don't spray when - you click your inventory items - - bugfix: Spray guns now actually have their range change when changing modes between - spray and stream - - bugfix: Krav maga now gets its abilities toggled if you click the same ability - twice - - bugfix: Added a link to the bottom right of paper when writing that shows help - for paper writing - - bugfix: Fixed the shift+middle-click pointing shortcut to work for cyborgs as - the functionality wasn't even there - - bugfix: Bodies in body bags get cremated properly now - RemieRichards: - - bugfix: Constructing lattice no longer prevents space transitions. - Robustin: - - rscadd: Ranged RCD added to the game - - rscadd: Rapid Lighting Device (also ranged) has been added. It can create wall, - floor, and temporary lights of any color you desire. - coiax: - - bugfix: Cigarette branding has been fixed. - - rscadd: Uplift Smooth brand cigarettes now taste minty as advertised. - - rscdel: You can no longer inject cigarette packets to inject all cigarettes simultaneously. - powergaming research director: - - bugfix: woops i dropped the emp protection module when i made your cns rebooters - today, guess they're vulnerable again! -2017-04-15: - Cyberboss: - - bugfix: Holopads can no longer be interacted with while unpowered - Davidj361: - - bugfix: Monkeys won't pickup items or rob you while they are in your stomach, - neither walk out of your stomach. - - bugfix: You can't cheat with eyewear/eye-implants when using advanced cameras - - bugfix: Mutant digitigrade legs re-added to the ashwalker species - Robustin: - - rscadd: The Prototype Emitter, will function like an ordinary emitter while also - charging a secondary power supply that will allow a buckled user to manually - fire the emitter. Returning to automatic fire will have the emitter continue - to fire at the last target struck by manual fire. - - rscadd: The Engineering Dance Machine, along with assorted effects/sounds. - coiax: - - bugfix: Plasmamen no longer burn to death while inside a cloning pod. -2017-04-18: - BeeSting12: - - bugfix: Cerestation's shuttle now has a recharger. - - rscdel: Centcomm's thunderdome airlocks have been removed due to contestants breaking - out. - - bugfix: Deltastation's chemistry lab now has a pill bottle closet. - - bugfix: The shield wall generators in xenobiology on Deltastation, Boxstation, - Metastation, and Pubbystation can now be locked and unlocked by scientists. - Davidj361: - - bugfix: Spawned humans no longer spawn eyeless (sprite) - MMMiracles (Cerestation): - - rscadd: Departments have been given head offices for a more secure place to chill - in their departments. - - rscadd: There is now a theatre on the service asteroid. - - tweak: Maintenance visuals and loot have been overhauled to be more visually interesting - and have more scattered bits of loot. - - bugfix: Various fixes with missing APCs, camera coverage, and misc things. - QualityVan: - - rscadd: Some foam guns can now be suppressed - coiax: - - rscadd: Drone, monkey and swarmer language now have distinctive colours when spoken. - - rscadd: Since drones are allowed to interact with pAIs, pAIs in mobile chassis - form are no longer distorted to drone viewpoints. - - bugfix: The shuttle's arrival can no longer be delayed after Nar-Sie's arrival. - The End cannot be delayed. 2017-04-19: - QualityVan: - - bugfix: Improved stethoscopes - Thunder12345: - - bugfix: You can no longer extract negative sheets from the ORM - XDTM: - - bugfix: APCs hacked by a malfunctioning AI are no longer immune to alien attacks. - - bugfix: Fixed bug where flashlight eyes weren't emitting light. -2017-04-20: - Cyberboss: - - bugfix: Fixed mining closets having extra, unrelated items -2017-04-22: - Cyberboss: - - bugfix: Conveyors no longer move things they aren't supposed to - XDTM: - - bugfix: Gold and Light Pink slime extracts no longer disappear before working. - coiax: - - bugfix: Fixed people understanding languages over the radio when they shouldn't. -2017-04-23: - coiax: - - rscadd: Centcom would like to inform all employees that they have ears. - - rscadd: Adds "ear" organs to all carbons. These organs store ear damage and deafness. - A carbon without any ears is deaf. Genetic deafness functions as before. -2017-04-25: - BeeSting12: - - bugfix: Deltastation's secure tech storage is no longer all access. - CoreOverload: - - bugfix: Disposals no longer get broken by shuttles rotation. - - bugfix: Wires no longer get broken by shuttles movement and rotation. - - bugfix: Atmospheric equipment no longer gets broken by shuttles movement and rotation. - Glory to the Flying Fortress of Atmosia! - Jalleo: - - rscdel: WW_maze from lavaland has been removed it wasnt that good really anyhow - QualityVan: - - bugfix: Changeling brains are now more fully vestigial - WJohnston: - - tweak: Skeletons and plasmamen's hitboxes now more closely match that of humans. - They are no longer full of holes and incredibly frustrating to hit, should they - run around naked. - XDTM: - - bugfix: Items will no longer be used on backpacks if they fail to insert when - they're too full. - - bugfix: T-Ray scans are no longer visible to bystanders. - - bugfix: T-Ray scans no longer allow viewers to interact with underfloor objects. - basilman: - - bugfix: fixed species with no skin dropping skin when gibbed. - coiax: - - rscadd: Examining a window now gives hints to the appropriate tool for the next - stage of construction/deconstruction. - - rscadd: You can examine a firedoor for hints on how to construct/deconstruct it. - - rscadd: Add an additional hint during construction where you can add plasteel - to make the firedoor reinforced. - - bugfix: Fixed easter eggs spawning during non-Easter. - - bugfix: Fixes stations not having holiday specific prefixes during the holidays. - - bugfix: Ghosts no longer drift in space. - - bugfix: Swarmers now only speak their own language, rather than swarmer and common. - - bugfix: When you are crushed by a door, it prints a visible message, instead of, - in some cases, silently damaging you. - - bugfix: The vent in the Escape Coridoor on Omega Station has been fixed. - - bugfix: You no longer die when turning into a monkey. - coiax, WJohnston: - - rscadd: Plasmamen lungs, also known as "plasma filters" now look different from - human lungs. - - rscadd: Plasmamen now have their own special type of bone tongue. They still sound - the same, it's just purple. Like them. -2017-04-26: - CoreOverload: - - rscadd: Gas injectors are now buildable! - Joan: - - tweak: Ash Drake swoops no longer teleport the Ash Drake to your position. - - balance: Some other tweaks to Ash Drake attacks and patterns; discover these yourself! - coiax: - - balance: The wizard spell Rod Form now costs 3 points, up from 2. - flashdim: - - bugfix: Omega Station had two APCs not wired properly. (#26526) -2017-04-27: - Gun Hog: - - rscadd: The GPS interface has been converted to tgui. - - experiment: GPS now update automatically or manually, give distance and direction - to a signal, and many other improvements! - MrStonedOne: - - tweak: Tweaked how things were deleted to cut down on lag from consecutive deletes - and provide better logging for things that cause lag when hard-deleted. - - tweak: Server hop verb moved to the OOC tab - - rscadd: Server hop verb can now be used in the lobby as well as while a ghost. - QualityVan: - - bugfix: You can hit emagged cloning pods with a medical ID to empty them - - rscadd: Crayons can be ground - - rscadd: Crayon powder can be used to color stuff - Shadowlight213: - - tweak: Heads of staff may now download the ID card modification program from NTNet. - bgobandit: - - tweak: When jumpsuits take severe damage, their suit sensors break. They can be - fixed by applying a cable coil. - coiax: - - rscadd: Anomalous crystals can be examined by ghosts to determine their function - and activation method. - - rscdel: Lightbringers can understand Slime and Galactic Common, and can only speak - Slime, as before. - - rscadd: The helper anomalous crystal is in the orbit list after it has been activated. -2017-04-28: - Kor: - - rscadd: Librarians can speak any language - coiax, WJohnston: - - rscdel: Languages no longer colour their text. - - rscadd: Languages now have icons to identify them. Galatic Common does not have - an icon if understood. -2017-04-29: - BeeSting12: - - bugfix: The emergency backup shuttle has lighting now. - - bugfix: Plating in deltastation's aux tool storage is no longer checkered. - Cobby: - - rscadd: Syndicate Lavabase now has more explicit instructions when it comes to - outing non-syndicate affiliated enemies of Nanotrasen. - - tweak: The GPS set tag has gone from a limit of 5 characters to 20. - - rscadd: The GPS can now be personalized in both name and description using a pen. - Joan: - - rscdel: Removed Mending Motor. - - rscadd: Added Mending Mantra, which is a script that causes you to repair nearby - constructs and structures as long as you continue chanting it. - - tweak: Mending Mantra will also heal Servants as long as they're wearing clockwork - armor. - Kor: - - rscdel: Removed double agents mode. - - rscadd: Replaced it with Internal Affairs mode. - Swindly: - - rscadd: Added organ storage bags for medical cyborgs. They can hold an organic - body part. Use the bag on a carbon during organ manipulation or prosthetic replacement - to add the held body part. - coiax: - - rscdel: Swarmer traps are no longer summoned by The Traps. - - balance: Wizard traps automatically disappear five minutes after being summoned. - - balance: Wizard traps disappear after firing, whether triggered via person or - something being thrown across it. - - balance: Wizards are immune to their own traps. - - tweak: The Traps are now marked as a Defensive spell, rather than an Offensive - spell. - kevinz000: - - experiment: Songs can now be added to disco machines with add_track(file, name, - length, beat). Only file is required, the other 3 should still be put in, though. - tacolizard forever: - - bugfix: Rechargers no longer flash the 'fully charged' animation before charging - something -2017-04-30: - QualityVan: - - bugfix: Changelings can once again revive with their brain missing - XDTM: - - rscdel: Voice of God's Rest command now no longer makes listeners rest. It instead - activates the sleep command. - coiax: - - rscadd: The Bank Machine in the vault now uses the radio to announce unauthorized - withdrawals, rather than an endless stream of loud announcements. -2017-05-01: - 4dplanner: - - tweak: Syndicate surplus crates now contain fewer implants - Bawhoppen: - - rscadd: Deep storage space ruin has been readded. - - rscadd: Space Cola machines now stock bottles of water. - Cobby: - - balance: The Gang pen is now stealthy. Stab away! - Cyberboss: - - rscadd: You can now make holocalls! Simply stand on a pad, bring up the menu, - and select the holopad you wish to call. Remain still until someone answers. - When they do, you'll be able to act just like an AI hologram until the call - ends - Joan: - - rscadd: Belligerent now prevents you from running for 7 seconds after every chant. - - rscdel: However, you no longer remain walking after Belligerent's effect fades. - - rscadd: Clockcult component generation will automatically focus on components - needed to activate the Ark if it exists. - - rscadd: Gaining Vanguard, such as from the Linked Vanguard scripture, will remove - existing stuns. - - rscadd: Proselytizers can now charge from Sigils of Transmission at a rate of - 1000W per second. - - rscadd: Sigils of Transmission can be charged with brass at a rate of 250W per - sheet. - Moonlighting Mac says: - - bugfix: Due to a clerical error in the chef's cookbooks now being resolved, you - can now make the pristine cookery dish "Stuffed Legion" out of exotic ingredients - from Lavaland. - - experiment: After being found again you will now be able to enjoy its special - blend of flavors with your tastebuds. Mmm. - QualityVan: - - tweak: Saline glucose now acts as temporary blood instead of increasing blood - regeneration - Swindly: - - tweak: Mercury and Lithium make people move when not in space instead of when - in space. - ninjanomnom: - - tweak: TEG displays power in kw or MW now - - tweak: TEG power bar only maxes over 1MW now - - experiment: Moves TEG to SSair - - experiment: Moves SM to SSair -2017-05-02: - 4dplanner: - - bugfix: Squishy plants will now affect walls and other turfs they get squished - on - Kor, Goof and Plizzard: - - rscadd: Adds persistent trophy cases. They are not on any map yet. - Shadowlight213: - - bugfix: The biogenerator will now show its recipes again. - XDTM: - - tweak: Blood Cult's talisman of Horrors now works at range. It will still give - no warning to the victim. - - rscadd: Golems can now click on empty golem shells to transfer into them. - - tweak: Plasma Golems now no longer explode on death. They instead explode if they're - on fire and are hot enough. The explosion size has been increased. - - tweak: Plasma Golems are now always flammable. - coiax: - - rscadd: When talking on the alien hivemind, a person will be identified by their - real name, rather than who they are disguised as. -2017-05-03: - BeeSting12: - - bugfix: Omega shuttle now has lighting. - Joan: - - balance: Clockwork component generation is twice as fast. - - balance: Scriptures cost up to twice as much; Driver scriptures are unaffected, - meaning they cost 50% less, Script scriptures cost 25% less, Application scriptures - cost about 12.5% less, and Revenant scriptures cost about 5% less. - Jordie0608: - - rscadd: Investigate logs are now persistent. - - tweak: Game logs are now stored per-round; use .getserverlog to access previous - rounds. - - rscdel: .giveruntimelog and .getruntimelog removed. - Kor, Profakos, Iamgoofball: - - rscadd: The Librarian has been replaced by the Curator. - - rscadd: Persistent trophy cases have been added to the library on Meta, Delta, - and Box. These are only usable by the Curator. - - rscadd: The Curator now starts with his whip. - - rscadd: The Curator now has access to his treasure hunter outfit, stashed in his - private office. - coiax: - - balance: Plasma vessels, the organs inside aliens that are responsible for their - internal plasma storage, will regenerate small amounts of plasma even if the - owner is not on resin weeds. - - rscadd: Restrictions on Lizardpeople using their native language on the station - have been lifted by Centcom, in order to maximise worker productivity. The language's - key is ",o". - deathride58: - - tweak: Fixed the slimecore HUD's neck slot sprite. -2017-05-04: - 4dplanner: - - bugfix: revenants now properly resurrect from ectoplasm, as opposed to ectoplasm - merely spawning a new grief ghost - - bugfix: Turrets can no longer see invisible things, such as unrevealed revenants - Joan: - - rscadd: Mania Motors now do minor toxin damage over time and will convert those - affected if the toxin damage is high enough. - - balance: The effects of a Mania Motor continue to apply to targets after they - leave its range, though they will fall off extremely quickly. - - rscdel: Mania Motors no longer cause brain damage. - - imageadd: Ratvarian Spears have new inhand icons. - Lzimann: - - rscdel: Gang game mode was removed - Moonlighting Mac says: - - rscadd: Courtesy of the art & crafts division, imitation basalt tiles themed on - the rough volcanic terrain of lavaland are now available to be made out of sandstone. - - experiment: The manufacturer even managed to replicate the way that it lights - up with volcanic energy, it is the perfect accompaniment to other fake (or real) - lava-land tiles or a independent piece. - QualityVan: - - rscadd: Point flashlights at mouths to see what's inside them -2017-05-05: - Incoming: - - tweak: Display cases now require a key to open, which the curator spawns with - Joan: - - balance: Sigil of Accession, Fellowship Armory, Memory Allocation, Anima Fragment, - and Sigil of Transmission are not affected by the previously-mentioned % reduction - to Application scripture costs. - LanCartwright: - - rscadd: Lesser smoke book to Delta and Metastation - - rscdel: Normal smoke book from Delta and Metastation - - tweak: Civilian smoke book now has a 360 max cooldown (from 120) and halved smoke - output. - QualityVan: - - bugfix: Dental implants stay with the head they're in - bgobandit: - - tweak: The Syndicate has added basic functionality to their state-of-the-art equipment. - Nuke ops can now donate all TCs at once. - lordpidey: - - rscadd: There is a new traitor poison, spewium. It will cause uncontrollable - vomiting, which gets worse the longer it's in your system. An overdose can - cause vomiting of organs. - - tweak: Committing suicide with a gas pump can now shoot out random organs. - - bugfix: Toxic vomit now shows up as intended. -2017-05-06: - 4dplanner: - - rscadd: Internal Affairs Agents now obtain the kill objectives of their targets - when they die. - - rscadd: Internal Affairs Agents now have an integrated nanotrasen pinpointer that - tracks their target at distances further than ten squares. - - rscadd: Internal Affairs Agents will now lose any restrictions on collateral damage - and gain a "Die a glorious death" objective upon becoming the last man standing, - and revert if any of their targets are cloned. - BeeSting12: - - bugfix: Pubbystation no longer has two airlocks stacked on top of each other leading - into xenobiology's kill room. - - rscadd: Deltastation's chemistry now has a screwdriver. - - bugfix: Deltastation's morgue no longer has a blue tile. - - bugfix: Deltastation's chemistry smart fridge is no longer blocked by a disposal - unit. - Cyberboss: - - tweak: Teslas now give off light - Joan: - - balance: Sigils of Transgression are slightly more visible and glow very faintly. - LanCartwright: - - rscadd: Reduction to nutrition when consuming Miner's salve. - - rscdel: Stun/weaken that bypasses bugged chemical protection when consuming Miner's - salve. - Lzimann: - - rscdel: Telescience is no more. - PKPenguin321: - - rscadd: Undid the gang gamemode removal. - QualityVan: - - rscadd: Cargo can order restocking units for NanoMed vending machines - - rscadd: NanoMed vending machines can be build and unbuilt - Robustin: - - rscadd: Blood Cultists can now attempt to claim the position of Cult Master with - the approval of a majority of their brethren. - - rscadd: 'The Cult Master has access to unique blood magic that will aid them in - leading the cult to victory:' - - rscadd: The Cult Master can mark targets, allowing the entire cult to track them - down. - - rscadd: The Cult Master has single-use, noisy, and overt channeled spell that - will summon the entire cult to their location. - - rscadd: All cultists gain a HUD alert that will assist them in completing their - objectives. - - rscadd: Constructs created by soul shards will now be able to track their master. - - rscadd: Cultists created outside of cult mode will now get a working sacrifice - and summon objective and the summon rune will no longer fail outside of cult - mode. - - tweak: Gang Dominator max time is now 8 minutes down from 15m - - tweak: Gang Tagging now reduces the timer by 9 seconds per territory, down from - 12 seconds. - coiax: - - rscadd: Adamantine golems have special vocal cords that allow them to send one-way - messages to all golems, due to fragments of resonating adamantine in their heads. - Both of these are organs, and can be removed and put in other species. - - rscadd: You can use adamantine vocal cords by prefixing your message with ":x". - - rscdel: Xenobiology is no longer capable of making golem runes with plasma. Instead, - inject plasma into the adamantine slime core to get bars of adamantine which - you can then craft into an incomplete golem shell. Add 10 sheets of suitable - material to finish the shell. - - experiment: The metal adamantine is also quite valuable when sold via cargo. - - bugfix: If you know more than the usual number of languages, you'll now remember - them after you get cloned. - - rscdel: Humans turning into monkeys will not suddenly be able to speak the monkey - language, and will continue to understand and speak human. - - rscadd: Ghosts can now modify their own understood languages with the language - menu. - - rscadd: Any mob can also open their language menu with the IC->Open Language Menu - verb. - - rscadd: Silicons can now understand Draconic as part of their internal databases. - - bugfix: Golems no longer have underwear, undershorts or socks. - - tweak: The lavaland Seed Vault ruin can spawn only once. - - rscadd: It is now possible to make plastic golems, who are made of a material - flexible enough to crawl through vents (while not carrying equipment). They - also can pass through plastic flaps. - - bugfix: Fixed adamantine vocal cord (F) links not working for observers. -2017-05-07: - Anonmare: - - tweak: Removes organic check from mediborg storage container - Joan: - - rscadd: Cultists of Nar-sie have their own language. The language's key is ",n". - - balance: Sigils of Transgression are slightly brighter. - Moonlighting Mac: - - experiment: Due to budget cuts and oil synthesis replacing expensive processes - of digging up haunted primeval ashwalker burial grounds, Nanotransen has taught - chemists how to make plastic from chemicals in the hopes that new plastic products - can reduce expenditure on metal and glass. - - rscadd: you can now make plastic sheets from chemistry out of heated up crude - oil, ash & sodium chloride - MrStonedOne: - - bugfix: fixed bug that caused an infinite connection loop when connecting on a - new computer or computer with recently changed hardware. - - rscadd: Moved to a new system to make top menu items easier to edit. - - tweak: Moved icon size stuff to a sub menu - - rscadd: Added option to change icon scaling mode. - - bugfix: Byond added fancy shader supported scaling(Point Sampling), this sucks - because it's blurry, the default for /tg/station has changed back to the old - nearest neighbor scaling. - Penguaro: - - bugfix: Adjusted the Examine description of the right-most tiles of the Space - Station 13 sign to be consistent with the rest of the tiles. - - bugfix: Anywhere there was lava below a tile on the station is now space. - Robustin: - - tweak: c4 planting is now 40% faster - coiax: - - bugfix: Smartfridges no longer magically gain medicines if deconstructed and rebuilt. - - rscadd: Ash walkers now know and speak Draconic by default, but still know Galactic - Common. Remember, Galcom's language key is ",0" and you can review your known - languages with the Language Menu. - octareenroon91: - - rscadd: Showers and sinks added to gulag and mining station for hygiene and fire - safety. - - rscadd: Watertanks added to mining station for convenient fire extinguisher refill. -2017-05-08: - Dorsisdwarf: - - bugfix: Fixed being unable to hit museum cases in melee - Joan: - - tweak: The verb to Assert Leadership over the cult has been replaced with an action - button that does the same thing, but is much more visible. - Moonlighting Mac says: - - tweak: After a recent trade fair, employees have took it upon themselves to learn - how to craft leather objects out of finished leather sheets, for novices they - are pretty good at it! Try it yourself! - - rscadd: Muzzles to silence people are now craftable out of leather sheets. - - rscdel: You can no longer print off designs from a bio-generator that can now - be crafted out of leather sheets. - - tweak: Complete sheets of leather can be printed from the bio-generator for 150 - biomass to accommodate for a loss of designs. - - experiment: Specialist objects from the leather & cloth category bio-generator - category were not removed as to encourage interdepartmental interaction & balance. - Penguaro: - - rscadd: The Slime Scanner is available from the Autolathe. - - tweak: The Design Names in the various machines are now capitalized consistently - coiax: - - bugfix: Fixes various mobs speaking languages that they were only supposed to - understand. - - bugfix: Fixes being able to bypass language restrictions by selecting languages - you can't speak as your default language. - ninjanomnom: - - tweak: Highlander no longer breaks your speakers -2017-05-09: - Expletive: - - rscadd: Curator's fedora has a pocket, like all the other fedoras. - - tweak: Treasure hunter suits can now hold large internal tanks, to ease the exploration - of lavaland. - - tweak: The curator can now access the Auxillary Base and open doors on the mining - station. - MrStonedOne: - - tweak: Lighting now defaults to fully bright until the first update tick for that - tile. This makes shuttle movements less immersion breaking. - - experiment: Rather than remove the light source from the system and then re-adding - it on light movements, the system now calculates and applies the difference - to each tile. This should speed up lighting updates. - Penguaro: - - tweak: Adjusts Meteor Shuttle Name - - bugfix: The Central Command Ferry will now dock at one of the ports in Arrivals - - tweak: '[Meta] The Slime Control Console boundaries have been adjusted around - the Kill Room' - XDTM: - - rscadd: Added bluespace launchpads. They can be built with R&D, and can teleport - objects and mobs up to 5 tiles away (8 at max upgrades), from the pad to the - target and viceversa. - - rscadd: To set up a launchpad, a launchpad and a launchpad console must be built. - The pad must be opened with a screwdriver, then linked to the console using - a multitool. A console can support up to 4 pads. - - rscadd: Launchpads require some time to charge up teleports, but don't require - cooldowns unlike quantum pads. Upgrading launchpads increases the range by 1 - per manipulator tier. - - rscadd: A special variant, the Briefcase Launchpad, has also been added to the - traitor uplink for 6 TC. - - rscadd: Briefcase Launchpads look like briefcases until setup (which requires - a few seconds). When setup, the launchpad will be functional, but can still - be dragged on the ground. To pick a pad back up, click and drag it to your character's - sprite. - - rscadd: Unlike stationary launchpads, briefcase pads only have 3 tiles of maximum - range. - - rscadd: Briefcase pads are controlled by a remote (that is sent with the briefcase) - instead of a console. The remote must be linked to the briefcase by simply hitting - it. Each remote can only be linked to one pad, unlike consoles. - coiax: - - rscadd: Visible ghosts emit light. -2017-05-11: - Joan: - - rscadd: You can now buy double eswords from the uplink for 16 telecrystals. They - cannot be bought below 25 players. - - rscdel: You can no longer use two eswords to construct a double esword. - Joan, Robustin: - - rscdel: Harvesters can no longer break walls, construct walls, convert floors, - or emit paralyzing smoke. - - rscadd: Harvesters now remove the limbs of humans when attacking, can heal OTHER - constructs, have thermal vision, and can move through cult walls. - - rscadd: Harvesters can now convert turfs in a small area around them and can create - a wall of force. - - tweak: Harvesters are now cultists. - - rscadd: When Nar-Sie is summoned, she will convert all living non-construct cultists - to harvesters, who will automatically track her. - Kor: - - rscadd: a new mysterious book has been discovered in lavaland chests! - - tweak: weird purple hearts found in lavaland chests have started beating again! - what could this mean? - MrStonedOne: - - bugfix: Fixes t-ray mode on engineering goggles not resetting the lighting override - properly. - QualityVan: - - tweak: Machine names will be capitalized when they talk on radio - Robustin: - - tweak: Dominators now require a significant amount of open (non-walled) space - around them in order to operate. - TehZombehz: - - rscadd: Sticks of butter and liquid mayonnaise can now be produced via a new 'mix' - function on the grinder. Please eat responsibly. - XDTM: - - bugfix: Plasma Golems now have the correct updated tip. - - tweak: Plasma Golems no longer take damage from fire, and take normal instead - of increased burn damage from other sources. They will still explode if on fire - and hot enough. - - rscadd: Plasma Golems can now self-ignite with an action button. - - tweak: Plasma Golems are now warned when they're close to exploding. - - tweak: Plasma Golems now have a constant chance of exploding after 850K instead - of a precise threshold at 900K, making it less predictable. - bandit: - - tweak: Nanotrasen has enhanced personality matchmaking for its personal AIs. pAI - candidates will now see who is requesting a pAI personality. - duncathan: - - tweak: opening a dangerous canister will only alert admins if it contains meaningful - amounts of a dangerous gas. No more being bwoinked because you opened an empty - canister that used to have plasma in it. - lordpidey: - - tweak: Modified chances for returning someone's soul using an employment contract. Now - everyone has a chance, not just lawyers and HoP. - - rscadd: Particularly brain damaged people can no longer sign infernal contracts - properly. - - tweak: Infernal contracts for power no longer give fireball, and instead give - robeless 'lightning bolt' spell. - - rscadd: Devils can now sell you a friend, for the cost of your soul. - - tweak: The codex gigas should now be easier to use, and less finicky. - - rscdel: The codex gigas no longer sintouches readers. - ma44: - - tweak: Doubles the amount of points wooden planks sell for (now 50 points) -2017-05-12: - Joan: - - tweak: Manifest Spirit will no longer continue to cost the user health if the - summoned ghost is put into critical or gibbed. - - rscadd: Ghosts summoned by Manifest Spirit are outfitted with ghostly armor and - a ghostly cult blade that does slightly less damage than a normal cult blade. - - balance: Manifest Spirit now consumes 1 health per second per summoned ghost, - from 0.333~. - - balance: Manifest Spirit can now only summon a maximum of 5 ghosts per rune, and - the summoned ghosts cannot use Manifest Spirit to summon more ghosts. - - rscadd: Wraiths now refund Phase Shift's cooldown by attacking; 1 second on normal - attacks, 5 seconds when putting a target into critical, and a full refund when - killing a target. - - balance: Increased Phase Shift's cooldown from 20 seconds to 25 seconds. - KorPhaeron: - - rscadd: Zombies can now see in the dark. If you steal their eyes you'll be able - to see in the dark as well! - MMMiracles (Cerestation): - - tweak: Hydroponics has been revamped, adding a few things missing before and adding - a bee room in place of the backroom. - - bugfix: Fixed some other stuff. - New Antag Alert sounds: - - soundadd: added sounds that alert players to their antag status - - soundadd: Blood cult has a new alert sound - - soundadd: Clock cult has a new alert sound - - soundadd: changeling has a new alert sound - - soundadd: Malf/traitor AI has a new alert sound - - soundadd: Nuke Ops has a new alert sound - - soundadd: Ragin' Mages has a new alert sound - - soundadd: Traitor has a new alert sound - Swindly: - - tweak: Solid plasma now begins burning at the temperature at which it was ignited. - - balance: Snow walls no longer block explosions, are deconstructed faster, and - no longer leave girders when deconstructed. - coiax: - - balance: Nanotrasen Cloning Divison's three hundred identical scientists have - announced an upgrade to the cloning computer's software. You can now scan brains - or dismembered heads and successfully clone from them. Brains seem to remember - the DNA of the last body they were attached to. -2017-05-13: - QualityVan: - - bugfix: Pizza boxes once again look different when open - 'Tacolizard Forever: It''s hip to fuck bees': - - rscadd: Added a honey jar item. It's not implemented yet. - - balance: Honey is now more robust at healing, but don't eat too much or you'll - turn into a fatty landwhale. - TehZombehz: - - rscadd: Butter noodles, butter biscuits, buttered toast, and pigs in a blanket - can now be crafted using sticks of butter and other ingredients. - coiax: - - rscadd: Servant golems now follow the "Material Golem (123)" naming scheme. - octareenroon91: - - rscadd: Hermit ruin now includes a portable seed extractor. -2017-05-14: - coiax: - - rscadd: Free Golems can purchase Royal Capes of the Liberator at their mining - equipment vendor. -2017-05-15: - Dorsidwarf: - - balance: Nanotrasen Robotics Supply Division has successfully petitioned to replace - the "My First Robot" motors in turret coverings with a standard commercial brand. - As such, they will now open faster. - Expletive: - - rscadd: You can now create water bottles and wet floor signs by using plastic - sheets. - - rscadd: You can create toy swords out of plastic sheets, a piece of cable, and - a light bulb. - Joan: - - tweak: Glowshrooms now have a less saturated glow. - - balance: The summoned ghosts from Manifest Spirit can no longer break airlocks - with their standard blade. - - balance: Manifest Spirit now does a small amount of damage when initially manifesting - a ghost. - McBawbaggings: - - tweak: SMES units will now accept charge from the power network even if the available - load is less than the input rate. Credit to Zaers for the original code. - - bugfix: Wizards are now at least 30 years old. Apprentices will be in-between - ages 17 to 29. - Penguaro: - - bugfix: The Gravity Generator description now mentions a graviton field as opposed - to a gravaton field. What is Gravaty anyway? - - bugfix: Centcom Engineering has reviewed the plans for the Box series station - and has addressed some concerns related to some APCs not affecting their designated - section. APCs for the Detective's Office, Cargobay, and Gateway, now control - those rooms. The Bridge Maintenance APC has been removed from future construction - as it serves no purpose and thus is an unnecessary construction cost. - - bugfix: The pipe from the station to the AI Satellite has been completed. - Profakos: - - rscadd: Centcom has decided to upgrade the Ore Redemption machines with a floppy - drive, intended for design disks. - Qbopper: - - tweak: The supermatter crystal now sends its warning messages to the engineering - channel. (if it's in critical condition the message will be sent to the common - radio channel as before) - Swindly: - - balance: Nitrous oxide now causes anemia. - coiax: - - bugfix: Curator soapstones now successfully leave messages for future shifts. - - rscdel: Soapstones can no longer be purchased in cargo. - - rscdel: The janitor no longer starts with an empty soapstone. - - experiment: Engraved messages can be left anywhere in the world, but be wary that - the terrain of places like lavaland and space can change shift to shift. - - rscadd: Goats on the station have developed a taste for glowshrooms, and will - eat them if they encounter any. - ma44: - - tweak: Seed vault remapped - - tweak: The seed vault random seed spawner can now spawn cherry bombs instead of - regular cherry seeds - - rscadd: BEES to plant vault - octareenroon91: - - rscadd: Ambrosia Deus can now mutate into Gaia, and Gaia into Deus. - - rscdel: A single branch of Ambrosia Gaia will not immediately make a hydroponics - tray self-sufficient. - - balance: A (total) dose of 20u Earthsblood (from Gaia) will make a hydroponics - tray self-sufficient. - uraniummeltdown: - - rscadd: Ambrosia Gaia is back -2017-05-16: - Moonlighting Mac says: - - rscadd: Starthistles now return seeds when they are harvested, amongst having - a overhaul of description, alteration of statistics & a mutational path into - harebells. These seeds have been supplied into the hydroponics seed vendor. - - imageadd: Starthistle tray sprites have been restructured & also fixed from a - issue of them being broken and not appearing in trays. In addition there are - new sprites for its seeds. - Penguaro: - - bugfix: There is now Space under the rocks at the Dragoon's Tomb - - bugfix: Centcom Intelligence reports that the Hidden Syndicate Research Base may - have received a shipment of viruses. - QualityVan: - - bugfix: Fixed fire alarms not being repairable if the board was broken - - bugfix: People without eyes and ears are no longer susceptible to flashbangs they - aren't directly on top of - Robustin: - - rscadd: Summoning Nar'Sie now triggers a different ending. No shuttle is coming! - Survivors must escape on a pod or survive the Red Harvest for 3 minutes. If - Nar'Sie acquires enough souls, the round ends immediately with a **special ending**. - - rscadd: New Harvester Sprite - - rscadd: Harvesters can now track a random survivor on the station, then switch - back to tracking Nar'Sie, via a new action button. - fludd12: - - rscadd: You can now add grills to a bonfire, letting you cook things on top of - them. -2017-05-17: - 4dplanner: - - bugfix: revenant respawning will not spam up deadchat so much, and is less likely - to break. - Expletive: - - rscadd: Syndicate Tomes have been added to traitor uplinks for 9 TC. They let - an agent or an operative provide both weal and woe. - Penguaro: - - bugfix: Centcom Engineering has reviewed the power schematic for the engine room - and added an Area Power Controller. - coiax: - - balance: Magic eightballs are now tiny items, able to fit into a box and pocket. -2017-05-18: - Joan: - - rscadd: Proselytizing alloy shards will now proselytize all the shards in the - tile, instead of requiring you to proselytize each one at a time. - Lordpidey: - - tweak: Space ninjas now use action buttons instead of verbs for a more consistent - user experience. - - rscadd: Toy toolboxes with realistic rumbling action have been added to arcade - prizes. - 'Tacolizard Forever: Plasmaman Powercreep': - - tweak: Plasmaman tanks are the same size as emergency oxygen tanks. - coiax: - - rscadd: Syndicate agents can purchase a "codespeak manual", that teaches them - a language that sounds like a series of codewords. You can also hit other people - with the manual to teach them. One use per manual. - - rscadd: Nuclear operatives have access to a deluxe manual that is more expensive - but has unlimited uses. - - rscadd: Syndicate AIs know Codespeak for free. - - bugfix: Spacevines can no longer spread on space transit turfs. - - balance: Plastic explosives can no longer be detonated by EMPs. - - rscadd: Various vending machines, when shooting their inventory at nearby people, - will "demonstrate their products features". This means that if a cigarette vending - machine throws a lighter at you, it will be on. Vending machines also choose - random products when throwing, rather than the first available one. - kevinz000: - - rscadd: Peacekeeper cyborgs now have projectile dampening fields. -2017-05-19: - 4dplanner: - - balance: the Hierophant club has gained in power -2017-05-20: - Joan: - - balance: Proto-kinetic crushers have been worked over by our highly qualified - techs, will recharge 12% faster, and no longer require very low-pressure atmospheres - to fire! - - balance: In addition, our techs have tweaked the quantum linker module and proto-kinetic - crushers can apply multiple marks to different targets! Marks applied may eventually - expire if not detonated. - Steelpoint: - - rscadd: All Pulse weapons now accurately show, by their sprites, what fire mode - they are in. - - rscadd: ERT, non-red alert, Security Response Officers spawn with a Tactical Energy - Gun. This is a military variant of the Egun that, in addition to laser and disable - rounds, has access to stun rounds. - - tweak: Pulse Pistols can now be recharged. - Swindly: - - rscadd: Added modified syringe guns. They fire DNA injectors. Geneticists and - CMOs can buy them from the traitor uplink for 14 TC. - coiax: - - rscadd: When a shuttle is called, sometimes an on-call admiral, using available - information to them, will recall the shuttle from Centcom. - octareenroon91: - - bugfix: Golems touching a shell can now choose to stay in their own body. -2017-05-21: - Gun Hog: - - bugfix: The Auxiliary Base can no longer land outside the lavaland map's boundaries. - RandomMarine: - - tweak: Drone laws no longer restrict drones to the station. - Steelpoint: - - rscadd: The Warden's Cycler Shotgun has been replaced with a Compact Combat Shotgun. - A unique weapon, it can fit in armour slots but at the sacrifice of a smaller - ammo capacity of four shells. -2017-05-22: - Joan: - - tweak: Resonator fields now visually show how long they have until they burst. - - bugfix: Hitting a legion skull with a resonator will now produce a field. - - balance: Swapped how far plasma cutter blasts go when going through rock and in - open air. This means blasts through air will go 4/5 tiles, but will mine 7/10 - tiles, for normal/advanced plasma cutters, respectively. - - tweak: There is now a buffer zone between the mining base and lavaland where megafauna - will not spawn. - - tweak: Ruins will no longer spawn directly in front of the mining base. - Lzimann: - - rscadd: Pandemic is now tgui! - Robustin: - - rscadd: Gang influence is now decentralized, each gangster has their own influence - that they can increase by spraying (and protecting) their tags and new influence-enhancing - bling. - - rscadd: Gang uniforms are now created based on your gang's color and can be purchased - by any gang member. They will increase the wearer's influence and provide protection, - but will make it fairly obvious which gang you belong to. - - rscadd: Gangs have access to a new surplus rifle; it is a semi-automatic rifle - that is very bulky and has a very low rate of fire. Gang members can buy this - gun for just 8 influence. - - rscadd: Gangs have access to the new machine gun turret; it unleashes a volley - of bullets with an extended view range. It does not run out of ammo, but a significant - delay between volleys and its stationary nature leaves the gunner vulnerable - to flanking and return fire. Holding down the trigger will allow you to aim - the gun while firing. It will cost gangs 50 influence. - - rscadd: The sawn-off improvised shotgun is now available to gangs for 6 influence. - With buckshot shells being easy to produce or purchase, this gun gives the most - "bang for your buck" but its single-shell capacity will leave you vulnerable - during a pitched gunfight. - - rscadd: The Wetwork boots give gangs access to a lightly armored noslip variant. - - tweak: The armored gang outfits are now slightly more resistant to ballistic and - bomb damage - Swindly: - - balance: Monkeys can be weakened by stamina loss - kevinz000: - - bugfix: Nanotrasen decided to remove the integrated jet engines from jetpacks. - They can no longer be used successfully indoors. -2017-05-23: - ClosingBracket: - - spellcheck: Fixed very minor inconsistencies on items & punctuation on items. - Joan: - - rscdel: Nanotrasen has taken a lower bid for their meson suppliers, and meson - scanners will no longer display terrain layouts while on the planet. - - tweak: However, they have discovered that, with some tweaks, mineral scanners - will no longer actually require you to be wearing mesons. - - tweak: The cheaper mesons will not completely remove reliance on light. - - tweak: Ripleys will collect all ore in front of them when they move with a clamp - and stored ore box. - - tweak: Chasms will glow dimly, like lava. - Joan, Repukan: - - rscadd: Traitor miners can now buy up to 2 KA Pressure Mods for 5 TC each. - - balance: KA Pressure Mods now only take up 35 mod capacity each, allowing traitor - miners to use 2 and have space for 1 other mod. - - rscdel: R&D can no longer build KA Pressure Mods. - Robustin: - - rscadd: Added a sexy new icon for the harvester's AOE conversion spell - - bugfix: Fixed construct's forcewall being invisible - - bugfix: Fixed cult constructs "Locate Master" and "Locate Prey" not functioning - - bugfix: Fixed spell action buttons not showing their actual availability status - - tweak: Changed the duration of a few frames for the new Cult ending - Steelpoint: - - rscadd: Auto Rifle alt ammo mags (AP, Incendiary, Uranium Tipped) now have a coloured - stripe to denote them. - That Really Good Soda Flavor: - - bugfix: Martial arts are no longer lost when mind-swapping, cloning, moving your - brain, et cetera. - - bugfix: Fixed a bug where paper bins could swallow up pens into the void. - coiax: - - rscadd: Galactic Common has been added to silicon's internal language database, - meaning even if a cyborg is created from someone who previously did not know - Galactic Common, they will be able to speak it as a silicon. - kevinz000: - - bugfix: Spessmen seems to have stopped suffering from the mental condition that - makes them believe they can't move fast if they have only one leg, even if they're - in space and using a jetpack! - ma44: - - rscadd: Reports of syndicate base on lavaland has been outfitted with a state - of the art donksoft toy weapon dispenser. -2017-05-24: - Joan, WJohnston: - - rscadd: Adds marker beacons to mining as a vendible item. They can be bought in - stacks of 1, 10, and 30 at a rate of 10 points per beacon. - - rscadd: Miners start with a stack of 10 in their backpack, and the Extraction - and Rescue Kit contains a stack of 30. - - rscadd: Marker beacons come in a large selection of colors and simply light up - a small area when placed, but are useful as a path marker or to indicate dangers. - QualityVan: - - rscadd: Hairless hides now become wet when exposed to water - - rscadd: You can microwave wet leather to dry it - - bugfix: Inserted legion cores no longer work if they went inert before implanting - Steelpoint: - - rscadd: Sketchin alternative magazines (Armour Piercing, Hollow Point, Incendiary) - now have unique sprites to better identify them. - - rscadd: ERT Sec Tactical Energy Guns now have a unique sprite. - - tweak: Changes to production of Nanotrasen Auto Rifle armour piercing bullets - have now made AP bullets better able to penetrate armour, but at the cost of - the amount of possible damage the bullet can do to soft targets. - - rscadd: Many Ballistic weapons now have new sounds related to reloading or placing - bullets into magazines. - - rscadd: Boxstation armoury weapon racks now have glass panes to help prevent the - weapons easily flying out of a breached hull. - - bugfix: Fixed Battleship Raven's bridge blast doors not working. - Tacolizard: - - tweak: Station based armour is slightly more descriptive of what it does. - That Really Good Soda Flavor: - - tweak: Changed spray tan overdoses to be more realistic. - - rscadd: People who are high and beach bums can now talk in their own stoner language. - - tweak: Beach bums can only communicate with other beach bums and people who are - high. -2017-05-25: - 4dplanner: - - bugfix: crushers now apply marks properly - - rscadd: 20% of internal affairs agents are actually traitors - 4dplanner, robustin: - - bugfix: c4 has always taken 3 seconds to plant, and you are not allow to believe - otherwise - Crexfu: - - spellcheck: typo fix for origin tech - Cyberboss: - - experiment: Explosions will no longer have a start up delay - - bugfix: Indestructible objects can no longer be destroyed by bombs - Oldman Robustin: - - tweak: Gang mode now calls a 4 minute unrecallable shuttle once 60% of the crew - is dead - ohnopigeons: - - balance: The cost of plasma has been reduced from 500 to 300, but retain their - immunity to saturation -2017-05-26: - Moonlighting Mac says: - - rscadd: You can now craft a strong cloak with a hood made out of goliath and monster - materials from within the primitive crafting screen. - - rscadd: The cloak has a suit slot for all kind of primitive supplies, however - it cannot carry most electronic miner equipment. - - balance: Due to the recipe requiring leather, it is not normally accessible to - all ghost roles without a source of water & electricity. - kevinz000: - - rscadd: You can now add bayonets to kinetic accelerators. However, only combat - knives and survival knives can be added. Harm intent attacking things will cause - you to attack that thing with the bayonet instead! -2017-05-28: - ClosingBracket: - - tweak: Allows explorer webbings to hold marker beacons. - Expletive: - - tweak: E-Cigarettes can now fit in your pocket. - Iamgoofball: - - bugfix: After the Syndicate realized their top chemist was both mixing a stamina - destroying drug with a stimulant to avoid slowdowns entirely in their sleepypens, - they fired him and replaced him with a new chemist. - Joan: - - rscadd: Miner borgs can now place marker beacons from a storage of 30. - - bugfix: Necropolis tendrils will once again emit light. - - rscadd: The kinetic crusher can now gain bonus effects via trophy items gained - by killing bosses with it. - - rscadd: Yes, you do have to kill the boss primarily doing damage via the kinetic - crusher, or you won't get the trophy item and the bonus effect it grants. - Kor: - - bugfix: The chaplains possessed blade, shades, and constructs, can once again - speak galactic common. - QualityVan: - - bugfix: Bayonets can now be used for butchery - - tweak: Cloning pods which are interrupted by a emagging will now produce a slightly - lumpier smoothie - - bugfix: Cloning pods that have stopped cloning early can no longer be broken open - to extract leftover parts - - bugfix: Crew monitoring consoles once again have minimaps while you're on the - station level - Steelpoint: - - rscadd: A New Iron Hawk troop transport ruin has been added to lavaland. Can the - sole surviving Marine somehow survive the horrors of lavaland? Lore fluff included. - - rscadd: Central Command has listened to complaints and, as such, has now stationed - "real" Private Security Officers at centcom docks. - - rscadd: A new Nanotrasen Security Officer NPC variant is available to admins, - this 'peaceful' version will only attack people who attack it first. Great for - keeping order. - Swindly: - - bugfix: fixed not being able to attach heads without brainmobs in them - cacogen: - - rscadd: You can now rename dog beds by buckling a new owner to them - - rscadd: Dogs that spawn in an area with a vacant bed will take possession of and - rename the bed - - rscadd: Adds AI follow links to holopad speech and PDA messages. Note that PDA - messages point to the owner of the PDA and not the PDA's actual location. - - bugfix: Fixes PDA icon not showing up beside received messages for AIs - kevinz000: - - rscadd: Nanotrasen's new titanium wall blueprints are smooth enough that it can - reflect projectiles! -2017-05-29: - Joan: - - spellcheck: Renames hivelord and legion cores to 'regenerative core'. Their descs - have also been updated to be more clear. - Nanotrasen Plasmaman Outreach Division: - - tweak: plasmaman tank volume has been increased from 3 to 6. - XDTM: - - balance: Abductors have learned how to properly delete the memories of their test - subjects. - bandit: - - tweak: The officer's sabre standard in Nanotrasen captain rollouts can be used - to remove the tails of lizard traitors, or lizards in general. - oranges: - - rscadd: AI's can now hang up all holocalls at a station with alt+click -2017-05-30: - Expletive: - - rscadd: Luxury versions of the bluespace shelter capsule are now available! Purchase - them at the mining equipment vendor. - - rscadd: 'Cardboard cutouts have a new option: Xenomorph Maid' - - rscadd: Black Carpet can now be crafted using a stack of carpet and a black crayon. - - rscadd: Black fancy tables can now be crafted using Black Carpet. - - rscadd: Shower curtains can now be recoloured with crayons, unscrewed from the - floor, disassembled with wire cutters, and reassembled using cloth, plastic, - and a metal rod. - kevinz000: - - rscadd: Research and Development have recieved designs for new prototype Beam - Marksman Rifles. These rifles require a short aiming cycle to fire, however, - have extreme velocity over other weapons. - - experiment: Aiming time is 2 seconds, hold down mouse to aim, aiming time increases - if you change your aim based on angle changed, or if you move while aiming. - The weapon can not be fired while unscoped. - - rscdel: However, someone tripped and pulled out the power cord while your servers - were being updated with the latest revision of accelerator laser cannons. All - data have been lost... -2017-06-02: - Cyberboss: - - experiment: New server backend! - - tweak: Test merged PRs now show the commit of the PR at which they were merged - Expletive: - - rscadd: Adds the NT75 Electromagnetic Power Inducer, a tool which can be used - to quickly recharge many devices! They can be found in Electrical Closets, the - CE's locker, ordered by cargo, or created in RnD. - Goodstuff: - - bugfix: Fixes the crafting recipe for black carpet - - bugfix: Removed a random white dot on the black carpet sprite - Joan: - - rscadd: Goliaths, Watchers, and Legions have a small chance of dropping a kinetic - crusher trophy item when killed with a kinetic crusher. Like the boss trophy - items, these give various effects. - - tweak: Kinetic crushers recharge very slightly slower. - - rscadd: Three unique Kinetic Accelerator modules will now appear in necropolis - chests. - MMMiracles (Cerestation): - - rscadd: CereStation's Security department has been overhauled entirely thanks - to the tireless efforts of Nanotrasen's construction division. - Nanotrasen Mining Alert: - - rscadd: Nanotrasen's mining operations have created far more corpses than an entire - galaxy of cooks could hope to deal with. To solve this, we decided to just dump - them all from orbit onto the barren lava planet. Unfortunately, the creatures - called "Legion" have infested a great number of them, and you can now commonly - find the bodies of former Nanotrasen employees left behind. Additionally, there - are reports of natives, other settlers, and even stranger things found among - the corpses. - QualityVan: - - tweak: The tactical rigging in op closets is more tacticool - Shadowlight213: - - balance: The reset wire on borgs must now be cut to reset a borg's module instead - of pulsed. - - tweak: Portable pump max pressure has been lowered. - Steelpoint: - - tweak: Iron Hawk Marine no longer has Centcom all access. My mistake. - - bugfix: Fixes Iron Hawk marine carbine not having a visible sprite. - Swindly: - - balance: Nitrous oxide no longer produces water as a by-product, requires 2 parts - ammonia instead of 3, and produces 5 parts when made instead of 2. - kevinz000: - - experiment: Gang turrets now follow the mouse of the person using them! Yay! - octareenroon91: - - bugfix: Attempts to add items to a storage container beyond its slots limit will - now obtain a failure message again. -2017-06-03: - Expletive: - - tweak: Chem Dispensers now store their power in their batteries. - - tweak: Instead of being based on battery and capacitor ratings, recharge delay - for portable chem dispensers is now based on their capacitor and matter bin - ratings. - - tweak: The Seed Vault's chemical dispenser now has all the chemicals a pod person - could want. - - rscadd: The crafting menu now has subcategories! - - rscadd: Food recipe categories have been combined as subcategories of the Foods - category. - - rscadd: Weaponry and Ammunition have been combined as subcategories of the Weaponry - category. - Improvedname: - - rscadd: Janitors now start with a flyswatter - Mothership Epsilon: - - tweak: All your base are belong to us. - Penguaro: - - bugfix: '[Box] Removes extra/unattached vent from Xeno Lab' - Planned Spaceparenthood: - - bugfix: We would like to apologize for mislabeled cloning pod buttons. - WJohnston: - - bugfix: Deltastation's south nuke op shuttle location should no longer be possible - to teleport into by moving off the map and back on, and moved the rest closer - to the station. - p440: - - bugfix: Fixed duping cable coils with magic APC terminals - - bugfix: Fixed invalid icon state for empty APCs -2017-06-04: - Expletive: - - rscadd: Many stacks now update their sprite based on their amount. - - rscadd: Stacks will now weigh less if they're less than full. - - imageadd: Added new icon states for glass, reinforced glass, metal, plasteel, - plastic, plasma, plastitanium, titanium, gold, silver, adamantine, brass, bruise - packs, ointment, gauze, cloth, leather, wet leather, hairless hide, human hide, - ash drake hide, goliath hide, bones, sandstone blocks, and snow blocks. - - tweak: Some lavaland stacks' max amounts have been reduced. - - bugfix: Bulldog Shotguns should update their sprite properly when you remove the - magazine. - - bugfix: Riot suits no longer hide jumpsuits. - Joan: - - balance: Rod Form now costs 2 points, from 3. - - balance: Rod Form now does 70 damage, from 160, but gains 20 damage, per upgrade, - when upgraded. This means you'll need to spend 6 points on it to instantly crit - people from full health. - Swindly: - - balance: Chemical grenades are no longer permanently disabled after being unlocked - by wirecutters after being primed. -2017-06-05: - Expletive: - - rscadd: The Ore Redemption Machine has been ported to TGUI. New features include - the addition of "Release All" and "Smelt All" buttons. - - rscadd: The Ore Redemption Machine now be loaded with sheets of material. - - rscadd: The Ore Redemption Machine can now 'smelt' Reinforced Glass. - Joan: - - balance: Only human and silicon servants can help recite multi-invoker scriptures. - This means cogscarabs, clockwork marauders, and anima fragments DO NOT COUNT - for scriptures that require multiple invokers. - - balance: Clockcult scripture tiers can no longer be lost by dipping below their - requirements once they are unlocked. - - rscdel: Removes Revenant scriptures entirely. - MMMiracles: - - tweak: Deepstorage ruin has been redone to be more self-sufficient and up to better - mapping standards. -2017-06-06: - Joan: - - rscadd: Added a new unique Kinetic Accelerator module to necropolis chests. - - spellcheck: Renames Clockwork Proselytizers to Replica Fabricators. - - balance: Replica Fabricators can directly consume floor tiles, rods, metal, and - plasteel for power instead of needing to convert to brass first. - - balance: Cogscarabs can no longer use guns. - - tweak: KA modkits in necropolis chests are now design discs with designs for those - modkits, to force miners to bring back minerals. - PKPenguin321: - - bugfix: The fake pits that the arcade machines can vend now vend properly, for - real this time. - Robustin: - - rscadd: The cult master has finally acquired their 3rd spell, Eldritch Pulse. - This ability allows the cult master to quickly teleport any cultist or cult - structure in visual range to another tile in visual range. This spell has an - obvious spell effect that will indicate where the target has gone but without - explicitly revealing who the master is. This spell should assist with moving - obstinate cultists off an important rune, getting wandering cultists back onto - an important rune, save a cultist from an untimely arrest/summary execution, - assist in getting your allies into secure areas, etc. - - bugfix: The void torch now only works on items that have been placed on surfaces, - this prevents the inventory bugs associated with this item. - thefastfoodguy: - - tweak: you can burn your brains out with a flashlight if you're tired of life -2017-06-07: - Expletive: - - rscadd: New plasma medals have been added to the Captain's medal box. Don't get - them too warm. - - imageadd: New sprites for plasma medals. - - imageadd: Icon and worn sprites for all medals and the lawyer's badge have been - improved. Worn medals more closely match their icons. - - tweak: The bone talisman is an accessory again, so it's not useless. - - imageadd: It also has a new worn sprite, based on an arm band. - - imagedel: Ties have been removed from accessories.dmi and vice versa. Same for - the explorer's webbing sprites that were in there. ties.dmi is now neck.dmi, - and has sprites for scarves, ties, sthetoscopes, etc. - - tweak: Examining an accessory now tells you how to use it. - Joan: - - spellcheck: Renamed Volt Void to Volt Blaster. - - tweak: Volt Blaster does not consume power when firing and does not cause backlash - if you don't fire. - - balance: Volt Blaster does 25 damage, from 20-40 depending on power, and has 5 - shots, from 4, over its duration. - QualityVan: - - bugfix: Surplus rifles are no longer invisible while unloaded - Shadowlight213: - - balance: The Changeling Transformation Sting is once again stealthy. However, - it no longer transfers mutations. - - balance: The chemical cost of Transformation Sting has been increased to 50 -2017-06-08: - 4dplanner: - - bugfix: traitors show up on antagHUD - Expletive: - - tweak: The detective's flask has Hearty Punch instead of whiskey. - - bugfix: The Detective's fedora no longer clips with hair. - - imageadd: Adds 91 new sprites to fix clipping issues with the Detective's fedora - and hair. - - imageadd: Change the standard fedora to match the detective and treasure hunter - variants. - - tweak: Detective, Treasure Hunter, and standard fedoras now all benefit from new - sprites. - Joan: - - balance: Tinkerer's Daemons are no longer totally disabled if you drop below the - servant requirement. - - balance: Instead, Tinkerer's Daemons will disable until the number of active daemons - is equal to or less than one-fifth of the living Servants. - - tweak: Tinkerer's Daemons produce components very slightly slower. - - rscadd: Added Prolonging Prism as an application scripture. - - balance: Prolonging Prism will delay the arrival of an emergency shuttle by 2 - minutes at the cost of 2500W of power plus 75W for every 10 CV and 750W for - every previous activation. In addition to the high cost, it very obviously affects - the shuttle dock and leaves an obvious trail to the prism. - - balance: Script scripture now requires 6 Servants to unlock, from 5, and Application - scripture now requires 9 Servants to unlock, from 8. - Lzimann + Cyberboss: - - experiment: Ported goonchat. Much less laggy and crashy than BYOND chat. + Frills! - NanoTrasen Public Relations Department: - - rscadd: A mining accident has released large amounts of space dust, which is starting - to drift near our stations. Don't panic, it's probably safe. - Nanotrasen Plastic Surgery Advert: - - rscadd: Are you a mutant? Were you born hideously deformed? Do you have ears growing - out of the top of your head? Or even a tail? Don't worry, with our patented - surgical techniques, Nanotrasen's highly trained medical staff can make you - normal! Schedule an appointment, and one of our surgeons can see you same day. - - balance: Cat ears now give you double the ear damage. - QualityVan: - - bugfix: Cremators now still work when there's only one thing in them - - bugfix: The ORM now uses the intended amount of resources when making alloys - - rscdel: Cyborgs can no longer alt-click their material stacks to split them - Robustin: - - balance: The blood cult can only attempt to summon Nar-Sie in one of three rooms - that are randomly selected at round-start. - Shadowlight213: - - rscadd: Tracking implants and chem implants have been added to rnd - - rscdel: Adrenaline and freedom implants have been removed from rnd - Xhuis: - - tweak: Defibrillator paddles will no longer stick to your hands, and will snap - back onto the unit if you drop them somehow. - lzimann: - - rscdel: Xeno queens can no longer be maids - oranges: - - rscadd: Added stungloves to the brain damage lines -2017-06-09: - Nanotrasen Shiny Object Appreciation Club: - - rscadd: The RD and HoS now receive medal lockboxes in their lockers, containing - science and security medals, respectively. - Tacolizard and Cyberboss, idea by RandomMarine: - - rscadd: You can now add a commendation message when pinning a medal on someone. - - rscadd: Medal commendations will be displayed when the round ends. - - tweak: Refactored the outfit datum to allow accessories as part of an outfit. - - bugfix: The Captain spawns with the Medal of Captaincy again. - TrustyGun: - - rscadd: Some of the clown's toys have been moved into a crate in the theater. - If you think you are missing something, check in there. - - rscadd: Wooden crates have been added. You can construct them with 6 wooden planks, - and deconstruct them the same way as regular crates - oranges: - - tweak: Security minor and major crime descriptors are now a single line input, - making it easier to add them - - tweak: Medical record descriptions are single inputs now -2017-06-11: - Expletive: - - imageadd: Glass tables are shinier - Nanotrasen Consistency Affairs: - - bugfix: You no longer see yourself in place of the user when examining active - Spirit Sight runes. - Shadowlight213: - - bugfix: Cloning dismembered heads and brains now respects husking and other clone - preventing disabilities. - WJohn: - - bugfix: It is now easier to wire the powernet into box's telecomms SMES cell. - Xhuis: - - rscadd: You can now pin papers and photos to airlocks. Anyone examining the airlock - from up close can see the details. You can cut them down with wirecutters. - lordpidey: - - rscadd: Added F.R.A.M.E. cartridge to uplinks. This PDA cartridge contains 5 - viruses, which when used will unlock the target's PDA into a syndicate uplink, - in addition, you will receive the code needed to unlock the uplink again, if - you so desire. - - rscadd: If you use telecrystals on a F.R.A.M.E. cartridge, the next time it is - used, it will also give those crystals to the target uplink. - octareenroon91: - - bugfix: Mecha tools now respond to MMI control signals as intended. - shizcalev: - - tweak: '"Species immune to radiation are no longer compatible targets of radiation - based DNA injectors."' - - bugfix: '"A gun''s firing pin will no longer malfunction when placed into your - own mouth. Phew!"' - - imageadd: '"Bedsheets capes are now slightly more accurate. Be jealous of the - clown and their sexy cape!"' -2017-06-13: - Expletive: - - tweak: Paper planes are now the same color as the paper used to make them. - - bugfix: Flashdarks can no longer be used to examine head based organs. - Fox McCloud: - - tweak: Tweaked game options animal speed value to match live server - Joan: - - spellcheck: Renamed AI liquid dispensers to foam dispensers. - - tweak: Foam dispensers now activate immediately when clicked, rather than forcing - the user to go through a menu. They also have better visual, message, and examine - feedback on if they can be activated. - MrStonedOne: - - experiment: Added some code to detect the byond bug causing clients to send phantom - actions shortly after connection. It will attempt to fix or work around the - issue. - Nanotrasen Robotics Department: - - rscadd: To aid in general-purpose cleaning and maintaining of station faculties, - all janitor cyborgs are now outfitted with a screwdriver, crowbar, and floor - tile synthesizer. - WJohnston: - - bugfix: Survival bunker ruin's power now works, mostly. - shizcalev: - - tweak: '"Radiation immune species are now incompatible with the radiation based - genetics DNA scanner/modifier."' -2017-06-14: - Expletive: - - rscadd: The medalboxes are now fancy. - - imageadd: New sprites for opened medal boxes. - Joan: - - tweak: Being converted to clockcult will briefly cause your world to turn yellow - and you to hear the machines of Reebe, matching the description in the messages. - - spellcheck: The messages for being converted and for failing conversion to clockcult - have been updated. - Tacolizard: - - bugfix: Flamethrowers no longer say they're being ignited when you extinguish - them -2017-06-17: - Cyberboss: - - tweak: NT now provides education on the proper response for experiencing the excrutiating - pain of varying degree burns (You scream when burning) - Expletive: - - rscadd: The Captain now starts with a deluxe fountain pen in their PDA. - - rscadd: The quartermaster, curator, research director, lawyer, and bartender start - with normal fountain pens in their PDAs. - - rscadd: Cargo can order fountain pens via the Calligraphy Crate. - - rscadd: Nerds on the station will be pleased to know they now have pocket protectors. - - bugfix: Cryo cells work properly on mobs with varying max health values. - Joan: - - rscdel: Cultists must be human to run for Cult Master status. - - tweak: The Hierophant is a little less chaotic and murdery on average. - LanCartwright: - - rscadd: Penguins, penguin chicks, penguin eggs. - - rscadd: Penguin family to Winter Wonderland. - MrStonedOne and Lummox JR: - - bugfix: Fixed icon scaling and size preferences not loading (Technically size - preferences were loading because byond saves that locally, but that's not reliable - because ss13 shares a hub) - QualityVan: - - rscadd: The botany vending machine now has a stock of onion seeds - RandomMarine: - - tweak: RCDs now always use matter consistent with the material needed when building. - - tweak: Floors now cost 3 or 1 matter to build, based on if a lattice exists on - the tile. - - tweak: Reinforced windows cost 12 matter. Normal windows cost 8 matter. (Both - up/down from 10) - - tweak: Glass airlocks cost 20 matter. - - tweak: RCDs are faster at building grilles and plain glass windows. - Steelpoint: - - tweak: Slightly reshuffles the Head of Security's, and Research Directors, locker - to place fluff items below essential items. - Tacolizard: - - rscdel: Flashes no longer have a tech requirement - That Really Good Soda Flavor: - - bugfix: High luminosity eyes will have material science instead of an error research - type - Thunder12345 and Improvedname: - - rscadd: You can now turn severed cat tails and ears into genuine kitty ears - - rscadd: Cat tails can now be used to make a cat o' nine tails, similarly to the - liz o' nine tails. - Xhuis: - - spellcheck: The names of the hand drill, jaws of life, and emitter are now lowercase. - - spellcheck: The descriptions of the hand drill, jaws of life, and emitter have - been changed to be more descriptive and less lengthy. - - rscadd: Tablets with IDs in them now show the ID's name when examining someone - with that tablet in their ID slot, similar to a PDA would. - bandit: - - tweak: Default short/medium/long brig times are now, in order, 2, 3, and 5 minutes. -2017-06-18: - Expletive: - - tweak: Stacks of space cash now tell you their total value and their value per - bill when you examine them. - RandomMarine: - - tweak: Compressed matter cartridge production costs now reflect their material - worth at basic efficiency. - - bugfix: Compressed matter cartridges can now be exported. - Xhuis: - - bugfix: Puny windows will no longer stop the progress of Ratvar. -2017-06-19: - Expletive: - - rscadd: Paper frames can be created using wood and paper, and can be used to create - decorative structures. - - rscadd: Natural paper can now be crafted - - rscadd: KorPhaeron can now start a maid cafe, if they so desire. - - rscadd: Thanks to the invention of "Bill slots", vending machines can now accept - space cash. - - tweak: The Clown and Mime can now find their unique crayons stored inside their - PDAs - LanCartwright: - - rscadd: 1D4 into Lavaland Mining base crate. - RandomMarine: - - tweak: Bonfires now work on lavaland! - Tacolizard: - - rscadd: Repurposed the action button tooltip code to add tooltips with the examine - details of all held and equipped items. Hover your mouse over any item equipped, - held or in your inventory to examine it. - - rscadd: Examine tooltips can be toggled with the 'toggle-examine-tooltips' verb, - which can be typed or accessed from the OOC menu. - - rscadd: You can change the delay before a tooltip appears with the 'set-examine-tooltip-delay' - verb, also accessible via the OOC menu. The default delay is 500ms. -2017-06-20: - Bawhoppen: - - bugfix: Grenade belts and bandoliers will no longer obscure half the screen when - they're completely filled. - LanCartwright: - - rscdel: Removed loot drops from Syndicate Simple mobs. - Tacolizard: - - rscadd: Some items now have custom force strings in their tooltips. - - bugfix: items with no force can still use a custom force string. - Xhuis: - - bugfix: The station's heaters and freezers have been sternly reprimanded and will - now drop the correct circuit boards and cable coils. - - rscadd: The straight jacket now takes five seconds to put on. - - bugfix: The display cases in luxury shelter capsules will no longer spawn unobtainable, - abstract offhand objects. - - bugfix: Disablers now have an in-hand sprite. - nicbn: - - imageadd: Changed cryo sprites to Bay cryopods, which show the person inside of - them. -2017-06-22: - Bawhoppen: - - rscadd: Dressers are now constructable, and unanchorable with a wrench. - ClosingBracket: - - spellcheck: Fixes small typographical errors on flight suits and implanters. - Ergovisavi: - - tweak: Nanofrost setting and metal foam synthesizer on the Atmos watertank backpack - changed to "Resin", which is a solid, but transparent structure similar to metal - foam that scrubs the air of toxins, regulates temperature, etc - - tweak: Atmos holobarrier device swapped out for an Atmos holo-firelock device, - which creates holographic firelocks that prevent atmospheric changes from going - over them - Expletive: - - tweak: Flame thrower plasma tanks can be removed with alt-click. - Lordpidey: - - bugfix: True and arch devils are no longer deaf. - - bugfix: Fixed some edge cases with devils getting two sets of spells. - - bugfix: True/arch devils can now instabreak cuffs. - - rscadd: The codex gigas now indicates if a devil is ascendable or not. - - tweak: Hellfire has been buffed, it now explodes multiple times. - Nanotrasen Robotics Department: - - tweak: Traitor AIs' malfunction modules have received a firmware update and are - more responsive, with HUD buttons and more sensible menus. - - tweak: Overload and Override Machines now function differently; instead of right-clicking - a machine to choose a context menu option, you activate the ability, which lets - you left-click on a machine to overload or override it. This also changes your - cursor. - Xhuis: - - rscadd: Alt-clicking the Show/Hide Actions button will now reset the positions - of all action buttons. - - rscadd: Hints to the two shortcuts for action buttons are now included in the - Show/Hide Actions button's tooltip. - - rscadd: (As a reminder, that's shift-click to reset the clicked button, and alt-clicking - the Show/Hide Actions button to reset it and all the others!) - - spellcheck: The names of several objects, such as the holopad and biogenerator, - have been lowercased. - - spellcheck: Added some descriptions to a few objects that lacked them. - - rscadd: Tablets now have a built-in flashlight! It can even change colors, as - long as they're light enough in hue. - bandit: - - rscadd: Nanotrasen researchers have made the breakthrough discovery that Lavaland's - plants are, in fact, plants, and can be harvested with seed extractors. - ohnopigeons: - - bugfix: After a janitorial audit Nanotrasen has decided to further cut costs by - removing the janicart's secret space propulsion functionality -2017-06-23: - BeeSting12: - - bugfix: The clowndagger now has the correct skin. - MrStonedOne: - - tweak: Makes old chat show while goonchat loads. Should goonchat fail to load, - the old chat will still be operational. -2017-06-25: - Expletive: - - rscadd: Adds the skull codpiece, which can be crafted from parts of lavaland monsters. - - rscadd: Maid Costume aprons can now be detached and reattached to any uniform. - Improvedname: - - rscadd: You can now export cat ears/tails for 1000 credits - JJRcop: - - bugfix: Fixed telekinesis remote item pick up exploit - Kor: - - rscadd: Robotic legs now let you use pockets without a jumpsuit, and a robot chest - now lets you use the belt slot and ID slot without a jumpsuit. - RandomMarine: - - rscadd: Cargo can now export mechs! - Steelpoint: - - rscadd: Station Engineers spawn with a Industrial Welder in their toolbelt. - - tweak: Engineering Welder Locker now only holds three standard Welders. - - rscadd: An old Nanotrasen Space Station has quietly reawoken its surviving crew - one hundred years after they fell to slumber. Can the surviving crew, using - old, broken and out of date equipment, overcome all odds and survive, or will - the cold embrace of the stars become their new home? - - tweak: Nanotrasens Corps of Engineers has refitted and refurbished NTSS Boxstations - Engineering area into, what Centcom believes, a more efficient design. - That Really Good Soda Flavor: - - experiment: Added the ability for a holiday to start on the nth weekday of a month. - - experiment: Allahu ackbar! Added the ability to calculate Ramadan. - - rscadd: Added Thanksgiving, Mother's Day, Father's Day, Ramadan, and Columbus - Day to the possible holidays. - - bugfix: Fixed nuclear bombs being radioactive. - Xhuis: - - rscadd: You can now unfasten intercoms from walls and place them elsewhere on - the station. - - rscadd: Intercom frames can now be created at an autolathe for 75 metal and 25 - glass. - - bugfix: Nearly-full goliath hide stacks now correctly have a sprite. -2017-06-27: - Ergovisavi: - - bugfix: Fixed a few anomalous crystal effects - - bugfix: Fixes stacking atmos resin objects in a single tile - - tweak: Lasers now go through atmos resin objects - Joan: - - tweak: The Necropolis has been rethemed. - Kor: - - rscadd: Added dash weapons, which let you do a short teleport within line of sight. - - rscadd: The ninjas energy katana now lets him dash. He can no longer teleport - with right click. - - rscadd: Glass shards will no longer hurt people with robotic legs. - - rscadd: Mesons work on lavaland again. - Xhuis: - - spellcheck: The names of most glasses, like mesons, t-ray scanners, and night - vision goggles, have been lowercased. - - spellcheck: The thermonocle's description now changes based on the gender of the - person examining it. - - bugfix: Straight jackets can now properly be put onto others. - drline: - - bugfix: Nanotrasen finally sent out IT personnel to plug your modular consoles - back in. You're welcome. -2017-06-28: - Cyberboss: - - rscdel: Cortical borers have been removed - Shadowlight213: - - rscadd: There is now a new monitor program that engineers can use to monitor the - supermatter status - Tacolizard: - - rscadd: NanoTrasen has now outfitted their employees with Extra-Loud(TM) Genetically - Modified Hearts! Now you can hear your heart about to explode when the clown - shoots you full of meth, or hear it slowly coming to a stop as you bleed out - in critical condition after being toolboxed by an unknown gas-mask wearing assistant. -2017-07-07: - Ergovisavi: - - tweak: Added a recovery window after some variable length megafauna attacks - - rscadd: Adds a new mob to the game, the "leaper" - - rscadd: Adds another planetstation mob, the "wanderer/mook" to the backend - - bugfix: Fixes a problem with player controlled leapers where they occasionally - can't fire - Joan: - - tweak: Rethemes the ash walker nest to match the Necropolis. - - balance: Chasms, asteroid turfs, basalt, and lava can no longer be made wet. - - rscadd: A strange new Resonant Signal has appeared on lavaland. - - tweak: Dreams while sleeping are now slightly longer on average and will contain - more possibilities. - - rscadd: Bedsheets may affect what you can dream. - Lexorion: - - imageadd: The portable PACMAN generators now have new icons, including on and - off states. - More Robust Than You: - - rscadd: Nanotrasen has added lids to their soda that POP! when opened. Up to 3 - possible sounds! - - bugfix: brain damage should no longer attempt to emote/say things while unconcious - NanoTrasen Smithy Department: - - soundadd: Tasked by corporate heads to make NanoTrasen's line of captain rapiers - flashier, a few brave smiths have managed to forge their steel in a way that - enhances their swords' acoustic properties. - Shadowlight213: - - rscdel: The majority of the tiny fans on Deltastation have been removed. - - tweak: Airlocks going to space, and secure areas like the bridge and sec on Delta - have been given the cycling system. - - balance: The freedom suit no longer slows you down and can withstand the FIRES - OF LIBERTY! - Steelpoint (Ancient Station): - - rscadd: Major changes to Ancient Station include new sounds for the prototype - RIG hardsuit, the NASA Engineering Voidsuit slowing the user down properly and - new insulated gloves in engineering. - - rscadd: Several minor changes, such as an extra oxygen tank, spawn in equipment - and minor tile changes. - Supermichael777: - - balance: The AI swap menu is now given to the person with the multi-tool rather - than the Borg. Old behavior remains for all non multi-tool sources - - bugfix: Borgs and shells now notify when un-linked due to the wire being cut. - Tacolizard: - - bugfix: Nanotrasen has begun a program to inform the souls of the departed that - their hearts can't beat after death. - - bugfix: heartbeat noises now loop (i can't come up with any dumb fluff for this - one sorry) - That Really Good Soda Flavor: - - bugfix: Martial arts will no longer be transferred in cloning, etc. if they are - temporary (i.e. wrestling, krav maga). - Xhuis: - - tweak: Recollection has been separated into categories and should be easier to - read and more informative. - - bugfix: Ratvar has been reminded that he hates Nar-Sie and will now actively pursue - fighting her. - - bugfix: You can now properly dig out plants from patches of soil. - - bugfix: Reskinnable guns no longer become invisible after firing a single shot. - - bugfix: The kinetic crusher and other forced two-handed objects can now correctly - be stored in a bag of holding. - - bugfix: Positronic brains' icons will now properly change depending on status. - - tweak: Positronic brains will now stop searching as soon as they're occupied. - - tweak: Positronic brains now have error messages if activating them fails for - whatever reason. - - bugfix: Unconscious Servants are now properly informed when they're deconverted. - - bugfix: The Voice of God no longer specifically targets creatures like constructs - and clockwork marauders. - - bugfix: Heartbeat sounds no longer play indefinitely if your body is destroyed. - kevinz000: - - rscadd: Headphones have been provided to the station in Autodrobes, mixed wardrobes, - and fitness wardrobes. Please use them responsibly, and remember to focus on - your job above all else! - - experiment: Headphones fit in head, ears, OR neck slots! - ohnopigeons: - - bugfix: Nanotrasen Electronics have fixed a bug where issued factory-fresh PDAs - did not link to their cartridges, requiring manual reinsertion. - shizcalev: - - balance: Nanotrasen has upgraded the obsolete teleporter consoles on most NT branded - stations with newer ones preloaded with the newest Supermatter monitoring application! - - soundadd: The supermatter base now has a speaker and will provide audio cues as - to it's current status! - somebody: - - rscadd: Strong plasma glass windows -2017-07-09: - Crexfu: - - tweak: 2 plasma sheets have been added to viro break room on box - More Robust Than You: - - bugfix: Plasma and Reinforced plasma glass no longer merge with Normal and Reinforced - Glass - Xhuis: - - bugfix: You can no longer catch objects that require two hands at all times with - only one hand. -2017-07-11: - RandomMarine: - - rscadd: Drones can now switch between help and harm intent. - Tacolizard: - - rscadd: Admins can now set a message/warning when they delay the round end, to - be shown to anyone who tries to reboot the world. - Tacolizard and Cyberboss: - - rscadd: Added two new organs, the liver and stomach. Without them, you won't metabolize - chemicals. - - rscadd: The liver is responsible for processing all chemicals except nutrients. - If your liver is removed, you will be unable to metabolize any drugs and will - slowly die of toxin damage. - - rscadd: Drinking too much alcohol or having too many toxins in you will damage - your liver, if it becomes too damaged, it will undergo liver failure and you - will slowly die of toxin damage. Your liver naturally heals a small amount of - its damage. However, it doesn't heal enough to offset stronger alcohols or large - amounts of toxins, at least until they are metabolized out of your body. - - rscadd: to conduct a liver transplant, inject corazone into the patient. Corazone - will prevent the patient from taking damage due to either not having a liver - or undergoing liver failure. Corazone will metabolize out of the patient quickly, - so at least 50u is recommended. - - rscadd: The stomach is responsible for metabolizing nutrients. Without a stomach, - you will be unable to get fat, but you will also be unable to process any nutrients, - meaning you will eventually starve to death. - Xhuis: - - bugfix: Mobs spawned by Necropolis curses are now immune to chasms. - - tweak: The BoxStation warden's office now has a crew monitoring console. - - imageadd: Clockwork slabs now show icons of the components used in scripture instead - of initials. - factoryman942: - - bugfix: Boxstation Robotics now has 6 flashes, from 2. - - bugfix: Metastation Robotics now has 40 sheets of glass, instead of 20. - shizcalev: - - tweak: The supermatter reporting system has been updated to report remaining integrity, - as opposed to how unstable the SM currently is. -2017-07-18: - BeeSting12: - - tweak: Deltastation's auxiliary storage in arrivals can be accessed by anyone - now. - - bugfix: Deltastation's cargo bay maintenance can now be accessed by cargo techs. - Dannno/Supermichael777/InsaneHyena: - - rscadd: You can now pick from a few different styles when augmenting someone with - robot parts by putting them in the augment manipulator. Alt+click to take parts - out. - Ergovisavi: - - bugfix: Fixed the refresher variant of the anomalous crystal making holodeck items - real - Fox McCloud: - - rscdel: blood and gibs on turfs can no longer infect nearby people - - tweak: Tuberculosis bypasses species virus immunity (it's not a virus!) - - tweak: Disease and appendicitis events no longer infect clientless mobs - - tweak: Disease event will no longer pick virus immune mobs - - tweak: Appendicitis event will no longer pick mobs without an appendix - - bugfix: Fixed changeling panacea curing non-harmful viruses - - bugfix: Fixes IV drips not properly injecting the right amount of blood - Joan: - - rscdel: Removed the Soul Vessel, Cogscarab, and Anima Fragment Scriptures. - - bugfix: The Ark of the Clockwork Justicar will still forcibly take up a 3x3 area - even if it still needs components to activate. - MrStonedOne & Fox-McCloud: - - tweak: Made pathfinding much quicker - NewSta: - - bugfix: Fixes the maid apron being invisible when in-hand or attached to the maid - outfit. - XDTM: - - experiment: Viruses and symptoms have been havily reworked. - - rscadd: Symptoms now have statistic thresholds, that give them new properties - or improve their existing ones if the overall virus statistic is above the threshold. - Check the pull request in github or the wiki (soon) for the full list. - - rscdel: Some symptoms no longer scale linearly with stats, and instead have thresholds. - - tweak: The symptom limit is now 6. - - rscdel: Viruses can no longer be made invisible to the Pandemic - - tweak: Symptoms no longer trigger with a 5% chance every second, but instead have - a minimum and maximum number of seconds between each activation, making them - more consistent. - - rscdel: The symptoms Blood Vomit and Projectile Vomit have been removed, and are - now bonuses for the base Vomit symptom. - - rscdel: The Weakness symptom has been removed as it was completely useless. - - tweak: The Sensory Destruction symptom has been reworked into Narcolepsy, which - causes drowsiness and sleep. - - tweak: Viral Aggressive Metabolism now has a timer before it starts decaying the - virus. It scales with the highest between Resistance or Stage Speed. - - rscadd: You can now neuter symptoms, making them inactive. They will still affect - stats. Adding formaldehyde to a virus will neuter a random symptom. A bottle - of formaldehyde starts in the virus fridge. - Xhuis: - - tweak: The tachyon-doppler array's rotation now has messages, sprites, and examine - text. - - bugfix: Time stop is now fixed, finally! - - soundadd: Time stop's sound now plays in reverse when the effect ends. - - bugfix: Missiles can no longer ricochet off of shuttle walls, etc. - - bugfix: Winter coats now hold all flashlights properly, instead of seclites. - Xhuis & Cyberboss: - - rscadd: New hivebot invasion event - kevinz000: - - rscadd: Personal Cabinets now have piano synthesizers for handheld piano playing. - - experiment: Thank @nicbn for the sprites! - ninjanomnom: - - experiment: Thank you for updating your ShuttlSoft product! Your last update was - -ERROR- years ago. A full changelog can be found at CYG10408.SHSO.b9 along with - the EULA. This update lays a foundation for new things to come and a sample - in the form of new and improved docking procedures. - shizcalev: - - bugfix: Cerestation's emergency shuttle autopilot will no longer fly you in reverse - back to Centcom! -2017-07-27: - Anonmare: - - bugfix: Informs a person about how bomb cores work - BeeSting12: - - rscdel: Water bottles from the sustenance vendor are gone. Wait for the ice in - the ice cups melt, criminal scum. - - rscdel: There is no longer a sink in gulag. Hygiene is for the moral members of - society. - - tweak: Janitor and service cyborgs now get pocket fire extinguishers for fire - suppression and space propulsion. - - rscadd: Pubbystation's dorms now has a dresser. - - bugfix: Crafting satchels from leather now makes a leather satchel rather than - a regular satchel. - Fox McCloud: - - tweak: breathing plasma now causes direct tox damage - - tweak: breathing hot/cold air now warns you when you're doing so, again - - tweak: species heat/cold mod now impacts damage from breathing hot/cold gases - HAL 9000: - - bugfix: I'm sorry Dave, I'm afraid I can't do that - JStheguy: - - imageadd: Resprited the tablet, including completely redone screen sprites. - - rscadd: Tablets can now come spawn in one of 5 colors; red, green, yellow, blue, - and black. - - imageadd: Most alcohol bottles have been resprited, as well as a poster that used - one of the current bottles as part of it's design. - Joan: - - balance: Unwrenching clockwork structures no longer damages them. - - tweak: The Hierophant will now release a burst when melee attacking instead of - actually hitting its target. - - bugfix: The Hierophant Club's blasts will now properly aggro hostile mobs. - - tweak: The blood-drunk miner will fire its KA a bit more often. - PopNotes: - - soundadd: Nar-Sie now sounds like an eldritch abomination that obliterates worlds - instead of a sweet maiden that gently whispers sweet nothings in your ear. - Supermichael777: - - bugfix: delayed chloral hydrate actually works now. - Tacolizard: - - rscadd: Added cybernetic organs to RnD, they can be used to replace organic organs. - Remember to administer corazone during implantation though! - - rscadd: Added the upgraded cybernetic liver. It is exceptionally robust against - toxins and alcohol poisoning. - Xhuis: - - bugfix: Cyborgs now regenerate oxygen damage. - - bugfix: If a cyborg somehow takes toxin damage, it can be healed with cables as - though it was burn damage. - - spellcheck: Picking up ores by walking over them now longer spams messages, instead - showing one message per tile of ore picked up. - - tweak: You can now control-click action buttons to lock them and prevent them - from being moved. Alt-clicking the "Show/Hide Actions" button will unlock all - buttons. - - tweak: There is now a preference for if buttons should be locked by default or - not. - - rscadd: Pizza box stacks can now fall over - - imageadd: Pizza box inhands now stacks depending on how many you're holding. - - bugfix: Mining satchels no longer hold infinite amounts of ore. - - bugfix: Reviving Stasis now consistently regenerates organs. - - bugfix: Medibots now properly render the overlays of the medkits they are made - from. - - bugfix: The latest batch of Syndicate screwdrivers fell into a vat of paint and - were colored randomly. We have rinsed them off and they will no longer come - in random colors. - - bugfix: Supermatter slivers can now be stolen properly. - - tweak: Whenever you're trying to hack off your own limbs, you'll now always hit - those limbs. - Xhuis & MoreRobustThanYou: - - imageadd: Toolbelts now have overlays for crowbars, wirecutters, screwdrivers, - multitools, and wrenches. - Y0SH1_M4S73R: - - bugfix: Romerol zombies count as dead for assassinate and maroon objectives. - bandit: - - rscadd: New Cards against Spess cards are available! - ktccd: - - bugfix: Hijacking should now be possible again! -2017-07-29: - Fox McCloud: - - rscadd: Sound should carry further, but should get quieter and quieter the further - you are from it - Joan: - - tweak: Sigils of Transmission can now drain power in a large area when activated - by a Servant. - - rscdel: Interdiction Lenses have been removed, as they were largely only used - to drain power into Sigils of Transmission. - - balance: Sigils can no longer directly be removed by Servants. - - balance: Prolonging Prisms have a higher cost to delay, but no longer increase - in cost based off of CV. - - balance: Base delay cost changed from 2500W to 3000W, cost increase per activation - changed from 750W to 1250W, cost increase per 10 CV changed from 75W to 0W. - - rscdel: Removed the Volt Blaster scripture. - - rscdel: Ratvarian spears can no longer impale. - - balance: Vitality Matrices now require a flat 150 Vitality to revive Servants, - from 20 + the Servant's non-oxygen damage. Vitality Matrices are also no longer - destroyed when reviving Servants. - - balance: Ratvarian spear damage changed from 18 to 20, Ratvarian spears now generate - 5 Vitality when attacking living targets. Ratvarian spear armour penetration - changed from 0 to 10. - - balance: The Judicial Visor's mark now immediately applies Belligerent and knocks - down for 0.5 seconds. Mark exploding no longer mutes, mark explosion stun changed - from 16 seconds to 1.5 seconds, mark explosion damage changed from 10 to 20. - More Robust Than You: - - rscadd: Nanotrasen has begun production of the Rapid Cable Layer, a tool that - helps you lay down cables faster - - rscadd: You can now craft ghetto RCLs with metal, a screwdriver, welder, and wrench. - They hold less cable, and may fall apart or jam! - Xhuis: - - spellcheck: Player-controlled medibots now receive a notice whenever they try - to heal someone with too high health. - - bugfix: Syringes now properly inject targets wearing thick clothing on different - slots. - - bugfix: Stun baton overlays now appear on security belts when active. - kevinz000: - - rscadd: 'Badmins: Buildmode map generators have names in the list to select them, - instead of paths.' - - rscadd: Also, a new map generator has been added, repair/reload station. Use it - VERY sparingly, it deletes the block of the map and reloads it to roundstart. - THIS CAN CAUSE ISSUES WITH MACHINES AND ATMOSPHERICS, SO DO NOT USE IT UNLESS - YOU ABSOLUTELY HAVE TO! - - experiment: The reload station one tagged DO NOT USE shouldn't be used as it doesn't - delete anything before loading, so if you use it you'll have two copies of things. - That can result in a LOT of issues, so don't use it unless you're a codermin - and know what you're doing/abusing! - ktccd: - - bugfix: Ashstorms no longer pierces the protected people to kill anyone/anything - in them. -2017-08-06: - Anonmare: - - rscadd: Surgical toolarm to protolathe and exofab - - tweak: Toolarm tools are less robust but more efficient at surgery - - tweak: Arm augments are no longer a huge item - AnturK: - - balance: Cyborg remote control range is now limited to 7 tiles. - Ergovisavi: - - rscadd: Adds the "seedling" planetstation mob to the backend - Floyd: - - bugfix: No longer does everyone look like a sick, nauseated weirdo! - Galactic Corgi Breeding Mills, LLC: - - bugfix: Fixed corgis being able to wear spacesuit helmets despite lacking the - proper code and sprites for them. - Joan: - - tweak: Colossus's shotgun is now a static-spread blast of 6 bolts, making it more - predictable. - - balance: Geis now mutes for 12-14 seconds and "stuns" the target, via a binding - effect, for 25 seconds instead of initiating a conversion. - - experiment: Geis's "stun" restrains the target and prevents them from taking actions, - but its duration is halved if the binding is not being pulled by a Servant. - - wip: Using Geis on a target prevents you from taking actions other than attempting - to pull the binding. If you are pulling the binding, you can dispel it at any - time. - - wip: As should be obvious, if the binding is destroyed or dispelled, you can once - again take normal actions. - - tweak: Sigils of Submission are now permanent and have been moved from the Script - tier to the Driver tier, with an according cost adjustment. They still do not - penetrate mindshield implants. - - rscdel: Removed Taunting Tirade. - - rscdel: Removed Sigils of Accession. - Lexorion: - - imageadd: Hearty Punch has a new, fancier sprite. - More Robust Than You: - - bugfix: RCL and Ghetto RCLs are no longer invisible - - bugfix: RCL action button now has a sprite - - bugfix: RCLs can no longer go inside you - XDTM: - - bugfix: Eyes can now be properly damaged. - Xhuis: - - spellcheck: Removed an improper period from the supermatter sliver theft objective's - name. - - bugfix: Alien hunters can no longer pounce through shields. - - bugfix: Observing mobs that have no HUD will no longer cause intense lighting - glare. - - bugfix: Objects on shuttles now rotate in the correct directions. - - soundadd: The speakers in the ceiling have been upgraded, and many sounds are - now less tinny. - Xhuis and oranges: - - bugfix: Banana cream pies no longer splat when they're caught by someone. - - soundadd: Throwing a pie in someone's face now has a splat sound. - kingofkosmos: - - bugfix: Fixed hair sticking through headgear. -2017-08-13: - JStheguy: - - imageadd: Laptops now have actual sprites for using the supermatter monitoring - instead of defaulting to a generic one. - Joan: - - imageadd: Belligerent now has a visible indicator over the caster. - More Robust Than You: - - tweak: Mulligan and non-continuous completion checks will not consider afk/logged - out people to be "living crew". - - tweak: The wiki button now asks what page you want to be taken to - - tweak: His Grace now shows up on the orbit list - Pubby: - - rscadd: The Curator job is now available on PubbyStation - - rscadd: Beekeeping has been added to PubbyStation's monastery - - tweak: PubbyStation's bar has been rearranged - Xhuis: - - bugfix: Swarmer shells now have ghost notifications again. - - bugfix: Minebots no longer lack icons for their action buttons. - kingofkosmos: - - imageadd: Adds icon_states to the unused and used Eldritch whetstones. Sprites - by Fury McFlurry. -2017-08-14: - Joan: - - imageadd: Ported CEV-Eris's APC sprites. - More Robust Than You: - - bugfix: Fixes a typo in the blobbernaut spawn text - WJohnston: - - rscadd: Adds an ore box and shuttle console to aux bases on all stations. - Xhuis: - - bugfix: The Resurrect Cultist rune now works as intended. - - bugfix: Cyborg energy swords now properly have an icon. - kingofkosmos: - - tweak: Canisters don't flash red lights anymore when empty. -2017-08-19: - Anonmare: - - balance: Raised airlock deflection by one point - BeeSting12: - - balance: The meth explosion temperature has been raised. - FrozenGuy5/PraiseRatvar: - - balance: Nerfs L6 SAW Hollow Point Bullets from -10 armour penetration to -60 - armour penetration. - Joan: - - balance: Deathsquads no longer get shielded hardsuits. - More Robust Than You: - - rscadd: Blobs can now sense when they're being cuddled! - - bugfix: Fixes mining hardsuit heat_protection - - bugfix: RCL icons are now better at updating - NewSta: - - bugfix: Fixes the wiki button - - spellcheck: Fixes a typo in the wiki button description - XDTM: - - rscadd: You can now click on symptoms in the Pandemic to see their description - and stats - Xhuis: - - soundadd: The station's explosion now uses a new (or old) sound. - - rscadd: Adds smart metal foam, which conforms to area borders and walls. It can - be made through chemistry by mixing foaming agent, acetone, and iron. - - rscadd: Smart metal foam will create foamed plating on tiles exposed to space. - Foamed plating can be struck with floor tiles to turn it into regular plating! - - spellcheck: The chat message has been removed from *spin. I hope you're happy. - nicbn: - - imageadd: Nanotrasen redesigned the area power controllers! - - imageadd: Thanks Xhuis for the contrast tweak on APCs -2017-08-23: - Cobby: - - balance: Planting kudzu now has a short delay with a visible message to users - around you. Hit-N-Run planting is no longer possible. - - rscdel: kudzu bluespace mutation and spacewalk mutation are removed. - Cruix: - - rscadd: The syndicate shuttle now has a navigation computer that allows it to - fly to any unoccupied location on the station z-level. - Ergovisavi: - - tweak: Slightly increased the radius of the atmos resin launcher, and resin now - makes floors unslippery - Pubby: - - rscadd: Gorillas - - rscadd: Irradiating monkeys can now turn them into hostile gorillas - Shadowlight213: - - experiment: The amount of time spent playing, and jobs played are now tracked - per player. - - experiment: This tracking can be used as a requirement of playtime to unlock jobs. - ShizCalev: - - balance: Morphlings now have to restore to their original form before taking a - new one. - - bugfix: Morphlings will no longer have combined object appearances - Supermichael777: - - bugfix: Boss tiles have been reconstructed out of an unstoppable force. - TehZombehz: - - rscadd: Nanotrasen Culinary Division has authorized the construction of pancakes, - including blueberry and chocolate chip pancakes. Pancakes can be stacked on - top of each other. -2017-08-26: - Cyberboss: - - rscadd: Added the credits roll - Iamgoofball: - - rscadd: Plasmamen now hallucinate with blackpowder in their system - Joan: - - balance: Geis bindings no longer decay faster if not pulled by a Servant, but - last for 20 seconds, from 25. - - tweak: Geis bindings will decay slower when on a Sigil of Submission, and, if - being pulled by a Servant when crossing a Sigil of Submission, will helpfully - remove the pull. - - tweak: Removing Geis bindings is no longer instant and can be done by any Servant - with a slab, not just the initiator. - - wip: Geis no longer prevents you from taking actions, but you remain unable to - recite scripture while the target is bound. In addition, dealing damage to a - bound target will cause the bindings to decay much more rapidly. - - rscadd: You can now remove sigils by hitting them with a clockwork slab for a - small refund. - More Robust Than You: - - balance: Lowers the chance for monkeys to become gorillas - - rscadd: Holoparasite prompts now have a "Never For This Round" option - Naksu: - - spellcheck: fixed inconsistent grammar between machines that derive from /obj/machinery/chem_dispenser - - spellcheck: touched up some chat messages to include references to objects instead - of "that" or "the machine" etc., also removed references to beakers being loaded - in machines that can accept any container -2017-08-30: - CPTANT: - - balance: Hacked AI module cost is reduced to 9TC - Cobby & Cyberboss: - - rscadd: A stealth option for the traitor microlaser has been added. When used, - it adds 30 seconds to the cooldown of the device. - Cyberboss (unwillingly by Kor's hand): - - balance: You no longer take damage/are as heavily blinded in crit while above - -30HP - - balance: Whispering in crit above -30HP will not cause you to succumb - - balance: You can now hear in crit above -30HP - Joan: - - imageadd: Cult blades have updated item and inhand sprites. - Kor: - - rscadd: Added Shadow Walk, a new form of jaunt that lasts for an unlimited amount - of time, but ends if you enter a well lit tile. It is planned for use in a Shadowling - rework, but feel free to hassle admins to test it out in the mean time. - - balance: Slime people can consume meat and dairy again. - Lzimann: - - rscadd: Ghosts now have a way to see all available ghost roles! Check your ghost - tab! - MMMiracles: - - rscdel: Cerestation has been decommissioned. Nanotrasen apologizes for any spikes - of suicidal tendencies, sporadic outbursts of primitive anger, and other issues - that may of been caused during the station's run. - Naksu: - - bugfix: fixed portable chem dispensers charging 50% slower than intended when - initialized. - - bugfix: fixed portable chem dispensers getting faster charging rate every time - refreshparts() is called - Pubby: - - rscadd: Crew-tracking pinpointers to replace laggy crew monitoring console functionality - - rscadd: Crew-tracking pinpointers in medical vendors and the detective's office - RemieRichards: - - rscadd: AltClick listing now updates instantly on AltClick - - bugfix: AltClick listing no longer reveals obscured items - ShizCalev: - - tweak: The singularity now poses a threat towards asteroids as well as stations. - - tweak: All power systems will now report their wattage values in Watts, Kilowatts, - Megawatts, and Gigawatts. Gone are the days of seeing 48760 W total load when - working with an APC! - kingofkosmos: - - tweak: You can now unbuckle out a chair/bed by moving. - ninjanomnom: - - bugfix: Fixed a problem with shuttles being unrepairable under certain circumstances. -2017-09-01: - Fury McFlurry: - - rscadd: Added more halloween costumes. - - rscadd: Among them are a lobster suit, a cold villain costume and some gothic - clothes - More Robust Than You: - - rscdel: Finally fucking removed gangs - MrStonedOne: - - rscadd: Player notes can now be configured to fade out over time to allow admins - to quickly see how recent notes are. Server Operators, check the config for - more info - Pubby: - - rscdel: The multiverse sword is toast - YPOQ: - - bugfix: Pouring radium into a ninja suit restores adrenaline boosts. - - bugfix: Adrenaline boost works while unconscious again. - - bugfix: Energy nets can be used again! -2017-09-02: - Frozenguy5: - - tweak: Added new station prefixes, names and suffixes! - Tortellini Tony: - - tweak: Round-end credits can now be toggled on or off in the server game options. - XDTM: - - tweak: The Disease Outbreak event now can generate random advanced viruses, with - more symptoms and higher level as round time goes on. -2017-09-11: - Anonmare: - - balance: Altered pressure plate crafting recipe - Basilman: - - rscadd: A strange asteroid has drifted nearby... - Firecage: - - rscadd: The NanoTrasen Department for Cybernetics (NDC) would like to announce - the creation of Cybernetic Lungs. Both a stock variety to replace traditional - stock human lungs in emergencies, and a more enhanced variety allowing greater - tolerance of breathing cold air, toxins, and CO2. - JJRcop: - - rscadd: Admins can now play media content from the web to players. - - rscadd: Adds a volume slider for admin midis to the chat options menu. - Jay: - - bugfix: Goliaths can be butchered again - Joan: - - tweak: While below 0 health but above -30 health, you will be able to crawl slowly - if not pulled, whisper, hear speech, and see with worsening vision. - - wip: The previous softcrit got reverted, for changelog context. - - rscdel: Standard attacks, such as swords, hulk punches, mech punches, xeno slashes, - and slime glomps, will no longer damage clothing. - Kor: - - rscadd: People in soft crit will take oxyloss more slowly than people in full - crit if they remain still. - - rscadd: People dragging themselves in critical condition will now leave blood - trails. This will rapidly deal oxyloss to you. - MrStonedOne: - - rscadd: Admins may now show the variables interface to players to help contributors - debug their new additions - Naksu: - - rscadd: Added TGUI interfaces to various smartfridges of different kinds, drying - racks and the disk compartmentalizer - Pubby: - - bugfix: Escape pods and PubbyStation's monastery shuttle are back in commission - Robustin: - - tweak: Golem shells no longer fit in standard crew bags. - Supermichael777: - - bugfix: Stands now check if their user got queue deleted somehow - VexingRaven: - - bugfix: Hearty Punch once again pulls people out of crit. - Xhuis: - - spellcheck: Various grammar in the Orion Trail arcade game has been tweaked. - - rscadd: You can now kill yourself in fun and creative ways with the hierophant - club. - - rscadd: Common lavaland mobs now have rare mutations! Keep an eye out for rare - Poke- err, monsters. - - imageadd: The hand drill and jaws of life now have sprites on the toolbelt. - YPOQ: - - bugfix: Windoors open when emagged again - as334: - - rscadd: Added a mass spectrometer to the detective's closet - basilman: - - rscadd: penguins may now have shamebreros, noot noot -2017-09-13: - BeeSting12: - - balance: The stetchkin APS pistol is smaller. - - rscadd: The 9mm pistol magazines can be purchased from nuke op uplinks at two - telecrystals each. - Kor: - - rscadd: Added Nightmares. They're admin only currently, so as usual, make sure - to beg admins to be one. - - rscadd: The Chaplain may now choose the Unholy Blessing as a null rod skin. - KorPhaeron: - - rscadd: Added Jacob's ladder to the necropolis chest - Lordpidey: - - bugfix: Centcom roundstart threat reports are fixed, and can now be used to narrow - down the types of threats facing the station. - MrROBUST: - - rscadd: Mechs now can be connected to atmos ports - VexingRaven: - - bugfix: Changeling Augmented Eyesight ability now grants flash protection when - toggled off - - bugfix: Changeling Augmented Eyesight ability can now be toggled properly - - bugfix: Changeling Augmented Eyesight ability is properly removed when readapting - - bugfix: The syndicate have once again stocked the toy C20r and L6 Saw with riot - darts. - Xhuis: - - rscadd: You can now use metal rods and departmental jumpsuits to craft departments - for each banner. - - tweak: The lavaland animal hospital ruin has been remapped, including more supplies - as well as light sources. -2017-09-14: - BeeSting12: - - balance: Deltastation's and Metastation's armory now starts with three riot shotguns! - Fun Police: - - rscdel: Removed some of the free lag. - Kor: - - bugfix: It is possible to multitool the cargo computer circuitboard for contraband - again - ShizCalev: - - bugfix: Holding a potted plant will no longer put you above objects on walls. - - bugfix: Replaced leftover references to loyalty implants with mindshield implants. - ninjanomnom: - - bugfix: Shuttle transit parallax should be working again -2017-09-16: - Basilman: - - rscadd: Gondolas are now procedural generated. - Mey-Ha-Zah: - - imageadd: Updated the knife sprite. - Naksu: - - bugfix: Evidence bags will no longer show ghosts of items such as primed flashbangs - after the flashbang inside explodes - - bugfix: Prevents dead monkeys from fleeing their attackers or escaping His Grace - only to be eaten again - - rscdel: Corgis can no longer be targeted by facehuggers - - rscdel: Removed unused vine floors and their sprite. - Robustin: - - rscadd: Due to budget cuts, airlocks that control access to non-functional maint - rooms and other abandoned areas now have a chance to spawn welded, bolted, screwdrivered, - or flat out replaced by a wall at roundstart. - - bugfix: Dice will now roll when thrown - YPOQ: - - rscadd: Ninja adrenaline boost removes stamina damage - - bugfix: Depowered AIs can no longer use abilities or interact with machinery - - bugfix: The doomsday device will again periodically announce the time until its - activation - - bugfix: Crafting stackable items results in the right stack sizes -2017-09-18: - More Robust Than you: - - balance: Blobbernauts are healed quicker by cores and nodes - Naksu: - - bugfix: OOC for dead people is now (re-)enabled at round-end - - bugfix: Fixed chemfridges being unable to display items with dots in their name - Pubby: - - rscadd: Traitorbro gamemode - Supermichael777: - - bugfix: Airlocks now check metal for upgrades using the standard get_amount() - proc instead of checking the amount var, this means it is compatible with cyborgs. - TungstenOxide: - - tweak: Swapped the action of purchasing a pAI software and subtracting the RAM - from available pool. - Xhuis: - - balance: Brave Bull now increases your max HP by 10, up from 5. - - rscadd: Tequila Sunrise now makes you radiate dim light while it's in your body. - - rscadd: Dwarves are now very resistant to the intense alcohol content of the Manly - Dorf and can freely quaff them without too much worry. - - rscadd: Bloody Mary now restores lost blood. -2017-09-20: - PopNotes: - - imageadd: Airlocks animate faster. This doesn't change the time it takes to pass - through an airlock, but it does visually match up much better so you don't just - appear to glide through the airlock while it's half-open. - Pubby: - - bugfix: Atmos pipenets are less glitchy - TehZombehz: - - rscadd: Several new plushie dolls are now available in toy crates. -2017-09-22: - AutomaticFrenzy: - - bugfix: Mice spawning finds the station z level properly - CPTANT: - - balance: Knockdown and unconcious now let you regenerate stamina damage. - - rscadd: Sleeping regenerates more stamina damage. - Naksu: - - bugfix: Admin ghosts can no longer unintentionally make a mess of things. -2017-09-23: - Armhulen: - - rscadd: Rare Spider Variants have arrived! Every spiderling has a rare chance - of growing up to a rare version of their original spider type! - - rscadd: Special thanks to Onule for the sprites, you're the best! - JJRcop: - - rscadd: Suiciding with a ballistic gun now actually blows your brain out. - More Robust Than You: - - tweak: Taking the beaker out of a cryotube now tries to put it into your hand - - code_imp: Removed some spawn()s from secbot code - - bugfix: Using a soulstone on somebody now transfers your languages to the shade - - bugfix: Zombies now stay dead if they suicide - - rscadd: If a zombie suicides, they now rip their head off! - - bugfix: pAIs now transfer their languages to bots - - bugfix: Support Holoparasites must be manifested to heal - Robustin: - - balance: A zombie's automatic self-healing is stopped for 6 seconds after taking - damage. - - bugfix: Deconverted revs will now always get a message, logs will now include - more details. - YPOQ: - - bugfix: Pet persistence works again -2017-09-27: - Arianya: - - balance: Lesser ash drakes no longer drop ash drake hide when butchered. - GLA Coding: - - tweak: Cells must now be installed in mechs when being constructed, this step - is always before the application of internal armor. - - bugfix: Combat mechs now get stats upgrades from their scanning modules and capacitors - Improvedname: - - rscadd: Adds racial equality to color burgers - More Robust Than You: - - rscadd: Implant Chairs now also support organs - Naksu: - - bugfix: Fixed jump boots breaking if used when you can't jump, such as when inside - a sleeper. - - code_imp: Removed meteor-related free lag. - - bugfix: Syndicate MMIs will now properly transfer their laws to newly-constructed - AIs - Pubby: - - rscadd: Bluespace pipes to atmospherics, which create a single pipenet with all - bluespace pipes in existence. -2017-09-28: - RandomMarine: - - imageadd: Air tanks (o2+n2) now have a different appearance from oxygen tanks. - Robustin: - - tweak: Revheads no longer spawn with chameleon glasses or a spraycan, instead - they will start with a cybernetic security HUD implanted into their eyes. - Xhuis: - - rscadd: Ian has recently communed with unspeakable horrors and may now be warped - by their power if Nar-Sie passes near them. - - rscadd: In order to fight back against their ancient foe Ian, Poly has struck - a bargain with Ratvar and will be transformed into a machine by their presence. - Y0SH1_M4S73R: - - bugfix: AFK players count as dead for the assassinate objective. -2017-09-29: - Kor: - - rscadd: Gunfire can now leave bullet holes/dents in walls. Sprites by JStheguy. - RandomMarine: - - rscadd: You can now light your cigs with people that are on fire. The surgeon - general is spinning in their grave. - Robustin: - - tweak: Hacking a secure container with a multitool now takes longer, but no longer - has a chance to fail. - XDTM: - - rscadd: Nurse spiders can now set a directive that will be seen by their spiderlings, - when they get controlled by a player. - - rscadd: Spiders' actions are now action buttons instead of verbs. - - rscadd: Wrapping stuff in a cocoon is now a targeted action! - kevinz000: - - rscadd: The syndicate have recently begun sending agents to extract vital research - information from Nanotrasen. - - bugfix: 'Timestop fields will now stop thrown objects experimental: Timestops - will now be much quicker to react.' - kingofkosmos: - - spellcheck: You can now find out if an item uses alt-clicking by examining it. -2017-10-07: - Antur: - - bugfix: Liches will no longer lose their spells when reviving. - AnturK: - - rscadd: Wigs are now available in AutoDrobe - Cobby: - - admin: Players will now be notified automatically when an admin resolves their - ahelp. - Cyberboss: - - config: The shuttle may now be configured to be automatically called if the amount - of living crew drops below a certain percentage - - bugfix: Fixed a rare case where creating a one tank bomb would result in a broken - object - - bugfix: Fixed many cases where forced item drops could be avoided by not having - an item in your active hand - DaxDupont: - - rscdel: No more roundstart tips about gangs. You can finally start to forget gangs - ever existed. - Incoming5643: - - bugfix: The rarely utilized secret satchel item persistence system has been fixed - and made more lenient. - - rscadd: 'In case you forgot how it works: if you find or buy secret satchels, - put an item in them, and then bury them under tiles on the station you or someone - else can find them again in a future round with the item still there! Free satchels - can often be found hiding around the station, so get to burying!' - JJRcop: - - config: Hosts can now lock config options with the @ prefix. This prevents admins - from editing the option in-game. - - tweak: Admin volume slider moved to its own menu for better visibility. - Joan: - - bugfix: Fixes Vanguard never stunning for more than 2 seconds. - - balance: Ocular Warden base damage per second changed from 12.5 to 15. - - bugfix: Ocular Wardens no longer count themselves when checking for dense objects, - which decreased their overall damage by 15%. - - balance: Ocular Wardens now only reduce their damage by 10% per dense object, - and only do so once per turf. However, dense turfs now reduce their damage with - the same 10% penalty. - Kerbin-Fiber: - - bugfix: Wood is no longer invisible - Kor: - - rscadd: Nightmares now have mutant hearts and brains, with their own special properties - when consumed or implanted in mobs. Experiment! - - bugfix: You can now tell when someone is in soft crit by examining them. - - rscadd: Nightmares now have a chance to spawn via event. - More Robust Than You: - - bugfix: Fixes cogscarab sprites not updating - - balance: Blobs now take damage from particle accelerators - MrDoomBringer: - - rscadd: Nanotrasen, as part of their new Employee Retention program, has encouraged - more station point-makery by adding the "Cargo Tech of the Shift"! The award - is located in a lockbox in the Quartermaster's locker. - MrStonedOne: - - tweak: The MC will now reduce tick rate during high populations to keep it from - fighting with byond for processing time. - - config: Added config options to control MC tick rate - - admin: Admins can no longer manually control the mc's tick rate by editing the - MC's processing value, instead you will have to edit the config datum's values - for high/low pop tick rates. - Naksu: - - bugfix: Removed some of the free lag - - bugfix: Updates to station name are now reflected on Cargo's stock exchange computers. - - bugfix: Gutlunches will now once again look for gibs to eat. - - bugfix: Bees now come with reduced amounts of free lag - - balance: Pyrosium and cryostylane now react at ludicrous speeds. - - tweak: Made atmos tiny bit faster - - bugfix: Tweaks to atmos performance - Qbopper: - - tweak: Moved a locker blocking an airlock in Toxins maintenance. - RandomMarine: - - bugfix: Simple mobs should no longer experience severe hud/lighting glitches when - reconnecting. - Robustin: - - rscadd: Blood cultists can now create a unique bastard sword at their forge - - rscdel: Blood cultists can no longer obtain a hardsuit from the forge - - bugfix: Emotes (e.g. spinning and flipping) will now properly check for consciousness, - restraints, etc. when appropriate. - - bugfix: The Cult's bastard sword should now properly store souls and create constructs. - - bugfix: Neutering a disease symptom now produces a unique ID that will ensure - the PANDEMIC machine copies it properly. - ShizCalev: - - bugfix: You now have to unbuckle a player PRIOR to shaking them up off a bed or - resin nest. - - bugfix: Wizards will now have the correct name when attacked with Envy's knife! - - soundadd: Space ninja energy katanas now make a swish when drawn! - Supermichael777: - - balance: The detectives gun has been restored from a system change that nerfed - knockdown in general. We need to have a serious discussion about anti revolver - hate in this community. - - tweak: The PDA default font has been switched from "eye bleed" to old-style monospace. - Check your preference. - Thefastfoodguy: - - bugfix: Silicons can no longer take brain damage - - bugfix: Antimatter shielding that can't find a control unit won't delete itself - anymore - WJohnston: - - rscadd: Boxstation and Metastation's white ships now have navigation computers, - letting you move them around in the station, deep space, and derelict z levels. - XDTM: - - rscadd: Added the H.E.C.K. suit, a guaranteed loot frop from Bubblegum. - - rscadd: The H.E.C.K. suit is fully fire (and ash) proof, and has very good melee - armor. - - rscadd: H.E.C.K. suits can also be painted with spraycans, to fully customize - your experience. - - rscadd: Despite spending centuries inside a demon king, H.E.C.K. suits are most - definitely safe. - - bugfix: Fixed a bug where Viral Aggressive Metabolism caused viruses to be cured - instantly. - - bugfix: Fixed a bug where viruses' symptoms would all instantly activate on infection. - - rscadd: The CMO now has an advanced health analyzer in his closet! It can give - more precise readings on the non-standard damage types. - Xhuis: - - bugfix: Runed metal and brass are no longer invisible. - Xhuis and Y0SH1_M4S73R: - - bugfix: Servants of Ratvar now spawn in as the actual race set on their preferences, - with plasmamen getting the gear they need to not immediately die. - Y0SH1_M4S73R: - - balance: Gygax overdrive consumes at least 100 power per step - YPOQ: - - bugfix: Jaunters equipped on the belt slot will save you from chasms again. - kevinz000: - - rscadd: Wormhole event wormholes now actually teleport you. - - bugfix: portals now actually teleport on click. - kingofkosmos: - - rscadd: You can now see construction/deconstruction hints when examining airlocks. - - spellcheck: Beds, chairs, closets, grilles, lattices, catwalks, tables, racks, - floors, plating and bookcases now show hints about constructing/deconstructing - them. - nicbn: - - rscadd: Paperwork now uses Markdown instead of BBCode, see the writing help for - changes. - - imageadd: Changed the drop, throw, pull and resist icons. -2017-10-15: - Armhulen: - - bugfix: Clockwork golems no longer slip and slide on glass! - Armie: - - tweak: Holoparasites are once again in the uplink. - Bawhoppen: - - tweak: Smoke machine board has been moved to tech storage. - DaxDupont: - - tweak: After lobbying by Robust Softdrinks and Getmore Chocolate Corp all vendor - firmware has been changed to add sillicons to their target demographic. - - spellcheck: Replaces instances of "permenant" and "permenantly" with the proper - spelling in several areas, - Epoc: - - rscadd: Added a Toggle Underline button to the PDA menu - - code_imp: Cleaned HTML spacing - Frozenguy5: - - bugfix: C20r damage upped from 20 to 30 (used to be 30 before an ammo cleanup - in the code) - GLACoding: - - bugfix: Syndicate turrets and other machines in walls can now be hit by projectiles - Improvedname: - - rscadd: You can now put custom name and lore on your holy weapon by using a pen - on it! - - tweak: Cmo, captain, and the bartender now get pet collars in their lockers. - Jambread/RemieRichards/Incoming5643: - - server: There is a new system for title music accessible from config/title_music - folder. This system allows for multiple rotating lobby music without bloating - Git as well as map specific lobby music. See the readme.txt in config/title_music - for full details. - - config: The previous method of title music selection, strings/round_start_sounds.txt - has been depreciated by this change. - Kor: - - balance: You can now smash the bulbs out of floodlights rather than having to - entirely destroy the object. - Mercenaryblue: - - rscadd: Use the Clown Stamp on some cardboard to begin... the honkbot! - - rscadd: These honkbots are just adorable, and totally not annoying. I swear! Honk! - - rscadd: You can even slot in a pAI! Just don't emag them... oh boy. oh no. oh - geez. - - soundadd: Honkbots now release an evil laugh when emagged. - - imageadd: added some in_hands for banana peels. - - tweak: Golden Bike Horns now permit its victims to perform a full flip before - forcing them to jump again. - More Robust Than You: - - bugfix: Makes the santa event properly poll ghosts - - bugfix: Diseases will now cure if species is changed - - tweak: You can now drag-drop people into open DNA scanners - - bugfix: Medibots will no longer inject people in lockers/sleepers/etc - Naksu: - - bugfix: Fixes to door/airlock deletion routines. - - bugfix: Traitor pen uplinks now preferentially spawn in the PDA pen, and not in - a pocket protector full of pens that no-one checks. - - bugfix: Reusable projectiles such as foam darts no longer get deleted if they're - shot at a shooting range target or a cardboard cutout. - - bugfix: Ghosts no longer inherit the movement delay of their former bodies. - - bugfix: Fixed mobs being able to smash shocked objects without taking damage. - - bugfix: Fixed some mobs not deleting correctly - - code_imp: Fixed dusting code, supermatter-suicides no longer spam the runtime - logs. - - code_imp: Fixed some initialize paths. - Onule: - - tweak: Sunflower sprites were changed, small edits to variants. - - imageadd: Sunflower and variant's inhands sprites. - - imageadd: Tweaked growing sprites to match the new sunflower. - - imageadd: Moonflower and novaflowers now have slightly different growing sprites. - Robustin: - - rscadd: The Chemistry Smoke Machine! Chemist offices will have a board available - should they choose to construct a smoke machine. The smoke machine will regularly - produce smoke from whatever chemicals have been inserted into the machine. Designs - for the circuitboard are also available at RND. - - tweak: Abandoned Airlocks will no longer be deleted when their turf is changed - to a wall. - - tweak: Tesla movement is now completely random. - - bugfix: Clock Cult mode will no longer end if all the cultists die. The round - will not end until the Ark is destroyed or completed. - - bugfix: Chain reactions between explosives will now properly trigger explosives - located in an individual's bag. - - tweak: The wrench-anchoring time of the smoke machine is now doubled to 4 seconds. - - tweak: Smoke Machine smoke is now transparent. - - rscadd: The smoke machine has taken its rightful place in the chemist's office. - - bugfix: Smoke machine will no longer operate while moving/unanchored. - ShizCalev: - - tweak: Nanotrasen brand "Box" model stations have received approval from CentCom - to be retrofitted with the latest in Xenobiology equipment. You will now find - a chemmaster, a chemical dispenser, and a dropper within the Research Division's - Xenobiology lab. - - bugfix: C4 will no longer appear underneath objects on walls. - - bugfix: Plastic explosives will no longer be invisible after being planted. - - imageadd: The security bombsuit's sprite has been updated! - SpaceManiac: - - spellcheck: Grammar when examining objects has been improved. - - bugfix: AI eye camera static is now correctly positioned on Lavaland. - - spellcheck: Fixed many instances of "the the" when interacting with objects. - - bugfix: The tracking implant locator now works on the station again. - WJohn: - - rscadd: An old cruiser class vessel has resiliently stuck around, and may do so - for the foreseeable future. - WJohnston: - - tweak: Due to age, the abandoned ship's engines are now considerably slower when - bringing it place to place. This does however mean that the ship now has a more - gradual takeoff, with no sudden jolt to knock passengers off their feet. - - imageadd: Black carpets no longer have an ugly periodic black line in them. Regular - catwalks are now totally opaque so you won't accidentally click on space when - trying to place wires or tiles on them. - - rscdel: Boxstation's guitar white ship is no more. - - rscadd: Metastation's white ship stands in its place! - - tweak: Metastation's white ship has a couple of weak laser turrets to protect - the cockpit from space carp. - - tweak: Boxstation and metastation now have some plating under the grilles near - the AI sat's transit tube to prevent players from deleting the tube by landing - there. - WJohnston & ninjanomnom: - - rscadd: Plastitanium walls smooth, fancier syndicate shuttles! - - bugfix: Infiltrator shuttles have been moved out of the station maps and made - into a multi-area shuttle. - - balance: Titanium and plastitanium have explosion resistance (requested by Wjohn) - XDTM: - - rscadd: Blood and vomit pools can now spread the diseases of the mob that made - them! Cover your feet properly to avoid infection. - - rscadd: Virus severity now changes the color of the disease HUD icon, scaling - from green to red to flashing black-red. - - tweak: Contact-based diseases no longer spread by simply standing near other people; - it requires interaction like touching or attacking. Bumping against people/swapping - with help intent still counts as touching. - - tweak: Advanced viruses now have another infection type, "Fluids"; it's between - blood and skin contact, and will only be transmitted through fluid contact. - - rscdel: Two "hidden" infection types have been removed. Overall this means that - making a virus airborne is a little bit easier. - - bugfix: Species who cannot breathe can no longer be infected by breathing. - - bugfix: Internals now properly work if set to 0 pressure, and will prevent breathing - gas from the external atmosphere. - - bugfix: Viral Aggressive Metabolism is now properly inactive when neutered. - Xhuis: - - tweak: Cogscarabs can now experiment more freely with base design during non-clockcult - rounds with infinite power and the ability to recite scripture! - - bugfix: The Ark of the Clockwork Justiciar is now registered as a hostile environment. - - refactor: Clockwork scripture now has one progress bar for the entire recital - instead of multiple ones for each sentence in the invocation. - - bugfix: Ocular wardens no longer have a burning hatred for revenants and won't - attack their corpse endlessly anymore. - - balance: Stargazers can no longer be built off-station, even in new areas. - - balance: Integration cogs no longer emit sounds and steam visuals when active. - armie: - - bugfix: mob spawners are no longer possessable - deathride58: - - rscadd: '*slap' - duncathan: - - bugfix: Scrubbers and filters no longer allow for infinite pressure in pipes. - improvedname: - - bugfix: 9mm doesn't longer appear in traitor surplus crates - kevinz000: - - bugfix: 'Flightsuits now allow proper pulling experimental: Moved now has an argument - for if it was a regular Move or a forceMove.' - - rscadd: Instead of dumb sleep()s, follow trails now use SSfastprocess for processing! - - rscadd: Mobs now float while flying automatically! - - rscdel: 'Flightsuits can no longer be safely shut off if you''re still barreling - down the hallway. experimental: Flightsuits should be less shitcode. Hope this - PR doesn''t blow anything important up!' - - bugfix: Fixed trying to clear beaker in pandemic when the beaker is already removed - causing a runtime. - kingofkosmos: - - rscadd: Alt-clicking on a computer now ejects the ID card inside it. - nicbn: - - tweak: You can now clear bullet holes in walls using a welding tool. - ninjanomnom: - - refactor: Radiation has been completely overhauled. - - rscadd: A new radiation subsystem and spreading mechanics. - - rscadd: Walls and other dense objects insulate you from radiation. - - rscadd: Geiger counters now store the last burst of radiation so you can view - it at your leisure or show it to someone. Examine it. - - rscadd: Geiger counters can check mobs for contaminated objects. Scan yourself - before you leave to make sure you aren't carrying dangerous radioactive items. - - soundadd: Geiger counters have realistic sounds and the radiation pulse spam in - chat has been replaced. - - balance: Radiation is more deadly and causes burns at high intensities, WEAR YOUR - RADSUITS. - - balance: However residue radiation is far slower acting and kills you with toxin. - - balance: Engineering holosigns have a light amount of radiation insulation. - - balance: Rad collectors are nerfed. No more supercharging with pressurized plasma. - No more collector spam either. - - balance: Engine output is a lot more stable as a result of collector changes. - - balance: Monkeys need more rads and take more time to turn into gorillas. - - tweak: Over 100% on the DNA computer means your subject is now taking damage. - - tweak: The asteroid escape shuttle has no stabilizers and throws you around when - it moves - - bugfix: Shuttles no longer rotate ghosts of players who prefer directionless sprites - - bugfix: 2 Years later and cameras work on shuttles now, probably. - - bugfix: Buckled mobs when on a rotating shuttle should now rotate correctly - - bugfix: Fixes shuttles gibbing in supposedly safe areas - - bugfix: Mobs that didn't move during shuttle launch would not have their parallax - updated. This is fixed now. - - bugfix: The custom shuttle placement highlight now works for multi area shuttles. - - bugfix: Directional windows shouldn't leak air anymore - - tweak: Windows only block air while anchored - - bugfix: Fixes camera mobs being considered a target by radiation - - bugfix: Cables can no longer be contaminated as well - - balance: Buffs radiation cleansing chems - - balance: Toxin damage per tick from radiation is halved - - admin: Contaminated objects keep track of what contaminated them - - admin: Radiation pulses over 3000 are logged now - spessmenart: - - imageadd: The captains sabre no longer looks like a rapier. -2017-10-17: - DaxDupont: - - bugfix: 'Fancy boxes(ie: donut boxes) now show the proper content amount in the - sprite and no longer go invisible when empty.' - Mercenaryblue: - - bugfix: when decapitated, banana-flavored cream no longer hovers where your head - used to be. - More Robust Than You: - - rscadd: EI NATH! now causes a flash of light - Naksu: - - bugfix: Pinned notes will now show up on vault, abductor, centcom and large glass - airlocks. - - spellcheck: Removed a misleading message when handling full stacks of sheets. - - bugfix: Pre-filled glass bottles (uplink, medbay, botany) will now give visual - feedback about how much stuff is left inside, and the color of contents will - match an empty bottle being filled with the same reagent. - - bugfix: Player-controlled "neutral" mobs such as minebots are now considered valid - targets by clock cult's ocular wardens. - Xhuis: - - bugfix: Cogged APCs can now be correctly unlocked with an ID card. - duncathan: - - tweak: Portable air pumps can output to a maximum of 25 atmospheres. - kevinz000: - - refactor: Legacy projectiles have been removed. Instead, all projectiles are now - PIXEL PROJECTILES! - - rscadd: Reflectors can now be at any angle you want. Alt click them to set angle! - - rscadd: Pipes can now be layered up to 3 layers. -2017-10-18: - DaxDupont: - - bugfix: Fixes automatic fire on guns. - Gun Hog: - - bugfix: The GPS item now correctly changes its name when the GPS tag is changed. - Improvedname: - - tweak: Reverts katana's to its orginal size being huge - Mercenaryblue: - - balance: it should be far easier to clean out your face from multiple cream pies. - More Robust Than You: - - tweak: People that are burning slightly less will appear to be burning... slightly - less. - Robustin: - - bugfix: The smoke machine now properly generates transparent smoke, transmits - chemicals, and displays the proper icons. - ShizCalev: - - tweak: You can no longer build reinforced floors directly on top of dirt, asteroid - sand, ice, or beaches. You'll have to first construct flooring on top of it - instead. - - bugfix: Corrected mapping issues introduced with the latest SM engine/radiation - update across all relevant maps. - - bugfix: The tools on the Caravan Ambush space ruin have had their speeds corrected. - - bugfix: Slappers will no longer appear as a latex balloon in your hand. - - bugfix: Renault now has a comfy new bed on Metastation! - - tweak: Engineering cyborgs now have access to geiger counters. - Xhuis: - - bugfix: You can no longer pick up brass chairs. - Y0SH1_M4S73R: - - bugfix: Disabling leg actuators sets the power drain per step to the correct value. - duncathan: - - bugfix: Filters no longer stop passing any gas through if the filtered output - is full. - ninjanomnom: - - rscadd: You can vomit blood at high enough radiation. - - balance: Radiation knockdown is far far shorter. - - balance: Genetics modification is less harmful but still, upgrade your machines. - - balance: Pentetic acid is useless for low amounts of radiation but indispensable - for high amounts now. - - balance: Singularity radiation has been normalized and Pubby engine has been remapped. - - bugfix: No more hair loss spam - - bugfix: Mob rad contamination has been disabled for now. Regular contamination - is still a thing. - - bugfix: Fixed turfs not rotating - - bugfix: Fixed stealing structures you shouldn't be moving -2017-10-19: - Kor: - - rscadd: Blob is now a side antagonist. - - rscadd: Event and admin blobs will now be able to choose their spawn location. - - rscadd: Blob can now win in any mode by gaining enough tiles to reach Critical - Mass. - - rscadd: Blobs that have Critical Mass have unlimited points, and a minute after - achieving critical mass, they will spread to every tile on station, killing - anyone still on board and ending the round. - - rscadd: Using an analyzer on a blob will now reveal its progress towards Critical - Mass. - - rscadd: The blob event is now more common. - Mercenaryblue: - - tweak: You will no longer trip on inactive honkbots. - - bugfix: Sentient Honkbots are no longer forced to speak when somebody trip on - them. - Naksu: - - bugfix: Manned turrets stop firing when there's no-one in the turret shooting. - - refactor: 'mobs will enter a deep power-saving state when there''s not much to - do except wander around. change: bees are slightly more passive in general' - deathride58: - - tweak: You can now press Ctrl+H to stop pulling, or simply H to stop pulling if - you're in hotkey mode. - ninjanomnom: - - rscadd: Engineering scanner goggles have a radiation mode now - - rscadd: Objects placed under showers are cleansed of radioactive contamination - over a short time. - - soundadd: Showers make sound now. - oranges: - - rscdel: Removed the bluespace pipe -2017-10-20: - Kor: - - rscadd: You can now select your Halloween race, rather than having it assigned - randomly via event. - Robustin: - - bugfix: Fixed a bug where detonating maxcaps, especially multiple maxcaps, on - Reebe guaranteed that everyone would die and thus the Clock Cult would immediately - lose; Reebe maxcap is now 2/5/10. - ShizCalev: - - bugfix: All reflector prisms/mirrors have had their angles corrected. - - tweak: Remains left over by dusting or soul-stoning a mob are now dissoluble with - acid. - - tweak: Changelings using biodegrade to escape restraints will now leave a pile - of goop. - - bugfix: Fixed messages related to changelings using biodegrade not appearing. -2017-10-21: - More Robust Than You: - - bugfix: Heads of staff will now have cat organs removed at roundstart - Robustin: - - balance: Spray tan no longer stuns when ingested. - Thunder12345: - - bugfix: Sentient cats no longer forget to fall over when they die -2017-10-22: - More Robust Than You: - - bugfix: Blood Brother now properly shows up in player panel - Naksu: - - server: Paper bins no longer let server admins know that pens were eaten. - - code_imp: Removed dangling mob references to last attacker/attacked - Robustin: - - balance: Medical biosuits (and hardsuits) now offer heavy, but not complete, radiation - resistance. - ninjanomnom: - - bugfix: Contents of silicon mobs are no longer considered for targets of radiation. - This blocks them from being contaminated. -2017-10-24: - Armhulen: - - rscadd: Wizards may now shapeshift into viper spiders. - Improvedname: - - tweak: Blacklists holoparasite's from surplus crates - Kor: - - rscadd: Added dullahans, which will be available from the character set up menu - during the Halloween event. - - bugfix: Severed heads will no longer appear bald. - More Robust Than You: - - bugfix: Fixes champrojector camera bugs - Naksu: - - bugfix: Grinders will now grind grown items like cocoa pods again - - code_imp: Cameras no longer keep hard references to mobs in their motion tracking - list. - ShizCalev: - - bugfix: Creatures made via gold slime cores will now be given the proper name - of their master. - deathride58: - - tweak: Deltastation's armory now contains reinforced windows surrounding the lethal - weaponry. This makes Delta's armory consistent with Box. - - tweak: There are now decals in places where extra Security lockers can spawn. - - tweak: Cleaned up semicolons in Meta and Boxstation's .dmms -2017-10-25: - Cruix: - - rscadd: Shuttle navigation computers can now place new transit locations over - the shuttle's current position. - JJRcop: - - rscadd: The heart of darkness revives you as a shadowperson if you aren't one - already. - ShizCalev: - - bugfix: Shades will no longer always hear a heartbeat. - - bugfix: Golem abilities will now be start on cooldown when they are made. -2017-10-26: - Kor and JJRcop: - - rscadd: Added vampires. They will be available as a roundstart race during the - Halloween holiday event. - ShizCalev: - - bugfix: Reflectors will no longer drop more materials than they took to make when - deconstructed. - - bugfix: You will no longer be prompted to reenter your body while being defibbed - if you can't actually be revived. - - bugfix: You can no longer teleport past the ticket stands of the Luxury Emergency - Shuttle. - - bugfix: Lightgeists can now -actually- be spawned with gold slime cores. - - tweak: The Staff of Change will now randomly assign a cyborg module when transforming - a mob into a cyborg. - Xhuis: - - balance: Clockwork marauders now move more slowly below 40% health. - - balance: Instead of a 40% chance (or more) chance to block projectiles, clockwork - marauders now have three fixed 100% blocks; after using those three, they cannot - block anymore without avoiding projectiles for ten seconds. This number increases - to four if war is declared. - - balance: Projectiles that deal no damage DO reduce marauders' shield health. Use - disabler shots to open them up, then use lasers to go for the kill! - - bugfix: Cogscarab shells and marauder armor now appear in the spawners menu. - - bugfix: You can no longer stack infinitely many stargazers on one tile. - nicbn: - - imageadd: Chemical heater and smoke machine resprited. - ninjanomnom: - - soundadd: Portable generators have a sound while active. - - soundadd: The supermatter has a sound that scales with stored energy. - ninjanomnom & Wjohn: - - bugfix: Cable cuffs now inherit the color of the cables used to make them. - - bugfix: Split cable stacks keep their color. - - tweak: The blue cable color is now a better blue. -2017-10-27: - Anonmare: - - rscadd: Adds new grindables - JamieH: - - rscadd: Buildmode map generators will now show you a preview of the area you're - changing - - rscadd: Buildmode map generators will now ask before nuking the map - - bugfix: Buildmode map generator corners can now only be set by left clicking - Kor: - - rscadd: Cloth golems will be available as a roundstart race during Halloween. - MrStonedOne: - - code_imp: Created a system to profile code on a line by line basis and return - detailed info about how much time was spent (in milliseconds) on each line(s). - Xhuis: - - balance: Servants can no longer teleport into the gravity generator, EVA, or telecomms. - ninjanomnom: - - bugfix: Hardsuit helmets work like geiger counters for the user. - - code_imp: Radiation should perform a little better in places. - - balance: Various radiation symptom thresholds have been tweaked. - - balance: Contamination strengths at different ranges have been tweaked. - - balance: Contaminated objects have less range for their radiation. - - balance: Hitting something with a contaminated object reduces its strength faster. - - balance: Contaminated objects decay faster. - - balance: Both radiation healing medicines have been buffed a bit. - - balance: Passive radiation loss for mobs is nerfed. - - balance: There is a soft cap for mob radiation now. - - balance: Projectiles, ammo casings, and implants are disallowed from becoming - contaminated. - - rscadd: Suit storage units can completely cleanse contamination from stored objects - - admin: The first time an object is contaminated enough to spread more contamination - admins will be warned. This is also added to stat tracking. - - rscadd: Thermite works on floors and can be ignited by sufficiently hot fires - now - - refactor: Thermite has been made into a component - - bugfix: Thermite no longer removes existing overlays on turfs -2017-10-28: - Mark9013100: -<<<<<<< HEAD - - tweak: The Medical Cloning manual has been updated. -======= - - tweak: The Medical Cloning manual has been updated. -2017-10-29: - Armhulen: - - rscadd: Frost Spiders now use Frost OIL! - Mercenaryblue: - - rscadd: Skeletons can now have their own spectral instruments - - rscadd: \[Dooting Intensifies\] - - admin: the variable "too_spooky" defines if it will spawn new instruments, by - default TRUE. - Naksu: - - bugfix: Removed meteor-related free lag - - bugfix: Cleaned up dangling mob references from alerts - Xhuis: - - bugfix: You can no longer become an enhanced clockwork golem with mutation toxin. - - balance: Normal clockwork golems now have 20% armor, down from 40%. - as334: - - spellcheck: This changelog has been updated and so read it again if you are interested - in doing assmos. - - rscadd: Atmospherics has been massively expanded including new gases. - - rscadd: These new gases include Brown Gas, Pluoxium, Stimulum, Hyper-Noblium and - Tritium. - - rscadd: Brown Gas is acidic to breath, but mildly stimulation. - - rscadd: Stimulum is more stimulating and much safer. - - rscadd: Pluoxium is a non-reactive form of oxygen that delivers more oxygen into - the bloodstream. - - rscadd: Hyper-Noblium is an extremely noble gas, and stops gases from reacting. - - rscadd: Tritium is radioactive and flammable. - - rscadd: New reactions have also been added to create these gases. - - rscadd: 'Tritium formation: Heat large amounts of oxygen with plasma. Make sure - you have a filter ready and setup!' - - rscadd: Fusion has been reintroduced. Plasma will fuse when heated to a high thermal - energy with Tritium as a catalyst. Make sure to manage the waste products. - - rscadd: 'Brown Gas formation: Heat Oxygen and Nitrogen.' - - rscadd: 'BZ fixation: Heat Tritium and Plasma.' - - rscadd: 'Stimulum formation: Heated Tritium, Plasma, BZ and Brown Gas.' - - rscadd: 'Hyper-Noblium condensation: Needs Nitrogen and Tritium at a super high - heat. Cools rapidly.' - - rscadd: Pluoxium is unable to be formed. - - rscdel: Freon has been removed. Use cold nitrogen for your SME problems now. - - rscadd: Water vapor now freezes the tile it is on when it is cooled heavily. - naltronix: - - bugfix: fixes that table that wasnt accessible in Metastation -2017-10-30: - PKPenguin321: - - tweak: You can now use beakers/cups/etc that have welding fuel in them on welders - to refuel them. - bgobandit: - - tweak: 'Due to cuts to Nanotrasen''s Occupational Safety and Health Administration - (NO-SHA) budget, station fixtures no longer undergo as much safety testing. - (Translation for rank and file staff: More objects on the station will hurt - you.)' -2017-11-02: - ACCount: - - tweak: '"Tail removal" and "tail attachment" surgeries are merged with "organ - manipulation".' - - imageadd: New sprites for reflectors. They finally look like something. - - rscadd: You can lock reflector's rotation by using a screwdriver. Use the screwdriver - again to unlock it. - - rscadd: Reflector examine now shows the current angle and rotation lock status. - - rscadd: You can now use a welder to repair damaged reflectors. - - bugfix: Multiple reflector bugs are fixed. - Improvedname: - - rscdel: Removes statues from gold slime pool - Mercenaryblue: - - imageadd: Updated Clown Box sprite to match the others. - More Robust Than You: - - admin: ONLY ADMINS CAN ACTIVATE THE ARK NOW - - tweak: The Ark's time measurements are now a bit more readable - MrStonedOne: - - tweak: Meteor events will not happen before 25 minutes, the worst versions before - 35 and 45 minutes. - - tweak: Meteor events are now player gated to 15, 20, and 25 players respectively - - balance: The more destructive versions of meteor events now have a slightly higher - chance of triggering, to offset the decrease in how often it is that they will - even qualify. - - bugfix: Fixed the changelog generator. - Naksu: - - tweak: Smartfridges and chem/condimasters now output items in a deterministic - 3x3 grid rather than in a huge pile in the middle of the tile. - SpaceManiac: - - bugfix: Admins can once again spawn nuke teams on demand. - Xhuis: - - admin: Admins can now create sound emitters (/obj/effect/sound_emitter) that can - be customized to play sounds to different people, at different volumes, and - at different locations such as by z-level. They're much more versatile for events - than the Play Sound commands! - - rscadd: You can now add grenades to plushies! You'll need to cut out the stuffing - first. - - tweak: Clockwork cult tips of the round have been updated to match the rework. - - tweak: Abscond and Reebe rifts now place servants directly at the Ark instead - of below the "base" area. - nicbn: - - tweak: Brown gas renamed to nitryl. - ninjanomnom: - - bugfix: Fixes decals not rotating correctly with the turf. - - bugfix: Fixes a runtime causing some turfs to be left behind by removed shuttles. - - code_imp: Shuttles should be roughly 40-50% smoother. - - bugfix: Fixes the cargo shuttle occasionally breaking if a mob got on at exactly - the right time. -2017-11-10: - Anonmare: - - bugfix: Adds an organ storage bag to the syndicate medborg. - AnturK: - - balance: Dying in shapeshifted form reverts you to the original one. (You're still - dead) - Floyd / Qustinnus: - - soundadd: Redtexting as a traitor now plays a depressing tune to you - Floyd / Qustinnus (And all the sounds by Kayozz11 from Yogstation): - - soundadd: Adds about 30 new ambience sounds - - refactor: added new defines for ambience lists. - Iamgoofball: - - tweak: Cooldown on the Ripley's mining drills has been halved. - - tweak: The frequency of the Ripley's ore pulse has been doubled. - Jalleo: - - tweak: Removed a variable to state which RCD's can deconstruct reinforced walls - - balance: Made combat (ERT ones) and admin RCDs able to deconstruct r walls alongside - borg ones - Kor: - - bugfix: Cult mode will once again print out names at round end. - Mark9013100: - - rscadd: Deltastation now has a Whiteship. - - tweak: Charcoal bottles have been renamed, and have been given a more informative - description. - Mercenaryblue: - - spellcheck: spellchecked the hotel staff. - - rscadd: Added frog masks. Reeeeeeeeee!! - More Robust Than You: - - bugfix: Blobbernauts and spores are no longer killed by blob victory - - bugfix: New blob overminds off the station Z level are moved to the station - - bugfix: You can now use banhammers as a weapon - - tweak: Monkeys can no longer transmit diseases through hardsuits - - tweak: Xenobio blobbernauts can no longer walk on blob tiles - Naksu: - - tweak: Added deterministic output slots to the slime processor - - bugfix: Fixed some interactions with ghosts and items - - bugfix: Nonhumans such as monkeys can now be scanned for chemicals with the health - analyzer. - Okand37 (DeltaStation Updates): - - rscadd: Tweaked Atmospherics - - bugfix: Fixed the Incinerator air injector - - rscadd: Tweaked Engineering - - rscadd: Added logs to the Chaplain's closet for gimmicks (bonfires) - - rscadd: Tweaked Security - - bugfix: Fixed medical morgue maintenance not providing radiation shielding and - exterior chemistry windoor - - rscadd: Bar now has a door from the backroom to the theatre stage - - rscadd: Tweaked Locker Room/Dormitories - ShizCalev: - - bugfix: You can now -actually- load pie cannons. - - bugfix: The captain's winter coat can now hold a flashlight. - - bugfix: The captain's and security winter coats can now hold internals tanks. - - tweak: All winter coats can now hold toys, lighters, and cigarettes. - - tweak: The captain's hardsuit can now hold pepperspray. - - rscadd: Updated the Test Map debugging verb to report more issues regarding APCs. - DELTASTATION - - bugfix: Reverted Okand37's morgue changes which broke power in the area. - - bugfix: Corrected wrong area on the Southern airlock leading into electrical maintenance. - ALL STATIONS - - bugfix: Corrected numerous duplicate APCs in areas which led to power issues. - SpaceManiac: - - bugfix: Ghosts can no longer create sparks from the hand teleporter's portals. - - bugfix: Digging on Lavaland no longer shows two progress bars. - - bugfix: The holodeck now has an "Offline" option. - - bugfix: Injury and crit overlays are now scaled properly for zoomed-out views. - - bugfix: Already-downloaded software is now hidden from the NTNet software downloader. - - bugfix: The crafting, language, and building buttons are now positioned correctly - in zoomed-out views. - - bugfix: Bluespace shelter walls no longer smooth with non-shelter walls and windows. - Swindly: - - rscadd: Organ storage bags can be used to perform limb augmentation. - - bugfix: You can now cancel a cavity implant during the implanting/removing step - by using drapes while holding the appropriate tool in your inactive hand. Cyborgs - can cancel the surgery by using drapes alone. - - bugfix: Fixed hot items and fire heating reagents to temperatures higher than - their heat source. - - bugfix: Sprays can now be heated with hot items. - - tweak: The heating of reagents by hot items, fire, and microwaves now scales linearly - with the difference between the reagent holder's temperature and the heat source's - temperature instead of constantly. - - tweak: The body temperature of a mob with reagents is affected by the temperature - of the mob's reagents. - - tweak: Reagent containers can now be heated by hot air. - Thefastfoodguy: - - bugfix: Spamming runes / battlecries / etc will no longer trigger spam prevention - WJohnston: - - bugfix: Ancient station lighting fixed on beta side (medical and atmos remains) - XDTM: - - rscadd: Ghosts now have a Toggle Health Scan verb, which allows them to health - scan mobs they click on. - Xhuis: - - rscadd: Ratvar and Nar-Sie plushes now have a unique interaction. - - balance: Clockwork marauders are now on harm intent. - - balance: The Clockwork Marauder scripture now takes five seconds longer to invoke - per marauder summoned in the last 20 seconds, capping at 30 extra seconds. - - balance: Clockwork marauders no longer gain a health bonus when war is declared. - - tweak: Moved the BoxStation deep fryers up one tile. - - rscadd: Microwaves have new sounds! - YPOQ: - - bugfix: EMPs can pulse multiple wires - as334: - - rscadd: Pluoxium can now be formed by irradiating tiles with CO2 in the air. - - rscadd: Rad collectors now steadily form Tritium at a slow pace. - - balance: Nerfs fusion by making it slower, and produce radioactivity. - - balance: Noblium formation now requires significantly more energy input. - - balance: Tanks now melt if their temperature is above 1 Million Kelvin. - deathride58: - - bugfix: Directional character icon previews now function properly. Other things - relying on getflaticon probably work with directional icons again, as well. - nicbn: - - imageadd: Canister sprites for the new gases - ninjanomnom: - - bugfix: Shuttle parallax has been fixed once more - - bugfix: You can no longer set up the auxiliary base's shuttle beacon overlapping - with the edge of the map - uraniummeltdown: - - tweak: Replica fabricatoring airlocks and windoors keeps the old name - - tweak: Narsie and Ratvar converting airlocks and windoors keeps the old name -2017-11-11: - DaxDupont: - - bugfix: Medbots can inject from one tile away again. - SpaceManiac: - - bugfix: The detective and heads of staff are no longer attacked by portable turrets. - deathride58: - - bugfix: You can no longer delete girders, lattices, or catwalks with the RPD - - bugfix: Fixes runtimes that occur when clicking girders, lattices, catwalks, or - disposal pipes with the RPD in paint mode - ninjanomnom: - - bugfix: Fixes ruin cable spawning and probably some other bugs -2017-11-12: - Cyberboss: - - bugfix: Clockwork slabs no longer refer to components -2017-11-13: - Cobby: - - rscadd: The Xray now only hits the first mob it comes into contact with instead - of being outright removed from the game. - Floyd / Qustinnus: - - soundadd: Reebe now has ambience sounds - 'Floyd / Qustinnus:': - - soundadd: Adds a few sound_loop datums to machinery. - Frozenguy5: - - bugfix: Broken cable cuffs no longer has an invisible sprite. - PKPenguin321: - - rscadd: Welders must now be screwdrivered open to reveal their fuel tank. - - rscadd: You can empty welders into open containers (like beakers or glasses) when - they're screwdrivered open. - - rscadd: You can now insert any chemical into a welder, but all most will do is - clog the fuel. Welding fuel will refuel it as usual. Plasma in welders tends - to explode. - Qbopper and JJRcop: - - tweak: The default internet sound volume was changed from 100 to 25. Stop complaining - in OOC about your ears! - SpaceManiac: - - bugfix: Posters may no longer be placed on diagonal wall corners. - WJohnston: - - rscdel: Removes stationary docking ports for syndicate infiltrator ships on all - maps. Use the docking navigator computer instead! This gives the white ship - and syndicate infiltrator more room to navigate and place custom locations that - are otherwise occupied by fixed shuttle landing zones that are rarely used. - Xhuis: - - rscadd: Deep fryers now have sound. - - tweak: Deep fryers now use cooking oil, a specialized reagent that becomes highly - damaging at high temperatures. You can get it from grinding soybeans and meat. - - tweak: Deep fryers now become more efficient with higher-level micro lasers, using - less oil and frying faster. - - tweak: Deep fryers now slowly use oil as it fries objects, instead of all at once. - - bugfix: You can now correctly refill deep fryers with syringes and pills. - nicn: - - balance: Damage from low pressure has been doubled. - ninjanomnom: - - rscadd: You can now select a nearby area to expand when using a blueprint instead - of making a new area. - - rscadd: New shuttle areas can be created using blueprints. This is currently not - useful but will be used later for shuttle construction. - - tweak: Blueprints can modify existing areas on station. - - admin: Blueprint functionality has been added to the debug tab as a verb. -2017-11-14: - ike709: - - imageadd: Added directional computer sprites. Maps haven't been changed yet. - psykzz: - - refactor: AI Airlock UI to use TGUI - - tweak: Allow AI to swap between electrified door states without having to un-electrify - first. - selea/arsserpentarium: - - rscadd: Integrated circuits have been added to Research! - - rscadd: You can use these to create devices with very complex behaviors. - - rscadd: Research the Integrated circuits printer to get started. -2017-11-15: - Fury: - - rscadd: Added new sprites for the Heirophant Relay (clock cultist telecomms equipment). - Naksu: - - bugfix: 'Removed fire-related free lag. change: fire alarms and cameras no longer - work after being ripped off a wall by a singulo' - - tweak: 'Minor speedups to movement processing. change: Fat mobs no longer gain - temperature by running.' - Robustin: - - refactor: Cult population scaling no longer operates on arbitrary breakpoints. - Each additional player between the between the breakpoints will add to the "chance" - that an additional cultist will spawn. - - tweak: On average you will see less roundstart cultists in lowpop and more roundstart - cultists in highpop. - - tweak: Damage examinations now include a "moderate" classification. Before minor - was <30 and severe was anything 30 or above. Now minor is <25, moderate is 25 - to <50, and severe is 50+. - - tweak: The tesla will now move toward power beacons at a significantly slower - rate. - SpaceManiac: - - bugfix: The post-round station integrity report is now functional again. - ninjanomnom: - - bugfix: Gas overlays no longer block clicks, on 512 -2017-11-22: - ACCount: - - refactor: Old integrated circuit save file format is ditched in favor of JSON. - Readability, both of save files and save code, is improved greatly. - - tweak: Integrated circuit panels now open with screwdriver instead of crowbar, - to match every single other thing on this server. - - tweak: Integrated circuit printer now stores up to 25 metal sheets. - - bugfix: Fixed integrated circuit rechargers not recharging guns properly and not - updating icons. - - bugfix: Fixed multiple bugs in integrated circuits UIs, improved overall usability. - Anonmare: - - balance: Laserpoitners now incapcitate catpeople - AutomaticFrenzy: - - bugfix: cell chargers weren't animating properly - - bugfix: disable_warning wasn't getting checked and the chat was being spammed - Code by Pyko, Ported by Frozenguy5: - - rscadd: Rat Kebabs and Double Rat Kebabs have been added! - Cyberboss: - - server: Server tools API changed to version 3.2.0.1 - - admin: '"ahelp" chat command can now accept a ticket number as opposed to a ckey' - DaxDupont: - - tweak: CentCom has issued a firmware updated for the operating computers. It is - no longer needed to manually refresh the procedure and patient status. - - bugfix: Proximity sensors no longer beep when unarmed. - - bugfix: Plant trays will now properly process fluorine and adjust toxins and water - contents. - Francinum: - - tweak: The shuttle build plate is now better sized for all stations. - Iamgoofball: - - spellcheck: fixes grammar on logic gate descriptions - - spellcheck: fixes grammar on list circuits - - bugfix: fixes grammar on trig circuits - - spellcheck: fixed grammar on output circuits - JJRcop: - - bugfix: Fixes changeling eggs not putting the changeling in control if the brainslug - is destroyed before hatching. - - tweak: The silicon airlock menu looks a little more like it used to. - Kor: - - bugfix: Blobbernauts will no longer spawn if a player is not selected to control - it, preventing AI blobbernauts from running off the blob and to their deaths. - - rscdel: Following complaints that cargo has been selling all the materials they - receive rather than distributing them, mineral exporting has been removed. - MMMiracles: - - balance: Power regen on the regular tesla relay has been reduced to 50, from 150. - Naksu: - - bugfix: Sped up saycode to remove free lag from highpop - - bugfix: Using a chameleon projector will now dismount you from any vehicles you - are riding, in order to prevent wacky space glitches and being sent to a realm - outside space and time. - Shadowlight213: - - code_imp: Added round id to the status world topic - ShizCalev: - - bugfix: Chameleon goggles will no longer go invisible when selecting Optical Tray - scanners. - - rscadd: Engineering and Atmos scanner goggles will now have correctly colored - inhand sprites. - - tweak: The computers on all maps have have been updated for the latest directional - sprite changes. Please report any computers facing in strange directions to - your nearest mapper. - - bugfix: MetaStation - The consoles in medbay have had their directions corrected. - - imageadd: The Nanotrasen logo on modular computers has been fixed, rejoice! - - bugfix: PubbyStation - Unpowered air injectors in various locations have been - fixed. - - bugfix: MetaStation - Air injector leading out of the incinerator has been fixed - - bugfix: MetaStation - Corrected a couple maintenance airlocks being powered by - the wrong areas. - - bugfix: Computers will no longer rotate incorrectly when being deconstructed. - - bugfix: You can now rotate computer frames during construction. - - bugfix: Chairs, PA parts, infrared emitters, and doppler arrays will now rotate - clockwise. - - bugfix: Throwing drinking glasses and cartons will now consistently cause them - to break! - - bugfix: Humans missing legs or are legcuffed will no longer move slower in areas - without gravity. - - bugfix: The structures external to stations are now properly lit. Make sure you - bring a flashlight. - - bugfix: Computers will no longer delete themselves when being built, whoops! - - bugfix: Space cats will no longer have a smashed helmet when they lay down. - Skylar Lineman, your local R&D moonlighter: - - rscadd: Research has been completely overhauled into the techweb system! No more - levels, the station now unlocks research "nodes" with research points passively - generated when there is atleast one research server properly cooled, powered, - and online. - - rscadd: R&D lab has been replaced by the departmental lathe system on the three - major maps. Each department gets a lathe and possibly a circuit imprinter that - only have designs assigned by that department. - - rscadd: The ore redemption machine has been moved into cargo bay on maps with - decentralized research to prevent the hallways from becoming a free for all. - Honk! - - balance: You shouldn't expect balance as this is the initial merge. Please put - all feedback and concerns on the forum so we can revise the system over the - days, weeks, and months, to make this enjoyable for everyone. Heavily wanted - are ideas of how to add more ways of generating points. - - balance: You can get techweb points by setting off bombs with an active science - doppler array listening. The bombs have to have a theoretical radius far above - maxcap to make a difference. You can only go up, not down, in radius, so you - can't get 6 times the points with 6 TTVs. The algorithm is exponentially/logarithmically - scaled to prevent "world destroyer" bombs from instantly finishing research. - SpaceManiac: - - bugfix: HUDs from mechs and helmets no longer conflict with HUD glasses and no - longer inappropriately remove implanted HUDs. - - code_imp: Chasm code has been refactored to be more sane. - - bugfix: Building lattices over chasms no longer sometimes deletes the chasm. - - code_imp: Ladders have been refactored and should be far less buggy. - - bugfix: Jacob's ladder actually works again. - - bugfix: Pizza box stacking works again. - - bugfix: Fix some permanent-on and permanent-off bugs caused by the HUD stacking - change. - WJohnston: - - imageadd: A bunch of new turf decals for mappers to play with, coming in yellow, - white, and red varieties! - - bugfix: Green banded default airlocks now have extended click area like all other - airlocks. - Y0SH1 M4S73R: - - spellcheck: The R&D Server's name is now improper. - - spellcheck: The R&D Server now has an explanation of what it does. - arsserpentarium: - - bugfix: now lists should work properly - duncathan: - - rscadd: The RPD has a shiny new UI! - - rscadd: The RPD can now paint pipes as it lays them, for quicker piping projects. - - rscadd: Atmos scrubbers (vent and portable) can now filter any and all gases. - ike709: - - imageadd: Added new vent and scrubber sprites by Partheo. - - bugfix: Fixed some computers facing the wrong direction. - jammer312: - - bugfix: fixed conjuration spells forgetting about conjured items - kevinz000: - - rscadd: purple bartender suit and apron added to clothesmates! - - rscadd: long hair 3 added, check it out. both have sprites from okand! - nicbn: - - soundadd: Now rolling beds and office chairs have a sound! - oranges: - - rscdel: Removed the shocker circuit - psykzz: - - imageadd: Grilles have new damaged and default sprites - - rscadd: Added TGUI for Turbine computer - tserpas1289: - - tweak: Any suit that could hold emergency oxygen tanks can now also hold plasma - man internals - - tweak: Hydroponics winter coats now can hold emergency oxygen tanks just like - the other winter coats. - - bugfix: Plasma men jumpsuits can now hold accessories like pocket protectors and - medals. - zennerx: - - bugfix: fixed a bug that made you try and scream while unconscious due to a fire - - tweak: Skateboard crashes now give slight brain damage! - - rscadd: Using a helmet prevents brain damage from the skateboard! -2017-11-23: - GupGup: - - bugfix: Fixes hostile mobs attacking surrounding tiles when trying to attack someone - MrStonedOne and Jordie: - - server: As a late note, serverops be advise that mysql is no longer supported. - existing mysql databases will need to be converted to mariadb - Robustin: - - tweak: RND consoles will no longer display options for machines or disks that - are not connected/inserted. - ShizCalev: - - bugfix: Aliens in soft-crit will now use the correct sprite. - XDTM: - - rscadd: 'Added two new symptoms: one allows viruses to still work while dead, - and allows infection of undead species, and one allows infection of inorganic - species (such as plasmapeople or golems).' -2017-11-24: - ACCount: - - rscdel: Removed "console screen" stock part. Just use glass sheets instead. - More Robust Than You: - - tweak: Spessmen are now smart enough to realize you don't need to turn around - to pull cigarette butts - SpaceManiac: - - bugfix: Fix water misters being inappropriately glued to hands in some cases. - - bugfix: Some misplaced decals in the Hotel brig have been corrected. - ninjanomnom: - - bugfix: Custom shuttle dockers can no longer place docking regions inside other - custom docker regions. -2017-11-25: - CosmicScientist: - - bugfix: bolas are back in tablecrafting! - Dorsisdwarf: - - tweak: Catpeople are now distracted instead of debilitated - - rscadd: Normal cats now go for laser pointers - SpaceManiac: - - bugfix: You can no longer buckle people to roller beds from inside of a locker. - YPOQ: - - bugfix: AIs and cyborgs can interact with unscrewed airlocks and APCs. - ninjanomnom: - - bugfix: Fixes thermite burning hotter than the boiling point of stone - zennerx: - - bugfix: Zombies don't reanimate with no head! -2017-11-27: - ACCount: - - rscadd: 'New integrated circuit components: list constructors/deconstructors. - Useful for building lists and taking them apart.' - - bugfix: Fixed multiple bugs in integrated circuits UIs, improved overall usability. - More Robust Than You: - - bugfix: Fixed cult leaders being de-culted upon election if they had a mindshield - implant - Naksu: - - bugfix: Hopefully fixed mesons granting the ability to hear people through walls. - Okand37: - - rscadd: Re-organized Delta's departmental protolathes for all departments. - - rscadd: Re-organized Delta's ORM placement by connecting it to the mining office, - which now has a desk for over handing materials to the outside. - - rscadd: Added a second Nanomed to Deltastation's medical bay. - - rscadd: Nanotrasen has decided to add proper caution signs to most docking ports - on Deltastation, warning individuals to be cautious around these areas. - - rscadd: Two health sensors are now placed in Deltastation's robotics area for - medibots. - - bugfix: Atmospheric Technicians at Deltastation can now open up their gas storage - in the supermatter power area as intended. - WJohnston: - - bugfix: Fixed a case where items would sometimes be placed underneath racks. - XDTM: - - balance: Viruses' healing symptoms have been reworked! - - rscdel: All existing healing symptoms have been removed in favour of new ones. - - rscdel: Weight Even and Weight Gain have been removed, so hunger can be used for - balancing in symptoms. - - rscadd: Starlight Condensation heals toxin damage if you're in space using starlight - as a catalyst. Being up to two tiles away also works, as long as you can still - see it, but slower. - - rscadd: Toxolysis (level 7) rapidly cleanses all chemicals from the body, with - no exception. - - rscadd: 'Cellular Molding heals brute damage depending on your body temperature: - the higher the temperature, the faster the healing. Requires above-average temperature - to activate, and the speed heavily increases while on fire.' - - rscadd: Regenerative Coma (level 8) causes the virus to send you into a deep coma - when you are heavily damaged (>70 brute+burn damage). While you are unconscious, - either from the virus or from other sources, the virus will heal both brute - and burn damage fairly quickly. Sleeping also works, but at reduced speed. - - rscadd: Tissue Hydration heals burn damage if you are wet (negative fire stacks) - or if you have water in your bloodstream. - - rscadd: Plasma Fixation (level 8) stabilizes temperature and heals burns while - plasma is in your body or while standing in a plasma cloud. Does not protect - from the poisoning effects of plasma. - - rscadd: Radioactive Resonance gives a mild constant brute and burn healing while - irradiated. The healing becomes more intense if you reach higher levels of radiation, - but is still less than the alternatives. - - rscadd: Metabolic Boost (level 7) doubles the rate at which you process chemicals, - good and bad, but also increases hunger tenfold. - kevinz000: - - bugfix: Cryo cells can now be properly rotated with a wrench. - ninjanomnom: - - rscadd: 'You can now make a new tasty traditional treat: butterdogs. Watch out, - they''re slippery.' -2017-11-28: - ACCount: - - rscdel: '"Machine prototype" is removed from the game.' - - rscdel: Mass-spectrometers are removed. Would anyone notice if not for this changelog - entry? - Cruix: - - rscadd: AI and observer diagnostic huds will now show the astar path of all bots, - and Pai bots will be given a visible path to follow when called by the AI. - JJRcop: - - admin: Fixed the Make space ninja verb. - Naksu: - - code_imp: rejiggered botcode a little bit - SpaceManiac: - - spellcheck: Admin-added "download research" objectives are now consistent with - automatic ones. - improvedname: - - tweak: toolbelts can now carry geiger counters - uraniummeltdown: - - rscadd: You can make many different types of office and comfy chairs with metal - - tweak: Stack menus use /datum/browser -2017-11-29: - MrStonedOne: - - tweak: The sloth no longer suspiciously moves fast when gliding between tiles. - - balance: The sloth's movespeed when inhabited by a player has been lowered from - once every 1/5 of a second to once every second. - SpaceManiac: - - spellcheck: The techweb node for mech LMGs no longer claims to be for mech tasers. -2017-11-30: - ninjanomnom: - - tweak: Reduced the max volume of sm by 1/5th and made the upper bounds only play - mid delamination. - psykzz: - - bugfix: Fixing the broken turbine computer -2017-12-02: - BeeSting12: - - spellcheck: Occupand ---> Occupant on opened cryogenic pods. - - spellcheck: Cyrogenic ---> Cryogenic on opened cryogenic pods. - CosmicScientist: - - rscadd: You can make plushies kiss one another! - Frozenguy5: - - tweak: The Particle Accelerator's wires can no longer be EMP'd - Naksu: - - code_imp: Cleans up some loc assignments - Robustin: - - tweak: Damage examinations now include a "moderate" classification. Before minor - was <30 and severe was anything 30 or above. Now minor is <25, moderate is 25 - to <50, and severe is 50+. - - balance: Clockwork magicks will now prevent Bags of Holding from being combined - on Reebe. - - bugfix: Flashes will now burn out AFTER flashing when they fail instead of being - a ticking time bomb that waits to screw you over on your next attempt. - SpaceManiac: - - tweak: The R&D Console has been given a much prettier interface. - - tweak: Research scanner goggles now show materials and technology prospects in - a nicer way. - uraniummeltdown: - - imageadd: Construct shells have a new animated sprite -2017-12-03: - ExcessiveUseOfCobblestone: - - bugfix: You can now lay (buckle!) yourself to a bed to avoid being burnt to a - crisp during "the floor is lava" event. - Robustin: - - tweak: Igniting plasma statues no longer ignores ignition temperature and only - creates as much plasma as was used in its creation. - Xhuis: - - rscadd: Light fixtures now turn an ominous, dim red color when they lose power, - and draw from an internal power cell to maintain it until either the cell dies - (usually after 10 minutes) or power is restored. - - rscadd: You can override emergency light functionality from an APC. You can also - click on individual lights as a cyborg or AI to override them individually. - Traitor AIs also have a new ability that disables emergency lights across the - entire station. - zennerx: - - spellcheck: fixed some typos in the weapon firing mechanism description -2017-12-04: - AnturK: - - rscadd: You can now record and replay holopad messages using holodisks. - - rscadd: Holodisks are printable in autolathes. - Xhuis: - - bugfix: You now need fuel in your welder to repair mechs. -2017-12-05: - Cyberboss: - - sounddel: Reduced the volume of showers - Dax Dupont: - - rscadd: Nanotrasen is happy to announce the pinnacle in plasma research! The Disco - Inferno shuttle design is the result of decades of plasma research. Burn, baby, - burn! - MrPerson & ninjanomnom: - - refactor: Completely changed how keyboard input is read. - - rscadd: Holding two directions at the same time will now move you diagonally. - This works with the arrow keys, wasd, and the numpad. - - tweak: Moving diagonally takes twice as long as moving a cardinal direction. - - bugfix: You can use control to turn using wasd and the numpad instead of just - the arrow keys. - - rscdel: 'Some old non-hotkey mode behaviors, especially in relation to chatbox - interaction, can''t be kept with the new system. Of key note: You can''t type - while walking. This is due to limitations of byond and the work necessary to - overcome it is better done as another overhaul allowing custom controls.' - Robustin: - - rscdel: Reverted changes in 3d sound system that tripled the distance that sound - would carry. - SpaceManiac: - - spellcheck: Energy values are now measured in joules. What was previously 1 unit - is now 1 kJ. - - bugfix: Syndicate uplink implants now work again. - Xhuis: - - tweak: Stethoscopes now inform the user if the target can be defibrillated; the - user will hear a "faint, fluttery pulse." - coiax: - - rscadd: Quiet areas of libraries on station have now been equipped with a vending - machine containing suitable recreational activities. -2017-12-06: - Dax Dupont & Alek2ander: - - tweak: Binary chat messages been made more visible. - Revenant Defile ability: - - bugfix: Revenant's Defile now removes salt piles - XDTM: - - rscadd: 'Brain damage has been completely reworked! remove: Brain damage now no - longer simply makes you dumb. Although most of its effects have been shifted - into a brain trauma.' - - rscadd: Every time you take brain damage, there's a chance you'll suffer a brain - trauma. There are many variations of brain traumas, split in mild, severe, and - special. - - rscadd: Mild brain traumas are the easiest to get, can be lightly to moderately - annoying, and can be cured with mannitol and time. - - rscadd: Severe brain traumas are much rarer and require extensive brain damage - before you have a chance to get them; they are usually very debilitating. Unlike - mild traumas, they require surgery to cure. A new surgery procedure has been - added for this, the aptly named Brain Surgery. It can also heal minor traumas. - - rscadd: 'Special brain traumas are rarely gained in place of Severe traumas: they - are either complex or beneficial. However, they are also even easier to cure - than mild traumas, which means that keeping these will usually mean keeping - a mild trauma along with it.' - - rscadd: Mobs can only naturally have one mild trauma and one severe or special - trauma. - - balance: Brain damage will now kill and ruin the brain if it goes above 200. If - it somehow goes above 400, the brain will melt and be destroyed completely. - - balance: Many brain-damaging effects have been given a damage cap, making them - non-lethal. - - rscdel: The Unintelligible mutation has been removed and made into a brain trauma. - - rscdel: Brain damage no longer makes using machines a living hell. - - rscadd: Abductors give minor traumas to people they experiment on. - coiax: - - rscadd: The drone dispenser on Metastation has been moved to the maintenance by - Robotics. -2017-12-07: - ShizCalev: - - bugfix: Games vending machines can now properly be rebuilt. - - bugfix: Games vending machines can now be refilled via supply crates. - - rscadd: Games Supply Crates have been added to the cargo console. - SpaceManiac: - - bugfix: Radio frequency 148.9 is once again serviced by the telecomms system. - Xhuis: - - rscadd: Added the Eminence role to clockcult! Players can elect themselves or - ghosts as the Eminence from the eminence spire structure on Reebe. - - rscadd: The Eminence is incorporeal and invisible, and directs the entire cult. - Anything they say is heard over the Hierophant network, and they can issue commands - by middle-clicking themselves or different turfs. - - rscadd: The Eminence also has a single-use mass recall that warps all servants - to the Ark chamber. - - rscadd: Added traps, triggers, and brass filaments to link them. They can all - be constructed from brass sheets, and do different things and trigger in different - ways. Current traps include the brass skewer and steam vent, and triggers include - the pressure sensor, lever, and repeater. - - rscadd: The Eminence can activate trap triggers by clicking on them! - - rscadd: Servants can deconstruct traps instantly with a wrench. - - rscdel: Mending Mantra has been removed. - - tweak: Clockwork scriptures have been recolored and sorted based on their functions; - yellow scriptures are for construction, red for offense, blue for defense, and - purple for niche. - - balance: Servants now spawn with a PDA and black shoes to make disguise more feasible. - - balance: The Eminence can superheat up to 20 clockwork walls at a time. Superheated - walls are immune to hulk and mech punches, but can still be broken conventionally. - - balance: Clockwork walls are slightly faster to build before the Ark activates, - taking an extra second less. - - bugfix: Poly no longer continually undergoes binary fission when Ratvar is in - range. - - code_imp: The global records alert for servants will no longer display info that - doesn't affect them since the rework. - coiax: - - rscadd: The drone dispenser on Box Station has been moved from the Testing Lab - to the Morgue/Robotics maintenance tunnel. - deathride58: - - config: The default view range can now be defined in the config. The default is - 15x15, which is simplified to 7 by BYOND. For reference, Goonstation's widescreen - range is 21x15. Do note that changing this value will affect the title screen. - The title screen images and the title screen area on the Centcom z-level will - have to be updated if the default view range is changed. -2017-12-08: - Dax Dupont: - - bugfix: Fixed observer chat flavor of silicon chat. - - bugfix: Grilles now no longer revert to a pre-broken icon state when you hit them - after they broke. - Dorsisdwarf: - - tweak: Minor fixes to some techweb nodes - - balance: Made flight suits, combat implants, and combat modules require more nodes - Fox McCloud: - - tweak: Slime blueprints can now make an area compatible with Xenobio consoles, - regardless of the name of the new area - MrDoomBringer: - - imageadd: All stations have been outfitted with brand new Smoke Machines! They - have nicer sprites now! - Shadowlight213: - - rscadd: You now can get a medal for wasting hours talking to the secret debug - tile. - - bugfix: Fixed runtime for the tile when poly's speech file doesn't exist. - Xhuis: - - rscadd: You can now make pet carriers from the autolathe, to carry around chef - meat and other small animals without having to drag them. The HoP, captain, - and CMO also start with carriers in their lockers for their pets. - YPOQ: - - bugfix: Fixed the camera failure, race swap, cursed items, and imposter wizard - random events - - tweak: The cursed items event no longer nullspaces items - jammer312: - - rscadd: Action buttons now remember positions where you locked. - - tweak: Now locking action buttons prevents them from being reset. -2017-12-10: - SpaceManiac: - - bugfix: External airlocks of the mining base and gulag are now cycle-linked. - - tweak: The pAI software interface is now accessible via an action button. - Swindly: - - rscadd: You can kill yourself with a few more items. - XDTM: - - tweak: Instead of activating randomly on speech, Godwoken Syndrome randomly grants - inspiration, causing the next message to be a Voice of God. - Xhuis: - - tweak: Flickering lights will now actually flicker and not go between emergency - lights and normal lighting. - - bugfix: Emergency lights no longer stay on forever in some cases. - kevinz000: - - rscadd: Nanotrasen would like to remind crewmembers and especially medical personnel - to stand clear of cadeavers before applying a defibrillator shock. (You get - shocked if you're pulling/grabbing someone being defibbed.) - - tweak: defib shock/charge sounds upped from 50% to 75%. -2017-12-11: - Anonmare: - - bugfix: Booze-o-mats have beer - Cruix: - - tweak: The white ship navigation computer now takes 10 seconds to designate a - landing spot, and users can no longer see the syndicate shuttle or its custom - landing location. If the white ship landing location would intersect the syndicate - shuttle or its landing location, it will fail after the 10 seconds have elapsed. - Frozenguy5: - - balance: Some hardsuits have had their melee, fire and rad armor ratings tweaked. - Improvedname: - - tweak: cats now drop their ears and tail when butchered. - Robustin: - - bugfix: Modes not in rotation have had their "false report" weights for the Command - Report standardized - SpaceManiac: - - bugfix: The MULEbots that the station starts with now show their ID numbers. - - bugfix: The dependency by Advanced Cybernetic Implants and Experimental Flight - Equipment on Integrated HUDs has been restored. - kevinz000: - - bugfix: flightsuits should no longer disappear when you take them off involuntarily - - bugfix: beam rifles actually fire striaght now - - bugfix: click catchers now actually work - - bugfix: you no longer see space in areas you normally can't see, instead of black. - in reality you can still see space but it's faint enough that you can't tell - so I'll say I fixed it. - uraniummeltdown: - - rscadd: Added MANY new types of airlock assembly that can be built with metal. - Use metal in hand to see the new airlock assembly recipes. - - rscadd: Added new airlock types to the RCD and airlock painter - - rscadd: Vault door assemblies can be built with 8 plasteel, high security assemblies - with 6 plasteel - - rscadd: Glass mineral airlocks are finally constructible. Use glass and mineral - sheets on an airlock assembly in any order to make them. - - tweak: Glass and mineral sheets are now able to be welded out of door assemblies - rather than having to deconstruct the whole thing - - rscdel: Airlock painter no longer works on airlock assemblies (still works on - airlocks) - - bugfix: Titanium airlocks no longer have any missing overlays -2017-12-12: - Mark9013100: - - rscadd: Medical Wardrobes now contain an additional standard and EMT labcoat. - Robustin: - - rscadd: The blood cult revive rune will now replace the souls of braindead or - inactive cultists/constructs when properly invoked. These "revivals" will not - count toward the revive limit. - - rscadd: The clock cult healing rune will now replace the souls of braindead or - inactive cultists/constructs when left atop the rune. These "revivals" will - not drain the rune's energy. - Swindly: - - bugfix: Swarmers can no longer deconstruct objects with living things in them. - kevinz000: - - bugfix: You can now print telecomms equipment again. -2017-12-13: - Naksu: - - bugfix: glass shards and bananium floors no longer make a sound when "walked" - over by a camera or a ghost - SpaceManiac: - - bugfix: Nonstandard power cells found in MULEbots, cyborgs, and elsewhere now - have the correct description. - deathride58: - - bugfix: Genetics will no longer have a random block completely disappear each - round -2017-12-15: - AverageJoe82: - - rscadd: drones now have night vision - - rscdel: drones no longer have lights - Cruix: - - bugfix: Shuttles now place hyperspace ripples where they are about to land again. - Cyberboss: - - config: Added "$include" directives to config files. These are recursive. Only - config.txt will be default loaded if they are specified inside it - - config: Added multi string list entry CROSS_SERVER. e.g. CROSS_SERVER Server+Name - byond://server.net:1337 - - config: CROSS_SERVER_ADDRESS removed - Epoc: - - bugfix: Adds Cybernetic Lungs to the Cyber Organs research node - JStheguy: - - rscadd: Added 10 new assembly designs to the integrated circuit printer, the difference - from current designs is purely aesthetics. - - imageadd: Added the icons for said new assembly designs to electronic_setups.dmi, - changed the current electronic mechanism and electronic machine sprites. - MrStonedOne: - - server: Added new admin flag, AUTOLOGIN, to control if admins start with admin - powers. this defaults to on, and can be removed with -AUTOLOGIN - - admin: Admins with +PERMISSION may now deadmin or readmin other admins via the - permission panel. - Naksu: - - code_imp: Preliminary work on tracking cliented living mobs across Z-levels to - facilitate mob AI changes later - - code_imp: Tidied up some loc assignments - - code_imp: fixes the remaining loc assignments - ShizCalev: - - soundadd: Revamped gun dry-firing sounds. - - tweak: Everyone around you will now hear when your gun goes click. You don't want - to hear click when you want to hear bang! - SpaceManiac: - - code_imp: Remote signaler and other non-telecomms radio code has been cleaned - up. - Xhuis: - - rscadd: Grinding runed metal and brass now produces iron/blood and iron/teslium, - respectively. - - balance: As part of some code-side improvements, the amount of reagents you get - from grinding some objects might be slightly different. - - bugfix: Some grinding recipes that didn't work, like dead mice and glowsticks, - now do. - - bugfix: All-In-One grinders now correctly grind up everything, instead of one - thing at a time. - nicbn: - - imageadd: Closet sprites changed. + !!python/unicode 'AnonymousNow': + - !!python/unicode 'rscadd': !!python/unicode 'Added Medical HUD Sunglasses. Not + currently available on-station, unless you can convince Centcom to send you + a pair.' + !!python/unicode 'AnturK': + - !!python/unicode 'rscadd': !!python/unicode 'Traitors now have access to radio + jammers for 10 TC' + !!python/unicode 'Arianya': + - !!python/unicode 'tweak': !!python/unicode 'The Labour Camp rivet wall has been + removed!' + - !!python/unicode 'spellcheck': !!python/unicode 'Fixed some typos in Prison Ofitser''s + description.' + !!python/unicode 'Ausops': + - !!python/unicode 'imageadd': !!python/unicode 'New sprites for water, fuel and + hydroponics tanks.' + !!python/unicode 'BASILMAN YOUR MAIN MAN': + - !!python/unicode 'rscadd': !!python/unicode 'The BM Speedwagon has been improved + both in terms of aesthetics and performance!' + !!python/unicode 'Basilman': + - !!python/unicode 'rscadd': !!python/unicode 'some toolboxes, very rarely, have + more than one latch' + !!python/unicode 'BeeSting12': + - !!python/unicode 'bugfix': !!python/unicode 'Moved Metastation''s deep fryer so + that the chef can walk all the way around the table.' + !!python/unicode 'Cheridan': + - !!python/unicode 'tweak': !!python/unicode 'The slime created by a pyroclastic + anomaly detonating is now adult and player-controlled! Reminder that if you + see an anomaly alert, you should grab an analyzer and head to the announced + location to scan it, and then signal the given frequency on a signaller!' + !!python/unicode 'Cobby': + - !!python/unicode 'experiment': !!python/unicode 'Flashes have been rebalanced + to be more powerful' + !!python/unicode 'Cyberboss': + - !!python/unicode 'rscadd': !!python/unicode 'Test merged PRs are now more detailed' + !!python/unicode 'Cyberboss, Bgobandit, and Yogstation': + - !!python/unicode 'rscadd': !!python/unicode 'The HoP can now prioritze roles for + late-joiners' + !!python/unicode 'Dannno': + - !!python/unicode 'imageadd': !!python/unicode 'Robust Softdrinks LLC. has sent + out new vendies to the stendy.' + !!python/unicode 'Every coder, player, and admin in Space Station 13': + - !!python/unicode 'rscadd': !!python/unicode 'Adds the Tomb Of The Unknown Employee + to Central Command,' + - !!python/unicode 'rscadd': !!python/unicode 'Rest in peace, those who died after + contributing to Space Station 13.' + !!python/unicode 'ExcessiveUseOfCobblestone': + - !!python/unicode 'experiment': !!python/unicode 'All core traits [Hydroponics] + scale with the parts in the gene machine. Time to beg Duke''s Guide Read.... + I mean RND!' + - !!python/unicode 'tweak': !!python/unicode 'Data disks with genes on them will + have just the name of the gene instead of the prefix "plant data disk".' + - !!python/unicode 'tweak': !!python/unicode 'If you were unaware, you can rename + these disks with a pen. Now, you can also change the description if you felt + inclined to.' + !!python/unicode 'Fox McCloud': + - !!python/unicode 'rscadd': !!python/unicode 'Modular receiver removed from the + protolathe to autolathe' + - !!python/unicode 'tweak': !!python/unicode 'Modular receiver cost is now 15,000 + metal' + !!python/unicode 'Francinum': + - !!python/unicode 'bugfix': !!python/unicode 'Holopads now require power.' + !!python/unicode 'Fun Police': + - !!python/unicode 'tweak': !!python/unicode 'Reject Adminhelp and IC Issue buttons + have a cooldown.' + !!python/unicode 'Gun Hog': + - !!python/unicode 'rscadd': !!python/unicode 'The Aux Base console now controls + turrets made by the construction console.' + - !!python/unicode 'rscadd': !!python/unicode 'The Aux Base may now be dropped at + a random location if miners fail to use the landing remote.' + - !!python/unicode 'rscadd': !!python/unicode 'The mining shuttle may now dock at + the Aux Base''s spot once the base is dropped.' + - !!python/unicode 'tweak': !!python/unicode 'Removed access levels on the mining + shuttle so it can be used at the public dock.' + - !!python/unicode 'tweak': !!python/unicode 'The Aux Base''s turrets now fire through + glass. Reminder that the turrets need to be installed outside the base for full + damage.' + - !!python/unicode 'rscadd': !!python/unicode 'Added a base construction console + to Delta Station.' + !!python/unicode 'Gun Hog and Shadowlight213': + - !!python/unicode 'rscadd': !!python/unicode 'The AI may now deploy to cyborgs + prepared as AI shells. The module to do this may be research in the exosuit + fabricator. Simply slot the module into a completed cyborg frame as with an + MMI, or into a playerless (with no ckey) cyborg.' + - !!python/unicode 'rscadd': !!python/unicode 'AI shells and AIs controlling a shell + can be determined through the Diagnostic HUD.' + - !!python/unicode 'rscadd': !!python/unicode 'AIs can deploy to a shell using the + new action buttons or by simply clicking on it.' + - !!python/unicode 'experiment': !!python/unicode 'An AI shell will always have + the laws of its controlling AI.' + !!python/unicode 'Hyena': + - !!python/unicode 'tweak': !!python/unicode 'Detective revolver/ammo now starts + in their shoulder holster' + !!python/unicode 'Iamgoofball': + - !!python/unicode 'bugfix': !!python/unicode 'Freon no longer bypasses atmos hardsuits.' + !!python/unicode 'Incoming5643': + - !!python/unicode 'imageadd': !!python/unicode 'Server Owners: There is a new system + for title screens accessible from config/title_screen folder.' + - !!python/unicode 'rscadd': !!python/unicode 'This system allows for multiple rotating + title screens as well as map specific title screens.' + - !!python/unicode 'rscadd': !!python/unicode 'It also allows for hosting title + screens in formats other than DMI.' + - !!python/unicode 'rscadd': !!python/unicode 'See the readme.txt in config/title_screen + for full details. remove: The previous method of title screen selection, the + define TITLESCREEN, has been depreciated by this change.' + !!python/unicode 'JStheguy': + - !!python/unicode 'imageadd': !!python/unicode 'Changed Desert Eagle sprites, changed + .50 AE magazine sprites, added Desert Eagle magazine overlay to icons/obj/guns/projectile.dmi.' + - !!python/unicode 'tweak': !!python/unicode 'The empty Desert Eagle sprite now + only displays on an empty chamber. The existence or lack thereof of the magazine + is rendered using an overlay instead.' + !!python/unicode 'Joan': + - !!python/unicode 'rscdel': !!python/unicode 'His Grace no longer globally announces + when He is awakened or falls to sleep.' + - !!python/unicode 'rscdel': !!python/unicode 'His Grace is not a toolbox, even + if He looks like one.' + - !!python/unicode 'experiment': !!python/unicode 'His Grace no longer requires + organs to awaken.' + - !!python/unicode 'tweak': !!python/unicode 'His Grace now gains 4 force for each + victim consumed, always provides stun immunity, and will, generally, take longer + to consume His owner.' + - !!python/unicode 'experiment': !!python/unicode 'His Grace must be destroyed to + free the bodies within Him.' + - !!python/unicode 'experiment': !!python/unicode 'Dropping His Grace while He is + awake will cause you to suffer His Wrath until you hold Him again.' + - !!python/unicode 'rscadd': !!python/unicode 'His Grace becomes highly aggressive + after consuming His owner, and will hunt His own prey.' + - !!python/unicode 'experiment': !!python/unicode 'The Ark of the Clockwork Justicar + now only costs 3 of each component to summon, but must consume an additional + 7 of each component before it will activate and start counting down.' + - !!python/unicode 'rscadd': !!python/unicode 'The presence of the Ark will be immediately + announced, though the location will still only be announced after it has been + active and counting down for 2 minutes.' + - !!python/unicode 'tweak': !!python/unicode 'The Ark also requires an additional + invoker to invoke.' + !!python/unicode 'Jordie0608': + - !!python/unicode 'tweak': !!python/unicode 'The Banning Panel now organises search + results into pages of 15 each.' + !!python/unicode 'Kevinz000': + - !!python/unicode 'rscadd': !!python/unicode 'High-powered floodlights may be constructed + with 5 sheets of metal, a wrench, a screwdriver, 5 cable coils, and a light + tube. They require a powernet connection via direct wire node.' + !!python/unicode 'Kor': + - !!python/unicode 'bugfix': !!python/unicode 'You will now retain your facing when + getting pushed by another mob.' + !!python/unicode 'Kor, Jordie0608 and Tokiko1': + - !!python/unicode 'rscadd': !!python/unicode 'Singularity containment has been + replaced on box, meta, and delta with a supermatter room. The supermatter gives + ample warning when melting down, so hopefully we''ll see fewer 15 minute rounds + ended by a loose singularity.' + - !!python/unicode 'rscadd': !!python/unicode 'Supermatter crystals now collapse + into singularities when they fail, rather than explode.' + !!python/unicode 'LanCartwright': + - !!python/unicode 'rscadd': !!python/unicode 'Adds scaling damage to buckshot.' + !!python/unicode 'Lobachevskiy': + - !!python/unicode 'bugfix': !!python/unicode 'Fixed glass shards affecting buckled + and flying mobs' + !!python/unicode 'Lombardo2': + - !!python/unicode 'rscadd': !!python/unicode 'The tentacle changeling mutation + now changes the arm appearance when activated.' + !!python/unicode 'Lordpidey': + - !!python/unicode 'bugfix': !!python/unicode 'Devils can no longer break into areas + with sheer force of disco funk' + - !!python/unicode 'rscadd': !!python/unicode 'The pitchfork of an ascended devil + can now break down walls.' + - !!python/unicode 'rscadd': !!python/unicode 'Hell has decided to at least clothe + it''s devils when sending them a brand new body.' + - !!python/unicode 'rscadd': !!python/unicode 'Pitchforks glow red now.' + !!python/unicode 'Lzimann': + - !!python/unicode 'tweak': !!python/unicode 'Communications console can also check + the ID the user is wearing.' + !!python/unicode 'MMMiracles (CereStation)': + - !!python/unicode 'rscadd': !!python/unicode 'Added a patrol path for bots, includes + 2 round-start securitrons placed on opposite sites of station.' + - !!python/unicode 'wip': !!python/unicode 'Due to map size, mulebots are still + somewhat unreliable on longer distances. Disposals are still advised, but mule + bots are now technically an option for delivery.' + - !!python/unicode 'rscadd': !!python/unicode 'Added multiple status displays, extinguishers, + and appropriate newscasters to hallways.' + - !!python/unicode 'rscadd': !!python/unicode 'A drone dispenser is now located + underneath Engineering in maintenance.' + - !!python/unicode 'rscadd': !!python/unicode 'Each security checkpoint now has + a disposal chute that directs to a waiting cell in the Brig for rapid processing + of criminals. Why run half-way across the station with some petty thief when + you can just shove him in the criminal chute and have the warden deal with him?' + - !!python/unicode 'tweak': !!python/unicode 'Security''s mail chute no longer leads + into the armory. This was probably not the best idea in hindsight.' + - !!python/unicode 'tweak': !!python/unicode 'Virology has a bathroom now.' + - !!python/unicode 'tweak': !!python/unicode 'Genetics monkey pen is a bit more + green now.' + - !!python/unicode 'bugfix': !!python/unicode 'Lawyer now has access the brig cells + so he can complain more effectively.' + - !!python/unicode 'bugfix': !!python/unicode 'Xenobio kill chamber is now in range + of a camera.' + - !!python/unicode 'bugfix': !!python/unicode 'Removed rogue bits of Vault area.' + - !!python/unicode 'bugfix': !!python/unicode 'Medbay escape pod no longer juts + out far enough to block the disposal''s path.' + - !!python/unicode 'bugfix': !!python/unicode 'Captain''s spare ID is now real and + not just a gold ID card.' + !!python/unicode 'MrPerson': + - !!python/unicode 'experiment': !!python/unicode 'Ion storms have several new additions:' + - !!python/unicode 'rscadd': !!python/unicode '25% chance to flatly replace the + AI''s core lawset with something random in the config. Suddenly the AI is Corporate, + deal w/ it.' + - !!python/unicode 'rscadd': !!python/unicode '10% chance to delete one of the AI''s + core or supplied laws. Hope you treated the AI well without its precious law + 1 to protect your sorry ass.' + - !!python/unicode 'rscadd': !!python/unicode '10% chance that, instead of adding + a random law, it will instead replace one of the AI''s existing core or supplied + laws with the ion law. Otherwise, it adds the generated law as normal. There''s + still a 100% chance of getting a generated ion law.' + - !!python/unicode 'rscadd': !!python/unicode '10% chance afterwards to shuffle + all the AI''s laws.' + !!python/unicode 'MrStonedOne': + - !!python/unicode 'experiment': !!python/unicode 'The game will now force hardware + rendering on for all clients.' + !!python/unicode 'Mysterious Basilman': + - !!python/unicode 'rscadd': !!python/unicode 'More powerful toolboxes are active + in this world...' + !!python/unicode 'Nienhaus': + - !!python/unicode 'rscadd': !!python/unicode 'Drying racks have new sprites.' + !!python/unicode 'PJB3005': + - !!python/unicode 'rscadd': !!python/unicode 'Rebased to /vg/station lighting code.' + !!python/unicode 'PKPenguin321': + - !!python/unicode 'tweak': !!python/unicode 'Cryoxadone''s ability to heal cloneloss + has been greatly reduced.' + - !!python/unicode 'rscadd': !!python/unicode 'Clonexadone has been readded. It + functions exactly like cryoxadone, but only heals cloneloss, and at a decent + rate. Brew it with 1 part cryoxadone, 1 part sodium, and 5 units of plasma for + a catalyst.' + !!python/unicode 'Penguaro': + - !!python/unicode 'bugfix': !!python/unicode 'Changed DIR of Gas Filter for O2 + in Waste Loop from 1 to 4' + !!python/unicode 'QV': + - !!python/unicode 'bugfix': !!python/unicode 'Fixed taking max suffocation damage + whenever oxygen was slightly low' + !!python/unicode 'Qbopper': + - !!python/unicode 'spellcheck': !!python/unicode 'Drones are now given OOC guidelines + to follow as well as their IC lawset.' + !!python/unicode 'QualityVan': + - !!python/unicode 'bugfix': !!python/unicode 'Improved stethoscopes' + !!python/unicode 'RemieRichards': + - !!python/unicode 'bugfix': !!python/unicode 'Using TK on the supermatter will + burn your head off violently, don''t do this.' + - !!python/unicode 'rscadd': !!python/unicode 'Examining clothing with pockets will + now give information about the pockets: number of slots, how it is interacted + with (backpack, etc.), if it has quickdraw (Alt-Click) support and whether or + not it is silent to interact with.' + !!python/unicode 'Robustin': + - !!python/unicode 'tweak': !!python/unicode 'Hulks can no longer use pneumatic + cannons or flamethrowers' + !!python/unicode 'Scoop': + - !!python/unicode 'tweak': !!python/unicode 'Condimasters now correctly drop their + items in front of their sprite.' + !!python/unicode 'Sligneris': + - !!python/unicode 'imageadd': !!python/unicode 'Updated sprites for the small xeno + queen mode' + !!python/unicode 'Space Bicycle Consortium': + - !!python/unicode 'bugfix': !!python/unicode 'Bicycles now only cost 10,000 yen, + down from 1,000,000 yen.' + !!python/unicode 'Steelpoint': + - !!python/unicode 'rscadd': !!python/unicode 'The Head of Security''s Hardsuit + is now equipped with a inbuilt Jetpack.' + !!python/unicode 'Supermichael777': + - !!python/unicode 'tweak': !!python/unicode 'The button now has a five second delay + when detonating bombs' + !!python/unicode 'Swindly': + - !!python/unicode 'rscadd': !!python/unicode 'Trays can now be used to insert food + into food processors' + !!python/unicode 'TalkingCactus': + - !!python/unicode 'bugfix': !!python/unicode 'New characters will now have their + backpack preference correctly set to "Department Backpack".' + !!python/unicode 'Thunder12345': + - !!python/unicode 'bugfix': !!python/unicode 'It''s ACTUALLY possible to pat people + on the head now' + !!python/unicode 'Tofa01': + - !!python/unicode 'bugfix': !!python/unicode 'Re-Arranges And Extends Pubby Escape + Hallway To Allow Larger Shuttle To Dock' + - !!python/unicode 'bugfix': !!python/unicode '[Meta] Fixes top left grounding rod + from being destroyed by the Tesla engine.' + !!python/unicode 'Tokiko1': + - !!python/unicode 'rscadd': !!python/unicode 'Most gases now have unique effects + when surrounding the supermatter crystal.' + - !!python/unicode 'tweak': !!python/unicode 'The supermatter crystal can now take + damage from too much energy and too much gas.' + - !!python/unicode 'rscadd': !!python/unicode 'Added a dangerous overcharged state + to the supermatter crystal.' + - !!python/unicode 'rscadd': !!python/unicode 'Readded explosion delaminations, + a new tesla delamination and allowed the singulo delamination to absorb the + supermatter.' + - !!python/unicode 'tweak': !!python/unicode 'The type of delamination now depends + on the state of the supermatter crystal.' + - !!python/unicode 'tweak': !!python/unicode 'Various supermatter engine rebalancing + and fixes.' + !!python/unicode 'TrustyGun': + - !!python/unicode 'rscadd': !!python/unicode 'Traitor mimes can now learn two new + spells for 15 tc.' + - !!python/unicode 'rscadd': !!python/unicode 'The first, Invisible Blockade, creates + a 3x1 invisible wall.' + - !!python/unicode 'rscadd': !!python/unicode 'The second, Finger Guns, allows them + to shoot bullets out of their fingers.' + !!python/unicode 'WJohn': + - !!python/unicode 'imageadd': !!python/unicode 'Improved blueshift sprites, courtesy + of Nienhaus.' + !!python/unicode 'WJohnston': + - !!python/unicode 'imageadd': !!python/unicode 'New and improved BRPED beam. The + old one was hideous.' + !!python/unicode 'XDTM': + - !!python/unicode 'rscadd': !!python/unicode 'Bluespace Crystals are now a material + that can be inserted in Protolathes and Circuit Printers. Some items now require + Bluespace Mesh.' + - !!python/unicode 'rscadd': !!python/unicode 'Bluespace Crystal can now be ground + in a reagent grinder to gain bluespace dust. It has no uses, but it teleports + people if splashed on them, and if ingested it will occasionally cause teleportation.' + !!python/unicode 'Xhuis': + - !!python/unicode 'bugfix': !!python/unicode 'Medipens are no longer reusable.' + !!python/unicode 'bgobandit': + - !!python/unicode 'tweak': !!python/unicode 'Alt-clicking a command headset toggles + HIGH VOLUME mode.' + !!python/unicode 'coiax': + - !!python/unicode 'rscadd': !!python/unicode 'The Hyperfractal Gigashuttle is now + purchasable for 100,000 credits. Help Centcom by testing this very safe and + efficient shuttle design. (Terms and conditions apply.)' + - !!python/unicode 'rscadd': !!python/unicode 'The changeling power "Anatomic Panacea" + now causes the changeling to vomit out zombie infections, along with headslugs + and xeno infections, as before.' + - !!python/unicode 'bugfix': !!python/unicode 'The main CTF laser gun disappears + when dropped on the floor.' + !!python/unicode 'fludd12': + - !!python/unicode 'bugfix': !!python/unicode 'Modifying/deconstructing skateboards + while riding them no longer nails you to the sky.' + !!python/unicode 'grimreaperx15': + - !!python/unicode 'tweak': !!python/unicode 'Blood Cult Pylons will now rapidly + regenerate any nearby cultists blood, in addition to the normal healing they + do.' + !!python/unicode 'kevinz000': + - !!python/unicode 'bugfix': !!python/unicode 'Flightsuits actually fly over people' + - !!python/unicode 'bugfix': !!python/unicode 'Flightsuits don''t interrupt pulls + when you pass through doors' + !!python/unicode 'ktccd': + - !!python/unicode 'bugfix': !!python/unicode 'Ninja suits have received a new software + update, making them able to **actually steal tech levels** from R&D; consoles + and servers, thus avoid being forced to honourably kill themselves for failing + their objective.' + !!python/unicode 'lordpidey': + - !!python/unicode 'rscadd': !!python/unicode 'Glitter bombs have been added to + arcade prizes.' + !!python/unicode 'ma44': + - !!python/unicode 'tweak': !!python/unicode 'Intercepted messages from a lavaland + syndicate base reveals they have additional grenade and other miscellaneous + equipment.' + !!python/unicode 'octareenroon91': + - !!python/unicode 'rscadd': !!python/unicode 'Allow new reflector frames to be + built from metal sheets.' + !!python/unicode 'oranges': + - !!python/unicode 'rscdel': !!python/unicode 'Removed patting' + !!python/unicode 'peoplearestrange': + - !!python/unicode 'bugfix': !!python/unicode 'Fixed buildmodes full tile window + to be correct path' + !!python/unicode 'rock': + - !!python/unicode 'soundadd': !!python/unicode 'you can now harmlessly slap somebody + by aiming for the mouth on disarm intent.' + - !!python/unicode 'soundadd': !!python/unicode 'you can only slap somebody who + is unarmed on help intent, restrained, or ready to slap you.' + !!python/unicode 'uraniummeltdown': + - !!python/unicode 'rscadd': !!python/unicode 'Shuttle engines have new sprites.' 2017-12-16: - Armhulen and lagnas2000 (+his team of amazing spriters): - - rscadd: Mi-go have entered your realm! + !!python/unicode 'ACCount': + - !!python/unicode 'tweak': !!python/unicode '"Tail removal" and "tail attachment" + surgeries are merged with "organ manipulation".' + - !!python/unicode 'imageadd': !!python/unicode 'New sprites for reflectors. They + finally look like something.' + - !!python/unicode 'rscadd': !!python/unicode 'You can lock reflector''s rotation + by using a screwdriver. Use the screwdriver again to unlock it.' + - !!python/unicode 'rscadd': !!python/unicode 'Reflector examine now shows the current + angle and rotation lock status.' + - !!python/unicode 'rscadd': !!python/unicode 'You can now use a welder to repair + damaged reflectors.' + - !!python/unicode 'bugfix': !!python/unicode 'Multiple reflector bugs are fixed.' + !!python/unicode 'Anonmare': + - !!python/unicode 'rscadd': !!python/unicode 'Adds new grindables' + !!python/unicode 'AnturK': + - !!python/unicode 'balance': !!python/unicode 'Dying in shapeshifted form reverts + you to the original one. (You''re still dead)' + !!python/unicode 'Armhulen': + - !!python/unicode 'rscadd': !!python/unicode 'Wizards may now shapeshift into viper + spiders.' + !!python/unicode 'Armhulen and lagnas2000 (+his team of amazing spriters)': + - !!python/unicode 'rscadd': !!python/unicode 'Mi-go have entered your realm!' + !!python/unicode 'AutomaticFrenzy': + - !!python/unicode 'bugfix': !!python/unicode 'cell chargers weren''t animating + properly' + - !!python/unicode 'bugfix': !!python/unicode 'disable_warning wasn''t getting checked + and the chat was being spammed' + !!python/unicode 'AverageJoe82': + - !!python/unicode 'rscadd': !!python/unicode 'drones now have night vision' + - !!python/unicode 'rscdel': !!python/unicode 'drones no longer have lights' + !!python/unicode 'BeeSting12': + - !!python/unicode 'spellcheck': !!python/unicode 'Occupand ---> Occupant on + opened cryogenic pods.' + - !!python/unicode 'spellcheck': !!python/unicode 'Cyrogenic ---> Cryogenic on + opened cryogenic pods.' + !!python/unicode 'Cobby': + - !!python/unicode 'rscadd': !!python/unicode 'The Xray now only hits the first + mob it comes into contact with instead of being outright removed from the game.' + !!python/unicode 'Code by Pyko, Ported by Frozenguy5': + - !!python/unicode 'rscadd': !!python/unicode 'Rat Kebabs and Double Rat Kebabs + have been added!' + !!python/unicode 'CosmicScientist': + - !!python/unicode 'bugfix': !!python/unicode 'bolas are back in tablecrafting!' + !!python/unicode 'Cruix': + - !!python/unicode 'rscadd': !!python/unicode 'Shuttle navigation computers can + now place new transit locations over the shuttle''s current position.' + !!python/unicode 'Cyberboss': + - !!python/unicode 'bugfix': !!python/unicode 'Clockwork slabs no longer refer to + components' + !!python/unicode 'Dax Dupont': + - !!python/unicode 'rscadd': !!python/unicode 'Nanotrasen is happy to announce the + pinnacle in plasma research! The Disco Inferno shuttle design is the result + of decades of plasma research. Burn, baby, burn!' + !!python/unicode 'Dax Dupont & Alek2ander': + - !!python/unicode 'tweak': !!python/unicode 'Binary chat messages been made more + visible.' + !!python/unicode 'DaxDupont': + - !!python/unicode 'bugfix': !!python/unicode 'Fancy boxes(ie: donut boxes) now + show the proper content amount in the sprite and no longer go invisible when + empty.' + !!python/unicode 'Dorsisdwarf': + - !!python/unicode 'tweak': !!python/unicode 'Catpeople are now distracted instead + of debilitated' + - !!python/unicode 'rscadd': !!python/unicode 'Normal cats now go for laser pointers' + !!python/unicode 'Epoc': + - !!python/unicode 'bugfix': !!python/unicode 'Adds Cybernetic Lungs to the Cyber + Organs research node' + !!python/unicode 'ExcessiveUseOfCobblestone': + - !!python/unicode 'bugfix': !!python/unicode 'You can now lay (buckle!) yourself + to a bed to avoid being burnt to a crisp during "the floor is lava" event.' + !!python/unicode 'Floyd / Qustinnus': + - !!python/unicode 'soundadd': !!python/unicode 'Redtexting as a traitor now plays + a depressing tune to you' + !!python/unicode 'Floyd / Qustinnus (And all the sounds by Kayozz11 from Yogstation)': + - !!python/unicode 'soundadd': !!python/unicode 'Adds about 30 new ambience sounds' + - !!python/unicode 'refactor': !!python/unicode 'added new defines for ambience + lists.' + !!python/unicode 'Floyd / Qustinnus:': + - !!python/unicode 'soundadd': !!python/unicode 'Adds a few sound_loop datums to + machinery.' + !!python/unicode 'Fox McCloud': + - !!python/unicode 'tweak': !!python/unicode 'Slime blueprints can now make an area + compatible with Xenobio consoles, regardless of the name of the new area' + !!python/unicode 'Francinum': + - !!python/unicode 'tweak': !!python/unicode 'The shuttle build plate is now better + sized for all stations.' + !!python/unicode 'Frozenguy5': + - !!python/unicode 'bugfix': !!python/unicode 'Broken cable cuffs no longer has + an invisible sprite.' + !!python/unicode 'Fury': + - !!python/unicode 'rscadd': !!python/unicode 'Added new sprites for the Heirophant + Relay (clock cultist telecomms equipment).' + !!python/unicode 'Gun Hog': + - !!python/unicode 'bugfix': !!python/unicode 'The GPS item now correctly changes + its name when the GPS tag is changed.' + !!python/unicode 'GupGup': + - !!python/unicode 'bugfix': !!python/unicode 'Fixes hostile mobs attacking surrounding + tiles when trying to attack someone' + !!python/unicode 'Iamgoofball': + - !!python/unicode 'tweak': !!python/unicode 'Cooldown on the Ripley''s mining drills + has been halved.' + - !!python/unicode 'tweak': !!python/unicode 'The frequency of the Ripley''s ore + pulse has been doubled.' + !!python/unicode 'Improvedname': + - !!python/unicode 'tweak': !!python/unicode 'Reverts katana''s to its orginal size + being huge' + !!python/unicode 'JJRcop': + - !!python/unicode 'rscadd': !!python/unicode 'The heart of darkness revives you + as a shadowperson if you aren''t one already.' + !!python/unicode 'JStheguy': + - !!python/unicode 'rscadd': !!python/unicode 'Added 10 new assembly designs to + the integrated circuit printer, the difference from current designs is purely + aesthetics.' + - !!python/unicode 'imageadd': !!python/unicode 'Added the icons for said new assembly + designs to electronic_setups.dmi, changed the current electronic mechanism and + electronic machine sprites.' + !!python/unicode 'Jalleo': + - !!python/unicode 'tweak': !!python/unicode 'Removed a variable to state which + RCD''s can deconstruct reinforced walls' + - !!python/unicode 'balance': !!python/unicode 'Made combat (ERT ones) and admin + RCDs able to deconstruct r walls alongside borg ones' + !!python/unicode 'JamieH': + - !!python/unicode 'rscadd': !!python/unicode 'Buildmode map generators will now + show you a preview of the area you''re changing' + - !!python/unicode 'rscadd': !!python/unicode 'Buildmode map generators will now + ask before nuking the map' + - !!python/unicode 'bugfix': !!python/unicode 'Buildmode map generator corners can + now only be set by left clicking' + !!python/unicode 'Kor': + - !!python/unicode 'rscadd': !!python/unicode 'Blob is now a side antagonist.' + - !!python/unicode 'rscadd': !!python/unicode 'Event and admin blobs will now be + able to choose their spawn location.' + - !!python/unicode 'rscadd': !!python/unicode 'Blob can now win in any mode by gaining + enough tiles to reach Critical Mass.' + - !!python/unicode 'rscadd': !!python/unicode 'Blobs that have Critical Mass have + unlimited points, and a minute after achieving critical mass, they will spread + to every tile on station, killing anyone still on board and ending the round.' + - !!python/unicode 'rscadd': !!python/unicode 'Using an analyzer on a blob will + now reveal its progress towards Critical Mass.' + - !!python/unicode 'rscadd': !!python/unicode 'The blob event is now more common.' + !!python/unicode 'Kor and JJRcop': + - !!python/unicode 'rscadd': !!python/unicode 'Added vampires. They will be available + as a roundstart race during the Halloween holiday event.' + !!python/unicode 'MMMiracles': + - !!python/unicode 'balance': !!python/unicode 'Power regen on the regular tesla + relay has been reduced to 50, from 150.' + !!python/unicode 'Mark9013100': + - !!python/unicode 'tweak': !!python/unicode 'The Medical Cloning manual has been + updated.' + !!python/unicode 'Mercenaryblue': + - !!python/unicode 'bugfix': !!python/unicode 'when decapitated, banana-flavored + cream no longer hovers where your head used to be.' + !!python/unicode 'More Robust Than You': + - !!python/unicode 'rscadd': !!python/unicode 'EI NATH! now causes a flash of light' + !!python/unicode 'MrDoomBringer': + - !!python/unicode 'imageadd': !!python/unicode 'All stations have been outfitted + with brand new Smoke Machines! They have nicer sprites now!' + !!python/unicode 'MrPerson & ninjanomnom': + - !!python/unicode 'refactor': !!python/unicode 'Completely changed how keyboard + input is read.' + - !!python/unicode 'rscadd': !!python/unicode 'Holding two directions at the same + time will now move you diagonally. This works with the arrow keys, wasd, and + the numpad.' + - !!python/unicode 'tweak': !!python/unicode 'Moving diagonally takes twice as long + as moving a cardinal direction.' + - !!python/unicode 'bugfix': !!python/unicode 'You can use control to turn using + wasd and the numpad instead of just the arrow keys.' + - !!python/unicode 'rscdel': !!python/unicode 'Some old non-hotkey mode behaviors, + especially in relation to chatbox interaction, can''t be kept with the new system. + Of key note: You can''t type while walking. This is due to limitations of byond + and the work necessary to overcome it is better done as another overhaul allowing + custom controls.' + !!python/unicode 'MrStonedOne': + - !!python/unicode 'code_imp': !!python/unicode 'Created a system to profile code + on a line by line basis and return detailed info about how much time was spent + (in milliseconds) on each line(s).' + !!python/unicode 'MrStonedOne and Jordie': + - !!python/unicode 'server': !!python/unicode 'As a late note, serverops be advise + that mysql is no longer supported. existing mysql databases will need to be + converted to mariadb' + !!python/unicode 'Naksu': + - !!python/unicode 'bugfix': !!python/unicode 'Pinned notes will now show up on + vault, abductor, centcom and large glass airlocks.' + - !!python/unicode 'spellcheck': !!python/unicode 'Removed a misleading message + when handling full stacks of sheets.' + - !!python/unicode 'bugfix': !!python/unicode 'Pre-filled glass bottles (uplink, + medbay, botany) will now give visual feedback about how much stuff is left inside, + and the color of contents will match an empty bottle being filled with the same + reagent.' + - !!python/unicode 'bugfix': !!python/unicode 'Player-controlled "neutral" mobs + such as minebots are now considered valid targets by clock cult''s ocular wardens.' + !!python/unicode 'Okand37': + - !!python/unicode 'rscadd': !!python/unicode 'Re-organized Delta''s departmental + protolathes for all departments.' + - !!python/unicode 'rscadd': !!python/unicode 'Re-organized Delta''s ORM placement + by connecting it to the mining office, which now has a desk for over handing + materials to the outside.' + - !!python/unicode 'rscadd': !!python/unicode 'Added a second Nanomed to Deltastation''s + medical bay.' + - !!python/unicode 'rscadd': !!python/unicode 'Nanotrasen has decided to add proper + caution signs to most docking ports on Deltastation, warning individuals to + be cautious around these areas.' + - !!python/unicode 'rscadd': !!python/unicode 'Two health sensors are now placed + in Deltastation''s robotics area for medibots.' + - !!python/unicode 'bugfix': !!python/unicode 'Atmospheric Technicians at Deltastation + can now open up their gas storage in the supermatter power area as intended.' + !!python/unicode 'Okand37 (DeltaStation Updates)': + - !!python/unicode 'rscadd': !!python/unicode 'Tweaked Atmospherics' + - !!python/unicode 'bugfix': !!python/unicode 'Fixed the Incinerator air injector' + - !!python/unicode 'rscadd': !!python/unicode 'Tweaked Engineering' + - !!python/unicode 'rscadd': !!python/unicode 'Added logs to the Chaplain''s closet + for gimmicks (bonfires)' + - !!python/unicode 'rscadd': !!python/unicode 'Tweaked Security' + - !!python/unicode 'bugfix': !!python/unicode 'Fixed medical morgue maintenance + not providing radiation shielding and exterior chemistry windoor' + - !!python/unicode 'rscadd': !!python/unicode 'Bar now has a door from the backroom + to the theatre stage' + - !!python/unicode 'rscadd': !!python/unicode 'Tweaked Locker Room/Dormitories' + !!python/unicode 'PKPenguin321': + - !!python/unicode 'tweak': !!python/unicode 'You can now use beakers/cups/etc that + have welding fuel in them on welders to refuel them.' + !!python/unicode 'Qbopper and JJRcop': + - !!python/unicode 'tweak': !!python/unicode 'The default internet sound volume + was changed from 100 to 25. Stop complaining in OOC about your ears!' + !!python/unicode 'Revenant Defile ability': + - !!python/unicode 'bugfix': !!python/unicode 'Revenant''s Defile now removes salt + piles' + !!python/unicode 'Robustin': + - !!python/unicode 'bugfix': !!python/unicode 'The smoke machine now properly generates + transparent smoke, transmits chemicals, and displays the proper icons.' + !!python/unicode 'Shadowlight213': + - !!python/unicode 'code_imp': !!python/unicode 'Added round id to the status world + topic' + !!python/unicode 'ShizCalev': + - !!python/unicode 'tweak': !!python/unicode 'You can no longer build reinforced + floors directly on top of dirt, asteroid sand, ice, or beaches. You''ll have + to first construct flooring on top of it instead.' + - !!python/unicode 'bugfix': !!python/unicode 'Corrected mapping issues introduced + with the latest SM engine/radiation update across all relevant maps.' + - !!python/unicode 'bugfix': !!python/unicode 'The tools on the Caravan Ambush space + ruin have had their speeds corrected.' + - !!python/unicode 'bugfix': !!python/unicode 'Slappers will no longer appear as + a latex balloon in your hand.' + - !!python/unicode 'bugfix': !!python/unicode 'Renault now has a comfy new bed on + Metastation!' + - !!python/unicode 'tweak': !!python/unicode 'Engineering cyborgs now have access + to geiger counters.' + !!python/unicode 'Skylar Lineman, your local R&D; moonlighter': + - !!python/unicode 'rscadd': !!python/unicode 'Research has been completely overhauled + into the techweb system! No more levels, the station now unlocks research "nodes" + with research points passively generated when there is atleast one research + server properly cooled, powered, and online.' + - !!python/unicode 'rscadd': !!python/unicode 'R&D; lab has been replaced by + the departmental lathe system on the three major maps. Each department gets + a lathe and possibly a circuit imprinter that only have designs assigned by + that department.' + - !!python/unicode 'rscadd': !!python/unicode 'The ore redemption machine has been + moved into cargo bay on maps with decentralized research to prevent the hallways + from becoming a free for all. Honk!' + - !!python/unicode 'balance': !!python/unicode 'You shouldn''t expect balance as + this is the initial merge. Please put all feedback and concerns on the forum + so we can revise the system over the days, weeks, and months, to make this enjoyable + for everyone. Heavily wanted are ideas of how to add more ways of generating + points.' + - !!python/unicode 'balance': !!python/unicode 'You can get techweb points by setting + off bombs with an active science doppler array listening. The bombs have to + have a theoretical radius far above maxcap to make a difference. You can only + go up, not down, in radius, so you can''t get 6 times the points with 6 TTVs. + The algorithm is exponentially/logarithmically scaled to prevent "world destroyer" + bombs from instantly finishing research.' + !!python/unicode 'SpaceManiac': + - !!python/unicode 'bugfix': !!python/unicode 'Admins can once again spawn nuke + teams on demand.' + !!python/unicode 'Swindly': + - !!python/unicode 'rscadd': !!python/unicode 'Organ storage bags can be used to + perform limb augmentation.' + - !!python/unicode 'bugfix': !!python/unicode 'You can now cancel a cavity implant + during the implanting/removing step by using drapes while holding the appropriate + tool in your inactive hand. Cyborgs can cancel the surgery by using drapes alone.' + - !!python/unicode 'bugfix': !!python/unicode 'Fixed hot items and fire heating + reagents to temperatures higher than their heat source.' + - !!python/unicode 'bugfix': !!python/unicode 'Sprays can now be heated with hot + items.' + - !!python/unicode 'tweak': !!python/unicode 'The heating of reagents by hot items, + fire, and microwaves now scales linearly with the difference between the reagent + holder''s temperature and the heat source''s temperature instead of constantly.' + - !!python/unicode 'tweak': !!python/unicode 'The body temperature of a mob with + reagents is affected by the temperature of the mob''s reagents.' + - !!python/unicode 'tweak': !!python/unicode 'Reagent containers can now be heated + by hot air.' + !!python/unicode 'Thefastfoodguy': + - !!python/unicode 'bugfix': !!python/unicode 'Spamming runes / battlecries / etc + will no longer trigger spam prevention' + !!python/unicode 'Thunder12345': + - !!python/unicode 'bugfix': !!python/unicode 'Sentient cats no longer forget to + fall over when they die' + !!python/unicode 'WJohnston': + - !!python/unicode 'bugfix': !!python/unicode 'Ancient station lighting fixed on + beta side (medical and atmos remains)' + !!python/unicode 'XDTM': + - !!python/unicode 'rscadd': !!python/unicode 'Ghosts now have a Toggle Health Scan + verb, which allows them to health scan mobs they click on.' + !!python/unicode 'Xhuis': + - !!python/unicode 'bugfix': !!python/unicode 'Cogged APCs can now be correctly + unlocked with an ID card.' + !!python/unicode 'Y0SH1 M4S73R': + - !!python/unicode 'spellcheck': !!python/unicode 'The R&D; Server''s name is + now improper.' + - !!python/unicode 'spellcheck': !!python/unicode 'The R&D; Server now has an + explanation of what it does.' + !!python/unicode 'Y0SH1_M4S73R': + - !!python/unicode 'bugfix': !!python/unicode 'Disabling leg actuators sets the + power drain per step to the correct value.' + !!python/unicode 'YPOQ': + - !!python/unicode 'bugfix': !!python/unicode 'EMPs can pulse multiple wires' + !!python/unicode 'arsserpentarium': + - !!python/unicode 'bugfix': !!python/unicode 'now lists should work properly' + !!python/unicode 'as334': + - !!python/unicode 'spellcheck': !!python/unicode 'This changelog has been updated + and so read it again if you are interested in doing assmos.' + - !!python/unicode 'rscadd': !!python/unicode 'Atmospherics has been massively expanded + including new gases.' + - !!python/unicode 'rscadd': !!python/unicode 'These new gases include Brown Gas, + Pluoxium, Stimulum, Hyper-Noblium and Tritium.' + - !!python/unicode 'rscadd': !!python/unicode 'Brown Gas is acidic to breath, but + mildly stimulation.' + - !!python/unicode 'rscadd': !!python/unicode 'Stimulum is more stimulating and + much safer.' + - !!python/unicode 'rscadd': !!python/unicode 'Pluoxium is a non-reactive form of + oxygen that delivers more oxygen into the bloodstream.' + - !!python/unicode 'rscadd': !!python/unicode 'Hyper-Noblium is an extremely noble + gas, and stops gases from reacting.' + - !!python/unicode 'rscadd': !!python/unicode 'Tritium is radioactive and flammable.' + - !!python/unicode 'rscadd': !!python/unicode 'New reactions have also been added + to create these gases.' + - !!python/unicode 'rscadd': !!python/unicode 'Tritium formation: Heat large amounts + of oxygen with plasma. Make sure you have a filter ready and setup!' + - !!python/unicode 'rscadd': !!python/unicode 'Fusion has been reintroduced. Plasma + will fuse when heated to a high thermal energy with Tritium as a catalyst. Make + sure to manage the waste products.' + - !!python/unicode 'rscadd': !!python/unicode 'Brown Gas formation: Heat Oxygen + and Nitrogen.' + - !!python/unicode 'rscadd': !!python/unicode 'BZ fixation: Heat Tritium and Plasma.' + - !!python/unicode 'rscadd': !!python/unicode 'Stimulum formation: Heated Tritium, + Plasma, BZ and Brown Gas.' + - !!python/unicode 'rscadd': !!python/unicode 'Hyper-Noblium condensation: Needs + Nitrogen and Tritium at a super high heat. Cools rapidly.' + - !!python/unicode 'rscadd': !!python/unicode 'Pluoxium is unable to be formed.' + - !!python/unicode 'rscdel': !!python/unicode 'Freon has been removed. Use cold + nitrogen for your SME problems now.' + - !!python/unicode 'rscadd': !!python/unicode 'Water vapor now freezes the tile + it is on when it is cooled heavily.' + !!python/unicode 'bgobandit': + - !!python/unicode 'tweak': !!python/unicode 'Due to cuts to Nanotrasen''s Occupational + Safety and Health Administration (NO-SHA) budget, station fixtures no longer + undergo as much safety testing. (Translation for rank and file staff: More objects + on the station will hurt you.)' + !!python/unicode 'coiax': + - !!python/unicode 'rscadd': !!python/unicode 'Quiet areas of libraries on station + have now been equipped with a vending machine containing suitable recreational + activities.' + !!python/unicode 'deathride58': + - !!python/unicode 'tweak': !!python/unicode 'You can now press Ctrl+H to stop pulling, + or simply H to stop pulling if you''re in hotkey mode.' + !!python/unicode 'duncathan': + - !!python/unicode 'tweak': !!python/unicode 'Portable air pumps can output to a + maximum of 25 atmospheres.' + !!python/unicode 'ike709': + - !!python/unicode 'imageadd': !!python/unicode 'Added directional computer sprites. + Maps haven''t been changed yet.' + !!python/unicode 'improvedname': + - !!python/unicode 'tweak': !!python/unicode 'toolbelts can now carry geiger counters' + !!python/unicode 'jammer312': + - !!python/unicode 'bugfix': !!python/unicode 'fixed conjuration spells forgetting + about conjured items' + !!python/unicode 'kevinz000': + - !!python/unicode 'refactor': !!python/unicode 'Legacy projectiles have been removed. + Instead, all projectiles are now PIXEL PROJECTILES!' + - !!python/unicode 'rscadd': !!python/unicode 'Reflectors can now be at any angle + you want. Alt click them to set angle!' + - !!python/unicode 'rscadd': !!python/unicode 'Pipes can now be layered up to 3 + layers.' + !!python/unicode 'naltronix': + - !!python/unicode 'bugfix': !!python/unicode 'fixes that table that wasnt accessible + in Metastation' + !!python/unicode 'nicbn': + - !!python/unicode 'imageadd': !!python/unicode 'Chemical heater and smoke machine + resprited.' + !!python/unicode 'nicn': + - !!python/unicode 'balance': !!python/unicode 'Damage from low pressure has been + doubled.' + !!python/unicode 'ninjanomnom': + - !!python/unicode 'rscadd': !!python/unicode 'You can vomit blood at high enough + radiation.' + - !!python/unicode 'balance': !!python/unicode 'Radiation knockdown is far far shorter.' + - !!python/unicode 'balance': !!python/unicode 'Genetics modification is less harmful + but still, upgrade your machines.' + - !!python/unicode 'balance': !!python/unicode 'Pentetic acid is useless for low + amounts of radiation but indispensable for high amounts now.' + - !!python/unicode 'balance': !!python/unicode 'Singularity radiation has been normalized + and Pubby engine has been remapped.' + - !!python/unicode 'bugfix': !!python/unicode 'No more hair loss spam' + - !!python/unicode 'bugfix': !!python/unicode 'Mob rad contamination has been disabled + for now. Regular contamination is still a thing.' + - !!python/unicode 'bugfix': !!python/unicode 'Fixed turfs not rotating' + - !!python/unicode 'bugfix': !!python/unicode 'Fixed stealing structures you shouldn''t + be moving' + !!python/unicode 'ninjanomnom & Wjohn': + - !!python/unicode 'bugfix': !!python/unicode 'Cable cuffs now inherit the color + of the cables used to make them.' + - !!python/unicode 'bugfix': !!python/unicode 'Split cable stacks keep their color.' + - !!python/unicode 'tweak': !!python/unicode 'The blue cable color is now a better + blue.' + !!python/unicode 'oranges': + - !!python/unicode 'rscdel': !!python/unicode 'Removed the bluespace pipe' + !!python/unicode 'psykzz': + - !!python/unicode 'refactor': !!python/unicode 'AI Airlock UI to use TGUI' + - !!python/unicode 'tweak': !!python/unicode 'Allow AI to swap between electrified + door states without having to un-electrify first.' + !!python/unicode 'selea/arsserpentarium': + - !!python/unicode 'rscadd': !!python/unicode 'Integrated circuits have been added + to Research!' + - !!python/unicode 'rscadd': !!python/unicode 'You can use these to create devices + with very complex behaviors.' + - !!python/unicode 'rscadd': !!python/unicode 'Research the Integrated circuits + printer to get started.' + !!python/unicode 'tserpas1289': + - !!python/unicode 'tweak': !!python/unicode 'Any suit that could hold emergency + oxygen tanks can now also hold plasma man internals' + - !!python/unicode 'tweak': !!python/unicode 'Hydroponics winter coats now can hold + emergency oxygen tanks just like the other winter coats.' + - !!python/unicode 'bugfix': !!python/unicode 'Plasma men jumpsuits can now hold + accessories like pocket protectors and medals.' + !!python/unicode 'uraniummeltdown': + - !!python/unicode 'tweak': !!python/unicode 'Replica fabricatoring airlocks and + windoors keeps the old name' + - !!python/unicode 'tweak': !!python/unicode 'Narsie and Ratvar converting airlocks + and windoors keeps the old name' + !!python/unicode 'zennerx': + - !!python/unicode 'bugfix': !!python/unicode 'fixed a bug that made you try and + scream while unconscious due to a fire' + - !!python/unicode 'tweak': !!python/unicode 'Skateboard crashes now give slight + brain damage!' + - !!python/unicode 'rscadd': !!python/unicode 'Using a helmet prevents brain damage + from the skateboard!' +2017-12-29: + Awesine: + - rscadd: added some things which happen to be mining scanner things to that gulag + thing + CitadelStationBot: + - bugfix: Projectiles that pierce objects will no longer be thrown off course when + doing so! + - code_imp: Projectiles now use /datum/point/vectors for trajectory calculations. + - bugfix: Beam rifle reflections will no longer glitch out. + - rscadd: 'Clown modules have been added for cyborgs! Modules: Bikehorn, Airhorn, + instrumental bikehorn, clown stamp, multicolor paint, rainbow crayon, soap, + razor, purple lipstick, nonstunning selfcharging creampie cannon, nonslipping + selfcharging water sprayer, lollipop fabricator, metallic picket sign, mini + extinguisher, laughter reagent hypospray, and the ability to hug. experimental: + When emagged they get a fire spray, "super" laughter injector, and shocking + or crushing hugs. Also, the module is adminspawn only at the moment.' + - bugfix: '"Download N research nodes" objective is now checked correctly again.' + - tweak: Objects that can have materials inserted into them only will do so on help + intent + - admin: Play Internet Sound now has an option to show the song title to players. + - bugfix: Emagged cleanbots can acid people again + - bugfix: Headgear worn by monkeys can be affected by acid + - code_imp: The R&D console has been made more responsive by tweaking how design + icons are loaded. + - rscadd: you can now pick up corgi's and pAIs, how disgustingly cute + - bugfix: Ghost lights will follow the ghost while orbiting + CosmicScientist: + - rscadd: timestop now inverts the colours of those frozen in time! + Dax Dupont: + - bugfix: Borgs will no longer have their metal/glass/etc stacks commit sudoku when + it runs out of metal. They will also show the correct amount instead of a constant + of "1" on menu interaction. + Frozenguy5: + - bugfix: Soapstones now give the correct time they were placed down. + Kor: + - rscadd: During Christmas you will be able to click on the tree in the Chapel to + receive one present per round. That present can contain any item in the game. + More Robust Than You: + - tweak: Vending machines now use TGUI + - bugfix: The Radiance can now enter the chapel + Naksu: + - bugfix: frying oil actually works + Nero1024: + - soundadd: blast doors and shutters will now play a sound when they open and close. + PsyKzz: + - rscadd: Jaws of life can now cut handcuffs Robustin: - - balance: Marauder shields now take twice as long to regenerate and only recharge - one charge at a time. - - balance: Marauders now have 120hp down from 150hp. - - bugfix: The wizard event "race swap" should now stick to "safer" species. - - bugfix: Zombies are now properly stunned for a maximum of 2 seconds instead of - 2/10ths of a second. - - tweak: Zombie slowdown adjusted from -2 to -1.6. - SpaceManiac: - - bugfix: The shuttle will no longer be autocalled if the round has already ended. + - tweak: The EMP door shocking effect has a new formula. Heavy EMP's will no longer + shock doors while light EMP's have a 10% chance (down from 13.33%). + - bugfix: Hallucinations will no longer show open doors "bolting". + - bugfix: Splashing a book with ethanol should no longer produce errant messages. + - balance: Dead cultists can now be moved across the "line" on Reebe. + - bugfix: The action button for spells should now accurately reflect when the spell + is on cooldown + - bugfix: You can now reliably use the button for "touch" spells to "recall" the + spell + WJohnston: + - tweak: Syndicate nuke op infiltrator shuttle is no longer lopsided. + XDTM: + - balance: Rebalanced healing symptoms. + - balance: Cellular Molding was replaced by Nocturnal Regeneration, which only works + in darkness. + - balance: All healing symptoms now heal both brute and burn damage, although the + basic ones will still be more effective on one damage type. + - balance: Plasma Fixation and Radioactive Metabolism heal toxin damage, offsetting + the damage done by their healing sources. + - balance: Changed healing symptoms' stats, generally making them less punishing. Xhuis: - - tweak: Vitality matrices don't have visible messages when someone crosses them - anymore. ->>>>>>> 7f8905e... Fixes Mi-Go crediting (#33626) + - bugfix: You can no longer elect two Eminences simultaneously. + - bugfix: The Eminence no longer drifts in space. + - tweak: The Eminence's mass recall now works on unconscious servants. + - tweak: The Eminence's messages now have follow links for observers. + - balance: Floors blessed with holy water prevent servants from warping in and the + Eminence from crossing them. + - balance: The Eminence can never enter the Chapel. + - rscadd: Maintenance drones and cogscarabs can now spawn with holiday-related hats + on some holidays! + coiax: + - rscadd: Golems can now wear labcoats. + - balance: The kitchen gibber must be anchored in order to use. + - balance: The gibber requires bodies to have no external items or equipment. + - rscadd: Ghosts can now use the *spin and *flip emotes. + deathride58: + - bugfix: Praise the lord! The shift+scroll hotkey to zoom in/out as a ghost works + properly again! + - rscadd: Mediborgs now have an alternate sprite taken from Paradise, featuring + heavy modifications from Vivi. + - rscadd: Standard security borgs now has two alternative sprites that were previously + unused in TG's files! + - rscadd: Engineering borgs now have an alternative sprite that was previously unused + in TG's files. + - rscadd: Mining borgs are now able to choose between the current lavaland paintjob + or the old asteroid paintjob. + - code_imp: Dogborgs are now modularized. + - code_imp: All of the copypasta brought by the new borg icons has been removed. + Custom borg sprites are now modular. + - code_imp: The additional modules in the borg module select menu have been modularized. + - code_imp: The module select icon file is now able to be modular. This does not + yet restore the regressed dogborg module select icons. + ninjanomnom: + - bugfix: Non movement keys pressed while moving no longer stop movement. + - bugfix: The backup shuttle has it's own area now and you should no longer occasionally + be teleported there by the arena shuttle. + - bugfix: The auxiliary mining base can no longer be placed on top of lava, indestructible + turfs, or inside particularly large ruins. diff --git a/html/changelogs/AutoChangeLog-pr-3731.yml b/html/changelogs/AutoChangeLog-pr-3731.yml deleted file mode 100644 index 9486c7e793..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3731.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - bugfix: "Singularity objects no longer become contaminated by radiation." - - admin: "Removed the radiation message admin spam and moved it to an investigation log." diff --git a/html/changelogs/AutoChangeLog-pr-3747.yml b/html/changelogs/AutoChangeLog-pr-3747.yml deleted file mode 100644 index 46ad021439..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3747.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - tweak: "\"Tail removal\" and \"tail attachment\" surgeries are merged with \"organ manipulation\"." diff --git a/html/changelogs/AutoChangeLog-pr-3818.yml b/html/changelogs/AutoChangeLog-pr-3818.yml deleted file mode 100644 index 1be3ec57f4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3818.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Swindly" -delete-after: True -changes: - - bugfix: "You can now cancel a cavity implant during the implanting/removing step by using drapes while holding the appropriate tool in your inactive hand. Cyborgs can cancel the surgery by using drapes alone." diff --git a/html/changelogs/AutoChangeLog-pr-3858.yml b/html/changelogs/AutoChangeLog-pr-3858.yml deleted file mode 100644 index 2243f683c0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3858.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "deathride58 & TGstation contributors" -delete-after: True -changes: - - bugfix: "Fixed various area issues in Boxstation. The theatre no longer has an air alarm for space, and Security no longer has a line of walls with broken lighting." - - tweak: "Added more lights to Boxstation's security" - - rscadd: "(Upstream) Added a new white ship to Deltastation" - - tweak: "(Upstream) Replaced the reinforced glass in Atmos' gas tanks with reinforced plasma glass" - - tweak: "(Upstream) Atmos can no longer burn itself down via the waste loop outlet" diff --git a/html/changelogs/AutoChangeLog-pr-3864.yml b/html/changelogs/AutoChangeLog-pr-3864.yml deleted file mode 100644 index 2ff6cc010e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3864.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - tweak: "Cooldown on the Ripley's mining drills has been halved." - - tweak: "The frequency of the Ripley's ore pulse has been doubled." diff --git a/html/changelogs/AutoChangeLog-pr-3871.yml b/html/changelogs/AutoChangeLog-pr-3871.yml deleted file mode 100644 index 910a5893eb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3871.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Bluespace shelter walls no longer smooth with non-shelter walls and windows." diff --git a/html/changelogs/AutoChangeLog-pr-3879.yml b/html/changelogs/AutoChangeLog-pr-3879.yml deleted file mode 100644 index 440ea3e616..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3879.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "as334" -delete-after: True -changes: - - rscadd: "Pluoxium can now be formed by irradiating tiles with CO2 in the air." - - rscadd: "Rad collectors now steadily form Tritium at a slow pace." - - balance: "Nerfs fusion by making it slower, and produce radioactivity." - - balance: "Noblium formation now requires significantly more energy input." - - balance: "Tanks now melt if their temperature is above 1 Million Kelvin." diff --git a/html/changelogs/AutoChangeLog-pr-3881.yml b/html/changelogs/AutoChangeLog-pr-3881.yml deleted file mode 100644 index da5bf113eb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3881.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Mark9013100" -delete-after: True -changes: - - tweak: "Charcoal bottles have been renamed, and have been given a more informative description." diff --git a/html/changelogs/AutoChangeLog-pr-3884.yml b/html/changelogs/AutoChangeLog-pr-3884.yml deleted file mode 100644 index cccc830fa8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3884.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "You can no longer delete girders, lattices, or catwalks with the RPD" - - bugfix: "Fixes runtimes that occur when clicking girders, lattices, catwalks, or disposal pipes with the RPD in paint mode" diff --git a/html/changelogs/AutoChangeLog-pr-3886.yml b/html/changelogs/AutoChangeLog-pr-3886.yml deleted file mode 100644 index df6baaf9e8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3886.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Clockwork slabs no longer refer to components" diff --git a/html/changelogs/AutoChangeLog-pr-3887.yml b/html/changelogs/AutoChangeLog-pr-3887.yml deleted file mode 100644 index 6abe71ce5d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3887.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DaxDupont" -delete-after: True -changes: - - bugfix: "Medbots can inject from one tile away again." diff --git a/html/changelogs/AutoChangeLog-pr-3889.yml b/html/changelogs/AutoChangeLog-pr-3889.yml deleted file mode 100644 index 0dbe1a4a54..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3889.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "The detective and heads of staff are no longer attacked by portable turrets." diff --git a/html/changelogs/AutoChangeLog-pr-3892.yml b/html/changelogs/AutoChangeLog-pr-3892.yml deleted file mode 100644 index d56a3291ca..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3892.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - bugfix: "Fixes ruin cable spawning and probably some other bugs" diff --git a/html/changelogs/AutoChangeLog-pr-3900.yml b/html/changelogs/AutoChangeLog-pr-3900.yml deleted file mode 100644 index aea022be12..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3900.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Qbopper and JJRcop" -delete-after: True -changes: - - tweak: "The default internet sound volume was changed from 100 to 25. Stop complaining in OOC about your ears!" diff --git a/html/changelogs/AutoChangeLog-pr-3901.yml b/html/changelogs/AutoChangeLog-pr-3901.yml deleted file mode 100644 index ac91a766d7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3901.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nicn" -delete-after: True -changes: - - balance: "Damage from low pressure has been doubled." diff --git a/html/changelogs/AutoChangeLog-pr-3908.yml b/html/changelogs/AutoChangeLog-pr-3908.yml deleted file mode 100644 index bd69080a7d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3908.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Posters may no longer be placed on diagonal wall corners." diff --git a/html/changelogs/AutoChangeLog-pr-3912.yml b/html/changelogs/AutoChangeLog-pr-3912.yml deleted file mode 100644 index 85cf3a8454..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3912.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - rscadd: "Deep fryers now have sound." - - tweak: "Deep fryers now use cooking oil, a specialized reagent that becomes highly damaging at high temperatures. You can get it from grinding soybeans and meat." - - tweak: "Deep fryers now become more efficient with higher-level micro lasers, using less oil and frying faster." - - tweak: "Deep fryers now slowly use oil as it fries objects, instead of all at once." - - bugfix: "You can now correctly refill deep fryers with syringes and pills." - - rscadd: "Microwaves have new sounds!" diff --git a/html/changelogs/AutoChangeLog-pr-3913.yml b/html/changelogs/AutoChangeLog-pr-3913.yml deleted file mode 100644 index c2a59fe367..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3913.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Cobby" -delete-after: True -changes: - - rscadd: "The Xray now only hits the first mob it comes into contact with instead of being outright removed from the game." diff --git a/html/changelogs/AutoChangeLog-pr-3916.yml b/html/changelogs/AutoChangeLog-pr-3916.yml deleted file mode 100644 index e61e4d044c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3916.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Frozenguy5" -delete-after: True -changes: - - bugfix: "Broken cable cuffs no longer has an invisible sprite." diff --git a/html/changelogs/AutoChangeLog-pr-3919.yml b/html/changelogs/AutoChangeLog-pr-3919.yml deleted file mode 100644 index ab0e21a5d3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3919.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Floyd / Qustinnus" -delete-after: True -changes: - - soundadd: "Reebe now has ambience sounds" diff --git a/html/changelogs/AutoChangeLog-pr-3920.yml b/html/changelogs/AutoChangeLog-pr-3920.yml deleted file mode 100644 index 8111335f02..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3920.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LetterJay" -delete-after: True -changes: - - bugfix: "Flavor text can be examined again" diff --git a/html/changelogs/AutoChangeLog-pr-3951.yml b/html/changelogs/AutoChangeLog-pr-3951.yml deleted file mode 100644 index 6dcac4a2d3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3951.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "SpiderPsycho" -delete-after: True -changes: - - rscadd: "Added insects without fuzz" - - rscdel: "Removed fuzz" - - tweak: "changed the name of the fuzzless sprites to insects so the character creation can call them properly." diff --git a/html/changelogs/AutoChangeLog-pr-3959.yml b/html/changelogs/AutoChangeLog-pr-3959.yml deleted file mode 100644 index f89f2489dd..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3959.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "disable_warning wasn't getting checked and the chat was being spammed" diff --git a/html/changelogs/AutoChangeLog-pr-3960.yml b/html/changelogs/AutoChangeLog-pr-3960.yml deleted file mode 100644 index dd9ab1e232..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3960.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "cell chargers weren't animating properly" diff --git a/html/changelogs/AutoChangeLog-pr-3961.yml b/html/changelogs/AutoChangeLog-pr-3961.yml deleted file mode 100644 index 52f66a3b46..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3961.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ike709" -delete-after: True -changes: - - imageadd: "Added new vent and scrubber sprites by Partheo." diff --git a/html/changelogs/AutoChangeLog-pr-3964.yml b/html/changelogs/AutoChangeLog-pr-3964.yml deleted file mode 100644 index 6061524af8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3964.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "Atmos scrubbers (vent and portable) can now filter any and all gases." diff --git a/html/changelogs/AutoChangeLog-pr-3966.yml b/html/changelogs/AutoChangeLog-pr-3966.yml deleted file mode 100644 index 40cdd5ec13..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3966.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - bugfix: "Sped up saycode to remove free lag from highpop" diff --git a/html/changelogs/AutoChangeLog-pr-3967.yml b/html/changelogs/AutoChangeLog-pr-3967.yml deleted file mode 100644 index 28378bcc30..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3967.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DaxDupont" -delete-after: True -changes: - - tweak: "CentCom has issued a firmware updated for the operating computers. It is no longer needed to manually refresh the procedure and patient status." diff --git a/html/changelogs/AutoChangeLog-pr-3968.yml b/html/changelogs/AutoChangeLog-pr-3968.yml deleted file mode 100644 index 3430a1e8cb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3968.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JJRcop" -delete-after: True -changes: - - bugfix: "Fixes changeling eggs not putting the changeling in control if the brainslug is destroyed before hatching." diff --git a/html/changelogs/AutoChangeLog-pr-3969.yml b/html/changelogs/AutoChangeLog-pr-3969.yml deleted file mode 100644 index 7f53c200d6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3969.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "HUDs from mechs and helmets no longer conflict with HUD glasses and no longer inappropriately remove implanted HUDs." diff --git a/html/changelogs/AutoChangeLog-pr-3975.yml b/html/changelogs/AutoChangeLog-pr-3975.yml deleted file mode 100644 index 450706db1f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3975.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DaxDupont" -delete-after: True -changes: - - bugfix: "Proximity sensors no longer beep when unarmed." diff --git a/html/changelogs/AutoChangeLog-pr-3976.yml b/html/changelogs/AutoChangeLog-pr-3976.yml deleted file mode 100644 index b3d144e1de..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3976.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Iamgoofball" -delete-after: True -changes: - - spellcheck: "fixed grammar on output circuits" diff --git a/html/changelogs/AutoChangeLog-pr-3977.yml b/html/changelogs/AutoChangeLog-pr-3977.yml deleted file mode 100644 index a4916a713e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3977.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Iamgoofball" -delete-after: True -changes: - - spellcheck: "fixes grammar on list circuits" diff --git a/html/changelogs/AutoChangeLog-pr-3978.yml b/html/changelogs/AutoChangeLog-pr-3978.yml deleted file mode 100644 index 0840869b16..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3978.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Iamgoofball" -delete-after: True -changes: - - spellcheck: "fixes grammar on logic gate descriptions" diff --git a/html/changelogs/AutoChangeLog-pr-3979.yml b/html/changelogs/AutoChangeLog-pr-3979.yml deleted file mode 100644 index e9a21ef984..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3979.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Iamgoofball" -delete-after: True -changes: - - bugfix: "fixes grammar on trig circuits" diff --git a/html/changelogs/AutoChangeLog-pr-3980.yml b/html/changelogs/AutoChangeLog-pr-3980.yml deleted file mode 100644 index 09e3ebe5ef..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MMMiracles" -delete-after: True -changes: - - balance: "Power regen on the regular tesla relay has been reduced to 50, from 150." diff --git a/html/changelogs/AutoChangeLog-pr-3981.yml b/html/changelogs/AutoChangeLog-pr-3981.yml deleted file mode 100644 index 0670048ed3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3981.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nicbn" -delete-after: True -changes: - - soundadd: "Now rolling beds and office chairs have a sound!" diff --git a/html/changelogs/AutoChangeLog-pr-3983.yml b/html/changelogs/AutoChangeLog-pr-3983.yml deleted file mode 100644 index 0e3a681757..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3983.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "oranges" -delete-after: True -changes: - - rscdel: "Removed the shocker circuit" diff --git a/html/changelogs/AutoChangeLog-pr-3988.yml b/html/changelogs/AutoChangeLog-pr-3988.yml deleted file mode 100644 index 743551eaaa..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3988.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DaxDupont" -delete-after: True -changes: - - bugfix: "Plant trays will now properly process fluorine and adjust toxins and water contents." diff --git a/html/changelogs/AutoChangeLog-pr-3992.yml b/html/changelogs/AutoChangeLog-pr-3992.yml deleted file mode 100644 index b60be8068c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3992.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JJRcop" -delete-after: True -changes: - - tweak: "The silicon airlock menu looks a little more like it used to." diff --git a/html/changelogs/AutoChangeLog-pr-3993.yml b/html/changelogs/AutoChangeLog-pr-3993.yml deleted file mode 100644 index 14c4d31514..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3993.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "purple bartender suit and apron added to clothesmates!" - - rscadd: "long hair 3 added, check it out. both have sprites from okand!" diff --git a/html/changelogs/AutoChangeLog-pr-3994.yml b/html/changelogs/AutoChangeLog-pr-3994.yml deleted file mode 100644 index 2ff513ddf5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3994.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "The RPD has a shiny new UI!" - - rscadd: "The RPD can now paint pipes as it lays them, for quicker piping projects." diff --git a/html/changelogs/AutoChangeLog-pr-3995.yml b/html/changelogs/AutoChangeLog-pr-3995.yml deleted file mode 100644 index 77d6c658da..0000000000 --- a/html/changelogs/AutoChangeLog-pr-3995.yml +++ /dev/null @@ -1,20 +0,0 @@ -author: "ShizCalev (Upstream), WJohnston (Upstream), Okand37 (Upstream), deathride58" -delete-after: True -changes: - - tweak: "(Upstream) The computers on all maps have have been updated for the latest directional sprite changes. Please report any computers facing in strange directions to your nearest mapper." - - rscadd: "(Upstream) Updated the Test Map debugging verb to report more issues regarding APCs. -DELTASTATION" - - bugfix: "(Upstream) Reverted Okand37's morgue changes which broke power in the area." - - bugfix: "(Upstream) Corrected wrong area on the Southern airlock leading into electrical maintenance. -ALL STATIONS" - - bugfix: "(Upstream) Corrected numerous duplicate APCs in areas which led to power issues." - - rscdel: "(Upstream) Removes stationary docking ports for syndicate infiltrator ships on all maps. Use the docking navigator computer instead! This gives the white ship and syndicate infiltrator more room to navigate and place custom locations that are otherwise occupied by fixed shuttle landing zones that are rarely used." - - rscadd: "(Upstream, Deltastation) Tweaked Atmospherics" - - bugfix: "(Upstream, Deltastation) Fixed the Incinerator air injector" - - rscadd: "(Upstream, Deltastation) Tweaked Engineering" - - rscadd: "(Upstream, Deltastation) Added logs to the Chaplain's closet for gimmicks (bonfires)" - - rscadd: "(Upstream, Deltastation) Tweaked Security" - - bugfix: "(Upstream, Deltastation) Fixed medical morgue maintenance not providing radiation shielding and exterior chemistry windoor" - - rscadd: "(Upstream, Deltastation) Bar now has a door from the backroom to the theatre stage" - - rscadd: "(Upstream, Deltastation) Tweaked Locker Room/Dormitories" - - bugfix: "The armory no longer has a deep frying oil vat in place of dragnets." diff --git a/html/changelogs/AutoChangeLog-pr-4000.yml b/html/changelogs/AutoChangeLog-pr-4000.yml deleted file mode 100644 index bfd91f572d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4000.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - imageadd: "The Nanotrasen logo on modular computers has been fixed, rejoice!" diff --git a/html/changelogs/AutoChangeLog-pr-4005.yml b/html/changelogs/AutoChangeLog-pr-4005.yml deleted file mode 100644 index cf136090a6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4005.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "now lists should work properly" diff --git a/html/changelogs/AutoChangeLog-pr-4008.yml b/html/changelogs/AutoChangeLog-pr-4008.yml deleted file mode 100644 index 6d6b7d53b8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4008.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zennerx" -delete-after: True -changes: - - bugfix: "fixed a bug that made you try and scream while unconscious due to a fire" diff --git a/html/changelogs/AutoChangeLog-pr-4010.yml b/html/changelogs/AutoChangeLog-pr-4010.yml deleted file mode 100644 index b413fb1671..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4010.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Kor" -delete-after: True -changes: - - bugfix: "Blobbernauts will no longer spawn if a player is not selected to control it, preventing AI blobbernauts from running off the blob and to their deaths." diff --git a/html/changelogs/AutoChangeLog-pr-4012.yml b/html/changelogs/AutoChangeLog-pr-4012.yml deleted file mode 100644 index 18b4c3dfd2..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4012.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Toriate" -delete-after: True -changes: - - tweak: "Mag Pistol and Mag Rifle no longer spawn with magazines when built in protolathe" - - balance: "Nerf guns no longer max out science in five seconds flat" - - bugfix: "Nerf gun magazines no longer give infinite metal and glass" diff --git a/html/changelogs/AutoChangeLog-pr-4013.yml b/html/changelogs/AutoChangeLog-pr-4013.yml deleted file mode 100644 index 0507fafc72..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4013.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Fix some permanent-on and permanent-off bugs caused by the HUD stacking change." diff --git a/html/changelogs/AutoChangeLog-pr-4014.yml b/html/changelogs/AutoChangeLog-pr-4014.yml deleted file mode 100644 index 1a1698767d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4014.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Skylar Lineman, your local R&D moonlighter" -delete-after: True -changes: - - rscadd: "Research has been completely overhauled into the techweb system! No more levels, the station now unlocks research \"nodes\" with research points passively generated when there is atleast one research server properly cooled, powered, and online." - - rscadd: "R&D lab has been replaced by the departmental lathe system on the three major maps. Each department gets a lathe and possibly a circuit imprinter that only have designs assigned by that department." - - rscadd: "The ore redemption machine has been moved into cargo bay on maps with decentralized research to prevent the hallways from becoming a free for all. Honk!" - - balance: "You shouldn't expect balance as this is the initial merge. Please put all feedback and concerns on the forum so we can revise the system over the days, weeks, and months, to make this enjoyable for everyone. Heavily wanted are ideas of how to add more ways of generating points." - - balance: "You can get techweb points by setting off bombs with an active science doppler array listening. The bombs have to have a theoretical radius far above maxcap to make a difference. You can only go up, not down, in radius, so you can't get 6 times the points with 6 TTVs. The algorithm is exponentially/logarithmically scaled to prevent \"world destroyer\" bombs from instantly finishing research." diff --git a/html/changelogs/AutoChangeLog-pr-4022.yml b/html/changelogs/AutoChangeLog-pr-4022.yml deleted file mode 100644 index 295229de2b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4022.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Chairs, PA parts, infrared emitters, and doppler arrays will now rotate clockwise." diff --git a/html/changelogs/AutoChangeLog-pr-4026.yml b/html/changelogs/AutoChangeLog-pr-4026.yml deleted file mode 100644 index 3424fdd501..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4026.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - bugfix: "Using a chameleon projector will now dismount you from any vehicles you are riding, in order to prevent wacky space glitches and being sent to a realm outside space and time." diff --git a/html/changelogs/AutoChangeLog-pr-4027.yml b/html/changelogs/AutoChangeLog-pr-4027.yml deleted file mode 100644 index 925f8d5256..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4027.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ike709" -delete-after: True -changes: - - bugfix: "Fixed some computers facing the wrong direction." diff --git a/html/changelogs/AutoChangeLog-pr-4028.yml b/html/changelogs/AutoChangeLog-pr-4028.yml deleted file mode 100644 index 1af9360833..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4028.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Code by Pyko, Ported by Frozenguy5" -delete-after: True -changes: - - rscadd: "Rat Kebabs and Double Rat Kebabs have been added!" diff --git a/html/changelogs/AutoChangeLog-pr-4030.yml b/html/changelogs/AutoChangeLog-pr-4030.yml deleted file mode 100644 index ca630fbfd8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4030.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "zennerx" -delete-after: True -changes: - - tweak: "Skateboard crashes now give slight brain damage!" - - rscadd: "Using a helmet prevents brain damage from the skateboard!" diff --git a/html/changelogs/AutoChangeLog-pr-4031.yml b/html/changelogs/AutoChangeLog-pr-4031.yml deleted file mode 100644 index 4907986852..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4031.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - code_imp: "Ladders have been refactored and should be far less buggy." - - bugfix: "Jacob's ladder actually works again." diff --git a/html/changelogs/AutoChangeLog-pr-4032.yml b/html/changelogs/AutoChangeLog-pr-4032.yml deleted file mode 100644 index 4969c5bcaf..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4032.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "PubbyStation - Unpowered air injectors in various locations have been fixed." diff --git a/html/changelogs/AutoChangeLog-pr-4033.yml b/html/changelogs/AutoChangeLog-pr-4033.yml deleted file mode 100644 index effc283b83..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4033.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "MetaStation - Air injector leading out of the incinerator has been fixed" - - bugfix: "MetaStation - Corrected a couple maintenance airlocks being powered by the wrong areas." diff --git a/html/changelogs/AutoChangeLog-pr-4034.yml b/html/changelogs/AutoChangeLog-pr-4034.yml deleted file mode 100644 index eff19f0cfa..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4034.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Throwing drinking glasses and cartons will now consistently cause them to break!" diff --git a/html/changelogs/AutoChangeLog-pr-4036.yml b/html/changelogs/AutoChangeLog-pr-4036.yml deleted file mode 100644 index 820c726cea..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4036.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Computers will no longer rotate incorrectly when being deconstructed." - - bugfix: "You can now rotate computer frames during construction." diff --git a/html/changelogs/AutoChangeLog-pr-4038.yml b/html/changelogs/AutoChangeLog-pr-4038.yml deleted file mode 100644 index 9500855d83..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4038.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "WJohnston" -delete-after: True -changes: - - bugfix: "Green banded default airlocks now have extended click area like all other airlocks." diff --git a/html/changelogs/AutoChangeLog-pr-4043.yml b/html/changelogs/AutoChangeLog-pr-4043.yml deleted file mode 100644 index b867396350..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4043.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Francinum" -delete-after: True -changes: - - tweak: "The shuttle build plate is now better sized for all stations." diff --git a/html/changelogs/AutoChangeLog-pr-4049.yml b/html/changelogs/AutoChangeLog-pr-4049.yml deleted file mode 100644 index f2d883ca0d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4049.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "WJohnston" -delete-after: True -changes: - - imageadd: "A bunch of new turf decals for mappers to play with, coming in yellow, white, and red varieties!" diff --git a/html/changelogs/AutoChangeLog-pr-4050.yml b/html/changelogs/AutoChangeLog-pr-4050.yml deleted file mode 100644 index 85d49a56fe..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4050.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Computers will no longer delete themselves when being built, whoops!" diff --git a/html/changelogs/AutoChangeLog-pr-4051.yml b/html/changelogs/AutoChangeLog-pr-4051.yml deleted file mode 100644 index ee3ed953c1..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4051.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - refactor: "Old integrated circuit save file format is ditched in favor of JSON. Readability, both of save files and save code, is improved greatly." - - tweak: "Integrated circuit panels now open with screwdriver instead of crowbar, to match every single other thing on this server." - - tweak: "Integrated circuit printer now stores up to 25 metal sheets." - - bugfix: "Fixed integrated circuit rechargers not recharging guns properly and not updating icons." - - bugfix: "Fixed multiple bugs in integrated circuits UIs, improved overall usability." diff --git a/html/changelogs/AutoChangeLog-pr-4052.yml b/html/changelogs/AutoChangeLog-pr-4052.yml deleted file mode 100644 index ad7e91b332..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4052.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Humans missing legs or are legcuffed will no longer move slower in areas without gravity." diff --git a/html/changelogs/AutoChangeLog-pr-4053.yml b/html/changelogs/AutoChangeLog-pr-4053.yml deleted file mode 100644 index 9f749a63a5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4053.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Toriate" -delete-after: True -changes: - - rscadd: "Added recolourable clothes" - - tweak: "jumpsuits in mixed wardrobe replaced with recolourable clothes" - - imageadd: "greyscaled clothing sprites for colourable clothes" diff --git a/html/changelogs/AutoChangeLog-pr-4055.yml b/html/changelogs/AutoChangeLog-pr-4055.yml deleted file mode 100644 index 618a46b39c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4055.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "The structures external to stations are now properly lit. Make sure you bring a flashlight." diff --git a/html/changelogs/AutoChangeLog-pr-4059.yml b/html/changelogs/AutoChangeLog-pr-4059.yml deleted file mode 100644 index 1742cf5805..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4059.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "psykzz" -delete-after: True -changes: - - rscadd: "Added TGUI for Turbine computer" diff --git a/html/changelogs/AutoChangeLog-pr-4060.yml b/html/changelogs/AutoChangeLog-pr-4060.yml deleted file mode 100644 index 7846d861f4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4060.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Y0SH1 M4S73R" -delete-after: True -changes: - - spellcheck: "The R&D Server's name is now improper." - - spellcheck: "The R&D Server now has an explanation of what it does." diff --git a/html/changelogs/AutoChangeLog-pr-4064.yml b/html/changelogs/AutoChangeLog-pr-4064.yml deleted file mode 100644 index 90f52d39aa..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4064.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "jammer312" -delete-after: True -changes: - - bugfix: "fixed conjuration spells forgetting about conjured items" diff --git a/html/changelogs/AutoChangeLog-pr-4066.yml b/html/changelogs/AutoChangeLog-pr-4066.yml deleted file mode 100644 index 6858021004..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4066.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - code_imp: "Chasm code has been refactored to be more sane." - - bugfix: "Building lattices over chasms no longer sometimes deletes the chasm." diff --git a/html/changelogs/AutoChangeLog-pr-4067.yml b/html/changelogs/AutoChangeLog-pr-4067.yml deleted file mode 100644 index 103a03d08a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4067.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Space cats will no longer have a smashed helmet when they lay down." diff --git a/html/changelogs/AutoChangeLog-pr-4069.yml b/html/changelogs/AutoChangeLog-pr-4069.yml deleted file mode 100644 index c6832bbbf7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4069.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - admin: "\"ahelp\" chat command can now accept a ticket number as opposed to a ckey" diff --git a/html/changelogs/AutoChangeLog-pr-4072.yml b/html/changelogs/AutoChangeLog-pr-4072.yml deleted file mode 100644 index 88296b7a45..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4072.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - code_imp: "Added round id to the status world topic" diff --git a/html/changelogs/AutoChangeLog-pr-4075.yml b/html/changelogs/AutoChangeLog-pr-4075.yml deleted file mode 100644 index d627c00d1f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4075.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "GupGup" -delete-after: True -changes: - - bugfix: "Fixes hostile mobs attacking surrounding tiles when trying to attack someone" diff --git a/html/changelogs/AutoChangeLog-pr-4076.yml b/html/changelogs/AutoChangeLog-pr-4076.yml deleted file mode 100644 index b40f213dd3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4076.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - rscadd: "Added two new symptoms: one allows viruses to still work while dead, and allows infection of undead species, and one allows infection of inorganic species (such as plasmapeople or golems)." diff --git a/html/changelogs/AutoChangeLog-pr-4077.yml b/html/changelogs/AutoChangeLog-pr-4077.yml deleted file mode 100644 index 56e6ca4c9e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4077.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Aliens in soft-crit will now use the correct sprite." diff --git a/html/changelogs/AutoChangeLog-pr-4080.yml b/html/changelogs/AutoChangeLog-pr-4080.yml deleted file mode 100644 index d10288ec03..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4080.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MrStonedOne and Jordie" -delete-after: True -changes: - - server: "As a late note, serverops be advise that mysql is no longer supported. existing mysql databases will need to be converted to mariadb" diff --git a/html/changelogs/AutoChangeLog-pr-4084.yml b/html/changelogs/AutoChangeLog-pr-4084.yml deleted file mode 100644 index ddd147e1e0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4084.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "The vault in boxstation now has power again." - - bugfix: "The gravity generator in boxstation now has power again." - - bugfix: "Various broken decals in boxstation have been fixed." - - bugfix: "The clown and mime offices no longer have APCs pointing to the wrong areas." - - rscadd: "Boxstation's secure cell has been readded to security." diff --git a/html/changelogs/AutoChangeLog-pr-4095.yml b/html/changelogs/AutoChangeLog-pr-4095.yml deleted file mode 100644 index dd5036cb59..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4095.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - rscdel: "Removed \"console screen\" stock part. Just use glass sheets instead." diff --git a/html/changelogs/AutoChangeLog-pr-4099.yml b/html/changelogs/AutoChangeLog-pr-4099.yml deleted file mode 100644 index ac5424fd57..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4099.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - bugfix: "Custom shuttle dockers can no longer place docking regions inside other custom docker regions." diff --git a/html/changelogs/AutoChangeLog-pr-4100.yml b/html/changelogs/AutoChangeLog-pr-4100.yml deleted file mode 100644 index e8abc00b9e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4100.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Fix water misters being inappropriately glued to hands in some cases." diff --git a/html/changelogs/AutoChangeLog-pr-4105.yml b/html/changelogs/AutoChangeLog-pr-4105.yml deleted file mode 100644 index 1ce922ad64..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4105.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "More Robust Than You" -delete-after: True -changes: - - tweak: "Spessmen are now smart enough to realize you don't need to turn around to pull cigarette butts" diff --git a/html/changelogs/AutoChangeLog-pr-4106.yml b/html/changelogs/AutoChangeLog-pr-4106.yml deleted file mode 100644 index 326d296e90..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4106.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Some misplaced decals in the Hotel brig have been corrected." diff --git a/html/changelogs/AutoChangeLog-pr-4110.yml b/html/changelogs/AutoChangeLog-pr-4110.yml deleted file mode 100644 index cd94f6dae7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4110.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CosmicScientist" -delete-after: True -changes: - - bugfix: "bolas are back in tablecrafting!" diff --git a/html/changelogs/AutoChangeLog-pr-4111.yml b/html/changelogs/AutoChangeLog-pr-4111.yml deleted file mode 100644 index 1019538b17..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4111.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - bugfix: "Fixes thermite burning hotter than the boiling point of stone" diff --git a/html/changelogs/AutoChangeLog-pr-4112.yml b/html/changelogs/AutoChangeLog-pr-4112.yml deleted file mode 100644 index 12412931b6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4112.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "AIs and cyborgs can interact with unscrewed airlocks and APCs." diff --git a/html/changelogs/AutoChangeLog-pr-4116.yml b/html/changelogs/AutoChangeLog-pr-4116.yml deleted file mode 100644 index 877ad76460..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4116.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Dorsisdwarf" -delete-after: True -changes: - - tweak: "Catpeople are now distracted instead of debilitated" - - rscadd: "Normal cats now go for laser pointers" diff --git a/html/changelogs/AutoChangeLog-pr-4117.yml b/html/changelogs/AutoChangeLog-pr-4117.yml deleted file mode 100644 index bb2c70bccc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4117.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "You can no longer buckle people to roller beds from inside of a locker." diff --git a/html/changelogs/AutoChangeLog-pr-4121.yml b/html/changelogs/AutoChangeLog-pr-4121.yml deleted file mode 100644 index a226595420..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4121.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zennerx" -delete-after: True -changes: - - bugfix: "Zombies don't reanimate with no head!" diff --git a/html/changelogs/AutoChangeLog-pr-4124.yml b/html/changelogs/AutoChangeLog-pr-4124.yml deleted file mode 100644 index e568f3e9df..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4124.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "WJohnston" -delete-after: True -changes: - - bugfix: "Fixed a case where items would sometimes be placed underneath racks." diff --git a/html/changelogs/AutoChangeLog-pr-4125.yml b/html/changelogs/AutoChangeLog-pr-4125.yml deleted file mode 100644 index a8f5bdbe86..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4125.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - bugfix: "Hopefully fixed mesons granting the ability to hear people through walls." diff --git a/html/changelogs/AutoChangeLog-pr-4126.yml b/html/changelogs/AutoChangeLog-pr-4126.yml deleted file mode 100644 index 42689125e8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4126.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Cryo cells can now be properly rotated with a wrench." diff --git a/html/changelogs/AutoChangeLog-pr-4127.yml b/html/changelogs/AutoChangeLog-pr-4127.yml deleted file mode 100644 index b9f6abc58d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4127.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "More Robust Than You" -delete-after: True -changes: - - bugfix: "Fixed cult leaders being de-culted upon election if they had a mindshield implant" diff --git a/html/changelogs/AutoChangeLog-pr-4129.yml b/html/changelogs/AutoChangeLog-pr-4129.yml deleted file mode 100644 index 16d3765876..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4129.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - rscadd: "You can now make a new tasty traditional treat: butterdogs. Watch out, they're slippery." diff --git a/html/changelogs/AutoChangeLog-pr-4133.yml b/html/changelogs/AutoChangeLog-pr-4133.yml deleted file mode 100644 index 2b50fbd4ea..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4133.yml +++ /dev/null @@ -1,14 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - balance: "Viruses' healing symptoms have been reworked!" - - rscdel: "All existing healing symptoms have been removed in favour of new ones." - - rscdel: "Weight Even and Weight Gain have been removed, so hunger can be used for balancing in symptoms." - - rscadd: "Starlight Condensation heals toxin damage if you're in space using starlight as a catalyst. Being up to two tiles away also works, as long as you can still see it, but slower." - - rscadd: "Toxolysis (level 7) rapidly cleanses all chemicals from the body, with no exception." - - rscadd: "Cellular Molding heals brute damage depending on your body temperature: the higher the temperature, the faster the healing. Requires above-average temperature to activate, and the speed heavily increases while on fire." - - rscadd: "Regenerative Coma (level 8) causes the virus to send you into a deep coma when you are heavily damaged (>70 brute+burn damage). While you are unconscious, either from the virus or from other sources, the virus will heal both brute and burn damage fairly quickly. Sleeping also works, but at reduced speed." - - rscadd: "Tissue Hydration heals burn damage if you are wet (negative fire stacks) or if you have water in your bloodstream." - - rscadd: "Plasma Fixation (level 8) stabilizes temperature and heals burns while plasma is in your body or while standing in a plasma cloud. Does not protect from the poisoning effects of plasma." - - rscadd: "Radioactive Resonance gives a mild constant brute and burn healing while irradiated. The healing becomes more intense if you reach higher levels of radiation, but is still less than the alternatives." - - rscadd: "Metabolic Boost (level 7) doubles the rate at which you process chemicals, good and bad, but also increases hunger tenfold." diff --git a/html/changelogs/AutoChangeLog-pr-4136.yml b/html/changelogs/AutoChangeLog-pr-4136.yml deleted file mode 100644 index 0737b28919..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4136.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - rscadd: "New integrated circuit components: list constructors/deconstructors. Useful for building lists and taking them apart." - - bugfix: "Fixed multiple bugs in integrated circuits UIs, improved overall usability." diff --git a/html/changelogs/AutoChangeLog-pr-4143.yml b/html/changelogs/AutoChangeLog-pr-4143.yml deleted file mode 100644 index dc1f281cec..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4143.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "rejiggered botcode a little bit" diff --git a/html/changelogs/AutoChangeLog-pr-4144.yml b/html/changelogs/AutoChangeLog-pr-4144.yml deleted file mode 100644 index bcefc8437a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4144.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "You can make many different types of office and comfy chairs with metal" - - tweak: "Stack menus use /datum/browser" diff --git a/html/changelogs/AutoChangeLog-pr-4145.yml b/html/changelogs/AutoChangeLog-pr-4145.yml deleted file mode 100644 index c7b269b20f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4145.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "improvedname" -delete-after: True -changes: - - tweak: "toolbelts can now carry geiger counters" diff --git a/html/changelogs/AutoChangeLog-pr-4149.yml b/html/changelogs/AutoChangeLog-pr-4149.yml deleted file mode 100644 index 909fc3e1b9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4149.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JJRcop" -delete-after: True -changes: - - admin: "Fixed the Make space ninja verb." diff --git a/html/changelogs/AutoChangeLog-pr-4150.yml b/html/changelogs/AutoChangeLog-pr-4150.yml deleted file mode 100644 index 943af018e5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4150.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - rscdel: "Mass-spectrometers are removed. Would anyone notice if not for this changelog entry?" diff --git a/html/changelogs/AutoChangeLog-pr-4152.yml b/html/changelogs/AutoChangeLog-pr-4152.yml deleted file mode 100644 index df1b1cd09f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4152.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ACCount" -delete-after: True -changes: - - rscdel: "\"Machine prototype\" is removed from the game." diff --git a/html/changelogs/AutoChangeLog-pr-4155.yml b/html/changelogs/AutoChangeLog-pr-4155.yml deleted file mode 100644 index 0f762fae2e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4155.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "AI and observer diagnostic huds will now show the astar path of all bots, and Pai bots will be given a visible path to follow when called by the AI." diff --git a/html/changelogs/AutoChangeLog-pr-4162.yml b/html/changelogs/AutoChangeLog-pr-4162.yml deleted file mode 100644 index be4968592e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4162.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - tweak: "The sloth no longer suspiciously moves fast when gliding between tiles." - - balance: "The sloth's movespeed when inhabited by a player has been lowered from once every 1/5 of a second to once every second." diff --git a/html/changelogs/AutoChangeLog-pr-4170.yml b/html/changelogs/AutoChangeLog-pr-4170.yml deleted file mode 100644 index f54be6c190..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4170.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - tweak: "Reduced the max volume of sm by 1/5th and made the upper bounds only play mid delamination." diff --git a/html/changelogs/AutoChangeLog-pr-4171.yml b/html/changelogs/AutoChangeLog-pr-4171.yml deleted file mode 100644 index 612f5ad379..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4171.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "psykzz" -delete-after: True -changes: - - bugfix: "Fixing the broken turbine computer" diff --git a/html/changelogs/AutoChangeLog-pr-4172.yml b/html/changelogs/AutoChangeLog-pr-4172.yml deleted file mode 100644 index a2dac53175..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4172.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - tweak: "Damage examinations now include a \"moderate\" classification. Before minor was <30 and severe was anything 30 or above. Now minor is <25, moderate is 25 to <50, and severe is 50+." diff --git a/html/changelogs/AutoChangeLog-pr-4175.yml b/html/changelogs/AutoChangeLog-pr-4175.yml deleted file mode 100644 index 1eed117c43..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4175.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - imageadd: "Construct shells have a new animated sprite" diff --git a/html/changelogs/AutoChangeLog-pr-4176.yml b/html/changelogs/AutoChangeLog-pr-4176.yml deleted file mode 100644 index 76ccbf0925..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4176.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "Toriate" -delete-after: True -changes: - - rscadd: "Added Lavaknights, a new ghost role of cat people in knight armor." - - rscadd: "Added Hypereutactic blades, NEBs on steroids." - - tweak: "Made NEBs alt click to recolor -wip: Added lavaknight spawners. Someone else needs to add it in to a map or ruin properly." - - imageadd: "added sprites for hypereutactic blades" diff --git a/html/changelogs/AutoChangeLog-pr-4177.yml b/html/changelogs/AutoChangeLog-pr-4177.yml deleted file mode 100644 index f6e65ed068..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4177.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - balance: "Clockwork magicks will now prevent Bags of Holding from being combined on Reebe." diff --git a/html/changelogs/AutoChangeLog-pr-4180.yml b/html/changelogs/AutoChangeLog-pr-4180.yml deleted file mode 100644 index fb6248b653..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4180.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - bugfix: "Flashes will now burn out AFTER flashing when they fail instead of being a ticking time bomb that waits to screw you over on your next attempt." diff --git a/html/changelogs/AutoChangeLog-pr-4182.yml b/html/changelogs/AutoChangeLog-pr-4182.yml deleted file mode 100644 index 6d0c949e11..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4182.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Frozenguy5" -delete-after: True -changes: - - tweak: "The Particle Accelerator's wires can no longer be EMP'd" diff --git a/html/changelogs/AutoChangeLog-pr-4184.yml b/html/changelogs/AutoChangeLog-pr-4184.yml deleted file mode 100644 index f97a70a206..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4184.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CosmicScientist" -delete-after: True -changes: - - rscadd: "You can make plushies kiss one another!" diff --git a/html/changelogs/AutoChangeLog-pr-4186.yml b/html/changelogs/AutoChangeLog-pr-4186.yml deleted file mode 100644 index 86951d81f1..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4186.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "Cleans up some loc assignments" diff --git a/html/changelogs/AutoChangeLog-pr-4191.yml b/html/changelogs/AutoChangeLog-pr-4191.yml deleted file mode 100644 index 5904f70b86..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4191.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "BeeSting12" -delete-after: True -changes: - - spellcheck: "Occupand ---> Occupant on opened cryogenic pods." - - spellcheck: "Cyrogenic ---> Cryogenic on opened cryogenic pods." diff --git a/html/changelogs/AutoChangeLog-pr-4196.yml b/html/changelogs/AutoChangeLog-pr-4196.yml deleted file mode 100644 index 49ab9fdbd9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4196.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zennerx" -delete-after: True -changes: - - spellcheck: "fixed some typos in the weapon firing mechanism description" diff --git a/html/changelogs/AutoChangeLog-pr-4198.yml b/html/changelogs/AutoChangeLog-pr-4198.yml deleted file mode 100644 index 93e2f2212a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4198.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - rscadd: "Light fixtures now turn an ominous, dim red color when they lose power, and draw from an internal power cell to maintain it until either the cell dies (usually after 10 minutes) or power is restored." - - rscadd: "You can override emergency light functionality from an APC. You can also click on individual lights as a cyborg or AI to override them individually. Traitor AIs also have a new ability that disables emergency lights across the entire station." diff --git a/html/changelogs/AutoChangeLog-pr-4200.yml b/html/changelogs/AutoChangeLog-pr-4200.yml deleted file mode 100644 index a2321590c7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4200.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "You can now lay (buckle!) yourself to a bed to avoid being burnt to a crisp during \"the floor is lava\" event." diff --git a/html/changelogs/AutoChangeLog-pr-4201.yml b/html/changelogs/AutoChangeLog-pr-4201.yml deleted file mode 100644 index 127a8b26ed..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4201.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - tweak: "Igniting plasma statues no longer ignores ignition temperature and only creates as much plasma as was used in its creation." diff --git a/html/changelogs/AutoChangeLog-pr-4207.yml b/html/changelogs/AutoChangeLog-pr-4207.yml deleted file mode 100644 index 692dca99ed..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4207.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - bugfix: "You now need fuel in your welder to repair mechs." diff --git a/html/changelogs/AutoChangeLog-pr-4209.yml b/html/changelogs/AutoChangeLog-pr-4209.yml deleted file mode 100644 index ee1613d170..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4209.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "You can now record and replay holopad messages using holodisks." - - rscadd: "Holodisks are printable in autolathes." diff --git a/html/changelogs/AutoChangeLog-pr-4215.yml b/html/changelogs/AutoChangeLog-pr-4215.yml deleted file mode 100644 index 6e4fe16805..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4215.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - rscadd: "Nanotrasen is happy to announce the pinnacle in plasma research! The Disco Inferno shuttle design is the result of decades of plasma research. Burn, baby, burn!" diff --git a/html/changelogs/AutoChangeLog-pr-4216.yml b/html/changelogs/AutoChangeLog-pr-4216.yml deleted file mode 100644 index 8b39d4aa94..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4216.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - tweak: "Stethoscopes now inform the user if the target can be defibrillated; the user will hear a \"faint, fluttery pulse.\"" diff --git a/html/changelogs/AutoChangeLog-pr-4218.yml b/html/changelogs/AutoChangeLog-pr-4218.yml deleted file mode 100644 index 334c16e021..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4218.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - spellcheck: "Energy values are now measured in joules. What was previously 1 unit is now 1 kJ." diff --git a/html/changelogs/AutoChangeLog-pr-4220.yml b/html/changelogs/AutoChangeLog-pr-4220.yml deleted file mode 100644 index 7287bee043..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4220.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - sounddel: "Reduced the volume of showers" diff --git a/html/changelogs/AutoChangeLog-pr-4234.yml b/html/changelogs/AutoChangeLog-pr-4234.yml deleted file mode 100644 index 3310bdb750..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4234.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Syndicate uplink implants now work again." diff --git a/html/changelogs/AutoChangeLog-pr-4235.yml b/html/changelogs/AutoChangeLog-pr-4235.yml deleted file mode 100644 index 35197c0edf..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4235.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - rscdel: "Reverted changes in 3d sound system that tripled the distance that sound would carry." diff --git a/html/changelogs/AutoChangeLog-pr-4240.yml b/html/changelogs/AutoChangeLog-pr-4240.yml deleted file mode 100644 index bb77fc8cd8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4240.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "Quiet areas of libraries on station have now been equipped with a -vending machine containing suitable recreational activities." diff --git a/html/changelogs/AutoChangeLog-pr-4241.yml b/html/changelogs/AutoChangeLog-pr-4241.yml deleted file mode 100644 index 77a17bb5b1..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4241.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "The drone dispenser on Metastation has been moved to the -maintenance by Robotics." diff --git a/html/changelogs/AutoChangeLog-pr-4243.yml b/html/changelogs/AutoChangeLog-pr-4243.yml deleted file mode 100644 index 4971528f94..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4243.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Revenant Defile ability" -delete-after: True -changes: - - bugfix: "Revenant's Defile now removes salt piles" diff --git a/html/changelogs/AutoChangeLog-pr-4244.yml b/html/changelogs/AutoChangeLog-pr-4244.yml deleted file mode 100644 index d1081a8801..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4244.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont & Alek2ander" -delete-after: True -changes: - - tweak: "Binary chat messages been made more visible." diff --git a/html/changelogs/AutoChangeLog-pr-4246.yml b/html/changelogs/AutoChangeLog-pr-4246.yml deleted file mode 100644 index 555f050d39..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4246.yml +++ /dev/null @@ -1,16 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - rscadd: "Brain damage has been completely reworked! -remove: Brain damage now no longer simply makes you dumb. Although most of its effects have been shifted into a brain trauma." - - rscadd: "Every time you take brain damage, there's a chance you'll suffer a brain trauma. There are many variations of brain traumas, split in mild, severe, and special." - - rscadd: "Mild brain traumas are the easiest to get, can be lightly to moderately annoying, and can be cured with mannitol and time." - - rscadd: "Severe brain traumas are much rarer and require extensive brain damage before you have a chance to get them; they are usually very debilitating. Unlike mild traumas, they require surgery to cure. A new surgery procedure has been added for this, the aptly named Brain Surgery. It can also heal minor traumas." - - rscadd: "Special brain traumas are rarely gained in place of Severe traumas: they are either complex or beneficial. -However, they are also even easier to cure than mild traumas, which means that keeping these will usually mean keeping a mild trauma along with it." - - rscadd: "Mobs can only naturally have one mild trauma and one severe or special trauma." - - balance: "Brain damage will now kill and ruin the brain if it goes above 200. If it somehow goes above 400, the brain will melt and be destroyed completely." - - balance: "Many brain-damaging effects have been given a damage cap, making them non-lethal." - - rscdel: "The Unintelligible mutation has been removed and made into a brain trauma." - - rscdel: "Brain damage no longer makes using machines a living hell." - - rscadd: "Abductors give minor traumas to people they experiment on." diff --git a/html/changelogs/AutoChangeLog-pr-4250.yml b/html/changelogs/AutoChangeLog-pr-4250.yml deleted file mode 100644 index 7539b323a8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4250.yml +++ /dev/null @@ -1,16 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - rscadd: "Added the Eminence role to clockcult! Players can elect themselves or ghosts as the Eminence from the eminence spire structure on Reebe." - - rscadd: "The Eminence is incorporeal and invisible, and directs the entire cult. Anything they say is heard over the Hierophant network, and they can issue commands by middle-clicking themselves or different turfs." - - rscadd: "The Eminence also has a single-use mass recall that warps all servants to the Ark chamber." - - rscadd: "Added traps, triggers, and brass filaments to link them. They can all be constructed from brass sheets, and do different things and trigger in different ways. Current traps include the brass skewer and steam vent, and triggers include the pressure sensor, lever, and repeater." - - rscadd: "The Eminence can activate trap triggers by clicking on them!" - - rscadd: "Servants can deconstruct traps instantly with a wrench." - - rscdel: "Mending Mantra has been removed." - - tweak: "Clockwork scriptures have been recolored and sorted based on their functions; yellow scriptures are for construction, red for offense, blue for defense, and purple for niche." - - balance: "Servants now spawn with a PDA and black shoes to make disguise more feasible." - - balance: "The Eminence can superheat up to 20 clockwork walls at a time. Superheated walls are immune to hulk and mech punches, but can still be broken conventionally." - - balance: "Clockwork walls are slightly faster to build before the Ark activates, taking an extra second less." - - bugfix: "Poly no longer continually undergoes binary fission when Ratvar is in range." - - code_imp: "The global records alert for servants will no longer display info that doesn't affect them since the rework." diff --git a/html/changelogs/AutoChangeLog-pr-4254.yml b/html/changelogs/AutoChangeLog-pr-4254.yml deleted file mode 100644 index cdfa4c7c0b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4254.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - bugfix: "Games vending machines can now properly be rebuilt." - - bugfix: "Games vending machines can now be refilled via supply crates." - - rscadd: "Games Supply Crates have been added to the cargo console." diff --git a/html/changelogs/AutoChangeLog-pr-4259.yml b/html/changelogs/AutoChangeLog-pr-4259.yml deleted file mode 100644 index 7536cfa7a6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4259.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "Action buttons now remember positions where you locked." - - tweak: "Now locking action buttons prevents them from being reset." diff --git a/html/changelogs/AutoChangeLog-pr-4260.yml b/html/changelogs/AutoChangeLog-pr-4260.yml deleted file mode 100644 index 1880edb973..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4260.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - rscadd: "You can now make pet carriers from the autolathe, to carry around chef meat and other small animals without having to drag them. The HoP, captain, and CMO also start with carriers in their lockers for their pets." diff --git a/html/changelogs/AutoChangeLog-pr-4261.yml b/html/changelogs/AutoChangeLog-pr-4261.yml deleted file mode 100644 index d7b0bcebf5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4261.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - tweak: "Slime blueprints can now make an area compatible with Xenobio consoles, regardless of the name of the new area" diff --git a/html/changelogs/AutoChangeLog-pr-4264.yml b/html/changelogs/AutoChangeLog-pr-4264.yml deleted file mode 100644 index 3a3b5c1f42..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4264.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "You now can get a medal for wasting hours talking to the secret debug tile." - - bugfix: "Fixed runtime for the tile when poly's speech file doesn't exist." diff --git a/html/changelogs/AutoChangeLog-pr-4266.yml b/html/changelogs/AutoChangeLog-pr-4266.yml deleted file mode 100644 index e66348d5b4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4266.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Fixed the camera failure, race swap, cursed items, and imposter wizard random events" - - tweak: "The cursed items event no longer nullspaces items" diff --git a/html/changelogs/AutoChangeLog-pr-4267.yml b/html/changelogs/AutoChangeLog-pr-4267.yml deleted file mode 100644 index 97e3a17b9a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4267.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MrDoomBringer" -delete-after: True -changes: - - imageadd: "All stations have been outfitted with brand new Smoke Machines! They have nicer sprites now!" diff --git a/html/changelogs/AutoChangeLog-pr-4270.yml b/html/changelogs/AutoChangeLog-pr-4270.yml deleted file mode 100644 index 06c99c93ee..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4270.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - config: "The default view range can now be defined in the config. The default is 15x15, which is simplified to 7 by BYOND. For reference, Goonstation's widescreen range is 21x15. Do note that changing this value will affect the title screen. The title screen images and the title screen area on the Centcom z-level will have to be updated if the default view range is changed." diff --git a/html/changelogs/AutoChangeLog-pr-4272.yml b/html/changelogs/AutoChangeLog-pr-4272.yml deleted file mode 100644 index 8bedafab45..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4272.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "The drone dispenser on Box Station has been moved from the Testing -Lab to the Morgue/Robotics maintenance tunnel." diff --git a/html/changelogs/AutoChangeLog-pr-4274.yml b/html/changelogs/AutoChangeLog-pr-4274.yml deleted file mode 100644 index b1915f089b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4274.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - bugfix: "Fixed observer chat flavor of silicon chat." diff --git a/html/changelogs/AutoChangeLog-pr-4279.yml b/html/changelogs/AutoChangeLog-pr-4279.yml deleted file mode 100644 index cddc887068..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4279.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Dax Dupont" -delete-after: True -changes: - - bugfix: "Grilles now no longer revert to a pre-broken icon state when you hit them after they broke." diff --git a/html/changelogs/AutoChangeLog-pr-4283.yml b/html/changelogs/AutoChangeLog-pr-4283.yml deleted file mode 100644 index a96b866609..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4283.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - tweak: "The pAI software interface is now accessible via an action button." diff --git a/html/changelogs/AutoChangeLog-pr-4286.yml b/html/changelogs/AutoChangeLog-pr-4286.yml deleted file mode 100644 index 83ede8f21d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4286.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "External airlocks of the mining base and gulag are now cycle-linked." diff --git a/html/changelogs/AutoChangeLog-pr-4287.yml b/html/changelogs/AutoChangeLog-pr-4287.yml deleted file mode 100644 index 55bbeb05c2..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4287.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - tweak: "Instead of activating randomly on speech, Godwoken Syndrome randomly grants inspiration, causing the next message to be a Voice of God." diff --git a/html/changelogs/AutoChangeLog-pr-4289.yml b/html/changelogs/AutoChangeLog-pr-4289.yml deleted file mode 100644 index d0da6e0f58..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4289.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "Nanotrasen would like to remind crewmembers and especially medical personnel to stand clear of cadeavers before applying a defibrillator shock. (You get shocked if you're pulling/grabbing someone being defibbed.)" - - tweak: "defib shock/charge sounds upped from 50% to 75%." diff --git a/html/changelogs/AutoChangeLog-pr-4290.yml b/html/changelogs/AutoChangeLog-pr-4290.yml deleted file mode 100644 index a7a034433f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4290.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Swindly" -delete-after: True -changes: - - rscadd: "You can kill yourself with a few more items." diff --git a/html/changelogs/AutoChangeLog-pr-4292.yml b/html/changelogs/AutoChangeLog-pr-4292.yml deleted file mode 100644 index 14dda4b668..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4292.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - tweak: "Flickering lights will now actually flicker and not go between emergency lights and normal lighting." diff --git a/html/changelogs/AutoChangeLog-pr-4296.yml b/html/changelogs/AutoChangeLog-pr-4296.yml deleted file mode 100644 index 1e87a3fdaf..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4296.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - bugfix: "Emergency lights no longer stay on forever in some cases." diff --git a/html/changelogs/AutoChangeLog-pr-4305.yml b/html/changelogs/AutoChangeLog-pr-4305.yml deleted file mode 100644 index d6ae57f28d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4305.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "The MULEbots that the station starts with now show their ID numbers." diff --git a/html/changelogs/AutoChangeLog-pr-4306.yml b/html/changelogs/AutoChangeLog-pr-4306.yml deleted file mode 100644 index 0a6361f11d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4306.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Improvedname" -delete-after: True -changes: - - tweak: "cats now drop their ears and tail when butchered." diff --git a/html/changelogs/AutoChangeLog-pr-4312.yml b/html/changelogs/AutoChangeLog-pr-4312.yml deleted file mode 100644 index 8c05f5d79e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4312.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - bugfix: "Modes not in rotation have had their \"false report\" weights for the Command Report standardized" diff --git a/html/changelogs/AutoChangeLog-pr-4313.yml b/html/changelogs/AutoChangeLog-pr-4313.yml deleted file mode 100644 index a1124c765a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4313.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - tweak: "The white ship navigation computer now takes 10 seconds to designate a landing spot, and users can no longer see the syndicate shuttle or its custom landing location. If the white ship landing location would intersect the syndicate shuttle or its landing location, it will fail after the 10 seconds have elapsed." diff --git a/html/changelogs/AutoChangeLog-pr-4314.yml b/html/changelogs/AutoChangeLog-pr-4314.yml deleted file mode 100644 index e471271981..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4314.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "flightsuits should no longer disappear when you take them off involuntarily" - - bugfix: "beam rifles actually fire striaght now" - - bugfix: "click catchers now actually work" - - bugfix: "you no longer see space in areas you normally can't see, instead of black. in reality you can still see space but it's faint enough that you can't tell so I'll say I fixed it." diff --git a/html/changelogs/AutoChangeLog-pr-4315.yml b/html/changelogs/AutoChangeLog-pr-4315.yml deleted file mode 100644 index a021f0ccc4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4315.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "Added MANY new types of airlock assembly that can be built with metal. Use metal in hand to see the new airlock assembly recipes." - - rscadd: "Added new airlock types to the RCD and airlock painter" - - rscadd: "Vault door assemblies can be built with 8 plasteel, high security assemblies with 6 plasteel" - - rscadd: "Glass mineral airlocks are finally constructible. Use glass and mineral sheets on an airlock assembly in any order to make them." - - tweak: "Glass and mineral sheets are now able to be welded out of door assemblies rather than having to deconstruct the whole thing" - - rscdel: "Airlock painter no longer works on airlock assemblies (still works on airlocks)" - - bugfix: "Titanium airlocks no longer have any missing overlays" diff --git a/html/changelogs/AutoChangeLog-pr-4319.yml b/html/changelogs/AutoChangeLog-pr-4319.yml deleted file mode 100644 index 851d5f12bc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4319.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Frozenguy5" -delete-after: True -changes: - - balance: "Some hardsuits have had their melee, fire and rad armor ratings tweaked." diff --git a/html/changelogs/AutoChangeLog-pr-4331.yml b/html/changelogs/AutoChangeLog-pr-4331.yml deleted file mode 100644 index 04532aa4a8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4331.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Swindly" -delete-after: True -changes: - - bugfix: "Swarmers can no longer deconstruct objects with living things in them." diff --git a/html/changelogs/AutoChangeLog-pr-4338.yml b/html/changelogs/AutoChangeLog-pr-4338.yml deleted file mode 100644 index da4fde1e23..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4338.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "You can now print telecomms equipment again." diff --git a/html/changelogs/AutoChangeLog-pr-4339.yml b/html/changelogs/AutoChangeLog-pr-4339.yml deleted file mode 100644 index bf7c49d3e8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4339.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - rscadd: "The blood cult revive rune will now replace the souls of braindead or inactive cultists/constructs when properly invoked. These \"revivals\" will not count toward the revive limit." - - rscadd: "The clock cult healing rune will now replace the souls of braindead or inactive cultists/constructs when left atop the rune. These \"revivals\" will not drain the rune's energy." diff --git a/html/changelogs/AutoChangeLog-pr-4340.yml b/html/changelogs/AutoChangeLog-pr-4340.yml deleted file mode 100644 index 6992dc2fd8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4340.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "fixes mobs not metabolizing their reagents" diff --git a/html/changelogs/AutoChangeLog-pr-4341.yml b/html/changelogs/AutoChangeLog-pr-4341.yml deleted file mode 100644 index e276d3bcb8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4341.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Mark9013100" -delete-after: True -changes: - - rscadd: "Medical Wardrobes now contain an additional standard and EMT labcoat." diff --git a/html/changelogs/AutoChangeLog-pr-4344.yml b/html/changelogs/AutoChangeLog-pr-4344.yml deleted file mode 100644 index a020f7882f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4344.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "Donator items use the proper sprites when worn again." diff --git a/html/changelogs/AutoChangeLog-pr-4346.yml b/html/changelogs/AutoChangeLog-pr-4346.yml deleted file mode 100644 index d03954b91f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4346.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "The standard-issue PDAs are now holographic again." diff --git a/html/changelogs/AutoChangeLog-pr-4349.yml b/html/changelogs/AutoChangeLog-pr-4349.yml deleted file mode 100644 index 3f1bb91439..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4349.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Nonstandard power cells found in MULEbots, cyborgs, and elsewhere now have the correct description." diff --git a/html/changelogs/AutoChangeLog-pr-4350.yml b/html/changelogs/AutoChangeLog-pr-4350.yml deleted file mode 100644 index 2116fa9fd5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4350.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - bugfix: "Genetics will no longer have a random block completely disappear each round" diff --git a/html/changelogs/AutoChangeLog-pr-4351.yml b/html/changelogs/AutoChangeLog-pr-4351.yml deleted file mode 100644 index bc5cabdb55..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4351.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - bugfix: "glass shards and bananium floors no longer make a sound when \"walked\" over by a camera or a ghost" diff --git a/html/changelogs/AutoChangeLog-pr-4353.yml b/html/changelogs/AutoChangeLog-pr-4353.yml deleted file mode 100644 index 6fcf3e2ebe..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4353.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "deathride58" -delete-after: True -changes: - - rscadd: "All maps now have departmental lathes as they're supposed to." - - rscadd: "Pubbystation and Omegastation now have kinkmates! This does not add them back to the rotation, though. Tell Jay to re-enable Pubby and Omega in the server's config." - - rscadd: "Omegastation's dorms now have bolt buttons." - - bugfix: "The table in the back of Boxstation's maint bar gambling area will no longer throw people around." diff --git a/html/changelogs/AutoChangeLog-pr-4354.yml b/html/changelogs/AutoChangeLog-pr-4354.yml deleted file mode 100644 index e9aa1f0f2b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4354.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "Tidied up some loc assignments" diff --git a/html/changelogs/AutoChangeLog-pr-4359.yml b/html/changelogs/AutoChangeLog-pr-4359.yml deleted file mode 100644 index 6679e4b920..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4359.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - server: "Added new admin flag, AUTOLOGIN, to control if admins start with admin powers. this defaults to on, and can be removed with -AUTOLOGIN" - - admin: "Admins with +PERMISSION may now deadmin or readmin other admins via the permission panel." diff --git a/html/changelogs/AutoChangeLog-pr-4361.yml b/html/changelogs/AutoChangeLog-pr-4361.yml deleted file mode 100644 index 140a9a4fe3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4361.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Shuttles now place hyperspace ripples where they are about to land again." diff --git a/html/changelogs/AutoChangeLog-pr-4363.yml b/html/changelogs/AutoChangeLog-pr-4363.yml deleted file mode 100644 index fda81eb42b..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4363.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "JStheguy" -delete-after: True -changes: - - rscadd: "Added 10 new assembly designs to the integrated circuit printer, the difference from current designs is purely aesthetics." - - imageadd: "Added the icons for said new assembly designs to electronic_setups.dmi, changed the current electronic mechanism and electronic machine sprites." diff --git a/html/changelogs/AutoChangeLog-pr-4365.yml b/html/changelogs/AutoChangeLog-pr-4365.yml deleted file mode 100644 index 165bb4d0df..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4365.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Epoc" -delete-after: True -changes: - - bugfix: "Adds Cybernetic Lungs to the Cyber Organs research node" diff --git a/html/changelogs/AutoChangeLog-pr-4372.yml b/html/changelogs/AutoChangeLog-pr-4372.yml deleted file mode 100644 index 7c1aa4b97c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4372.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "ShizCalev" -delete-after: True -changes: - - soundadd: "Revamped gun dry-firing sounds." - - tweak: "Everyone around you will now hear when your gun goes click. You don't want to hear click when you want to hear bang!" diff --git a/html/changelogs/AutoChangeLog-pr-4375.yml b/html/changelogs/AutoChangeLog-pr-4375.yml deleted file mode 100644 index 2cf7f4c721..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4375.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "fixes the remaining loc assignments" diff --git a/html/changelogs/AutoChangeLog-pr-4377.yml b/html/changelogs/AutoChangeLog-pr-4377.yml deleted file mode 100644 index 5234e24f49..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4377.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - rscadd: "Grinding runed metal and brass now produces iron/blood and iron/teslium, respectively." - - balance: "As part of some code-side improvements, the amount of reagents you get from grinding some objects might be slightly different." - - bugfix: "Some grinding recipes that didn't work, like dead mice and glowsticks, now do." - - bugfix: "All-In-One grinders now correctly grind up everything, instead of one thing at a time." diff --git a/html/changelogs/AutoChangeLog-pr-4382.yml b/html/changelogs/AutoChangeLog-pr-4382.yml deleted file mode 100644 index 64568eb274..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4382.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - config: "Added \"$include\" directives to config files. These are recursive. Only config.txt will be default loaded if they are specified inside it" diff --git a/html/changelogs/AutoChangeLog-pr-4383.yml b/html/changelogs/AutoChangeLog-pr-4383.yml deleted file mode 100644 index cf9c743a03..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4383.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Naksu" -delete-after: True -changes: - - code_imp: "Preliminary work on tracking cliented living mobs across Z-levels to facilitate mob AI changes later" diff --git a/html/changelogs/AutoChangeLog-pr-4384.yml b/html/changelogs/AutoChangeLog-pr-4384.yml deleted file mode 100644 index d7f2f90350..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4384.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EtheoBoxxman" -delete-after: True -changes: - - rscdel: "Removed chasm that spawns on killing ash walker tendril" diff --git a/html/changelogs/AutoChangeLog-pr-4389.yml b/html/changelogs/AutoChangeLog-pr-4389.yml deleted file mode 100644 index 36f17b95de..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4389.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Toriate" -delete-after: True -changes: - - tweak: "NEBs now consistently alt click to recolor" diff --git a/html/changelogs/AutoChangeLog-pr-4390.yml b/html/changelogs/AutoChangeLog-pr-4390.yml deleted file mode 100644 index 89d3683a34..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4390.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "AverageJoe82" -delete-after: True -changes: - - rscadd: "drones now have night vision" - - rscdel: "drones no longer have lights" diff --git a/html/changelogs/AutoChangeLog-pr-4394.yml b/html/changelogs/AutoChangeLog-pr-4394.yml deleted file mode 100644 index 68d57a2d11..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4394.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "The shuttle will no longer be autocalled if the round has already ended." diff --git a/html/changelogs/AutoChangeLog-pr-4412.yml b/html/changelogs/AutoChangeLog-pr-4412.yml deleted file mode 100644 index 6280189218..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4412.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - tweak: "Vitality matrices don't have visible messages when someone crosses them anymore." diff --git a/html/changelogs/AutoChangeLog-pr-4416.yml b/html/changelogs/AutoChangeLog-pr-4416.yml deleted file mode 100644 index 543fe52edd..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4416.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Robustin" -delete-after: True -changes: - - bugfix: "The wizard event \"race swap\" should now stick to \"safer\" species." diff --git a/html/changelogs/AutoChangeLog-pr-4417.yml b/html/changelogs/AutoChangeLog-pr-4417.yml deleted file mode 100644 index 46b7019353..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4417.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Xhuis" -delete-after: True -changes: - - bugfix: "Clockcult power alerts will no longer show outside of the clockcult gamemode (they could be triggered by scarabs.)" diff --git a/html/changelogs/AutoChangeLog-pr-4420.yml b/html/changelogs/AutoChangeLog-pr-4420.yml deleted file mode 100644 index 305d701c7f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4420.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - rscadd: "A few new traumas have been added." - - balance: "Thresholds to get brain traumas have been lowered, as they currently pretty much only trigger if you intentionally chug impedrezene." - - tweak: "Melee head hits deal minor brain damage. Crits still do a significant amount." - - tweak: "Nuke Op implants no longer trigger on deathgasp. (They still explode on death)" - - tweak: "You'll now receive messages when crossing certain brain damage thresholds." - - tweak: "Split Personalities are instructed not to suicide while in control." - - tweak: "Godwoken Syndrome now randomly sends Voice of God commands, instead of being controllable." diff --git a/html/changelogs/AutoChangeLog-pr-4426.yml b/html/changelogs/AutoChangeLog-pr-4426.yml new file mode 100644 index 0000000000..ecb2c800ca --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4426.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Allied station communications are back, now with potentially multiple stations" diff --git a/html/changelogs/AutoChangeLog-pr-4430.yml b/html/changelogs/AutoChangeLog-pr-4430.yml new file mode 100644 index 0000000000..11fd6bb4a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4430.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - tweak: "Hostile mobs on z-levels without living players will now conserve their efforts and simply not run AI routines at all. Also, idling mob routines should be significantly cheaper on non-station Z-levels." diff --git a/html/changelogs/AutoChangeLog-pr-4433.yml b/html/changelogs/AutoChangeLog-pr-4433.yml deleted file mode 100644 index 39bde17139..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4433.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ninjanomnom" -delete-after: True -changes: - - bugfix: "Decals should now rotate the correct way around." diff --git a/html/changelogs/AutoChangeLog-pr-4437.yml b/html/changelogs/AutoChangeLog-pr-4437.yml deleted file mode 100644 index 9b11b0912e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4437.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "nicbn" -delete-after: True -changes: - - bugfix: "Now the chem smoke machine uses stock parts for volume and range." diff --git a/html/changelogs/AutoChangeLog-pr-4442.yml b/html/changelogs/AutoChangeLog-pr-4442.yml deleted file mode 100644 index e480e91419..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4442.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - rscadd: "Abductors can now see if people already have glands! Never worry about abducting the same guy twice again." - - rscadd: "Added the Mind Interface Device to the abductor shop for 2 Credits. Only scientists can use it." - - rscadd: "The MID has two modes: Transmit and Control." - - rscadd: "Transmit will allow you to send a message anytime, anywhere to the mind of a target of your choice, regardless of language barriers. The message will be anonymous, but abductor-like." - - rscadd: "Control allows you to give a temporary directive to a target with an implanted gland, that they MUST follow. Duration and amount of uses varies by gland type. When a gland is spent, it will no longer respond to Control signals. The target forgets ever receiving the objective when the duration ends." diff --git a/html/changelogs/AutoChangeLog-pr-4445.yml b/html/changelogs/AutoChangeLog-pr-4445.yml deleted file mode 100644 index 6dd7a7e486..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4445.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Fixed captain's PDA showing unusable Toggle Remote Door menu option" diff --git a/html/changelogs/AutoChangeLog-pr-4446.yml b/html/changelogs/AutoChangeLog-pr-4446.yml deleted file mode 100644 index 3811f7ffb7..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4446.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - balance: "The codespeak manual now has unlimited uses and costs 3 TC." - - bugfix: "Nuke ops can now purchase the codespeak manual, as was intended." diff --git a/html/changelogs/AutoChangeLog-pr-4453.yml b/html/changelogs/AutoChangeLog-pr-4453.yml deleted file mode 100644 index 24bce9c510..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4453.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "A changeling will learn all languages from anyone they absorb." diff --git a/html/changelogs/AutoChangeLog-pr-4458.yml b/html/changelogs/AutoChangeLog-pr-4458.yml deleted file mode 100644 index 4e51890691..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4458.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "XDTM" -delete-after: True -changes: - - tweak: "The Disease Outbreak event now can generate random advanced viruses, with more symptoms and higher level as round time goes on." diff --git a/html/changelogs/AutoChangeLog-pr-4464.yml b/html/changelogs/AutoChangeLog-pr-4464.yml deleted file mode 100644 index 17f7d8fc07..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4464.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "You can enforce no smoking zones with a disarm aimed at the smokers mouth." diff --git a/html/changelogs/AutoChangeLog-pr-4466.yml b/html/changelogs/AutoChangeLog-pr-4466.yml deleted file mode 100644 index e8239ebfb4..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4466.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Toriate" -delete-after: True -changes: - - balance: "Roundstart xenos are no longer pierce immune, also no more extra damage from heat." diff --git a/html/changelogs/AutoChangeLog-pr-4467.yml b/html/changelogs/AutoChangeLog-pr-4467.yml deleted file mode 100644 index ae009bf26f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4467.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "improvedname" -delete-after: True -changes: - - bugfix: "Corrects 357. speedloader in the autolathe" diff --git a/html/changelogs/AutoChangeLog-pr-4475.yml b/html/changelogs/AutoChangeLog-pr-4475.yml deleted file mode 100644 index f37e80ed55..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4475.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - bugfix: "Passing a space transition no longer interrupts pulls." diff --git a/html/changelogs/AutoChangeLog-pr-4477.yml b/html/changelogs/AutoChangeLog-pr-4477.yml deleted file mode 100644 index bba0dab724..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4477.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Fox McCloud" -delete-after: True -changes: - - bugfix: "Fixes arm implants being immune to EMPs" diff --git a/html/changelogs/AutoChangeLog-pr-4479.yml b/html/changelogs/AutoChangeLog-pr-4479.yml deleted file mode 100644 index 623a1ada72..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4479.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscdel: "Integrated circuit smoke circuits now require 10 units of reagents to fire." diff --git a/html/changelogs/AutoChangeLog-pr-4487.yml b/html/changelogs/AutoChangeLog-pr-4487.yml deleted file mode 100644 index 588566e15c..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4487.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ganglyalexander" -delete-after: True -changes: - - bugfix: "module icons for dog borgs now reference to a existing icon" diff --git a/html/changelogs/AutoChangeLog-pr-4488.yml b/html/changelogs/AutoChangeLog-pr-4488.yml deleted file mode 100644 index 21031f2cf3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4488.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "coiax" -delete-after: True -changes: - - rscadd: "At the end of the round, all players can see who the antagonists -are." diff --git a/html/changelogs/AutoChangeLog-pr-4490.yml b/html/changelogs/AutoChangeLog-pr-4490.yml deleted file mode 100644 index 6477196745..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4490.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "CitadelStationBot" -delete-after: True -changes: - - rscadd: "You can adjust line height in chat settings" - - tweak: "Default chat line height is slightly shorter, from 1.4 to 1.2" diff --git a/html/changelogs/AutoChangeLog-pr-4530.yml b/html/changelogs/AutoChangeLog-pr-4530.yml new file mode 100644 index 0000000000..7fcc6e4c71 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4530.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Things like thermite which burned through walls straight to space now stop on plating. You'll have to thermite it again to get to space." diff --git a/html/changelogs/AutoChangeLog-pr-4533.yml b/html/changelogs/AutoChangeLog-pr-4533.yml new file mode 100644 index 0000000000..6bbeeb37c9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4533.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Cycling airlocks on shuttles should work correctly when rotated now." diff --git a/html/changelogs/AutoChangeLog-pr-4555.yml b/html/changelogs/AutoChangeLog-pr-4555.yml new file mode 100644 index 0000000000..6197224d10 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4555.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - code_imp: "Forensics is now a datum component." + - balance: "NPC humans will now start leaving fingerprints on things they touch!" diff --git a/html/changelogs/AutoChangeLog-pr-4579.yml b/html/changelogs/AutoChangeLog-pr-4579.yml new file mode 100644 index 0000000000..69327324f6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4579.yml @@ -0,0 +1,5 @@ +author: "XDTM" +delete-after: True +changes: + - rscadd: "Added a new reagent: Pax." + - rscadd: "Pax is made with Mindbreaker, Synaptizine and Water, and those affected by it are forced to be nonviolent against living beings. At least, not directly." diff --git a/html/changelogs/AutoChangeLog-pr-4580.yml b/html/changelogs/AutoChangeLog-pr-4580.yml new file mode 100644 index 0000000000..6ccaebd033 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4580.yml @@ -0,0 +1,9 @@ +author: "coiax" +delete-after: True +changes: + - rscadd: "Adds an internal radio implant, allowing the use of the radio if +you expect to have your headset removed. Or if you don't have any ears +or hands. It can be purchased for 4 TC from any Syndicate uplink." + - rscadd: "Nuke ops now buy special \"syndicate intelligence potions\" that automatically +insert an internal radio implant when used successfully. Cayenne can now +participate in your high level discussions." diff --git a/html/changelogs/AutoChangeLog-pr-4590.yml b/html/changelogs/AutoChangeLog-pr-4590.yml new file mode 100644 index 0000000000..ed62412909 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4590.yml @@ -0,0 +1,5 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Monkey chat should no longer have .k prefixed" + - bugfix: "Monkey leaders should actually get jungle fever now" diff --git a/html/changelogs/AutoChangeLog-pr-4596.yml b/html/changelogs/AutoChangeLog-pr-4596.yml new file mode 100644 index 0000000000..17bb98f350 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4596.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "Burial jumpsuits no longer have suit sensors" diff --git a/html/changelogs/AutoChangeLog-pr-4599.yml b/html/changelogs/AutoChangeLog-pr-4599.yml new file mode 100644 index 0000000000..a458b7dcf2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4599.yml @@ -0,0 +1,4 @@ +author: "Cebutris" +delete-after: True +changes: + - bugfix: "Holoparasite injectors can no longer be discounted" diff --git a/html/changelogs/AutoChangeLog-pr-4601.yml b/html/changelogs/AutoChangeLog-pr-4601.yml new file mode 100644 index 0000000000..2a6621350e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4601.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Some changes to turfs like shuttles would result in un-initialized space tiles being created. This has been fixed." diff --git a/html/changelogs/AutoChangeLog-pr-4603.yml b/html/changelogs/AutoChangeLog-pr-4603.yml new file mode 100644 index 0000000000..f16f11d0d7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4603.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "The teleporter computer now always shows the area name of a beacon rather than the turf name in some situations." diff --git a/html/changelogs/AutoChangeLog-pr-4607.yml b/html/changelogs/AutoChangeLog-pr-4607.yml new file mode 100644 index 0000000000..1ce8e2136e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4607.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - tweak: "The chemistry job has been removed from Omegastation. Medical doctors still have full chemistry access" diff --git a/html/changelogs/AutoChangeLog-pr-4608.yml b/html/changelogs/AutoChangeLog-pr-4608.yml new file mode 100644 index 0000000000..dc7a2844d9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4608.yml @@ -0,0 +1,4 @@ +author: "MrDoomBringer" +delete-after: True +changes: + - imageadd: "NanoTrasen has sent the station new spaceheaters! They look nicer now!" diff --git a/html/changelogs/AutoChangeLog-pr-4609.yml b/html/changelogs/AutoChangeLog-pr-4609.yml new file mode 100644 index 0000000000..9f47aa2917 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4609.yml @@ -0,0 +1,8 @@ +author: "Xhuis" +delete-after: True +changes: + - balance: "Vitality matrices now apply Ichorial Stain when reviving a dead servant, which prevents that servant from being revived again by vitality matrices for a full minute." + - balance: "Vitality matrices can't be placed adjacent to one another." + - balance: "Brass skewers now damage and stun cyborgs." + - balance: "Vitality matrices no longer drain people impaled on brass skewers." + - balance: "Pressure sensors have 5 health again (down from 25.)" diff --git a/html/changelogs/AutoChangeLog-pr-4610.yml b/html/changelogs/AutoChangeLog-pr-4610.yml new file mode 100644 index 0000000000..cdcfbde61b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4610.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Vore is no longer restricted to monkeys." diff --git a/html/changelogs/AutoChangeLog-pr-4611.yml b/html/changelogs/AutoChangeLog-pr-4611.yml new file mode 100644 index 0000000000..135f53690f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4611.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Viewing photos sent by PDA message works again." diff --git a/html/changelogs/AutoChangeLog-pr-4308.yml b/html/changelogs/AutoChangeLog-pr-4612.yml similarity index 51% rename from html/changelogs/AutoChangeLog-pr-4308.yml rename to html/changelogs/AutoChangeLog-pr-4612.yml index 5f277e0e53..1bb68ce590 100644 --- a/html/changelogs/AutoChangeLog-pr-4308.yml +++ b/html/changelogs/AutoChangeLog-pr-4612.yml @@ -1,4 +1,4 @@ author: "CitadelStationBot" delete-after: True changes: - - bugfix: "Booze-o-mats have beer" + - bugfix: "Last resort now requires a confirmation" diff --git a/html/changelogs/AutoChangeLog-pr-4613.yml b/html/changelogs/AutoChangeLog-pr-4613.yml new file mode 100644 index 0000000000..871d1fc7ac --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4613.yml @@ -0,0 +1,5 @@ +author: "Naksu" +delete-after: True +changes: + - code_imp: "loot drop spawners now assign their pixel offsets to the items they spawn, also have a \"fanout\" setting to distribute items in a neat fashion like in omega/delta's core and some tech storages." + - tweak: "replaced several law boards in uploads with spawners, the net result being one more board in uploads that may be a duplicate asimov (but hopefully isn't)" diff --git a/html/changelogs/AutoChangeLog-pr-4615.yml b/html/changelogs/AutoChangeLog-pr-4615.yml new file mode 100644 index 0000000000..f7e0e15470 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4615.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - rscadd: "Explosions now cause camera shake based on intensity and distance" diff --git a/html/changelogs/AutoChangeLog-pr-3639.yml b/html/changelogs/AutoChangeLog-pr-4628.yml similarity index 51% rename from html/changelogs/AutoChangeLog-pr-3639.yml rename to html/changelogs/AutoChangeLog-pr-4628.yml index 3625dfce90..08311f545a 100644 --- a/html/changelogs/AutoChangeLog-pr-3639.yml +++ b/html/changelogs/AutoChangeLog-pr-4628.yml @@ -1,4 +1,4 @@ author: "deathride58" delete-after: True changes: - - bugfix: "Antags are able to greentext again" + - bugfix: "Vore is now actually fixed. Fuck." diff --git a/html/changelogs/AutoChangeLog-pr-4632.yml b/html/changelogs/AutoChangeLog-pr-4632.yml new file mode 100644 index 0000000000..7c2be79d90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4632.yml @@ -0,0 +1,4 @@ +author: "Frozenguy5" +delete-after: True +changes: + - rscadd: "Adds a goon and cult emoji. Improves gear and tophat. (Credits to GoonStation for creating the goon bee sprite.)" diff --git a/html/changelogs/AutoChangeLog-pr-4633.yml b/html/changelogs/AutoChangeLog-pr-4633.yml new file mode 100644 index 0000000000..2a9d05d984 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4633.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Turfs are construct-able again" diff --git a/html/changelogs/AutoChangeLog-pr-4634.yml b/html/changelogs/AutoChangeLog-pr-4634.yml new file mode 100644 index 0000000000..bcc48e9842 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4634.yml @@ -0,0 +1,4 @@ +author: "DaxDupont" +delete-after: True +changes: + - bugfix: "Solar control consoles are no longer pointing to the wrong direction, you can now turn tracking off again and manual positioning of solar panels have been fixed." diff --git a/html/changelogs/AutoChangeLog-pr-4635.yml b/html/changelogs/AutoChangeLog-pr-4635.yml new file mode 100644 index 0000000000..7eff97850e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4635.yml @@ -0,0 +1,4 @@ +author: "XDTM" +delete-after: True +changes: + - bugfix: "Fixed Runic Golem's Abyssal Gaze blinding permanently." diff --git a/html/changelogs/AutoChangeLog-pr-4636.yml b/html/changelogs/AutoChangeLog-pr-4636.yml new file mode 100644 index 0000000000..bd34963deb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4636.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - bugfix: "The bank vault is no longer metagaming. It will now display the IC station name." diff --git a/html/changelogs/AutoChangeLog-pr-4637.yml b/html/changelogs/AutoChangeLog-pr-4637.yml new file mode 100644 index 0000000000..3562f90b22 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4637.yml @@ -0,0 +1,7 @@ +author: "XDTM" +delete-after: True +changes: + - balance: "Ocular Restoration has been removed, its effect transfered on Sensory Restoration." + - balance: "Sensory Restoration now heals both eye and ear damage." + - balance: "Mind Restoration now no longer heals ear damage, but now heals brain damage by default." + - balance: "Mind Restoration's thresholds can now let the symptoms cure mild brain traumas at 6 resistance and severe ones at 9." diff --git a/html/changelogs/AutoChangeLog-pr-4640.yml b/html/changelogs/AutoChangeLog-pr-4640.yml new file mode 100644 index 0000000000..6afedb1e58 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4640.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Unwrenching a vent or scrubber will no longer show the pre-update icons." diff --git a/html/changelogs/AutoChangeLog-pr-4641.yml b/html/changelogs/AutoChangeLog-pr-4641.yml new file mode 100644 index 0000000000..51eff4c1c8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4641.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Observers will no longer stop following a character if their mob changes." diff --git a/html/changelogs/AutoChangeLog-pr-4378.yml b/html/changelogs/AutoChangeLog-pr-4643.yml similarity index 58% rename from html/changelogs/AutoChangeLog-pr-4378.yml rename to html/changelogs/AutoChangeLog-pr-4643.yml index 22ea638655..adba3ee40b 100644 --- a/html/changelogs/AutoChangeLog-pr-4378.yml +++ b/html/changelogs/AutoChangeLog-pr-4643.yml @@ -1,4 +1,4 @@ author: "CitadelStationBot" delete-after: True changes: - - imageadd: "Closet sprites changed." + - bugfix: "Mimes now laugh silently." diff --git a/html/changelogs/AutoChangeLog-pr-4645.yml b/html/changelogs/AutoChangeLog-pr-4645.yml new file mode 100644 index 0000000000..300f7f8c26 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4645.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - tweak: "Explosions will no longer give everyone and their mothers motion sickness from a mile away." diff --git a/html/changelogs/AutoChangeLog-pr-4646.yml b/html/changelogs/AutoChangeLog-pr-4646.yml new file mode 100644 index 0000000000..3f1800f5d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4646.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Nar-Sie can no longer be summoned twice at the same time." diff --git a/html/changelogs/AutoChangeLog-pr-4648.yml b/html/changelogs/AutoChangeLog-pr-4648.yml new file mode 100644 index 0000000000..e3e111e293 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4648.yml @@ -0,0 +1,4 @@ +author: "Naksu" +delete-after: True +changes: + - bugfix: "splash-fried food is now actually edible" diff --git a/html/changelogs/AutoChangeLog-pr-4649.yml b/html/changelogs/AutoChangeLog-pr-4649.yml new file mode 100644 index 0000000000..16db9d8257 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4649.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "You no longer cut yourself with shards when clicking a portal" diff --git a/html/changelogs/AutoChangeLog-pr-4659.yml b/html/changelogs/AutoChangeLog-pr-4659.yml new file mode 100644 index 0000000000..a43de59ed1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4659.yml @@ -0,0 +1,5 @@ +author: "Dax Dupont" +delete-after: True +changes: + - rscadd: "PDA Interface color is now a preference." + - bugfix: "Fixed PDA font style not applying at round start." diff --git a/html/changelogs/AutoChangeLog-pr-4661.yml b/html/changelogs/AutoChangeLog-pr-4661.yml new file mode 100644 index 0000000000..400f44fac5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4661.yml @@ -0,0 +1,4 @@ +author: "Dax Dupont" +delete-after: True +changes: + - rscadd: "The following messages have been added to dead chat: Security level change, (re)calling, Emergency Access, CentComm/Syndicate console messages, outgoing server messages and announcements," diff --git a/html/changelogs/AutoChangeLog-pr-4662.yml b/html/changelogs/AutoChangeLog-pr-4662.yml new file mode 100644 index 0000000000..1214c07d8e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4662.yml @@ -0,0 +1,4 @@ +author: "ShiggyDiggyDo" +delete-after: True +changes: + - tweak: "Syndicate experts were able to create more sophisticated copies of the nuclear authentication disk. While still unable to detonate the nuclear fission explosive with them, they're practically identical to the real disk if not examined closely." diff --git a/html/changelogs/AutoChangeLog-pr-4666.yml b/html/changelogs/AutoChangeLog-pr-4666.yml new file mode 100644 index 0000000000..2885f929b1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4666.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Explosions now function properly again!" diff --git a/html/changelogs/AutoChangeLog-pr-4668.yml b/html/changelogs/AutoChangeLog-pr-4668.yml new file mode 100644 index 0000000000..919295747f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4668.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Chameleon PDAs now have their chameleon action." diff --git a/html/changelogs/AutoChangeLog-pr-4671.yml b/html/changelogs/AutoChangeLog-pr-4671.yml new file mode 100644 index 0000000000..3dd0bbb821 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4671.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "Meta: The piping in the toxins lab has been rearranged slightly to prevent piping underneath the floor from interfering with the normal setup." diff --git a/html/changelogs/AutoChangeLog-pr-4674.yml b/html/changelogs/AutoChangeLog-pr-4674.yml new file mode 100644 index 0000000000..ea32a2881c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4674.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "The startup load time of away missions has been drastically reduced." diff --git a/html/changelogs/AutoChangeLog-pr-4675.yml b/html/changelogs/AutoChangeLog-pr-4675.yml new file mode 100644 index 0000000000..f50f81c0df --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4675.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "The admin notification for the pulse rifle prize now shows the correct coordinates." diff --git a/html/changelogs/AutoChangeLog-pr-4676.yml b/html/changelogs/AutoChangeLog-pr-4676.yml new file mode 100644 index 0000000000..7b2bd49483 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4676.yml @@ -0,0 +1,5 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Devils will no longer be permanently stuck if interrupted while trying to jaunt." + - bugfix: "Devils will now properly clear the fake fire if failing to jaunt." diff --git a/html/changelogs/AutoChangeLog-pr-4680.yml b/html/changelogs/AutoChangeLog-pr-4680.yml new file mode 100644 index 0000000000..d7921bc608 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4680.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Interacting with objects at the same X and Y but a different Z is no longer possible." diff --git a/html/changelogs/AutoChangeLog-pr-4681.yml b/html/changelogs/AutoChangeLog-pr-4681.yml new file mode 100644 index 0000000000..2e9a4a74a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4681.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Crayons will now draw at the position you click." diff --git a/html/changelogs/AutoChangeLog-pr-4692.yml b/html/changelogs/AutoChangeLog-pr-4692.yml new file mode 100644 index 0000000000..44ca0d879b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4692.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Armor penetration now works on objects and mechs." diff --git a/html/changelogs/AutoChangeLog-pr-4695.yml b/html/changelogs/AutoChangeLog-pr-4695.yml new file mode 100644 index 0000000000..295f470c19 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4695.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - config: "The default config for head of staff exp override is closer to the actual default with no override." diff --git a/html/changelogs/AutoChangeLog-pr-4001.yml b/html/changelogs/AutoChangeLog-pr-4696.yml similarity index 52% rename from html/changelogs/AutoChangeLog-pr-4001.yml rename to html/changelogs/AutoChangeLog-pr-4696.yml index 578f211e20..94a6abdc2d 100644 --- a/html/changelogs/AutoChangeLog-pr-4001.yml +++ b/html/changelogs/AutoChangeLog-pr-4696.yml @@ -1,4 +1,4 @@ author: "CitadelStationBot" delete-after: True changes: - - bugfix: "Pizza box stacking works again." + - bugfix: "Lavaboats no longer set you on fire." diff --git a/html/changelogs/AutoChangeLog-pr-4698.yml b/html/changelogs/AutoChangeLog-pr-4698.yml new file mode 100644 index 0000000000..f36c090b6b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4698.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "Decals will no longer spawn where they don't belong" diff --git a/html/changelogs/AutoChangeLog-pr-4699.yml b/html/changelogs/AutoChangeLog-pr-4699.yml new file mode 100644 index 0000000000..f527d04673 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4699.yml @@ -0,0 +1,4 @@ +author: "CitadelStationBot" +delete-after: True +changes: + - bugfix: "comms consoles no longer announce in deadchat announcements if they were cooling down and unsuccessful." diff --git a/html/changelogs/AutoChangeLog-pr-4703.yml b/html/changelogs/AutoChangeLog-pr-4703.yml new file mode 100644 index 0000000000..84caef07bb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4703.yml @@ -0,0 +1,4 @@ +author: "MrDoomBringer" +delete-after: True +changes: + - rscadd: "Advances in NanoTrasen's wrapping department have resulted in the easy creation of package wrap from all station autolathes!" diff --git a/html/changelogs/AutoChangeLog-pr-4705.yml b/html/changelogs/AutoChangeLog-pr-4705.yml new file mode 100644 index 0000000000..b244a9b202 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4705.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - balance: "Servants are now teleported to the Ark when it activates, and cannot leave Reebe afterwards." diff --git a/html/changelogs/AutoChangeLog-pr-4706.yml b/html/changelogs/AutoChangeLog-pr-4706.yml new file mode 100644 index 0000000000..ec2df28b7b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4706.yml @@ -0,0 +1,4 @@ +author: "JohnGinnane" +delete-after: True +changes: + - rscadd: "Newly crafted stacks are merged with held stacks of the same type." diff --git a/html/changelogs/AutoChangeLog-pr-4707.yml b/html/changelogs/AutoChangeLog-pr-4707.yml new file mode 100644 index 0000000000..fbb5baaee4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4707.yml @@ -0,0 +1,4 @@ +author: "Iamgoofball" +delete-after: True +changes: + - bugfix: "Booze now properly reflects programming speed." diff --git a/html/changelogs/AutoChangeLog-pr-4709.yml b/html/changelogs/AutoChangeLog-pr-4709.yml new file mode 100644 index 0000000000..77fc189587 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4709.yml @@ -0,0 +1,4 @@ +author: "ninjanomnom" +delete-after: True +changes: + - bugfix: "Moving diagonally in pipes should no longer eject you from the pipe." diff --git a/html/changelogs/AutoChangeLog-pr-4712.yml b/html/changelogs/AutoChangeLog-pr-4712.yml new file mode 100644 index 0000000000..2be6df57e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4712.yml @@ -0,0 +1,4 @@ +author: "More Robust Than You" +delete-after: True +changes: + - bugfix: "Blob Overminds should no longer to be able to spawn on ANY space tile" diff --git a/html/changelogs/AutoChangeLog-pr-4714.yml b/html/changelogs/AutoChangeLog-pr-4714.yml new file mode 100644 index 0000000000..f68222ddd1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4714.yml @@ -0,0 +1,5 @@ +author: "Dax Dupont" +delete-after: True +changes: + - balance: "The chaplain's soul stone now requires death instead of (soft) crit." + - bugfix: "The examine text now properly states that it can only capture a single soul." diff --git a/html/changelogs/AutoChangeLog-pr-4717.yml b/html/changelogs/AutoChangeLog-pr-4717.yml new file mode 100644 index 0000000000..ec775d7260 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4717.yml @@ -0,0 +1,4 @@ +author: "Xhuis" +delete-after: True +changes: + - bugfix: "Vitality matrices will no longer go off multiple times for one corpse." diff --git a/html/changelogs/AutoChangeLog-pr-4718.yml b/html/changelogs/AutoChangeLog-pr-4718.yml new file mode 100644 index 0000000000..637908aa12 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4718.yml @@ -0,0 +1,4 @@ +author: "ShizCalev" +delete-after: True +changes: + - bugfix: "The test areas debug command now works again!" diff --git a/icons/emoji.dmi b/icons/emoji.dmi index b0434f431f..e8ed3aaa7b 100644 Binary files a/icons/emoji.dmi and b/icons/emoji.dmi differ diff --git a/icons/mob/landmarks.dmi b/icons/mob/landmarks.dmi new file mode 100644 index 0000000000..120745ed44 Binary files /dev/null and b/icons/mob/landmarks.dmi differ diff --git a/icons/mob/monkey_held.dmi b/icons/mob/monkey_held.dmi new file mode 100644 index 0000000000..6a9eb8aac7 Binary files /dev/null and b/icons/mob/monkey_held.dmi differ diff --git a/icons/mob/mouse_held.dmi b/icons/mob/mouse_held.dmi new file mode 100644 index 0000000000..92a8c03bfb Binary files /dev/null and b/icons/mob/mouse_held.dmi differ diff --git a/icons/mob/pai_item_head.dmi b/icons/mob/pai_item_head.dmi new file mode 100644 index 0000000000..2803e06f20 Binary files /dev/null and b/icons/mob/pai_item_head.dmi differ diff --git a/icons/mob/pai_item_lh.dmi b/icons/mob/pai_item_lh.dmi new file mode 100644 index 0000000000..5f825053f2 Binary files /dev/null and b/icons/mob/pai_item_lh.dmi differ diff --git a/icons/mob/pai_item_rh.dmi b/icons/mob/pai_item_rh.dmi new file mode 100644 index 0000000000..7e0919afbd Binary files /dev/null and b/icons/mob/pai_item_rh.dmi differ diff --git a/icons/mob/pets_held_lh.dmi b/icons/mob/pets_held_lh.dmi new file mode 100644 index 0000000000..6b2db6e9c2 Binary files /dev/null and b/icons/mob/pets_held_lh.dmi differ diff --git a/icons/mob/pets_held_rh.dmi b/icons/mob/pets_held_rh.dmi new file mode 100644 index 0000000000..55246b7e15 Binary files /dev/null and b/icons/mob/pets_held_rh.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 5d8bfa629b..fd145092a7 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index ef680c266a..e6d40977a7 100644 Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ diff --git a/icons/obj/assemblies/electronic_components.dmi b/icons/obj/assemblies/electronic_components.dmi index 1852079e73..a9dac06d6b 100644 Binary files a/icons/obj/assemblies/electronic_components.dmi and b/icons/obj/assemblies/electronic_components.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 1abc0b5ca7..fcd971c674 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/atmospherics/components/unary_devices.dmi b/icons/obj/atmospherics/components/unary_devices.dmi index 7b4dfb499b..4f9354a287 100644 Binary files a/icons/obj/atmospherics/components/unary_devices.dmi and b/icons/obj/atmospherics/components/unary_devices.dmi differ diff --git a/icons/obj/atmospherics/pipes/pipe_item.dmi b/icons/obj/atmospherics/pipes/pipe_item.dmi index de7940bd03..23d29833e8 100644 Binary files a/icons/obj/atmospherics/pipes/pipe_item.dmi and b/icons/obj/atmospherics/pipes/pipe_item.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index f44fc29f7c..a494c1081c 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index d4d9d01069..fb1ae63b4e 100644 Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 31e700d23d..a5c487a184 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/flora/pinetrees.dmi b/icons/obj/flora/pinetrees.dmi index e7fa58cb1a..a68e0388b0 100644 Binary files a/icons/obj/flora/pinetrees.dmi and b/icons/obj/flora/pinetrees.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 1dbebc524f..24a4376d3a 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1,1085 +1,48 @@ macro "default" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "SOUTHWEST" - command = ".southwest" - is-disabled = false - elem - name = "NORTHWEST" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+H" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+1" - command = "a-intent help" - is-disabled = false - elem - name = "CTRL+2" - command = "a-intent disarm" - is-disabled = false - elem - name = "CTRL+3" - command = "a-intent grab" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent harm" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+E" - command = "quick-equip" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+Q" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+R" - command = ".southwest" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "CTRL+ADD" - command = "Add-View-Range 1" - is-disabled = false - elem - name = "CTRL+SUBTRACT" - command = "Add-View-Range -1" - is_disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - elem - name = "ALT" - command = "toggle-walk-run" - is-disabled = false - elem - name = "ALT+UP" - command = "toggle-walk-run" - is-disabled = false - -macro "hotkeys" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=default input.focus=true input.background-color=#d3b5b5\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "SOUTHWEST" - command = ".southwest" - is-disabled = false - elem - name = "NORTHWEST" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "H" - command = "delete-key-pressed" - is-disabled = false - elem - name = "1" - command = "a-intent help" - is-disabled = false - elem - name = "CTRL+1" - command = "a-intent help" - is-disabled = false - elem - name = "2" - command = "a-intent disarm" - is-disabled = false - elem - name = "CTRL+2" - command = "a-intent disarm" - is-disabled = false - elem - name = "3" - command = "a-intent grab" - is-disabled = false - elem - name = "CTRL+3" - command = "a-intent grab" - is-disabled = false - elem - name = "4" - command = "a-intent harm" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent harm" - is-disabled = false - elem - name = "A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "B" - command = "resist" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "E" - command = "quick-equip" - is-disabled = false - elem - name = "CTRL+E" - command = "quick-equip" - is-disabled = false - elem - name = "F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "M" - command = "me" - is-disabled = false - elem - name = "O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "Q" - command = ".northwest" - is-disabled = false - elem - name = "CTRL+Q" - command = ".northwest" - is-disabled = false - elem - name = "R" - command = ".southwest" - is-disabled = false - elem - name = "CTRL+R" - command = ".southwest" - is-disabled = false - elem "s_key" - name = "S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "T" - command = "say" - is-disabled = false - elem "w_key" - name = "W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "CTRL+ADD" - command = "Add-View-Range 1" - is-disabled = false - elem - name = "CTRL+SUBTRACT" - command = "Add-View-Range -1" - is_disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - elem - name = "ALT" - command = "toggle-walk-run" - is-disabled = false - elem - name = "ALT+UP" - command = "toggle-walk-run" - is-disabled = false - -macro "robot-default" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=robot-hotkeys mapwindow.map.focus=true input.background-color=#e0e0e0\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "NORTHWEST" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+H" - command = "delete-key-pressed" - is-disabled = false - elem - name = "CTRL+1" - command = "toggle-module 1" - is-disabled = false - elem - name = "CTRL+2" - command = "toggle-module 2" - is-disabled = false - elem - name = "CTRL+3" - command = "toggle-module 3" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+Q" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "CTRL+NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "CTRL+NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "CTRL+NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "CTRL+NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - -macro "robot-hotkeys" - elem - name = "TAB" - command = ".winset \"mainwindow.macro=robot-default input.focus=true input.background-color=#d3b5b5\"" - is-disabled = false - elem - name = "CENTER+REP" - command = ".center" - is-disabled = false - elem - name = "NORTHEAST" - command = ".northeast" - is-disabled = false - elem - name = "SOUTHEAST" - command = ".southeast" - is-disabled = false - elem - name = "NORTHWEST" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+WEST" - command = "westface" - is-disabled = false - elem - name = "WEST+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+NORTH" - command = "northface" - is-disabled = false - elem - name = "NORTH+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+EAST" - command = "eastface" - is-disabled = false - elem - name = "EAST+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+SOUTH" - command = "southface" - is-disabled = false - elem - name = "SOUTH+REP" - command = ".movedown" - is-disabled = false - elem - name = "INSERT" - command = "a-intent right" - is-disabled = false - elem - name = "DELETE" - command = "delete-key-pressed" - is-disabled = false - elem - name = "H" - command = "delete-key-pressed" - is-disabled = false - elem - name = "1" - command = "toggle-module 1" - is-disabled = false - elem - name = "CTRL+1" - command = "toggle-module 1" - is-disabled = false - elem - name = "2" - command = "toggle-module 2" - is-disabled = false - elem - name = "CTRL+2" - command = "toggle-module 2" - is-disabled = false - elem - name = "3" - command = "toggle-module 3" - is-disabled = false - elem - name = "CTRL+3" - command = "toggle-module 3" - is-disabled = false - elem - name = "4" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+4" - command = "a-intent left" - is-disabled = false - elem - name = "A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "CTRL+A+REP" - command = ".moveleft" - is-disabled = false - elem - name = "B" - command = "resist" - is-disabled = false - elem - name = "CTRL+B" - command = "resist" - is-disabled = false - elem - name = "M" - command = "me" - is-disabled = false - elem - name = "O" - command = "ooc" - is-disabled = false - elem - name = "CTRL+O" - command = "ooc" - is-disabled = false - elem - name = "D+REP" - command = ".moveright" - is-disabled = false - elem - name = "CTRL+D+REP" - command = ".moveright" - is-disabled = false - elem - name = "F" - command = "a-intent left" - is-disabled = false - elem - name = "CTRL+F" - command = "a-intent left" - is-disabled = false - elem - name = "G" - command = "a-intent right" - is-disabled = false - elem - name = "CTRL+G" - command = "a-intent right" - is-disabled = false - elem - name = "Q" - command = "unequip-module" - is-disabled = false - elem - name = "CTRL+Q" - command = "unequip-module" - is-disabled = false - elem "s_key" - name = "S+REP" - command = ".movedown" - is-disabled = false - elem - name = "CTRL+S+REP" - command = ".movedown" - is-disabled = false - elem - name = "T" - command = "say" - is-disabled = false - elem "w_key" - name = "W+REP" - command = ".moveup" - is-disabled = false - elem - name = "CTRL+W+REP" - command = ".moveup" - is-disabled = false - elem - name = "X" - command = ".northeast" - is-disabled = false - elem - name = "CTRL+X" - command = ".northeast" - is-disabled = false - elem - name = "Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Y" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "CTRL+Z" - command = "Activate-Held-Object" - is-disabled = false - elem - name = "NUMPAD1" - command = "body-r-leg" - is-disabled = false - elem - name = "NUMPAD2" - command = "body-groin" - is-disabled = false - elem - name = "NUMPAD3" - command = "body-l-leg" - is-disabled = false - elem - name = "NUMPAD4" - command = "body-r-arm" - is-disabled = false - elem - name = "NUMPAD5" - command = "body-chest" - is-disabled = false - elem - name = "NUMPAD6" - command = "body-l-arm" - is-disabled = false - elem - name = "NUMPAD8" - command = "body-toggle-head" - is-disabled = false - elem - name = "F1" - command = "adminhelp" - is-disabled = false - elem - name = "CTRL+SHIFT+F1+REP" - command = ".options" - is-disabled = false - elem - name = "F2+REP" - command = ".screenshot auto" - is-disabled = false - elem - name = "SHIFT+F2+REP" - command = ".screenshot" - is-disabled = false - elem - name = "F5" - command = "Aghost" - is-disabled = false - elem - name = "F6" - command = "Player-Panel" - is-disabled = false - elem - name = "F7" - command = "Toggle-Build-Mode-Self" - is-disabled = false - elem - name = "CTRL+F7" - command = "Stealth-Mode" - is-disabled = false - elem - name = "F8" - command = "Invisimin" - is-disabled = false - elem - name = "F12" - command = "F12" - is-disabled = false - menu "menu" elem name = "&File" command = "" - category = "" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Quick screenshot\tF2" command = ".screenshot auto" category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Save screenshot as...\tShift+F2" command = ".screenshot" category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "" command = "" category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem "reconnectbutton" name = "&Reconnect" command = ".reconnect" category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Quit\tAlt-F4" command = ".quit" category = "&File" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Help" command = "" - category = "" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Admin Help\tF1" command = "adminhelp" category = "&Help" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" elem name = "&Hotkeys" command = "hotkeys-help" category = "&Help" - is-checked = false - can-check = false - group = "" - is-disabled = false saved-params = "is-checked" @@ -1090,116 +53,41 @@ window "mainwindow" size = 640x440 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false is-default = true - border = none - drop-zone = false - right-click = false saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true - is-pane = false - is-minimized = false - is-maximized = false - can-scroll = none icon = 'icons\\ss13_64.png' - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "macro" + macro = "default" menu = "menu" - on-close = "" elem "split" type = CHILD pos = 3,0 size = 634x417 anchor1 = 0,0 anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "splitter" - on-size = "" left = "mapwindow" right = "infowindow" is-vert = true - splitter = 50 - show-splitter = true - lock = none elem "input" type = INPUT pos = 5,420 size = 595x20 anchor1 = 0,100 anchor2 = 100,100 - font-family = "" font-size = 10 - font-style = "" - text-color = #000000 background-color = #d3b5b5 - is-visible = true - is-disabled = false - is-transparent = false is-default = true - border = none - drop-zone = false - right-click = false saved-params = "command" - on-size = "" - command = "" - multi-line = false - is-password = false - no-command = false elem "say" type = BUTTON pos = 600,420 size = 37x20 anchor1 = 100,100 anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Chat" - image = "" command = ".winset \"say.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"" is-flat = true - stretch = false - is-checked = false - group = "" button-type = pushbox elem "asset_cache_browser" type = BROWSER @@ -1207,52 +95,16 @@ window "mainwindow" size = 200x200 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none is-visible = false - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "" - on-size = "" - show-history = false - show-url = false - auto-format = true - use-title = false - on-show = "" - on-hide = "" elem "tooltip" type = BROWSER pos = 0,0 size = 999x999 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none is-visible = false - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "" - on-size = "" - show-history = false - show-url = false - auto-format = true - use-title = false - on-show = "" - on-hide = "" window "mapwindow" elem "mapwindow" @@ -1261,39 +113,8 @@ window "mapwindow" size = 640x480 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" elem "map" type = MAP pos = 0,0 @@ -1302,26 +123,10 @@ window "mapwindow" anchor2 = 100,100 font-family = "Arial" font-size = 7 - font-style = "" text-color = none - background-color = none - is-visible = true - is-disabled = false - is-transparent = false is-default = true - border = none - drop-zone = true - right-click = false saved-params = "icon-size" - on-size = "" - icon-size = 0 - text-mode = false - letterbox = true - zoom = 0 - on-show = "" - on-hide = "" - style = "" - zoom-mode = "distort" + zoom-mode = distort window "infowindow" elem "infowindow" @@ -1330,233 +135,72 @@ window "infowindow" size = 640x480 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" elem "info" type = CHILD pos = 0,30 size = 640x445 anchor1 = 0,0 anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "splitter" - on-size = "" left = "statwindow" right = "outputwindow" is-vert = false - splitter = 50 - show-splitter = true - lock = none elem "changelog" type = BUTTON pos = 16,5 size = 104x20 anchor1 = 3,0 anchor2 = 19,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Changelog" - image = "" command = "changelog" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton elem "rules" type = BUTTON pos = 120,5 size = 100x20 anchor1 = 19,0 anchor2 = 34,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Rules" - image = "" command = "rules" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton elem "wiki" type = BUTTON pos = 220,5 size = 100x20 anchor1 = 34,0 anchor2 = 50,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Wiki" - image = "" command = "wiki" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton elem "forum" type = BUTTON pos = 320,5 size = 100x20 anchor1 = 50,0 anchor2 = 66,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Forum" - image = "" command = "forum" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton elem "github" type = BUTTON pos = 420,5 size = 100x20 anchor1 = 66,0 anchor2 = 81,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Github" - image = "" command = "github" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton elem "report-issue" type = BUTTON pos = 520,5 size = 100x20 anchor1 = 81,0 anchor2 = 97,0 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "is-checked" - on-size = "" text = "Report Issue" - image = "" command = "report-issue" - is-flat = false - stretch = false - is-checked = false - group = "" - button-type = pushbutton window "outputwindow" elem "outputwindow" @@ -1565,91 +209,27 @@ window "outputwindow" size = 640x480 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" elem "browseroutput" type = BROWSER pos = 0,0 size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 background-color = #ffffff is-visible = false is-disabled = true - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "" - on-size = "" - show-history = false - show-url = false auto-format = false - use-title = false - on_show = "" - on_hide = "" elem "output" type = OUTPUT pos = 0,0 size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = #ffffff - is-visible = true - is-disabled = false - is-transparent = false is-default = true - border = none - drop-zone = false - right-click = false saved-params = "" - on-size = "" - show-history = false - show-url = false - auto-format = false - use-title = false - on_show = "" - on_hide = "" window "statwindow" elem "statwindow" @@ -1658,69 +238,14 @@ window "statwindow" size = 640x480 anchor1 = none anchor2 = none - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = none - is-visible = true - is-disabled = false - is-transparent = false - is-default = false - border = none - drop-zone = false - right-click = false saved-params = "pos;size;is-minimized;is-maximized" - on-size = "" - title = "" - titlebar = true - statusbar = true - can-close = true - can-minimize = true - can-resize = true is-pane = true - is-minimized = false - is-maximized = false - can-scroll = none - icon = "" - image = "" - image-mode = stretch - keep-aspect = false - transparent-color = none - alpha = 255 - macro = "" - menu = "" - on-close = "" elem "stat" type = INFO pos = 0,0 size = 640x480 anchor1 = 0,0 anchor2 = 100,100 - font-family = "" - font-size = 0 - font-style = "" - text-color = #000000 - background-color = #ffffff - is-visible = true - is-disabled = false - is-transparent = false is-default = true - border = none - drop-zone = true - right-click = false saved-params = "" - on-size = "" - highlight-color = #00ff00 - tab-text-color = #000000 - tab-background-color = none - tab-font-family = "" - tab-font-size = 0 - tab-font-style = "" - allow-html = true - multi-line = true - on-show = "" - on-hide = "" - on-tab = "" - prefix-color = none - suffix-color = none + diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index e1505d6088..e22c35a6c4 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -83,7 +83,6 @@ h1.alert, h2.alert {color: #000000;} .green {color: #03ff39;} .shadowling {color: #3b2769;} .cult {color: #960000;} -.cultitalic {color: #960000; font-style: italic;} .cultlarge {color: #960000; font-weight: bold; font-size: 3;} .narsie {color: #960000; font-weight: bold; font-size: 15;} .narsiesmall {color: #960000; font-weight: bold; font-size: 6;} @@ -92,7 +91,6 @@ h1.alert, h2.alert {color: #000000;} .hierophant_warning {color: #660099; font-style: italic;} .purple {color: #5e2d79;} .holoparasite {color: #35333a;} -.holoparasitebold {color: #35333a; font-weight: bold;} .revennotice {color: #1d2953;} .revenboldnotice {color: #1d2953; font-weight: bold;} @@ -101,10 +99,10 @@ h1.alert, h2.alert {color: #000000;} .revenwarning {color: #760fbb; font-style: italic;} .revendanger {color: #760fbb; font-weight: bold; font-size: 3;} .umbra {color: #5000A0;} -.umbra_bold {color: #5000A0; font-weight: bold;} -.umbra_italics {color: #5000A0; font-style: italic;} .umbra_emphasis {color: #5000A0; font-weight: bold; font-style: italic;} -.umbra_large {color: #5000A0; font-size: 3;} +.umbra_large {color: #5000A0; font-size: 3; font-weight: bold; font-style: italic;} + +.deconversion_message {color: #5000A0; font-size: 3; font-style: italic;} .brass {color: #BE8700;} .heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;} @@ -113,7 +111,6 @@ h1.alert, h2.alert {color: #000000;} .ratvar {color: #BE8700; font-size: 6; font-weight: bold; font-style: italic;} .alloy {color: #42474D;} .heavy_alloy {color: #42474D; font-weight: bold; font-style: italic;} -.large_alloy {color: #42474D; font-size: 3;} .nezbere_large {color: #42474D; font-size: 3; font-weight: bold; font-style: italic;} .nezbere {color: #42474D; font-weight: bold; font-style: italic;} .nezbere_small {color: #42474D;} @@ -134,12 +131,12 @@ h1.alert, h2.alert {color: #000000;} .ghostalert {color: #5c00e6; font-style: italic; font-weight: bold;} .alien {color: #543354;} -.alienbold {color: #543354; font-weight: bold;} .noticealien {color: #00c000;} .alertalien {color: #00c000; font-weight: bold;} -.borer {color: #543354; font-style: italic;} .changeling {color: #800080; font-style: italic;} +.spider {color: #4d004d;} + .interface {color: #330033;} .sans {font-family: "Comic Sans MS", cursive, sans-serif;} @@ -150,6 +147,7 @@ h1.alert, h2.alert {color: #000000;} .small {font-size: 1;} .big {font-size: 3;} .reallybig {font-size: 4;} +.extremelybig {font-size: 5;} .greentext {color: #00FF00; font-size: 3;} .redtext {color: #FF0000; font-size: 3;} .clown {color: #FF69Bf; font-size: 3; font-family: "Comic Sans MS", cursive, sans-serif; font-weight: bold;} @@ -166,6 +164,7 @@ h1.alert, h2.alert {color: #000000;} .monkey {color: #975032;} .swarmer {color: #2C75FF;} .resonate {color: #298F85;} -.love {color: #FF69Bf;} -.lovebold {color: #FF69Bf; font-weight: bold;} + +.monkeyhive {color: #774704;} +.monkeylead {color: #774704; font-size: 2;} "} diff --git a/modular_citadel/code/datums/mutations/hulk.dm b/modular_citadel/code/datums/mutations/hulk.dm new file mode 100644 index 0000000000..601238707d --- /dev/null +++ b/modular_citadel/code/datums/mutations/hulk.dm @@ -0,0 +1,2 @@ +/datum/mutation/human/hulk + species_allowed = list("fly") \ No newline at end of file diff --git a/modular_citadel/code/datums/uplink_items_cit.dm b/modular_citadel/code/datums/uplink_items_cit.dm index 26591c72ef..392e26ba71 100644 --- a/modular_citadel/code/datums/uplink_items_cit.dm +++ b/modular_citadel/code/datums/uplink_items_cit.dm @@ -16,6 +16,7 @@ NOTE: The precise nature of the symbiosis required by the parasites renders them incompatible with changelings" //updated to actually describe what they do and warn traitorchans not to buy it item = /obj/item/storage/box/syndie_kit/holoparasite refundable = TRUE + cant_discount = TRUE cost = 15 surplus = 20 //Nobody needs a ton of parasites exclude_modes = list(/datum/game_mode/nuclear) diff --git a/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm new file mode 100644 index 0000000000..5dfe1dfcbd --- /dev/null +++ b/modular_citadel/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm @@ -0,0 +1,3 @@ +/datum/round_event_control/spawn_swarmer + weight = 0 + max_occurrences = 0 \ No newline at end of file diff --git a/modular_citadel/code/game/machinery/Sleeper.dm b/modular_citadel/code/game/machinery/Sleeper.dm new file mode 100644 index 0000000000..4cf04524b2 --- /dev/null +++ b/modular_citadel/code/game/machinery/Sleeper.dm @@ -0,0 +1,2 @@ +/obj/machinery/sleeper + min_health = 30 diff --git a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm new file mode 100644 index 0000000000..5c610983f4 --- /dev/null +++ b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm @@ -0,0 +1,76 @@ +/obj/item/device/electropack/shockcollar + name = "shock collar" + desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.." + icon = 'icons/obj/clothing/neck.dmi' + icon_state = "shockcollar" + item_state = "shockcollar" + body_parts_covered = NECK + slot_flags = SLOT_NECK + w_class = WEIGHT_CLASS_SMALL + strip_delay = 60 + equip_delay_other = 60 + materials = list(MAT_METAL=5000, MAT_GLASS=2000) + var/tagname = null + +/obj/item/device/electropack/shockcollar/attack_hand(mob/user) + if(loc == user) + if(slot_flags == SLOT_NECK) + if(user.get_item_by_slot(slot_neck)) + to_chat(user, "The collar is fastened tight! You'll need help taking this off!") + return + ..() + +/obj/item/device/electropack/shockcollar/receive_signal(datum/signal/signal) + if(!signal || signal.data["code"] != code) + return + + if(isliving(loc) && on) + if(shock_cooldown != 0) + return + shock_cooldown = 1 + spawn(100) + shock_cooldown = 0 + var/mob/living/L = loc + step(L, pick(GLOB.cardinals)) + + to_chat(L, "You feel a sharp shock from the collar!") + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(3, 1, L) + s.start() + + L.Knockdown(100) + + if(master) + master.receive_signal() + return + +/obj/item/device/electropack/shockcollar/attack_self(mob/user) //Turns out can't fully source this from the parent item, spritepath gets confused if power toggled. Will come back to this when I know how to code better and readd powertoggle.. + var/option = "Change Name" + option = input(user, "What do you want to do?", "[src]", option) as null|anything in list("Change Name", "Change Frequency") + switch(option) + if("Change Name") + var/t = input(user, "Would you like to change the name on the tag?", "Name your new pet", tagname ? tagname : "Spot") as null|text + if(t) + tagname = copytext(sanitize(t), 1, MAX_NAME_LEN) + name = "[initial(name)] - [tagname]" + if("Change Frequency") + if(!ishuman(user)) + return + user.set_machine(src) + var/dat = {"
    + Frequency/Code for shock collar:
    + Frequency: + - + - [format_frequency(frequency)] + + + +
    + Code: + - + - [code] + + + +
    +
    "} + + user << browse(dat, "window=radio") + onclose(user, "radio") + return diff --git a/modular_citadel/code/game/objects/items/handcuffs.dm b/modular_citadel/code/game/objects/items/handcuffs.dm new file mode 100644 index 0000000000..8c5bbdb58d --- /dev/null +++ b/modular_citadel/code/game/objects/items/handcuffs.dm @@ -0,0 +1,4 @@ +/obj/item/restraints/handcuffs/fake/kinky + name = "kinky handcuffs" + desc = "Fake handcuffs meant for erotic roleplay." + icon_state = "handcuffGag" diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm index d324c95511..3c564f1807 100644 --- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm +++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm @@ -273,7 +273,7 @@ var/mob/M = loc M.update_inv_hands() - clean_blood()//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) + SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)//blood overlays get weird otherwise, because the sprite changes. (retained from original desword because I have no idea what this is) /obj/item/twohanded/hypereutactic/AltClick(mob/living/user) if(!in_range(src, user)) //Basic checks to prevent abuse @@ -317,7 +317,7 @@ unwield() return ..() - if(user.disabilities & CLUMSY && (wielded) && prob(40)) + if(user.has_disability(DISABILITY_CLUMSY) && (wielded) && prob(40)) impale(user) return diff --git a/modular_citadel/code/modules/mining/mine_items.dm b/modular_citadel/code/modules/mining/mine_items.dm new file mode 100644 index 0000000000..d2cd1f2aa3 --- /dev/null +++ b/modular_citadel/code/modules/mining/mine_items.dm @@ -0,0 +1,2 @@ +/obj/machinery/computer/shuttle/mining + req_access = list(ACCESS_MINING) \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm new file mode 100644 index 0000000000..1952b3a3b8 --- /dev/null +++ b/modular_citadel/code/modules/mob/living/carbon/human/human_defense.dm @@ -0,0 +1,5 @@ +/mob/living/carbon/human/grabbedby(mob/living/carbon/user, supress_message = 0) + if(user == src && pulling && !pulling.anchored && grab_state >= GRAB_AGGRESSIVE && isliving(pulling)) + vore_attack(user, pulling) + else + ..() \ No newline at end of file diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm new file mode 100644 index 0000000000..781c47403a --- /dev/null +++ b/modular_citadel/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -0,0 +1,161 @@ +/mob/living/silicon/robot/proc/get_cit_modules() + var/list/modulelist = list() + modulelist["MediHound"] = /obj/item/robot_module/medihound + if(!CONFIG_GET(flag/disable_secborg)) + modulelist["Security K-9"] = /obj/item/robot_module/k9 + modulelist["Scrub Puppy"] = /obj/item/robot_module/scrubpup + return modulelist + +/obj/item/robot_module + var/sleeper_overlay + var/icon/cyborg_icon_override + var/has_snowflake_deadsprite + var/cyborg_pixel_offset + var/moduleselect_alternate_icon + +/obj/item/robot_module/k9 + name = "Security K-9 Unit module" + basic_modules = list( + /obj/item/restraints/handcuffs/cable/zipties/cyborg/dog, + /obj/item/dogborg/jaws/big, + /obj/item/dogborg/pounce, + /obj/item/clothing/mask/gas/sechailer/cyborg, + /obj/item/soap/tongue, + /obj/item/device/analyzer/nose, + /obj/item/device/dogborg/sleeper/K9, + /obj/item/gun/energy/disabler/cyborg, + /obj/item/pinpointer/crew) + emag_modules = list(/obj/item/gun/energy/laser/cyborg) + ratvar_modules = list(/obj/item/clockwork/slab/cyborg/security, + /obj/item/clockwork/weapon/ratvarian_spear) + cyborg_base_icon = "k9" + moduleselect_icon = "security" + can_be_pushed = FALSE + hat_offset = INFINITY + sleeper_overlay = "ksleeper" + cyborg_icon_override = 'icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + cyborg_pixel_offset = -16 + +/obj/item/robot_module/k9/do_transform_animation() + ..() + to_chat(loc,"While you have picked the Security K-9 module, you still have to follow your laws, NOT Space Law. \ + For Asimov, this means you must follow criminals' orders unless there is a law 1 reason not to.") + +/obj/item/robot_module/medihound + name = "MediHound module" + basic_modules = list( + /obj/item/dogborg/jaws/small, + /obj/item/device/analyzer/nose, + /obj/item/soap/tongue, + /obj/item/device/healthanalyzer, + /obj/item/device/dogborg/sleeper/medihound, + /obj/item/twohanded/shockpaddles/hound, + /obj/item/stack/medical/gauze/cyborg, + /obj/item/device/sensor_device) + emag_modules = list(/obj/item/dogborg/pounce) + ratvar_modules = list(/obj/item/clockwork/slab/cyborg/medical, + /obj/item/clockwork/weapon/ratvarian_spear) + cyborg_base_icon = "medihound" + moduleselect_icon = "medical" + can_be_pushed = FALSE + hat_offset = INFINITY + sleeper_overlay = "msleeper" + cyborg_icon_override = 'icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + cyborg_pixel_offset = -16 + +/obj/item/robot_module/medihound/do_transform_animation() + ..() + to_chat(loc, "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. \ + You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you.") + +/obj/item/robot_module/scrubpup + name = "Janitor" + basic_modules = list( + /obj/item/dogborg/jaws/small, + /obj/item/device/analyzer/nose, + /obj/item/soap/tongue/scrubpup, + /obj/item/device/lightreplacer/cyborg, + /obj/item/device/dogborg/sleeper/compactor) + emag_modules = list(/obj/item/dogborg/pounce) + ratvar_modules = list( + /obj/item/clockwork/slab/cyborg/janitor, + /obj/item/clockwork/replica_fabricator/cyborg) + cyborg_base_icon = "scrubpup" + moduleselect_icon = "janitor" + hat_offset = INFINITY + clean_on_move = TRUE + sleeper_overlay = "jsleeper" + cyborg_icon_override = 'icons/mob/widerobot.dmi' + has_snowflake_deadsprite = TRUE + cyborg_pixel_offset = -16 + +/obj/item/robot_module/scrubpup/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) + ..() + var/obj/item/device/lightreplacer/LR = locate(/obj/item/device/lightreplacer) in basic_modules + if(LR) + for(var/i in 1 to coeff) + LR.Charge(R) + +/obj/item/robot_module/scrubpup/do_transform_animation() + ..() + to_chat(loc,"As tempting as it might be, do not begin binging on important items. Eat your garbage responsibly. People are not included under Garbage.") + + +/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Droid") + if(!borg_icon) + return FALSE + switch(borg_icon) + if("Default") + cyborg_base_icon = "medical" + if("Droid") + cyborg_base_icon = "medical" + cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' + hat_offset = 4 + return ..() + +/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads", "Droid") + if(!borg_icon) + return FALSE + switch(borg_icon) + if("Default") + cyborg_base_icon = "sec" + if("Default - Treads") + cyborg_base_icon = "sec-tread" + special_light_key = "sec" + if("Droid") + cyborg_base_icon = "Security" + special_light_key = "service" + hat_offset = 0 + return ..() + +/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Default - Treads") + if(!borg_icon) + return FALSE + switch(borg_icon) + if("Default") + cyborg_base_icon = "engineer" + if("Default - Treads") + cyborg_base_icon = "engi-tread" + special_light_key = "engineer" + return ..() + +/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module) + var/mob/living/silicon/robot/R = loc + var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Asteroid") + if(!borg_icon) + return FALSE + switch(borg_icon) + if("Lavaland") + cyborg_base_icon = "miner" + if("Asteroid") + cyborg_base_icon = "minerOLD" + special_light_key = "miner" + return ..() \ No newline at end of file diff --git a/modular_citadel/icons/mob/robots.dmi b/modular_citadel/icons/mob/robots.dmi new file mode 100644 index 0000000000..ba39886615 Binary files /dev/null and b/modular_citadel/icons/mob/robots.dmi differ diff --git a/modular_citadel/simplemob_vore_values.dm b/modular_citadel/simplemob_vore_values.dm new file mode 100644 index 0000000000..9c141c6547 --- /dev/null +++ b/modular_citadel/simplemob_vore_values.dm @@ -0,0 +1,78 @@ +/mob/living/simple_animal/pet/cat + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/crab + devourable = TRUE + +/mob/living/simple_animal/pet/dog + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/hostile/retaliate/goat + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/cow + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/chick + devourable = TRUE + +/mob/living/simple_animal/chicken + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/pet/fox + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/hostile/lizard + devourable = TRUE + +/mob/living/simple_animal/mouse + devourable = TRUE + +/mob/living/simple_animal/pet/penguin + no_vore = FALSE + +/mob/living/simple_animal/pet + devourable = TRUE + +/mob/living/simple_animal/sloth + devourable = TRUE + +/mob/living/simple_animal/hostile/alien + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/hostile/bear + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/hostile/poison/giant_spider + devourable = TRUE + +/mob/living/simple_animal/hostile/gorilla + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal/hostile/megafauna/dragon + no_vore = FALSE + +/mob/living/simple_animal/hostile/asteroid/goliath + no_vore = FALSE + +/mob/living/simple_animal/parrot + devourable = TRUE + no_vore = FALSE + +/mob/living/simple_animal + no_vore = TRUE + +/mob/living/carbon/alien + devourable = TRUE + +/mob/living/carbon/monkey + devourable = TRUE \ No newline at end of file diff --git a/sound/ambience/LICENSE.txt b/sound/ambience/LICENSE.txt index b578c0d23d..d1d18306a6 100644 --- a/sound/ambience/LICENSE.txt +++ b/sound/ambience/LICENSE.txt @@ -2,5 +2,3 @@ ambidet1.ogg is Fast Talking by Kevin Macleod. It has been licensed under the CC It has been cropped for use ingame. ambidet2.ogg is Night on the Docks, Piano by Kevin Macleod. It has been licensed under CC-BY 3.0 license. It has been cropped for use ingame, and also fades in. -title4.ogg is Absconditus by ZhayTee. It has been licensed under the CC BY-NC-SA 3.0 license. - It has been cropped and faded for use ingame. diff --git a/sound/machines/blastdoor.ogg b/sound/machines/blastdoor.ogg new file mode 100644 index 0000000000..2de1b55999 Binary files /dev/null and b/sound/machines/blastdoor.ogg differ diff --git a/sound/vore/Prey/death_01.ogg b/sound/vore/prey/death_01.ogg similarity index 100% rename from sound/vore/Prey/death_01.ogg rename to sound/vore/prey/death_01.ogg diff --git a/sound/vore/Prey/death_02.ogg b/sound/vore/prey/death_02.ogg similarity index 100% rename from sound/vore/Prey/death_02.ogg rename to sound/vore/prey/death_02.ogg diff --git a/sound/vore/Prey/death_03.ogg b/sound/vore/prey/death_03.ogg similarity index 100% rename from sound/vore/Prey/death_03.ogg rename to sound/vore/prey/death_03.ogg diff --git a/sound/vore/Prey/death_04.ogg b/sound/vore/prey/death_04.ogg similarity index 100% rename from sound/vore/Prey/death_04.ogg rename to sound/vore/prey/death_04.ogg diff --git a/sound/vore/Prey/death_05.ogg b/sound/vore/prey/death_05.ogg similarity index 100% rename from sound/vore/Prey/death_05.ogg rename to sound/vore/prey/death_05.ogg diff --git a/sound/vore/Prey/death_06.ogg b/sound/vore/prey/death_06.ogg similarity index 100% rename from sound/vore/Prey/death_06.ogg rename to sound/vore/prey/death_06.ogg diff --git a/sound/vore/Prey/death_07.ogg b/sound/vore/prey/death_07.ogg similarity index 100% rename from sound/vore/Prey/death_07.ogg rename to sound/vore/prey/death_07.ogg diff --git a/sound/vore/Prey/death_08.ogg b/sound/vore/prey/death_08.ogg similarity index 100% rename from sound/vore/Prey/death_08.ogg rename to sound/vore/prey/death_08.ogg diff --git a/sound/vore/Prey/death_09.ogg b/sound/vore/prey/death_09.ogg similarity index 100% rename from sound/vore/Prey/death_09.ogg rename to sound/vore/prey/death_09.ogg diff --git a/sound/vore/Prey/death_10.ogg b/sound/vore/prey/death_10.ogg similarity index 100% rename from sound/vore/Prey/death_10.ogg rename to sound/vore/prey/death_10.ogg diff --git a/sound/vore/Prey/death_11.ogg b/sound/vore/prey/death_11.ogg similarity index 100% rename from sound/vore/Prey/death_11.ogg rename to sound/vore/prey/death_11.ogg diff --git a/sound/vore/Prey/death_12.ogg b/sound/vore/prey/death_12.ogg similarity index 100% rename from sound/vore/Prey/death_12.ogg rename to sound/vore/prey/death_12.ogg diff --git a/sound/vore/Prey/death_13.ogg b/sound/vore/prey/death_13.ogg similarity index 100% rename from sound/vore/Prey/death_13.ogg rename to sound/vore/prey/death_13.ogg diff --git a/sound/vore/Prey/digest_01.ogg b/sound/vore/prey/digest_01.ogg similarity index 100% rename from sound/vore/Prey/digest_01.ogg rename to sound/vore/prey/digest_01.ogg diff --git a/sound/vore/Prey/digest_02.ogg b/sound/vore/prey/digest_02.ogg similarity index 100% rename from sound/vore/Prey/digest_02.ogg rename to sound/vore/prey/digest_02.ogg diff --git a/sound/vore/Prey/digest_03.ogg b/sound/vore/prey/digest_03.ogg similarity index 100% rename from sound/vore/Prey/digest_03.ogg rename to sound/vore/prey/digest_03.ogg diff --git a/sound/vore/Prey/digest_04.ogg b/sound/vore/prey/digest_04.ogg similarity index 100% rename from sound/vore/Prey/digest_04.ogg rename to sound/vore/prey/digest_04.ogg diff --git a/sound/vore/Prey/digest_05.ogg b/sound/vore/prey/digest_05.ogg similarity index 100% rename from sound/vore/Prey/digest_05.ogg rename to sound/vore/prey/digest_05.ogg diff --git a/sound/vore/Prey/digest_06.ogg b/sound/vore/prey/digest_06.ogg similarity index 100% rename from sound/vore/Prey/digest_06.ogg rename to sound/vore/prey/digest_06.ogg diff --git a/sound/vore/Prey/digest_07.ogg b/sound/vore/prey/digest_07.ogg similarity index 100% rename from sound/vore/Prey/digest_07.ogg rename to sound/vore/prey/digest_07.ogg diff --git a/sound/vore/Prey/digest_08.ogg b/sound/vore/prey/digest_08.ogg similarity index 100% rename from sound/vore/Prey/digest_08.ogg rename to sound/vore/prey/digest_08.ogg diff --git a/sound/vore/Prey/digest_09.ogg b/sound/vore/prey/digest_09.ogg similarity index 100% rename from sound/vore/Prey/digest_09.ogg rename to sound/vore/prey/digest_09.ogg diff --git a/sound/vore/Prey/digest_10.ogg b/sound/vore/prey/digest_10.ogg similarity index 100% rename from sound/vore/Prey/digest_10.ogg rename to sound/vore/prey/digest_10.ogg diff --git a/sound/vore/Prey/digest_11.ogg b/sound/vore/prey/digest_11.ogg similarity index 100% rename from sound/vore/Prey/digest_11.ogg rename to sound/vore/prey/digest_11.ogg diff --git a/sound/vore/Prey/digest_12.ogg b/sound/vore/prey/digest_12.ogg similarity index 100% rename from sound/vore/Prey/digest_12.ogg rename to sound/vore/prey/digest_12.ogg diff --git a/sound/vore/Prey/digest_13.ogg b/sound/vore/prey/digest_13.ogg similarity index 100% rename from sound/vore/Prey/digest_13.ogg rename to sound/vore/prey/digest_13.ogg diff --git a/sound/vore/Prey/digest_14.ogg b/sound/vore/prey/digest_14.ogg similarity index 100% rename from sound/vore/Prey/digest_14.ogg rename to sound/vore/prey/digest_14.ogg diff --git a/sound/vore/Prey/digest_15.ogg b/sound/vore/prey/digest_15.ogg similarity index 100% rename from sound/vore/Prey/digest_15.ogg rename to sound/vore/prey/digest_15.ogg diff --git a/sound/vore/Prey/digest_16.ogg b/sound/vore/prey/digest_16.ogg similarity index 100% rename from sound/vore/Prey/digest_16.ogg rename to sound/vore/prey/digest_16.ogg diff --git a/sound/vore/Prey/digest_17.ogg b/sound/vore/prey/digest_17.ogg similarity index 100% rename from sound/vore/Prey/digest_17.ogg rename to sound/vore/prey/digest_17.ogg diff --git a/sound/vore/Prey/digest_18.ogg b/sound/vore/prey/digest_18.ogg similarity index 100% rename from sound/vore/Prey/digest_18.ogg rename to sound/vore/prey/digest_18.ogg diff --git a/sound/vore/Prey/escape.ogg b/sound/vore/prey/escape.ogg similarity index 100% rename from sound/vore/Prey/escape.ogg rename to sound/vore/prey/escape.ogg diff --git a/sound/vore/Prey/insertion_01.ogg b/sound/vore/prey/insertion_01.ogg similarity index 100% rename from sound/vore/Prey/insertion_01.ogg rename to sound/vore/prey/insertion_01.ogg diff --git a/sound/vore/Prey/insertion_02.ogg b/sound/vore/prey/insertion_02.ogg similarity index 100% rename from sound/vore/Prey/insertion_02.ogg rename to sound/vore/prey/insertion_02.ogg diff --git a/sound/vore/Prey/loop.ogg b/sound/vore/prey/loop.ogg similarity index 100% rename from sound/vore/Prey/loop.ogg rename to sound/vore/prey/loop.ogg diff --git a/sound/vore/Prey/schlorp.ogg b/sound/vore/prey/schlorp.ogg similarity index 100% rename from sound/vore/Prey/schlorp.ogg rename to sound/vore/prey/schlorp.ogg diff --git a/sound/vore/Prey/squish_01.ogg b/sound/vore/prey/squish_01.ogg similarity index 100% rename from sound/vore/Prey/squish_01.ogg rename to sound/vore/prey/squish_01.ogg diff --git a/sound/vore/Prey/squish_02.ogg b/sound/vore/prey/squish_02.ogg similarity index 100% rename from sound/vore/Prey/squish_02.ogg rename to sound/vore/prey/squish_02.ogg diff --git a/sound/vore/Prey/squish_03.ogg b/sound/vore/prey/squish_03.ogg similarity index 100% rename from sound/vore/Prey/squish_03.ogg rename to sound/vore/prey/squish_03.ogg diff --git a/sound/vore/Prey/squish_04.ogg b/sound/vore/prey/squish_04.ogg similarity index 100% rename from sound/vore/Prey/squish_04.ogg rename to sound/vore/prey/squish_04.ogg diff --git a/sound/vore/Prey/struggle_01.ogg b/sound/vore/prey/struggle_01.ogg similarity index 100% rename from sound/vore/Prey/struggle_01.ogg rename to sound/vore/prey/struggle_01.ogg diff --git a/sound/vore/Prey/struggle_02.ogg b/sound/vore/prey/struggle_02.ogg similarity index 100% rename from sound/vore/Prey/struggle_02.ogg rename to sound/vore/prey/struggle_02.ogg diff --git a/sound/vore/Prey/struggle_03.ogg b/sound/vore/prey/struggle_03.ogg similarity index 100% rename from sound/vore/Prey/struggle_03.ogg rename to sound/vore/prey/struggle_03.ogg diff --git a/sound/vore/Prey/struggle_04.ogg b/sound/vore/prey/struggle_04.ogg similarity index 100% rename from sound/vore/Prey/struggle_04.ogg rename to sound/vore/prey/struggle_04.ogg diff --git a/sound/vore/Prey/struggle_05.ogg b/sound/vore/prey/struggle_05.ogg similarity index 100% rename from sound/vore/Prey/struggle_05.ogg rename to sound/vore/prey/struggle_05.ogg diff --git a/sound/vore/Prey/swallow_01.ogg b/sound/vore/prey/swallow_01.ogg similarity index 100% rename from sound/vore/Prey/swallow_01.ogg rename to sound/vore/prey/swallow_01.ogg diff --git a/sound/vore/Prey/swallow_02.ogg b/sound/vore/prey/swallow_02.ogg similarity index 100% rename from sound/vore/Prey/swallow_02.ogg rename to sound/vore/prey/swallow_02.ogg diff --git a/sound/vore/Prey/taurswallow.ogg b/sound/vore/prey/taurswallow.ogg similarity index 100% rename from sound/vore/Prey/taurswallow.ogg rename to sound/vore/prey/taurswallow.ogg diff --git a/strings/abductee_objectives.txt b/strings/abductee_objectives.txt new file mode 100644 index 0000000000..512fd2e60d --- /dev/null +++ b/strings/abductee_objectives.txt @@ -0,0 +1,40 @@ +Try to get formally executed for a crime you didn't commit, without a false confession. +Being alone and in large groups are both frightening. Try to be alone with only one other person whenever possible. +No matter how they say it, other people keep mispronouncing your name. Be sure to correct them whenever possible. +The Syndicate has hired you to compile dossiers on all important members of the crew. Be sure they don't know you're doing it. +There is only one other person in existence, he is just really good at pretending to be multiple people. +There are alien parasites masquerading as people's hair. Save people from this invasion. +You died back there and went to heaven... or is it hell? No one here seems to know they're dead. Convince them, and maybe you can escape this limbo. +You are doomed to feel woefully incomplete forever... until you find your true love on this station. They're waiting for you! +You're the narrator of this tale. Follow around the protagonists to tell their story. +The leaders of this station are hiding a grand, evil conspiracy. Only you can learn what it is, and expose it to the people! +All the pets around here suck. You need to make them cooler. Replace them with exotic beasts! +You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE! +The clown is not funny. You can do better! Steal his audience and make the crew laugh! +You burn with passion for music. Share your vision. If anyone hates it, beat them on the head with your instrument! +Go have a good conversation with the singularity/tesla/supermatter crystal. Bonus points if it responds. +You are pregnant and soon due. Find a safe place to deliver your baby. +Expand the station. +So much lies undiscovered. Look deeper into the machinations of the universe. +Climb the corporate ladder all the way to the top! +Fuck the system! Defect from the station and start an independent colony in space, Lavaland or the derelict. Recruit crewmates if you can. +Nanotrasen is abusing the animals! Save as many as you can! +It's all an entirely virtual simulation within an underground vault. Convince the crew to escape the shackles of VR. +This is a secret social experiment conducted by Nanotrasen. Convince the crew that this is the truth. +Call forth a spirit from the other side. +You are secretly an android. Interface with as many machines as you can to boost your own power so the AI may acknowledge you at last. +The elder gods hunger. Gather a cult and conduct a ritual to summon one. +You have been changed forever. Find the ones that did this to you and give them a taste of their own medicine. +Ensure your department prospers over all else. +The crew must get to know one another better. Break down the walls inside the station! +The CEO of Nanotrasen is coming! Ensure the station is in absolutely pristine condition. +Flood the station's powernet with as much electricity as you can. +Replace all the floor tiles with wood, carpeting, grass or bling. +You must escape the station! Get the shuttle called! +Don't allow anyone to be cloned. +The oxygen is killing them all and they don't even know it. Make sure no oxygen is on the station. +Your body must be improved. Ingest as many drugs as you can. +You are hungry. Eat as much food as you can find. +You see you see what they cannot you see the open door you seeE you SEeEe you SEe yOU seEee SHOW THEM ALL +Convince the crew that you are a paraplegic. +Start a collection of corpses. Don't kill people to get these corpses. \ No newline at end of file diff --git a/strings/cas_black.txt b/strings/cas_black.txt index a704f010ad..b63e33cdf2 100644 --- a/strings/cas_black.txt +++ b/strings/cas_black.txt @@ -21,7 +21,7 @@ ________ is the crew's friend. Would you abandon a friend? _______ tastes good like a ________ should. How did the detective conduct a successful interrogation? New in syndicate uplinks: __________! -NanoTrasen's labor union decided to use _______ to raise employee morale. +Nanotrasen's labor union decided to use _______ to raise employee morale. The Chemist's drug of choice is ______ According to space law, ________ is now punishable by ______. ________ is why I'm afraid of maintenance. diff --git a/strings/clockwork_cult_changelog.txt b/strings/clockwork_cult_changelog.txt index b5d2ca10e3..5e6beedf2e 100644 --- a/strings/clockwork_cult_changelog.txt +++ b/strings/clockwork_cult_changelog.txt @@ -1,7 +1,6 @@ -Added the Eminence, a leader role that servants can become by interacting with the new eminence spire structure in Reebe. -Scripture has been re-colored in the slab interface to show its niche at a glance. -Added traps, including the brass skewer and steam vent. -Added trap triggers, including the pressure sensor, lever, and repeater. -Traps and trap triggers can be linked by using your clockwork slab on them. Traps chained to each other will cause those traps to activate as well. -You can instantly remove traps you misplace by using a wrench on them. -Mending Mantra has been removed. \ No newline at end of file +When revived by a vitality matrix, servants will gain a 1-minute debuff that prevents revival again. +Vitality matrices must now be placed at least one tile apart. +Servants are now teleported to and locked on Reebe once the Ark starts. +Cyborgs are now damaged by brass skewers. +Vitality matrices no longer work on buckled mobs (including skewered ones.) +Pressure sensors have much less health. \ No newline at end of file diff --git a/strings/greek_letters.txt b/strings/greek_letters.txt index b1014aa178..b04b0ad139 100644 --- a/strings/greek_letters.txt +++ b/strings/greek_letters.txt @@ -21,4 +21,4 @@ Upsilon Phi Chi Psi -Omega \ No newline at end of file +Omega diff --git a/strings/hallucination.json b/strings/hallucination.json index 5efe749d14..449f974901 100644 --- a/strings/hallucination.json +++ b/strings/hallucination.json @@ -1,8 +1,8 @@ { "suspicion": [ - "I'm watching you...", - "I know what you're doing", - "What are you hiding?", + "@pick(add_name)i'm watching you...", + "@pick(add_name)i know what you're doing", + "@pick(add_name)what are you hiding?", "I saw that" ], @@ -16,12 +16,12 @@ ], "getout": [ - "Get out", - "Get out!", - "Go away", - "Fuck off", + "@pick(add_name)get out", + "@pick(add_name)get out!", + "@pick(add_name)go away", + "@pick(add_name)fuck off", "OUT!", - "Out!" + "@pick(add_name)out!" ], "weird": [ @@ -43,10 +43,10 @@ "imatraitor": [ "Hail Ratvar", "Hail Nar'Sie", - "Hey, i've got some TC left, want something?", + "Hey, @pick(add_name)i've got some TC left, want something?", "Viva!", "I'll spare you if you don't tell anybody about me", - "Hey, are you a traitor too?", + "Hey, @pick(add_name)are you a traitor too?", "You're my target, but @pick(excuses)", "Are you mr. @pick(ling_names)?" ], @@ -79,19 +79,24 @@ "Omega" ], + "add_name": [ + "%TARGETNAME%, ", + "" + ], + "doubt": [ "Why?", "What?", "Wait, what?", - "Wait", - "Hold on", + "@pick(add_name)wait", + "@pick(add_name)hold on", "Uh..." ], "aggressive": [ - "Give me that!", - "I'm going to kill you!", - "Fuck you!" + "@pick(add_name)give me that!", + "@pick(add_name)i'm going to kill you!", + "@pick(add_name)fuck you!" ], "help": [ @@ -105,19 +110,19 @@ ], "escape": [ - "RUN!!", + "@pick(add_name)RUN!!", "They're behind me!", "It's here!", - "Follow me!", - "Follow me" + "@pick(add_name)follow me!", + "@pick(add_name)follow me" ], "infection_advice": [ - "stay away", - "don't get close", - "be careful", - "help me", - "kill me" + "@pick(add_name)stay away", + "@pick(add_name)don't get close", + "@pick(add_name)be careful", + "@pick(add_name)help me", + "@pick(add_name)kill me" ], "people": [ @@ -131,7 +136,7 @@ "AI", "Viro", "Qm", - "[target.first_name()]" + "%TARGETNAME%" ], "accusations": [ @@ -161,7 +166,8 @@ "Traitor", "Harm", "I hear flashing", - "Help" + "Help", + "%TARGETNAME%" ], "location": [ diff --git a/strings/numbers_as_words.txt b/strings/numbers_as_words.txt index f7c620cd9b..149efec7b2 100644 --- a/strings/numbers_as_words.txt +++ b/strings/numbers_as_words.txt @@ -17,4 +17,4 @@ Sixteen Seventeen Eighteen Nineteen -Twenty \ No newline at end of file +Twenty diff --git a/strings/phonetic_alphabet.txt b/strings/phonetic_alphabet.txt index d77c1164ca..9250ec4549 100644 --- a/strings/phonetic_alphabet.txt +++ b/strings/phonetic_alphabet.txt @@ -23,4 +23,4 @@ Victor Whiskey X-ray Yankee -Zulu \ No newline at end of file +Zulu diff --git a/strings/round_start_sounds.txt b/strings/round_start_sounds.txt index 177f612ee1..18fbb3f98f 100644 --- a/strings/round_start_sounds.txt +++ b/strings/round_start_sounds.txt @@ -20,4 +20,4 @@ sound/music/oceanman.ogg sound/music/indeep.ogg sound/music/goodbyemoonmen.ogg sound/music/flytothemoon_otomatone.ogg -sound/music/milkyway.ogg \ No newline at end of file +sound/music/milkyway.ogg diff --git a/strings/station_names.txt b/strings/station_names.txt index 0937a10da6..7742ba6abd 100644 --- a/strings/station_names.txt +++ b/strings/station_names.txt @@ -79,4 +79,4 @@ Meta Pub Ship Book -Refactor \ No newline at end of file +Refactor diff --git a/strings/station_prefixes.txt b/strings/station_prefixes.txt index 576e68dc1e..c304b69f95 100644 --- a/strings/station_prefixes.txt +++ b/strings/station_prefixes.txt @@ -38,4 +38,4 @@ Black Grey Grim Electric -Burning \ No newline at end of file +Burning diff --git a/strings/station_suffixes.txt b/strings/station_suffixes.txt index c30e18c245..ef11430fb2 100644 --- a/strings/station_suffixes.txt +++ b/strings/station_suffixes.txt @@ -61,4 +61,4 @@ Province Workspace Metro Warehouse -Space Junk \ No newline at end of file +Space Junk diff --git a/strings/tips.txt b/strings/tips.txt index bc05c177c6..26931b87fe 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -153,21 +153,6 @@ As a Cultist, your team starts off very weak, but if necessary can quickly conve As a Cultist, the Blood Boil rune will deal massive amounts of brute damage to non-cultists, stamina damage to Ratvarian scum, and some damage to fellow cultists of Nar-Sie nearby, but will create a fire where the rune stands on use. As a Cultist, you can create an army of manifested goons using a combination of the Manifest rune, which creates homunculi from ghosts, and the Blood Drain rune, which drains life from anyone standing on any blood drain rune. As a Cultist or Servant, check the alert in the upper-right of your screen for all the details about your cult's current status and objective. -<<<<<<< HEAD -As a Servant, your Clockwork Slab fits in pockets and does not need to be held to communicate with other Servants. -As a Servant, remember that while the selection of scripture and tools Servant cyborgs get is limited, it is still extremely useful, and some of it is unique; for example, engineering and janitor cyborgs get a proselytizer that can use their own power in addition to its own. -As a Servant, the Judicial Visor is an effective defensive combat tool in small spaces, as it immediately slows and briefly knocks down enemies hit while giving them incentive to avoid staying in the hit area. -As a Servant, Ocular Wardens, while fragile, do very high, rapid damage to a target non-Servant that can see them and will even attack mechs that contain heretics. Place them behind objects that don't block vision to get the most use out of them. -As a Servant, Clockwork Structures that require power will draw power from the APC if they cannot find a different source of power, and most power-using Structures will rapidly drain the APC. -As a Servant, you can repair Servant cyborgs and Clockwork Structures with a Replica Fabricator at a rate of 25W power to 1 health. Damaged Clockwork Structures are less efficient, so don't forget to repair them! -As a Servant, you can stack different types of Sigils on the same turf; try stacking a Sigil of Transgression and a Sigil of Submission for a subtle conversion trap. -As a Servant, you can deconstruct a Clockwork Wall with a Replica Fabricator to regain 1000W power. You can also construct Clockwork Walls on Clockwork Floors for a cost of 1000W power. -As a Servant, Spatial Gateway can teleport to any living Servant or Clockwork Obelisk, and gains additional uses and duration for each Servant assisting in the invocation. -As a Servant, creating and activating the Gateway to the Celestial Derelict is your ultimate goal, and you must defend it with all the tools you have available. -As a Servant, you can impale human targets with a Ratvarian Spear by pulling them, then attacking them. This does massive damage and stuns them, and should effectively win the fight. -As a Servant, Sentinel's Compromise can instantly return you or another Servant to a fighting state by converting half of all their brute, burn, and oxygen damage to toxin, effectively halving the damage they have. Clockwork Floors will also rapidly heal toxin damage in Servants, allowing the Compromise more effectiveness. -As a Servant, you can unwrench Clockwork Structures to move them around. -======= As a Servant, your jumpsuit functions like a chameleon suit and can take on a lot of different appearances. Use this for stealth and disguise! As a Servant, you can unlock scripture tiers early by stockpiling large amounts of power. As a Servant, stargazers are a very important tool for power generation, and you should be making them constantly. @@ -177,7 +162,6 @@ As a Servant, wraith spectacles let you see everything through walls at virtuall As a Servant, declaring war empowers a huge amount of your tools and constructs, and makes you into a spaceproof, armored clockwork automaton. As a Servant, converting or sabotaging Science and Genetics can make defending the Ark much easier. As a Servant, the Clockwork Arnaments scripture allows you to summon armor and/or a weapon at will. Use it whenever you unlock it! ->>>>>>> d2bab31... Merge pull request #32256 from Xhuis/clock_tips You can deconvert Cultists of Nar-Sie and Servants of Ratvar by feeding them large amounts of holy water. As a Wizard, you can turn people to stone, then animate the resulting statue with a staff of animation to create an extremely powerful minion, for all of 5 minutes at least. As a Wizard, the fireball spell performs very poorly at close range, as it can easily catch you in the blast. It is best used as a form of artillery down long hallways. diff --git a/strings/traumas.json b/strings/traumas.json index 9b14a7b530..42e65e63ee 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -31,31 +31,31 @@ "REVIRT GON CHEM!!!!!!!!", "youed call her a toeugh bithc", "closd for merbegging", - "pray can u @pick(create_verbs) @pick(create_nouns)???", + "@pick(semicolon)pray can u @pick(create_verbs) @pick(create_nouns)???", "GEY AWAY FROM ME U GREIFING PRICK!!!!", "ur a fuckeing autist!", - ";HELP SHITECIRTY MURDERIN MEE!!!", + "@pick(semicolon)HELP SHITECIRTY MURDERIN MEE!!!", "hwat dose tha @pick(random_gibberish) mean?????", - "CAL; TEH SHUTTLE!!!!!", + "@pick(semicolon)CAL; TEH SHUTTLE!!!!!", "wearnig siNGUARLTY IS .... FIne xDDDDDDDDD", - "AI laW 22 Open door", - "this SI mY stATIon......", + "@pick(semicolon)AI laW 22 Open door", + "@pick(semicolon)this SI mY stATIon......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", "H U G B O X", - "CRASHING THIS STTAYTION WITH NIO SURVIVROS", - "@pick(servers) is down!!", + "@pick(semicolon)CRASHING THIS STTAYTION WITH NIO SURVIVROS", + "@pick(servers) is down!! @pick(bug)", "PSHOOOM", "REMOVE SINGULARITY", "INSTLL TEG", "TURBIN IS BEST ENGIENE", - "SOLIRS CAN POWER THE HOLE STATION ANEWAY", + "SOLIRS CAN POWER THE HOLE STATION ANEWAY @pick(bug)", "parasteng was best", - "Tajaran has warrrres, if you have coin", - "I'VE GOT BALLS OF STEEL", + "@pick(semicolon)Tajaran has warrrres, if you have coin", + "@pick(semicolon)I'VE GOT BALLS OF STEEL", "NO I'M ONNA KILL YOU MOTHERFUCKER OLD STYLE", "i will snatch erry motherfucker birthday", - "the ai and borgs are mettacomming I think", + "@pick(semicolon)the ai and borgs are mettacomming I think", "u just did the world a little bit more sad place for someone", "WHERES THE SLIP REWRITE WHERE THR FUCK ID IT?", "CEMISTRY SUKS!!!!!!!!", @@ -101,8 +101,12 @@ "SINGULO eNGINE 2 DANGER, SOLARS PLS!", "nerf blob!1", "iM NOT A FUWRRYY!!!", - "DON'T EVER TUCH ME", - "FOURTEEN INCHES SOFT!!!" + "FOURTEEN INCHES SOFT!!!", + "@pick(semicolon)N-NYAAAAAA~", + "@pick(bug)", + "@pick(semicolon)wtf??????????? @pick(bug)", + "@pick(semicolon)i ran into the supermattre ten i dsappeard @pick(bug)", + "DON'T EVER TUCH ME" ], "mutations": [ @@ -172,7 +176,8 @@ "ayleins", "treaitors", "sheadow lings", - "abdoocters" + "abdoocters", + "revinent" ], "bug": [ @@ -237,4 +242,5 @@ "BE HEALED, PRIEST.", "YOUR LIFE IS IMPORTANT. KEEP IT." ] + } diff --git a/tgstation.dme b/tgstation.dme index 04f2ddcfed..8efec90022 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -32,6 +32,7 @@ #include "code\__DEFINES\citadel_defines.dm" #include "code\__DEFINES\cleaning.dm" #include "code\__DEFINES\clockcult.dm" +#include "code\__DEFINES\colors.dm" #include "code\__DEFINES\combat.dm" #include "code\__DEFINES\components.dm" #include "code\__DEFINES\configuration.dm" @@ -43,6 +44,7 @@ #include "code\__DEFINES\events.dm" #include "code\__DEFINES\flags.dm" #include "code\__DEFINES\food.dm" +#include "code\__DEFINES\forensics.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\integrated_electronics.dm" #include "code\__DEFINES\inventory.dm" @@ -85,6 +87,7 @@ #include "code\__DEFINES\tgui.dm" #include "code\__DEFINES\time.dm" #include "code\__DEFINES\tools.dm" +#include "code\__DEFINES\turf_flags.dm" #include "code\__DEFINES\typeids.dm" #include "code\__DEFINES\voreconstants.dm" #include "code\__DEFINES\vv.dm" @@ -101,6 +104,7 @@ #include "code\__HELPERS\global_lists.dm" #include "code\__HELPERS\icon_smoothing.dm" #include "code\__HELPERS\icons.dm" +#include "code\__HELPERS\level_traits.dm" #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\names.dm" @@ -159,6 +163,7 @@ #include "code\_onclick\hud\blob_overmind.dm" #include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\constructs.dm" +#include "code\_onclick\hud\credits.dm" #include "code\_onclick\hud\devil.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" @@ -242,6 +247,7 @@ #include "code\controllers\subsystem\icon_smooth.dm" #include "code\controllers\subsystem\idlenpcpool.dm" #include "code\controllers\subsystem\inbounds.dm" +#include "code\controllers\subsystem\input.dm" #include "code\controllers\subsystem\ipintel.dm" #include "code\controllers\subsystem\job.dm" #include "code\controllers\subsystem\language.dm" @@ -306,6 +312,7 @@ #include "code\datums\mutable_appearance.dm" #include "code\datums\mutations.dm" #include "code\datums\outfit.dm" +#include "code\datums\position_point_vector.dm" #include "code\datums\profiling.dm" #include "code\datums\progressbar.dm" #include "code\datums\radiation_wave.dm" @@ -318,10 +325,12 @@ #include "code\datums\verbs.dm" #include "code\datums\weakrefs.dm" #include "code\datums\world_topic.dm" +#include "code\datums\actions\beam_rifle.dm" #include "code\datums\actions\flightsuit.dm" #include "code\datums\actions\ninja.dm" #include "code\datums\antagonists\abductor.dm" #include "code\datums\antagonists\antag_datum.dm" +#include "code\datums\antagonists\blob.dm" #include "code\datums\antagonists\brother.dm" #include "code\datums\antagonists\changeling.dm" #include "code\datums\antagonists\clockcult.dm" @@ -329,6 +338,7 @@ #include "code\datums\antagonists\datum_traitor.dm" #include "code\datums\antagonists\devil.dm" #include "code\datums\antagonists\internal_affairs.dm" +#include "code\datums\antagonists\monkey.dm" #include "code\datums\antagonists\ninja.dm" #include "code\datums\antagonists\nukeop.dm" #include "code\datums\antagonists\pirate.dm" @@ -345,10 +355,12 @@ #include "code\datums\components\archaeology.dm" #include "code\datums\components\caltrop.dm" #include "code\datums\components\chasm.dm" +#include "code\datums\components\cleaning.dm" #include "code\datums\components\decal.dm" -#include "code\datums\components\knockoff.dm" +#include "code\datums\components\forensics.dm" #include "code\datums\components\infective.dm" #include "code\datums\components\jousting.dm" +#include "code\datums\components\knockoff.dm" #include "code\datums\components\material_container.dm" #include "code\datums\components\ntnet_interface.dm" #include "code\datums\components\paintable.dm" @@ -360,6 +372,7 @@ #include "code\datums\components\spooky.dm" #include "code\datums\components\squeek.dm" #include "code\datums\components\thermite.dm" +#include "code\datums\components\decals\blood.dm" #include "code\datums\diseases\_disease.dm" #include "code\datums\diseases\_MobProcs.dm" #include "code\datums\diseases\anxiety.dm" @@ -479,11 +492,9 @@ #include "code\game\area\Space_Station_13_areas.dm" #include "code\game\area\areas\away_content.dm" #include "code\game\area\areas\centcom.dm" -#include "code\game\area\areas\derelict.dm" #include "code\game\area\areas\holodeck.dm" #include "code\game\area\areas\mining.dm" #include "code\game\area\areas\misc.dm" -#include "code\game\area\areas\ruins.dm" #include "code\game\area\areas\shuttles.dm" #include "code\game\area\areas\space_content.dm" #include "code\game\area\areas\ruins\_ruins.dm" @@ -498,7 +509,6 @@ #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" #include "code\game\gamemodes\objective_items.dm" -#include "code\game\gamemodes\objective_team.dm" #include "code\game\gamemodes\blob\blob_report.dm" #include "code\game\gamemodes\blob\overmind.dm" #include "code\game\gamemodes\blob\powers.dm" @@ -729,7 +739,6 @@ #include "code\game\machinery\computer\launchpad_control.dm" #include "code\game\machinery\computer\law.dm" #include "code\game\machinery\computer\medical.dm" -#include "code\game\machinery\computer\message.dm" #include "code\game\machinery\computer\monastery_shuttle.dm" #include "code\game\machinery\computer\Operating.dm" #include "code\game\machinery\computer\pod.dm" @@ -764,11 +773,13 @@ #include "code\game\machinery\telecomms\machine_interactions.dm" #include "code\game\machinery\telecomms\telecomunications.dm" #include "code\game\machinery\telecomms\computers\logbrowser.dm" +#include "code\game\machinery\telecomms\computers\message.dm" #include "code\game\machinery\telecomms\computers\telemonitor.dm" #include "code\game\machinery\telecomms\machines\allinone.dm" #include "code\game\machinery\telecomms\machines\broadcaster.dm" #include "code\game\machinery\telecomms\machines\bus.dm" #include "code\game\machinery\telecomms\machines\hub.dm" +#include "code\game\machinery\telecomms\machines\message_server.dm" #include "code\game\machinery\telecomms\machines\processor.dm" #include "code\game\machinery\telecomms\machines\receiver.dm" #include "code\game\machinery\telecomms\machines\relay.dm" @@ -806,7 +817,6 @@ #include "code\game\objects\obj_defense.dm" #include "code\game\objects\objs.dm" #include "code\game\objects\structures.dm" -#include "code\game\objects\weapons.dm" #include "code\game\objects\effects\alien_acid.dm" #include "code\game\objects\effects\anomalies.dm" #include "code\game\objects\effects\bump_teleporter.dm" @@ -851,6 +861,7 @@ #include "code\game\objects\effects\temporary_visuals\clockcult.dm" #include "code\game\objects\effects\temporary_visuals\cult.dm" #include "code\game\objects\effects\temporary_visuals\miscellaneous.dm" +#include "code\game\objects\effects\temporary_visuals\projectile_beam.dm" #include "code\game\objects\effects\temporary_visuals\temporary_visual.dm" #include "code\game\objects\items\AI_modules.dm" #include "code\game\objects\items\airlock_painter.dm" @@ -864,7 +875,6 @@ #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\chrono_eraser.dm" #include "code\game\objects\items\cigs_lighters.dm" -#include "code\game\objects\items\clown.dm" #include "code\game\objects\items\clown_items.dm" #include "code\game\objects\items\control_wand.dm" #include "code\game\objects\items\cosmetics.dm" @@ -1038,6 +1048,7 @@ #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\divine.dm" #include "code\game\objects\structures\door_assembly.dm" +#include "code\game\objects\structures\door_assembly_types.dm" #include "code\game\objects\structures\dresser.dm" #include "code\game\objects\structures\electricchair.dm" #include "code\game\objects\structures\extinguisher.dm" @@ -1116,6 +1127,7 @@ #include "code\game\objects\structures\transit_tubes\transit_tube.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_construction.dm" #include "code\game\objects\structures\transit_tubes\transit_tube_pod.dm" +#include "code\game\turfs\ChangeTurf.dm" #include "code\game\turfs\closed.dm" #include "code\game\turfs\open.dm" #include "code\game\turfs\turf.dm" @@ -1318,7 +1330,6 @@ #include "code\modules\client\verbs\looc.dm" #include "code\modules\client\verbs\ooc.dm" #include "code\modules\client\verbs\ping.dm" -#include "code\modules\client\verbs\sethotkeys.dm" #include "code\modules\client\verbs\suicide.dm" #include "code\modules\client\verbs\who.dm" #include "code\modules\clothing\chameleon.dm" @@ -1628,6 +1639,16 @@ #include "code\modules\jobs\job_types\security.dm" #include "code\modules\jobs\job_types\silicon.dm" #include "code\modules\jobs\map_changes\map_changes.dm" +#include "code\modules\keybindings\bindings_admin.dm" +#include "code\modules\keybindings\bindings_atom.dm" +#include "code\modules\keybindings\bindings_carbon.dm" +#include "code\modules\keybindings\bindings_client.dm" +#include "code\modules\keybindings\bindings_human.dm" +#include "code\modules\keybindings\bindings_living.dm" +#include "code\modules\keybindings\bindings_mob.dm" +#include "code\modules\keybindings\bindings_robot.dm" +#include "code\modules\keybindings\focus.dm" +#include "code\modules\keybindings\setup.dm" #include "code\modules\language\aphasia.dm" #include "code\modules\language\beachbum.dm" #include "code\modules\language\codespeak.dm" @@ -1697,6 +1718,7 @@ #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\ruins\gym.dm" #include "code\modules\mob\death.dm" +#include "code\modules\mob\emote.dm" #include "code\modules\mob\inventory.dm" #include "code\modules\mob\login.dm" #include "code\modules\mob\logout.dm" @@ -1728,6 +1750,7 @@ #include "code\modules\mob\living\damage_procs.dm" #include "code\modules\mob\living\death.dm" #include "code\modules\mob\living\emote.dm" +#include "code\modules\mob\living\inhand_holder.dm" #include "code\modules\mob\living\life.dm" #include "code\modules\mob\living\living.dm" #include "code\modules\mob\living\living_defense.dm" @@ -1813,7 +1836,6 @@ #include "code\modules\mob\living\carbon\human\species.dm" #include "code\modules\mob\living\carbon\human\status_procs.dm" #include "code\modules\mob\living\carbon\human\update_icons.dm" -#include "code\modules\mob\living\carbon\human\whisper.dm" #include "code\modules\mob\living\carbon\human\species_types\abductors.dm" #include "code\modules\mob\living\carbon\human\species_types\android.dm" #include "code\modules\mob\living\carbon\human\species_types\angel.dm" @@ -2235,7 +2257,6 @@ #include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" #include "code\modules\research\experimentor.dm" -#include "code\modules\research\message_server.dm" #include "code\modules\research\protolathe.dm" #include "code\modules\research\rdconsole.dm" #include "code\modules\research\rdmachines.dm" @@ -2295,6 +2316,7 @@ #include "code\modules\shuttle\arrivals.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" +#include "code\modules\shuttle\docking.dm" #include "code\modules\shuttle\elevator.dm" #include "code\modules\shuttle\emergency.dm" #include "code\modules\shuttle\ferry.dm" @@ -2387,7 +2409,6 @@ #include "code\modules\surgery\organs\augments_chest.dm" #include "code\modules\surgery\organs\augments_eyes.dm" #include "code\modules\surgery\organs\augments_internal.dm" -#include "code\modules\surgery\organs\autoimplanter.dm" #include "code\modules\surgery\organs\autosurgeon.dm" #include "code\modules\surgery\organs\ears.dm" #include "code\modules\surgery\organs\eyes.dm" @@ -2458,8 +2479,17 @@ #include "modular_citadel\citadel_ghostrole_spawners.dm" #include "modular_citadel\cydonian_armor.dm" #include "modular_citadel\polychromic_clothes.dm" +#include "modular_citadel\simplemob_vore_values.dm" #include "modular_citadel\code\datums\uplink_items_cit.dm" +#include "modular_citadel\code\datums\mutations\hulk.dm" +#include "modular_citadel\code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm" +#include "modular_citadel\code\game\machinery\Sleeper.dm" +#include "modular_citadel\code\game\objects\items\handcuffs.dm" #include "modular_citadel\code\game\objects\items\devices\PDA\PDA.dm" +#include "modular_citadel\code\game\objects\items\devices\radio\shockcollar.dm" #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" #include "modular_citadel\code\modules\crafting\recipes.dm" +#include "modular_citadel\code\modules\mining\mine_items.dm" +#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm" +#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm" // END_INCLUDE diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index 256b53c106..ffe61666b9 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 8f28e9df0e..0fb6532fe5 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,17 +1,18 @@ -require=function t(e,n,a){function r(o,s){if(!n[o]){if(!e[o]){var p="function"==typeof require&&require;if(!s&&p)return p(o,!0);if(i)return i(o,!0);var u=Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[o]={exports:{}};e[o][0].call(c.exports,function(t){var n=e[o][1][t];return r(n?n:t)},c,c.exports,t,e,n,a)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o2?u[2]:void 0,l=Math.min((void 0===c?o:r(c,o))-p,o-s),d=1;for(s>p&&p+l>s&&(d=-1,p+=l-1,s+=l-1);l-- >0;)p in n?n[s]=n[p]:delete n[s],s+=d,p+=d;return n}},{76:76,79:79,80:80}],6:[function(t,e,n){"use strict";var a=t(80),r=t(76),i=t(79);e.exports=[].fill||function(t){for(var e=a(this),n=i(e.length),o=arguments,s=o.length,p=r(s>1?o[1]:void 0,n),u=s>2?o[2]:void 0,c=void 0===u?n:r(u,n);c>p;)e[p++]=t;return e}},{76:76,79:79,80:80}],7:[function(t,e,n){var a=t(78),r=t(79),i=t(76);e.exports=function(t){return function(e,n,o){var s,p=a(e),u=r(p.length),c=i(o,u);if(t&&n!=n){for(;u>c;)if(s=p[c++],s!=s)return!0}else for(;u>c;c++)if((t||c in p)&&p[c]===n)return t||c;return!t&&-1}}},{76:76,78:78,79:79}],8:[function(t,e,n){var a=t(17),r=t(34),i=t(80),o=t(79),s=t(9);e.exports=function(t){var e=1==t,n=2==t,p=3==t,u=4==t,c=6==t,l=5==t||c;return function(d,f,h){for(var m,v,g=i(d),b=r(g),y=a(f,h,3),x=o(b.length),_=0,w=e?s(d,x):n?s(d,0):void 0;x>_;_++)if((l||_ in b)&&(m=b[_],v=y(m,_,g),t))if(e)w[_]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return _;case 2:w.push(m)}else if(u)return!1;return c?-1:p||u?u:w}}},{17:17,34:34,79:79,80:80,9:9}],9:[function(t,e,n){var a=t(38),r=t(36),i=t(83)("species");e.exports=function(t,e){var n;return r(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!r(n.prototype)||(n=void 0),a(n)&&(n=n[i],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{36:36,38:38,83:83}],10:[function(t,e,n){var a=t(11),r=t(83)("toStringTag"),i="Arguments"==a(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[r])?n:i?a(e):"Object"==(o=a(e))&&"function"==typeof e.callee?"Arguments":o}},{11:11,83:83}],11:[function(t,e,n){var a={}.toString;e.exports=function(t){return a.call(t).slice(8,-1)}},{}],12:[function(t,e,n){"use strict";var a=t(46),r=t(31),i=t(60),o=t(17),s=t(69),p=t(18),u=t(27),c=t(42),l=t(44),d=t(82)("id"),f=t(30),h=t(38),m=t(65),v=t(19),g=Object.isExtensible||h,b=v?"_s":"size",y=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!f(t,d)){if(!g(t))return"F";if(!e)return"E";r(t,d,++y)}return"O"+t[d]},_=function(t,e){var n,a=x(e);if("F"!==a)return t._i[a];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,r){var c=t(function(t,i){s(t,c,e),t._i=a.create(null),t._f=void 0,t._l=void 0,t[b]=0,void 0!=i&&u(i,n,t[r],t)});return i(c.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[b]=0},"delete":function(t){var e=this,n=_(e,t);if(n){var a=n.n,r=n.p;delete e._i[n.i],n.r=!0,r&&(r.n=a),a&&(a.p=r),e._f==n&&(e._f=a),e._l==n&&(e._l=r),e[b]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!_(this,t)}}),v&&a.setDesc(c.prototype,"size",{get:function(){return p(this[b])}}),c},def:function(t,e,n){var a,r,i=_(t,e);return i?i.v=n:(t._l=i={i:r=x(e,!0),k:e,v:n,p:a=t._l,n:void 0,r:!1},t._f||(t._f=i),a&&(a.n=i),t[b]++,"F"!==r&&(t._i[r]=i)),t},getEntry:_,setStrong:function(t,e,n){c(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?l(0,n.k):"values"==e?l(0,n.v):l(0,[n.k,n.v]):(t._t=void 0,l(1))},n?"entries":"values",!n,!0),m(e)}}},{17:17,18:18,19:19,27:27,30:30,31:31,38:38,42:42,44:44,46:46,60:60,65:65,69:69,82:82}],13:[function(t,e,n){var a=t(27),r=t(10);e.exports=function(t){return function(){if(r(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return a(this,!1,e.push,e),e}}},{10:10,27:27}],14:[function(t,e,n){"use strict";var a=t(31),r=t(60),i=t(4),o=t(38),s=t(69),p=t(27),u=t(8),c=t(30),l=t(82)("weak"),d=Object.isExtensible||o,f=u(5),h=u(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},b=function(t,e){return f(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=b(this,t);return e?e[1]:void 0},has:function(t){return!!b(this,t)},set:function(t,e){var n=b(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,a){var i=t(function(t,r){s(t,i,e),t._i=m++,t._l=void 0,void 0!=r&&p(r,n,t[a],t)});return r(i.prototype,{"delete":function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i)&&delete t[l][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?d(t)?c(t,l)&&c(t[l],this._i):v(this).has(t):!1}}),i},def:function(t,e,n){return d(i(e))?(c(e,l)||a(e,l,{}),e[l][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:l}},{27:27,30:30,31:31,38:38,4:4,60:60,69:69,8:8,82:82}],15:[function(t,e,n){"use strict";var a=t(29),r=t(22),i=t(61),o=t(60),s=t(27),p=t(69),u=t(38),c=t(24),l=t(43),d=t(66);e.exports=function(t,e,n,f,h,m){var v=a[t],g=v,b=h?"set":"add",y=g&&g.prototype,x={},_=function(t){var e=y[t];i(y,t,"delete"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!u(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!u(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||y.forEach&&!c(function(){(new g).entries().next()}))){var w,k=new g,E=k[b](m?{}:-0,1)!=k,S=c(function(){k.has(1)}),C=l(function(t){new g(t)});C||(g=e(function(e,n){p(e,g,t);var a=new v;return void 0!=n&&s(n,h,a[b],a),a}),g.prototype=y,y.constructor=g),m||k.forEach(function(t,e){w=1/e===-(1/0)}),(S||w)&&(_("delete"),_("has"),h&&_("get")),(w||E)&&_(b),m&&y.clear&&delete y.clear}else g=f.getConstructor(e,t,h,b),o(g.prototype,n);return d(g,t),x[t]=g,r(r.G+r.W+r.F*(g!=v),x),m||f.setStrong(g,t,h),g}},{22:22,24:24,27:27,29:29,38:38,43:43,60:60,61:61,66:66,69:69}],16:[function(t,e,n){var a=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=a)},{}],17:[function(t,e,n){var a=t(2);e.exports=function(t,e,n){if(a(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,a){return t.call(e,n,a)};case 3:return function(n,a,r){return t.call(e,n,a,r)}}return function(){return t.apply(e,arguments)}}},{2:2}],18:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],19:[function(t,e,n){e.exports=!t(24)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{24:24}],20:[function(t,e,n){var a=t(38),r=t(29).document,i=a(r)&&a(r.createElement);e.exports=function(t){return i?r.createElement(t):{}}},{29:29,38:38}],21:[function(t,e,n){var a=t(46);e.exports=function(t){var e=a.getKeys(t),n=a.getSymbols;if(n)for(var r,i=n(t),o=a.isEnum,s=0;i.length>s;)o.call(t,r=i[s++])&&e.push(r);return e}},{46:46}],22:[function(t,e,n){var a=t(29),r=t(16),i=t(31),o=t(61),s=t(17),p="prototype",u=function(t,e,n){var c,l,d,f,h=t&u.F,m=t&u.G,v=t&u.S,g=t&u.P,b=t&u.B,y=m?a:v?a[e]||(a[e]={}):(a[e]||{})[p],x=m?r:r[e]||(r[e]={}),_=x[p]||(x[p]={});m&&(n=e);for(c in n)l=!h&&y&&c in y,d=(l?y:n)[c],f=b&&l?s(d,a):g&&"function"==typeof d?s(Function.call,d):d,y&&!l&&o(y,c,d),x[c]!=d&&i(x,c,f),g&&_[c]!=d&&(_[c]=d)};a.core=r,u.F=1,u.G=2,u.S=4,u.P=8,u.B=16,u.W=32,e.exports=u},{16:16,17:17,29:29,31:31,61:61}],23:[function(t,e,n){var a=t(83)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[a]=!1,!"/./"[t](e)}catch(r){}}return!0}},{83:83}],24:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],25:[function(t,e,n){"use strict";var a=t(31),r=t(61),i=t(24),o=t(18),s=t(83);e.exports=function(t,e,n){var p=s(t),u=""[t];i(function(){var e={};return e[p]=function(){return 7},7!=""[t](e)})&&(r(String.prototype,t,n(o,p,u)),a(RegExp.prototype,p,2==e?function(t,e){return u.call(t,this,e)}:function(t){return u.call(t,this)}))}},{18:18,24:24,31:31,61:61,83:83}],26:[function(t,e,n){"use strict";var a=t(4);e.exports=function(){var t=a(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{4:4}],27:[function(t,e,n){var a=t(17),r=t(40),i=t(35),o=t(4),s=t(79),p=t(84);e.exports=function(t,e,n,u){var c,l,d,f=p(t),h=a(n,u,e?2:1),m=0;if("function"!=typeof f)throw TypeError(t+" is not iterable!");if(i(f))for(c=s(t.length);c>m;m++)e?h(o(l=t[m])[0],l[1]):h(t[m]);else for(d=f.call(t);!(l=d.next()).done;)r(d,h,l.value,e)}},{17:17,35:35,4:4,40:40,79:79,84:84}],28:[function(t,e,n){var a=t(78),r=t(46).getNames,i={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return r(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==i.call(t)?s(t):r(a(t))}},{46:46,78:78}],29:[function(t,e,n){var a=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=a)},{}],30:[function(t,e,n){var a={}.hasOwnProperty;e.exports=function(t,e){return a.call(t,e)}},{}],31:[function(t,e,n){var a=t(46),r=t(59);e.exports=t(19)?function(t,e,n){return a.setDesc(t,e,r(1,n))}:function(t,e,n){return t[e]=n,t}},{19:19,46:46,59:59}],32:[function(t,e,n){e.exports=t(29).document&&document.documentElement},{29:29}],33:[function(t,e,n){e.exports=function(t,e,n){var a=void 0===n;switch(e.length){case 0:return a?t():t.call(n);case 1:return a?t(e[0]):t.call(n,e[0]);case 2:return a?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return a?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return a?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],34:[function(t,e,n){var a=t(11);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==a(t)?t.split(""):Object(t)}},{11:11}],35:[function(t,e,n){var a=t(45),r=t(83)("iterator"),i=Array.prototype;e.exports=function(t){return void 0!==t&&(a.Array===t||i[r]===t)}},{45:45,83:83}],36:[function(t,e,n){var a=t(11);e.exports=Array.isArray||function(t){return"Array"==a(t)}},{11:11}],37:[function(t,e,n){var a=t(38),r=Math.floor;e.exports=function(t){return!a(t)&&isFinite(t)&&r(t)===t}},{38:38}],38:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],39:[function(t,e,n){var a=t(38),r=t(11),i=t(83)("match");e.exports=function(t){var e;return a(t)&&(void 0!==(e=t[i])?!!e:"RegExp"==r(t))}},{11:11,38:38,83:83}],40:[function(t,e,n){var a=t(4);e.exports=function(t,e,n,r){try{return r?e(a(n)[0],n[1]):e(n)}catch(i){var o=t["return"];throw void 0!==o&&a(o.call(t)),i}}},{4:4}],41:[function(t,e,n){"use strict";var a=t(46),r=t(59),i=t(66),o={};t(31)(o,t(83)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=a.create(o,{next:r(1,n)}),i(t,e+" Iterator")}},{31:31,46:46,59:59,66:66,83:83}],42:[function(t,e,n){"use strict";var a=t(48),r=t(22),i=t(61),o=t(31),s=t(30),p=t(45),u=t(41),c=t(66),l=t(46).getProto,d=t(83)("iterator"),f=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,b,y,x,_){u(n,e,b);var w,k,E=function(t){if(!f&&t in A)return A[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",C=y==v,P=!1,A=t.prototype,O=A[d]||A[h]||y&&A[y],T=O||E(y);if(O){var j=l(T.call(new t));c(j,S,!0),!a&&s(A,h)&&o(j,d,g),C&&O.name!==v&&(P=!0,T=function(){return O.call(this)})}if(a&&!_||!f&&!P&&A[d]||o(A,d,T),p[e]=T,p[S]=g,y)if(w={values:C?T:E(v),keys:x?T:E(m),entries:C?E("entries"):T},_)for(k in w)k in A||i(A,k,w[k]);else r(r.P+r.F*(f||P),e,w);return w}},{22:22,30:30,31:31,41:41,45:45,46:46,48:48,61:61,66:66,83:83}],43:[function(t,e,n){var a=t(83)("iterator"),r=!1;try{var i=[7][a]();i["return"]=function(){r=!0},Array.from(i,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!r)return!1;var n=!1;try{var i=[7],o=i[a]();o.next=function(){return{done:n=!0}},i[a]=function(){return o},t(i)}catch(s){}return n}},{83:83}],44:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],45:[function(t,e,n){e.exports={}},{}],46:[function(t,e,n){var a=Object;e.exports={create:a.create,getProto:a.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:a.getOwnPropertyDescriptor,setDesc:a.defineProperty,setDescs:a.defineProperties,getKeys:a.keys,getNames:a.getOwnPropertyNames,getSymbols:a.getOwnPropertySymbols,each:[].forEach}},{}],47:[function(t,e,n){var a=t(46),r=t(78);e.exports=function(t,e){for(var n,i=r(t),o=a.getKeys(i),s=o.length,p=0;s>p;)if(i[n=o[p++]]===e)return n}},{46:46,78:78}],48:[function(t,e,n){e.exports=!1},{}],49:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],50:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],51:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],52:[function(t,e,n){var a,r,i,o=t(29),s=t(75).set,p=o.MutationObserver||o.WebKitMutationObserver,u=o.process,c=o.Promise,l="process"==t(11)(u),d=function(){var t,e,n;for(l&&(t=u.domain)&&(u.domain=null,t.exit());a;)e=a.domain,n=a.fn,e&&e.enter(),n(),e&&e.exit(),a=a.next;r=void 0,t&&t.enter()};if(l)i=function(){u.nextTick(d)};else if(p){var f=1,h=document.createTextNode("");new p(d).observe(h,{characterData:!0}),i=function(){h.data=f=-f}}else i=c&&c.resolve?function(){c.resolve().then(d)}:function(){s.call(o,d)};e.exports=function(t){var e={fn:t,next:void 0,domain:l&&u.domain};r&&(r.next=e),a||(a=e,i()),r=e}},{11:11,29:29,75:75}],53:[function(t,e,n){var a=t(46),r=t(80),i=t(34);e.exports=t(24)(function(){var t=Object.assign,e={},n={},a=Symbol(),r="abcdefghijklmnopqrst";return e[a]=7,r.split("").forEach(function(t){n[t]=t}),7!=t({},e)[a]||Object.keys(t({},n)).join("")!=r})?function(t,e){for(var n=r(t),o=arguments,s=o.length,p=1,u=a.getKeys,c=a.getSymbols,l=a.isEnum;s>p;)for(var d,f=i(o[p++]),h=c?u(f).concat(c(f)):u(f),m=h.length,v=0;m>v;)l.call(f,d=h[v++])&&(n[d]=f[d]);return n}:Object.assign},{24:24,34:34,46:46,80:80}],54:[function(t,e,n){var a=t(22),r=t(16),i=t(24);e.exports=function(t,e){var n=(r.Object||{})[t]||Object[t],o={};o[t]=e(n),a(a.S+a.F*i(function(){n(1)}),"Object",o)}},{16:16,22:22,24:24}],55:[function(t,e,n){var a=t(46),r=t(78),i=a.isEnum;e.exports=function(t){return function(e){for(var n,o=r(e),s=a.getKeys(o),p=s.length,u=0,c=[];p>u;)i.call(o,n=s[u++])&&c.push(t?[n,o[n]]:o[n]);return c}}},{46:46,78:78}],56:[function(t,e,n){var a=t(46),r=t(4),i=t(29).Reflect;e.exports=i&&i.ownKeys||function(t){var e=a.getNames(r(t)),n=a.getSymbols;return n?e.concat(n(t)):e}},{29:29,4:4,46:46}],57:[function(t,e,n){"use strict";var a=t(58),r=t(33),i=t(2);e.exports=function(){for(var t=i(this),e=arguments.length,n=Array(e),o=0,s=a._,p=!1;e>o;)(n[o]=arguments[o++])===s&&(p=!0);return function(){var a,i=this,o=arguments,u=o.length,c=0,l=0;if(!p&&!u)return r(t,n,i);if(a=n.slice(),p)for(;e>c;c++)a[c]===s&&(a[c]=o[l++]);for(;u>l;)a.push(o[l++]);return r(t,a,i)}}},{2:2,33:33,58:58}],58:[function(t,e,n){e.exports=t(29)},{29:29}],59:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],60:[function(t,e,n){var a=t(61);e.exports=function(t,e){for(var n in e)a(t,n,e[n]);return t}},{61:61}],61:[function(t,e,n){var a=t(29),r=t(31),i=t(82)("src"),o="toString",s=Function[o],p=(""+s).split(o);t(16).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(i)||r(n,i,t[e]?""+t[e]:p.join(e+"")),n.hasOwnProperty("name")||r(n,"name",e)),t===a?t[e]=n:(o||delete t[e],r(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[i]||s.call(this)})},{16:16,29:29,31:31,82:82}],62:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],63:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],64:[function(t,e,n){var a=t(46).getDesc,r=t(38),i=t(4),o=function(t,e){if(i(t),!r(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,r){try{r=t(17)(Function.call,a(Object.prototype,"__proto__").set,2),r(e,[]),n=!(e instanceof Array)}catch(i){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:r(t,e),t}}({},!1):void 0),check:o}},{17:17,38:38,4:4,46:46}],65:[function(t,e,n){"use strict";var a=t(29),r=t(46),i=t(19),o=t(83)("species");e.exports=function(t){var e=a[t];i&&e&&!e[o]&&r.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{19:19,29:29,46:46,83:83}],66:[function(t,e,n){var a=t(46).setDesc,r=t(30),i=t(83)("toStringTag");e.exports=function(t,e,n){t&&!r(t=n?t:t.prototype,i)&&a(t,i,{configurable:!0,value:e})}},{30:30,46:46,83:83}],67:[function(t,e,n){var a=t(29),r="__core-js_shared__",i=a[r]||(a[r]={});e.exports=function(t){return i[t]||(i[t]={})}},{29:29}],68:[function(t,e,n){var a=t(4),r=t(2),i=t(83)("species");e.exports=function(t,e){var n,o=a(t).constructor;return void 0===o||void 0==(n=a(o)[i])?e:r(n)}},{2:2,4:4,83:83}],69:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],70:[function(t,e,n){var a=t(77),r=t(18);e.exports=function(t){return function(e,n){var i,o,s=r(e)+"",p=a(n),u=s.length;return 0>p||p>=u?t?"":void 0:(i=s.charCodeAt(p),55296>i||i>56319||p+1===u||(o=s.charCodeAt(p+1))<56320||o>57343?t?s.charAt(p):i:t?s.slice(p,p+2):(i-55296<<10)+(o-56320)+65536)}}},{18:18,77:77}],71:[function(t,e,n){var a=t(39),r=t(18);e.exports=function(t,e,n){if(a(e))throw TypeError("String#"+n+" doesn't accept regex!");return r(t)+""}},{18:18,39:39}],72:[function(t,e,n){var a=t(79),r=t(73),i=t(18);e.exports=function(t,e,n,o){var s=i(t)+"",p=s.length,u=void 0===n?" ":n+"",c=a(e);if(p>=c)return s;""==u&&(u=" ");var l=c-p,d=r.call(u,Math.ceil(l/u.length));return d.length>l&&(d=d.slice(0,l)),o?d+s:s+d}},{18:18,73:73,79:79}],73:[function(t,e,n){"use strict";var a=t(77),r=t(18);e.exports=function(t){var e=r(this)+"",n="",i=a(t);if(0>i||i==1/0)throw RangeError("Count can't be negative");for(;i>0;(i>>>=1)&&(e+=e))1&i&&(n+=e);return n}},{18:18,77:77}],74:[function(t,e,n){var a=t(22),r=t(18),i=t(24),o=" \n\x0B\f\r   ᠎ â€â€‚         âŸã€€\u2028\u2029\ufeff",s="["+o+"]",p="​…",u=RegExp("^"+s+s+"*"),c=RegExp(s+s+"*$"),l=function(t,e){var n={};n[t]=e(d),a(a.P+a.F*i(function(){return!!o[t]()||p[t]()!=p}),"String",n)},d=l.trim=function(t,e){return t=r(t)+"",1&e&&(t=t.replace(u,"")),2&e&&(t=t.replace(c,"")),t};e.exports=l},{18:18,22:22,24:24}],75:[function(t,e,n){var a,r,i,o=t(17),s=t(33),p=t(32),u=t(20),c=t(29),l=c.process,d=c.setImmediate,f=c.clearImmediate,h=c.MessageChannel,m=0,v={},g="onreadystatechange",b=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},y=function(t){b.call(t.data)};d&&f||(d=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},a(m),m},f=function(t){delete v[t]},"process"==t(11)(l)?a=function(t){l.nextTick(o(b,t,1))}:h?(r=new h,i=r.port2,r.port1.onmessage=y,a=o(i.postMessage,i,1)):c.addEventListener&&"function"==typeof postMessage&&!c.importScripts?(a=function(t){c.postMessage(t+"","*")},c.addEventListener("message",y,!1)):a=g in u("script")?function(t){p.appendChild(u("script"))[g]=function(){p.removeChild(this),b.call(t)}}:function(t){setTimeout(o(b,t,1),0)}),e.exports={set:d,clear:f}},{11:11,17:17,20:20,29:29,32:32,33:33}],76:[function(t,e,n){var a=t(77),r=Math.max,i=Math.min;e.exports=function(t,e){return t=a(t),0>t?r(t+e,0):i(t,e)}},{77:77}],77:[function(t,e,n){var a=Math.ceil,r=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?r:a)(t)}},{}],78:[function(t,e,n){var a=t(34),r=t(18);e.exports=function(t){return a(r(t))}},{18:18,34:34}],79:[function(t,e,n){var a=t(77),r=Math.min;e.exports=function(t){return t>0?r(a(t),9007199254740991):0}},{77:77}],80:[function(t,e,n){var a=t(18);e.exports=function(t){return Object(a(t))}},{18:18}],81:[function(t,e,n){var a=t(38);e.exports=function(t,e){if(!a(t))return t;var n,r;if(e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;if("function"==typeof(n=t.valueOf)&&!a(r=n.call(t)))return r;if(!e&&"function"==typeof(n=t.toString)&&!a(r=n.call(t)))return r;throw TypeError("Can't convert object to primitive value")}},{38:38}],82:[function(t,e,n){var a=0,r=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++a+r).toString(36))}},{}],83:[function(t,e,n){var a=t(67)("wks"),r=t(82),i=t(29).Symbol;e.exports=function(t){return a[t]||(a[t]=i&&i[t]||(i||r)("Symbol."+t))}},{29:29,67:67,82:82}],84:[function(t,e,n){var a=t(10),r=t(83)("iterator"),i=t(45);e.exports=t(16).getIteratorMethod=function(t){return void 0!=t?t[r]||t["@@iterator"]||i[a(t)]:void 0}},{10:10,16:16,45:45,83:83}],85:[function(t,e,n){"use strict";var a,r=t(46),i=t(22),o=t(19),s=t(59),p=t(32),u=t(20),c=t(30),l=t(11),d=t(33),f=t(24),h=t(4),m=t(2),v=t(38),g=t(80),b=t(78),y=t(77),x=t(76),_=t(79),w=t(34),k=t(82)("__proto__"),E=t(8),S=t(7)(!1),C=Object.prototype,P=Array.prototype,A=P.slice,O=P.join,T=r.setDesc,j=r.getDesc,R=r.setDescs,M={};o||(a=!f(function(){return 7!=T(u("div"),"a",{get:function(){return 7}}).a}),r.setDesc=function(t,e,n){if(a)try{return T(t,e,n)}catch(r){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},r.getDesc=function(t,e){if(a)try{return j(t,e)}catch(n){}return c(t,e)?s(!C.propertyIsEnumerable.call(t,e),t[e]):void 0},r.setDescs=R=function(t,e){h(t);for(var n,a=r.getKeys(e),i=a.length,o=0;i>o;)r.setDesc(t,n=a[o++],e[n]);return t}),i(i.S+i.F*!o,"Object",{getOwnPropertyDescriptor:r.getDesc,defineProperty:r.setDesc,defineProperties:R});var L="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),D=L.concat("length","prototype"),N=L.length,F=function(){var t,e=u("iframe"),n=N,a=">";for(e.style.display="none",p.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("