From e6e5cb93203dd9ee00856fb4bf307ad653742085 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Fri, 26 Jul 2024 21:32:47 +0200 Subject: [PATCH 01/53] Fish ordered from bought fish cases now sells for 1/20th of the normal price (#85287) ## About The Pull Request Fish money printer goes brrrr... But yeah, it turns out just buying and sending back fish crates is making cargo lotsa money, which is basically an exploit. Good thing we've the TRAIT_FISH_FROM_CASE trait which we can use to differentiate fishes from cargo from other more natural sources. ## Why It's Good For The Game This will fix #85284. ## Changelog :cl: fix: Centcom technicians have been trained to recognize cargo-bought fish. You will no longer be able to trick the economy system by buying fish and sending it right back. Also nerfed fish selling price very slightly. /:cl: --- code/modules/cargo/exports/fish.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/cargo/exports/fish.dm b/code/modules/cargo/exports/fish.dm index c68eeaaa70063..3860dff904b19 100644 --- a/code/modules/cargo/exports/fish.dm +++ b/code/modules/cargo/exports/fish.dm @@ -1,5 +1,5 @@ /datum/export/fish - cost = 50 + cost = 30 unit_name = "fish" export_types = list(/obj/item/fish) @@ -7,4 +7,7 @@ var/elastic_cost = ..() var/elastic_percent = elastic_cost / init_cost var/size_weight_exponentation = (fish.size * fish.weight * 0.01)^0.85 - return round(elastic_cost + size_weight_exponentation * elastic_percent) + var/new_cost = elastic_cost + size_weight_exponentation * elastic_percent + if(HAS_TRAIT(fish, TRAIT_FISH_FROM_CASE)) //Avoid printing money by simply ordering fish and sending it back. + new_cost *= 0.05 + return round(new_cost) From 2bc7731189a33d39909b6df3a49b4fae5ef8964a Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sat, 27 Jul 2024 07:33:08 +1200 Subject: [PATCH 02/53] Automatic changelog for PR #85287 [ci skip] --- html/changelogs/AutoChangeLog-pr-85287.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85287.yml diff --git a/html/changelogs/AutoChangeLog-pr-85287.yml b/html/changelogs/AutoChangeLog-pr-85287.yml new file mode 100644 index 0000000000000..0eaa4533ef77a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85287.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "Centcom technicians have been trained to recognize cargo-bought fish. You will no longer be able to trick the economy system by buying fish and sending it right back. Also nerfed fish selling price very slightly." \ No newline at end of file From 74611a8717c5aedd5c160a672564437659475902 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 27 Jul 2024 00:37:25 +0000 Subject: [PATCH 03/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-84911.yml | 4 -- html/changelogs/AutoChangeLog-pr-85090.yml | 5 --- html/changelogs/AutoChangeLog-pr-85109.yml | 4 -- html/changelogs/AutoChangeLog-pr-85112.yml | 5 --- html/changelogs/AutoChangeLog-pr-85146.yml | 6 --- html/changelogs/AutoChangeLog-pr-85149.yml | 4 -- html/changelogs/AutoChangeLog-pr-85210.yml | 4 -- html/changelogs/AutoChangeLog-pr-85212.yml | 4 -- html/changelogs/AutoChangeLog-pr-85216.yml | 4 -- html/changelogs/AutoChangeLog-pr-85218.yml | 4 -- html/changelogs/AutoChangeLog-pr-85219.yml | 4 -- html/changelogs/AutoChangeLog-pr-85225.yml | 4 -- html/changelogs/AutoChangeLog-pr-85229.yml | 4 -- html/changelogs/AutoChangeLog-pr-85230.yml | 4 -- html/changelogs/AutoChangeLog-pr-85231.yml | 4 -- html/changelogs/AutoChangeLog-pr-85232.yml | 4 -- html/changelogs/AutoChangeLog-pr-85241.yml | 4 -- html/changelogs/AutoChangeLog-pr-85287.yml | 4 -- html/changelogs/archive/2024-07.yml | 43 ++++++++++++++++++++++ 19 files changed, 43 insertions(+), 76 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-84911.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85090.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85109.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85112.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85146.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85149.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85210.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85212.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85216.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85218.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85219.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85225.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85229.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85230.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85231.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85232.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85241.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85287.yml diff --git a/html/changelogs/AutoChangeLog-pr-84911.yml b/html/changelogs/AutoChangeLog-pr-84911.yml deleted file mode 100644 index 15f42399bc42d..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-84911.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "wawastation ordnance no longer has a light fixture on a window and looks objectively slightly better" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85090.yml b/html/changelogs/AutoChangeLog-pr-85090.yml deleted file mode 100644 index 9e3a467c58459..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85090.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "carlarctg" -delete-after: True -changes: - - bugfix: "Fixed possessed blades being broken" - - code_imp: "If testing is enabled everyone is polled in ghost polls." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85109.yml b/html/changelogs/AutoChangeLog-pr-85109.yml deleted file mode 100644 index e20f9ac086df9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85109.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Jacquerel" -delete-after: True -changes: - - balance: "If a bluespace cookie fails to teleport you then you will trip over." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85112.yml b/html/changelogs/AutoChangeLog-pr-85112.yml deleted file mode 100644 index ac57dc49f8267..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85112.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - qol: "All randomly spawned monkeys (and lizardpeople) will spawn with tails. You can still select to be tailless." - - code_imp: "Cleaned up some code relating to species features (like tails, markings, etc). Report any oddities" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85146.yml b/html/changelogs/AutoChangeLog-pr-85146.yml deleted file mode 100644 index 4d524bbe89c10..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85146.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - rscdel: "Removed a janky fish bounty" - - rscadd: "introduced exporting fish through cargo." - - balance: "reduced the average weight of the jumpercable. Conversely, eased up the requirements for the bone fish evolution." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85149.yml b/html/changelogs/AutoChangeLog-pr-85149.yml deleted file mode 100644 index dc90b18f21f72..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85149.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ical92" -delete-after: True -changes: - - bugfix: "Tram's Tool Storage now has proper lighting" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85210.yml b/html/changelogs/AutoChangeLog-pr-85210.yml deleted file mode 100644 index 4b43465ca8faa..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85210.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Fixed delam counter stuck in window near Ice Box bridge" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85212.yml b/html/changelogs/AutoChangeLog-pr-85212.yml deleted file mode 100644 index 8d41701d3a528..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85212.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "afonamos2" -delete-after: True -changes: - - bugfix: "Firelocks will once again respect fire alarm's thermal sensors being disabled." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85216.yml b/html/changelogs/AutoChangeLog-pr-85216.yml deleted file mode 100644 index a61c550b0ad8c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85216.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Fixes projectiles facing north if ricocheting, deflected or homing" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85218.yml b/html/changelogs/AutoChangeLog-pr-85218.yml deleted file mode 100644 index 24c53559ee302..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85218.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MTandi" -delete-after: True -changes: - - bugfix: "Janicart inserts items into the attached trash bag again (manual and vacuumed)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85219.yml b/html/changelogs/AutoChangeLog-pr-85219.yml deleted file mode 100644 index 8d9798199dd75..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85219.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - bugfix: "wawastation engineering water tanks are now highcap" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85225.yml b/html/changelogs/AutoChangeLog-pr-85225.yml deleted file mode 100644 index 1404f3a3d6928..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85225.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - image: "Updated gas flow meter sprites" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85229.yml b/html/changelogs/AutoChangeLog-pr-85229.yml deleted file mode 100644 index 61a3ea84506bd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85229.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Tram will no longer eat its own rails as it travels" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85230.yml b/html/changelogs/AutoChangeLog-pr-85230.yml deleted file mode 100644 index 158caf8e0417c..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85230.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "False supermatter surge announcements are now identical to real ones" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85231.yml b/html/changelogs/AutoChangeLog-pr-85231.yml deleted file mode 100644 index 62f9c64c5066b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85231.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Fixed disease outbreak announcement sometimes missing the disease name" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85232.yml b/html/changelogs/AutoChangeLog-pr-85232.yml deleted file mode 100644 index baace7da19785..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85232.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Fixes borgs not being able to place apparatus-held items on tables. As a side-effect, they can now combat mode right click splash containers as normal instead of having their own right-click floor splash." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85241.yml b/html/changelogs/AutoChangeLog-pr-85241.yml deleted file mode 100644 index 09bf7dc1d9727..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85241.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Thlumyn" -delete-after: True -changes: - - bugfix: "self-resp viruses don't spam messages as often" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85287.yml b/html/changelogs/AutoChangeLog-pr-85287.yml deleted file mode 100644 index 0eaa4533ef77a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85287.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - bugfix: "Centcom technicians have been trained to recognize cargo-bought fish. You will no longer be able to trick the economy system by buying fish and sending it right back. Also nerfed fish selling price very slightly." \ No newline at end of file diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml index 5e63f121a0d6c..6fb93f944a96c 100644 --- a/html/changelogs/archive/2024-07.yml +++ b/html/changelogs/archive/2024-07.yml @@ -1324,3 +1324,46 @@ - rscadd: Two new arrow variants appear in the crafting menu; sticky and poisonous ones! If you want to make arrows at all though, remember to order bow-maker's crate at cargo. +2024-07-27: + 00-Steven: + - bugfix: Fixes borgs not being able to place apparatus-held items on tables. As + a side-effect, they can now combat mode right click splash containers as normal + instead of having their own right-click floor splash. + Ghommie: + - bugfix: Centcom technicians have been trained to recognize cargo-bought fish. + You will no longer be able to trick the economy system by buying fish and sending + it right back. Also nerfed fish selling price very slightly. + - bugfix: Fixes projectiles facing north if ricocheting, deflected or homing + - rscdel: Removed a janky fish bounty + - rscadd: introduced exporting fish through cargo. + - balance: reduced the average weight of the jumpercable. Conversely, eased up the + requirements for the bone fish evolution. + Ical92: + - bugfix: Tram's Tool Storage now has proper lighting + Jacquerel: + - balance: If a bluespace cookie fails to teleport you then you will trip over. + LT3: + - bugfix: Fixed delam counter stuck in window near Ice Box bridge + - bugfix: Fixed disease outbreak announcement sometimes missing the disease name + - bugfix: False supermatter surge announcements are now identical to real ones + - bugfix: Tram will no longer eat its own rails as it travels + MTandi: + - bugfix: Janicart inserts items into the attached trash bag again (manual and vacuumed) + Melbert: + - qol: All randomly spawned monkeys (and lizardpeople) will spawn with tails. You + can still select to be tailless. + - code_imp: Cleaned up some code relating to species features (like tails, markings, + etc). Report any oddities + SmArtKar: + - image: Updated gas flow meter sprites + Thlumyn: + - bugfix: self-resp viruses don't spam messages as often + afonamos2: + - bugfix: Firelocks will once again respect fire alarm's thermal sensors being disabled. + carlarctg: + - bugfix: Fixed possessed blades being broken + - code_imp: If testing is enabled everyone is polled in ghost polls. + mc-oofert: + - bugfix: wawastation ordnance no longer has a light fixture on a window and looks + objectively slightly better + - bugfix: wawastation engineering water tanks are now highcap From d7a021779312de8b7c437c75ab281a48e7e8d1bc Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sat, 27 Jul 2024 08:29:01 +0200 Subject: [PATCH 04/53] Fix clicking on a table through the lootpanel with an item forcing it to be placed in the very corner (#85208) ## About The Pull Request So apparently, as the title says, placing items on tables through the lootpanel would place them in the very corner. I learnt about this because of someone telling me it _used_ to always center them. Looking into it, this seems to be because we ALWAYS set it based on the `modifiers` `ICON_X` and `ICON_Y`: https://github.com/tgstation/tgstation/blob/0da57e95248924e5aa67b3d329022b7c74146c94/code/game/objects/structures/tables_racks.dm#L319-L321 While those are not set when clicking through the lootpanel, causing these formulas to default to `-16`, and thus placing them in the corner. Comparing this to crayons/spraycans, which do center, and do this because they only adjust the `pixel_x` and `pixel_y` if `ICON_X` and `ICON_Y` are actually set: https://github.com/tgstation/tgstation/blob/0da57e95248924e5aa67b3d329022b7c74146c94/code/game/objects/items/crayons.dm#L500-L502 At some point in the past tables also had this check, but it seems it got accidentally removed during the move to `item_interaction(...)` from `attackby(...)`. We just reintroduce this check, meaning it once again defaults to the item being centered. ## Why It's Good For The Game Having your item be placed on the very leg of the table is kinda awkward. ## Changelog :cl: fix: Clicking on a table in the lootpanel with an item in-hand tries to place it in the center again. /:cl: --- code/game/objects/structures/tables_racks.dm | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 72c974b00252d..895660fafa44c 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -316,9 +316,11 @@ return NONE if(!user.transferItemToLoc(tool, drop_location(), silent = FALSE)) return ITEM_INTERACT_BLOCKING - //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size/2), world.icon_size/2) - tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size/2), world.icon_size/2) + // Items are centered by default, but we move them if click ICON_X and ICON_Y are available + if(LAZYACCESS(modifiers, ICON_X) && LAZYACCESS(modifiers, ICON_Y)) + // Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) + tool.pixel_x = clamp(text2num(LAZYACCESS(modifiers, ICON_X)) - 16, -(world.icon_size*0.5), world.icon_size*0.5) + tool.pixel_y = clamp(text2num(LAZYACCESS(modifiers, ICON_Y)) - 16, -(world.icon_size*0.5), world.icon_size*0.5) AfterPutItemOnTable(tool, user) return ITEM_INTERACT_SUCCESS From 4a3543a013cfc07e2a21da1edf9be31e674f92fe Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sat, 27 Jul 2024 18:29:19 +1200 Subject: [PATCH 05/53] Automatic changelog for PR #85208 [ci skip] --- html/changelogs/AutoChangeLog-pr-85208.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85208.yml diff --git a/html/changelogs/AutoChangeLog-pr-85208.yml b/html/changelogs/AutoChangeLog-pr-85208.yml new file mode 100644 index 0000000000000..e0f79580f2cbb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85208.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - bugfix: "Clicking on a table in the lootpanel with an item in-hand tries to place it in the center again." \ No newline at end of file From ef6759ea80a29edfca19857183455a85cb117aa5 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:16:58 +0300 Subject: [PATCH 06/53] [no gbp] Changes the default sheet drop sound. (#85282) ## About The Pull Request https://github.com/user-attachments/assets/4c2622c2-981b-4163-b1dc-4e8927926fad This has been bugging me for a while, so I have provided an alternative. ## Why It's Good For The Game The previous sound was too annoying, this one sounds much better and actually sounds like metal instead of glass. ## Changelog :cl: grungussuss sound: the default metal sound has been changed /:cl: --- sound/items/attributions.txt | 2 +- sound/items/metal_drop.ogg | Bin 10228 -> 11888 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/sound/items/attributions.txt b/sound/items/attributions.txt index 31b573c105893..1bb437454e23e 100644 --- a/sound/items/attributions.txt +++ b/sound/items/attributions.txt @@ -13,7 +13,7 @@ pen_click.ogg from https://freesound.org/people/LexzachGames/sounds/431492/ , li night_vision_on.ogg by Syna-Max -- https://freesound.org/s/60345/ -- License: Attribution NonCommercial 4.0 { -metal_drop.ogg - https://freesound.org/people/13FPanská_Tolar_David/sounds/378682/ , License: CC0 +metal_drop.ogg - https://freesound.org/people/Robinhood76/sounds/85418/ , License: CC BY-NC 4.0 metal_pick_up.ogg - https://freesound.org/people/Hotlavaman/sounds/108673/ , License: CC0 glass_drop.ogg - https://freesound.org/people/Hotlavaman/sounds/108673/ , License: CC0 glass_pick_up.ogg - https://freesound.org/people/tcrocker68/sounds/235602/ , License: CC0 diff --git a/sound/items/metal_drop.ogg b/sound/items/metal_drop.ogg index 48460e8cd37bfe54e4a2d6f85561005309b120ed..46488dca29fd32a34dd95a4c370c0409facfe535 100644 GIT binary patch delta 7633 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 Jx!|TD^gl>B5QqQ( delta 5960 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 B^tb>3 From 540954af3f47c2e3dcdf7ea42bd9c063533630c3 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:17:18 +0300 Subject: [PATCH 07/53] Gas tank sounds (#85283) ## About The Pull Request https://github.com/user-attachments/assets/9fe06c51-c129-463d-98ef-374320c3edbd ## Why It's Good For The Game We have all these sounds for turning on internals, breathing, but no pick up and drop sound. ## Changelog :cl: grungussuss sound: gas tanks now have sound /:cl: --- code/game/objects/items/tanks/tanks.dm | 3 +++ sound/items/attributions.txt | 8 +++++++- sound/items/gas_tank_drop.ogg | Bin 0 -> 10606 bytes sound/items/gas_tank_pick_up.ogg | Bin 0 -> 10227 bytes 4 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 sound/items/gas_tank_drop.ogg create mode 100644 sound/items/gas_tank_pick_up.ogg diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index ee1f314c92add..d89794f420917 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -22,6 +22,9 @@ slot_flags = ITEM_SLOT_BACK worn_icon = 'icons/mob/clothing/back.dmi' //since these can also get thrown into suit storage slots. if something goes on the belt, set this to null. hitsound = 'sound/weapons/smash.ogg' + pickup_sound = 'sound/items/gas_tank_pick_up.ogg' + drop_sound = 'sound/items/gas_tank_drop.ogg' + sound_vary = TRUE pressure_resistance = ONE_ATMOSPHERE * 5 force = 5 throwforce = 10 diff --git a/sound/items/attributions.txt b/sound/items/attributions.txt index 1bb437454e23e..2ded16f8c6729 100644 --- a/sound/items/attributions.txt +++ b/sound/items/attributions.txt @@ -22,4 +22,10 @@ wood_drop.ogg - https://freesound.org/people/cjosephwalker/sounds/94859/ , Licen irod_rod_pick_up.ogg - https://freesound.org/people/lostphosphene/sounds/258265/ , License: CC BY 4.0 plastic_pick_up.ogg - https://freesound.org/people/Jessica190091/sounds/491304/ , License: CC BY 4.0 plastic_drop.ogg - https://freesound.org/people/martian/sounds/338854/ , License: CC0 -} - edited by sadboysuss \ No newline at end of file +} - edited by sadboysuss + +{ +gas_tank_drop.ogg +gas_tank_pick_up.ogg +} - https://freesound.org/people/Globofonia/sounds/698346/ , License CC0 +edited by grungussuss \ No newline at end of file diff --git a/sound/items/gas_tank_drop.ogg b/sound/items/gas_tank_drop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e102cb4fe8aad02f7f977d4835d4f13c13ebbac1 GIT binary patch literal 10606 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 MyfM&J@R<640GXQ&t^fc4 literal 0 HcmV?d00001 diff --git a/sound/items/gas_tank_pick_up.ogg b/sound/items/gas_tank_pick_up.ogg new file mode 100644 index 0000000000000000000000000000000000000000..41c83645da60948c7f8f9b33a7de96f16e6f3fb2 GIT binary patch literal 10227 zcmeHtcU)6R*YHgUkkCwk#DIVyASDzD1OzObAfY1!2!cajujOzML`{#ev-s45nq6KNoW3Dq%$F4FQII@N40R_ z-%5eZ(o!Ulf)TYl(%dUrBk=Lv6_N03NL=`OO4u$|IF6DS7L^dSYbVaq%AANZ@(ckdChUrjG}ZxW z9Vvd)_29ZzW)`+)7M6aN7WO0?dui9k-ogSRyYxoJ4jcU;034(zdf+6SfqXguAORp) z-&o~ngsX9FQI%10Ns)^bl2~Mx6lF@Vp*h6vzZx7V3=IG>u{ z5R3c3f$!oVrxAv9fJ>L>8rPM?flDoI3kPt(Z34~(>aIfdKB3mlL4B_|Q<|FfpcU2E z&yx<8#GuVd;bTdOV@U@BO40)_90<6O9yp#J^f5gIoAI-LI`HtLv@UKP2LUSe?1~>7 z^YEIyNjsiQT1FET2$PBghbY7w7goF0MX=9Am9dN�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 W;LlgA=ceY}pDgd(Fb5>40{;iyOFhN_ literal 0 HcmV?d00001 From 8616257e3ec1c4f3b6ace6cc438cb886c6d7935f Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Sat, 27 Jul 2024 15:18:40 -0400 Subject: [PATCH 08/53] Monkeymancers can interact with runes (#85289) ## About The Pull Request Hey hey party people. I watched a monkeymancer round last night. It was hilarious, but the guy couldn't activate his ritual rune. Sucks! Turns out, monkies don't call `attack_hand()`, they call `attack_paw()`. This means that monkey dexterity was never the problem stopping the rune from activating, but the fact that the attack chain was never even trying to interact with the rune effect in the first place. I've added a new atom interaction flag that routes through attack_paw, so now monkies can be given their own specific interaction behaviors for cases like this. ![image](https://github.com/user-attachments/assets/db5bab0e-30ab-4e3b-b1a6-ae392b23fcab) ## Why It's Good For The Game Closes #85267. Also makes it a bit easier to make interact behaviors scalable to monkies in the future. ## Changelog :cl: Rhials fix: Monkey wizards can now interact with grand ritual runes. /:cl: --- code/__DEFINES/interaction_flags.dm | 2 ++ code/_onclick/other_mobs.dm | 3 ++- code/modules/antagonists/wizard/grand_ritual/grand_rune.dm | 2 +- code/modules/food_and_drinks/machinery/processor.dm | 4 +++- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/interaction_flags.dm b/code/__DEFINES/interaction_flags.dm index 615fe5c4cbda2..fd66cee5bb93e 100644 --- a/code/__DEFINES/interaction_flags.dm +++ b/code/__DEFINES/interaction_flags.dm @@ -26,6 +26,8 @@ #define INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY (1<<12) /// Bypass all adjacency and other checks for mouse drop #define INTERACT_ATOM_MOUSEDROP_IGNORE_CHECKS (INTERACT_ATOM_MOUSEDROP_IGNORE_ADJACENT | INTERACT_ATOM_MOUSEDROP_IGNORE_USABILITY) +/// calls try_interact() on attack_paw() and returns that. +#define INTERACT_ATOM_ATTACK_PAW (1<<13) /// attempt pickup on attack_hand for items #define INTERACT_ITEM_ATTACK_HAND_PICKUP (1<<0) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 0dd8ee0a582f6..2f1465ac4ffe2 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -200,7 +200,8 @@ /atom/proc/attack_paw(mob/user, list/modifiers) if(SEND_SIGNAL(src, COMSIG_ATOM_ATTACK_PAW, user, modifiers) & COMPONENT_CANCEL_ATTACK_CHAIN) return TRUE - return FALSE + if(interaction_flags_atom & INTERACT_ATOM_ATTACK_PAW) + . = _try_interact(user) /* diff --git a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm index 79364a80a198a..15900a6ac0b0a 100644 --- a/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm +++ b/code/modules/antagonists/wizard/grand_ritual/grand_rune.dm @@ -19,7 +19,7 @@ pixel_y = 16 pixel_z = -48 anchored = TRUE - interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND + interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_ATTACK_PAW resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF layer = SIGIL_LAYER /// How many prior grand rituals have been completed? diff --git a/code/modules/food_and_drinks/machinery/processor.dm b/code/modules/food_and_drinks/machinery/processor.dm index 21d49808beda1..383a7c34e2756 100644 --- a/code/modules/food_and_drinks/machinery/processor.dm +++ b/code/modules/food_and_drinks/machinery/processor.dm @@ -159,7 +159,9 @@ var/duration = (total_time / rating_speed) INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, Shake), 1, 0, duration) - sleep(duration) + addtimer(CALLBACK(src, PROC_REF(complete_processing)), duration) + +/obj/machinery/processor/proc/complete_processing() for(var/atom/movable/content_item in processor_contents) var/datum/food_processor_process/recipe = PROCESSOR_SELECT_RECIPE(content_item) if (!recipe) From 132968168d715af91147ad9a5f745a85e01295e6 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Sat, 27 Jul 2024 15:19:46 -0400 Subject: [PATCH 09/53] [NO GBP] Clown Ops gear is now restricted to clown ops again (#85288) ## About The Pull Request I messed this up in the loneop gear change. Nukie uplinks got `UPLINK_ALL_SYNDIE_OPS` instead of `UPLINK_NUKE_OPS` for some reason. Whoops! ## Why It's Good For The Game Fixes something I messed up. Makes clown ops unique again. ## Changelog :cl: Rhials fix: Clown Ops gear has been returned to being available only to clown ops. Whoops! /:cl: --- code/modules/uplink/uplink_devices.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/uplink/uplink_devices.dm b/code/modules/uplink/uplink_devices.dm index 596ea9e1ffad4..3c31ddf647f88 100644 --- a/code/modules/uplink/uplink_devices.dm +++ b/code/modules/uplink/uplink_devices.dm @@ -48,7 +48,7 @@ hidden_uplink.uplink_handler.debug_mode = TRUE /obj/item/uplink/nuclear - uplink_flag = UPLINK_ALL_SYNDIE_OPS + uplink_flag = UPLINK_NUKE_OPS /obj/item/uplink/nuclear/debug name = "debug nuclear uplink" From a705d5ba3a945fb1c661a44a2986b643451d5905 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:20:26 +0300 Subject: [PATCH 10/53] nerfs the sneeze suppressive fire (#85262) ## About The Pull Request So sneeze projectiles have a hitsound whenever it lands, this leads to very silly immersion breaking situations where a person keeps sneezing, missing and performing "suppressive" sneezing to "combatants" Setting the hitsound to null should fix that ## Why It's Good For The Game Hearing the same hitsound for the sneeze projectile as bullets and other projectiles is really jarring, better remove it. ## Changelog :cl: grungussuss sound: the sneeze projectile no longer makes a sound when making contact. /:cl: --- code/modules/mob/living/sneeze.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/sneeze.dm b/code/modules/mob/living/sneeze.dm index b2cf76c25a6b0..4c38027fda0d8 100644 --- a/code/modules/mob/living/sneeze.dm +++ b/code/modules/mob/living/sneeze.dm @@ -57,6 +57,7 @@ spread = 40 damage_type = BRUTE damage = 0 + hitsound = null /// Call this when we hit something var/datum/callback/sneezie_callback From 1449bdab3f9bee658e3ccb9c49dc84c03a36b929 Mon Sep 17 00:00:00 2001 From: The Sharkening <95130227+StrangeWeirdKitten@users.noreply.github.com> Date: Sat, 27 Jul 2024 13:21:20 -0600 Subject: [PATCH 11/53] Makes Voidwalker check SSmapping.is_planetary when spawning (#85274) ## About The Pull Request Per title. Dynamic naturally running will not spawn a voidwalker on icebox now. ``find_space_spawn()`` checks only for carp landmarks, and icebox has carp landmarks for the other midround invasion antags. As a bonus, I also made SSpolling use the cosmic skull sprite to alert ghosts with. ## Why It's Good For The Game Just a lil' bug I found. Plus the skull sprite is cool as hell. ![image](https://github.com/user-attachments/assets/6459db22-f4a4-45b6-b770-8ec0d83bc379) ## Changelog :cl: fix: Voidwalker should not run on planetary maps. /:cl: --- .../subsystem/dynamic/dynamic_rulesets_midround.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm index 7d91ca6b565ce..9396728159480 100644 --- a/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm +++ b/code/controllers/subsystem/dynamic/dynamic_rulesets_midround.dm @@ -964,13 +964,15 @@ cost = 5 minimum_players = 40 repeatable = TRUE + signup_item_path = /obj/item/cosmic_skull ruleset_lazy_templates = list(LAZY_TEMPLATE_KEY_VOIDWALKER_VOID) /// The space turf we find in acceptable(), cached for ease var/space_turf /datum/dynamic_ruleset/midround/from_ghosts/voidwalker/acceptable(population = 0, threat_level = 0) space_turf = find_space_spawn() - if(!space_turf) + // Space only antag and will die on planetary gravity. + if(SSmapping.is_planetary() || !space_turf) return FALSE return ..() From e43a90f9129ee51d15f697becb34404a1fcbef9a Mon Sep 17 00:00:00 2001 From: larentoun <31931237+larentoun@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:21:49 +0300 Subject: [PATCH 12/53] Dynamic - fixes a comment for proc/lorentz_to_amount() (#85291) ## About The Pull Request I'm not going crazy, right? This comment must be wrong unless my math is wrong... ![image](https://github.com/user-attachments/assets/5fe49a17-04bd-488a-9777-f779869552f7) ## Why It's Good For The Game Comments don't lie so people don't get their hairs out if their values don't match with comments --- code/controllers/subsystem/dynamic/dynamic.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/dynamic/dynamic.dm b/code/controllers/subsystem/dynamic/dynamic.dm index e34b0c7e446c0..66a06c230c646 100644 --- a/code/controllers/subsystem/dynamic/dynamic.dm +++ b/code/controllers/subsystem/dynamic/dynamic.dm @@ -999,7 +999,7 @@ SUBSYSTEM_DEF(dynamic) #define MAXIMUM_DYN_DISTANCE 5 /** - * Returns the comulative distribution of threat centre and width, and a random location of -0.5 to 0.5 + * Returns the comulative distribution of threat centre and width, and a random location of -5 to 5 * plus or minus the otherwise unattainable lower and upper percentiles. All multiplied by the maximum * threat and then rounded to the nearest interval. * rand() calls without arguments returns a value between 0 and 1, allowing for smaller intervals. From e3b744943431de06fc076b60caa44c0c24c0b2b6 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:21:58 +0300 Subject: [PATCH 13/53] fixes birdshot holodeck area fuckery (#85285) ## About The Pull Request closes https://github.com/tgstation/tgstation/issues/85280 These 2 areas share an APC, no reason for the right side to use the holodeck area. Works now: ![image](https://github.com/user-attachments/assets/c3d97a3d-e925-49cf-b646-975913b1c1dc) ## Changelog :cl: grungussuss fix: birdshot holodeck's lighting has been fixed. /:cl: --- _maps/map_files/Birdshot/birdshot.dmm | 85 +++++++++++++-------------- 1 file changed, 41 insertions(+), 44 deletions(-) diff --git a/_maps/map_files/Birdshot/birdshot.dmm b/_maps/map_files/Birdshot/birdshot.dmm index 0a770985080d5..9de921e10feb6 100644 --- a/_maps/map_files/Birdshot/birdshot.dmm +++ b/_maps/map_files/Birdshot/birdshot.dmm @@ -2661,7 +2661,7 @@ dir = 1 }, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "baP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4949,7 +4949,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "bWs" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -7555,7 +7555,7 @@ /obj/structure/chair/stool/bar/directional/south, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "cUH" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 @@ -7763,11 +7763,10 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral/opposingcorners, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "cYt" = ( /obj/structure/cable, /turf/open/floor/plating, @@ -8400,7 +8399,7 @@ /obj/structure/chair/stool/bar/directional/south, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "diI" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral, @@ -12629,7 +12628,7 @@ /obj/machinery/airalarm/directional/east, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "eOY" = ( /obj/machinery/atmospherics/pipe/smart/simple/cyan/visible{ dir = 4 @@ -16692,7 +16691,7 @@ }, /obj/effect/turf_decal/tile/neutral/opposingcorners, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "gjE" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt/dust, @@ -21001,7 +21000,7 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "hED" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -22215,7 +22214,7 @@ dir = 4 }, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "ibI" = ( /obj/effect/turf_decal/siding/white/corner{ dir = 8 @@ -28260,7 +28259,7 @@ /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/camera/autoname/directional/east, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "jTD" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ dir = 8 @@ -32344,6 +32343,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating/rust, /area/station/maintenance/department/engine/atmos) +"ljc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/plating, +/area/station/maintenance/starboard/fore) "ljg" = ( /obj/effect/turf_decal/weather/snow/corner{ dir = 1 @@ -38208,10 +38216,6 @@ }, /turf/open/floor/iron, /area/station/security) -"ngd" = ( -/obj/effect/turf_decal/tile/neutral/opposingcorners, -/turf/open/floor/iron, -/area/station/holodeck/rec_center) "ngq" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -39118,7 +39122,7 @@ }, /obj/effect/decal/cleanable/dirt, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "nuY" = ( /obj/structure/broken_flooring/pile/directional/east, /obj/structure/alien/weeds/node, @@ -45899,9 +45903,6 @@ }, /turf/open/floor/wood/parquet, /area/station/service/library) -"pOT" = ( -/turf/closed/wall, -/area/station/holodeck/rec_center) "pOX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -46147,11 +46148,10 @@ name = "Maintenance" }, /obj/effect/mapping_helpers/airlock/access/any/service/maintenance, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "pTq" = ( /obj/machinery/door/airlock/maintenance{ name = "Crematorium Maintenance" @@ -46177,7 +46177,7 @@ /obj/effect/spawner/random/entertainment/arcade, /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "pTZ" = ( /obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 @@ -46497,7 +46497,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/plating, @@ -52948,7 +52947,7 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/structure/chair/stool/bar/directional/north, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "sjl" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -53636,7 +53635,7 @@ }, /obj/effect/landmark/start/hangover, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "sul" = ( /obj/effect/turf_decal/siding{ dir = 1 @@ -56207,11 +56206,9 @@ "tlJ" = ( /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/item/kirbyplants/random, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/power/apc/auto_name/directional/east, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "tlX" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue/fourcorners, @@ -59975,7 +59972,7 @@ /obj/effect/turf_decal/tile/neutral/opposingcorners, /obj/effect/spawner/random/entertainment/arcade, /turf/open/floor/iron, -/area/station/holodeck/rec_center) +/area/station/commons/fitness/recreation/entertainment) "uwB" = ( /obj/effect/turf_decal/tile/dark_red/half/contrasted{ dir = 4 @@ -112298,13 +112295,13 @@ cvk nFW uvG siN -ngd +jpp nuV sue -ngd +jpp cUB baO -pOT +pzd gMz rem rQA @@ -112557,11 +112554,11 @@ pTA hEw bWp gjn -ngd +jpp ibF diG baO -pOT +pzd ycQ rem nvB @@ -112810,13 +112807,13 @@ eav eav nFW nFW -pOT -pOT +pzd +pzd tlJ cYp jTC eOX -pOT +pzd xQJ xQJ xQJ @@ -113068,12 +113065,12 @@ tLj wOp fsq iRl -pOT -pOT +pzd +pzd pTk -pOT -pOT -pOT +pzd +pzd +pzd xqs xMO xQJ @@ -113327,7 +113324,7 @@ fLg tHi tfc wOp -mTc +ljc xQJ ejn vJx @@ -113584,7 +113581,7 @@ pot rUq lyq wOp -mTc +ljc xQJ mbV vJx From c48a6237b9c076244f103bdae1026de397d973fd Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Sat, 27 Jul 2024 12:22:29 -0700 Subject: [PATCH 14/53] Fix ssmachinary sleeping (#85269) `process()` already has this at its base, so it wasn't obvious these would need it too. Lemon Edit: Closes (Maybe?) #85170 --- code/game/machinery/_machinery.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 423a2a16b55c3..45a75f06133dd 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -286,6 +286,7 @@ ///Early process for machines added to SSmachines.processing_early to prioritize power draw /obj/machinery/proc/process_early() + set waitfor = FALSE return PROCESS_KILL /obj/machinery/process()//If you dont use process or power why are you here @@ -293,9 +294,11 @@ ///Late process for machines added to SSmachines.processing_late to gather accurate recordings /obj/machinery/proc/process_late() + set waitfor = FALSE return PROCESS_KILL /obj/machinery/proc/process_atmos()//If you dont use process why are you here + set waitfor = FALSE return PROCESS_KILL ///Called when we want to change the value of the machine_stat variable. Holds bitflags. From 186a8912edf2520a1aadcb6e6b96c314a88a4bad Mon Sep 17 00:00:00 2001 From: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Date: Sat, 27 Jul 2024 19:24:34 +0000 Subject: [PATCH 15/53] Mafia role help now checks the original description (#85258) ## About The Pull Request I thought I fixed this bug a long time ago but turns out I just never did. This makes mafia role help get the initial description rather than the current one, allowing us to edit people's descriptions as we need to in-game without this information being metagamed. ## Why It's Good For The Game Closes https://github.com/tgstation/tgstation/issues/82088 And prevents this again in the future. ## Changelog :cl: fix: [Mafia] The show_help button no longer shows you who the Obsessed's target is. /:cl: --- code/modules/mafia/roles/roles.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mafia/roles/roles.dm b/code/modules/mafia/roles/roles.dm index ab1a1cc0e454b..4cfd7662d843e 100644 --- a/code/modules/mafia/roles/roles.dm +++ b/code/modules/mafia/roles/roles.dm @@ -189,6 +189,6 @@ team_span = "comradio" the = FALSE result += span_notice("The [span_bold("[name]")] is aligned with [the ? "the " : ""][team_desc]") - result += "\"[desc]\"" + result += "\"[initial(desc)]\"" result += span_notice("[name] wins when they [win_condition]") to_chat(clueless, result.Join("
")) From 464bcefbc49ec55b5ad16280fb4288044cb3a8ec Mon Sep 17 00:00:00 2001 From: lessthanthree <83487515+lessthnthree@users.noreply.github.com> Date: Sat, 27 Jul 2024 21:24:45 +0200 Subject: [PATCH 16/53] Surgery steps no longer fail silently when missing chemicals (#85260) ## About The Pull Request Fixes surgery steps that require a chemical from failing silently if that chemical is missing. Player receives a bubble notification and the surgery is not performed if the chemical is missing. Operating computer UI tells you if the required chem is present or not. ![dreamseeker_RMO06bKPcV](https://github.com/user-attachments/assets/c57e5615-0786-4e8c-a2ef-d268f1c82f7d) ## Why It's Good For The Game Having to guess, without feedback, if the chemical was in the target's system at the time surgery completes is bad. ## Changelog :cl: LT3 fix: Players now receive a notification when trying to perform surgery steps that involve chemicals /:cl: --- .../machinery/computer/operating_computer.dm | 6 +++- code/modules/surgery/surgery_step.dm | 12 ++++--- .../tgui/interfaces/OperatingComputer.jsx | 32 ++++++++----------- 3 files changed, 26 insertions(+), 24 deletions(-) diff --git a/code/game/machinery/computer/operating_computer.dm b/code/game/machinery/computer/operating_computer.dm index d67cea367e9a6..43a18c7081f30 100644 --- a/code/game/machinery/computer/operating_computer.dm +++ b/code/game/machinery/computer/operating_computer.dm @@ -143,11 +143,13 @@ var/chems_needed = surgery_step.get_chem_list() var/alternative_step var/alt_chems_needed = "" + var/alt_chems_present = FALSE if(surgery_step.repeatable) var/datum/surgery_step/next_step = procedure.get_surgery_next_step() if(next_step) alternative_step = capitalize(next_step.name) alt_chems_needed = next_step.get_chem_list() + alt_chems_present = next_step.chem_check(patient) else alternative_step = "Finish operation" data["procedures"] += list(list( @@ -155,7 +157,9 @@ "next_step" = capitalize(surgery_step.name), "chems_needed" = chems_needed, "alternative_step" = alternative_step, - "alt_chems_needed" = alt_chems_needed + "alt_chems_needed" = alt_chems_needed, + "chems_present" = surgery_step.chem_check(patient), + "alt_chems_present" = alt_chems_present )) return data diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 350bd60fbd176..336e76b4d70c2 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -96,6 +96,12 @@ var/fail_prob = 0//100 - fail_prob = success_prob var/advance = FALSE + if(!chem_check(target)) + user.balloon_alert(user, "missing [LOWER_TEXT(get_chem_list())]!") + to_chat(user, span_warning("[target] is missing the [LOWER_TEXT(get_chem_list())] required to perform this surgery step!")) + surgery.step_in_progress = FALSE + return FALSE + if(preop(user, target, target_zone, tool, surgery) == SURGERY_STEP_FAIL) update_surgery_mood(target, SURGERY_STATE_FAILURE) surgery.step_in_progress = FALSE @@ -134,9 +140,7 @@ if(do_after(user, modded_time, target = target, interaction_key = user.has_status_effect(/datum/status_effect/hippocratic_oath) ? target : DOAFTER_SOURCE_SURGERY)) //If we have the hippocratic oath, we can perform one surgery on each target, otherwise we can only do one surgery in total. - var/chem_check_result = chem_check(target) - if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && chem_check_result && !try_to_fail) - + if((prob(100-fail_prob) || (iscyborg(user) && !silicons_obey_prob)) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) update_surgery_mood(target, SURGERY_STATE_SUCCESS) play_success_sound(user, target, target_zone, tool, surgery) @@ -146,8 +150,6 @@ play_failure_sound(user, target, target_zone, tool, surgery) update_surgery_mood(target, SURGERY_STATE_FAILURE) advance = TRUE - if(chem_check_result) - return .(user, target, target_zone, tool, surgery, try_to_fail) //automatically re-attempt if failed for reason other than lack of required chemical if(advance && !repeatable) surgery.status++ if(surgery.status > surgery.steps.len) diff --git a/tgui/packages/tgui/interfaces/OperatingComputer.jsx b/tgui/packages/tgui/interfaces/OperatingComputer.jsx index 990fddcadd96e..8a87840e89a02 100644 --- a/tgui/packages/tgui/interfaces/OperatingComputer.jsx +++ b/tgui/packages/tgui/interfaces/OperatingComputer.jsx @@ -103,28 +103,24 @@ const PatientStateView = (props) => { {procedure.next_step} - {procedure.chems_needed && ( - <> -
-
- Required Chemicals: -
- {procedure.chems_needed} - - )}
+ {procedure.chems_needed && ( + + + {procedure.chems_needed} + + + )} {procedure.alternative_step && ( {procedure.alternative_step} - {procedure.alt_chems_needed && ( - <> -
-
- Required Chemicals: -
- {procedure.alt_chems_needed} - - )} +
+ )} + {procedure.alt_chems_needed && ( + + + {procedure.alt_chems_needed} + )}
From ddd9f6e05d11802447537e56abbd90d81a4e2727 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:25:35 +0300 Subject: [PATCH 17/53] Makes mirage grenade dispensers and ionic jump jets work (#85253) ## About The Pull Request Partially handles #85207 ## Changelog :cl: fix: Mirage grenade dispensers and ionic jump jets now work /:cl: --- code/modules/mod/modules/modules_general.dm | 3 --- code/modules/mod/modules/modules_security.dm | 2 +- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 815cfb0a144bc..18c89600573cf 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -174,9 +174,6 @@ required_slots = list(ITEM_SLOT_BACK) /obj/item/mod/module/jump_jet/on_use() - . = ..() - if (!.) - return FALSE if (DOING_INTERACTION(mod.wearer, mod.wearer)) balloon_alert(mod.wearer, "busy!") return diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm index 19150b8a4cd67..703cf197dc76d 100644 --- a/code/modules/mod/modules/modules_security.dm +++ b/code/modules/mod/modules/modules_security.dm @@ -269,7 +269,7 @@ dispense_type = /obj/item/grenade/mirage /obj/item/mod/module/dispenser/mirage/on_use() - var/obj/item/grenade/mirage/grenade = . + var/obj/item/grenade/mirage/grenade = ..() grenade.arm_grenade(mod.wearer) /obj/item/grenade/mirage From ea5f76e78e597f5573eca618119d620b49f326c3 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:26:01 +1200 Subject: [PATCH 18/53] Automatic changelog for PR #85282 [ci skip] --- html/changelogs/AutoChangeLog-pr-85282.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85282.yml diff --git a/html/changelogs/AutoChangeLog-pr-85282.yml b/html/changelogs/AutoChangeLog-pr-85282.yml new file mode 100644 index 0000000000000..b46b38c535974 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85282.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "the default metal sound has been changed" \ No newline at end of file From ee95d045d693befee44d0a0276fb9bef14f9254c Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:26:18 +1200 Subject: [PATCH 19/53] Automatic changelog for PR #85283 [ci skip] --- html/changelogs/AutoChangeLog-pr-85283.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85283.yml diff --git a/html/changelogs/AutoChangeLog-pr-85283.yml b/html/changelogs/AutoChangeLog-pr-85283.yml new file mode 100644 index 0000000000000..1fb876e45fa73 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85283.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "gas tanks now have sound" \ No newline at end of file From 6fde29cdc4b5e25c78dcd317a5d063c9d4463241 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:26:25 +0300 Subject: [PATCH 20/53] Medsec gets their own telescreen (#85244) ## About The Pull Request closes https://github.com/tgstation/tgstation/issues/85182 Replaced all instances of it with the new type. The CMO telescreen was used instead before. ## Why It's Good For The Game CMO telescreen can be a spy obj so separating them is wise. ## Changelog :cl: grungussuss fix: Med sec telescreens are no longer the same item as the CMO telescreen. spellcheck: correcte name for the CMO telescreen mount /:cl: --- _maps/map_files/IceBoxStation/IceBoxStation.dmm | 2 +- _maps/map_files/MetaStation/MetaStation.dmm | 4 +--- _maps/map_files/wawastation/wawastation.dmm | 4 +--- code/game/machinery/computer/telescreen.dm | 14 +++++++++++++- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index f4831582a2eee..3737277c465ff 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -29666,7 +29666,7 @@ }, /obj/machinery/holopad, /obj/effect/landmark/start/depsec/medical, -/obj/machinery/computer/security/telescreen/cmo/directional/east, +/obj/machinery/computer/security/telescreen/med_sec/directional/east, /turf/open/floor/iron/dark/smooth_large, /area/station/security/checkpoint/medical) "iTJ" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 83eb9c4b5e81d..efec99c47fc04 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -10596,9 +10596,7 @@ }, /obj/effect/turf_decal/tile/red/fourcorners, /obj/machinery/light/small/directional/west, -/obj/machinery/computer/security/telescreen/cmo/directional/west{ - name = "Medbay Monitor" - }, +/obj/machinery/computer/security/telescreen/med_sec/directional/west, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "dQO" = ( diff --git a/_maps/map_files/wawastation/wawastation.dmm b/_maps/map_files/wawastation/wawastation.dmm index 2803187f508a7..5673421142ac1 100644 --- a/_maps/map_files/wawastation/wawastation.dmm +++ b/_maps/map_files/wawastation/wawastation.dmm @@ -58844,9 +58844,7 @@ "uJq" = ( /obj/machinery/computer/records/medical, /obj/effect/turf_decal/tile/red/fourcorners, -/obj/machinery/computer/security/telescreen/cmo/directional/north{ - name = "Medbay Monitor" - }, +/obj/machinery/computer/security/telescreen/med_sec/directional/north, /turf/open/floor/iron/dark, /area/station/security/checkpoint/medical) "uJt" = ( diff --git a/code/game/machinery/computer/telescreen.dm b/code/game/machinery/computer/telescreen.dm index c421ca0c90308..deca4ec8245e1 100644 --- a/code/game/machinery/computer/telescreen.dm +++ b/code/game/machinery/computer/telescreen.dm @@ -185,11 +185,23 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/ce, 32) frame_type = /obj/item/wallframe/telescreen/cmo /obj/item/wallframe/telescreen/cmo - name = "\improper Chief Engineer'stelescreen frame" + name = "\improper Chief Medical Officer's telescreen frame" result_path = /obj/machinery/computer/security/telescreen/cmo MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/cmo, 32) +/obj/machinery/computer/security/telescreen/med_sec + name = "\improper medical telescreen" + desc = "A telescreen with access to the medbay's camera network." + network = list(CAMERANET_NETWORK_MEDBAY) + frame_type = /obj/item/wallframe/telescreen/med_sec + +/obj/item/wallframe/telescreen/med_sec + name = "\improper medical telescreen frame" + result_path = /obj/machinery/computer/security/telescreen/med_sec + +MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/security/telescreen/med_sec, 32) + /obj/machinery/computer/security/telescreen/vault name = "vault monitor" desc = "A telescreen that connects to the vault's camera network." From c46504a6707faa568fd76c6038a68a9c10842260 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:26:45 +1200 Subject: [PATCH 21/53] Automatic changelog for PR #85289 [ci skip] --- html/changelogs/AutoChangeLog-pr-85289.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85289.yml diff --git a/html/changelogs/AutoChangeLog-pr-85289.yml b/html/changelogs/AutoChangeLog-pr-85289.yml new file mode 100644 index 0000000000000..c66014d6b9ef9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85289.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Monkey wizards can now interact with grand ritual runes." \ No newline at end of file From 9905ec26ffaf77618d413c420e6f1ef533575783 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:26:58 +1200 Subject: [PATCH 22/53] Automatic changelog for PR #85288 [ci skip] --- html/changelogs/AutoChangeLog-pr-85288.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85288.yml diff --git a/html/changelogs/AutoChangeLog-pr-85288.yml b/html/changelogs/AutoChangeLog-pr-85288.yml new file mode 100644 index 0000000000000..2b8883c494405 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85288.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - bugfix: "Clown Ops gear has been returned to being available only to clown ops. Whoops!" \ No newline at end of file From e77f27df80923f30c7a3c5050fd4d7f41d6fe1f6 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:27:07 +1200 Subject: [PATCH 23/53] Automatic changelog for PR #85262 [ci skip] --- html/changelogs/AutoChangeLog-pr-85262.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85262.yml diff --git a/html/changelogs/AutoChangeLog-pr-85262.yml b/html/changelogs/AutoChangeLog-pr-85262.yml new file mode 100644 index 0000000000000..2214b01528541 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85262.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "the sneeze projectile no longer makes a sound when making contact." \ No newline at end of file From e2753e0f047afcf0d0810a0d91855e2242468a02 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:27:20 +0300 Subject: [PATCH 24/53] Injector instead of passive in lavaland waste (#85247) ## About The Pull Request closes https://github.com/tgstation/tgstation/issues/78413 ## Changelog :cl: grungussuss fix: lavaland no longer has roundstart atmos processing because of a passive vent /:cl: --- _maps/map_files/Mining/Lavaland.dmm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_maps/map_files/Mining/Lavaland.dmm b/_maps/map_files/Mining/Lavaland.dmm index 7f0a84010e9f0..01234def93289 100644 --- a/_maps/map_files/Mining/Lavaland.dmm +++ b/_maps/map_files/Mining/Lavaland.dmm @@ -3896,11 +3896,11 @@ /area/mine/lounge) "uT" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/components/unary/passive_vent/layer2{ +/obj/machinery/atmospherics/components/unary/outlet_injector/layer2{ dir = 1 }, /turf/open/misc/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) +/area/mine/maintenance/service) "uU" = ( /turf/closed/mineral/random/labormineral/volcanic, /area/lavaland/surface/outdoors) From 09f60c88e3e81b2a14989c460cdcfdf0ba4736b5 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:27:26 +1200 Subject: [PATCH 25/53] Automatic changelog for PR #85274 [ci skip] --- html/changelogs/AutoChangeLog-pr-85274.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85274.yml diff --git a/html/changelogs/AutoChangeLog-pr-85274.yml b/html/changelogs/AutoChangeLog-pr-85274.yml new file mode 100644 index 0000000000000..da3f13efd4367 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85274.yml @@ -0,0 +1,4 @@ +author: "StrangeWeirdKitten" +delete-after: True +changes: + - bugfix: "Voidwalker should not run on planetary maps." \ No newline at end of file From e8e4dda9e6e525aadc8ff09ea04f5ddc4c599678 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:27:50 +1200 Subject: [PATCH 26/53] Automatic changelog for PR #85285 [ci skip] --- html/changelogs/AutoChangeLog-pr-85285.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85285.yml diff --git a/html/changelogs/AutoChangeLog-pr-85285.yml b/html/changelogs/AutoChangeLog-pr-85285.yml new file mode 100644 index 0000000000000..91d6e35d6c5b1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85285.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "birdshot holodeck's lighting has been fixed." \ No newline at end of file From 4e7d25e5e69ba30936f9f944a1f25fd970389256 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:28:19 +1200 Subject: [PATCH 27/53] Automatic changelog for PR #85258 [ci skip] --- html/changelogs/AutoChangeLog-pr-85258.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85258.yml diff --git a/html/changelogs/AutoChangeLog-pr-85258.yml b/html/changelogs/AutoChangeLog-pr-85258.yml new file mode 100644 index 0000000000000..3b6ad850c5c78 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85258.yml @@ -0,0 +1,4 @@ +author: "JohnFulpWillard" +delete-after: True +changes: + - bugfix: "[Mafia] The show_help button no longer shows you who the Obsessed's target is." \ No newline at end of file From 03eb7ebfbd564d6f06fcac4f4e9a10102c47b664 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:28:29 +1200 Subject: [PATCH 28/53] Automatic changelog for PR #85260 [ci skip] --- html/changelogs/AutoChangeLog-pr-85260.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85260.yml diff --git a/html/changelogs/AutoChangeLog-pr-85260.yml b/html/changelogs/AutoChangeLog-pr-85260.yml new file mode 100644 index 0000000000000..8f168c6816ca3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85260.yml @@ -0,0 +1,4 @@ +author: "LT3" +delete-after: True +changes: + - bugfix: "Players now receive a notification when trying to perform surgery steps that involve chemicals" \ No newline at end of file From 906f3dee222da6af6849cc38980b7dfff4cf7251 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:28:44 +1200 Subject: [PATCH 29/53] Automatic changelog for PR #85253 [ci skip] --- html/changelogs/AutoChangeLog-pr-85253.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85253.yml diff --git a/html/changelogs/AutoChangeLog-pr-85253.yml b/html/changelogs/AutoChangeLog-pr-85253.yml new file mode 100644 index 0000000000000..82de5cbc16bb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85253.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Mirage grenade dispensers and ionic jump jets now work" \ No newline at end of file From 7096021c2e13a20d613a2e533298bb3f459af3d8 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:28:55 +1200 Subject: [PATCH 30/53] Automatic changelog for PR #85244 [ci skip] --- html/changelogs/AutoChangeLog-pr-85244.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85244.yml diff --git a/html/changelogs/AutoChangeLog-pr-85244.yml b/html/changelogs/AutoChangeLog-pr-85244.yml new file mode 100644 index 0000000000000..80166c5556d99 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85244.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "Med sec telescreens are no longer the same item as the CMO telescreen." + - spellcheck: "correcte name for the CMO telescreen mount" \ No newline at end of file From bdb8d7a525a69b1294b8bfe9ffdd29cecc6bab93 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:29:03 +1200 Subject: [PATCH 31/53] Automatic changelog for PR #85247 [ci skip] --- html/changelogs/AutoChangeLog-pr-85247.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85247.yml diff --git a/html/changelogs/AutoChangeLog-pr-85247.yml b/html/changelogs/AutoChangeLog-pr-85247.yml new file mode 100644 index 0000000000000..fe03c6b7fcdca --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85247.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "lavaland no longer has roundstart atmos processing because of a passive vent" \ No newline at end of file From 2c36cbc6a4d2f0fd79e0e40420822a366e2b3300 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:30:23 +0300 Subject: [PATCH 32/53] Emotes by default will not be heard through walls (#85245) ## About The Pull Request Added a var to emotes for ignoring walls when playing their sound, now only the scream emote can ignore walls. ## Why It's Good For The Game It's really annoying and stupid that you can hear people crying through walls and doesn't make sense at all. ## Changelog :cl: grungussuss sound: only the scream emote can be heard through walls /:cl: --- code/datums/emotes.dm | 4 +++- code/modules/mob/living/emote.dm | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index 331e11afa4893..8d77c6fc6bdbb 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -60,6 +60,8 @@ var/can_message_change = FALSE /// How long is the cooldown on the audio of the emote, if it has one? var/audio_cooldown = 2 SECONDS + /// Does this emote's sound ignore walls? + var/sound_wall_ignore = FALSE /datum/emote/New() switch(mob_type_allowed_typecache) @@ -100,7 +102,7 @@ var/tmp_sound = get_sound(user) if(tmp_sound && should_play_sound(user, intentional) && TIMER_COOLDOWN_FINISHED(user, type)) TIMER_COOLDOWN_START(user, type, audio_cooldown) - playsound(user, tmp_sound, 50, vary) + playsound(source = user,soundin = tmp_sound,vol = 50, vary = vary, ignore_walls = sound_wall_ignore) var/is_important = emote_type & EMOTE_IMPORTANT var/is_visual = emote_type & EMOTE_VISIBLE diff --git a/code/modules/mob/living/emote.dm b/code/modules/mob/living/emote.dm index 418b07ebf2669..b007da827da14 100644 --- a/code/modules/mob/living/emote.dm +++ b/code/modules/mob/living/emote.dm @@ -352,6 +352,7 @@ message_mime = "acts out a scream!" emote_type = EMOTE_VISIBLE | EMOTE_AUDIBLE mob_type_blacklist_typecache = list(/mob/living/brain, /mob/living/carbon/human) + sound_wall_ignore = TRUE /datum/emote/living/scream/run_emote(mob/user, params, type_override, intentional = FALSE) if(!intentional && HAS_TRAIT(user, TRAIT_ANALGESIA)) From ec17e6fb6dac4d7f0658e0260ebdad8ccdd3c2c1 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:31:07 +1200 Subject: [PATCH 33/53] Automatic changelog for PR #85245 [ci skip] --- html/changelogs/AutoChangeLog-pr-85245.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85245.yml diff --git a/html/changelogs/AutoChangeLog-pr-85245.yml b/html/changelogs/AutoChangeLog-pr-85245.yml new file mode 100644 index 0000000000000..9d3603d7ccd11 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85245.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "only the scream emote can be heard through walls" \ No newline at end of file From 277e57683e894986c718889b6fbc225bec17b341 Mon Sep 17 00:00:00 2001 From: DrTuxedo <42353186+DrDiasyl@users.noreply.github.com> Date: Sun, 28 Jul 2024 00:33:28 +0500 Subject: [PATCH 34/53] Radio Sounds (#85115) ## About The Pull Request Now talking into radio and hearing radio messages produces a sound. Using LOUD-MODE makes a unique sound. https://github.com/user-attachments/assets/891d9b9a-5313-4aac-9fef-56d0a7286bf1 https://github.com/user-attachments/assets/112a3587-46ea-413e-89e4-2da7b54c3d62 **YOU CAN DISABLE IT IN THE GAME PREFERENCES** ## Why It's Good For The Game People REALLY tend to miss radio messages, especially from the heads. This makes it so they can hear when some interesting or important chatter is going on. Unless all of the heads of staff decide to dispute in the Common, subordinates will start noticing messages from their bosses in their channels more often. Also, these sounds are tickling my ears, in a good way. ## Changelog :cl: DrDiasyl aka DrTuxedo sound: Hearing and talking into the radio now produces a sound. Heads get a special sound. /:cl: --- code/game/machinery/telecomms/broadcasting.dm | 4 ++-- code/game/objects/items/devices/radio/radio.dm | 16 ++++++++++++++++ code/modules/client/preferences/sounds.dm | 6 ++++++ sound/misc/license.txt | 11 ++++++++++- sound/misc/radio_important.ogg | Bin 0 -> 5519 bytes sound/misc/radio_receive.ogg | Bin 0 -> 9343 bytes sound/misc/radio_talk.ogg | Bin 0 -> 9033 bytes .../features/game_preferences/sounds.tsx | 8 ++++++++ 8 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 sound/misc/radio_important.ogg create mode 100644 sound/misc/radio_receive.ogg create mode 100644 sound/misc/radio_talk.ogg diff --git a/code/game/machinery/telecomms/broadcasting.dm b/code/game/machinery/telecomms/broadcasting.dm index 5887c77667506..2c31dcbd98955 100644 --- a/code/game/machinery/telecomms/broadcasting.dm +++ b/code/game/machinery/telecomms/broadcasting.dm @@ -78,7 +78,7 @@ datum/language/language, // the language of the message message, // the text content of the message spans, // the list of spans applied to the message - list/message_mods // the list of modification applied to the message. Whispering, singing, ect + list/message_mods, // the list of modification applied to the message. Whispering, singing, ect ) src.source = source src.frequency = frequency @@ -92,7 +92,7 @@ "compression" = rand(COMPRESSION_VOCAL_SIGNAL_MIN, COMPRESSION_VOCAL_SIGNAL_MAX), "language" = lang_instance.name, "spans" = spans, - "mods" = message_mods + "mods" = message_mods, ) levels = SSmapping.get_connected_levels(get_turf(source)) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index d515929c197cc..373db4b21f53a 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -351,6 +351,12 @@ signal.broadcast() return + + if(iscarbon(talking_movable)) + var/mob/living/carbon/talking_carbon = talking_movable + if(talking_carbon.client?.prefs.read_preference(/datum/preference/toggle/radio_noise)) + SEND_SOUND(talking_carbon, 'sound/misc/radio_talk.ogg') + // All radios make an attempt to use the subspace system first signal.send_to_receivers() @@ -422,6 +428,16 @@ SEND_SIGNAL(src, COMSIG_RADIO_RECEIVE_MESSAGE, data) flick_overlay_view(overlay_speaker_active, 5 SECONDS) + if(iscarbon(loc)) + var/mob/living/carbon/holder = loc + if(!holder.client?.prefs.read_preference(/datum/preference/toggle/radio_noise)) + return + + var/list/spans = data["spans"] + SEND_SOUND(holder, 'sound/misc/radio_receive.ogg') + if(SPAN_COMMAND in spans) + SEND_SOUND(holder, 'sound/misc/radio_important.ogg') + /obj/item/radio/ui_state(mob/user) return GLOB.inventory_state diff --git a/code/modules/client/preferences/sounds.dm b/code/modules/client/preferences/sounds.dm index f1778405665ad..4a0298132c268 100644 --- a/code/modules/client/preferences/sounds.dm +++ b/code/modules/client/preferences/sounds.dm @@ -116,3 +116,9 @@ category = PREFERENCE_CATEGORY_GAME_PREFERENCES savefile_key = "sound_elevator" savefile_identifier = PREFERENCE_PLAYER + +/// Controls hearing radio noise +/datum/preference/toggle/radio_noise + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "sound_radio_noise" + savefile_identifier = PREFERENCE_PLAYER diff --git a/sound/misc/license.txt b/sound/misc/license.txt index 69ef29928202c..761a031d19081 100644 --- a/sound/misc/license.txt +++ b/sound/misc/license.txt @@ -5,4 +5,13 @@ knuckles.ogg by CGEffex. Shortened and cut. https://freesound.org/people/CGEffex/sounds/93981/ airraid.ogg by Jwade722. Shortened and cut. -https://freesound.org/people/Jwade722/sounds/534550/ \ No newline at end of file +https://freesound.org/people/Jwade722/sounds/534550/ + +radio_talk.ogg by cs2975871. Shortened and cut. +https://freesound.org/people/cs2975871/sounds/514185/ + +radio_important.ogg by morganpurkis. +https://freesound.org/people/morganpurkis/sounds/392972/ + +radio_receive.ogg by JovianSounds. Shortened and cut. +https://freesound.org/people/JovianSounds/sounds/524205/ \ No newline at end of file diff --git a/sound/misc/radio_important.ogg b/sound/misc/radio_important.ogg new file mode 100644 index 0000000000000000000000000000000000000000..bb6f769d6129b4edc907521baa5425f8ea197b6a GIT binary patch literal 5519 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 PyV$4*l$q(r>B0X2`)_$T literal 0 HcmV?d00001 diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx index 6f0f81237e495..f190f6c238762 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/sounds.tsx @@ -108,3 +108,11 @@ export const sound_achievement: FeatureChoiced = { `, component: FeatureDropdownInput, }; + +export const sound_radio_noise: FeatureToggle = { + name: 'Enable radio noise', + category: 'SOUND', + description: + 'When enabled, hear sounds of talking and hearing radio chatter.', + component: CheckboxInput, +}; From 27486dac2501cd99b8cacd5d8dafd3942762c2ee Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:33:53 +1200 Subject: [PATCH 35/53] Automatic changelog for PR #85115 [ci skip] --- html/changelogs/AutoChangeLog-pr-85115.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85115.yml diff --git a/html/changelogs/AutoChangeLog-pr-85115.yml b/html/changelogs/AutoChangeLog-pr-85115.yml new file mode 100644 index 0000000000000..d8ebc46cfd91a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85115.yml @@ -0,0 +1,4 @@ +author: "DrDiasyl aka DrTuxedo" +delete-after: True +changes: + - sound: "Hearing and talking into the radio now produces a sound. Heads get a special sound." \ No newline at end of file From 854efc7ace47195886e605f0907cf72f9f19c4e7 Mon Sep 17 00:00:00 2001 From: Helg2 <93882977+Helg2@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:36:31 +0300 Subject: [PATCH 36/53] Emergency climbing hooks now spawn in emergency boxes if the station has multi-z level. (#85273) ## About The Pull Request Emergency climbing hooks now spawn in emergency boxes not only on Icebox, but also on Northstar and Tram. ## Why It's Good For The Game Firstly, I think it's funny to see some assistant just casually climbing up from the -1 floor on the sideways of tram, when he fell out of it. Secondly, trying to get somewhere when the Northstar or Tram got blown up multiple times is an absolute nightmare if you have no good flashlight, or something similar. ## Changelog :cl: add: Emergency climbing hooks now spawn in emergency boxes on all of the multi-z level stations. /:cl: --- code/game/objects/items/storage/boxes/job_boxes.dm | 2 +- code/modules/cargo/goodies.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/storage/boxes/job_boxes.dm b/code/game/objects/items/storage/boxes/job_boxes.dm index ea9189cc5f2b0..ddfb51d913b9c 100644 --- a/code/game/objects/items/storage/boxes/job_boxes.dm +++ b/code/game/objects/items/storage/boxes/job_boxes.dm @@ -43,7 +43,7 @@ if(HAS_TRAIT(SSstation, STATION_TRAIT_RADIOACTIVE_NEBULA)) new /obj/item/storage/pill_bottle/potassiodide(src) - if(SSmapping.is_planetary() && LAZYLEN(SSmapping.multiz_levels)) + if(LAZYLEN(SSmapping.multiz_levels)) new /obj/item/climbing_hook/emergency(src) /obj/item/storage/box/survival/radio/PopulateContents() diff --git a/code/modules/cargo/goodies.dm b/code/modules/cargo/goodies.dm index e09c3e2bc958d..4751b45aae89b 100644 --- a/code/modules/cargo/goodies.dm +++ b/code/modules/cargo/goodies.dm @@ -311,7 +311,7 @@ /datum/supply_pack/goody/climbing_hook name = "Climbing Hook Single-Pack" - desc = "A less cheap imported climbing hook. Absolutely no use outside of planetary stations." + desc = "A less cheap imported climbing hook. Absolutely no use outside of multi-floor stations." cost = PAYCHECK_CREW * 5 contains = list(/obj/item/climbing_hook) From 85530b130a9e9fee8f03527351d3f044f1e10a4b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:37:00 +1200 Subject: [PATCH 37/53] Automatic changelog for PR #85273 [ci skip] --- html/changelogs/AutoChangeLog-pr-85273.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85273.yml diff --git a/html/changelogs/AutoChangeLog-pr-85273.yml b/html/changelogs/AutoChangeLog-pr-85273.yml new file mode 100644 index 0000000000000..c4753ff37f701 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85273.yml @@ -0,0 +1,4 @@ +author: "Helg2" +delete-after: True +changes: + - rscadd: "Emergency climbing hooks now spawn in emergency boxes on all of the multi-z level stations." \ No newline at end of file From a3b217e749fb8ce5fc692b553f61c32bfadaa521 Mon Sep 17 00:00:00 2001 From: Redbert <109347230+Deadgebert@users.noreply.github.com> Date: Sat, 27 Jul 2024 13:37:22 -0600 Subject: [PATCH 38/53] Peg limbs can now be removed via surgery (#85270) ## About The Pull Request Adds amputation surgery for peg limbs ## Why It's Good For The Game Peg limbs are a funny ghetto solution to replacing a limb in emergency situations. Unfortunately they can only be removed by burning or sawing the limb off. It's good to have a proper medical solution to getting pegged ## Changelog :cl: fix: peg limbs can now be amputated /:cl: --- code/modules/surgery/amputation.dm | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 49793c1ad2de2..16045a760324c 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -27,6 +27,13 @@ /datum/surgery_step/sever_limb/mechanic, //The benefit of being robotic; people can pull you apart in an instant! Wait, that's not a benefit... ) +/datum/surgery/amputation/peg + name = "Detach" + requires_bodypart_type = BODYTYPE_PEG + steps = list( + /datum/surgery_step/sever_limb/peg, //Easy come, easy go + ) + /datum/surgery/amputation/can_start(mob/user, mob/living/patient) if(HAS_TRAIT(patient, TRAIT_NODISMEMBER)) return FALSE @@ -62,6 +69,19 @@ preop_sound = 'sound/items/ratchet.ogg' preop_sound = 'sound/machines/doorclick.ogg' +/datum/surgery_step/sever_limb/peg + name = "detach limb (circular saw)" + implements = list( + TOOL_SAW = 100, + /obj/item/shovel/serrated = 100, + /obj/item/fireaxe = 90, + /obj/item/hatchet = 75, + TOOL_SCALPEL = 25, + ) + time = 30 + preop_sound = 'sound/surgery/saw.ogg' + success_sound = 'sound/items/wood_drop.ogg' + /datum/surgery_step/sever_limb/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) display_results( user, From 5850b10e2541336a908e28d6e690ae804fee38c2 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:37:42 +1200 Subject: [PATCH 39/53] Automatic changelog for PR #85270 [ci skip] --- html/changelogs/AutoChangeLog-pr-85270.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85270.yml diff --git a/html/changelogs/AutoChangeLog-pr-85270.yml b/html/changelogs/AutoChangeLog-pr-85270.yml new file mode 100644 index 0000000000000..26a4d5e5a0faa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85270.yml @@ -0,0 +1,4 @@ +author: "Deadgebert" +delete-after: True +changes: + - bugfix: "peg limbs can now be amputated" \ No newline at end of file From d4fc07fea570952916a144fe7397f3ed06f340bd Mon Sep 17 00:00:00 2001 From: Axidy <76065506+Axidyuwu@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:39:46 +0300 Subject: [PATCH 40/53] Justice invisibility now turns off by the safety (#85272) ## About The Pull Request Small change to make justice invisibility turn off when the safety is turned on. Because you could bypass safety check on it by basically turning off mecha safety and turning it on after it went to invicibility. ## Why It's Good For The Game Now everything works as supposed. ## Changelog :cl: fix: now Justice invisibility turns off in non combat mode as it supposed to /:cl: --- code/modules/vehicles/mecha/combat/justice.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vehicles/mecha/combat/justice.dm b/code/modules/vehicles/mecha/combat/justice.dm index e99632394a1b7..00b0543dbd865 100644 --- a/code/modules/vehicles/mecha/combat/justice.dm +++ b/code/modules/vehicles/mecha/combat/justice.dm @@ -170,10 +170,10 @@ . = ..() RegisterSignal(chassis, COMSIG_MECH_SAFETIES_TOGGLE, PROC_REF(on_toggle_safety)) -/// update button icon when toggle safety. +/// update button icon when toggle safety and turns invisibility off. /datum/action/vehicle/sealed/mecha/invisibility/proc/on_toggle_safety() SIGNAL_HANDLER - + invisibility_off() build_all_button_icons(UPDATE_BUTTON_STATUS) /datum/action/vehicle/sealed/mecha/invisibility/Trigger(trigger_flags) From 40aac1b363abad81bfe3645c3a9e97149acf3533 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:40:05 +1200 Subject: [PATCH 41/53] Automatic changelog for PR #85272 [ci skip] --- html/changelogs/AutoChangeLog-pr-85272.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85272.yml diff --git a/html/changelogs/AutoChangeLog-pr-85272.yml b/html/changelogs/AutoChangeLog-pr-85272.yml new file mode 100644 index 0000000000000..f364d1d5d9f09 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85272.yml @@ -0,0 +1,4 @@ +author: "Axidyuwu" +delete-after: True +changes: + - bugfix: "now Justice invisibility turns off in non combat mode as it supposed to" \ No newline at end of file From 2cc680c7ec3c70288ce4e874b10d4f9000cc38c7 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 27 Jul 2024 22:41:28 +0300 Subject: [PATCH 42/53] [NO GBP] Tooltips no longer call MeasureText every time you move your mouse (#85246) ## About The Pull Request MeasureText is now only called when the text is (most likely) wider than your screen, which is rather rare. ## Why It's Good For The Game I fucked up ## Changelog :cl: fix: People with tooltips enabled no longer lag the server when they move their mouse. Oops. /:cl: --- code/game/atom/_atom.dm | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index 8b29ba9e048e7..0fc288d06c6ee 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -940,13 +940,18 @@ //We inline a MAPTEXT() here, because there's no good way to statically add to a string like this new_maptext = "[name][extra_context]" - INVOKE_ASYNC(src, PROC_REF(set_hover_maptext), client, active_hud, new_maptext) + if (length(name) * 10 > active_hud.screentip_text.maptext_width) + INVOKE_ASYNC(src, PROC_REF(set_hover_maptext), client, active_hud, new_maptext) + return + + active_hud.screentip_text.maptext = new_maptext + active_hud.screentip_text.maptext_y = 10 - (extra_lines > 0 ? 11 + 9 * (extra_lines - 1): 0) /atom/proc/set_hover_maptext(client/client, datum/hud/active_hud, new_maptext) var/map_height WXH_TO_HEIGHT(client.MeasureText(new_maptext, null, active_hud.screentip_text.maptext_width), map_height) active_hud.screentip_text.maptext = new_maptext - active_hud.screentip_text.maptext_y = 22 - map_height + active_hud.screentip_text.maptext_y = 26 - map_height /** * This proc is used for telling whether something can pass by this atom in a given direction, for use by the pathfinding system. From f50eff63352079659e0f23463906e682def6393b Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 07:41:46 +1200 Subject: [PATCH 43/53] Automatic changelog for PR #85246 [ci skip] --- html/changelogs/AutoChangeLog-pr-85246.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85246.yml diff --git a/html/changelogs/AutoChangeLog-pr-85246.yml b/html/changelogs/AutoChangeLog-pr-85246.yml new file mode 100644 index 0000000000000..f719d7950e4db --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85246.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "People with tooltips enabled no longer lag the server when they move their mouse. Oops." \ No newline at end of file From 5f9a25fc18f55e59c902d0605739abe39a4f515f Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sat, 27 Jul 2024 23:16:31 +0300 Subject: [PATCH 44/53] Medkit sounds (#85286) ## About The Pull Request https://github.com/user-attachments/assets/b607e1e2-d19b-4b02-b264-05e5326e4374 ## Why It's Good For The Game We have box sounds, why not medkit sounds? ## Changelog :cl: grungussuss sound: medkits now have sounds /:cl: --- code/game/objects/items/storage/medkit.dm | 5 +++++ sound/items/attributions.txt | 10 ++++++++-- sound/items/medkit_drop.ogg | Bin 0 -> 17874 bytes sound/items/medkit_open.ogg | Bin 0 -> 14148 bytes sound/items/medkit_pick_up.ogg | Bin 0 -> 14127 bytes 5 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 sound/items/medkit_drop.ogg create mode 100644 sound/items/medkit_open.ogg create mode 100644 sound/items/medkit_pick_up.ogg diff --git a/code/game/objects/items/storage/medkit.dm b/code/game/objects/items/storage/medkit.dm index c3c97c790fdf3..bee7fdd524f3d 100644 --- a/code/game/objects/items/storage/medkit.dm +++ b/code/game/objects/items/storage/medkit.dm @@ -18,6 +18,9 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' throw_speed = 3 throw_range = 7 + drop_sound = 'sound/items/medkit_drop.ogg' + pickup_sound = 'sound/items/medkit_pick_up.ogg' + sound_vary = TRUE var/empty = FALSE /// Defines damage type of the medkit. General ones stay null. Used for medibot healing bonuses var/damagetype_healed @@ -79,6 +82,8 @@ /obj/item/storage/medkit/Initialize(mapload) . = ..() atom_storage.max_specific_storage = WEIGHT_CLASS_SMALL + atom_storage.open_sound = 'sound/items/medkit_open.ogg' + atom_storage.open_sound_vary = TRUE /obj/item/storage/medkit/regular icon_state = "medkit" diff --git a/sound/items/attributions.txt b/sound/items/attributions.txt index 2ded16f8c6729..592b1855aaebc 100644 --- a/sound/items/attributions.txt +++ b/sound/items/attributions.txt @@ -5,7 +5,7 @@ cig_snuff.ogg lighter_on.ogg lighter_off.ogg zippo_onn.ogg -zippo_off.ogg +zippo_off.ogg } - Taken from https://github.com/BeeStation/BeeStation-Hornet/pull/29 pen_click.ogg from https://freesound.org/people/LexzachGames/sounds/431492/ , license: CC0 @@ -24,8 +24,14 @@ plastic_pick_up.ogg - https://freesound.org/people/Jessica190091/sounds/491304/ plastic_drop.ogg - https://freesound.org/people/martian/sounds/338854/ , License: CC0 } - edited by sadboysuss +{ + medkit_open.ogg - https://freesound.org/people/Jandre160108/sounds/365866/ , License: CC BY-NC 4.0 + medkit_drop.ogg - https://freesound.org/people/Jandre160108/sounds/365866/ , License: CC BY-NC 4.0 + medkit_pick_up.ogg - https://freesound.org/people/blouhond/sounds/440710/ , License: CC BY 4.0 +} - edited by sadboysuss + { gas_tank_drop.ogg gas_tank_pick_up.ogg } - https://freesound.org/people/Globofonia/sounds/698346/ , License CC0 -edited by grungussuss \ No newline at end of file +edited by grungussuss diff --git a/sound/items/medkit_drop.ogg b/sound/items/medkit_drop.ogg new file mode 100644 index 0000000000000000000000000000000000000000..227d4a8beb220291a43fdf8936952cbd376b1031 GIT binary patch literal 17874 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 Katr%3@IL^6l`}B_ literal 0 HcmV?d00001 diff --git a/sound/items/medkit_open.ogg b/sound/items/medkit_open.ogg new file mode 100644 index 0000000000000000000000000000000000000000..63307783d2f776c7610c3079854c9e703291e69e GIT binary patch literal 14148 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�-3 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 LtSo=JL;?O6WTu}B literal 0 HcmV?d00001 diff --git a/sound/items/medkit_pick_up.ogg b/sound/items/medkit_pick_up.ogg new file mode 100644 index 0000000000000000000000000000000000000000..e13c6848e44dfc390ed993fff4ae87fb2aee0a38 GIT binary patch literal 14127 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 literal 0 HcmV?d00001 From 4cf4dbb272b5ea87169ac9323e12eb3b599db6cc Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 08:17:00 +1200 Subject: [PATCH 45/53] Automatic changelog for PR #85286 [ci skip] --- html/changelogs/AutoChangeLog-pr-85286.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85286.yml diff --git a/html/changelogs/AutoChangeLog-pr-85286.yml b/html/changelogs/AutoChangeLog-pr-85286.yml new file mode 100644 index 0000000000000..6e7843a626537 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85286.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "medkits now have sounds" \ No newline at end of file From 27d048f6cbe0b733ba86044ba1daa8ed369231ca Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 27 Jul 2024 23:28:13 +0200 Subject: [PATCH 46/53] (Black)market Telepad (LTSRBT) Update: Restocking Edition (#85066) ## About The Pull Request This is a suggestion that was to me several months ago to add the ability to pay credits to restock the black market. I liked the idea because it'd add anothe small reason to buy the board, though I had forgotten about it shortly after and just happened to remember it now. So, yeah, you can swat the LTSRBT with a holochip to restock the market(s). The price is shared amongst all pads and starts at 675 credits, but it doubles up everytime this is done, for obvious balance purposes. I've also updated included this new feature in the unit test, given the LTSRBT new sprites and renamed the Blackmarket subsystem to Market, because of how it can support different types of market datums, not just the blackmarket ## Why It's Good For The Game This adds one more reason to buy and build the LTSRBT and make markets less dependant on the bad side of RNG, if you have the credits. It's a bit of a money sink. ## Changelog :cl: add: You can now restock the black market by hitting the LTSRBT with enough credits. The price doubles each time this is done. imageadd: Updated the LTSRBT sprites. balance: Reintroduced the LTSRBT to cargo for 2000 credits vs the original 4000 (the ansible and crystals to build it are included btw), and slightly lowered the average blackmarket price for the same item to account for shipping costs. /:cl: --- ...gnals_blackmarket.dm => signals_market.dm} | 0 code/__DEFINES/{blackmarket.dm => market.dm} | 0 .../subsystem/{blackmarket.dm => market.dm} | 68 +++++++++++------ code/modules/antagonists/spy/spy_bounty.dm | 2 +- code/modules/cargo/markets/_market.dm | 16 +++- code/modules/cargo/markets/market_item.dm | 15 ++-- .../cargo/markets/market_items/hostages.dm | 1 + .../markets/market_items/stolen_goods.dm | 1 + .../cargo/markets/market_items/tools.dm | 2 +- code/modules/cargo/markets/market_telepad.dm | 69 ++++++++++++++++-- code/modules/cargo/markets/market_uplink.dm | 18 ++--- code/modules/cargo/packs/imports.dm | 17 +++++ code/modules/mob/living/living.dm | 2 +- code/modules/unit_tests/_unit_tests.dm | 2 +- code/modules/unit_tests/blackmarket.dm | 23 ------ code/modules/unit_tests/market.dm | 59 +++++++++++++++ icons/obj/machines/telecomms.dmi | Bin 30341 -> 30043 bytes tgstation.dme | 6 +- 18 files changed, 227 insertions(+), 74 deletions(-) rename code/__DEFINES/dcs/signals/{signals_blackmarket.dm => signals_market.dm} (100%) rename code/__DEFINES/{blackmarket.dm => market.dm} (100%) rename code/controllers/subsystem/{blackmarket.dm => market.dm} (68%) delete mode 100644 code/modules/unit_tests/blackmarket.dm create mode 100644 code/modules/unit_tests/market.dm diff --git a/code/__DEFINES/dcs/signals/signals_blackmarket.dm b/code/__DEFINES/dcs/signals/signals_market.dm similarity index 100% rename from code/__DEFINES/dcs/signals/signals_blackmarket.dm rename to code/__DEFINES/dcs/signals/signals_market.dm diff --git a/code/__DEFINES/blackmarket.dm b/code/__DEFINES/market.dm similarity index 100% rename from code/__DEFINES/blackmarket.dm rename to code/__DEFINES/market.dm diff --git a/code/controllers/subsystem/blackmarket.dm b/code/controllers/subsystem/market.dm similarity index 68% rename from code/controllers/subsystem/blackmarket.dm rename to code/controllers/subsystem/market.dm index 5c88177583b2f..81d96d331c71d 100644 --- a/code/controllers/subsystem/blackmarket.dm +++ b/code/controllers/subsystem/market.dm @@ -1,5 +1,5 @@ -SUBSYSTEM_DEF(blackmarket) - name = "Blackmarket" +SUBSYSTEM_DEF(market) + name = "Market" flags = SS_BACKGROUND init_order = INIT_ORDER_DEFAULT @@ -18,27 +18,27 @@ SUBSYSTEM_DEF(blackmarket) /// Currently queued purchases. var/list/queued_purchases = list() -/datum/controller/subsystem/blackmarket/Initialize() +/datum/controller/subsystem/market/Initialize() for(var/market in subtypesof(/datum/market)) markets[market] += new market - for(var/datum/market_item/item as anything in subtypesof(/datum/market_item)) - if(!initial(item.item)) - continue - if(!prob(initial(item.availability_prob))) - continue - - var/datum/market_item/item_instance = new item() - for(var/potential_market in item_instance.markets) - if(!markets[potential_market]) - stack_trace("SSblackmarket: Item [item_instance] available in market that does not exist.") - continue - // If this fails the market item will just be GC'd - markets[potential_market].add_item(item_instance) + for(var/path in subtypesof(/datum/market_item)) + initialize_item(path) return SS_INIT_SUCCESS -/datum/controller/subsystem/blackmarket/fire(resumed) +/datum/controller/subsystem/market/proc/initialize_item(datum/market_item/path, list/market_whitelist) + if(!path::item || !prob(path::availability_prob)) + return + var/datum/market_item/item_instance = new path() + for(var/potential_market in item_instance.markets) + if(!markets[potential_market]) + stack_trace("SSmarket: Item [item_instance] available in market that does not exist.") + continue + if(isnull(market_whitelist) || (potential_market in market_whitelist)) + markets[potential_market].add_item(item_instance) + +/datum/controller/subsystem/market/fire(resumed) while(length(queued_purchases)) var/datum/market_purchase/purchase = queued_purchases[1] queued_purchases.Cut(1,2) @@ -55,9 +55,9 @@ SUBSYSTEM_DEF(blackmarket) // The time left of the shortest cooldown amongst all telepads. var/lowest_timeleft = INFINITY for(var/obj/machinery/ltsrbt/pad as anything in telepads) - if(!COOLDOWN_FINISHED(pad, recharge_cooldown)) - var/timeleft = COOLDOWN_TIMELEFT(pad, recharge_cooldown) - if(timeleft < lowest_timeleft) + if(!COOLDOWN_FINISHED(pad, recharge_cooldown) || (pad.machine_stat & NOPOWER)) + var/timeleft = pad.machine_stat & NOPOWER ? INFINITY - 1 : COOLDOWN_TIMELEFT(pad, recharge_cooldown) + if(timeleft <= lowest_timeleft) lowest_cd_pad = pad lowest_timeleft = timeleft continue @@ -79,7 +79,7 @@ SUBSYSTEM_DEF(blackmarket) to_chat(buyer, span_notice("[purchase.uplink] flashes a message noting that the order is being teleported to [get_area(targetturf)] in 60 seconds.")) // do_teleport does not want to teleport items from nullspace, so it just forceMoves and does sparks. - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/blackmarket, fake_teleport), purchase, targetturf), 60 SECONDS) + addtimer(CALLBACK(src, TYPE_PROC_REF(/datum/controller/subsystem/market, fake_teleport), purchase, targetturf), 60 SECONDS) // Get the current location of the uplink if it exists, then throws the item from space at the station from a random direction. if(SHIPPING_METHOD_LAUNCH) @@ -106,7 +106,7 @@ SUBSYSTEM_DEF(blackmarket) break /// Used to make a teleportation effect as do_teleport does not like moving items from nullspace. -/datum/controller/subsystem/blackmarket/proc/fake_teleport(datum/market_purchase/purchase, turf/target) +/datum/controller/subsystem/market/proc/fake_teleport(datum/market_purchase/purchase, turf/target) // Oopsie, whoopsie, the item is gone. So long, and thanks for all the money. if(QDELETED(purchase)) return @@ -119,9 +119,31 @@ SUBSYSTEM_DEF(blackmarket) qdel(purchase) /// Used to add /datum/market_purchase to queued_purchases var. Returns TRUE when queued. -/datum/controller/subsystem/blackmarket/proc/queue_item(datum/market_purchase/purchase) +/datum/controller/subsystem/market/proc/queue_item(datum/market_purchase/purchase) if((purchase.method == SHIPPING_METHOD_LTSRBT && !telepads.len) || isnull(purchase.uplink)) qdel(purchase) return FALSE queued_purchases += purchase return TRUE + +///A proc that restocks one or more markets, or all if the market_whitelist is null. +/datum/controller/subsystem/market/proc/restock(list/market_whitelist) + var/market_name = "Markets" + if(market_whitelist && !islist(market_whitelist)) + var/datum/market/market_path = market_whitelist + market_name = market_path::name + market_whitelist = list(market_path) + + var/list/existing_types = list() + for(var/path in markets) + if(isnull(market_whitelist) || (path in market_whitelist)) + markets[path].restock(existing_types) + + for(var/datum/market_item/path as anything in (subtypesof(/datum/market_item) - existing_types)) + if(!path::restockable) + continue + initialize_item(path, market_whitelist) + + for(var/obj/machinery/ltsrbt/pad as anything in telepads) + pad.say("[market_name] restocked!") + playsound(src, 'sound/effects/cashregister.ogg', 40, FALSE) diff --git a/code/modules/antagonists/spy/spy_bounty.dm b/code/modules/antagonists/spy/spy_bounty.dm index 28984ce2272bd..01a1a1baf7b9a 100644 --- a/code/modules/antagonists/spy/spy_bounty.dm +++ b/code/modules/antagonists/spy/spy_bounty.dm @@ -186,7 +186,7 @@ var/datum/market_item/stolen_good/new_item = new(thing, item_price) - return SSblackmarket.markets[/datum/market/blackmarket].add_item(new_item) + return SSmarket.markets[/datum/market/blackmarket].add_item(new_item) /// Steal an item /datum/spy_bounty/objective_item diff --git a/code/modules/cargo/markets/_market.dm b/code/modules/cargo/markets/_market.dm index 0a93469411cdb..4696d3007a7ae 100644 --- a/code/modules/cargo/markets/_market.dm +++ b/code/modules/cargo/markets/_market.dm @@ -6,7 +6,7 @@ var/list/shipping // Automatic vars, do not touch these. - /// Items available from this market, populated by SSblackmarket on initialization. Automatically assigned, so don't manually adjust. + /// Items available from this market, populated by SSmarket on initialization. Automatically assigned, so don't manually adjust. var/list/available_items = list() /// Item categories available from this market, only items which are in these categories can be gotten from this market. Automatically assigned, so don't manually adjust. var/list/categories = list() @@ -73,6 +73,20 @@ return FALSE +/** + * A proc that restocks only the EXISTING items of this market. + * If you want to selectively restock markets, call SSmarket.restock(market_or_list_of_markets) instead. + */ +/datum/market/proc/restock(list/existing_items) + for(var/category in available_items) + var/category_list = available_items[category] + for(var/identifier in category_list) + var/datum/market_item/item = category_list[identifier] + existing_items |= item.type + if(!item.restockable || item.stock >= item.stock_max || !prob(item.availability_prob)) + continue + item.stock += rand(1, item.stock_max - item.stock) + /datum/market/blackmarket name = "Black Market" shipping = list( diff --git a/code/modules/cargo/markets/market_item.dm b/code/modules/cargo/markets/market_item.dm index 5e3ce4efb6c07..d7a4dd4c0eef3 100644 --- a/code/modules/cargo/markets/market_item.dm +++ b/code/modules/cargo/markets/market_item.dm @@ -5,7 +5,7 @@ var/desc /// The category this item belongs to, should be already declared in the market that this item is accessible in. var/category - /// "/datum/market"s that this item should be in, used by SSblackmarket on init. + /// "/datum/market"s that this item should be in, used by SSmarket on init. var/list/markets = list(/datum/market/blackmarket) /// Price for the item, if not set creates a price according to the *_min and *_max vars. @@ -27,7 +27,7 @@ var/stock_min = 1 /// Maximum amount that there should be of this item in the market if generated randomly. var/stock_max = 0 - /// Probability for this item to be available. Used by SSblackmarket on init. + /// Probability for this item to be available. Used by SSmarket on init. var/availability_prob ///The identifier for the market item, generated on runtime and used to access them in the market categories. @@ -36,6 +36,9 @@ ///If set, these will override the shipment methods set by the market var/list/shipping_override + /// Can this item be restocked + var/restockable = TRUE + /datum/market_item/New() if(isnull(price)) price = rand(price_min, price_max) @@ -82,7 +85,7 @@ CRASH("Invalid item type for market item [item || "null"]") /** - * Buys the item and makes SSblackmarket handle it. + * Buys the item and makes SSmarket handle it. * * @param uplink The uplink that is buying the item. * @param buyer The mob that is buying the item. @@ -102,8 +105,8 @@ // Alright, the item has been purchased. var/datum/market_purchase/purchase = new(src, uplink, shipping_method, legal_status) - // SSblackmarket takes care of the shipping. - if(SSblackmarket.queue_item(purchase)) + // SSmarket takes care of the shipping. + if(SSmarket.queue_item(purchase)) stock-- buyer.log_message("has succesfully purchased [name] using [shipping_method] for shipping.", LOG_ECON) return TRUE @@ -139,7 +142,7 @@ /datum/market_purchase/Destroy() entry = null uplink = null - SSblackmarket.queued_purchases -= src + SSmarket.queued_purchases -= src return ..() /datum/market_purchase/proc/on_instance_del(datum/source) diff --git a/code/modules/cargo/markets/market_items/hostages.dm b/code/modules/cargo/markets/market_items/hostages.dm index ed5b1f10a7fcf..702cea907bdeb 100644 --- a/code/modules/cargo/markets/market_items/hostages.dm +++ b/code/modules/cargo/markets/market_items/hostages.dm @@ -5,6 +5,7 @@ stock = 1 availability_prob = 100 shipping_override = list(SHIPPING_METHOD_LTSRBT = 0, SHIPPING_METHOD_SUPPLYPOD = 350) + restockable = FALSE /// temporary reference to the 4 in 7 chances of signaler and electropack. var/obj/item/assembly/signaler/signaler diff --git a/code/modules/cargo/markets/market_items/stolen_goods.dm b/code/modules/cargo/markets/market_items/stolen_goods.dm index 02a72f05d26d1..cb1932673e0e3 100644 --- a/code/modules/cargo/markets/market_items/stolen_goods.dm +++ b/code/modules/cargo/markets/market_items/stolen_goods.dm @@ -4,6 +4,7 @@ abstract_path = /datum/market_item/stolen_good stock = 1 availability_prob = 100 + restockable = FALSE /datum/market_item/stolen_good/New(atom/movable/thing, thing_price) ..() diff --git a/code/modules/cargo/markets/market_items/tools.dm b/code/modules/cargo/markets/market_items/tools.dm index 963d7fbaeb075..0c9969756d30f 100644 --- a/code/modules/cargo/markets/market_items/tools.dm +++ b/code/modules/cargo/markets/market_items/tools.dm @@ -11,7 +11,7 @@ stock_min = 2 stock_max = 4 price_min = CARGO_CRATE_VALUE * 2.5 - price_max = CARGO_CRATE_VALUE * 3.75 + price_max = CARGO_CRATE_VALUE * 3.25 availability_prob = 100 /datum/market_item/tool/caravan_wrench diff --git a/code/modules/cargo/markets/market_telepad.dm b/code/modules/cargo/markets/market_telepad.dm index 7c5b509a9421d..799395f30d125 100644 --- a/code/modules/cargo/markets/market_telepad.dm +++ b/code/modules/cargo/markets/market_telepad.dm @@ -1,3 +1,5 @@ +#define DEFAULT_RESTOCK_COST 675 + /obj/item/circuitboard/machine/ltsrbt name = "LTSRBT (Machine Board)" icon_state = "bluespacearray" @@ -13,7 +15,8 @@ name = "Long-To-Short-Range-Bluespace-Transceiver" desc = "The LTSRBT is a compact teleportation machine for receiving and sending items outside the station and inside the station.\nUsing teleportation frequencies stolen from NT it is near undetectable.\nEssential for any illegal market operations on NT stations.\n" icon = 'icons/obj/machines/telecomms.dmi' - icon_state = "exonet_node" + icon_state = "exonet_node_idle" + base_icon_state = "exonet_node" circuit = /obj/item/circuitboard/machine/ltsrbt density = TRUE @@ -35,18 +38,42 @@ var/datum/market_purchase/transmitting /// Queue for purchases that the machine should receive and send. var/list/datum/market_purchase/queue = list() + /** + * Attacking the machinery with enough credits will restock the markets, allowing for more/better items. + * The cost doubles each time this is done. + */ + var/static/restock_cost = DEFAULT_RESTOCK_COST /obj/machinery/ltsrbt/Initialize(mapload) . = ..() - SSblackmarket.telepads += src + register_context() + SSmarket.telepads += src /obj/machinery/ltsrbt/Destroy() - SSblackmarket.telepads -= src + SSmarket.telepads -= src // Bye bye orders. - if(length(SSblackmarket.telepads)) + if(length(SSmarket.telepads)) for(var/datum/market_purchase/P in queue) - SSblackmarket.queue_item(P) + SSmarket.queue_item(P) + . = ..() + +/obj/machinery/ltsrbt/add_context(atom/source, list/context, obj/item/held_item, mob/user) + if(held_item && held_item.get_item_credit_value()) + context[SCREENTIP_CONTEXT_LMB] = "Restock" + return CONTEXTUAL_SCREENTIP_SET + return NONE + +/obj/machinery/ltsrbt/examine(mob/user) . = ..() + if(machine_stat & NOPOWER) + . += span_info("A display reads: \"Current market restock price: [EXAMINE_HINT("[restock_cost] cr")]\".") + +/obj/machinery/ltsrbt/update_icon_state() + . = ..() + if(machine_stat & NOPOWER) + icon_state = "[base_icon_state]_off" + else + icon_state = "[base_icon_state][(receiving || length(queue)) ? "" : "_idle"]" /obj/machinery/ltsrbt/RefreshParts() . = ..() @@ -67,6 +94,7 @@ /obj/machinery/ltsrbt/proc/add_to_queue(datum/market_purchase/purchase) if(!recharge_cooldown && !receiving && !transmitting) receiving = purchase + update_appearance(UPDATE_ICON_STATE) else queue += purchase @@ -80,6 +108,8 @@ if(transmitting == purchase) transmitting = null + update_appearance(UPDATE_ICON_STATE) + /obj/machinery/ltsrbt/process(seconds_per_tick) if(machine_stat & NOPOWER) return @@ -113,3 +143,32 @@ if(length(queue)) receiving = pick_n_take(queue) + +/obj/machinery/ltsrbt/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + var/creds_value = tool.get_item_credit_value() + if(!creds_value) + return NONE + + . = ITEM_INTERACT_SUCCESS + + if(machine_stat & NOPOWER) + return + + if(creds_value < restock_cost) + say("Insufficient credits!") + playsound(src, 'sound/machines/buzz-sigh.ogg', 40, FALSE) + return + + if(istype(tool, /obj/item/holochip)) + var/obj/item/holochip/chip = tool + chip.spend(restock_cost) + else + qdel(tool) + if(creds_value != restock_cost) + var/obj/item/holochip/change = new(creds_value - restock_cost) + user.put_in_hands(change) + + SSmarket.restock() + restock_cost *= 2 + +#undef DEFAULT_RESTOCK_COST diff --git a/code/modules/cargo/markets/market_uplink.dm b/code/modules/cargo/markets/market_uplink.dm index d13f59937b66c..a324a2f0409be 100644 --- a/code/modules/cargo/markets/market_uplink.dm +++ b/code/modules/cargo/markets/market_uplink.dm @@ -20,7 +20,7 @@ /obj/item/market_uplink/Initialize(mapload) . = ..() - // We don't want to go through this at mapload because the SSblackmarket isn't initialized yet. + // We don't want to go through this at mapload because the SSmarket isn't initialized yet. if(mapload) return @@ -30,7 +30,7 @@ /obj/item/market_uplink/proc/update_viewing_category() if(accessible_markets.len) viewing_market = accessible_markets[1] - var/list/categories = SSblackmarket.markets[viewing_market].categories + var/list/categories = SSmarket.markets[viewing_market].categories if(categories?.len) viewing_category = categories[1] @@ -45,7 +45,7 @@ /obj/item/market_uplink/ui_data(mob/user) var/list/data = list() - var/datum/market/market = viewing_market ? SSblackmarket.markets[viewing_market] : null + var/datum/market/market = viewing_market ? SSmarket.markets[viewing_market] : null var/obj/item/card/id/id_card if(isliving(user)) var/mob/living/livin = user @@ -86,11 +86,11 @@ /obj/item/market_uplink/ui_static_data(mob/user) var/list/data = list() - data["delivery_method_description"] = SSblackmarket.shipping_method_descriptions - data["ltsrbt_built"] = SSblackmarket.telepads.len + data["delivery_method_description"] = SSmarket.shipping_method_descriptions + data["ltsrbt_built"] = SSmarket.telepads.len data["markets"] = list() for(var/M in accessible_markets) - var/datum/market/BM = SSblackmarket.markets[M] + var/datum/market/BM = SSmarket.markets[M] data["markets"] += list(list( "id" = M, "name" = BM.name @@ -107,7 +107,7 @@ return if(isnull(viewing_market)) return - if(!(params["category"] in SSblackmarket.markets[viewing_market].categories)) + if(!(params["category"] in SSmarket.markets[viewing_market].categories)) return viewing_category = params["category"] . = TRUE @@ -120,7 +120,7 @@ viewing_market = market - var/list/categories = SSblackmarket.markets[viewing_market].categories + var/list/categories = SSmarket.markets[viewing_market].categories if(categories?.len) viewing_category = categories[1] else @@ -142,7 +142,7 @@ if(isnull(selected_item)) buying = FALSE return - var/datum/market/market = SSblackmarket.markets[viewing_market] + var/datum/market/market = SSmarket.markets[viewing_market] market.purchase(selected_item, viewing_category, params["method"], src, usr) buying = FALSE diff --git a/code/modules/cargo/packs/imports.dm b/code/modules/cargo/packs/imports.dm index f270b1da11f39..98fc4d650212c 100644 --- a/code/modules/cargo/packs/imports.dm +++ b/code/modules/cargo/packs/imports.dm @@ -318,3 +318,20 @@ ) crate_name = "floortile camouflauge crate" crate_type = /obj/structure/closet/crate/secure/weapon + +/** + * The Long To Short Range Bluespace Teleporter, used to deliver (black) market purchases more effiiently + * It can also be used to restock it, if you hit it with enough credits. + */ +/datum/supply_pack/imports/blackmarket_telepad + name = "Black Market LTSRBT" + desc = "Need a faster and better way of transporting your illegal goods from and to the \ + station? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) \ + is here to help. Contains a LTSRBT circuit, two bluespace crystals, and one ansible." + cost = CARGO_CRATE_VALUE * 10 + contraband = TRUE + contains = list( + /obj/item/circuitboard/machine/ltsrbt, + /obj/item/stack/ore/bluespace_crystal/artificial = 2, + /obj/item/stock_parts/subspace/ansible, + ) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 2873dab1a71bc..a7531439573e5 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -2663,7 +2663,7 @@ GLOBAL_LIST_EMPTY(fire_appearances) ///The price should be high enough that the contractor can't just buy 'em back with their cut alone. var/datum/market_item/hostage/market_item = new(src, black_market_price || ransom_price) - SSblackmarket.markets[/datum/market/blackmarket].add_item(market_item) + SSmarket.markets[/datum/market/blackmarket].add_item(market_item) if(mind) ADD_TRAIT(mind, TRAIT_HAS_BEEN_KIDNAPPED, TRAIT_GENERIC) diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index 911887cc8b900..a42c25dc94ee1 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -102,7 +102,6 @@ #include "bespoke_id.dm" #include "binary_insert.dm" #include "bitrunning.dm" -#include "blackmarket.dm" #include "blindness.dm" #include "bloody_footprints.dm" #include "breath.dm" @@ -183,6 +182,7 @@ #include "mapload_space_verification.dm" #include "mapping.dm" #include "mapping_nearstation_test.dm" +#include "market.dm" #include "mecha_damage.dm" #include "medical_wounds.dm" #include "merge_type.dm" diff --git a/code/modules/unit_tests/blackmarket.dm b/code/modules/unit_tests/blackmarket.dm deleted file mode 100644 index 984e2ea815503..0000000000000 --- a/code/modules/unit_tests/blackmarket.dm +++ /dev/null @@ -1,23 +0,0 @@ -/// Ensures black market items have acceptable variable values. -/datum/unit_test/blackmarket - -/datum/unit_test/blackmarket/Run() - for(var/datum/market_item/prototype as anything in subtypesof(/datum/market_item)) - if(prototype::abstract_path == prototype) //skip abstract paths - continue - if(!prototype::category) - TEST_FAIL("[prototype] doesn't have a set category (or the abstract path var isn't correctly set)") - continue - if(!prototype::item) - TEST_FAIL("[prototype] doesn't have a set item (or the abstract path var isn't correctly set)") - continue - if(isnull(prototype::price) && prototype::price_max <= prototype::price_min) - TEST_FAIL("[prototype] doesn't have a correctly set random price (price_max should be higher than price_min)") - if(isnull(prototype::stock) && prototype::stock_max < prototype::stock_min) - TEST_FAIL("[prototype] doesn't have a correctly set random stock (stock_max shouldn't be lower than stock_min)") - if(!isnum(prototype::availability_prob)) - TEST_FAIL("[prototype] doesn't have a set availability_prob (must be a number)") - if(!prototype::name) - TEST_FAIL("[prototype] doesn't have a set name") - if(!prototype::desc) - TEST_FAIL("[prototype] doesn't have a set desc") diff --git a/code/modules/unit_tests/market.dm b/code/modules/unit_tests/market.dm new file mode 100644 index 0000000000000..022f277d879c0 --- /dev/null +++ b/code/modules/unit_tests/market.dm @@ -0,0 +1,59 @@ +#define CATEGORY_CODERBUS "Coderbus" +/// Ensures market items have acceptable variable values and restocking works. +/datum/unit_test/market + +/datum/unit_test/market/Run() + for(var/datum/market_item/prototype as anything in subtypesof(/datum/market_item)) + if(prototype::abstract_path == prototype) //skip abstract paths + continue + if(!prototype::category) + TEST_FAIL("[prototype] doesn't have a set category (or the abstract path var isn't correctly set)") + continue + if(!prototype::item) + TEST_FAIL("[prototype] doesn't have a set item (or the abstract path var isn't correctly set)") + continue + if(isnull(prototype::price) && prototype::price_max <= prototype::price_min) + TEST_FAIL("[prototype] doesn't have a correctly set random price (price_max should be higher than price_min)") + if(isnull(prototype::stock) && prototype::stock_max < prototype::stock_min) + TEST_FAIL("[prototype] doesn't have a correctly set random stock (stock_max shouldn't be lower than stock_min)") + if(!isnum(prototype::availability_prob)) + TEST_FAIL("[prototype] doesn't have a set availability_prob (must be a number)") + if(!prototype::name) + TEST_FAIL("[prototype] doesn't have a set name") + if(!prototype::desc) + TEST_FAIL("[prototype] doesn't have a set desc") + + + var/datum/market/unit_test/market = SSmarket.markets[/datum/market/unit_test] + TEST_ASSERT(market, "Couldn't find the unit test market") + var/list/category_items = market.available_items[CATEGORY_CODERBUS] + var/datum/market_item/unit_test/item = category_items[category_items[1]] + TEST_ASSERT(item, "Couldn't find the unit test market item") + TEST_ASSERT_EQUAL(item.stock, 1, "The unit test market item is incorrectly stocked. Only one should be in stock") + + var/mob/living/user = allocate(/mob/living) + var/obj/item/holochip/chip = allocate(/obj/item/holochip, run_loc_floor_bottom_left, INFINITY) + var/obj/machinery/ltsrbt/pad = allocate(/obj/machinery/ltsrbt) + + pad.item_interaction(user, chip) + + TEST_ASSERT_EQUAL(item, category_items[category_items[1]], "The unit test market item has been replaced during restock") + TEST_ASSERT_EQUAL(item.stock, 2, "The unit test market item is incorrectly stocked after restock. There should be two in stock") + +/datum/market/unit_test + name = "Unit Test Market" + shipping = list(SHIPPING_METHOD_TELEPORT = 0) + +/datum/market_item/unit_test + name = "Your Own Special Singularity" + desc = "ALL HAIL LORD SINGULOTH!!!" + category = CATEGORY_CODERBUS + markets = list(/datum/market/unit_test) + item = /obj/singularity + price = 42069 + stock_min = 1 + stock = 1 + stock_max = 2 + availability_prob = 100 + +#undef CATEGORY_CODERBUS diff --git a/icons/obj/machines/telecomms.dmi b/icons/obj/machines/telecomms.dmi index 1af082171ac16bc9c3826cf3a1922094ab612506..f1380268c29cf09a2be28fc154b26bd6cd6e3de6 100644 GIT binary patch delta 6111 zcmXw-2{=^m`~T0_5?M+i>mXZA zKhV?97XTjR)TR?m%e1*WD}TvKg*IWY4u*EmT_4yZiYz@TNo+g|Ot4Y3kise%J9OJEjrR48kFm7+1%`Ocv z5c|y-&^!^SD*=8+-WkcT(MZN-`Vvd-`F`kWV)PYMxpuEdJg7rvYWT&D(XflG79}mJ z)R|>X7_q#~V^%zMHa|zineq(FzWT#l{apK8+YkCvbV9lZA`5JnNgreS@nd;+Peb_F zR7InNiC|lcl;!;yRp)D8!~`{GEcR3cB3oE2C7pSlrMAiJXq)+EZ!Pebx1VSW<_j)+ z_omm}^;(1wsJN2vBv8mfkNX@wT|hG*@x6I|7c+nmsA9aHI@2*~xMlz287*hV`A=Al z^*z$dD11yjs{r`ZDs^pwV-1`hJWEw@j=kmfY+a$yM~h^$a4(U?{Y`Sy4SeuF?i}(G zd8!FKYF@-5|GjW`#4 ztB*^i7)%=3Wc=gc^}^D1cupq6qD*9wsTw4& zw|I{-_3<%OO_VF=!5K2yo_NtZolq~Z$rCMUm}gjAEs!b8w24ujUH@#BC?>>dTuZlc zCXViGPq|mymBXRV5SJ~47eS;WJ7_c|zk@@uaanU}weW^hhic+K*B z^s~v!o;P!ckb+^aHW^z9%?AaNs3YO)C=)}xhHn2rx;GiEDHJL2jt>YL)h;Ey_f*5W zRkUUt5PxX(aq10~Mkb?kz!2SX@F8OrLriXa3=inTv5D^GavQd0hnrG-DfBo^x-CJ2 zy^fI)Wb6jH^z7>oUr$uS4wkG&yHFwCw?00qhVNaS+8)wI$U%8MA(52#P$TkdJY(C{ zSOwH=`qblmGI_0X>BbQm-p!^UpX@~@o6~zRAa70i0a<|~T_nh%z?uf@?$q3@;J2p6 zcQW?3-o?~VdaeorcKL&)I8lpsHc{<-P^Bv#JlgwMaJ6ufyc`Of#nGm++c5U(!uLGx zzJAZU|7W_Rxik4NqcNwP{(>^HN*`#xO%+`y1=Dgxz*i02t*NF(7r-#ihhd`PVSf5b ztPIic7dKAlvBOnx4m;bm?y8p^2L@PUI&R^solv-7C5)B_DST#~S4V@qOf3g*Dnf&s z`p(440sznPzm+K{(s4UT$)sNT&f0ZI9UNU1IWm`fFhPvy8?cuU@LE%R;OA(M6Mo=Q zrnvNDAo1y0l$`SUjl}O;7JNY0`1o>N{guZDmuhNi)B}=nlm)(dw1b1LjZMam{ND4V zS0TNlZ3e6Zv!qd0i9jU|(O%h{tjN!B@V%WELNc)a(rH|J*G>qhGaw+&Sl6Bj_TfN4jL9%b&@IygxD&7ci4 z%5Z<{jx^ZW)g`=PmM}VM?bsaZRL>kmS=fgr0PwwkFev^v5<|P?^tk^|_W!@m9Q>y* z75cyZ55UbGVmG)@Hy?3D4jM=2tRH>LjeE8Rt-mw51bA<#DU$Tx zs3IKch_Hr!mFp5nf|jBg+_Qj1z*!mQ9N^t%n95w0o+rWbycW&EuKxbthj{kZ|HM#e zdpt}!+%s@F;PdSd3Gd!1$RiM6t=U+f4)MhH71WDXz_l?XT68p3{lQWMH%f<_>6h>= z7@RlGConJ&&VQoRxnbgB?MDB*uJnZX_|wcVIZTDlsq2YCC2VxCX#;bfy&cp2-!McH z;J^n~uB@yitDJP$t*odhp;^VD?HG}@`08zR)Dr%*-u`-{V-J-lN@VbxOfIN5q5Bj# zuB_5uSg4EtF2+!J^@+9I)xd$gUeeLNS+&_oj4GmigE#GWQqVPIS7jG;33WJ8!-{vX zEJg3^c7beX>;PN43;Xt8jJDAYn`dSoNyzm1@ggbq^J4sMF5Dk%?{(bZ=KbZ)2b{#H zDQG8B6qvM&@OTR$9LVVaK%d!oJS%=>9(hO!W~`(nsZTUu8~uOD4dh-kp+{Z1Ds7q* zOTdGd1Lr==n$uSDu4L#RlFbIFCixbWB2kb^S|bgMQwP7TxDjZyf&mb!i~yIn*(28M z+KRTtZ@%^S!vJh{HgUaE6^W+=d=(CD8)wIhVD_`cKDrMqCToKf8g=+W>#$nR$wl27 zrO-=E_uXA6p_ITAZ-m`-EwxIS0p8h>+3a&7Aca)mc6Yxp#txrKO~yZ_nw|xPgvy`i zs+(6WU9zB^QssJqXP}s94WP(!?MOL*e|pZ1S*bo&Rt%4)+IyZlPX20!*|I6aONk^I zGjcwQi7}?B7Sz_NeA*c@t~%D9Odw!HS_tQdf7I-LX?q$yFk$Cu?%~>2Gj`82hvN3z zrp<;djkm?Kjm*+vz{2(#KPV!SuF&@;iW&PD<79sg10J2FY;#|`c8!gF!jM*mKBE;D z#*WLT3)v4K`Olt(g}omPdmdGCvU&me5B?OAdOe8&MfG&0so`PQu7BN-#tT@@WqbsJ z*2g3B^Tm|)IbndarjX8jL-Kn^_Z`*-fWKhq91 zoMb9-Y;nb$yt7igRLaA{Q?>d}S0W6!n4e6Yy4#JMsXPHVlS9Mi>{9_)Fb{H{lVs(JGbwsmkHWjW6(Z1I!0ZoX6qO zQOfE@{U3L}umk}aa@kM66eA6KTpr{1NrBG6WeFfcI`6nK-@fH}$qF9M7&nzG*4ykc z9aRFZmvgUOOp&)obIstKoZ2YFOPY^v%0!(waf1I4^fUYUl8DST)z|{5BRQ6UD?Ty> zm1WSgXNcLRiC??UPTx84^i+camAX)=j55~s^ZPaMP7t_w_6Sq!xpmaF(MfjSrzbV$ zzSWVW>mz{jXJa=Vq(=_yOt@v3en9O!FHZzW_Ij3Z44Yygb>BPS6vPwI+$H6dYec<{ zfq?w$Qy)F=(72G!?Q)et^Pf?a=Dtctvwjc?t^72Jc%wr1nR$Wp+3zWv_R#zuuh#Br zi~$T#&PZY$Wr-TE4UcI3eV&^YQ1cUSJ{#4p=Es}~A=Fy8rF)s`4#dcq~LJCH|*4V^WOXD29}AzntW%&EBeB z@=`&0o8Md#1x7_>YswYDpoedYx%DvN<37mpjaadM+4Lq3a_{iQnMEuJZpH0}MUP=d zj=`v_g@U&%Fi;)Qh`GU=lWUbMrCK6 zQGu)*lJO2A-B1DZ^n;a93n6?1`>(^cO0^K-t5`E632J7<@J0XURRBc z*`=hUxY?o=uUx4(1jL=7%s019Db~aJANqDF4u;odF<@;-MU6U@I|Pb{AyL6(q;$ znzI)#@EgBcCEkRjJvCH6nsWqlA#R)Cix4 zhE4@E3SG^=39e3SW>1ap$qm0s=d5t^C67P~+0g1;ry9sdg2G&jsu4O_DCX3(+^ttv114H$-#pb2I+s&Q(I zFpaC0t7e)OnT!Ex(SXPjxWC5yX>i=~bks}m&mHmSMfQ0gh|67PHpv^*P}XI^Cd;Sr zDOI|U*k%d=i*CQ|iLPL|E!gC%cK_zKoag1f12yl~JdKc?gMRgd#3ToD{oKOxbRYf< zvLk`w;2H8A8$35Qrs zZi5ip8FE@OVH_Pb95*JFb%O<_vETcbL#4sABex9(ei4y6TF%}XILVrmYr{vWwqjIp zx%>cZ4i-io-4@is1PO<^BAR`{1C%p?y#|a-8pG9kNaF_uk11uHXumuqsPaZK6R~e0gFA+0+`8CI-dqHWO|Fx<_l~u1h)+o z?gR0HYQDg@KykOJ*J8)>9Bt?pI0}Yji~xFjja`-Z9`oe;#CUvJu5oLDi=&X{GQbX9j@8DMW(VpS(DmWeaXTQE>{(9Z$nBOo} z`3a>HvvhA&avf(Ro^?rrFo=*A5^WfAV>#T!lT ze`O7_n)$j!TQ!#Wu7FgFL(X9k*Sc1SqB zi8g>DJX_A2Ixj}sjH%8$92pI zB&7w~ka#q3lBc(~+X%+^s@b+9(A(=p*ZlomVrQpT@Olu#e}HxL1hyksm6G6i|5R#)TUMK+850pyV(%80A@h@pDEiDOu-*t7WHMO;d+i(1{ z3}a-#$}zG{sJpxS1r3cjsFiEO;p_YGe~t9(*(2cpB3`NtOib7T$uspts|4FDPIKqV zt;$8Kx!wCvOwl>!h_<#itgU>VSZPQ)Wg&PNtpMxxgN>KlAcZX~EE)n=Pn}_6y~^Cd zpsmQiBQ6X*9TVhUNq~F-*!HbDFjtcrvb z97UXZLXCkNh)+m>Ma;ulGr3yh9TkqH!1&+ez|pY*mV*y2z9WLHOv$~A%2Z|6_TQ25r+uPqteE$YNJ~j6UbrA;qV$(U%_klU1pZt=M&gAM z@ytK>s!uLAI)1Z+3knK$jE`q3Uz|QJ4@@0@_4snmTOCVUWQ8?XVPFGMk`*<32yabK z=iNmf{s)p)JP*F$z^?{65flc>nNSKO!u`!zoer!=iC12McWc4+z!0Eq)V01|ZpoU7 z#h%Z~fR_r-GqkRF{4#s4LoYv{6~F7VGvty+!@R1`p!ha4YtnpOhmjWnb3noL*hXQi z8Ta0xJix>NW3sk^Re*}k8;%jsfxxPbt|d?aIQC81fR%F@(q?S;dGu;;S^_ThPSD1@ zZ~HT}Z!MrM-nhiqx}$C;qWseA<+3zZyS$)m00gf~FwX(9p>t{f0Xj9-V(FR*xxV#oXF$I5=w&KY^v& zmkQ1;lNTxbJt06=Kf6K`tHU*KLMX;pV+x}+&=c<6@MCD9+i#~SJF{|}(iG)^aut>4 zf{U}Z^UpT{FAF;-K23TAq`4swh|J7PZJE>UJ3Go-YzjpRbWrKqc7YbC?mJA1q! zNc;4dob5NcUq*C5B6@s&?#YFRuFlt${Fe)!M+V?wGB?^`2kiIbv&*R(oi`9@qQ;)* zvh%~ja0k0C6MR5c*3KoJK-zKigFinT1@_eMGzDLN?;yFVug#R77zAqt-^2w=L3<3Y z8<;Kjouey2nl5c(>O{rc!WUrhlg$?e4BAquI=1eNg>Qe{*)p!Fr$1VI5NfLG$3*^$ z92$`Lt94x-CmV&yHKBkZVusPy_h$nPFen;^j+}<{)B2lWe*-I@6$5&(amULtn>!F)I-+(srFZe~2otY4QiJk?-#@Yv zI%04gsb*SsHR4T*8p0;IH!#oTY!r%V9Z>TVr&_PBtxZ9-x}^z_V2`}KjBGhd;hp-5VUx6ea0mnZZ9(oYpRTYN>BWBjFlqvC^B#;Znd>qq&o=|k^`?o+_| z-9{juie3ee?uQ)Y&s}jz6{D_-{g@O)@TdkG%uvx3_ zKu#&YaZCv0^SJMLez)8Pr$Y!SM0P$q3$;?{>;F!9obzbnLCLm`z^BTDuIF1O*47F- z^mM_Y+mfRiy)Vm=4SD`0@gIx94JmKspc6^0&kvtmyuv_GY)W1}z4I14l|WL3z!#Uo z_g+1VyFJqV@@?XER}s5AlWHzTB>5%n$Is z6S{CMC&a@1TT;+9M`j+*pnlNtHuIsh#E#^4U1?}zzthU@&tw$py4vCe-?Ag+hJN$q z3oE21xcj#Z<;xVGj_5pa(pmLO&a=ur)w^C>)fA_zX9jv#&y4;SVRdQb#I-mmke%O7 z5-JDwiOb+M61DsXQ!%XzBaF*y#Yek*Y(6<|e)>G%)sgIW|8(1VqX(yr&bJ(ZmzgO) z>E!koTKBd}?+B&J-%Um?UOCmmmAWpTf#=fnO%>6SK*O4q1$S@MZjR^L?DL-mT{V!A3BdG6{+^J1r(I%FMsw7B7?fuhh) z!mw@OVy{ZQL+^Vsw$CE|NhI9oGJ?Ew-(GwJZyH#N-5>KfWt)Ge7@J<+3X(} z$;+F2S1oC03#ex5XBkTis|#RCBmRxe5o-jIqjl1&U(u?x-L-bTr|{&|rWRh>NPW@W8Dr7S~+W5$!MEE-JB{r|ab+b{%O5_ZowjVD{b>NTAH38PVID1{_ zIOLDf(PPdG>{jO;8w6{Qy+*Z=^L^AWZ*&tOmRnEl)afeeOFgTaU_NnX!`Nk~v#$BT zcEknQ1yF{UYbq$iG;T2sJvPc2F9$FesB;2T2OV_e2^dMsVAhLRLd77aViI230gBSe zAHqiWoX&L}j49vn3fj&Og*_h^x;=6 zag4zZR7HMnN~?D_9`D}NrsQ%Uv6H5PbIoS5-q#L;)5jx<5Cj$?*^zIGFJAu>7%EO0 z@=54!w~2!#?>{u-j=KkW^ZRZbnz{HQQE-HO_MnthA$rb?5jnn1q2_(xy;psW>+EI3 z8t9cCyBF$3`Xs3X0HTVQFX~;boY>})H5%Ss@VBUKYM)7=R|dHE+eE6NQChIg>S5l@ zYH8PAr14TUOQXV4vTGR66bh%8_P=Y;((ge!1JVTr7%w`3lP6ct+S=MykerI44^!-H zZTp6X6nehP(s_&Pd{;I;ZERsR@63QByZ_|gyKnC+Hr<@{v56ddI8)hlZOmzzx^?2X zDr?0;xv@TQK$e4o-m|3>S?Kr{Vx#+GIb-vqH6cqkzwP?!?OoH_FkHjjN0ZdL z$t4U#8oC%Lt^T;R9%%S|N66c!PKxPwp5A9MUBezbMa3bRts9x?>26_Rp#6Dd{d0;P z*gl$LdEuY(`_G0v-)V0o(rFBz(^CO4?G_7Wwc<+L%m?iwc}sPl*Siup-2;p&)v%wB zF|I;7AV$!#K#KeylN@B%#_%6MCZhUBErxCz`0&4)#kXP76X9^**80oXfole&=HJ5@@l^Rm~TWlEoeN1 zJz7n_3bAir+ug(cnK6J5+jU;y(3I*IW6r{{;21kp!d!aIG;v;XD$%#dz+q#D8re$t zrx$|=xb>jXtj+)(v9}ph_ob1D0B5qsTn;^&*d(ql)E(>uLp+oK9gND4p`rNi-wnr1 zY;0_bxxXBABv|ru%+^iH39fy^rPeELWd1ve3c#`+u(F0DVvpI(Q|iPUsVX)=qz>r% zx~%L(%MqwD9e69WM?7_w{56|+1sdQjpS-UHiSS{s-0_tIMsMCQ&8 zSbdJ+NQrE^_(fwft|c!pV)>07*mQ7g#Eij|V!C&ZqmJ4k#@-+#M17cZP!n)NmX*d@ z*kn~Yt(~%r92|CxSgSc0E`-(=ijij@3_F@#$2+0A7i1-vV)d+F-yz5!*)Zg8LwOd^q1}`Gvc#YX&`#DU!}Es217=O zX;YDPkYd>4L%cd1xoTvS{=PHz{`S4Z{Q`WMc3)EQk;u?kr_DVX_Ii$%Z$swg>UVn9 zMuskCK61SZIRAMd7;r-&ro>Y)*lW@CPQ7KDA2Au!o}ijz6P!qhLhSkg20!DP|NM4vQLDu<)jr7X%0i33=gr)Lm0cYjd>^%DhRbsfYswfnlNGms&h8bs8&6YsFUs z?Q3@xT_0YkO9Z`C3(oFRT6cl4{u$2#md`~2%%MLGmo=2Ggz%q-Sjrk zV~EZ@92{dtHD5!0>|4U$)S6Xs0)zd{(d*Tq-Rcox=Fv+XbR)F&3A(G?!4k+=-01bi;;&rhd7}R9zNV?dg z3U^aT=d*L9tkGY~5vRaY(Tj_VX(1f}0iYUJoZd1b_~NJT1uml|8vo7;!wm(`Z^LEU zVFlSAvL@4X5Hm+dN^;EyWw?78$atehrWsv!!Vcz>#FdS(zR}Tywl)t49=hET1X`!P7;qaI%)qY;~L%vFS@JB_DSz!(Qby=f;D)!c61R#Ha`9Am`4K$kGmSTy=^ zF~GKiZS)<>@^GNm{f;2%7+qaOx}n|_l~Z;h!uB?AynaHIl)+MUS=DyU6oVasRpP7f z1($H(%J%m5ds~hy&^J5a;mj8_V;CD^bDHmGD{*Ql1kTm>M;GtcDXn*@e`tu zqZ#UxS?#2_JeJOu$9FNhfVQ?a0CScc2A4m49i^OKH8X!*RKz1kgu;Y*jR~F*dFcZK zKOKI9EV5Vwn_(I#c$qWUAng=Z@9YtmaMGub<&g>(lQ4|cLc3=LH$!DyT!j+C8Gvwj zP{~Ina?x&eoE$KEInO96O5~*`PjdzPc72ENDe(8x^&>~X9dyxvBbL_$8wJwSSZxe; z{7^%1ZfX@A09aE&(_Q6jU9p-KcfOz3QG3Rwk+2Oof*X(?UrXUm9rn7$W~+pjb6V04 z&t}-i50vhzoS;i6JEf=^R`2Fp@W$Z%TSzA}72%1AiM(7KSq-WCP0H}Ki{$DPHYu0@ z%P9s>L9-{baP(3VcwY})iRp<{)s`6yK`bfBELGf8VNSKbI15Dcs|U0;)}H1~q5sjF zm3awsuC2KwoitjAb8is6JpdgyQ2r`IfMQj(jVl9^m$guzpJSat66XWi8$`%8xrcqM zdCN1p$LnyR$aQ9JuI$$KHZJ?kKxK8l;O<&4lyUO>W3c~7O%^ZRsGW<7)!+ZM zqfb~BI%Q=Ix98qc0Yu@Xnj zF&X>FlJB|BsjGL=o}{Ba?|uxDOGBd!izP@+WM)~CfjtDG)+Tj~;R`5GYb2rjzNdn~ zuQiaeM#b0EjMn%_JScZX=5lq$f$f62eeFhUk;c$bMz9x1S48gi3$nXfJ zVK^e{8l%{ftNyvD#-Xk|^j}*(t)9NgdHt-Z$=@^Rk-ko} z#6cdJN5(UJ7otCyME}KfS9L<|F@`rf10EimH^IoRaU$)$CV|p~TEA2b7cnx`C6R3$k1s5Oy~ExY>P$yP?8*xpKVy2uGcgF7FurEF zy}GQ7H@=_vpl#2Ab!SieLLaT$b|>v6_1& zVC9=cBiK5%Hkp!9!pP|1F8`LmBF>>W072MO^lsF*8zsCvZEv>Iu~MIdHHtu{yVhKv zrl52)K$}<<#s15#9bHpGH!XYY+FO+M)$Vk3LjRt~xJrb0^ZI(l#=Y^GW;U#r_5=)X zU#o%lN^Y=f!^NOa@2df+fKB8lgwivZraO|)M&(PcY?)!}qyKf`g zN2333WR-aZ2n4qm4KIc6UXCi*x@acF!VQ&3$j~DSn65S+zkAZbg9OM=I4DTh4LXQ7 z@Khe!_VGDklbQJRX&#%}b{rjCRibVlD-u-r4~Mk&3dN%f3m-l_p;!wBZr##4di3a3 z&#}IrKcBX=NZC7vhuMEFy~;>U6&tM!z@0%L<@a8J=6O|Ck;xCgT3#%$e7{4REHn+H zetVS0c|m4*3S8?~VAF=DnDE~ski$AnGNCHcxBcq}=_e`INOt~v<=}+-dm`_2MP%N7 ztx;EF~t#_b0tNFv&sReCuYQOCq1h)=z8$Ff4h3AK{ej6?r|kA{W( zf9iH#&Xbm03O$u(DVexLZ#vun^ra=~2Z?~7B}5)!yRr58zCDDvLR65|n){kFA5 z`nZ&g2u15qau)1tFN9&go<@(ZWtPkBFGesFHPv~x3u(ro

)Kf@3Gx8W|l*91;{B zOID^NV}t2z2R4f$Kxjs8k;my8^RlzyAfRG3*$ZR`ZvKt5E)i^p*&-Xgd_%nar)%Dtly@5tJFMDeJ zYufqivKV|O>Uq}Y9DeCbjl9U?v9&V)HLvm)wH%`0U7BeNQkcu~@tYNnb!sGE&DfIz zzFh7)&}m=#|ATh&&^cCkpIuWn3D1q%6)6-5fe53Fs`+&TrgQvXnXzkE*_KFr&sepW zh!;M$ClY!$wnC#=EZRx5=|9%37XQ4SsnOR%qq8}f$;RPLlElPY%Rhh&{vl-El1-u+ z_86;rW2t2o(owv1Ho(-B-_g<0mj%KS%>F?^Ds=2@-+lNracl-UYEmZ!c*JAJFLJVt z|H>w=T`vzunJn1d7{oqr9%5Tp+T;&ljv+$-w^OBg2P6(kS8nv#+d5RKQ_+Yj^+ z2tM8tTm+$#hMQoK>%yxSFH)4es&ggBgcdnq%TE_!%^HBc%B>g=;pB{=;Z_;JuHo|8 zj7<+mN+*4;7nd93JGxdeN}TQJ6?(FX1?W|tM=6HyxM4fOLe(5qL5Navb~-aS2IIEF zih(_rapQ(*suwv@ic?n147ryOq5d=JC0tp*)yYz1a4ue-PZ!1C9Ny@-cUo07{)F8J z3&Us_*ZdcOzS@dBHfH$h<#WNb_FbPW8!4%kYfq9xS|~)rtbTj|DoR{)w}At%ayZG_ zG)Kw6&-k~L^p@N`Uq_nF4o(~`KweR~4|wbXKl}R+C8}6N*nT-!P*BjnHkkX`NEmgg zp5r>W?rnFjGyMM`E);?q5}5x&>-|iG-Mfr^#n^|dA$9^6Az|)v!2G1pq^ahivhl;k=qi>guSoJijadX$I8(%>>OvVj@BN&bV~Hm)L;_E^cpWeBcK8DZW)>Xzi`v+GB%NJ zQYxq`8m<0CXB6Gt-EEwn{r>&?hI@Rk2UGquldi9un)n6=TG9xmX&3X$*SVwF^lES4 z93Ri!qyOmugWfpb)g{&Cu#T@IE^cK$cNI7Ratd=#4Kk*pL@9iS?!I{eI85`y{PG>y zn9262Z*Y*SNF*C9UFQZG7;4Ht8y*=f#h=3V+}Pe6J!lsciB5bm^0p}M%W6?mp}WlRawjOk zJb!l|5IFt&%BKiUYaDu_+Ex-keYW%Pk2l2+ zQ}X45gM+7Nt*u7Wcy5ToEF7F<7sR{i(KqJGTJ)f?TzVeyzWbXkP94jo?-K^wK|J`O z?E44j`csjN@G4SjUKkiB}e=Sdge!{ z#qm!EG_|~curHEvT`wx>Pje%P8xGiI=i-*g#rM^G7G@>ctBOcJeNeV#_sNqdILlUl z_2J>+DZz)8^Fb|)t71(r$L*8ov-tLpP2r4qDEIYP82M4yQQb1MYgtM2xpS(j@(1?+ z`F9Y3I`gMJgqQA!&=yu!LMj%L&o&OkFp?JZbh+e>oFK*{Yb6C067o6cy*v%04F8+_ zl(Hfl4V7msgSQ_T?G|KhzJhgMbb<6~Fp6b&Rwr`EG9dTS`)uy)FK_;n_oEcF#T1;^ z-B>J|ATK;dz&SBzY@Sa;nCd@>jryar;%&~Nd`s{G(H@-2i!%z1MEGS3* zXTp2k?)6E)v%1l&Av(ma*|yNt55XJTvHu})?NZT5&MmD&=v>X@djs#uyWa6C!GHY4 z+G|AY_}=jLew^J@-MqBz*vQZ2CTYd5YvF!yc>bq!)vGtE&eNu7^0fsOqj_i+EWtNf z5m?A=eLHvD&+*NPzc1#}6GnZV-rXyk Date: Sun, 28 Jul 2024 00:25:13 +0000 Subject: [PATCH 47/53] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-85115.yml | 4 --- html/changelogs/AutoChangeLog-pr-85208.yml | 4 --- html/changelogs/AutoChangeLog-pr-85244.yml | 5 --- html/changelogs/AutoChangeLog-pr-85245.yml | 4 --- html/changelogs/AutoChangeLog-pr-85246.yml | 4 --- html/changelogs/AutoChangeLog-pr-85247.yml | 4 --- html/changelogs/AutoChangeLog-pr-85253.yml | 4 --- html/changelogs/AutoChangeLog-pr-85258.yml | 4 --- html/changelogs/AutoChangeLog-pr-85260.yml | 4 --- html/changelogs/AutoChangeLog-pr-85262.yml | 4 --- html/changelogs/AutoChangeLog-pr-85270.yml | 4 --- html/changelogs/AutoChangeLog-pr-85272.yml | 4 --- html/changelogs/AutoChangeLog-pr-85273.yml | 4 --- html/changelogs/AutoChangeLog-pr-85274.yml | 4 --- html/changelogs/AutoChangeLog-pr-85282.yml | 4 --- html/changelogs/AutoChangeLog-pr-85283.yml | 4 --- html/changelogs/AutoChangeLog-pr-85285.yml | 4 --- html/changelogs/AutoChangeLog-pr-85286.yml | 4 --- html/changelogs/AutoChangeLog-pr-85288.yml | 4 --- html/changelogs/AutoChangeLog-pr-85289.yml | 4 --- html/changelogs/archive/2024-07.yml | 41 ++++++++++++++++++++++ 21 files changed, 41 insertions(+), 81 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-85115.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85208.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85244.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85245.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85246.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85247.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85253.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85258.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85260.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85262.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85270.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85272.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85273.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85274.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85282.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85283.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85285.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85286.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85288.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-85289.yml diff --git a/html/changelogs/AutoChangeLog-pr-85115.yml b/html/changelogs/AutoChangeLog-pr-85115.yml deleted file mode 100644 index d8ebc46cfd91a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85115.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DrDiasyl aka DrTuxedo" -delete-after: True -changes: - - sound: "Hearing and talking into the radio now produces a sound. Heads get a special sound." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85208.yml b/html/changelogs/AutoChangeLog-pr-85208.yml deleted file mode 100644 index e0f79580f2cbb..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85208.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Clicking on a table in the lootpanel with an item in-hand tries to place it in the center again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85244.yml b/html/changelogs/AutoChangeLog-pr-85244.yml deleted file mode 100644 index 80166c5556d99..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85244.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "Med sec telescreens are no longer the same item as the CMO telescreen." - - spellcheck: "correcte name for the CMO telescreen mount" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85245.yml b/html/changelogs/AutoChangeLog-pr-85245.yml deleted file mode 100644 index 9d3603d7ccd11..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85245.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "only the scream emote can be heard through walls" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85246.yml b/html/changelogs/AutoChangeLog-pr-85246.yml deleted file mode 100644 index f719d7950e4db..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85246.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "People with tooltips enabled no longer lag the server when they move their mouse. Oops." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85247.yml b/html/changelogs/AutoChangeLog-pr-85247.yml deleted file mode 100644 index fe03c6b7fcdca..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85247.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "lavaland no longer has roundstart atmos processing because of a passive vent" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85253.yml b/html/changelogs/AutoChangeLog-pr-85253.yml deleted file mode 100644 index 82de5cbc16bb7..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85253.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Mirage grenade dispensers and ionic jump jets now work" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85258.yml b/html/changelogs/AutoChangeLog-pr-85258.yml deleted file mode 100644 index 3b6ad850c5c78..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85258.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "JohnFulpWillard" -delete-after: True -changes: - - bugfix: "[Mafia] The show_help button no longer shows you who the Obsessed's target is." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85260.yml b/html/changelogs/AutoChangeLog-pr-85260.yml deleted file mode 100644 index 8f168c6816ca3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85260.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Players now receive a notification when trying to perform surgery steps that involve chemicals" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85262.yml b/html/changelogs/AutoChangeLog-pr-85262.yml deleted file mode 100644 index 2214b01528541..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85262.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "the sneeze projectile no longer makes a sound when making contact." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85270.yml b/html/changelogs/AutoChangeLog-pr-85270.yml deleted file mode 100644 index 26a4d5e5a0faa..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85270.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Deadgebert" -delete-after: True -changes: - - bugfix: "peg limbs can now be amputated" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85272.yml b/html/changelogs/AutoChangeLog-pr-85272.yml deleted file mode 100644 index f364d1d5d9f09..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85272.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Axidyuwu" -delete-after: True -changes: - - bugfix: "now Justice invisibility turns off in non combat mode as it supposed to" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85273.yml b/html/changelogs/AutoChangeLog-pr-85273.yml deleted file mode 100644 index c4753ff37f701..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85273.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Helg2" -delete-after: True -changes: - - rscadd: "Emergency climbing hooks now spawn in emergency boxes on all of the multi-z level stations." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85274.yml b/html/changelogs/AutoChangeLog-pr-85274.yml deleted file mode 100644 index da3f13efd4367..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85274.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "StrangeWeirdKitten" -delete-after: True -changes: - - bugfix: "Voidwalker should not run on planetary maps." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85282.yml b/html/changelogs/AutoChangeLog-pr-85282.yml deleted file mode 100644 index b46b38c535974..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85282.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "the default metal sound has been changed" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85283.yml b/html/changelogs/AutoChangeLog-pr-85283.yml deleted file mode 100644 index 1fb876e45fa73..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85283.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "gas tanks now have sound" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85285.yml b/html/changelogs/AutoChangeLog-pr-85285.yml deleted file mode 100644 index 91d6e35d6c5b1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85285.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - bugfix: "birdshot holodeck's lighting has been fixed." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85286.yml b/html/changelogs/AutoChangeLog-pr-85286.yml deleted file mode 100644 index 6e7843a626537..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85286.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "medkits now have sounds" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85288.yml b/html/changelogs/AutoChangeLog-pr-85288.yml deleted file mode 100644 index 2b8883c494405..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85288.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - bugfix: "Clown Ops gear has been returned to being available only to clown ops. Whoops!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-85289.yml b/html/changelogs/AutoChangeLog-pr-85289.yml deleted file mode 100644 index c66014d6b9ef9..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-85289.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - bugfix: "Monkey wizards can now interact with grand ritual runes." \ No newline at end of file diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml index 6fb93f944a96c..55c4a30a517d8 100644 --- a/html/changelogs/archive/2024-07.yml +++ b/html/changelogs/archive/2024-07.yml @@ -1367,3 +1367,44 @@ - bugfix: wawastation ordnance no longer has a light fixture on a window and looks objectively slightly better - bugfix: wawastation engineering water tanks are now highcap +2024-07-28: + 00-Steven: + - bugfix: Clicking on a table in the lootpanel with an item in-hand tries to place + it in the center again. + Axidyuwu: + - bugfix: now Justice invisibility turns off in non combat mode as it supposed to + Deadgebert: + - bugfix: peg limbs can now be amputated + DrDiasyl aka DrTuxedo: + - sound: Hearing and talking into the radio now produces a sound. Heads get a special + sound. + Helg2: + - rscadd: Emergency climbing hooks now spawn in emergency boxes on all of the multi-z + level stations. + JohnFulpWillard: + - bugfix: '[Mafia] The show_help button no longer shows you who the Obsessed''s + target is.' + LT3: + - bugfix: Players now receive a notification when trying to perform surgery steps + that involve chemicals + Rhials: + - bugfix: Monkey wizards can now interact with grand ritual runes. + - bugfix: Clown Ops gear has been returned to being available only to clown ops. + Whoops! + SmArtKar: + - bugfix: People with tooltips enabled no longer lag the server when they move their + mouse. Oops. + - bugfix: Mirage grenade dispensers and ionic jump jets now work + StrangeWeirdKitten: + - bugfix: Voidwalker should not run on planetary maps. + grungussuss: + - bugfix: Med sec telescreens are no longer the same item as the CMO telescreen. + - spellcheck: correcte name for the CMO telescreen mount + - bugfix: birdshot holodeck's lighting has been fixed. + - sound: medkits now have sounds + - sound: gas tanks now have sound + - sound: the default metal sound has been changed + - bugfix: lavaland no longer has roundstart atmos processing because of a passive + vent + - sound: only the scream emote can be heard through walls + - sound: the sneeze projectile no longer makes a sound when making contact. From 71d075358726f8f072c9608119d9b6ab01ff2953 Mon Sep 17 00:00:00 2001 From: Time-Green <7501474+Time-Green@users.noreply.github.com> Date: Sun, 28 Jul 2024 11:17:29 +0200 Subject: [PATCH 48/53] Fixes planet gravity not crushing and void eater not refreshing (#85305) Fixes #85303, fixes #85278 Fixes planetary gravity not killing voidwalkers and voided people. I used a screen alert but I shouldve used a status effect screen alert (apparently it matters), causing runtimes and breaking it aaaa Also someone refactored how pickup() works so it no longer gets called if you dont pick it up by clicking it. I think it's a little dumb but I can't find the PR that did it so whatever. Anyway it's not my fault woohoo!! ## Changelog :cl: fix: Fixes void eater not refreshing fix: Fixes planetary gravity not killing voidwalkers and voideds /:cl: --- .../antagonists/voidwalker/voidwalker_status_effects.dm | 7 ++++++- .../antagonists/voidwalker/voidwalker_void_eater.dm | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm b/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm index 6dc9cdc35ca7b..7934e757077af 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_status_effects.dm @@ -21,11 +21,16 @@ /datum/status_effect/planet_allergy id = "planet_allergy" duration = INFINITE - alert_type = /atom/movable/screen/alert/veryhighgravity + alert_type = /atom/movable/screen/alert/status_effect/veryhighgravity /datum/status_effect/planet_allergy/tick() owner.adjustBruteLoss(1) +/atom/movable/screen/alert/status_effect/veryhighgravity + name = "Crushing Gravity" + desc = "You're getting crushed by high gravity, picking up items and movement will be slowed. You'll also accumulate brute damage!" + icon_state = "paralysis" + /datum/status_effect/void_eatered duration = 10 SECONDS remove_on_fullheal = TRUE diff --git a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm index db638c2b94818..9df3eabab3d21 100644 --- a/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm +++ b/code/modules/antagonists/voidwalker/voidwalker_void_eater.dm @@ -31,7 +31,7 @@ AddComponent(/datum/component/temporary_glass_shatterer) -/obj/item/void_eater/pickup(mob/user) +/obj/item/void_eater/equipped(mob/user) . = ..() RegisterSignal(user, COMSIG_VOIDWALKER_SUCCESFUL_KIDNAP, PROC_REF(refresh)) From bab816a0c75557486ec32665cb79fc4baee52692 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sun, 28 Jul 2024 12:18:55 +0300 Subject: [PATCH 49/53] If you have auto fit viewport enabled, it will trigger upon entering or exiting fullscreen (#85302) ## About The Pull Request Automatically calls attempt_auto_fit_viewport() upon toggling fullscreen ## Why It's Good For The Game Fullscreen changes your viewport height but not width so if you're running stretch to fit (which is probably used by most of our players as fullhd does not integer scale) you have to manually use Fit Viewport verb every time you join the game and enter fullscreen which is rather annoying to do. ## Changelog :cl: qol: If you have auto fit viewport enabled, it will trigger upon entering or exiting fullscreen /:cl: --- code/modules/client/client_procs.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index e3f74e47c497d..ac3d6af179622 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -1206,6 +1206,7 @@ GLOBAL_LIST_INIT(blacklisted_builds, list( winset(usr, "mainwindow", "can-resize=true") winset(usr, "mainwindow", "is-maximized=false") winset(usr, "mainwindow", "on-size=attempt_auto_fit_viewport") + attempt_auto_fit_viewport() /client/verb/toggle_status_bar() set name = "Toggle Status Bar" From 2cd23b52674158097fd2d50722810bc16a8b6a46 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:20:33 +1200 Subject: [PATCH 50/53] Automatic changelog for PR #85305 [ci skip] --- html/changelogs/AutoChangeLog-pr-85305.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85305.yml diff --git a/html/changelogs/AutoChangeLog-pr-85305.yml b/html/changelogs/AutoChangeLog-pr-85305.yml new file mode 100644 index 0000000000000..14da28c2ee27d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85305.yml @@ -0,0 +1,5 @@ +author: "Time-Green" +delete-after: True +changes: + - bugfix: "Fixes void eater not refreshing" + - bugfix: "Fixes planetary gravity not killing voidwalkers and voideds" \ No newline at end of file From 7f9b5f08916bc38a9dc23311fb6c3b564ce23049 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:20:54 +1200 Subject: [PATCH 51/53] Automatic changelog for PR #85302 [ci skip] --- html/changelogs/AutoChangeLog-pr-85302.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85302.yml diff --git a/html/changelogs/AutoChangeLog-pr-85302.yml b/html/changelogs/AutoChangeLog-pr-85302.yml new file mode 100644 index 0000000000000..3797ee383bcb6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85302.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - qol: "If you have auto fit viewport enabled, it will trigger upon entering or exiting fullscreen" \ No newline at end of file From 4a41c970ea057601e11b4305c6e0c63deb500f02 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sun, 28 Jul 2024 12:25:49 +0300 Subject: [PATCH 52/53] Recyclers no longer recycle contents of indestructible items (#85251) ## About The Pull Request Closes #85189 Now uses a smarter loop that recursively adds contents when the item isnt indestructible. ## Changelog :cl: fix: Recyclers no longer recycle contents of indestructible items /:cl: --- code/game/machinery/recycler.dm | 60 ++++++++++++++++++++++----------- 1 file changed, 41 insertions(+), 19 deletions(-) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index ce1b82a83b408..8ce9265917d63 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -133,33 +133,55 @@ qdel(morsel) return - var/list/to_eat = (issilicon(morsel) ? list(morsel) : morsel.get_all_contents()) //eating borg contents leads to many bad things + var/list/atom/to_eat = list(morsel) var/living_detected = FALSE //technically includes silicons as well but eh var/list/nom = list() var/list/crunchy_nom = list() //Mobs have to be handled differently so they get a different list instead of checking them multiple times. + var/not_eaten = 0 - for(var/thing in to_eat) - var/obj/as_object = thing - if(istype(as_object)) - if(as_object.resistance_flags & INDESTRUCTIBLE) - if(!isturf(as_object.loc) && !isliving(as_object.loc)) - as_object.forceMove(loc) // so you still cant shove it in a locker - continue - var/obj/item/bodypart/head/as_head = thing - var/obj/item/mmi/as_mmi = thing - if(istype(thing, /obj/item/organ/internal/brain) || (istype(as_head) && locate(/obj/item/organ/internal/brain) in as_head) || (istype(as_mmi) && as_mmi.brain) || istype(thing, /obj/item/dullahan_relay)) - living_detected = TRUE - if(isitem(as_object)) - var/obj/item/as_item = as_object - if(as_item.item_flags & ABSTRACT) //also catches organs and bodyparts *stares* - continue - nom += thing - else if(isliving(thing)) + while (to_eat.len) + var/atom/movable/thing = to_eat[1] + to_eat -= thing + + if (thing.flags_1 & HOLOGRAM_1) + qdel(thing) + continue + + if (thing.resistance_flags & INDESTRUCTIBLE) + if (!isturf(thing.loc) && !isliving(thing.loc)) + thing.forceMove(loc) + not_eaten += 1 + continue + + if (isliving(thing)) living_detected = TRUE crunchy_nom += thing + if (!issilicon(thing)) + to_eat |= thing.contents + continue + + if (!isobj(thing)) + not_eaten += 1 + continue + + if (isitem(thing)) + var/obj/item/as_item = thing + if (as_item.item_flags & ABSTRACT) + not_eaten += 1 + continue + + if (istype(thing, /obj/item/organ/internal/brain) || istype(thing, /obj/item/dullahan_relay)) + living_detected = TRUE + + if (istype(thing, /obj/item/mmi)) + var/obj/item/mmi/mmi = thing + if (!isnull(mmi.brain)) + living_detected = TRUE + + nom += thing + to_eat |= thing.contents - var/not_eaten = to_eat.len - nom.len - crunchy_nom.len if(living_detected) // First, check if we have any living beings detected. if(obj_flags & EMAGGED) for(var/CRUNCH in crunchy_nom) // Eat them and keep going because we don't care about safety. From 8576f8ed291f85834dcf476a0bf2ad1ce1fd31f2 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Sun, 28 Jul 2024 21:39:22 +1200 Subject: [PATCH 53/53] Automatic changelog for PR #85251 [ci skip] --- html/changelogs/AutoChangeLog-pr-85251.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85251.yml diff --git a/html/changelogs/AutoChangeLog-pr-85251.yml b/html/changelogs/AutoChangeLog-pr-85251.yml new file mode 100644 index 0000000000000..b40f87748a9d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85251.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Recyclers no longer recycle contents of indestructible items" \ No newline at end of file