From 155ace6d2bd90dcebd2a1d44085a0516779a882f Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 23 May 2026 17:17:46 +0200 Subject: [PATCH] Allows uplinks to be given while the owner is under any form of shapeshifting (#96105) ## About The Pull Request This is more snowflaky than I'd like but I can't think of a better way to handle this than directly checking for the shapeshift status, as its used in a bunch of places. Closes #96072 ## Changelog :cl: fix: Being shapeshifted while rolling midround traitor no longer robs you of your uplink /:cl: --- code/datums/mind/antag.dm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index 007acd4c3b3..2cb0306ebb9 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -111,18 +111,21 @@ * * antag_datum: the antag datum of the uplink owner, for storing it in antag memory. optional! */ /datum/mind/proc/give_uplink(silent = FALSE, datum/antagonist/antag_datum) - if(isnull(current)) + if(!isliving(current)) return var/mob/living/carbon/human/traitor_mob = current if (!istype(traitor_mob)) - return + var/datum/status_effect/shapechange_mob/shapeshift = current.has_status_effect(/datum/status_effect/shapechange_mob) + if (!ishuman(shapeshift?.caster_mob)) + return + traitor_mob = shapeshift.caster_mob var/obj/item/uplink_loc - var/uplink_spawn_location = traitor_mob.client?.prefs?.read_preference(/datum/preference/choiced/uplink_location) + var/uplink_spawn_location = current.client?.prefs?.read_preference(/datum/preference/choiced/uplink_location) var/cant_speak = (HAS_TRAIT(traitor_mob, TRAIT_MUTE) || is_mime_job(assigned_role)) if(uplink_spawn_location == UPLINK_RADIO && cant_speak) if(!silent) - to_chat(traitor_mob, span_warning("You have been deemed ineligible for a radio uplink. Supplying standard uplink instead.")) + to_chat(current, span_warning("You have been deemed ineligible for a radio uplink. Supplying standard uplink instead.")) uplink_spawn_location = UPLINK_PDA if(uplink_spawn_location != UPLINK_IMPLANT) @@ -134,7 +137,7 @@ var/obj/item/implant/uplink/starting/new_implant = new(traitor_mob) new_implant.implant(traitor_mob, null, silent = TRUE) if(!silent) - to_chat(traitor_mob, span_boldnotice("Your Syndicate Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it.")) + to_chat(current, span_boldnotice("Your Syndicate Uplink has been cunningly implanted in you, for a small TC fee. Simply trigger the uplink to access it.")) add_memory(/datum/memory/key/traitor_uplink/implant, uplink_loc = "implant") return new_implant @@ -144,7 +147,7 @@ if(!new_uplink) CRASH("Uplink creation failed.") new_uplink.setup_unlock_code() - new_uplink.uplink_handler.owner = traitor_mob.mind + new_uplink.uplink_handler.owner = src new_uplink.uplink_handler.assigned_role = traitor_mob.mind.assigned_role.title new_uplink.uplink_handler.assigned_species = traitor_mob.dna.species.id @@ -164,7 +167,7 @@ new_uplink.unlock_text = unlock_text if(!silent) - to_chat(traitor_mob, span_boldnotice(unlock_text)) + to_chat(current, span_boldnotice(unlock_text)) if(antag_datum) antag_datum.antag_memory += new_uplink.unlock_note + "
" return .