From f6a87f85443b6c0d368f10e5eaac97efc8ef06a4 Mon Sep 17 00:00:00 2001
From: Odairu <39929315+Odairu@users.noreply.github.com>
Date: Tue, 21 Jul 2026 23:16:28 -0400
Subject: [PATCH] Malf AI can now pick AIs who are in their shells (#5982)
## About The Pull Request
When malf rolls, it checks to see if an AI is in a shell, and adds them
to the candidate list, if they get chosen, it kicks them out of their
shell and then gives them malf
## Why It's Good For The Game
Malf couldn't roll if you were in a shell, so if you're ROLEPLAY maxxing
like a chad, you don't get to antag
## Proof Of Testing
Screenshots/Videos
## Changelog
:cl:
fix: Malf AI rolls on shells
/:cl:
---
code/modules/antagonists/malf_ai/malf_ai.dm | 5 +++++
.../code/modules/storyteller/event_defines/crewset/malf.dm | 2 ++
2 files changed, 7 insertions(+)
diff --git a/code/modules/antagonists/malf_ai/malf_ai.dm b/code/modules/antagonists/malf_ai/malf_ai.dm
index a2222bfb991..a3776266dcc 100644
--- a/code/modules/antagonists/malf_ai/malf_ai.dm
+++ b/code/modules/antagonists/malf_ai/malf_ai.dm
@@ -26,6 +26,11 @@
src.give_objectives = give_objectives
/datum/antagonist/malf_ai/on_gain()
+ //BUBBER EDIT START - Shells get malf
+ if(owner.current && istype(owner.current, /mob/living/silicon/robot/shell))
+ var/mob/living/silicon/robot/shell/chosen_one = owner.current
+ chosen_one.undeploy()
+ //BUBBER EDIT END
if(owner.current && !isAI(owner.current))
stack_trace("Attempted to give malf AI antag datum to \[[owner]\], who did not meet the requirements.")
return ..()
diff --git a/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm b/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm
index 79b3e9890cc..603c5128500 100644
--- a/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm
+++ b/modular_zubbers/code/modules/storyteller/event_defines/crewset/malf.dm
@@ -22,6 +22,8 @@
/datum/round_event_control/antagonist/solo/malf/get_candidates()
var/list/candidates = list()
for(var/mob/living/silicon/ai/candidate as anything in GLOB.ai_list)
+ if(candidate.deployed_shell)
+ candidate = candidate.deployed_shell
if(QDELETED(candidate) || !candidate.key || !candidate.client || !candidate.mind)
continue
if(!(candidate.client.prefs) || !(antag_flag in candidate.client.prefs.be_special))