From 4580240c3188eba1ef95868cef5c7cc9e542db87 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 14 Aug 2024 00:39:23 +0000 Subject: [PATCH 001/257] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-29272.yml | 4 ---- html/changelogs/archive/2024-08.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-29272.yml diff --git a/html/changelogs/AutoChangeLog-pr-29272.yml b/html/changelogs/AutoChangeLog-pr-29272.yml deleted file mode 100644 index bf0d1c7f7d0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-29272.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Odairu" -delete-after: True -changes: - - bugfix: "fixes borg lights leaving for no raisin" \ No newline at end of file diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml index 3a1480d591d..a93596b9001 100644 --- a/html/changelogs/archive/2024-08.yml +++ b/html/changelogs/archive/2024-08.yml @@ -324,3 +324,6 @@ name SkyratBot: - bugfix: Felinids no longer phase through diagonal gaps upon seeing a laser +2024-08-14: + Odairu: + - bugfix: fixes borg lights leaving for no raisin From fae97df98d4a230ed90c99c3917186f55bc178ab Mon Sep 17 00:00:00 2001 From: Odairu <39929315+Odairu@users.noreply.github.com> Date: Wed, 14 Aug 2024 04:38:57 -0400 Subject: [PATCH 002/257] Update modules_ninja.dm --- code/modules/mod/modules/modules_ninja.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index cfa95fb8a59..a5215341a06 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -72,9 +72,11 @@ cooldown_time = 3 SECONDS /obj/item/mod/module/stealth/ninja/on_activation() + . = ..() ADD_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) /obj/item/mod/module/stealth/ninja/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() REMOVE_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) ///Camera Vision - Prevents flashes, blocks tracking. From cb68f4362a6007d04af648e3be36bda8b41a9d01 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Wed, 14 Aug 2024 07:18:10 -0400 Subject: [PATCH 003/257] ERTs no longer humanize plasmamen (#85631) ## About The Pull Request This one's a bit complex, stay with me here. So, the ERT system has support for enforcing all ERT members to be human, or if they will be spawned as their selected species. ![image](https://github.com/user-attachments/assets/14aeaabc-ac47-44dd-811d-a25525d926ea) This addresses plasmamen by including plasmamen outfits that are equipped prior to the actual outfit they're given, added in #56987. ![image](https://github.com/user-attachments/assets/2b3192f9-2aa7-48eb-8ce3-ff58fa0883e8) Despite this support, plasmamen never spawn as plasmamen, as they are missing the `ERT_SPAWN` changeflag. This is because as the body is created, the ERT spawning system human-ifies them to prevent them from exploding. This system existed in place prior to #56987, but it didn't work. ![image](https://github.com/user-attachments/assets/6b803c80-ded6-48d6-94a6-781efda89642) Fortunately(?) #58870 fixed it, but in doing so nullified the work done in #56987 as plasmamen could no longer be plasmamen when the `plasmaman_outfit` check was reached. They had already become human. If this reads a bit weirdly its because this was originally just going to be an issue report. I finished writing it and decided "well why not just fix it instead dorkus". ![image](https://github.com/user-attachments/assets/dd4b74af-b89e-4ecf-8bb4-0d3199a52649) ## Why It's Good For The Game Fixes a problem caused by, ironically, a logic fix. ## Changelog :cl: Rhials fix: Centcom ERT hiring standards have been expanded to include plasmamen, again. /:cl: --- code/modules/admin/verbs/ert.dm | 2 +- code/modules/antagonists/ert/ert.dm | 4 ++++ .../mob/living/carbon/human/species_types/plasmamen.dm | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/verbs/ert.dm b/code/modules/admin/verbs/ert.dm index 5903a2196dc..d87f75cd0c3 100644 --- a/code/modules/admin/verbs/ert.dm +++ b/code/modules/admin/verbs/ert.dm @@ -228,7 +228,7 @@ chosen_candidate.client.prefs.safe_transfer_prefs_to(ert_operative, is_antag = TRUE) ert_operative.key = chosen_candidate.key - if(ertemplate.enforce_human || !(ert_operative.dna.species.changesource_flags & ERT_SPAWN)) // Don't want any exploding plasmemes + if(ertemplate.enforce_human || !(ert_operative.dna.species.changesource_flags & ERT_SPAWN)) ert_operative.set_species(/datum/species/human) //Give antag datum diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index ee6adea0c3e..4cd69ac9be2 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -239,6 +239,10 @@ H.open_internals(H.get_item_for_held_index(2)) H.equipOutfit(outfit) + if(isplasmaman(H)) + var/obj/item/mod/control/our_modsuit = locate() in H.get_equipped_items() + if(our_modsuit) + our_modsuit.install(new /obj/item/mod/module/plasma_stabilizer) /datum/antagonist/ert/greet() if(!ert_team) diff --git a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm index 0a1d8b14462..307d2d677c5 100644 --- a/code/modules/mob/living/carbon/human/species_types/plasmamen.dm +++ b/code/modules/mob/living/carbon/human/species_types/plasmamen.dm @@ -28,7 +28,7 @@ heatmod = 1.5 payday_modifier = 1.0 breathid = GAS_PLASMA - changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC + changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_PRIDE | MIRROR_MAGIC | ERT_SPAWN species_cookie = /obj/item/reagent_containers/condiment/milk outfit_important_for_life = /datum/outfit/plasmaman species_language_holder = /datum/language_holder/skeleton From 7873019fb449c76f516ee4aadb8d5391f5565c38 Mon Sep 17 00:00:00 2001 From: Chen Marisa <18307183+flleeppyy@users.noreply.github.com> Date: Wed, 14 Aug 2024 04:44:35 -0700 Subject: [PATCH 005/257] Add reaction search to service cyborg (#85441) ## About The Pull Request This PR adds the "Reaction Search" button to the cyborg shaker, and allows you to select between the internal beaker, and whatever's in the beverage holding apparatus. ## Why It's Good For The Game Very helpful for cyborgs who want to make drinks but don't have access to a chemical/booze/soda dispenser to open the reaction search menu. ## Changelog :cl: add: the cyborg shaker in service borgs now have the ability to open the reaction search menu /:cl: Sorry for the branch/repo confusion, I'm going to make a separate github account for tgstation itself since github wont let me have tgstation, and a fork of tgstation, on my account lol. https://github.com/user-attachments/assets/d7ef6425-de83-48c6-b829-fbf7ac379941 --- code/game/objects/items/robot/items/hypo.dm | 38 ++++++++++++ tgui/packages/tgui/interfaces/BorgShaker.tsx | 62 +++++++++++++++++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/robot/items/hypo.dm b/code/game/objects/items/robot/items/hypo.dm index e3bdc897815..09d9c7a9afc 100644 --- a/code/game/objects/items/robot/items/hypo.dm +++ b/code/game/objects/items/robot/items/hypo.dm @@ -91,6 +91,9 @@ /datum/reagent/consumable/ethanol/fernet,\ ) +#define REAGENT_CONTAINER_INTERNAL "internal_beaker" +#define REAGENT_CONTAINER_BEVAPPARATUS "beverage_apparatus" + ///Borg Hypospray /obj/item/reagent_containers/borghypo name = "cyborg hypospray" @@ -329,6 +332,7 @@ SKYRAT EDIT REMOVAL END */ dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP //Water stays wet, ice stays ice default_reagent_types = BASE_SERVICE_REAGENTS expanded_reagent_types = EXPANDED_SERVICE_REAGENTS + var/reagent_search_container = REAGENT_CONTAINER_BEVAPPARATUS /obj/item/reagent_containers/borghypo/borgshaker/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -336,6 +340,27 @@ SKYRAT EDIT REMOVAL END */ ui = new(user, src, "BorgShaker", name) ui.open() +/obj/item/reagent_containers/borghypo/borgshaker/ui_act(action, params) + . = ..() + if(.) + return + var/mob/living/silicon/robot/user = usr + switch(action) + if("reaction_lookup") + if(!iscyborg(usr)) + return + if (reagent_search_container == REAGENT_CONTAINER_BEVAPPARATUS) + var/obj/item/borg/apparatus/beaker/service/beverage_apparatus = (locate() in user.model.modules) || (locate() in user.held_items) + if (!isnull(beverage_apparatus) && !isnull(beverage_apparatus.stored)) + beverage_apparatus.stored.reagents.ui_interact(user) + else if (reagent_search_container == REAGENT_CONTAINER_INTERNAL) + var/obj/item/reagent_containers/cup/beaker/large/internal_beaker = (locate() in user.model.modules) || (locate() in user.held_items) + if (!isnull(internal_beaker)) + internal_beaker.reagents.ui_interact(user) + if ("set_preferred_container") + reagent_search_container = params["value"] + return TRUE + /obj/item/reagent_containers/borghypo/borgshaker/ui_data(mob/user) var/list/drink_reagents = list() var/list/alcohol_reagents = list() @@ -358,6 +383,17 @@ SKYRAT EDIT REMOVAL END */ data["sodas"] = drink_reagents data["alcohols"] = alcohol_reagents data["selectedReagent"] = selected_reagent?.name + data["reagentSearchContainer"] = reagent_search_container + + if(iscyborg(user)) + var/mob/living/silicon/robot/cyborg = user + var/obj/item/borg/apparatus/beaker/service/beverage_apparatus = (locate() in cyborg.model.modules) || (locate() in cyborg.held_items) + + if (isnull(beverage_apparatus)) + to_chat(user, span_warning("This unit has no beverage apparatus. This shouldn't be possible. Delete yourself, NOW!")) + data["apparatusHasItem"] = FALSE + else + data["apparatusHasItem"] = !isnull(beverage_apparatus.stored) return data /obj/item/reagent_containers/borghypo/borgshaker/attack(mob/M, mob/user) @@ -456,6 +492,8 @@ SKYRAT EDIT REMOVAL END */ dispensed_temperature = WATER_MATTERSTATE_CHANGE_TEMP default_reagent_types = HACKED_SERVICE_REAGENTS +#undef REAGENT_CONTAINER_INTERNAL +#undef REAGENT_CONTAINER_BEVAPPARATUS #undef BASE_MEDICAL_REAGENTS #undef EXPANDED_MEDICAL_REAGENTS #undef HACKED_MEDICAL_REAGENTS diff --git a/tgui/packages/tgui/interfaces/BorgShaker.tsx b/tgui/packages/tgui/interfaces/BorgShaker.tsx index b16a68a3918..bfcd716cb2b 100644 --- a/tgui/packages/tgui/interfaces/BorgShaker.tsx +++ b/tgui/packages/tgui/interfaces/BorgShaker.tsx @@ -9,6 +9,8 @@ type BorgShakerContext = { sodas: Reagent[]; alcohols: Reagent[]; selectedReagent: string; + reagentSearchContainer: ContainerPreference; + apparatusHasItem: boolean; }; type Reagent = { @@ -17,8 +19,13 @@ type Reagent = { description: string; }; +enum ContainerPreference { + BeverageApparatus = 'beverage_apparatus', + InternalBeaker = 'internal_beaker', +} + export const BorgShaker = (props) => { - const { data } = useBackend(); + const { act, data } = useBackend(); const { theme, minVolume, sodas, alcohols, selectedReagent } = data; const dynamicHeight = @@ -29,7 +36,58 @@ export const BorgShaker = (props) => { return ( -
+
+ act('invalidate_crime', { diff --git a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts index ded95918c90..1ea40aefd67 100644 --- a/tgui/packages/tgui/interfaces/SecurityRecords/types.ts +++ b/tgui/packages/tgui/interfaces/SecurityRecords/types.ts @@ -42,6 +42,7 @@ export type Crime = { paid: number; time: number; valid: BooleanLike; + voider: string; }; export enum SECURETAB { From e812d3ce91bc5ff9a558c485c3ae1ec6d8387ca0 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:50:19 +0200 Subject: [PATCH 022/257] [MIRROR] Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat (#29284) * Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat (#85663) ## About The Pull Request Closes #85659 Not, in fact, attack chain heck. Just seed getting deleted too soon. ## Changelog :cl: fix: Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat /:cl: * Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/hydroponics/grown/mushrooms.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/hydroponics/grown/mushrooms.dm b/code/modules/hydroponics/grown/mushrooms.dm index 9d1d802916b..9af495f6a61 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -205,11 +205,11 @@ to_chat(user, span_notice("You hollow up the chanterelle with [I].")) remove_item_from_storage(user) - qdel(src) if(seed.resistance_flags & FIRE_PROOF) user.put_in_hands(new /obj/item/clothing/head/wizard/chanterelle/fr()) else user.put_in_hands(new /obj/item/clothing/head/wizard/chanterelle()) + qdel(src) //Jupiter Cup /obj/item/seeds/chanter/jupitercup From e2de6732d0934070266e01a70892bb24d4256762 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:51:03 +0200 Subject: [PATCH 023/257] [MIRROR] Fixes DNA sampler attack chain heck (#29285) * Fixes DNA sampler attack chain heck (#85662) ## About The Pull Request Closes #85656 ## Changelog :cl: fix: Fixed DNA samplers not being able to interact with non-scannable objects /:cl: * Fixes DNA sampler attack chain heck --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/game/objects/items/dna_probe.dm | 71 +++++++++++++++++++--------- 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/code/game/objects/items/dna_probe.dm b/code/game/objects/items/dna_probe.dm index ee6a3276652..57718ca217e 100644 --- a/code/game/objects/items/dna_probe.dm +++ b/code/game/objects/items/dna_probe.dm @@ -17,8 +17,6 @@ righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' icon_state = "sampler" item_flags = NOBLUDGEON - ///Whether we have Carp DNA - var/carp_dna_loaded = FALSE ///What sources of DNA this sampler can extract from. var/allowed_scans = DNA_PROBE_SCAN_PLANTS | DNA_PROBE_SCAN_ANIMALS | DNA_PROBE_SCAN_HUMANS ///List of all Animal DNA scanned with this sampler. @@ -35,10 +33,14 @@ if(dna_vault_ref?.resolve()) // Weirdly we can upload to any existing DNA vault so long as we're linked to any other existing DNA vault. return try_upload_dna(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING - else - return try_linking_vault(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + return try_linking_vault(interacting_with, user) ? ITEM_INTERACT_SUCCESS : ITEM_INTERACT_BLOCKING + + if (!valid_scan_target(interacting_with)) + return NONE + + if (scan_dna(interacting_with, user)) + return ITEM_INTERACT_SUCCESS - scan_dna(interacting_with, user) return ITEM_INTERACT_BLOCKING /obj/item/dna_probe/proc/try_linking_vault(obj/machinery/dna_vault/target, mob/user) @@ -78,7 +80,7 @@ playsound(user, 'sound/machines/buzz-sigh.ogg', 50) balloon_alert(user, "need database!") return - if((allowed_scans & DNA_PROBE_SCAN_PLANTS) && istype(target, /obj/machinery/hydroponics)) + if(istype(target, /obj/machinery/hydroponics)) var/obj/machinery/hydroponics/hydro_tray = target if(!hydro_tray.myseed) return @@ -90,11 +92,12 @@ return if(hydro_tray.plant_status != HYDROTRAY_PLANT_HARVESTABLE) // So it's bit harder. to_chat(user, span_alert("Plant needs to be ready to harvest to perform full data scan.")) //Because space dna is actually magic - return . + return stored_dna_plants[hydro_tray.myseed.type] = TRUE playsound(src, 'sound/misc/compiler-stage2.ogg', 50) balloon_alert(user, "data added") - else if((allowed_scans & DNA_PROBE_SCAN_HUMANS) && ishuman(target)) + return TRUE + else if(ishuman(target)) var/mob/living/carbon/human/human_target = target if(our_vault.human_dna[human_target.dna.unique_identity]) to_chat(user, span_notice("Humanoid data already present in vault storage.")) @@ -108,23 +111,40 @@ stored_dna_human[human_target.dna.unique_identity] = TRUE playsound(src, 'sound/misc/compiler-stage2.ogg', 50) balloon_alert(user, "data added") + return TRUE - else if((allowed_scans & DNA_PROBE_SCAN_ANIMALS) && isliving(target)) + if(!isliving(target)) + return + + var/static/list/non_simple_animals = typecacheof(list(/mob/living/carbon/alien)) + if(!isanimal_or_basicmob(target) && !is_type_in_typecache(target, non_simple_animals) && !ismonkey(target)) + return + + var/mob/living/living_target = target + if(our_vault.animal_dna[living_target.type]) + to_chat(user, span_notice("Animal data already present in vault storage.")) + return + if(stored_dna_animal[living_target.type]) + to_chat(user, span_notice("Animal data already present in local storage.")) + return + if(!(living_target.mob_biotypes & MOB_ORGANIC)) + to_chat(user, span_alert("No compatible DNA detected.")) + return . + stored_dna_animal[living_target.type] = TRUE + playsound(src, 'sound/misc/compiler-stage2.ogg', 50) + balloon_alert(user, "data added") + return TRUE + +/obj/item/dna_probe/proc/valid_scan_target(atom/target) + if((allowed_scans & DNA_PROBE_SCAN_PLANTS) && istype(target, /obj/machinery/hydroponics)) + return TRUE + if((allowed_scans & DNA_PROBE_SCAN_HUMANS) && ishuman(target)) + return TRUE + if((allowed_scans & DNA_PROBE_SCAN_ANIMALS) && isliving(target)) var/static/list/non_simple_animals = typecacheof(list(/mob/living/carbon/alien)) if(isanimal_or_basicmob(target) || is_type_in_typecache(target, non_simple_animals) || ismonkey(target)) - var/mob/living/living_target = target - if(our_vault.animal_dna[living_target.type]) - to_chat(user, span_notice("Animal data already present in vault storage.")) - return - if(stored_dna_animal[living_target.type]) - to_chat(user, span_notice("Animal data already present in local storage.")) - return - if(!(living_target.mob_biotypes & MOB_ORGANIC)) - to_chat(user, span_alert("No compatible DNA detected.")) - return . - stored_dna_animal[living_target.type] = TRUE - playsound(src, 'sound/misc/compiler-stage2.ogg', 50) - balloon_alert(user, "data added") + return TRUE + return FALSE #define CARP_MIX_DNA_TIMER (15 SECONDS) @@ -132,6 +152,8 @@ /obj/item/dna_probe/carp_scanner name = "Carp DNA Sampler" desc = "Can be used to take chemical and genetic samples of animals." + ///Whether we have Carp DNA + var/carp_dna_loaded = FALSE /obj/item/dna_probe/carp_scanner/examine_more(mob/user) . = ..() @@ -145,6 +167,11 @@ else return ..() +/obj/item/dna_probe/carp_scanner/valid_scan_target(atom/target) + if (istype(target, /mob/living/basic/carp)) + return TRUE + return ..() + /obj/item/dna_probe/carp_scanner/attack_self(mob/user, modifiers) . = ..() if(!carp_dna_loaded) From ee3f4c3d5334c3d5689795d4e6caaf29d88bd5db Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:51:40 +0200 Subject: [PATCH 024/257] [MIRROR] Fixes a hard del with island_brawl spawners (#29286) * Fixes a hard del with island_brawl spawners (#85684) ## About The Pull Request ![yN86RRrD0h](https://github.com/user-attachments/assets/2aaa23c8-1fcb-4a40-ad54-c71306a2f430) Tin, just aims to fix this hard del by releasing the refs when the spawners get qdeleted. ## Why It's Good For The Game Fixes a hard del---also, there were some issues with this domain not clearing itself properly under certain cases and this may resolve that. ## Changelog Nothing player facing * Fixes a hard del with island_brawl spawners --------- Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> --- .../bitrunning/virtual_domain/domains/island_brawl.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm b/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm index b745a4746aa..84eb53e026a 100644 --- a/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm +++ b/code/modules/bitrunning/virtual_domain/domains/island_brawl.dm @@ -21,9 +21,17 @@ for(var/obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander/spawner in created_atoms) custom_spawns += spawner + RegisterSignal(spawner, COMSIG_QDELETING, PROC_REF(on_spawner_qdeleted)) RegisterSignals(spawner, list(COMSIG_GHOSTROLE_SPAWNED, COMSIG_BITRUNNER_SPAWNED), PROC_REF(on_spawn)) +/datum/lazy_template/virtual_domain/island_brawl/proc/on_spawner_qdeleted(obj/effect/mob_spawn/ghost_role/human/virtual_domain/islander/source) + SIGNAL_HANDLER + + custom_spawns -= source + UnregisterSignal(source, COMSIG_QDELETING) + + /// Someone has spawned in, so we check for their death /datum/lazy_template/virtual_domain/island_brawl/proc/on_spawn(datum/source, mob/living/spawned_mob) SIGNAL_HANDLER From 2dade61356bcb090255f116dc89bea99c4af37a5 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:52:34 +0200 Subject: [PATCH 025/257] [MIRROR] [NO GBP] (Not so) hotfix for ninja cloaking (#29288) * [NO GBP] (Not so) hotfix for ninja cloaking (#85673) ## About The Pull Request Closes #85639 dumb me forgetting to test a specific module weeks ago and it getting past review ## Changelog :cl: fix: Ninjas can cloak again /:cl: * [NO GBP] (Not so) hotfix for ninja cloaking --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/mod/modules/modules_ninja.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm index cfa95fb8a59..a5215341a06 100644 --- a/code/modules/mod/modules/modules_ninja.dm +++ b/code/modules/mod/modules/modules_ninja.dm @@ -72,9 +72,11 @@ cooldown_time = 3 SECONDS /obj/item/mod/module/stealth/ninja/on_activation() + . = ..() ADD_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) /obj/item/mod/module/stealth/ninja/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() REMOVE_TRAIT(mod.wearer, TRAIT_SILENT_FOOTSTEPS, MOD_TRAIT) ///Camera Vision - Prevents flashes, blocks tracking. From 2a2cb75f7eb79e4cac17badf9475c39e52f90f95 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:54:30 +0200 Subject: [PATCH 026/257] [MIRROR] Fix a spot of shitcode (#29289) * Fix a spot of shitcode (#85683) ## About The Pull Request OD errors on invalid values for `color` in a color filter def, BYOND just fails silently and gives a white color matrix. I'm guessing this was going for identity matrix == white, but `/matrix` is not a color matrix. OD also errors on invalid values for `easing` in `animate`, which this also fixes an instance of ## Why It's Good For The Game Fix shitcode --------- Co-authored-by: ike709 * Fix a spot of shitcode --------- Co-authored-by: Amy <3855802+amylizzle@users.noreply.github.com> Co-authored-by: ike709 --- code/__HELPERS/visual_effects.dm | 4 ++-- code/modules/atmospherics/machinery/datum_pipeline.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/__HELPERS/visual_effects.dm b/code/__HELPERS/visual_effects.dm index d219d11e1ce..2b845c2131b 100644 --- a/code/__HELPERS/visual_effects.dm +++ b/code/__HELPERS/visual_effects.dm @@ -44,9 +44,9 @@ speed /= segments if(parallel) - animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) + animate(src, transform = matrices[1], time = speed, loop = loops, flags = ANIMATION_PARALLEL) else - animate(src, transform = matrices[1], time = speed, loops) + animate(src, transform = matrices[1], time = speed, loop = loops) for(var/i in 2 to segments) //2 because 1 is covered above animate(transform = matrices[i], time = speed) //doesn't have an object argument because this is "Stacking" with the animate call above diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 37cb21ee8ce..2200d10fda5 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -375,7 +375,7 @@ /obj/effect/abstract/gas_visual/Initialize(mapload) . = ..() - color_filter = filter(type="color", color=matrix()) + color_filter = filter(type="color", color="white") filters += color_filter color_filter = filters[filters.len] if(current_color) From 3184154d7e72625a1da8b48b75975c880cc8a522 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 16:55:32 +0200 Subject: [PATCH 027/257] [MIRROR] Retextured Durand's shield, fixed power drain and UI (#29287) * Retextured Durand's shield, fixed power drain and UI (#85718) ## About The Pull Request ![dreamseeker_phiCk3bcfG](https://github.com/user-attachments/assets/5e2dfb36-cb8b-4954-8c04-5b452dfb0a2f) Closes #84419 Durand drained ten times the default cell capacity per tick due to power changes, and UI for some reason multiplied the cell charge by a thousand, confusing the players. Also minor cleanup. ## Why It's Good For The Game Super dated sprite that doesn't really fit the modern durand ## Changelog :cl: image: Durand shield got a glowup fix: Durand shield no longer instantly drains its battery fix: Mech UI no longer lies about the amount of power your mech has left /:cl: * Retextured Durand's shield, fixed power drain and UI --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/vehicles/mecha/combat/durand.dm | 13 +++++++------ icons/mob/effects/durand_shield.dmi | Bin 9277 -> 12111 bytes tgui/packages/tgui/interfaces/Mecha/index.tsx | 4 ++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/code/modules/vehicles/mecha/combat/durand.dm b/code/modules/vehicles/mecha/combat/durand.dm index c6fcae75bc9..a466bc30d22 100644 --- a/code/modules/vehicles/mecha/combat/durand.dm +++ b/code/modules/vehicles/mecha/combat/durand.dm @@ -50,7 +50,7 @@ /obj/vehicle/sealed/mecha/durand/process() . = ..() - if(defense_mode && !use_energy(100 KILO JOULES)) //Defence mode can only be on with a occupant so we check if one of them can toggle it and toggle + if(defense_mode && !use_energy(0.01 * STANDARD_CELL_CHARGE)) //Defence mode can only be on with a occupant so we check if one of them can toggle it and toggle for(var/O in occupants) var/mob/living/occupant = O var/datum/action/action = LAZYACCESSASSOC(occupant_actions, occupant, /datum/action/vehicle/sealed/mecha/mech_defense_mode) @@ -82,7 +82,6 @@ stack_trace("Durand triggered relay without a shield") shield = new /obj/durand_shield(loc, src, layer) shield.setDir(dir) - SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_TRIGGER, owner, signal_args) //Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. /obj/vehicle/sealed/mecha/durand/proc/prehit(obj/projectile/source, list/signal_args) @@ -144,6 +143,8 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ button_icon_state = "mech_defense_mode_off" /datum/action/vehicle/sealed/mecha/mech_defense_mode/Trigger(trigger_flags, forced_state = FALSE) + if(!owner || !chassis || !(owner in chassis.occupants)) + return SEND_SIGNAL(chassis, COMSIG_MECHA_ACTION_TRIGGER, owner, args) //Signal sent to the mech, to be handed to the shield. See durand.dm for more details //////////////////////////// @@ -165,9 +166,9 @@ own integrity back to max. Shield is automatically dropped if we run out of powe max_integrity = 10000 anchored = TRUE light_system = OVERLAY_LIGHT - light_range = MINIMUM_USEFUL_LIGHT_RANGE - light_power = 2 - light_color = LIGHT_COLOR_ELECTRIC_CYAN + light_range = 2.8 + light_power = 1 + light_color = LIGHT_COLOR_FAINT_CYAN light_on = FALSE resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF //The shield should not take damage from fire, lava, or acid; that's the mech's job. ///Our link back to the durand @@ -181,7 +182,7 @@ own integrity back to max. Shield is automatically dropped if we run out of powe src.layer = ABOVE_MOB_LAYER SET_PLANE_IMPLICIT(src, plane) setDir(dir) - RegisterSignal(src, COMSIG_MECHA_ACTION_TRIGGER, PROC_REF(activate)) + RegisterSignal(chassis, COMSIG_MECHA_ACTION_TRIGGER, PROC_REF(activate)) RegisterSignal(chassis, COMSIG_MOVABLE_UPDATE_GLIDE_SIZE, PROC_REF(shield_glide_size_update)) /obj/durand_shield/Destroy() diff --git a/icons/mob/effects/durand_shield.dmi b/icons/mob/effects/durand_shield.dmi index 0600e352b316ea0947dd5c8dc24ea710117d6e1a..8f9016ed74be6eda6a843f4f6824ecd5881b9d54 100644 GIT binary patch literal 12111 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 R2G9wzIB;}-jwvzx{{u=gj{^Vz literal 9277 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[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 { ? 'Power cell missing' : power_level === 1e31 ? 'Infinite' - : `${formatSiUnit(power_level * 1000, 0, 'J')} of ${formatSiUnit( - power_max * 1000, + : `${formatSiUnit(power_level, 0, 'J')} of ${formatSiUnit( + power_max, 0, 'J', )}`} From 68967c49e924633fdd2d6fed654ca29df7315f9a Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:31:18 +0200 Subject: [PATCH 028/257] [MIRROR] Makes cyborg endoskeleton a roundstart research again (#29296) * Makes cyborg endoskeleton a roundstart research again (#85695) ## About The Pull Request Cyborg endoskeletons no longer require a research node to be made, making them possible to create at roundstart. ## Why It's Good For The Game I feel like placing these behind a node doesn't really do anything that's worth having it there. There's very little to do at roundstart other than making cyborgs or clean/medibots at roundstart, so most of the beginning of a shift turns into "trying to get R&D to research the thing you need to do arguably the most important part of your job". I haven't been able to find a single benefit for doing this. Arguably, it's like this to prevent people from "wasting resources on cyborgs that never get built", but I can't say I've ever been on a round with more than 30-40 people where I didn't build at least two borgs. What actually ends up happening is one roboticist makes everything but the endoskeleton while the other tries to get access to the R&D computer to research cybernetics so they can finish making a cyborg. It was also argued that augmentation is more often requested at roundstart than borging, which I have seen maybe twice in the last three years. ## Changelog :cl: Vekter balance: Removes the research requirement from cyborg endoskeletons, meaning they can be built at roundstart again. /:cl: * Makes cyborg endoskeleton a roundstart research again --------- Co-authored-by: Vekter --- 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 5e0ad2f64e0..92984b0598e 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -11,6 +11,7 @@ "borg_l_leg", "borg_r_arm", "borg_r_leg", + "borg_suit", "cybernetic_eyes", "cybernetic_eyes_moth", "cybernetic_ears", @@ -32,7 +33,6 @@ "robocontrol", "borgupload", "cyborgrecharger", - "borg_suit", "mmi_posi", "mmi", "mmi_m", From 3987ec62adc3ff569baba32d90199eb18e1cce90 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:34:20 +0200 Subject: [PATCH 029/257] [MIRROR] Bubblegum can no longer bloodcrawl to other Z levels (#29294) * Bubblegum can no longer bloodcrawl to other Z levels (#85655) ## About The Pull Request Closes #85638 Closes #64063 Now has a Z level check ## Why It's Good For The Game While funny as hell (fuck around and find out, miner) I do not think that this is a very good idea to leave it in, considering current attitude regarding easy ways to bring megafauna onboard the station. Plus using Jacob's Ladder as an escape route is a pretty creative use for a gimmicky item ## Changelog :cl: fix: Bubblegum can no longer bloodcrawl to other Z levels /:cl: * Bubblegum can no longer bloodcrawl to other Z levels --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/datums/actions/mobs/blood_warp.dm | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/code/datums/actions/mobs/blood_warp.dm b/code/datums/actions/mobs/blood_warp.dm index 4b070eebfe7..1e48c6e5aa4 100644 --- a/code/datums/actions/mobs/blood_warp.dm +++ b/code/datums/actions/mobs/blood_warp.dm @@ -21,14 +21,21 @@ /datum/action/cooldown/mob_cooldown/blood_warp/proc/blood_warp(atom/target) if(owner.Adjacent(target)) return FALSE - var/list/can_jaunt = get_bloodcrawlable_pools(get_turf(owner), 1) + + var/turf/target_turf = get_turf(target) + var/turf/owner_turf = get_turf(owner) + + if (target_turf.z != owner_turf.z) + return FALSE + + var/list/can_jaunt = get_bloodcrawlable_pools(owner_turf, 1) if(!can_jaunt.len) return FALSE var/chosen_pick_range = get_pick_range() - var/list/pools = get_bloodcrawlable_pools(get_turf(target), chosen_pick_range) + var/list/pools = get_bloodcrawlable_pools(target_turf, chosen_pick_range) if(remove_inner_pools) - var/list/pools_to_remove = get_bloodcrawlable_pools(get_turf(target), chosen_pick_range - 1) + var/list/pools_to_remove = get_bloodcrawlable_pools(target_turf, chosen_pick_range - 1) pools -= pools_to_remove if(!pools.len) return FALSE @@ -42,16 +49,16 @@ qdel(DA) var/obj/effect/decal/cleanable/blood/found_bloodpool - pools = get_bloodcrawlable_pools(get_turf(target), chosen_pick_range) + pools = get_bloodcrawlable_pools(target_turf, chosen_pick_range) if(remove_inner_pools) - var/list/pools_to_remove = get_bloodcrawlable_pools(get_turf(target), chosen_pick_range - 1) + var/list/pools_to_remove = get_bloodcrawlable_pools(target_turf, chosen_pick_range - 1) pools -= pools_to_remove if(pools.len) shuffle_inplace(pools) found_bloodpool = pick(pools) if(found_bloodpool) owner.visible_message("[owner] sinks into the blood...") - playsound(get_turf(owner), 'sound/magic/enter_blood.ogg', 100, TRUE, -1) + playsound(owner_turf, 'sound/magic/enter_blood.ogg', 100, TRUE, -1) owner.forceMove(get_turf(found_bloodpool)) playsound(get_turf(owner), 'sound/magic/exit_blood.ogg', 100, TRUE, -1) owner.visible_message("And springs back out!") From 19ea5e9da2feea4ee8e473d0aa1d02aec45aa46b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:34:46 +0200 Subject: [PATCH 030/257] [MIRROR] fixes wolf ai getting stuck (#29295) * fixes wolf ai getting stuck (#85654) ## About The Pull Request wolf AI tend to get stuck processing this behavior infinitely ## Why It's Good For The Game fixes wolf ai getting stuck sometimes ## Changelog :cl: fix: wolf AI will no longer get stuck /:cl: * fixes wolf ai getting stuck --------- Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> --- code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm index 44d7cb4fe48..f78697b2b81 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/call_reinforcements.dm @@ -44,6 +44,6 @@ other_mob.ai_controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENT_TARGET, pawn_mob) controller.set_blackboard_key(BB_BASIC_MOB_REINFORCEMENTS_COOLDOWN, world.time + REINFORCEMENTS_COOLDOWN) - return AI_BEHAVIOR_DELAY + return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED #undef REINFORCEMENTS_COOLDOWN From a741af7491c4f541138b4905cd09fe96dc133d8b Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:35:36 +0200 Subject: [PATCH 031/257] [MIRROR] Wellcheers fix (#29300) * Wellcheers fix (#85634) ## About The Pull Request Fixes the way Wellcheers soda checks sanity for its sanity-based effects, removing "holes" of sanity values in which it would do nothing at all. Old code checks sanity values in ranges 0-25, 50-75, 100-125, new code checks sanity _levels_ instead so that it's exhaustive ## Why It's Good For The Game Makes wellcheers have the intended effect, fixes https://github.com/tgstation/tgstation/issues/85617 ## Changelog :cl: fix: Wellcheers no longer does nothing half the time /:cl: Co-authored-by: Roryl-c <5150427+Roryl-c@ users.noreply.github.com> * Wellcheers fix --------- Co-authored-by: Runi-c <5150427+Runi-c@users.noreply.github.com> Co-authored-by: Roryl-c <5150427+Roryl-c@ users.noreply.github.com> --- .../chemistry/reagents/drinks/drink_reagents.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm index 495c1e33317..20e7e51d52b 100644 --- a/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks/drink_reagents.dm @@ -652,13 +652,13 @@ . = ..() affected_mob.adjust_drowsiness(3 SECONDS * REM * seconds_per_tick) var/need_mob_update - switch(affected_mob.mob_mood.sanity) - if (SANITY_INSANE to SANITY_CRAZY) - need_mob_update = affected_mob.adjustStaminaLoss(3 * REM * seconds_per_tick, updating_stamina = FALSE) - if (SANITY_UNSTABLE to SANITY_DISTURBED) - affected_mob.add_mood_event("wellcheers", /datum/mood_event/wellcheers) - if (SANITY_NEUTRAL to SANITY_GREAT) + switch(affected_mob.mob_mood.sanity_level) + if (SANITY_LEVEL_GREAT to SANITY_LEVEL_NEUTRAL) need_mob_update = affected_mob.adjustBruteLoss(-1.5 * REM * seconds_per_tick, updating_health = FALSE) + if (SANITY_LEVEL_DISTURBED to SANITY_LEVEL_UNSTABLE) + affected_mob.add_mood_event("wellcheers", /datum/mood_event/wellcheers) + if (SANITY_LEVEL_CRAZY to SANITY_LEVEL_INSANE) + need_mob_update = affected_mob.adjustStaminaLoss(3 * REM * seconds_per_tick, updating_stamina = FALSE) if(need_mob_update) return UPDATE_MOB_HEALTH From 82bbdfd396c1668dc5e96b838d82dcc0642249e3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:35:44 +0200 Subject: [PATCH 032/257] [MIRROR] Slimes no longer can feed when they're inside of objects or attacking a target that became invalid after they chose their dinner (#29301) * Slimes no longer can feed when they're inside of objects or attacking a target that became invalid after they chose their dinner (#85467) ## About The Pull Request Closes #85466 ## Changelog :cl: fix: Slimes no longer can feed when they're inside of objects or attacking a target that became invalid after they chose their dinner /:cl: * Slimes no longer can feed when they're inside of objects or attacking a target that became invalid after they chose their dinner --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/mob/living/basic/slime/ai/behaviours.dm | 4 ++++ code/modules/mob/living/basic/slime/feeding.dm | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/basic/slime/ai/behaviours.dm b/code/modules/mob/living/basic/slime/ai/behaviours.dm index 1cd46779945..8ab867ea336 100644 --- a/code/modules/mob/living/basic/slime/ai/behaviours.dm +++ b/code/modules/mob/living/basic/slime/ai/behaviours.dm @@ -57,6 +57,10 @@ /datum/ai_behavior/hunt_target/unarmed_attack_target/slime /datum/ai_behavior/hunt_target/unarmed_attack_target/slime/target_caught(mob/living/basic/slime/hunter, mob/living/hunted) + if (!hunter.can_feed_on(hunted)) // Target is no longer edible + hunter.UnarmedAttack(hunted, TRUE) + return + if((hunted.body_position != STANDING_UP) || prob(20)) //Not standing, or we rolled well? Feed. hunter.start_feeding(hunted) return diff --git a/code/modules/mob/living/basic/slime/feeding.dm b/code/modules/mob/living/basic/slime/feeding.dm index 2c69aad8001..064ec441cb6 100644 --- a/code/modules/mob/living/basic/slime/feeding.dm +++ b/code/modules/mob/living/basic/slime/feeding.dm @@ -20,7 +20,7 @@ if(check_friendship && (REF(meal) in faction)) return FALSE - if(check_adjacent && !Adjacent(meal)) + if(check_adjacent && (!Adjacent(meal) || !isturf(loc))) return FALSE if(meal.stat == DEAD) From 40c397228db509ca3071745517a0d4fa146046a9 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:40:52 +0200 Subject: [PATCH 033/257] Automatic changelog for PR #29275 [ci skip] --- html/changelogs/AutoChangeLog-pr-29275.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29275.yml diff --git a/html/changelogs/AutoChangeLog-pr-29275.yml b/html/changelogs/AutoChangeLog-pr-29275.yml new file mode 100644 index 00000000000..d6647d8de5d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29275.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - image: "Resprited all main assemblies" \ No newline at end of file From a59d72f4a36ddb3f2715934dccf5a68c28807ce3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:41:23 +0200 Subject: [PATCH 034/257] [MIRROR] Add a janitorial 'borg plunger (#29302) * Add a janitorial 'borg plunger (#85475) ## About The Pull Request I got annoyed at not being able to plung vents when there's a clog. This PR corrects that. I copied all of the cyborg mop attributes to make this. This is my first PR on this server, but I did test it on a local server, and it indeed, plungs. ## Why It's Good For The Game More content for janitorial cyborg. They really should have a plunger, to be honest. It just makes sense to me. ## Changelog :cl: add: Added a cyborg plunger for janitorial modules /:cl: * Add a janitorial 'borg plunger --------- Co-authored-by: nesquik <24830358+lbnesquik@users.noreply.github.com> --- code/game/objects/items/robot/robot_upgrades.dm | 10 ++++++++++ code/game/objects/structures/lavaland/geyser.dm | 4 ++++ .../research/designs/mechfabricator_designs.dm | 14 ++++++++++++++ .../modules/research/techweb/nodes/cyborg_nodes.dm | 1 + 4 files changed, 29 insertions(+) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index fc684fb7a20..235b6a3bd08 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -208,6 +208,16 @@ items_to_add = list(/obj/item/cautery/prt) +/obj/item/borg/upgrade/plunger + name = "janitor cyborg plunging tool" + desc = "An integrated cyborg retractable plunger. It's meant for plunging things, duh." + icon_state = "module_janitor" + require_model = TRUE + model_type = list(/obj/item/robot_model/janitor) + model_flags = BORG_MODEL_JANITOR + + items_to_add = list(/obj/item/plunger/cyborg) + /obj/item/borg/upgrade/syndicate name = "illegal equipment module" desc = "Unlocks the hidden, deadlier functions of a cyborg." diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm index 045a703250b..4168a100751 100644 --- a/code/game/objects/structures/lavaland/geyser.dm +++ b/code/game/objects/structures/lavaland/geyser.dm @@ -185,3 +185,7 @@ layer_mode_sprite = "reinforced_plunger_layer" custom_premium_price = PAYCHECK_CREW * 8 + +/obj/item/plunger/cyborg/Initialize(mapload) + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index ea13bf644fc..84e1824315c 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1581,6 +1581,20 @@ RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR ) +/datum/design/borg_upgrade_plunger + name = "Integrated Plunger" + id = "borg_upgrade_plunger" + build_type = MECHFAB + build_path = /obj/item/borg/upgrade/plunger + materials = list( + /datum/material/iron = SHEET_MATERIAL_AMOUNT*1.125, + /datum/material/glass = HALF_SHEET_MATERIAL_AMOUNT*0.75, + ) + construction_time = 4 SECONDS + category = list( + RND_CATEGORY_MECHFAB_CYBORG_MODULES + RND_SUBCATEGORY_MECHFAB_CYBORG_MODULES_JANITOR + ) + /datum/design/borg_upgrade_rolling_table name = "Rolling Table Dock" id = "borg_upgrade_rolling_table" diff --git a/code/modules/research/techweb/nodes/cyborg_nodes.dm b/code/modules/research/techweb/nodes/cyborg_nodes.dm index 92984b0598e..9c93405b282 100644 --- a/code/modules/research/techweb/nodes/cyborg_nodes.dm +++ b/code/modules/research/techweb/nodes/cyborg_nodes.dm @@ -98,6 +98,7 @@ "borg_upgrade_broomer", "borg_upgrade_expand", "borg_upgrade_prt", + "borg_upgrade_plunger", "borg_upgrade_selfrepair", "borg_upgrade_thrusters", "borg_upgrade_trashofholding", From b694bcac800d0ddb16f4ffb9b77fa31686eda461 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:41:35 +0200 Subject: [PATCH 035/257] Automatic changelog for PR #29276 [ci skip] --- html/changelogs/AutoChangeLog-pr-29276.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29276.yml diff --git a/html/changelogs/AutoChangeLog-pr-29276.yml b/html/changelogs/AutoChangeLog-pr-29276.yml new file mode 100644 index 00000000000..ab5ddf6cce0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29276.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed monk staffs not displaying a wielded sprite" \ No newline at end of file From 8bb0ac25722f1e181783b31879b3e9241b9518ca Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:42:27 +0200 Subject: [PATCH 036/257] [MIRROR] Circuit health analyzer/state components now work on targets inside lockers (#29297) * Circuit health analyzer/state components now work on targets inside lockers (#85649) ## About The Pull Request Makes circuit health analyzer/scanner components check distance to target turf instead of target itself similarly to (most) other components. (There are exceptions, presumably due to balancing? concerns, but this feels like it should not have been one) This doesn't feel intentional so I marked it as a fix, given that BCIs stopping being able to scan their occupant is rather nonsensical ## Why It's Good For The Game Currently BCIs with health analyzer components stop working if the owner goes into a locker which is pretty stupid. Most components also only check for turf distance, and while this could theoretically be used to pinpoint someone's hiding spot there are far better ways to do so with circuits ## Changelog :cl: fix: Circuit health analyzer/state components now work on targets inside lockers /:cl: * Circuit health analyzer/state components now work on targets inside lockers --------- Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> --- code/modules/wiremod/components/atom/health.dm | 3 ++- code/modules/wiremod/components/atom/health_state.dm | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/wiremod/components/atom/health.dm b/code/modules/wiremod/components/atom/health.dm index ee04030259e..49798930d97 100644 --- a/code/modules/wiremod/components/atom/health.dm +++ b/code/modules/wiremod/components/atom/health.dm @@ -43,7 +43,8 @@ var/mob/living/organism = input_port.value var/turf/current_turf = get_location() - if(!istype(organism) || get_dist(current_turf, organism) > max_range || current_turf.z != organism.z) + var/turf/target_location = get_turf(organism) + if(!istype(organism) || get_dist(current_turf, target_location) > max_range || current_turf.z != target_location.z) brute.set_output(null) burn.set_output(null) toxin.set_output(null) diff --git a/code/modules/wiremod/components/atom/health_state.dm b/code/modules/wiremod/components/atom/health_state.dm index dc83a41fdfd..65031115941 100644 --- a/code/modules/wiremod/components/atom/health_state.dm +++ b/code/modules/wiremod/components/atom/health_state.dm @@ -36,7 +36,8 @@ /obj/item/circuit_component/compare/health_state/do_comparisons() var/mob/living/organism = input_port.value var/turf/current_turf = get_location() - if(!istype(organism) || current_turf.z != organism.z || get_dist(current_turf, organism) > max_range) + var/turf/target_location = get_turf(organism) + if(!istype(organism) || current_turf.z != target_location.z || get_dist(current_turf, target_location) > max_range) return FALSE var/current_option = state_option.value From 0b7e219fed89bdbd34df39fa5035d2ae8ec915f8 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:44:47 +0200 Subject: [PATCH 037/257] Automatic changelog for PR #29277 [ci skip] --- html/changelogs/AutoChangeLog-pr-29277.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29277.yml diff --git a/html/changelogs/AutoChangeLog-pr-29277.yml b/html/changelogs/AutoChangeLog-pr-29277.yml new file mode 100644 index 00000000000..9a334e42cf5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29277.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fake aurora caelus event no longer permanently paints space green" \ No newline at end of file From 78f78a7544d1db95f00d3009eee8a372ec74df30 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:45:48 +0200 Subject: [PATCH 038/257] Automatic changelog for PR #29279 [ci skip] --- html/changelogs/AutoChangeLog-pr-29279.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29279.yml diff --git a/html/changelogs/AutoChangeLog-pr-29279.yml b/html/changelogs/AutoChangeLog-pr-29279.yml new file mode 100644 index 00000000000..d47671d6abd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29279.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "You can no longer shove people into closets through directional glass" \ No newline at end of file From d3dacc6ef4f68a2c1edc86c6f579a6604095ea87 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:48:34 +0200 Subject: [PATCH 039/257] Automatic changelog for PR #29293 [ci skip] --- html/changelogs/AutoChangeLog-pr-29293.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29293.yml diff --git a/html/changelogs/AutoChangeLog-pr-29293.yml b/html/changelogs/AutoChangeLog-pr-29293.yml new file mode 100644 index 00000000000..a8bc1f9fad3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29293.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "fixed nested radios with encryption keys giving free comms" \ No newline at end of file From 435ace893171171cd475a0ce49a3e29ec09a87e5 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:48:58 +0200 Subject: [PATCH 040/257] Automatic changelog for PR #29291 [ci skip] --- html/changelogs/AutoChangeLog-pr-29291.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29291.yml diff --git a/html/changelogs/AutoChangeLog-pr-29291.yml b/html/changelogs/AutoChangeLog-pr-29291.yml new file mode 100644 index 00000000000..f137355c7b2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29291.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - balance: "bushes and other flora have had their HP reduced from 150 to 100. Trees still have 150 HP" + - balance: "flora now has an X4 modifier to damage from burn sources" \ No newline at end of file From 809bdb79776adc208a24bf58139b10d432058817 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:49:30 +0200 Subject: [PATCH 041/257] Automatic changelog for PR #29299 [ci skip] --- html/changelogs/AutoChangeLog-pr-29299.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29299.yml diff --git a/html/changelogs/AutoChangeLog-pr-29299.yml b/html/changelogs/AutoChangeLog-pr-29299.yml new file mode 100644 index 00000000000..f536f7be6e2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29299.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Ash drakes no longer get stuck in flight if their target changes Z levels or is destroyed and doesn't spawn lavaland turfs after the lava arena attack ends" \ No newline at end of file From 7ae265cefea9e730112ea44ec039dcf7dd25d65c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:49:52 +0200 Subject: [PATCH 042/257] Automatic changelog for PR #29292 [ci skip] --- html/changelogs/AutoChangeLog-pr-29292.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29292.yml diff --git a/html/changelogs/AutoChangeLog-pr-29292.yml b/html/changelogs/AutoChangeLog-pr-29292.yml new file mode 100644 index 00000000000..d2c823ad9ae --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29292.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - spellcheck: "fixed spelling and punctuation in the blackout drunk split personality message" \ No newline at end of file From b2cd17f65f3ac2191049a3e0fa6aff860770abb3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:50:27 +0200 Subject: [PATCH 043/257] Automatic changelog for PR #29278 [ci skip] --- html/changelogs/AutoChangeLog-pr-29278.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29278.yml diff --git a/html/changelogs/AutoChangeLog-pr-29278.yml b/html/changelogs/AutoChangeLog-pr-29278.yml new file mode 100644 index 00000000000..d3c178da0f3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29278.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Wawastation Science is connected to distro,Floor Electrical Relay cable fixed" \ No newline at end of file From 4b4b93899bdfe6ff6489867b016fc9023d7d66ef Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:50:54 +0200 Subject: [PATCH 044/257] Automatic changelog for PR #29280 [ci skip] --- html/changelogs/AutoChangeLog-pr-29280.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29280.yml diff --git a/html/changelogs/AutoChangeLog-pr-29280.yml b/html/changelogs/AutoChangeLog-pr-29280.yml new file mode 100644 index 00000000000..8fad8ef9673 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29280.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - balance: "MODsuits now deploy 2 times faster" + - balance: "The infiltrator MODsuit now deploys 4 times faster" \ No newline at end of file From 2e8c2363416d34d3ede4bc78d1e11029fbbf226f Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:51:09 +0200 Subject: [PATCH 045/257] Automatic changelog for PR #29281 [ci skip] --- html/changelogs/AutoChangeLog-pr-29281.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29281.yml diff --git a/html/changelogs/AutoChangeLog-pr-29281.yml b/html/changelogs/AutoChangeLog-pr-29281.yml new file mode 100644 index 00000000000..0b169decaa3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29281.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed bileworms not having a deaggro range" \ No newline at end of file From ea7132afaae8f4d4434f92ceefaa8b954a5f51fe Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:51:35 +0200 Subject: [PATCH 046/257] Automatic changelog for PR #29282 [ci skip] --- html/changelogs/AutoChangeLog-pr-29282.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29282.yml diff --git a/html/changelogs/AutoChangeLog-pr-29282.yml b/html/changelogs/AutoChangeLog-pr-29282.yml new file mode 100644 index 00000000000..3c8e62a667c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29282.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed shuttle loan paperwork being unstampable" \ No newline at end of file From 0a22171a030015be8d26e0b3698c872c757ac6d7 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:52:05 +0200 Subject: [PATCH 047/257] Automatic changelog for PR #29283 [ci skip] --- html/changelogs/AutoChangeLog-pr-29283.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29283.yml diff --git a/html/changelogs/AutoChangeLog-pr-29283.yml b/html/changelogs/AutoChangeLog-pr-29283.yml new file mode 100644 index 00000000000..1df777fdd6a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29283.yml @@ -0,0 +1,10 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Strange zeros in paid off citations on sec records" + - bugfix: "Now invalidating citations works" + - bugfix: "You can change crimes description" + - bugfix: "Synths have 'armory access' for sec records logic" + - qol: "Paying off citation now automaticaly voiding it" + - qol: "Crime issuer can void the crime without armory access" + - qol: "In case of invalidation crime shows who voided it" \ No newline at end of file From 55c01e1eb50aa1e1697a168e59059bcaabfcbc5c Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:52:30 +0200 Subject: [PATCH 048/257] Automatic changelog for PR #29284 [ci skip] --- html/changelogs/AutoChangeLog-pr-29284.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29284.yml diff --git a/html/changelogs/AutoChangeLog-pr-29284.yml b/html/changelogs/AutoChangeLog-pr-29284.yml new file mode 100644 index 00000000000..a26d2a183a7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29284.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat" \ No newline at end of file From 25d86db990ce82e0cb093d0c92eeefba0aef0d71 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:52:53 +0200 Subject: [PATCH 049/257] Automatic changelog for PR #29285 [ci skip] --- html/changelogs/AutoChangeLog-pr-29285.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29285.yml diff --git a/html/changelogs/AutoChangeLog-pr-29285.yml b/html/changelogs/AutoChangeLog-pr-29285.yml new file mode 100644 index 00000000000..c3add5f904c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29285.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Fixed DNA samplers not being able to interact with non-scannable objects" \ No newline at end of file From 38959c07bb880850a2222067d10fe4e60b7fc9cf Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:53:26 +0200 Subject: [PATCH 050/257] Automatic changelog for PR #29288 [ci skip] --- html/changelogs/AutoChangeLog-pr-29288.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29288.yml diff --git a/html/changelogs/AutoChangeLog-pr-29288.yml b/html/changelogs/AutoChangeLog-pr-29288.yml new file mode 100644 index 00000000000..873f103f5f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29288.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Ninjas can cloak again" \ No newline at end of file From e776f557728dee6467ca7666a13d9b3b612d1a04 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:54:00 +0200 Subject: [PATCH 051/257] Automatic changelog for PR #29287 [ci skip] --- html/changelogs/AutoChangeLog-pr-29287.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-29287.yml diff --git a/html/changelogs/AutoChangeLog-pr-29287.yml b/html/changelogs/AutoChangeLog-pr-29287.yml new file mode 100644 index 00000000000..af7d6cd03da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-29287.yml @@ -0,0 +1,6 @@ +author: "SkyratBot" +delete-after: True +changes: + - image: "Durand shield got a glowup" + - bugfix: "Durand shield no longer instantly drains its battery" + - bugfix: "Mech UI no longer lies about the amount of power your mech has left" \ No newline at end of file From 86e6f62716e340c9b7d63713c7f626a3fc090225 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:09:41 +0200 Subject: [PATCH 052/257] [MIRROR] Fix TGUI notepad with various small fixes (#29303) * Fix TGUI notepad with various small fixes (#85472) ## About The Pull Request Back from my hiatus and playing ss13 again! A few fixes for this component I wrote back in 2022. Hopefully the commit messages are self-explanatory. There's one fix to TextArea that needs extra scrutiny. I removed the `blur()` call as it prevents newline input (unless holding shift). @ jlsnow301 Could you check this one-liner change? ## Why It's Good For The Game Fixes incorrect prop usage, uses new props on TextArea, uses `login.IDName` instead of `clientName` and so on. The most important fix would be restoring state change on text input as that's quite important for other bits to work. ## Changelog :cl: fix: Various fixes to TGUI notepad /:cl: * Fix TGUI notepad with various small fixes --------- Co-authored-by: Matt --- tgui/packages/tgui/interfaces/NtosNotepad.tsx | 26 ++++++++++++------- .../tgui/styles/interfaces/NtosNotepad.scss | 1 - 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/tgui/packages/tgui/interfaces/NtosNotepad.tsx b/tgui/packages/tgui/interfaces/NtosNotepad.tsx index f90a4d8d865..810abfaefce 100644 --- a/tgui/packages/tgui/interfaces/NtosNotepad.tsx +++ b/tgui/packages/tgui/interfaces/NtosNotepad.tsx @@ -10,6 +10,7 @@ import { useBackend } from '../backend'; import { Box, Divider, MenuBar, Section, TextArea } from '../components'; import { Dialog, UnsavedChangesDialog } from '../components/Dialog'; import { NtosWindow } from '../layouts'; +import { NTOSData } from '../layouts/NtosWindow'; import { createLogger } from '../logging'; const logger = createLogger('NtosNotepad'); @@ -194,6 +195,9 @@ const StatusBar = (props: StatusBarProps) => { const { statuses } = props; return ( + + Press shift-enter to insert new line + Ln {statuses.line}, Col {statuses.column} @@ -238,7 +242,7 @@ interface NotePadTextAreaProps { maintainFocus: boolean; text: string; wordWrap: boolean; - setText: (string) => void; + setText: (text: string) => void; setStatuses: (statuses: Statuses) => void; } @@ -262,10 +266,7 @@ class NotePadTextArea extends Component { if (this.props.maintainFocus) { this.innerRef.current.focus(); - return false; } - - return true; } // eslint-disable-next-line react/no-deprecated @@ -306,10 +307,12 @@ class NotePadTextArea extends Component { return (