From 6d63f505c0255d9dd3500f77f8de16ced5f9534a Mon Sep 17 00:00:00 2001 From: DeltaFire <46569814+DeltaFire15@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:10:31 +0200 Subject: [PATCH 01/92] Rounds temperature protection to .1% accuracy (#85021) ## About The Pull Request Both `get_cold_protection()` and `get_heat_protection()` run into decimal precision issues due to several small percentage additions, which means that even if you have all protection flags present, the value returned will never be 1. ![image](https://github.com/user-attachments/assets/a19097e7-bb07-4bc0-af2d-481d01a7b880) ![image](https://github.com/user-attachments/assets/d453e125-7003-45c1-97fd-e8c8431a1b5a) This means you cannot check for if protection is at 100% if you wanted to short circuit some proc doing temperature calculations which don't need to be done if you have full protection, aswell as may lead to very minor drift. (I was doing something like that elsewhere which led me to find this problem and mirror this here). This rounds to 0.1% accuracy (0.001), which is both the smallest decimal used by the bodypart protection define values and is sufficiently large to rectify precision issues. ## Why It's Good For The Game This should save some coder from a bad day when they try to see if someone is 100% protected against temperature and it doesn't work. ## Changelog :cl: fix: cold- & heat protection no longer have decimal precision issues. /:cl: --- code/modules/mob/living/carbon/human/life.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index d8119c6a5279a..6bdbf8322f26e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -207,7 +207,7 @@ if(thermal_protection_flags & HAND_RIGHT) thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1, thermal_protection) + return min(1, round(thermal_protection, 0.001)) //See proc/get_heat_protection_flags(temperature) for the description of this proc. /mob/living/carbon/human/proc/get_cold_protection_flags(temperature) @@ -268,7 +268,7 @@ if(thermal_protection_flags & HAND_RIGHT) thermal_protection += THERMAL_PROTECTION_HAND_RIGHT - return min(1, thermal_protection) + return min(1, round(thermal_protection, 0.001)) /mob/living/carbon/human/has_smoke_protection() if(isclothing(wear_mask)) From e333c72d509c7de11d5819ef642d6e6d8f787c8f Mon Sep 17 00:00:00 2001 From: larentoun <31931237+larentoun@users.noreply.github.com> Date: Wed, 17 Jul 2024 21:11:04 +0300 Subject: [PATCH 02/92] Fixes Research queue runtimes (#85020) ## About The Pull Request Research Queue now checks the correct datum instead of trying to call procs on keys. This fixes automatic research for free nodes. ## Why It's Good For The Game Fixes good, runtimes bad ## Changelog :cl: fix: Free items in research queue will now correctly be researched automatically. /:cl: --- code/controllers/subsystem/research.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index f29169c76e72f..7bb83fa133d50 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -102,10 +102,11 @@ SUBSYSTEM_DEF(research) techweb_list.last_income = world.time - if(techweb_list.research_queue_nodes.len) + if(length(techweb_list.research_queue_nodes)) techweb_list.research_node_id(techweb_list.research_queue_nodes[1]) // Attempt to research the first node in queue if possible - for(var/datum/techweb_node/node as anything in techweb_list.research_queue_nodes) + for(var/node_id in techweb_list.research_queue_nodes) + var/datum/techweb_node/node = SSresearch.techweb_node_by_id(node_id) if(node.is_free(techweb_list)) // Automatically research all free nodes in queue if any techweb_list.research_node(node) From 131d9910a08a8d42efdd34cdb73e9cfa51a0b36e Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 17 Jul 2024 19:11:14 +0100 Subject: [PATCH 03/92] Point blank shots with piercing weapons no longer make the bullet fly north after hitting the target (#85019) ## About The Pull Request A bug uncovered by #84974. Honestly I am surprised that noone found this yet by point blanking someone with a piercing round, but for cutters this is very frequent behavior. There is no logical reason for this check's existence as its a function that always should be called before firing, no exceptions. ## Changelog :cl: fix: Point blank piercing shots no longer fly directly north after hitting their intended target /:cl: --- code/modules/projectiles/ammunition/_firing.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 1b1decd3649ee..e2afc1bd67e7f 100644 --- a/code/modules/projectiles/ammunition/_firing.dm +++ b/code/modules/projectiles/ammunition/_firing.dm @@ -81,9 +81,7 @@ var/direct_target if(target && curloc.Adjacent(targloc, target=targloc, mover=src)) //if the target is right on our location or adjacent (including diagonally if reachable) we'll skip the travelling code in the proj's fire() direct_target = target - if(!direct_target) - var/modifiers = params2list(params) - loaded_projectile.preparePixelProjectile(target, fired_from, modifiers, spread) + loaded_projectile.preparePixelProjectile(target, fired_from, params2list(params), spread) var/obj/projectile/loaded_projectile_cache = loaded_projectile loaded_projectile = null loaded_projectile_cache.fire(null, direct_target) From 3f9f949a77d07895b4cbae1a629e4a58aef5ab81 Mon Sep 17 00:00:00 2001 From: Odairu Date: Wed, 17 Jul 2024 14:13:06 -0400 Subject: [PATCH 04/92] Fixes a typo I noticed when working elsewhere in borg stuff (#85016) ## About The Pull Request Title ## Why It's Good For The Game Fixing typos - Untility Cyborg Upgrades -> Utility Cyborg Upgrades ## Changelog :cl: spellcheck: fixed a typo in borg research /:cl: --- code/modules/research/techweb/nodes/cyborg_nodes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 0a4fa91429484..5e0ad2f64e0e9 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -90,7 +90,7 @@ /datum/techweb_node/borg_utility id = TECHWEB_NODE_BORG_UTILITY - display_name = "Untility Cyborg Upgrades" + display_name = "Utility Cyborg Upgrades" description = "Let them wipe our floors for us." prereq_ids = list(TECHWEB_NODE_BORG_SERVICES, TECHWEB_NODE_SANITATION) design_ids = list( From babe9f490accea44dd1eda46118179d71f0ab0e9 Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Wed, 17 Jul 2024 23:43:45 +0530 Subject: [PATCH 05/92] [NO GBP] Fixes some incorrect reagent operations (#85017) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request - Fixes #85014. buffers use `intercept_reagents_transfer()` but this proc does not automatically call `update_total()` on the target & source reagent holders causing inconsistent results - `remove_reagent()` was sending signals for all reagents in the holder & not just for the reagents removed leading to false triggers & excess work for objects that hooked on this signal. That's fixed now too  ## Changelog :cl: fix: acid/base buffers should update your target & source holder fix: remove reagent operations won't trigger excessive workload /:cl: --- code/modules/plumbing/plumbers/_plumb_machinery.dm | 2 ++ code/modules/reagents/chemistry/holder/holder.dm | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/code/modules/plumbing/plumbers/_plumb_machinery.dm b/code/modules/plumbing/plumbers/_plumb_machinery.dm index c8564b15f1215..33c063bbfed20 100644 --- a/code/modules/plumbing/plumbers/_plumb_machinery.dm +++ b/code/modules/plumbing/plumbers/_plumb_machinery.dm @@ -190,6 +190,8 @@ transfer_amount = reagent.volume * part if(reagent.intercept_reagents_transfer(target_holder, amount)) + update_total() + target_holder.update_total() continue transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount, copy_data(reagent), chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. diff --git a/code/modules/reagents/chemistry/holder/holder.dm b/code/modules/reagents/chemistry/holder/holder.dm index 46d00e765a343..cbbef8966cb1b 100644 --- a/code/modules/reagents/chemistry/holder/holder.dm +++ b/code/modules/reagents/chemistry/holder/holder.dm @@ -249,7 +249,7 @@ cached_reagent.volume -= remove_amount //record the changes - removed_reagents += cached_reagent + removed_reagents[cached_reagent] = remove_amount total_removed_amount += remove_amount //if we reached here means we have found our specific reagent type so break @@ -257,8 +257,8 @@ break //inform others about our reagents being removed - for(var/datum/reagent/removed_reagent as anything in cached_reagents) - SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, removed_reagent, amount) + for(var/datum/reagent/removed_reagent as anything in removed_reagents) + SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, removed_reagent, removed_reagents[removed_reagent]) //update the holder & handle reactions update_total() @@ -476,6 +476,8 @@ if(preserve_data) trans_data = copy_data(reagent) if(reagent.intercept_reagents_transfer(target_holder, amount)) + update_total() + target_holder.update_total() continue transfered_amount = target_holder.add_reagent(reagent.type, transfer_amount * multiplier, trans_data, chem_temp, reagent.purity, reagent.ph, no_react = TRUE, ignore_splitting = reagent.chemical_flags & REAGENT_DONOTSPLIT) //we only handle reaction after every reagent has been transferred. if(!transfered_amount) From 590cfa862d1c55d7af98567a9bd2798a839e6c04 Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Wed, 17 Jul 2024 21:17:36 +0300 Subject: [PATCH 06/92] [no gbp] fix firebot range checks (#85018) ## About The Pull Request fixes sentient firebots attacking from a distance ## Why It's Good For The Game closes #85015 ## Changelog :cl: fix: fixes sentient firebots mauling things from a distance /:cl: --- .../modules/mob/living/basic/bots/firebot/firebot.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/basic/bots/firebot/firebot.dm b/code/modules/mob/living/basic/bots/firebot/firebot.dm index 31fa969fa5983..e6eeaa2031cc6 100644 --- a/code/modules/mob/living/basic/bots/firebot/firebot.dm +++ b/code/modules/mob/living/basic/bots/firebot/firebot.dm @@ -74,15 +74,15 @@ internal_ext.refill() /mob/living/basic/bot/firebot/melee_attack(atom/attacked_atom, list/modifiers, ignore_cooldown = FALSE) - use_extinguisher(attacked_atom) + use_extinguisher(attacked_atom, modifiers) /mob/living/basic/bot/firebot/RangedAttack(atom/attacked_atom, list/modifiers) - use_extinguisher(attacked_atom) + use_extinguisher(attacked_atom, modifiers) -/mob/living/basic/bot/firebot/proc/use_extinguisher(atom/attacked_atom) +/mob/living/basic/bot/firebot/proc/use_extinguisher(atom/attacked_atom, list/modifiers) if(!(bot_mode_flags & BOT_MODE_ON)) return - spray_water(attacked_atom) + spray_water(attacked_atom, modifiers) /mob/living/basic/bot/firebot/emag_act(mob/user, obj/item/card/emag/emag_card) . = ..() @@ -137,12 +137,12 @@ foam.start() COOLDOWN_START(src, foam_cooldown, FOAM_INTERVAL) -/mob/living/basic/bot/firebot/proc/spray_water(atom/attacked_atom) +/mob/living/basic/bot/firebot/proc/spray_water(atom/attacked_atom, list/modifiers) if(firebot_mode_flags & FIREBOT_STATIONARY_MODE) flick("firebots_use", src) else flick("firebot1_use", src) - internal_ext?.melee_attack_chain(src, attacked_atom) + internal_ext?.interact_with_atom(attacked_atom, src, modifiers) /mob/living/basic/bot/firebot/update_icon_state() . = ..() From 31c26034c30a3bbf75d9e9f67f4a68a22cec0f87 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:04 +1200 Subject: [PATCH 07/92] Automatic changelog for PR #85021 [ci skip] --- html/changelogs/AutoChangeLog-pr-85021.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85021.yml diff --git a/html/changelogs/AutoChangeLog-pr-85021.yml b/html/changelogs/AutoChangeLog-pr-85021.yml new file mode 100644 index 0000000000000..f909696ea62e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85021.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "cold- & heat protection no longer have decimal precision issues." \ No newline at end of file From e5b5d04dbefed0fea95bdf7c717b2db20a407bef Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 17 Jul 2024 19:28:12 +0100 Subject: [PATCH 08/92] Projectiles now can hit border objects on other turfs instead of passing through them (#84975) ## About The Pull Request Title. Due to Guncode:tm: firing at a directional window/windoor/whatever facing you will make the projectile pass through it due to incorrect arguments (it does not ignore projectile's current loc while it should) Originally discovered by Kapu ## Changelog :cl: SmArtKar, Kapu balance: Projectiles now can hit border objects on other turfs instead of passing through them /:cl: --- code/modules/projectiles/projectile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 7870c10e9ef4a..000ce04e5b070 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -565,7 +565,7 @@ */ /obj/projectile/proc/select_target(turf/our_turf, atom/target, atom/bumped) // 1. special bumped border object check - if((bumped?.flags_1 & ON_BORDER_1) && can_hit_target(bumped, original == bumped, FALSE, TRUE)) + if((bumped?.flags_1 & ON_BORDER_1) && can_hit_target(bumped, original == bumped, TRUE, TRUE)) return bumped // 2. original if(can_hit_target(original, TRUE, FALSE, original == bumped)) From 148d1c428bc62dc527031465ca0dd1147a1f6154 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:13 +1200 Subject: [PATCH 09/92] Automatic changelog for PR #85019 [ci skip] --- html/changelogs/AutoChangeLog-pr-85019.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85019.yml diff --git a/html/changelogs/AutoChangeLog-pr-85019.yml b/html/changelogs/AutoChangeLog-pr-85019.yml new file mode 100644 index 0000000000000..482723e656614 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85019.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Point blank piercing shots no longer fly directly north after hitting their intended target" \ No newline at end of file From edac0fd76f9add349b81d4f32c1377d7873b4a98 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:14 +1200 Subject: [PATCH 10/92] Automatic changelog for PR #85020 [ci skip] --- html/changelogs/AutoChangeLog-pr-85020.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85020.yml diff --git a/html/changelogs/AutoChangeLog-pr-85020.yml b/html/changelogs/AutoChangeLog-pr-85020.yml new file mode 100644 index 0000000000000..227c28cc1626a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85020.yml @@ -0,0 +1,4 @@ +author: "larentoun" +delete-after: True +changes: + - bugfix: "Free items in research queue will now correctly be researched automatically." \ No newline at end of file From f1adc49bc29e8361de59979fac2264f6e01ae306 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:29 +1200 Subject: [PATCH 11/92] Automatic changelog for PR #85016 [ci skip] --- html/changelogs/AutoChangeLog-pr-85016.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85016.yml diff --git a/html/changelogs/AutoChangeLog-pr-85016.yml b/html/changelogs/AutoChangeLog-pr-85016.yml new file mode 100644 index 0000000000000..7ef0359c960c3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85016.yml @@ -0,0 +1,4 @@ +author: "imedial" +delete-after: True +changes: + - spellcheck: "fixed a typo in borg research" \ No newline at end of file From fbfdcc89d2e4f04800b97f86229024c5c1c34513 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:31 +1200 Subject: [PATCH 12/92] Automatic changelog for PR #85017 [ci skip] --- html/changelogs/AutoChangeLog-pr-85017.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85017.yml diff --git a/html/changelogs/AutoChangeLog-pr-85017.yml b/html/changelogs/AutoChangeLog-pr-85017.yml new file mode 100644 index 0000000000000..79a547e86946c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85017.yml @@ -0,0 +1,5 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "acid/base buffers should update your target & source holder" + - bugfix: "remove reagent operations won't trigger excessive workload" \ No newline at end of file From 514e62ecadd252f0cbb4d6b11e31cd2f9a7809aa Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:28:49 +1200 Subject: [PATCH 13/92] Automatic changelog for PR #85018 [ci skip] --- html/changelogs/AutoChangeLog-pr-85018.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85018.yml diff --git a/html/changelogs/AutoChangeLog-pr-85018.yml b/html/changelogs/AutoChangeLog-pr-85018.yml new file mode 100644 index 0000000000000..fccc9ff27cc1b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85018.yml @@ -0,0 +1,4 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - bugfix: "fixes sentient firebots mauling things from a distance" \ No newline at end of file From 976c830a5b7ac12aedd67a8ddc361f6d29e2b2ab Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Wed, 17 Jul 2024 23:59:49 +0530 Subject: [PATCH 14/92] Fixes runtime with storage datum & portable chem mixer beaker insertion (#84966) ## About The Pull Request - Fixes this when hiding the storage ui ![Screenshot (436)](https://github.com/user-attachments/assets/a5e2e512-bbf6-4b55-a7e4-01a9e89afe39) - Fixes #84963 ## Changelog :cl: fix: fixes runtime in storage datums when hiding the ui fix: you can insert the withdrawal beaker into the portable chem mixer when locked /:cl: --- code/datums/storage/storage.dm | 2 +- .../storage/subtypes/portable_chem_mixer.dm | 16 ++++++++++++++++ .../machinery/portable_chem_mixer.dm | 19 ++++++------------- tgstation.dme | 1 + 4 files changed, 24 insertions(+), 14 deletions(-) create mode 100644 code/datums/storage/subtypes/portable_chem_mixer.dm diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index cad7e84ebe0f3..a01bb21a451e4 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -1027,7 +1027,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) var/atom/movable/movable_loc = real_location movable_loc.lose_active_storage(src) - if (isnull(storage_interfaces[to_hide])) + if (!length(storage_interfaces) || isnull(storage_interfaces[to_hide])) return TRUE is_using -= to_hide diff --git a/code/datums/storage/subtypes/portable_chem_mixer.dm b/code/datums/storage/subtypes/portable_chem_mixer.dm new file mode 100644 index 0000000000000..fcf5c6ec412bc --- /dev/null +++ b/code/datums/storage/subtypes/portable_chem_mixer.dm @@ -0,0 +1,16 @@ +/datum/storage/portable_chem_mixer + max_total_storage = 200 + max_slots = 50 + +/datum/storage/portable_chem_mixer/New(atom/parent, max_slots, max_specific_storage, max_total_storage) + . = ..() + + var/static/list/obj/item/reagent_containers/containers = list( + /obj/item/reagent_containers/cup/beaker, + /obj/item/reagent_containers/cup/bottle, + /obj/item/reagent_containers/cup/tube, + /obj/item/reagent_containers/cup/glass/waterbottle, + /obj/item/reagent_containers/condiment, + ) + + set_holdable(containers) diff --git a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm index 016e55012c570..9c92cc631be79 100644 --- a/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm +++ b/code/modules/reagents/chemistry/machinery/portable_chem_mixer.dm @@ -11,6 +11,7 @@ custom_premium_price = PAYCHECK_CREW * 14 interaction_flags_click = FORBID_TELEKINESIS_REACH interaction_flags_mouse_drop = FORBID_TELEKINESIS_REACH + storage_type = /datum/storage/portable_chem_mixer ///Creating an empty slot for a beaker that can be added to dispense into var/obj/item/reagent_containers/beaker @@ -21,15 +22,7 @@ /obj/item/storage/portable_chem_mixer/Initialize(mapload) . = ..() - atom_storage.max_total_storage = 200 - atom_storage.max_slots = 50 - atom_storage.set_holdable(list( - /obj/item/reagent_containers/cup/beaker, - /obj/item/reagent_containers/cup/bottle, - /obj/item/reagent_containers/cup/tube, - /obj/item/reagent_containers/cup/glass/waterbottle, - /obj/item/reagent_containers/condiment, - )) + register_context() /obj/item/storage/portable_chem_mixer/Destroy() @@ -107,18 +100,18 @@ /obj/item/storage/portable_chem_mixer/ex_act(severity, target) return severity > EXPLODE_LIGHT ? ..() : FALSE -/obj/item/storage/portable_chem_mixer/item_interaction(mob/living/user, obj/item/weapon, list/modifiers) +/obj/item/storage/portable_chem_mixer/storage_insert_on_interacted_with(datum/storage, obj/item/weapon, mob/living/user) if (!atom_storage.locked || \ (weapon.item_flags & ABSTRACT) || \ (weapon.flags_1 & HOLOGRAM_1) || \ !is_reagent_container(weapon) || \ !weapon.is_open_container() \ ) - return NONE + return TRUE //continue with regular insertion replace_beaker(user, weapon) update_appearance() - return ITEM_INTERACT_SUCCESS + return FALSE //block insertion cause we handled it ourselves /** * Replaces the beaker of the portable chemical mixer with another beaker, or simply adds the new beaker if none is in currently @@ -267,7 +260,7 @@ SStgui.close_uis(src) else atom_storage.locked = STORAGE_FULLY_LOCKED - atom_storage.hide_contents(usr) + atom_storage.hide_contents(user) update_appearance() return CLICK_ACTION_SUCCESS diff --git a/tgstation.dme b/tgstation.dme index f340a6efd2c93..e33a581444a75 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1889,6 +1889,7 @@ #include "code\datums\storage\subtypes\implant.dm" #include "code\datums\storage\subtypes\organ_box.dm" #include "code\datums\storage\subtypes\pockets.dm" +#include "code\datums\storage\subtypes\portable_chem_mixer.dm" #include "code\datums\storage\subtypes\rped.dm" #include "code\datums\storage\subtypes\surgery_tray.dm" #include "code\datums\storage\subtypes\trash.dm" From f31ae8e8f525e3ea2ff7ad63dbe272989fb81c56 Mon Sep 17 00:00:00 2001 From: Artemchik542 <32270644+Artemchik542@users.noreply.github.com> Date: Thu, 18 Jul 2024 01:31:05 +0700 Subject: [PATCH 15/92] Justice mech invisibility fix (#84906) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## About The Pull Request Closes: https://github.com/tgstation/tgstation/issues/84894 Fixes a bug if you exited the mech and it was in “stealth mode” at the time. This will make your Mech completely unusable. Originally bug found on Massmeta server. ## Why It's Good For The Game Have you spent a lot of TC on your new car and forgotten where you parked it? - Skill Isuue. ## Changelog :cl: fix: Justice mech invisibility fix /:cl: --- code/modules/vehicles/mecha/combat/justice.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/vehicles/mecha/combat/justice.dm b/code/modules/vehicles/mecha/combat/justice.dm index babdb8af17b99..e99632394a1b7 100644 --- a/code/modules/vehicles/mecha/combat/justice.dm +++ b/code/modules/vehicles/mecha/combat/justice.dm @@ -57,8 +57,9 @@ /obj/vehicle/sealed/mecha/justice/update_icon_state() . = ..() - if(LAZYLEN(occupants)) - icon_state = weapons_safety ? "[base_icon_state]" : "[base_icon_state]-angry" + if(!LAZYLEN(occupants)) + return + icon_state = weapons_safety ? "[base_icon_state]" : "[base_icon_state]-angry" if(!has_gravity()) icon_state = "[icon_state]-fly" From 53eca935b4007e02ecb6f7c89bb0ce34874b258b Mon Sep 17 00:00:00 2001 From: norsvenska <73006946+norsvenska@users.noreply.github.com> Date: Wed, 17 Jul 2024 20:31:38 +0200 Subject: [PATCH 16/92] Removes a rogue apostrophe from DeltaStation's monkey pen door (#85022) ## About The Pull Request DeltaStation's monkey pen windoor had the name "'Monkey Pen". This changes it to "Monkey Pen". ## Why It's Good For The Game That apostrophe shouldn't be there ## Changelog :cl: spellcheck: Removed an unnecessary apostrophe in DeltaStation's genetics monkey pen door. /:cl: --- _maps/map_files/Deltastation/DeltaStation2.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f4691cfb2ab04..8a25706a1f73c 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -32151,7 +32151,7 @@ /area/station/science/research/abandoned) "hXQ" = ( /obj/machinery/door/window/left/directional/east{ - name = "'Monkey Pen"; + name = "Monkey Pen"; req_access = list("genetics") }, /obj/structure/flora/bush/lavendergrass, From 218d98a4d89ed3a21cc2d26e0d701ab030b49611 Mon Sep 17 00:00:00 2001 From: DATAxPUNGED <44149906+DATA-xPUNGED@users.noreply.github.com> Date: Wed, 17 Jul 2024 15:40:23 -0300 Subject: [PATCH 17/92] Fixes Plague Doctor Mask not being able to use internals (#85023) ## About The Pull Request Fixes #85007 ## Changelog :cl: fix: Plague Doctor Mask can now be used with internals again, and is no longer unintentionally pepperproof. /:cl: --- code/modules/clothing/masks/gasmask.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 5eff7eb3e7afe..cab7a6557e3c4 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -255,7 +255,7 @@ GLOBAL_LIST_INIT(clown_mask_options, list( flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT|HIDEHAIR inhand_icon_state = "gas_mask" has_fov = FALSE - clothing_flags = BLOCK_GAS_SMOKE_EFFECT + clothing_flags = BLOCK_GAS_SMOKE_EFFECT|MASKINTERNALS /obj/item/clothing/mask/gas/syndicate name = "syndicate mask" From a6672f9784b2f1e2f0ef0876b2d0cbea37fdda41 Mon Sep 17 00:00:00 2001 From: NewyearnewmeUwu <70115628+NewyearnewmeUwu@users.noreply.github.com> Date: Wed, 17 Jul 2024 11:40:43 -0700 Subject: [PATCH 18/92] FIxes the pipe sprite up a bit more. (#85027) ## About The Pull Request I noticed something I didn't really like about two of the sprites (the east and west facing sprites) with the smoking pipe so I adjusted it a little bit. Basically, the sprites were different heights so I just mirrored the pipe sprite from the west to be the new east sprite. This is what it looks like now. ![image](https://github.com/user-attachments/assets/605ace71-6172-4df6-84da-821a9df5e339) ![image](https://github.com/user-attachments/assets/554b3309-fdcd-4814-8529-72f1f53c60a5) ## Why It's Good For The Game It looks better? ## Changelog :cl: image: the smoking pipe east/west sprites are now more consistent /:cl: --- icons/mob/clothing/mask.dmi | Bin 49529 -> 49632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 22c7ae3ac49c0afdd0dba88febf4be9dfb41afb5..5f577c7e255d963ad2688649240afd337e1993fc 100644 GIT binary patch delta 28766 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 delta 28679 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 Date: Thu, 18 Jul 2024 06:55:07 +1200 Subject: [PATCH 19/92] Automatic changelog for PR #84975 [ci skip] --- html/changelogs/AutoChangeLog-pr-84975.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84975.yml diff --git a/html/changelogs/AutoChangeLog-pr-84975.yml b/html/changelogs/AutoChangeLog-pr-84975.yml new file mode 100644 index 0000000000000..38ceb0f2d69fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84975.yml @@ -0,0 +1,4 @@ +author: "SmArtKar, Kapu" +delete-after: True +changes: + - balance: "Projectiles now can hit border objects on other turfs instead of passing through them" \ No newline at end of file From 069fe1d22540b0f5137bc649130b98ae9f18a053 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:58:33 +1200 Subject: [PATCH 20/92] Automatic changelog for PR #84966 [ci skip] --- html/changelogs/AutoChangeLog-pr-84966.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84966.yml diff --git a/html/changelogs/AutoChangeLog-pr-84966.yml b/html/changelogs/AutoChangeLog-pr-84966.yml new file mode 100644 index 0000000000000..3cf6bdf3d3dab --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84966.yml @@ -0,0 +1,5 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "fixes runtime in storage datums when hiding the ui" + - bugfix: "you can insert the withdrawal beaker into the portable chem mixer when locked" \ No newline at end of file From 6dde57c8149df921128bfa9cbdf7c629b443ba92 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:58:52 +1200 Subject: [PATCH 21/92] Automatic changelog for PR #84906 [ci skip] --- html/changelogs/AutoChangeLog-pr-84906.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-84906.yml diff --git a/html/changelogs/AutoChangeLog-pr-84906.yml b/html/changelogs/AutoChangeLog-pr-84906.yml new file mode 100644 index 0000000000000..431b9e9fc6d94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-84906.yml @@ -0,0 +1,4 @@ +author: "Artemchik542" +delete-after: True +changes: + - bugfix: "Justice mech invisibility fix" \ No newline at end of file From 96259ae1f8d25c2ce0d666df5e2da01729ec768c Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:59:09 +1200 Subject: [PATCH 22/92] Automatic changelog for PR #85022 [ci skip] --- html/changelogs/AutoChangeLog-pr-85022.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85022.yml diff --git a/html/changelogs/AutoChangeLog-pr-85022.yml b/html/changelogs/AutoChangeLog-pr-85022.yml new file mode 100644 index 0000000000000..cd89b2821af83 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85022.yml @@ -0,0 +1,4 @@ +author: "norsvenska" +delete-after: True +changes: + - spellcheck: "Removed an unnecessary apostrophe in DeltaStation's genetics monkey pen door." \ No newline at end of file From 953f01130474b81211e0f2b01d1b6b6907ffcd27 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:59:35 +1200 Subject: [PATCH 23/92] Automatic changelog for PR #85023 [ci skip] --- html/changelogs/AutoChangeLog-pr-85023.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85023.yml diff --git a/html/changelogs/AutoChangeLog-pr-85023.yml b/html/changelogs/AutoChangeLog-pr-85023.yml new file mode 100644 index 0000000000000..82ea406f70b0d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85023.yml @@ -0,0 +1,4 @@ +author: "DATA-xPUNGED" +delete-after: True +changes: + - bugfix: "Plague Doctor Mask can now be used with internals again, and is no longer unintentionally pepperproof." \ No newline at end of file From 9ff9d557549f378465ce27a86fc465aabcea7af2 Mon Sep 17 00:00:00 2001 From: orange man <61334995+comfyorange@users.noreply.github.com> Date: Thu, 18 Jul 2024 06:59:48 +1200 Subject: [PATCH 24/92] Automatic changelog for PR #85027 [ci skip] --- html/changelogs/AutoChangeLog-pr-85027.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-85027.yml diff --git a/html/changelogs/AutoChangeLog-pr-85027.yml b/html/changelogs/AutoChangeLog-pr-85027.yml new file mode 100644 index 0000000000000..e480bb437b0ad --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-85027.yml @@ -0,0 +1,4 @@ +author: "NewyearnewmeUwu" +delete-after: True +changes: + - image: "the smoking pipe east/west sprites are now more consistent" \ No newline at end of file From c5ac7b7297815e56babe4c5116f7e7a5111ffba9 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Wed, 17 Jul 2024 21:15:54 +0100 Subject: [PATCH 25/92] Ghosts once again can see people's true names and roundstart jobs (#84951) ## About The Pull Request #83186 made it so ghosts are fooled by disguises, like wearing a mask and an ID. This PR fixes that behavior, instead always displaying the person's real name and their face/ID name (if their face name is somehow different from real name) in brackets. Additionally, this PR makes orbit menu prioritize "real" job name and icon, aka the ones the person spawned with. If they don't have an assigned job, it will fall back to current behavior of looking it up from their ID. Also, searching people includes both their fake and real name. ## Why It's Good For The Game Ghosts really, really shouldn't be fooled by wearing a gas mask and an ID. **Especially** admin ghosts. ## Changelog :cl: qol: Ghost orbit menu now always displays person's real name and their roundstart job and cannot be fooled by disguises. /:cl: --- code/game/atom/atom_examine.dm | 3 ++- code/modules/mob/dead/observer/orbit.dm | 22 ++++++++++++++---- .../mob/living/carbon/human/human_helpers.dm | 18 ++++++++++++--- .../tgui/interfaces/Orbit/JobIcon.tsx | 11 +++++---- .../tgui/interfaces/Orbit/OrbitBlade.tsx | 23 +++++++++++++++++-- .../interfaces/Orbit/OrbitCollapsible.tsx | 6 +++-- .../tgui/interfaces/Orbit/OrbitItem.tsx | 9 +++++--- .../tgui/interfaces/Orbit/OrbitSearchBar.tsx | 13 +++++++++++ .../tgui/interfaces/Orbit/OrbitTooltip.tsx | 10 ++++---- .../packages/tgui/interfaces/Orbit/helpers.ts | 3 ++- tgui/packages/tgui/interfaces/Orbit/index.tsx | 5 ++++ tgui/packages/tgui/interfaces/Orbit/types.ts | 2 ++ .../tgui/styles/interfaces/Orbit.scss | 2 +- 13 files changed, 101 insertions(+), 26 deletions(-) diff --git a/code/game/atom/atom_examine.dm b/code/game/atom/atom_examine.dm index ad1d832227780..7e3088b830083 100644 --- a/code/game/atom/atom_examine.dm +++ b/code/game/atom/atom_examine.dm @@ -105,5 +105,6 @@ return name_chaser /// Used by mobs to determine the name for someone wearing a mask, or with a disfigured or missing face. By default just returns the atom's name. add_id_name will control whether or not we append "(as [id_name])". -/atom/proc/get_visible_name(add_id_name) +/// force_real_name will always return real_name and add (as face_name/id_name) if it doesn't match their appearance +/atom/proc/get_visible_name(add_id_name, force_real_name) return name diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index ee0b4528995ef..bdb0b7ce37e88 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -211,13 +211,25 @@ GLOBAL_DATUM_INIT(orbit_menu, /datum/orbit_menu, new) if(issilicon(player)) serialized["job"] = player.job serialized["icon"] = "borg" - else - var/obj/item/card/id/id_card = player.get_idcard(hand_first = FALSE) - serialized["job"] = id_card?.get_trim_assignment() - serialized["icon"] = id_card?.get_trim_sechud_icon_state() + return serialized - return serialized + var/obj/item/card/id/id_card = player.get_idcard(hand_first = FALSE) + serialized["job"] = id_card?.get_trim_assignment() + serialized["icon"] = id_card?.get_trim_sechud_icon_state() + + var/datum/job/job = player.mind?.assigned_role + if (isnull(job)) + return serialized + serialized["mind_job"] = job.title + var/datum/outfit/outfit = job.get_outfit() + if (isnull(outfit)) + return serialized + + var/datum/id_trim/trim = outfit.id_trim + if (!isnull(trim)) + serialized["mind_icon"] = trim::sechud_icon_state + return serialized /// Gets a list: Misc data and whether it's critical. Handles all snowflakey type cases /datum/orbit_menu/proc/get_misc_data(atom/movable/atom_poi) as /list diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 1fe6555cddf9c..3a9004618470f 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -57,15 +57,27 @@ return if_no_id //repurposed proc. Now it combines get_id_name() and get_face_name() to determine a mob's name variable. Made into a separate proc as it'll be useful elsewhere -/mob/living/carbon/human/get_visible_name(add_id_name = TRUE) - if(HAS_TRAIT(src, TRAIT_UNKNOWN)) - return "Unknown" +/mob/living/carbon/human/get_visible_name(add_id_name = TRUE, force_real_name = FALSE) var/list/identity = list(null, null) SEND_SIGNAL(src, COMSIG_HUMAN_GET_VISIBLE_NAME, identity) var/signal_face = LAZYACCESS(identity, VISIBLE_NAME_FACE) var/signal_id = LAZYACCESS(identity, VISIBLE_NAME_ID) var/face_name = !isnull(signal_face) ? signal_face : get_face_name("") var/id_name = !isnull(signal_id) ? signal_id : get_id_name("") + if (force_real_name) + var/fake_name + if (face_name && face_name != real_name) + fake_name = face_name + if(add_id_name && id_name && id_name != real_name) + if (!isnull(fake_name) && id_name != face_name) + fake_name = "[fake_name]/[id_name]" + else + fake_name = id_name + if (HAS_TRAIT(src, TRAIT_UNKNOWN) || (!face_name && !id_name)) + fake_name = "Unknown" + return "[real_name][fake_name ? " (as [fake_name])" : ""]" + if(HAS_TRAIT(src, TRAIT_UNKNOWN)) + return "Unknown" if(face_name) if(add_id_name && id_name && (id_name != face_name)) return "[face_name] (as [id_name])" diff --git a/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx b/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx index 2d584bfc6b13d..713d82eacee69 100644 --- a/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx @@ -4,6 +4,7 @@ import { Antagonist, Observable } from './types'; type Props = { item: Observable | Antagonist; + realNameDisplay: boolean; }; type IconSettings = { @@ -22,7 +23,7 @@ const antagIcon: IconSettings = { }; export function JobIcon(props: Props) { - const { item } = props; + const { item, realNameDisplay } = props; let iconSettings: IconSettings; if ('antag' in item) { @@ -32,16 +33,18 @@ export function JobIcon(props: Props) { } // We don't need to cast here but typescript isn't smart enough to know that - const { icon = '', job = '' } = item; + const { icon = '', job = '', mind_icon = '', mind_job = '' } = item; + const usedIcon = realNameDisplay ? mind_icon || icon : icon; + const usedJob = realNameDisplay ? mind_job || job : job; return (
{icon === 'borg' ? ( - + ) : ( (); const { orbiting } = data; - const { setBladeOpen } = useContext(OrbitContext); + const { setBladeOpen, realNameDisplay, setRealNameDisplay } = + useContext(OrbitContext); return ( @@ -44,6 +45,24 @@ export function OrbitBlade(props) { + +
setRealNameDisplay(!realNameDisplay)} + /> + } + color="label" + title="Real Name Display" + > + Real Name mode will display actual character names and their + roundstart jobs insteas of being based on their worn ID. If the person + lacks a roundstart job, it will still display their ID job icon. +
+
{!!orbiting && ( @@ -115,7 +134,7 @@ function OrbitInfo(props) { - + {job} diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx index fa5e78bd1f725..bc436d46204df 100644 --- a/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitCollapsible.tsx @@ -25,7 +25,8 @@ type Props = { export function OrbitCollapsible(props: Props) { const { color, section = [], title } = props; - const { autoObserve, searchQuery, viewMode } = useContext(OrbitContext); + const { autoObserve, realNameDisplay, searchQuery, viewMode } = + useContext(OrbitContext); const filteredSection = section.filter((observable) => isJobOrNameMatch(observable, searchQuery), @@ -53,6 +54,7 @@ export function OrbitCollapsible(props: Props) { const content = ( } + content={} key={item.ref} position="bottom-start" > diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx index 992904988ece4..b2490c0b3c4c1 100644 --- a/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx @@ -9,13 +9,14 @@ import { Antagonist, Observable, OrbitData, ViewMode } from './types'; type Props = { item: Observable | Antagonist; autoObserve: boolean; + realNameDisplay: boolean; viewMode: ViewMode; color: string | undefined; }; /** Each button on the observable section */ export function OrbitItem(props: Props) { - const { item, autoObserve, viewMode, color } = props; + const { item, autoObserve, realNameDisplay, viewMode, color } = props; const { full_name, icon, job, name, orbiters, ref } = item; const { act, data } = useBackend(); @@ -33,7 +34,7 @@ export function OrbitItem(props: Props) { display: 'flex', }} > - {validIcon && } + {validIcon && }