From 461e66991dd80daebd6941fb79a3942571b89b58 Mon Sep 17 00:00:00 2001 From: aKromatopzia <94389683+aKromatopzia@users.noreply.github.com> Date: Mon, 23 Dec 2024 15:10:54 +0800 Subject: [PATCH 01/31] Adds nitrogen and anesthetic tanks to printers (#2683) ## About The Pull Request title. surprised this hasnt been done ## Proof Of Testing it runs? it runs ![image](https://github.com/user-attachments/assets/f0a30413-6c8a-4818-a957-11b1329faa21) ![Screenshot_6](https://github.com/user-attachments/assets/7cb08fba-d26c-4273-b3b6-c96959a488cb) ## Changelog :cl: add: Anesthetic and nitrogen tanks appear in relevant departmental lathes /:cl: --- .../game/objects/items/tanks/tank_types.dm | 8 ++++ .../modules/research/designs/misc_designs.dm | 38 +++++++++++++++++++ .../modules/research/techweb/all_nodes.dm | 9 +++++ tgstation.dme | 1 + 4 files changed, 56 insertions(+) create mode 100644 modular_zubbers/code/game/objects/items/tanks/tank_types.dm diff --git a/modular_zubbers/code/game/objects/items/tanks/tank_types.dm b/modular_zubbers/code/game/objects/items/tanks/tank_types.dm new file mode 100644 index 0000000000000..32d54cf3ea9d9 --- /dev/null +++ b/modular_zubbers/code/game/objects/items/tanks/tank_types.dm @@ -0,0 +1,8 @@ +/obj/item/tank/internals/anesthetic/empty/populate_gas() + return + +/obj/item/tank/internals/nitrogen/empty/populate_gas() + return + +/obj/item/tank/internals/nitrogen/belt/empty/populate_gas() + return diff --git a/modular_zubbers/code/modules/research/designs/misc_designs.dm b/modular_zubbers/code/modules/research/designs/misc_designs.dm index 6d0ca8210464b..93c2c4eeb58c2 100644 --- a/modular_zubbers/code/modules/research/designs/misc_designs.dm +++ b/modular_zubbers/code/modules/research/designs/misc_designs.dm @@ -7,3 +7,41 @@ build_path = /obj/item/disk/plantgene category = list("Electronics") departmental_flags = DEPARTMENT_BITFLAG_SERVICE + +/datum/design/nitrogen_tank + name = "Nitrogen Tank" + desc = "An empty nitrogen tank." + id = "nitrogen_tank" + build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/tank/internals/nitrogen/empty + category = list(RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS, + ) + departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO + +/* Uncomment in case nitrogen internal tanks get refactored to no longer be 25L +* /datum/design/nitrogen_tank_belt +* name = "Nitrogen Internals Tank" +* desc = "An empty nitrogen tank." +* id = "nitrogen_tank_belt" +* build_type = AUTOLATHE | PROTOLATHE | AWAY_LATHE +* materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) +* build_path = /obj/item/tank/internals/nitrogen/belt/empty +* category = list(RND_CATEGORY_INITIAL, +* RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS, +* ) +* departmental_flags = DEPARTMENT_BITFLAG_ENGINEERING | DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_CARGO +*/ + +/datum/design/anesthetic_tank + name = "Anesthetic Tank" + desc = "An empty tank designed specifically for use with anesthetics." + id = "anesthetic_tank" + build_type = PROTOLATHE | AWAY_LATHE + materials = list(/datum/material/iron =SHEET_MATERIAL_AMOUNT) + build_path = /obj/item/tank/internals/anesthetic/empty + category = list(RND_CATEGORY_INITIAL, + RND_CATEGORY_EQUIPMENT + RND_SUBCATEGORY_EQUIPMENT_GAS_TANKS, + ) + departmental_flags = DEPARTMENT_BITFLAG_SCIENCE | DEPARTMENT_BITFLAG_MEDICAL diff --git a/modular_zubbers/code/modules/research/techweb/all_nodes.dm b/modular_zubbers/code/modules/research/techweb/all_nodes.dm index d31e765e2b76b..641e132c642cb 100644 --- a/modular_zubbers/code/modules/research/techweb/all_nodes.dm +++ b/modular_zubbers/code/modules/research/techweb/all_nodes.dm @@ -41,6 +41,15 @@ "limbdesign_tajaran", ) +//ENGINEERING +/datum/techweb_node/atmos/New() + . = ..() + design_ids += list( + "nitrogen_tank", + //"nitrogen_tank_belt", | Uncomment in case nitrogen internal tanks get refactored to no longer be 25L + "anesthetic_tank", + ) + // TOOLS /datum/techweb_node/mining/New() diff --git a/tgstation.dme b/tgstation.dme index 9e91e58e8ee08..05993a037eb38 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -8824,6 +8824,7 @@ #include "modular_zubbers\code\game\objects\items\storage\boxes.dm" #include "modular_zubbers\code\game\objects\items\storage\briefcase.dm" #include "modular_zubbers\code\game\objects\items\storage\garment.dm" +#include "modular_zubbers\code\game\objects\items\tanks\tank_types.dm" #include "modular_zubbers\code\game\objects\structures\aliens.dm" #include "modular_zubbers\code\game\objects\structures\chalkboard.dm" #include "modular_zubbers\code\game\objects\structures\ore_vent.dm" From 0f9891f45787f95e968a9b0e1f9661c07a1a8c66 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 23 Dec 2024 08:11:21 +0100 Subject: [PATCH 02/31] Automatic changelog for PR #2683 [ci skip] --- html/changelogs/AutoChangeLog-pr-2683.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2683.yml diff --git a/html/changelogs/AutoChangeLog-pr-2683.yml b/html/changelogs/AutoChangeLog-pr-2683.yml new file mode 100644 index 0000000000000..4d6121ca77b20 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2683.yml @@ -0,0 +1,4 @@ +author: "aKromatopzia" +delete-after: True +changes: + - rscadd: "Anesthetic and nitrogen tanks appear in relevant departmental lathes" \ No newline at end of file From 42cfd7874e7fe030a3585188ec13659ab8a5da2a Mon Sep 17 00:00:00 2001 From: Yayyay007 <145062394+rintherat@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:24:25 -0500 Subject: [PATCH 03/31] Fixes Obsession rolling while Be Antag is set to no. (#2754) ## About The Pull Request Fixes #2258, where people can roll Obsessed despite having Be Antagonist set to no. thx odairuu ## Why It's Good For The Game Less need for ahelps (yippee!) ## Proof Of Testing Compiled and worked on a private server. ## Changelog fix: fixes obsession rolling when be antag is set to no --- code/modules/events/creep_awakening.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/creep_awakening.dm b/code/modules/events/creep_awakening.dm index 648c2cc9db04c..6146d0cfdbf32 100644 --- a/code/modules/events/creep_awakening.dm +++ b/code/modules/events/creep_awakening.dm @@ -11,7 +11,7 @@ /datum/round_event/obsessed/start() for(var/mob/living/carbon/human/H in shuffle(GLOB.player_list)) - if(!H.client || !(ROLE_OBSESSED in H.client.prefs.be_special)) + if(!H.client || !(ROLE_OBSESSED in H.client.prefs.be_special) || !H.client.prefs?.read_preference(/datum/preference/toggle/be_antag)) continue if(H.stat == DEAD) continue From 7cf793ffc44b74abdcd5e9163b2b63e816a6b28b Mon Sep 17 00:00:00 2001 From: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com> Date: Mon, 23 Dec 2024 09:24:40 -0700 Subject: [PATCH 04/31] Storyteller Config Option (#2755) ## About The Pull Request Basically allows you the option to either have a default storyteller, or to have voting. ## Proof Of Testing It works ## Changelog :cl: config: You can set a default storyteller to bypass voting. /:cl: --- code/controllers/subsystem/ticker.dm | 8 +++++++- config/bubbers/bubbers_config.txt | 3 +++ .../configuration/entries/skyrat_config_entries.dm | 3 +++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index c6d123ccbbaa0..27fb5cd8c8d94 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -169,7 +169,13 @@ SUBSYSTEM_DEF(ticker) send2chat(new /datum/tgs_message_content("<@&[CONFIG_GET(string/game_alert_role_id)]> Round **[GLOB.round_id]** starting on [SSmapping.current_map.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles."), CONFIG_GET(string/channel_announce_new_game)) // SKYRAT EDIT - Role ping and round ID in game-alert // SKYRAT EDIT END current_state = GAME_STATE_PREGAME - SSvote.initiate_vote(/datum/vote/storyteller, "Storyteller Vote", forced = TRUE) // BUBBER EDIT ADDITION + // BUBBERSTATION EDIT START + var/storyteller = CONFIG_GET(string/default_storyteller) + if(storyteller) + SSgamemode.set_storyteller(text2path(storyteller), TRUE) + else + SSvote.initiate_vote(/datum/vote/storyteller, "Storyteller Vote", forced = TRUE) + // BUBBERSTATION EDIT END SStitle.change_title_screen() //SKYRAT EDIT ADDITION - Title screen addtimer(CALLBACK(SStitle, TYPE_PROC_REF(/datum/controller/subsystem/title, change_title_screen)), 1 SECONDS) //SKYRAT EDIT ADDITION - Title screen //Everyone who wants to be an observer is now spawned diff --git a/config/bubbers/bubbers_config.txt b/config/bubbers/bubbers_config.txt index 3dc613b9e17f9..e94a8a8eaae72 100644 --- a/config/bubbers/bubbers_config.txt +++ b/config/bubbers/bubbers_config.txt @@ -16,3 +16,6 @@ INTERN_THRESHOLD_COMMAND 20 # Vetted player system ## If enabled, it will use checks to determine if a player is vetted or not in different parts of the game #CHECK_VETTED + +## Default Storyteller. Comment out to enable voting. +DEFAULT_STORYTELLER /datum/storyteller/extended diff --git a/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm b/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm index 0771ece533705..7e65d3a513bed 100644 --- a/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm +++ b/modular_skyrat/master_files/code/controllers/configuration/entries/skyrat_config_entries.dm @@ -60,3 +60,6 @@ /// Defines whether the server uses the legacy mentor system with mentors.txt or the SQL system. /datum/config_entry/flag/mentor_legacy_system protection = CONFIG_ENTRY_LOCKED + +/// If you want to have a default storyteller +/datum/config_entry/string/default_storyteller From dc6dce20420fb5576e5a17dcbd19b28bf89bb0b9 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 23 Dec 2024 17:26:07 +0100 Subject: [PATCH 05/31] Automatic changelog for PR #2755 [ci skip] --- html/changelogs/AutoChangeLog-pr-2755.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2755.yml diff --git a/html/changelogs/AutoChangeLog-pr-2755.yml b/html/changelogs/AutoChangeLog-pr-2755.yml new file mode 100644 index 0000000000000..74d8e91c0b72f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2755.yml @@ -0,0 +1,4 @@ +author: "StrangeWeirdKitten" +delete-after: True +changes: + - config: "You can set a default storyteller to bypass voting." \ No newline at end of file From 414815da346534cd1b5a7656a6fb8f3baa8fff80 Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Mon, 23 Dec 2024 11:39:21 -0800 Subject: [PATCH 06/31] Fix the Christmas postal strike (#2759) ## About The Pull Request Extending Christmas season was not meant to give those postal workers two weeks off! ## Changelog :cl: LT3 fix: All the letters from Santa that have been horded at the postal service have been recovered and delivered /:cl: --- modular_zubbers/code/game/machinery/flatpacker.dm | 2 +- modular_zubbers/master_files/code/modules/holiday/holiday.dm | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/modular_zubbers/code/game/machinery/flatpacker.dm b/modular_zubbers/code/game/machinery/flatpacker.dm index 52abc98644cb6..038262ed6c8a5 100644 --- a/modular_zubbers/code/game/machinery/flatpacker.dm +++ b/modular_zubbers/code/game/machinery/flatpacker.dm @@ -1,5 +1,5 @@ /obj/item/flatpack/mailsorter - name = "flatpack (mail sorter)" + name = "mail sorter flatpack" /datum/area_spawn/mailsorter target_areas = list(/area/station/cargo/office) diff --git a/modular_zubbers/master_files/code/modules/holiday/holiday.dm b/modular_zubbers/master_files/code/modules/holiday/holiday.dm index 107ea73656a2c..7eec2e11944e3 100644 --- a/modular_zubbers/master_files/code/modules/holiday/holiday.dm +++ b/modular_zubbers/master_files/code/modules/holiday/holiday.dm @@ -107,6 +107,7 @@ /datum/holiday/xmas name = CHRISTMAS begin_day = 18 + mail_holiday = FALSE holiday_colors = list() /datum/holiday/xmas/New() From 66843bf91e536cc86c224f6d549b0cc8ed9820ef Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 23 Dec 2024 20:39:47 +0100 Subject: [PATCH 07/31] Automatic changelog for PR #2759 [ci skip] --- html/changelogs/AutoChangeLog-pr-2759.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2759.yml diff --git a/html/changelogs/AutoChangeLog-pr-2759.yml b/html/changelogs/AutoChangeLog-pr-2759.yml new file mode 100644 index 0000000000000..b87ba2fd843f9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2759.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "All the letters from Santa that have been horded at the postal service have been recovered and delivered" \ No newline at end of file From 32e338538209075ca3c8544c5d898445d1304823 Mon Sep 17 00:00:00 2001 From: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:07:39 -0700 Subject: [PATCH 08/31] Revert "Makes the christmas tree safe" (Please use broken gear responsibly) (#2723) Reverts Bubberstation/Bubberstation#912 Please be nice, I'm feeling festive :) --- code/modules/events/holiday/xmas.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 850f23105cbcc..eeed75d2299eb 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -53,7 +53,7 @@ /// Christmas tree, no presents included. var/festive_tree = /obj/structure/flora/tree/pine/xmas /// Christmas tree, presents included. - var/christmas_tree = /obj/structure/flora/tree/pine/xmas/presents/safe //Bubberstation Edition + var/christmas_tree = /obj/structure/flora/tree/pine/xmas/presents /obj/effect/spawner/xmastree/Initialize(mapload) . = ..() From e7d1ccc18bcc616658dc6a54fc62bea19609fc62 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Mon, 23 Dec 2024 23:27:30 +0000 Subject: [PATCH 09/31] Bubberstation automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2667.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2683.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2755.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2759.yml | 4 ---- html/changelogs/archive/2024-12.yml | 11 +++++++++++ 5 files changed, 11 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2667.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2683.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2755.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2759.yml diff --git a/html/changelogs/AutoChangeLog-pr-2667.yml b/html/changelogs/AutoChangeLog-pr-2667.yml deleted file mode 100644 index 8906b0532697c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2667.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arturlang" -delete-after: True -changes: - - rscadd: "Dragons no longer permanently stuck unable to amke a portal if they loose one, now regaining the ability in 5 minutes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2683.yml b/html/changelogs/AutoChangeLog-pr-2683.yml deleted file mode 100644 index 4d6121ca77b20..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2683.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "aKromatopzia" -delete-after: True -changes: - - rscadd: "Anesthetic and nitrogen tanks appear in relevant departmental lathes" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2755.yml b/html/changelogs/AutoChangeLog-pr-2755.yml deleted file mode 100644 index 74d8e91c0b72f..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2755.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "StrangeWeirdKitten" -delete-after: True -changes: - - config: "You can set a default storyteller to bypass voting." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2759.yml b/html/changelogs/AutoChangeLog-pr-2759.yml deleted file mode 100644 index b87ba2fd843f9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2759.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "All the letters from Santa that have been horded at the postal service have been recovered and delivered" \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index b73a214e151ba..15c8abdbf07da 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -384,3 +384,14 @@ themselves onto them to ride with free hands - rscadd: Saddlebags for quadruped taurs, which are one-handed saddles that allow anyone to access their storage by alt clicking the wearer +2024-12-23: + Arturlang: + - rscadd: Dragons no longer permanently stuck unable to amke a portal if they loose + one, now regaining the ability in 5 minutes + LT3: + - bugfix: All the letters from Santa that have been horded at the postal service + have been recovered and delivered + StrangeWeirdKitten: + - config: You can set a default storyteller to bypass voting. + aKromatopzia: + - rscadd: Anesthetic and nitrogen tanks appear in relevant departmental lathes From 1305ab885ac7cabf44f974d2287488ce6f0de961 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:06:36 -0500 Subject: [PATCH 10/31] Skyrat jukebox code cleanup (#2762) ## About The Pull Request And by cleanup I mean rip literally all of it out because it turns out tg's jukebox code basically has feature parity with what we have now while also being better code-wise. ## Why It's Good For The Game Less code to maintain. ## Proof Of Testing It compiled and it plays music properly and the rave visor also plays music properly ## Changelog :cl: refactor: ripped out all the skyrat jukebox code in favor of tg's. /:cl: --- _maps/map_files/biodome/biodome.dmm | 2 +- _maps/shuttles/zubbers/emergency_vortex.dmm | 2 +- code/__DEFINES/sound.dm | 3 +- code/datums/components/jukebox.dm | 5 +- code/game/machinery/dance_machine.dm | 2 - code/modules/mod/modules/modules_maint.dm | 3 +- config/jukebox_music/README.txt | 2 - .../automapper/code/area_spawn_entries.dm | 2 +- .../modules/jukebox/code/dance_machine.dm | 484 ------------------ .../modules/jukebox/code/jukebox_subsystem.dm | 138 ----- .../modules/jukebox/code/ravemod.dm | 90 ---- .../modules/jukebox/icons/stationobjs.dmi | Bin 3631 -> 0 bytes modular_skyrat/modules/jukebox/readme.md | 29 -- tgstation.dme | 3 - .../Scripts_Bubber/2762_jukebox_repath.txt | 1 + 15 files changed, 8 insertions(+), 758 deletions(-) delete mode 100644 modular_skyrat/modules/jukebox/code/dance_machine.dm delete mode 100644 modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm delete mode 100644 modular_skyrat/modules/jukebox/code/ravemod.dm delete mode 100644 modular_skyrat/modules/jukebox/icons/stationobjs.dmi delete mode 100644 modular_skyrat/modules/jukebox/readme.md create mode 100644 tools/UpdatePaths/Scripts_Bubber/2762_jukebox_repath.txt diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm index cec31f2801628..da9be5ca4addd 100644 --- a/_maps/map_files/biodome/biodome.dmm +++ b/_maps/map_files/biodome/biodome.dmm @@ -42886,7 +42886,7 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/obj/machinery/jukebox/public, +/obj/machinery/jukebox/no_access, /turf/open/floor/wood/large, /area/station/commons/lounge) "oGU" = ( diff --git a/_maps/shuttles/zubbers/emergency_vortex.dmm b/_maps/shuttles/zubbers/emergency_vortex.dmm index 576300c811dda..4978354353faa 100644 --- a/_maps/shuttles/zubbers/emergency_vortex.dmm +++ b/_maps/shuttles/zubbers/emergency_vortex.dmm @@ -3733,7 +3733,7 @@ /obj/effect/turf_decal/trimline/white/filled/warning{ dir = 4 }, -/obj/machinery/jukebox/public, +/obj/machinery/jukebox/no_access, /turf/open/floor/iron/dark, /area/shuttle/escape) "Sz" = ( diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 8188ae5723ab1..c610648572fca 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -16,8 +16,7 @@ #define MAX_INSTRUMENT_CHANNELS (128 * 6) -// SKYRAT EDIT START - JUKEBOX -#define CHANNEL_JUKEBOX_START 1006 +// SKYRAT EDIT START #define CHANNEL_HEV 1005 //SKYRAT EDIT CHANGE END diff --git a/code/datums/components/jukebox.dm b/code/datums/components/jukebox.dm index 175296cddfd69..50433fb36ca08 100644 --- a/code/datums/components/jukebox.dm +++ b/code/datums/components/jukebox.dm @@ -1,4 +1,4 @@ -/* SKYRAT EDIT: See modular_skyrat/modules/jukebox /// Checks if the mob has jukebox muted in their preferences +/// Checks if the mob has jukebox muted in their preferences #define IS_PREF_MUTED(mob) (!isnull(mob.client) && !mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) // Reasons for appling STATUS_MUTE to a mob's sound status @@ -103,7 +103,7 @@ var/datum/track/new_track = new() new_track.song_path = file("[global.config.directory]/jukebox_music/sounds/[track_file]") var/list/track_data = splittext(track_file, "+") - if(length(track_data) != 3) + if(length(track_data) < 3) // BUBBER EDIT - This is fucking stupid - ORIGINAL: if(length(track_data) != 3) continue new_track.song_name = track_data[1] new_track.song_length = text2num(track_data[2]) @@ -404,4 +404,3 @@ song_name = "Tintin on the Moon" song_length = 3 MINUTES + 52 SECONDS song_beat = 1 SECONDS -SKYRAT EDIT END*/ diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 100e94477335c..43946538ac51b 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -1,4 +1,3 @@ -/* SKYRAT EDIT: See modular_skyrat/modules/jukebox /obj/machinery/jukebox name = "jukebox" desc = "A classic music player." @@ -384,4 +383,3 @@ /obj/machinery/jukebox/disco/proc/dance4_revert(mob/living/dancer, matrix/starting_matrix) animate(dancer, transform = starting_matrix, time = 5, loop = 0) REMOVE_TRAIT(dancer, TRAIT_DISCO_DANCER, REF(src)) -SKYRAT EDIT END*/ diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index c22b54ff4bb59..d2f1ceaef74d3 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -80,7 +80,6 @@ flash_color(mod.wearer, flash_color = "#FF0000", flash_time = 10 SECONDS) set_off = FALSE -/* SKYRAT EDIT: See skyrat_modular/modules/jukebox ///Rave Visor - Gives you a rainbow visor and plays jukebox music to you. /obj/item/mod/module/visor/rave name = "MOD rave visor module" @@ -159,7 +158,7 @@ return music_player.selection = new_song -SKYRAT EDIT END */ + ///Tanner - Tans you with spraytan. /obj/item/mod/module/tanner name = "MOD tanning module" diff --git a/config/jukebox_music/README.txt b/config/jukebox_music/README.txt index dff0a36983ef3..9abe0e3e5674f 100644 --- a/config/jukebox_music/README.txt +++ b/config/jukebox_music/README.txt @@ -13,5 +13,3 @@ Every sound you add must have a unique name. Avoid using the plus sign "+" and t Sound names must be in the format of [song name]+[length in deciseconds]+[beat in deciseconds].ogg A three minute song title "SS13" that lasted 3 minutes would have a file name SS13+1800+5.ogg - -SKYRAT CHANGE: The title must also include the associated ID. So: [song name]+[length in deciseconds]+[beat in deciseconds]+[song ID] diff --git a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm b/modular_skyrat/modules/automapper/code/area_spawn_entries.dm index 322b9d81b8d4f..56b7c9feb8b7c 100644 --- a/modular_skyrat/modules/automapper/code/area_spawn_entries.dm +++ b/modular_skyrat/modules/automapper/code/area_spawn_entries.dm @@ -52,7 +52,7 @@ /datum/area_spawn/bar_jukebox target_areas = list(/area/station/commons/lounge, /area/station/service/bar/atrium, /area/station/service/bar) - desired_atom = /obj/machinery/jukebox/public + desired_atom = /obj/machinery/jukebox/no_access mode = AREA_SPAWN_MODE_OPEN // Wall mounts. Use sparingly as walls are prime real estate diff --git a/modular_skyrat/modules/jukebox/code/dance_machine.dm b/modular_skyrat/modules/jukebox/code/dance_machine.dm deleted file mode 100644 index 51bc23e680d61..0000000000000 --- a/modular_skyrat/modules/jukebox/code/dance_machine.dm +++ /dev/null @@ -1,484 +0,0 @@ -/// Helper macro to check if the passed mob has jukebox sound preference enabled -#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox)) - -/obj/machinery/jukebox - name = "jukebox" - desc = "A classic music player." - icon = 'icons/obj/machines/music.dmi' - icon_state = "jukebox" - verb_say = "states" - density = TRUE - req_access = list(ACCESS_BAR) - /// Whether we're actively playing music - var/active = FALSE - /// List of weakrefs to mobs listening to the current song - var/list/datum/weakref/rangers = list() - /// World.time when the current song will stop playing, but also a cooldown between activations - var/stop = 0 - /// Current song selected - var/datum/track/selection = null - /// Volume of the songs played - var/volume = 50 - //https://www.desmos.com/calculator/ybto1dyqzk - var/falloff_dist_offset = 20 // higher = jukebox can be heard from further away - var/falloff_dist_divider = 100 // lower = falloff begins sooner - -/obj/machinery/jukebox/disco - name = "radiant dance machine mark IV" - desc = "The first three prototypes were discontinued after mass casualty incidents." - icon = 'icons/obj/machines/music.dmi' - icon_state = "disco" - anchored = FALSE - var/list/spotlights = list() - var/list/sparkles = list() - -/obj/machinery/jukebox/disco/indestructible - name = "radiant dance machine mark V" - desc = "Now redesigned with data gathered from the extensive disco and plasma research." - anchored = TRUE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - -/obj/machinery/jukebox/public - req_access = list() - falloff_dist_offset = 10 - falloff_dist_divider = 50 - -/obj/machinery/jukebox/no_access - req_access = null - falloff_dist_offset = 10 - falloff_dist_divider = 50 - -/obj/machinery/jukebox/Initialize(mapload) - . = ..() - if(length(SSjukeboxes.songs)) - selection = pick(SSjukeboxes.songs) - -/obj/machinery/jukebox/Destroy() - dance_over() - selection = null - return ..() - -/obj/machinery/jukebox/attackby(obj/item/O, mob/user, params) - if(!active) - if(O.tool_behaviour == TOOL_WRENCH) - if(!anchored && !isinspace()) - to_chat(user,span_notice("You secure [src] to the floor.")) - set_anchored(TRUE) - else if(anchored) - to_chat(user,span_notice("You unsecure and disconnect [src].")) - set_anchored(FALSE) - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - return - return ..() - -/obj/machinery/jukebox/update_icon_state() - . = ..() - SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) - luminosity = 0 - - if(active) - luminosity = 1 - SSvis_overlays.add_vis_overlay(src, icon, "active", layer, plane, dir, alpha) - SSvis_overlays.add_vis_overlay(src, icon, "active", 0, EMISSIVE_PLANE, dir, alpha) - -/obj/machinery/jukebox/examine(mob/user) - . = ..() - if (active) - . += "Now playing: [selection.song_name]" - -/obj/machinery/jukebox/ui_status(mob/user) - if(!anchored) - to_chat(user,span_warning("This device must be anchored by a wrench!")) - return UI_CLOSE - if(!allowed(user) && !isobserver(user)) - to_chat(user,span_warning("Error: Access Denied.")) - return UI_CLOSE - if(!SSjukeboxes.songs.len && !isobserver(user)) - to_chat(user,span_warning("Error: No music tracks have been authorized for your station. Petition Central Command to resolve this issue.")) - return UI_CLOSE - return ..() - -/obj/machinery/jukebox/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Jukebox", name) - ui.open() - -/obj/machinery/jukebox/ui_data(mob/user) - var/list/data = list() - data["active"] = active - data["songs"] = list() - for(var/datum/track/S in SSjukeboxes.songs) - var/list/track_data = list( - name = S.song_name - ) - data["songs"] += list(track_data) - data["track_selected"] = null - data["track_length"] = null - data["track_beat"] = null - if(selection) - data["track_selected"] = selection.song_name - data["track_length"] = DisplayTimeText(selection.song_length) - data["track_beat"] = selection.song_beat - data["volume"] = volume - return data - -/obj/machinery/jukebox/ui_act(action, list/params) - . = ..() - if(.) - return - - switch(action) - if("toggle") - if(QDELETED(src)) - return - if(!active) - if(stop > world.time) - to_chat(usr, span_warning("Error: The device is still resetting from the last activation, it will be ready again in [DisplayTimeText(stop-world.time)].")) - return - activate_music() - return TRUE - else - stop = 0 - return TRUE - if("select_track") - if(active) - to_chat(usr, span_warning("Error: You cannot change the song until the current one is over.")) - return - var/list/available = list() - for(var/datum/track/S in SSjukeboxes.songs) - available[S.song_name] = S - var/selected = params["track"] - if(QDELETED(src) || !selected || !istype(available[selected], /datum/track)) - return - selection = available[selected] - return TRUE - if("set_volume") - var/new_volume = params["volume"] - if(new_volume == "reset") - volume = initial(volume) - return TRUE - else if(new_volume == "min") - volume = 0 - return TRUE - else if(new_volume == "max") - volume = 100 - return TRUE - else if(text2num(new_volume) != null) - volume = text2num(new_volume) - return TRUE - -/obj/machinery/jukebox/proc/activate_music() - var/jukeboxslottotake = SSjukeboxes.addjukebox(src, selection, 2) - if(jukeboxslottotake) - active = TRUE - update_use_power(ACTIVE_POWER_USE) - update_appearance(UPDATE_ICON_STATE) - START_PROCESSING(SSobj, src) - stop = world.time + selection.song_length - return TRUE - else - return FALSE - -/obj/machinery/jukebox/disco/activate_music() - ..() - dance_setup() - lights_spin() - -/obj/machinery/jukebox/disco/proc/dance_setup() - var/turf/cen = get_turf(src) - FOR_DVIEW(var/turf/t, 3, get_turf(src),INVISIBILITY_LIGHTING) - if(t.x == cen.x && t.y > cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), COLOR_SOFT_RED) - continue - if(t.x == cen.x && t.y < cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_PURPLE) - continue - if(t.x > cen.x && t.y == cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BRIGHT_YELLOW) - continue - if(t.x < cen.x && t.y == cen.y) - spotlights += new /obj/item/flashlight/spotlight(t, 1 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_GREEN) - continue - if((t.x+1 == cen.x && t.y+1 == cen.y) || (t.x+2==cen.x && t.y+2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_ORANGE) - continue - if((t.x-1 == cen.x && t.y-1 == cen.y) || (t.x-2==cen.x && t.y-2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_CYAN) - continue - if((t.x-1 == cen.x && t.y+1 == cen.y) || (t.x-2==cen.x && t.y+2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BLUEGREEN) - continue - if((t.x+1 == cen.x && t.y-1 == cen.y) || (t.x+2==cen.x && t.y-2 == cen.y)) - spotlights += new /obj/item/flashlight/spotlight(t, 1.4 + get_dist(src, t), 30 - (get_dist(src, t) * 8), LIGHT_COLOR_BLUE) - continue - continue - FOR_DVIEW_END - -/obj/machinery/jukebox/disco/proc/hierofunk() - for(var/i in 1 to 10) - spawn_atom_to_turf(/obj/effect/temp_visual/hierophant/telegraph/edge, src, 1, FALSE) - sleep(0.5 SECONDS) - if(QDELETED(src)) - return -#define DISCO_INFENO_RANGE (rand(85, 115)*0.01) - -/obj/machinery/jukebox/disco/proc/lights_spin() - for(var/i in 1 to 25) - if(QDELETED(src) || !active) - return - var/obj/effect/overlay/sparkles/S = new /obj/effect/overlay/sparkles(src) - S.alpha = 0 - sparkles += S - switch(i) - if(1 to 8) - S.orbit(src, 30, TRUE, 60, 36, TRUE) - if(9 to 16) - S.orbit(src, 62, TRUE, 60, 36, TRUE) - if(17 to 24) - S.orbit(src, 95, TRUE, 60, 36, TRUE) - if(25) - S.pixel_y = 7 - S.forceMove(get_turf(src)) - sleep(0.7 SECONDS) - if(selection.song_name == "Engineering's Ultimate High-Energy Hustle") - sleep(28 SECONDS) - for(var/s in sparkles) - var/obj/effect/overlay/sparkles/reveal = s - reveal.alpha = 255 - while(active) - for(var/g in spotlights) // The multiples reflects custom adjustments to each colors after dozens of tests - var/obj/item/flashlight/spotlight/glow = g - if(QDELETED(glow)) - stack_trace("[glow?.gc_destroyed ? "Qdeleting glow" : "null entry"] found in [src].[gc_destroyed ? " Source qdeleting at the time." : ""]") - return - switch(glow.light_color) - if(COLOR_SOFT_RED) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_BLUE) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 1.48, LIGHT_COLOR_BLUE) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_BLUE) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 2, LIGHT_COLOR_GREEN) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_GREEN) - if(LIGHT_COLOR_GREEN) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_ORANGE) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.5, LIGHT_COLOR_ORANGE) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_ORANGE) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 2.27, LIGHT_COLOR_PURPLE) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_PURPLE) - if(LIGHT_COLOR_PURPLE) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_BLUEGREEN) - else - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.44, LIGHT_COLOR_BLUEGREEN) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_BLUEGREEN) - if(glow.even_cycle) - glow.set_light_range(glow.base_light_range * DISCO_INFENO_RANGE) - glow.set_light_color(LIGHT_COLOR_BRIGHT_YELLOW) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_DIM_YELLOW) - if(LIGHT_COLOR_DIM_YELLOW) - if(glow.even_cycle) - glow.set_light_on(FALSE) - glow.set_light_color(LIGHT_COLOR_CYAN) - else - glow.set_light_range(glow.base_light_range * DISCO_INFENO_RANGE) - glow.set_light_color(LIGHT_COLOR_CYAN) - glow.set_light_on(TRUE) - if(LIGHT_COLOR_CYAN) - if(glow.even_cycle) - glow.set_light_range_power_color(glow.base_light_range * DISCO_INFENO_RANGE, glow.light_power * 0.68, COLOR_SOFT_RED) - glow.set_light_on(TRUE) - else - glow.set_light_on(FALSE) - glow.set_light_color(COLOR_SOFT_RED) - glow.even_cycle = !glow.even_cycle - if(prob(2)) // Unique effects for the dance floor that show up randomly to mix things up - INVOKE_ASYNC(src, PROC_REF(hierofunk)) - sleep(selection.song_beat) - if(QDELETED(src)) - return - -#undef DISCO_INFENO_RANGE - -/obj/machinery/jukebox/disco/proc/dance(mob/living/M) //Show your moves - set waitfor = FALSE - switch(rand(0, 9)) - if(0 to 1) - dance2(M) - if(2 to 3) - dance3(M) - if(4 to 6) - dance4(M) - if(7 to 9) - dance5(M) - -/obj/machinery/jukebox/disco/proc/dance2(mob/living/M) - for(var/i in 0 to 9) - dance_rotate(M, CALLBACK(M, TYPE_PROC_REF(/mob, dance_flip))) - sleep(2 SECONDS) - -/mob/proc/dance_flip() - if(dir == WEST) - emote("flip") - -/obj/machinery/jukebox/disco/proc/dance3(mob/living/M) - set waitfor = FALSE - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 75) - if (!M) - return - switch(i) - if (1 to 15) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (16 to 30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,-1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (31 to 45) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,-1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (46 to 60) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-1,1) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (61 to 75) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(1,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 0.1 SECONDS, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - -/obj/machinery/jukebox/disco/proc/dance4(mob/living/lead_dancer) - var/speed = rand(1,3) - set waitfor = 0 - var/time = 30 - while(time) - sleep(speed) - for(var/i in 1 to speed) - lead_dancer.setDir(pick(GLOB.cardinals)) - // makes people dance with us nearby - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/carbon/dancer = weak_dancer.resolve() - if(!istype(dancer)) - continue - dancer.set_resting(!dancer.resting, silent = TRUE, instant = TRUE) - time-- - -/obj/machinery/jukebox/disco/proc/dance5(mob/living/M) - animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) - var/matrix/initial_matrix = matrix(M.transform) - for (var/i in 1 to 60) - if (!M) - return - if(!active) - break - if (i<31) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (i>30) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-1) - animate(M, transform = initial_matrix, time = 1, loop = 0) - M.setDir(turn(M.dir, 90)) - switch (M.dir) - if (NORTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (SOUTH) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(0,-3) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (EAST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - if (WEST) - initial_matrix = matrix(M.transform) - initial_matrix.Translate(-3,0) - animate(M, transform = initial_matrix, time = 1, loop = 0) - sleep(0.1 SECONDS) - M.lying_fix() - -/mob/living/proc/lying_fix() - animate(src, transform = null, time = 0.1 SECONDS, loop = 0) - lying_prev = 0 - -/obj/machinery/jukebox/proc/dance_over() - var/position = SSjukeboxes.findjukeboxindex(src) - if(!position) - return - SSjukeboxes.removejukebox(position) - STOP_PROCESSING(SSobj, src) - rangers.Cut() - -/obj/machinery/jukebox/disco/dance_over() - ..() - QDEL_LIST(spotlights) - QDEL_LIST(sparkles) - -/obj/machinery/jukebox/process() - if(active && world.time >= stop) - active = FALSE - update_use_power(IDLE_POWER_USE) - STOP_PROCESSING(SSobj, src) - dance_over() - playsound(src,'sound/machines/terminal/terminal_off.ogg',50,TRUE) - update_appearance(UPDATE_ICON_STATE) - stop = world.time + 100 - -/obj/machinery/jukebox/disco/process() - . = ..() - if(!active) - return - - for(var/datum/weakref/weak_dancer as anything in rangers) - var/mob/living/to_dance = weak_dancer.resolve() - if(!istype(to_dance) || !(to_dance.mobility_flags & MOBILITY_MOVE)) - continue - if(prob(5 + (allowed(to_dance) * 4))) - dance(to_dance) - -#undef HAS_JUKEBOX_PREF diff --git a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm b/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm deleted file mode 100644 index dbcc6171aadce..0000000000000 --- a/modular_skyrat/modules/jukebox/code/jukebox_subsystem.dm +++ /dev/null @@ -1,138 +0,0 @@ -#define HAS_JUKEBOX_PREF(mob) (!QDELETED(mob) && !isnull(mob.client) && mob.client.prefs.read_preference(/datum/preference/toggle/sound_jukebox) && mob.can_hear()) - -SUBSYSTEM_DEF(jukeboxes) - name = "Jukeboxes" - wait = 5 - var/list/songs = list() - var/list/activejukeboxes = list() - var/list/freejukeboxchannels = list() - -/datum/track - var/song_name = "generic" - var/song_path = null - var/song_length = 0 - var/song_beat = 0 - var/song_associated_id = null - -/datum/controller/subsystem/jukeboxes/proc/addjukebox(obj/machinery/jukebox/jukebox, datum/track/T, jukefalloff = 1) - if(!istype(T)) - CRASH("[src] tried to play a song with a nonexistant track") - var/channeltoreserve = pick(freejukeboxchannels) - if(!channeltoreserve) - return FALSE - freejukeboxchannels -= channeltoreserve - var/list/youvegotafreejukebox = list(T, channeltoreserve, jukebox, jukefalloff) - activejukeboxes.len++ - activejukeboxes[activejukeboxes.len] = youvegotafreejukebox - - //Due to changes in later versions of 512, SOUND_UPDATE no longer properly plays audio when a file is defined in the sound datum. As such, we are now required to init the audio before we can actually do anything with it. - //Downsides to this? This means that you can *only* hear the jukebox audio if you were present on the server when it started playing, and it means that it's now impossible to add loops to the jukebox track list. - var/sound/song_to_init = sound(T.song_path) - song_to_init.status = SOUND_MUTE - for(var/mob/M in GLOB.player_list) - if(!M.client) - continue - if(!(M.client.prefs.read_preference(/datum/preference/toggle/sound_instruments))) - continue - - M.playsound_local(M, null, (jukebox.volume / 2), channel = youvegotafreejukebox[2], sound_to_use = song_to_init) - return activejukeboxes.len - -/datum/controller/subsystem/jukeboxes/proc/removejukebox(IDtoremove) - if(islist(activejukeboxes[IDtoremove])) - var/jukechannel = activejukeboxes[IDtoremove][2] - for(var/mob/M in GLOB.player_list) - if(!M.client) - continue - M.stop_sound_channel(jukechannel) - freejukeboxchannels |= jukechannel - activejukeboxes.Cut(IDtoremove, IDtoremove+1) - return TRUE - else - CRASH("Tried to remove jukebox with invalid ID") - -/datum/controller/subsystem/jukeboxes/proc/findjukeboxindex(obj/machinery/jukebox) - if(length(activejukeboxes)) - for(var/list/jukeinfo in activejukeboxes) - if(jukebox in jukeinfo) - return activejukeboxes.Find(jukeinfo) - return FALSE - -/datum/controller/subsystem/jukeboxes/proc/reload_songs() - songs = list() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - for(var/S in tracks) - var/datum/track/T = new() - T.song_path = file("[global.config.directory]/jukebox_music/sounds/[S]") - var/list/L = splittext(S,"+") - if(L.len != 4) - continue - T.song_name = L[1] - T.song_length = text2num(L[2]) - T.song_beat = text2num(L[3]) - T.song_associated_id = L[4] - songs |= T - -/datum/controller/subsystem/jukeboxes/Initialize() - reload_songs() - for(var/i in CHANNEL_JUKEBOX_START to CHANNEL_JUKEBOX) - freejukeboxchannels |= i - return SS_INIT_SUCCESS - -/datum/controller/subsystem/jukeboxes/fire() - if(!length(activejukeboxes)) - return - for(var/list/jukeinfo in activejukeboxes) - if(!length(jukeinfo)) - stack_trace("Active jukebox without any associated metadata.") - continue - var/datum/track/juketrack = jukeinfo[1] - if(!istype(juketrack)) - stack_trace("Invalid jukebox track datum.") - continue - var/obj/machinery/jukebox/jukebox = jukeinfo[3] - if(!istype(jukebox)) - stack_trace("Nonexistant or invalid object associated with jukebox.") - continue - var/sound/song_played = sound(juketrack.song_path) - - song_played.falloff = 255 - - for(var/mob/M in GLOB.player_list) - if(!HAS_JUKEBOX_PREF(M)) - M.stop_sound_channel(jukeinfo[2]) - continue - - var/volume = jukebox.volume - - if(jukebox.z == M.z) //todo - expand this to work with mining planet z-levels when robust jukebox audio gets merged to master - song_played.status = SOUND_UPDATE - //https://www.desmos.com/calculator/ybto1dyqzk - if(jukeinfo[4]) //HAS FALLOFF - var/distance = get_dist(M,jukebox) - volume = min( - 50, - volume, - volume * ((max(1,volume*0.1 + jukebox.falloff_dist_offset - distance)/80)**0.2 - (distance/jukebox.falloff_dist_divider)) - ) - volume = round(volume,1) - if(volume < jukebox.volume*0.5) - var/volume_mod = 1 - (volume / 50) - song_played.x = clamp(jukebox.x - M.x,-1,1) * volume_mod * 4 - song_played.y = clamp(jukebox.y - M.y,-1,1) * volume_mod * 4 - song_played.z = 1 - else - song_played.x = 0 - song_played.y = 0 - song_played.z = 1 - - if(volume < 1) - song_played.status |= SOUND_MUTE - else - song_played.status = SOUND_MUTE | SOUND_UPDATE //Setting volume = 0 doesn't let the sound properties update at all, which is lame. - - M.playsound_local(null, null, volume, channel = jukeinfo[2], sound_to_use = song_played) - CHECK_TICK - return - -#undef HAS_JUKEBOX_PREF diff --git a/modular_skyrat/modules/jukebox/code/ravemod.dm b/modular_skyrat/modules/jukebox/code/ravemod.dm deleted file mode 100644 index 47ce527810b7f..0000000000000 --- a/modular_skyrat/modules/jukebox/code/ravemod.dm +++ /dev/null @@ -1,90 +0,0 @@ -///Rave Visor - Gives you a rainbow visor and plays jukebox music to you. -/obj/item/mod/module/visor/rave - name = "MOD rave visor module" - desc = "A Super Cool Awesome Visor (SCAV), intended for modular suits." - icon_state = "rave_visor" - complexity = 1 - overlay_state_inactive = "module_rave" - /// The client colors applied to the wearer. - var/datum/client_colour/rave_screen - /// The current element in the rainbow_order list we are on. - var/rave_number = 1 - /// The track we selected to play. - var/datum/track/selection - /// A list of all the songs we can play. - var/list/songs = list() - /// A list of the colors the module can take. - var/static/list/rainbow_order = list( - list(1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0), - list(1,0,0,0, 0,0.5,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0), - list(1,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0), - list(0,0,0,0, 0,1,0,0, 0,0,0,0, 0,0,0,1, 0,0,0,0), - list(0,0,0,0, 0,0.5,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0), - list(1,0,0,0, 0,0,0,0, 0,0,1,0, 0,0,0,1, 0,0,0,0), - ) - -/obj/item/mod/module/visor/rave/Initialize(mapload) - . = ..() - var/list/tracks = flist("[global.config.directory]/jukebox_music/sounds/") - for(var/sound in tracks) - var/datum/track/track = new() - track.song_path = file("[global.config.directory]/jukebox_music/sounds/[sound]") - var/list/sound_params = splittext(sound,"+") - if(length(sound_params) != 3) - continue - track.song_name = sound_params[1] - track.song_length = text2num(sound_params[2]) - track.song_beat = text2num(sound_params[3]) - songs[track.song_name] = track - if(length(songs)) - var/song_name = pick(songs) - selection = songs[song_name] - -/obj/item/mod/module/visor/rave/on_activation() - . = ..() - if(!.) - return - rave_screen = mod.wearer.add_client_colour(/datum/client_colour/rave) - rave_screen.update_colour(rainbow_order[rave_number]) - if(selection) - mod.wearer.playsound_local(get_turf(src), null, 50, channel = CHANNEL_JUKEBOX, sound_to_use = sound(selection.song_path), use_reverb = FALSE) - -/obj/item/mod/module/visor/rave/on_deactivation(display_message = TRUE, deleting = FALSE) - . = ..() - if(!.) - return - QDEL_NULL(rave_screen) - if(selection) - mod.wearer.stop_sound_channel(CHANNEL_JUKEBOX) - if(deleting) - return - SEND_SOUND(mod.wearer, sound('sound/machines/terminal/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) - -/obj/item/mod/module/visor/rave/generate_worn_overlay(mutable_appearance/standing) - . = ..() - for(var/mutable_appearance/appearance as anything in .) - appearance.color = active ? rainbow_order[rave_number] : null - -/obj/item/mod/module/visor/rave/on_active_process(seconds_per_tick) - rave_number++ - if(rave_number > length(rainbow_order)) - rave_number = 1 - mod.wearer.update_clothing(mod.slot_flags) - rave_screen.update_colour(rainbow_order[rave_number]) - -/obj/item/mod/module/visor/rave/get_configuration() - . = ..() - if(length(songs)) - .["selection"] = add_ui_configuration("Song", "list", selection.song_name, clean_songs()) - -/obj/item/mod/module/visor/rave/configure_edit(key, value) - switch(key) - if("selection") - if(active) - return - selection = songs[value] - -/obj/item/mod/module/visor/rave/proc/clean_songs() - . = list() - for(var/track in songs) - . += track diff --git a/modular_skyrat/modules/jukebox/icons/stationobjs.dmi b/modular_skyrat/modules/jukebox/icons/stationobjs.dmi deleted file mode 100644 index bf2178553fc183d5864f509922af4a429f1b5032..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3631 zcmZ`+dpwhU|G(C-PjXt=xMo{CTwF~@FHB*ZP6LXk-B6*p@m^gIqZ6gd=gC+D*q za@a<*=9ok|TgZelHpAHFnfm=+zvuOPUe6!b_5EI-@8R=#f8L+N>x#K#`@7U0#XSH3 zNLgE1To#TwJI`)0;XAJP)^Xub5bEfHw($PbGsrg(?Rz%>07717byrD0(pC`p+OX~5 z=3xmgj5I$0J}J2@ZHdi$G>{Uzxh9>Sq;XHXeoSheJCwIoYV!1!Ugcu#oJ!TT$48bL zgH9c}axx~9Q}kf^dsdL7I1}UdRu7tJk>?MM`Da^Su>>j1uUmd!-=L?xYk#0VZY-(r zt&^SAop&mVYzYTQ0VJDRC%Yd4%Xm!^h506{bm)eH3{#w6H|WO_giy?_EleFlUM^pt|dL z?L{|{`S57M^{1gwgSS^y5BZp$d!Z&fa!1WyR#Zf@UDcQ(hC*wPAHH&TZISU}IO8*e zSM!FXbQq>XN|Y z;H_s*H8zi2fvw?|A6%YaMLYF&13)}O=V^ur;4-IQ098$M zkIc?!#SsNcz%n6=faB;Ae?>cs1jE=+XxB<1KRq@-q-^x z%DOp97`3++u01hX)lFXnNbI!wm#t`Yn&ZfzQ2dzD;O|reJ|2#Kr6bNq^Qw$nD zwJ@Qw+dV70+;+~un2$b0eLOmi9LLH7BL>`VXxerxKJw7`==<*zr|Cg{>0L!l-%PCr zsrE&VGKoEE`xB>WcmjGRt~dIqx;h9jH#hG_e#4-2RdvuOGkiwquLZfISZ(e2NB5WW zea-sy+NSOuV>Y*4sTyiQP5d?ND4_Se=w|LC⪻ObEcdO#8MLeo|&oN{$4j-*zn9k zVnDBFcK#$;SgCGyZSz-c5$xg9_CMmSO0==LJiurR4+^yn^Ht{xE`- zx*qQE9$C81B8(q?;FdUgt-P!g+`>JRXsd+s0#T}DG ziUj3++5B)IiJ^@Wd1q3jxC`Y)m^X&CaVnPBvJoprw_1WX{j&CMEo5P5gIEJkw92%0 z72@w)>`#hSPJ5J-A980u^uUrQ-K$Lbpu@EC>|h;AWg41t_-d171QQ|o3+e_XDNZ3g z1vRDHFoq)uT2aydHhBS{!rGvV{iOlKB&8^zvJV;GUtpK(cEXd%)&B5AP!q|6A4Kt1 za@&HHAt}zS?Qwf4E;;jWRE{)mW#&(Q$~%Aj>eFm37yXvTiJK)%MJ)UFhW182w+~B) zK47-U%Ml|D$0wC(K{F*qPO5bF5qA5KM%rDrU|x@2|o=TlF|KMKNYEIZ+Nl^dCB zTL}ZSLAT1YvT9gniUm~juEIw)$Hq7FCLyYGh9$UUseLeehH>SHfr`*N9$uLsK$rMw~_S^363wh1j;%i zfpX)%83Wpmxoo@z*1@Or3c|b9XWk%H*w)9;B7x=zFSrI!iHeH#YzwM%W0p@13)mN|s~V11n{tAjjC^b-@-sL*qc(iS;~L-KuZtSpTV z!N0(KvKx#aH}`#qra44l+Oz5BrAHTU2qx)<56lYrb6)lv!ox~L9f0zVjNT-2+O|47 zV`pNIWQ)sxxUc5W$R%@qBZ{LF?d+aRPf@NnhfRwCU)OkNfdPZ_G`W10Fzv`e@DYEIGI7e~BI0>BZTZ>WtWKboS z>>X@$1tujsKGgzC*@HOElT52<7R@n6Z04-C=~z{#Nn~y(wC$&^m=a~+sGGQkroFfM zi?iFT)Ou+*97k96G|pfT&Nvl0DfA;E?1mhSw$&EOyizWU$>6UL?966HhvhiXOdaQ~dFj^Q)Lv7POCZ?|x{2`I?i0S=Q=NFYH^4w|d(WR9)#4nMHl0xlFU5IamT6a-=IUCuz-NmgO`r_;0#pZ zI5T>10<#PDu>%&c67Z?&4wXOWn&K^tqp&qdd@)j)?aL+dK)K&{;{E@nLY(7&Ns#{# zLzbXJLY{=_p~(k@b>I`YH5e4Q&wjPQ)A%^e893MXL(~gWaKahT`&mY!9x42}bi1x# z4kRUyMU@!E+pbY_mmzY3kVnc<$ZQy~kmLcL+?0)_-j7^WN3TPonvmCq1n6qy;b>&e zGSv@F-9v+2s*DKaiziAU{X8Hm>%prKFWlKRb;)U-;U+kCcI?|ghaiMur?AQuE-~bP zs8$YZB~0yr#dbA#$RliiSRJOL9$Wp>7x`1Ke)xh|AgN)VOaD;@DuDP`KUTAOAScMa zpBEW%!Fw!!;NnGYf$KEFhJGNrg)^Z)V-3TSxUVs55HI83@O)5)U8hjIzX&5`@y5k8 z4xD5Omll2^fInW}J{bPXFOi>hpYy(xCC;rlnH2!wT+|n zUpCDaq5qB-7FHb|4%xgkuenY+fDB<}v45ejiwTQqXv8Q~t^GjpcG&G+{^F2ul z-WZd(nH>A?3R$&^H@&Qg7IY&0a(ALJjg820@Z0S-k;Lu$#x~K5b5sgHcKIGq zZI!qBxF|Rewa)QgeC~;5vd)03t!6ZVMWgIW=OrCvD27&YoiY0En$$a<&&u%2e_Fzc z5U-!;P}{%7$Q!x84U91 za9xw&Thrs&c!-Q3)-B`WWTN_;oe;B}Jz|A3oByoMNccRBnFm%+Nss+UX^fowg#s(_tLX%Jlr7o}Y_5mi~`jl~nG4!#xIc jX!@13$^XJC-UgrQu`ltG*F*^a00C=DTZ?itk4OIkotsn8 diff --git a/modular_skyrat/modules/jukebox/readme.md b/modular_skyrat/modules/jukebox/readme.md deleted file mode 100644 index 9fc60ce0f15c7..0000000000000 --- a/modular_skyrat/modules/jukebox/readme.md +++ /dev/null @@ -1,29 +0,0 @@ -https://github.com/Skyrat-SS13/Skyrat-tg/pull/892 - -## Title: Jukebox - -MODULE ID: JUKEBOX - -### Description: - -Adds a new sound system for the jukebox, and also updates the jukebox to be good. - -### TG Proc Changes: - -- Skyrat-tg\code\__DEFINES\sound.dm > DEFINES CHANGED, SEE FILE. - -### Defines: - -- #define CHANNEL_JUKEBOX_START 1016 - -### Master file additions - -- modular_skyrat\master_files\code\game\sound.dm - -### Included files that are not contained in this module: - -- N/A - -### Credits: -Gandalf2k15 - porting -NotRanged - Original code diff --git a/tgstation.dme b/tgstation.dme index 05993a037eb38..0788817e58163 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -7805,9 +7805,6 @@ #include "modular_skyrat\modules\interaction_menu\code\click.dm" #include "modular_skyrat\modules\interaction_menu\code\interaction_component.dm" #include "modular_skyrat\modules\interaction_menu\code\interaction_datum.dm" -#include "modular_skyrat\modules\jukebox\code\dance_machine.dm" -#include "modular_skyrat\modules\jukebox\code\jukebox_subsystem.dm" -#include "modular_skyrat\modules\jukebox\code\ravemod.dm" #include "modular_skyrat\modules\jungle\code\flora.dm" #include "modular_skyrat\modules\kahraman_equipment\code\gps_beacon.dm" #include "modular_skyrat\modules\kahraman_equipment\code\looping_sounds.dm" diff --git a/tools/UpdatePaths/Scripts_Bubber/2762_jukebox_repath.txt b/tools/UpdatePaths/Scripts_Bubber/2762_jukebox_repath.txt new file mode 100644 index 0000000000000..be7b0a770d7e0 --- /dev/null +++ b/tools/UpdatePaths/Scripts_Bubber/2762_jukebox_repath.txt @@ -0,0 +1 @@ +/obj/machinery/jukebox/public : /obj/machinery/jukebox/no_access{@OLD} From 49f468296b6d36af8f086803ea6170ebed78482e Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Tue, 24 Dec 2024 20:07:01 +0100 Subject: [PATCH 11/31] Automatic changelog for PR #2762 [ci skip] --- html/changelogs/AutoChangeLog-pr-2762.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2762.yml diff --git a/html/changelogs/AutoChangeLog-pr-2762.yml b/html/changelogs/AutoChangeLog-pr-2762.yml new file mode 100644 index 0000000000000..d296fb7964acc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2762.yml @@ -0,0 +1,4 @@ +author: "TealSeer" +delete-after: True +changes: + - refactor: "ripped out all the skyrat jukebox code in favor of tg's." \ No newline at end of file From d00bc6dad1c97e0cdc487f9767936421e639eb70 Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Tue, 24 Dec 2024 13:56:50 -0800 Subject: [PATCH 12/31] Consistent vendors in departmental security offices (#2760) ## About The Pull Request Puts the multisec vendor consistently in all the departmental guard offices on Bubber maps. Puts the high-vis labcoat in engi/med wardrobe vendors so it's not loadout only. ## Why It's Good For The Game Consistency to access of gear ## Changelog :cl: LT3 map: Multisec vendors are consistently placed in various departmental guard offices /:cl: --- _maps/map_files/VoidRaptor/VoidRaptor.dmm | 37 ++++++++++--------- _maps/map_files/moonstation/moonstation.dmm | 17 +++++---- .../modules/modular_vending/code/wardrobes.dm | 2 + 3 files changed, 30 insertions(+), 26 deletions(-) diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index acfd5ee7ad698..fc178dd3d03b6 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -26774,6 +26774,18 @@ pixel_x = -6; pixel_y = 4 }, +/obj/item/paper_bin{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/folder/red{ + pixel_x = 9; + pixel_y = 4 + }, /turf/open/floor/iron/white, /area/station/security/checkpoint/science/research) "hMN" = ( @@ -28159,10 +28171,7 @@ /obj/effect/turf_decal/trimline/brown/filled/line{ dir = 5 }, -/obj/structure/rack, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/radio, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/smooth, /area/station/security/checkpoint/supply) "ijj" = ( @@ -56060,6 +56069,10 @@ /area/station/hallway/primary/aft) "pHC" = ( /obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/rack, +/obj/item/radio, +/obj/item/crowbar, +/obj/item/wrench, /turf/open/floor/iron/smooth_edge{ dir = 1 }, @@ -56258,19 +56271,7 @@ c_tag = "Security Post - Science"; network = list("ss13","rd") }, -/obj/structure/table, -/obj/item/folder/red{ - pixel_x = -6; - pixel_y = 4 - }, -/obj/item/paper_bin{ - pixel_x = 5; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = 5; - pixel_y = 4 - }, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/white/smooth_edge{ dir = 1 }, @@ -65352,7 +65353,7 @@ "snJ" = ( /obj/effect/turf_decal/tile/blue/fourcorners, /obj/item/radio/intercom/directional/west, -/obj/structure/sink/directional/east, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/freezer, /area/station/security/checkpoint/medical) "snO" = ( diff --git a/_maps/map_files/moonstation/moonstation.dmm b/_maps/map_files/moonstation/moonstation.dmm index 8226324fd0b36..a8cb7f9ffcd80 100644 --- a/_maps/map_files/moonstation/moonstation.dmm +++ b/_maps/map_files/moonstation/moonstation.dmm @@ -1258,7 +1258,6 @@ /area/station/hallway/secondary/exit) "arM" = ( /obj/structure/table, -/obj/machinery/computer/security/telescreen/engine/directional/north, /obj/effect/turf_decal/tile/red/anticorner/contrasted, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/firealarm/directional/south, @@ -3724,11 +3723,11 @@ /turf/open/floor/plating, /area/station/service/hydroponics/garden) "aXx" = ( -/obj/structure/filingcabinet, /obj/machinery/firealarm/directional/south, /obj/effect/turf_decal/tile/red/anticorner/contrasted, /obj/machinery/camera/autoname/security/directional/east, /obj/machinery/light_switch/directional/east, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "aXA" = ( @@ -8866,6 +8865,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/aft) "czq" = ( @@ -10553,8 +10553,8 @@ /obj/machinery/recharger{ pixel_y = 4 }, -/obj/machinery/newscaster/directional/east, /obj/structure/cable, +/obj/machinery/newscaster/directional/east, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "cXX" = ( @@ -10936,6 +10936,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/wood, /area/station/service/cafeteria) "ddH" = ( @@ -13832,11 +13833,9 @@ /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/starboard/aft) "dSx" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/folder, /obj/machinery/light/small/directional/north, /obj/item/radio/intercom/directional/west, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "dSD" = ( @@ -38237,11 +38236,11 @@ /area/station/maintenance/coffin_supply) "kzK" = ( /obj/machinery/computer/records/security, -/obj/machinery/requests_console/auto_name/directional/west, /obj/effect/mapping_helpers/requests_console/assistance, /obj/effect/mapping_helpers/requests_console/information, /obj/effect/mapping_helpers/requests_console/supplies, /obj/machinery/light/small/directional/west, +/obj/machinery/requests_console/auto_name/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "kzP" = ( @@ -68911,6 +68910,8 @@ /obj/structure/table, /obj/machinery/computer/security/telescreen/research, /obj/machinery/airalarm/directional/south, +/obj/item/folder, +/obj/item/clipboard, /turf/open/floor/iron/dark, /area/station/security/checkpoint/science/research) "sWu" = ( @@ -69735,7 +69736,6 @@ /turf/open/floor/plating, /area/station/cargo/miningfoundry/event_protected) "tij" = ( -/obj/structure/filingcabinet, /obj/machinery/light/moonstation/directional/north, /obj/effect/turf_decal/tile/red/anticorner/contrasted{ dir = 4 @@ -69745,6 +69745,7 @@ /obj/machinery/requests_console/auto_name/directional/east, /obj/effect/mapping_helpers/requests_console/assistance, /obj/item/radio/intercom/directional/north, +/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/dark, /area/station/security/checkpoint/engineering) "til" = ( diff --git a/modular_skyrat/modules/modular_vending/code/wardrobes.dm b/modular_skyrat/modules/modular_vending/code/wardrobes.dm index d1b60334c6b76..e12508fc2f738 100644 --- a/modular_skyrat/modules/modular_vending/code/wardrobes.dm +++ b/modular_skyrat/modules/modular_vending/code/wardrobes.dm @@ -9,6 +9,7 @@ /obj/item/clothing/under/rank/medical/scrubs/skyrat/white = 4, /obj/item/clothing/under/rank/medical/doctor/skyrat/utility = 4, /obj/item/clothing/suit/toggle/labcoat/medical = 4, + /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis = 4, /obj/item/clothing/under/rank/medical/virologist = 4, /obj/item/clothing/suit/toggle/labcoat/virologist = 4, /obj/item/storage/backpack/messenger/med = 4, @@ -26,6 +27,7 @@ /obj/item/clothing/under/misc/overalls = 3, /obj/item/clothing/suit/toggle/jacket/engi = 3, /obj/item/clothing/suit/toggle/jacket/tcomm = 3, + /obj/item/clothing/suit/toggle/labcoat/skyrat/highvis = 3, /obj/item/clothing/head/utility/hardhat/orange = 3, /obj/item/clothing/head/utility/hardhat/welding/orange = 3, /obj/item/clothing/head/utility/hardhat/dblue = 3, From 32a13dc25e709b73f384f01149c847b65ddd2e9d Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Tue, 24 Dec 2024 22:57:14 +0100 Subject: [PATCH 13/31] Automatic changelog for PR #2760 [ci skip] --- html/changelogs/AutoChangeLog-pr-2760.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2760.yml diff --git a/html/changelogs/AutoChangeLog-pr-2760.yml b/html/changelogs/AutoChangeLog-pr-2760.yml new file mode 100644 index 0000000000000..302fc6f3f68b5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2760.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - map: "Multisec vendors are consistently placed in various departmental guard offices" \ No newline at end of file From 087f4d4c866f71bddec69e7c2ac12e459826956f Mon Sep 17 00:00:00 2001 From: Rowan Lea <5251535+Screampuff@users.noreply.github.com> Date: Tue, 24 Dec 2024 17:00:41 -0500 Subject: [PATCH 14/31] Adds Edgerunner hair, a mohawk/quiff style from MonkeStation (#2768) ## About The Pull Request Adds the Edgerunner hairstyle from MonkeStation. ## Why It's Good For The Game The current pick of mohawks, pomps, and quiff aren't exactly.. great, especially when scaled. ![dreamseeker_2024-12-13_23-24-52](https://github.com/user-attachments/assets/7a7fbd8d-3982-4609-95ed-4a2e11a6bb4c) This adds a nicer one! ## Proof Of Testing
Screenshots/Videos ![image](https://github.com/user-attachments/assets/4dc8f4ae-5f93-4346-b67a-8e0b98d6b8c9)
## Changelog :cl: add: Added Edgerunner hairstyle for us punks /:cl: --- .../dead/new_player/sprite_accessories/hair.dm | 5 +++++ modular_zubbers/icons/customization/hair_big.dmi | Bin 0 -> 803 bytes 2 files changed, 5 insertions(+) create mode 100644 modular_zubbers/icons/customization/hair_big.dmi diff --git a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm index 61c8ac1a8a7cf..310be565bea72 100644 --- a/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm +++ b/modular_zubbers/code/modules/mob/dead/new_player/sprite_accessories/hair.dm @@ -61,3 +61,8 @@ icon = 'modular_zubbers/icons/customization/hair.dmi' name = "Ponytails (Berly)" icon_state = "hair_tails_berly" + +/datum/sprite_accessory/hair/edgerunner + icon = 'modular_zubbers/icons/customization/hair_big.dmi' + name = "Edgerunner" + icon_state = "edgerunner" diff --git a/modular_zubbers/icons/customization/hair_big.dmi b/modular_zubbers/icons/customization/hair_big.dmi new file mode 100644 index 0000000000000000000000000000000000000000..9bb8938a7eb08c1bccb9bc55ed81c7adb55e5948 GIT binary patch literal 803 zcmeAS@N?(olHy`uVBq!ia0vp^4nUm1!3HGP9xZtRq)MtnB1&9Ri<65o3raHc^B5Q^ z=CB?#^4hry2R9``uXzTDNM)Oqt483j<((V zh(pFj*e>8W0|Qf*r;B4q#hkaZ4cFf?5OK?2#h2m~w>kZ*e8$iB9*w=7SFN>ArI=Z5 zSvTjyg~wKT=bZPZGqt=qf81Q)Lh0uF@1NE`la_5b#&Ur%!-oMoW6!T+``*9*`S_3J zNt*Z%>@BLo>d``^z>nBqbTilHOct5pn%l&PB`)N^N?_!||1?OyAB7>dofB(KM zSN_wI-iseTsR}q{B=t=8e5Q2m(alH6J+HE2{wThfGkII?)$4JZKW$9S7I+-kbLHBk z3DfJ=zRKQG-&OVg{qxU17oM57H*R*J4FB%C@7g;~q;2lpetWH`pk&*_9e4BUvyKOI z|KNHeTEd zwfX-mne)%04=pm=DWdfC{kn_VbIw2CyMKB~$8(Wzhpd=$(bspco4oF|SNoqS{m0^O zEs0f0s7r86xwZYjKA(S!z^p4v-_4m_(yc#nfsldz!6TD|rK9YuH!KugC Date: Tue, 24 Dec 2024 23:03:08 +0100 Subject: [PATCH 15/31] Automatic changelog for PR #2768 [ci skip] --- html/changelogs/AutoChangeLog-pr-2768.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2768.yml diff --git a/html/changelogs/AutoChangeLog-pr-2768.yml b/html/changelogs/AutoChangeLog-pr-2768.yml new file mode 100644 index 0000000000000..59592daf52db5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2768.yml @@ -0,0 +1,4 @@ +author: "Screampuff" +delete-after: True +changes: + - rscadd: "Added Edgerunner hairstyle for us punks" \ No newline at end of file From 36b86a15f4c145bed1a192a20bac0d82c3071341 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Tue, 24 Dec 2024 17:13:39 -0500 Subject: [PATCH 16/31] Add no checks helper to kilo telecomms air alarm (#2767) ## About The Pull Request Add a `tlv_no_checks` helper to the air alarm in Kilo's telecomms server room because it just screams the whole round that its cold and theres low oxygen, like how it's supposed to be ## Why It's Good For The Game It's supposed to be like this ## Proof Of Testing Compiled ## Changelog :cl: map: fixed kilostation's telecomms air alarm constantly being angry. /:cl: Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com> --- _maps/map_files/KiloStation/KiloStation.dmm | 1 + 1 file changed, 1 insertion(+) diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index b7c004983e84a..a56363dd03bfa 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -4259,6 +4259,7 @@ dir = 1 }, /obj/machinery/airalarm/directional/west, +/obj/effect/mapping_helpers/airalarm/tlv_no_checks, /turf/open/floor/engine/telecomms, /area/station/tcommsat/server) "bxE" = ( From d38995a0358a70b336d2ce1db2e29687ee4a7c5f Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:14:44 +0100 Subject: [PATCH 17/31] Automatic changelog for PR #2767 [ci skip] --- html/changelogs/AutoChangeLog-pr-2767.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2767.yml diff --git a/html/changelogs/AutoChangeLog-pr-2767.yml b/html/changelogs/AutoChangeLog-pr-2767.yml new file mode 100644 index 0000000000000..0c5d790baa89b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2767.yml @@ -0,0 +1,4 @@ +author: "TealSeer" +delete-after: True +changes: + - map: "fixed kilostation's telecomms air alarm constantly being angry." \ No newline at end of file From e3f8f66282b7df3b06c16fad96fd2ca47c1dc68d Mon Sep 17 00:00:00 2001 From: Yayyay007 <145062394+rintherat@users.noreply.github.com> Date: Tue, 24 Dec 2024 17:58:09 -0500 Subject: [PATCH 18/31] Additional rat-sized plushie because the Head of Security once plush-shamed me in the prison shower-room (#2764) ## About The Pull Request joke title thanks waterpig! ## Why It's Good For The Game It squeaks. ## Proof Of Testing Works. Also makes for great stress-relief by throwing it into the SM. ## Changelog --- .../code/game/objects/items/plushes.dm | 9 +++++++++ .../code/modules/loadout/categories/toys.dm | 4 ++++ modular_zubbers/icons/obj/toys/plushes.dmi | Bin 51362 -> 46365 bytes 3 files changed, 13 insertions(+) diff --git a/modular_zubbers/code/game/objects/items/plushes.dm b/modular_zubbers/code/game/objects/items/plushes.dm index ba82606711d4e..e7ce5c9fd5d3b 100644 --- a/modular_zubbers/code/game/objects/items/plushes.dm +++ b/modular_zubbers/code/game/objects/items/plushes.dm @@ -225,3 +225,12 @@ icon_state = "FoxyPlush" gender = MALE squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/claponce1.ogg' = 1) + +// Rin/Yayyay007's plush +/obj/item/toy/plush/squeaky_toy + name = "squeaky rat plushie" + desc = "A plush made to order of a particular rodent. Smells like an awful lover. \ A small sticker says, TUG MY EARS!" + icon = 'modular_zubbers/icons/obj/toys/plushes.dmi' + icon_state = "squeaky_toy" + gender = MALE + squeak_override = list('sound/mobs/non-humanoids/mouse/mousesqueek.ogg' = 1) diff --git a/modular_zubbers/code/modules/loadout/categories/toys.dm b/modular_zubbers/code/modules/loadout/categories/toys.dm index 80c0c1302d44a..8b763f5ecc30e 100644 --- a/modular_zubbers/code/modules/loadout/categories/toys.dm +++ b/modular_zubbers/code/modules/loadout/categories/toys.dm @@ -78,3 +78,7 @@ /datum/loadout_item/toys/bottomsynf name = "CentCom Synth Fox Plush" item_path = /obj/item/toy/plush/bottomsynf + +/datum/loadout_item/toys/squeaky_toy + name = "Squeaky Rat Plushie" + item_path = /obj/item/toy/plush/squeaky_toy diff --git a/modular_zubbers/icons/obj/toys/plushes.dmi b/modular_zubbers/icons/obj/toys/plushes.dmi index 8ebb3c88dc03c19374b4139dcc1661a2de8d24d3..f79be66414efc1030678054c43f3db063b904037 100644 GIT binary patch literal 46365 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 tIUa2=HP36Y62K4%aZutUavE+hogecPlgt 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 U%T7XU+5i9m07*qoM6N<$g7h_aUH||9 literal 51362 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 KC2GZtg8v7|nIsJW From 7cfcbe315999c9aca175fda0a7c0189a043e3369 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Tue, 24 Dec 2024 23:27:21 +0000 Subject: [PATCH 19/31] Bubberstation automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2760.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2762.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2767.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2768.yml | 4 ---- html/changelogs/archive/2024-12.yml | 8 ++++++++ 5 files changed, 8 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2760.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2762.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2767.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2768.yml diff --git a/html/changelogs/AutoChangeLog-pr-2760.yml b/html/changelogs/AutoChangeLog-pr-2760.yml deleted file mode 100644 index 302fc6f3f68b5..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2760.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - map: "Multisec vendors are consistently placed in various departmental guard offices" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2762.yml b/html/changelogs/AutoChangeLog-pr-2762.yml deleted file mode 100644 index d296fb7964acc..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2762.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TealSeer" -delete-after: True -changes: - - refactor: "ripped out all the skyrat jukebox code in favor of tg's." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2767.yml b/html/changelogs/AutoChangeLog-pr-2767.yml deleted file mode 100644 index 0c5d790baa89b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2767.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TealSeer" -delete-after: True -changes: - - map: "fixed kilostation's telecomms air alarm constantly being angry." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2768.yml b/html/changelogs/AutoChangeLog-pr-2768.yml deleted file mode 100644 index 59592daf52db5..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2768.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Screampuff" -delete-after: True -changes: - - rscadd: "Added Edgerunner hairstyle for us punks" \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index 15c8abdbf07da..4a9439b15efe8 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -395,3 +395,11 @@ - config: You can set a default storyteller to bypass voting. aKromatopzia: - rscadd: Anesthetic and nitrogen tanks appear in relevant departmental lathes +2024-12-24: + LT3: + - map: Multisec vendors are consistently placed in various departmental guard offices + Screampuff: + - rscadd: Added Edgerunner hairstyle for us punks + TealSeer: + - refactor: ripped out all the skyrat jukebox code in favor of tg's. + - map: fixed kilostation's telecomms air alarm constantly being angry. From 7f5af2ebcb89fa5b9ad3956ab87e3f4541f0060c Mon Sep 17 00:00:00 2001 From: Lex <41524861+Phoenix4O4@users.noreply.github.com> Date: Wed, 25 Dec 2024 21:16:43 +0300 Subject: [PATCH 20/31] Update GitHub Labeling Actions with New Automatic Labels (#2763) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request This PR updates the GitHub Actions labeler configuration to include new automatic labels for Pull Requests based on file changes. The new labels aim to make it easier to categorize and manage PRs efficiently. Here are the key additions: Code: Automatically applies to any changes involving .dm files. Administration: Covers changes to admin-related files or specific logging files (logging.dm and _logging.dm). Requires Config Change: Detects modifications in the config/ subfolder. Image: Applies to file changes for common image formats (.png, .jpg, .svg, etc.). Expanded support for mapping-related files, sound files, and other types. ## Why It's Good For The Game ## Proof Of Testing Colors for labels can be customized by repository owners ![image](https://github.com/user-attachments/assets/bd7f96df-64e6-4d1a-b0aa-ea0279876c35) ## Changelog N/A — This is related to GitHub Actions configuration. --- .github/labeler.yml | 85 +++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 2 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 32b18d5e208c6..351f24ee0271d 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,9 +1,90 @@ # Changes to anything in the _map subfolder Map Edit: - changed-files: - - any-glob-to-any-file: '_maps/**' + - any-glob-to-any-file: '_maps/**' # Changes to a .dmi Sprites: - changed-files: - - any-glob-to-any-file: '**/*.dmi' + - any-glob-to-any-file: '**/*.dmi' + +# Changes to .dm files +Code: +- changed-files: + - any-glob-to-any-file: '**/*.dm' + +# Changes to admin files or specific logging files +Administration: +- changed-files: + - any-glob-to-any-file: '**/admin/**' + - any-glob-to-any-file: '**/logging.dm' + - any-glob-to-any-file: '**/_logging.dm' + +# Changes to datums ruins or shuttles files regardless of root +Mapping: +- changed-files: + - any-glob-to-any-file: '**/datums/ruins/**' + - any-glob-to-any-file: '**/datums/shuttles/**' + - any-glob-to-any-file: '**/datums/shuttles.dm' + +# Any file within the config subfolder +Requires Config Change: +- changed-files: + - any-glob-to-any-file: 'config/**' + +# Changes to dependency files +Dependencies: +- changed-files: + - any-glob-to-any-file: '**/package.json' + - any-glob-to-any-file: '**/package-lock.json' + - any-glob-to-any-file: '**/yarn.lock' + +# When the .DME is changed +DME Edit: +- changed-files: + - any-glob-to-any-file: './*.dme' + - any-glob-to-any-file: '**/*.dme' + +# Changes to JavaScript files +Javascript: +- changed-files: + - any-glob-to-any-file: '**/*.js' + +# Changes to a .ogg or anything in the sound folder +Sound: +- changed-files: + - any-glob-to-any-file: '**/*.ogg' + - any-glob-to-any-file: '**/*.wav' + - any-glob-to-any-file: 'sound/**' + +# Changes to SQL +SQL: +- changed-files: + - any-glob-to-any-file: 'SQL/**' + +# Encompasses both the tgui and the tgui-next folder +TGUI: +- changed-files: + - any-glob-to-any-file: 'tgui/**' + - any-glob-to-any-file: 'tgui-next/**' + +# Changes to the .Github folder +Github: +- changed-files: + - any-glob-to-any-file: '.github/**' + +# Changes to the tools folder +Tools: +- changed-files: + - any-glob-to-any-file: 'tools/**' + +# Changes to image files +Image: +- changed-files: + - any-glob-to-any-file: '**/*.png' + - any-glob-to-any-file: '**/*.jpg' + - any-glob-to-any-file: '**/*.jpeg' + - any-glob-to-any-file: '**/*.gif' + - any-glob-to-any-file: '**/*.bmp' + - any-glob-to-any-file: '**/*.webp' + - any-glob-to-any-file: '**/*.svg' From 64e8733897384fe9835f0c637f48741d50b71f4f Mon Sep 17 00:00:00 2001 From: Yayyay007 <145062394+rintherat@users.noreply.github.com> Date: Wed, 25 Dec 2024 13:17:36 -0500 Subject: [PATCH 21/31] Fixes people changing the alert level from Delta or above (#2766) ## About The Pull Request Title. Fixes #2706 ## Why It's Good For The Game ## Proof Of Testing ![image](https://i.gyazo.com/158b7b103704f872bd8574bccb74800f.png) ![image](https://i.gyazo.com/c2f21465fe4d41adab6e35a5fc18fa6e.png) ## Changelog :cl: fix: Fixes comm consoles being able to change alert level during Delta+ /:cl: --- code/game/machinery/computer/communications.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 2e50520f61be2..548f2838ec5fe 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -219,6 +219,9 @@ GLOBAL_VAR_INIT(cops_arrived, FALSE) var/new_sec_level = SSsecurity_level.text_level_to_number(params["newSecurityLevel"]) if (new_sec_level < SEC_LEVEL_GREEN || new_sec_level > SEC_LEVEL_AMBER) //SKYRAT EDIT CHANGE - ALERTS return + if (SSsecurity_level.get_current_level_as_number() >= SEC_LEVEL_DELTA) + to_chat(user, span_warning("Central Command has placed a lock on the alert level due to a doomsday!")) + return if (SSsecurity_level.get_current_level_as_number() == new_sec_level) return From 70b152d07fb5a43ad89a0d91e2d6d48661b68144 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:18:05 +0100 Subject: [PATCH 22/31] Automatic changelog for PR #2766 [ci skip] --- html/changelogs/AutoChangeLog-pr-2766.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2766.yml diff --git a/html/changelogs/AutoChangeLog-pr-2766.yml b/html/changelogs/AutoChangeLog-pr-2766.yml new file mode 100644 index 0000000000000..ee32abc7bde2d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2766.yml @@ -0,0 +1,4 @@ +author: "rintherat" +delete-after: True +changes: + - bugfix: "Fixes comm consoles being able to change alert level during Delta+" \ No newline at end of file From f2b84695203d97bc7562c6910fa6048eab75bb6a Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Wed, 25 Dec 2024 13:28:43 -0500 Subject: [PATCH 23/31] Make gas miner beacons clean up after themselves (#2780) ## About The Pull Request Change gas miner beacons to be the kind that delete the delivery pod once they've landed ## Why It's Good For The Game At ten thousand credits a piece you'd think NT would spring for the bluespace ones (the pod staying in the chamber is so ugly and I hate it) ## Proof Of Testing
Screenshots/Videos ![image](https://github.com/user-attachments/assets/3e41bb72-34b0-4aa4-9978-61908d3877ab)
## Changelog :cl: qol: gas miner delivery pods now delete themselves after landing. /:cl: --- modular_skyrat/modules/modular_items/code/summon_beacon.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/modular_skyrat/modules/modular_items/code/summon_beacon.dm b/modular_skyrat/modules/modular_items/code/summon_beacon.dm index 340053e92f4a3..60ea7173380bc 100644 --- a/modular_skyrat/modules/modular_items/code/summon_beacon.dm +++ b/modular_skyrat/modules/modular_items/code/summon_beacon.dm @@ -150,4 +150,3 @@ ) area_string = "atmospherics" - supply_pod_stay = TRUE From 4356847281354599a4075b6a1632fe28fae458f8 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:29:07 +0100 Subject: [PATCH 24/31] Automatic changelog for PR #2780 [ci skip] --- html/changelogs/AutoChangeLog-pr-2780.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2780.yml diff --git a/html/changelogs/AutoChangeLog-pr-2780.yml b/html/changelogs/AutoChangeLog-pr-2780.yml new file mode 100644 index 0000000000000..0628b5ef6f7e6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2780.yml @@ -0,0 +1,4 @@ +author: "TealSeer" +delete-after: True +changes: + - qol: "gas miner delivery pods now delete themselves after landing." \ No newline at end of file From 489155452d87b72249f7955947866c97956470e4 Mon Sep 17 00:00:00 2001 From: gavla <96078776+shayoki@users.noreply.github.com> Date: Wed, 25 Dec 2024 12:35:10 -0600 Subject: [PATCH 25/31] Biodome Blueshield Quarters fixes. (#2775) ## About The Pull Request This PR fixes a few issues with the Blueshield Quarters on Biodome and adds a few more essentials for the room. This fixes the access for the Blueshield Quarters airlock along with missing cable for the APC. This also expands the room for the addition of a two computers. This also adds: A wall camera, holopad, request console, intercom, windows and curtains, fire door, and a newscaster. ## Why It's Good For The Game It's usually good for an airlock for a restricted command area to not be accessible to assistants. ## Proof Of Testing StrongDMM: ![image](https://github.com/user-attachments/assets/b52355af-7d43-434d-929c-f0331b362601) In a local: ![image](https://github.com/user-attachments/assets/b99bc97b-f58e-47c5-bbd8-a6991314c1f0) ## Changelog :cl: map: The Blueshield Quarters on Biodome is no longer free to access by anyone. It has also been expanded. /:cl: --- _maps/map_files/biodome/biodome.dmm | 150 ++++++++++++++++++---------- 1 file changed, 99 insertions(+), 51 deletions(-) diff --git a/_maps/map_files/biodome/biodome.dmm b/_maps/map_files/biodome/biodome.dmm index da9be5ca4addd..4df492c1a7c2e 100644 --- a/_maps/map_files/biodome/biodome.dmm +++ b/_maps/map_files/biodome/biodome.dmm @@ -2908,6 +2908,15 @@ /obj/effect/spawner/random/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"aWJ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/railing/wooden_fencing{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/biodome/aft) "aWO" = ( /turf/open/floor/iron/grimy, /area/station/service/chapel/office) @@ -10612,15 +10621,14 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/hfr_room) "dGy" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /obj/effect/turf_decal/siding/wood{ - dir = 8 + dir = 6 }, -/obj/machinery/light_switch/directional/south, +/obj/structure/cable, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/blueshield) "dGD" = ( @@ -11926,11 +11934,11 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "edp" = ( -/obj/effect/landmark/start/blueshield, -/obj/structure/chair/comfy/teal{ - dir = 4 - }, -/turf/open/floor/carpet/executive, +/obj/effect/turf_decal/siding/wood/corner, +/obj/structure/closet/secure_closet/blueshield, +/obj/item/storage/medkit/tactical/blueshield, +/obj/structure/window/reinforced/spawner/directional/east, +/turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/blueshield) "edq" = ( /obj/effect/landmark/start/paramedic, @@ -17165,6 +17173,17 @@ }, /turf/open/floor/stone, /area/station/biodome/fore) +"fSp" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/curtain/cloth/fancy/mechanical/start_closed{ + icon_state = "bounty-closed"; + icon_type = "bounty"; + id = "bscurtain2"; + name = "curtain" + }, +/turf/open/floor/plating, +/area/station/command/heads_quarters/blueshield) "fSu" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/structure/cable, @@ -19422,8 +19441,10 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/project) "gGd" = ( -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/siding/wood, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/blueshield) "gGf" = ( @@ -23182,7 +23203,7 @@ /obj/structure/closet/secure_closet/tac{ req_access = list("captain") }, -/obj/structure/window/reinforced/spawner/directional/south, +/obj/structure/window/reinforced/spawner/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/blueshield) "ibC" = ( @@ -27600,10 +27621,12 @@ /turf/open/floor/iron, /area/station/cargo/storage) "jGx" = ( -/obj/structure/closet/secure_closet/blueshield, -/obj/item/storage/medkit/tactical/blueshield, -/obj/structure/window/reinforced/spawner/directional/south, -/turf/open/floor/iron/dark/smooth_large, +/obj/machinery/modular_computer/preset/command, +/obj/item/radio/intercom/directional/east, +/obj/machinery/requests_console/auto_name/directional/north, +/obj/effect/mapping_helpers/requests_console/announcement, +/obj/effect/mapping_helpers/requests_console/information, +/turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/blueshield) "jGz" = ( /obj/structure/table/wood, @@ -38979,15 +39002,11 @@ /area/station/service/library) "nsf" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/structure/table/wood/fancy/cyan, -/obj/machinery/recharger{ - pixel_x = 5; - pixel_y = 2 - }, -/obj/item/storage/fancy/donut_box{ - pixel_y = 16 +/obj/effect/turf_decal/siding/wood{ + dir = 10 }, -/turf/open/floor/carpet/executive, +/obj/machinery/holopad, +/turf/open/floor/wood/parquet, /area/station/command/heads_quarters/blueshield) "nsg" = ( /obj/structure/sign/poster/random/directional/south, @@ -49248,12 +49267,14 @@ /turf/open/floor/iron/white, /area/station/service/kitchen) "qSY" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ - dir = 4 +/obj/machinery/suit_storage_unit/security, +/obj/machinery/door/window/brigdoor/right/directional/east{ + req_access = list("captain"); + name = "Blueshield's Armory" }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood/parquet, +/obj/machinery/light/directional/west, +/obj/machinery/newscaster/directional/west, +/turf/open/floor/iron/dark/smooth_large, /area/station/command/heads_quarters/blueshield) "qTg" = ( /obj/structure/chair{ @@ -49479,6 +49500,19 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/station/maintenance/starboard/lesser) +"qVO" = ( +/obj/structure/table/wood/fancy/cyan, +/obj/item/storage/fancy/donut_box{ + pixel_y = 16 + }, +/obj/machinery/recharger{ + pixel_x = 5; + pixel_y = 2 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable, +/turf/open/floor/carpet/executive, +/area/station/command/heads_quarters/blueshield) "qVP" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -51641,10 +51675,11 @@ /turf/open/floor/iron, /area/station/engineering/gravity_generator) "rGd" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 +/obj/machinery/light_switch/directional/east, +/obj/effect/turf_decal/siding/wood{ + dir = 5 }, -/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/landmark/start/blueshield, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/blueshield) "rGg" = ( @@ -55959,12 +55994,17 @@ /turf/open/floor/wood/large, /area/station/service/theater) "tgT" = ( -/obj/structure/chair/comfy/brown{ +/obj/effect/landmark/start/blueshield, +/obj/structure/chair/comfy/teal{ dir = 4 }, -/obj/effect/landmark/start/blueshield, +/obj/machinery/button/curtain{ + id = "bscurtain2"; + pixel_x = -28; + pixel_y = -3 + }, /turf/open/floor/carpet/executive, -/area/station/command/heads_quarters/captain) +/area/station/command/heads_quarters/blueshield) "tgU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /turf/open/floor/engine, @@ -56027,6 +56067,15 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood/large, /area/station/hallway/primary/aft) +"tix" = ( +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/effect/turf_decal/siding/dark_blue{ + dir = 8 + }, +/turf/open/floor/wood/large, +/area/station/biodome/aft) "tiC" = ( /obj/structure/showcase/machinery/cloning_pod{ desc = "An old decommissioned scanner, permanently scuttled."; @@ -63167,13 +63216,10 @@ /turf/open/floor/plating, /area/station/construction) "vMh" = ( -/obj/machinery/suit_storage_unit/security, -/obj/machinery/light/directional/north, -/obj/machinery/door/window/brigdoor/right/directional/south{ - req_access = list("captain"); - name = "Blueshield's Armory" - }, -/turf/open/floor/iron/dark/smooth_large, +/obj/machinery/computer/crew, +/obj/machinery/camera/autoname/directional/north, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/iron/dark/textured, /area/station/command/heads_quarters/blueshield) "vMr" = ( /obj/structure/cable, @@ -66831,6 +66877,8 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/landmark/navigate_destination/autoname, +/obj/effect/mapping_helpers/airlock/access/any/cent_com/rep_or_captain, +/obj/machinery/door/firedoor, /turf/open/floor/wood/parquet, /area/station/command/heads_quarters/blueshield) "wUh" = ( @@ -109983,9 +110031,9 @@ fBY odZ oxI oHx -tgT +oHx vEK -bmc +upY bmc bmc gHP @@ -110243,7 +110291,7 @@ vYg xlG mba bmc -upY +bmc pKz gHP bMe @@ -111021,8 +111069,8 @@ fNG vMh gGd nsf -pFO -pnf +tgT +fSp svn pnf pnf @@ -111278,8 +111326,8 @@ pFO jGx rGd dGy -pFO -pnf +qVO +fSp pnf pnf pnf @@ -111536,7 +111584,7 @@ pFO pFO wUg pFO -pnf +pFO pnf pnf aZR @@ -111788,10 +111836,10 @@ izf wFQ fOu fOu +aWJ kqS kqS -kqS -mZn +tix mZn rsY rsY From 62fd037e4151b2792b55649deb1b3fdee8378d9a Mon Sep 17 00:00:00 2001 From: LT3 <83487515+lessthnthree@users.noreply.github.com> Date: Wed, 25 Dec 2024 10:35:22 -0800 Subject: [PATCH 26/31] Remove sec vendors from Moonstation hallway (#2774) ## About The Pull Request Removes a pair of sec vendors that escaped into Moonstation's primary hallway. ## Why It's Good For The Game As funny as it is, the crew should not have readily available access to security gear. ## Changelog :cl: LT3 map: Moonstation's escaped security vendors have been returned to where they belong /:cl: --- _maps/map_files/moonstation/moonstation.dmm | 2 -- 1 file changed, 2 deletions(-) diff --git a/_maps/map_files/moonstation/moonstation.dmm b/_maps/map_files/moonstation/moonstation.dmm index a8cb7f9ffcd80..b50443a176dd2 100644 --- a/_maps/map_files/moonstation/moonstation.dmm +++ b/_maps/map_files/moonstation/moonstation.dmm @@ -8865,7 +8865,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/iron/checker, /area/station/hallway/primary/central/aft) "czq" = ( @@ -10936,7 +10935,6 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/machinery/vending/wardrobe/sec_wardrobe, /turf/open/floor/wood, /area/station/service/cafeteria) "ddH" = ( From 3db85b27ece7f3f6136dfeac235639854962d1ec Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:35:34 +0100 Subject: [PATCH 27/31] Automatic changelog for PR #2775 [ci skip] --- html/changelogs/AutoChangeLog-pr-2775.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2775.yml diff --git a/html/changelogs/AutoChangeLog-pr-2775.yml b/html/changelogs/AutoChangeLog-pr-2775.yml new file mode 100644 index 0000000000000..15e001ce5c0be --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2775.yml @@ -0,0 +1,4 @@ +author: "shayoki" +delete-after: True +changes: + - map: "The Blueshield Quarters on Biodome is no longer free to access by anyone. It has also been expanded." \ No newline at end of file From 9a77e919b4b3750db3751d81a493081449aea9d0 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:35:47 +0100 Subject: [PATCH 28/31] Automatic changelog for PR #2774 [ci skip] --- html/changelogs/AutoChangeLog-pr-2774.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2774.yml diff --git a/html/changelogs/AutoChangeLog-pr-2774.yml b/html/changelogs/AutoChangeLog-pr-2774.yml new file mode 100644 index 0000000000000..d34470bab286c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2774.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - map: "Moonstation's escaped security vendors have been returned to where they belong" \ No newline at end of file From bb840efbfcf155285c16520bb01e0d625fe79f8b Mon Sep 17 00:00:00 2001 From: Yayyay007 <145062394+rintherat@users.noreply.github.com> Date: Wed, 25 Dec 2024 13:35:55 -0500 Subject: [PATCH 29/31] Syndicate Support Plushie (#2757) ## About The Pull Request Help, I'm in maintenance and Security is bullying me, I need a plush-sized friend before they bludgeon me to death. ## Why It's Good For The Game Plush. ## Proof Of Testing Compiles and worked on a private server. ## Changelog :cl: add: Adds a new plushie to the badass section in uplink. /:cl: --- modular_zubbers/code/modules/uplink/uplink_items/badass.dm | 5 +++++ tgstation.dme | 1 + 2 files changed, 6 insertions(+) create mode 100644 modular_zubbers/code/modules/uplink/uplink_items/badass.dm diff --git a/modular_zubbers/code/modules/uplink/uplink_items/badass.dm b/modular_zubbers/code/modules/uplink/uplink_items/badass.dm new file mode 100644 index 0000000000000..e8707c1ba014f --- /dev/null +++ b/modular_zubbers/code/modules/uplink/uplink_items/badass.dm @@ -0,0 +1,5 @@ +/datum/uplink_item/badass/plushie + name = "Syndicate Support Plushie" + desc = "For agents in the field requiring urgent emotional support." + item = /obj/item/toy/plush/nukeplushie + cost = 1 diff --git a/tgstation.dme b/tgstation.dme index 0788817e58163..9ad5e6df245bb 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9343,6 +9343,7 @@ #include "modular_zubbers\code\modules\tarkon\code\misc-fluff\research.dm" #include "modular_zubbers\code\modules\taur_mechanics\serpentine_taur.dm" #include "modular_zubbers\code\modules\title_screen\code\title_screen_subsystem.dm" +#include "modular_zubbers\code\modules\uplink\uplink_items\badass.dm" #include "modular_zubbers\code\modules\vehicles\mech_fabricator.dm" #include "modular_zubbers\code\modules\vending\armadyne.dm" #include "modular_zubbers\code\modules\vending\clothmate.dm" From 3edb247eceb931145e4d54fad871e101c701e7e8 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 19:36:23 +0100 Subject: [PATCH 30/31] Automatic changelog for PR #2757 [ci skip] --- html/changelogs/AutoChangeLog-pr-2757.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-2757.yml diff --git a/html/changelogs/AutoChangeLog-pr-2757.yml b/html/changelogs/AutoChangeLog-pr-2757.yml new file mode 100644 index 0000000000000..c1e46ca2691c2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2757.yml @@ -0,0 +1,4 @@ +author: "rintherat" +delete-after: True +changes: + - rscadd: "Adds a new plushie to the badass section in uplink." \ No newline at end of file From 5ff87c963df5d0dfb9bf8d3cb99033520827bf90 Mon Sep 17 00:00:00 2001 From: Bubberbot <151680451+Bubberbot@users.noreply.github.com> Date: Wed, 25 Dec 2024 23:27:33 +0000 Subject: [PATCH 31/31] Bubberstation automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-2757.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2766.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2774.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2775.yml | 4 ---- html/changelogs/AutoChangeLog-pr-2780.yml | 4 ---- html/changelogs/archive/2024-12.yml | 11 +++++++++++ 6 files changed, 11 insertions(+), 20 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-2757.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2766.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2774.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2775.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-2780.yml diff --git a/html/changelogs/AutoChangeLog-pr-2757.yml b/html/changelogs/AutoChangeLog-pr-2757.yml deleted file mode 100644 index c1e46ca2691c2..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2757.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "rintherat" -delete-after: True -changes: - - rscadd: "Adds a new plushie to the badass section in uplink." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2766.yml b/html/changelogs/AutoChangeLog-pr-2766.yml deleted file mode 100644 index ee32abc7bde2d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2766.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "rintherat" -delete-after: True -changes: - - bugfix: "Fixes comm consoles being able to change alert level during Delta+" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2774.yml b/html/changelogs/AutoChangeLog-pr-2774.yml deleted file mode 100644 index d34470bab286c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2774.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - map: "Moonstation's escaped security vendors have been returned to where they belong" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2775.yml b/html/changelogs/AutoChangeLog-pr-2775.yml deleted file mode 100644 index 15e001ce5c0be..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2775.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "shayoki" -delete-after: True -changes: - - map: "The Blueshield Quarters on Biodome is no longer free to access by anyone. It has also been expanded." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2780.yml b/html/changelogs/AutoChangeLog-pr-2780.yml deleted file mode 100644 index 0628b5ef6f7e6..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-2780.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TealSeer" -delete-after: True -changes: - - qol: "gas miner delivery pods now delete themselves after landing." \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index 4a9439b15efe8..541d2eb995a0e 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -403,3 +403,14 @@ TealSeer: - refactor: ripped out all the skyrat jukebox code in favor of tg's. - map: fixed kilostation's telecomms air alarm constantly being angry. +2024-12-25: + LT3: + - map: Moonstation's escaped security vendors have been returned to where they belong + TealSeer: + - qol: gas miner delivery pods now delete themselves after landing. + rintherat: + - bugfix: Fixes comm consoles being able to change alert level during Delta+ + - rscadd: Adds a new plushie to the badass section in uplink. + shayoki: + - map: The Blueshield Quarters on Biodome is no longer free to access by anyone. + It has also been expanded.