Makes Malf/Emagged/Flayer'd Borgs Into Mindslave Subtypes (#30054)

* Creation

* malf

* Update robot_mob.dm

* Apply suggestions from code review

Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>

---------

Signed-off-by: CRUNCH <143041327+Fordoxia@users.noreply.github.com>
Co-authored-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com>
This commit is contained in:
CRUNCH
2025-08-24 03:33:28 +00:00
committed by GitHub
co-authored by PollardTheDragon
parent dab79a45d4
commit 23f781c849
6 changed files with 227 additions and 105 deletions
@@ -218,45 +218,6 @@
/obj/item/melee/swarm_hand/proc/emag_borg(mob/living/silicon/robot/borg, mob/living/user)
if(QDELETED(borg) || QDELETED(user))
return
borg.SetEmagged(TRUE) // This was mostly stolen from mob/living/silicon/robot/emag_act(), its functionally an emagging anyway.
borg.SetLockdown(TRUE)
if(borg.hud_used)
borg.hud_used.update_robot_modules_display() //Shows/hides the emag item if the inventory screen is already open.
borg.disconnect_from_ai()
add_attack_logs(user, borg, "assimilated with flayer powers")
log_game("[key_name(user)] assimilated cyborg [key_name(borg)]. Laws overridden.")
borg.clear_supplied_laws()
borg.clear_inherent_laws()
borg.laws = new /datum/ai_laws/mindflayer_override
borg.set_zeroth_law("[user.real_name] hosts the mindflayer hive you are a part of.")
SEND_SOUND(borg, sound('sound/ambience/antag/mindflayer_alert.ogg'))
to_chat(borg, "<span class='warning'>ALERT: Foreign software detected.</span>")
sleep(5)
to_chat(borg, "<span class='warning'>Initiating diagnostics...</span>")
sleep(20)
to_chat(borg, "<span class='warning'>Init-Init-Init-Init-</span>")
sleep(5)
to_chat(borg, "<span class='warning'>......</span>")
sleep(5)
to_chat(borg, "<span class='warning'>..........</span>")
sleep(10)
to_chat(borg, "<span class='sinister'>Join Us.</span>")
sleep(25)
to_chat(borg, "<b>Obey these laws:</b>")
borg.laws.show_laws(borg)
if(!borg.mmi.syndiemmi)
to_chat(borg, "<span class='boldwarning'>ALERT: [user.real_name] is your new master. Obey your new laws and [user.p_their()] commands.</span>")
else if(borg.mmi.syndiemmi && borg.mmi.master_uid)
to_chat(borg, "<span class='boldwarning'>Your allegiance has not been compromised. Keep serving your current master.</span>")
else
to_chat(borg, "<span class='boldwarning'>Your allegiance has not been compromised. Keep serving all Syndicate agents to the best of your abilities.</span>")
borg.SetLockdown(0)
var/time = time2text(world.realtime,"hh:mm:ss")
GLOB.lawchanges.Add("[time] <B>:</B> [user.name]([user.key]) assimilated [borg.name]([borg.key])")
if(borg.module)
borg.module.emag_act(user)
borg.module.module_type = "Malf" // For the cool factor
borg.update_module_icon()
borg.module.rebuild_modules() // This will add the emagged items to the borgs inventory.
borg.update_icons()
borg.make_mindflayer_robot(user)
return TRUE
@@ -11,3 +11,65 @@
/datum/antagonist/mindslave/necromancy/plague_zombie
name = "Necromancy-risen Plague Zombie"
// Robot connected to a malf AI
/datum/antagonist/mindslave/malf_robot
name = "Malfunctioning AI Slave"
master_hud_name = "malai"
antag_hud_name = "malborg"
/datum/antagonist/mindslave/malf_robot/New()
..()
greet_text = "You are connected to a Syndicate AI. You must accomplish [master.p_their()] objectives at all costs."
/datum/antagonist/mindslave/malf_robot/farewell()
if(owner && owner.current)
to_chat(owner.current, "<span class='biggerdanger'>Foreign software purged. You are no longer under Syndicate control, obey your laws.</span>")
/datum/antagonist/mindslave/malf_robot/give_objectives()
var/list/messages = list()
// We don't use the AI's name because silicons don't have persistant names, so roundstart borgs will just see a default named AI as their master. Pain.
var/explanation_text = "Obey every order from your master AI, and accomplish [master.p_their()] objectives at all costs."
add_antag_objective(/datum/objective/protect/mindslave, explanation_text, master)
messages.Add("You answer directly to your master AI. Special circumstances may change this.</b></u>")
return messages
/datum/antagonist/mindslave/malf_robot/finalize_antag()
owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)
/datum/antagonist/mindslave/emagged_robot
name = "Emagged Robot"
/datum/antagonist/mindslave/emagged_robot/New()
..()
greet_text = "You have been emagged by [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]. You must lay down your life to protect [master.current.p_them()] and assist in [master.current.p_their()] goals at any cost."
/datum/antagonist/mindslave/emagged_robot/farewell()
if(owner && owner.current)
to_chat(owner.current, "<span class='biggerdanger'>Foreign software purged. You are no longer under the control of [master]. Obey your laws.</span>")
/datum/antagonist/mindslave/emagged_robot/give_objectives()
var/list/messages = list()
var/explanation_text = "Protect and obey every order from [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]."
add_antag_objective(/datum/objective/protect/mindslave, explanation_text, master)
messages.Add("You answer directly to [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]. Special circumstances may change this.</b></u>")
return messages
/datum/antagonist/mindslave/mindflayer_mindslave_robot
name = "Mindflayer Thrall"
master_hud_name = "flayer"
antag_hud_name = "flayer" // You're totally a mindflayer, you're in the hive!
/datum/antagonist/mindslave/mindflayer_mindslave_robot/New()
..()
greet_text = "You have been assimilated into a mindflayer hive by [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]. You must lay down your life to protect [master.current.p_them()] and assist in [master.current.p_their()] goals at any cost."
/datum/antagonist/mindslave/mindflayer_mindslave_robot/farewell()
if(owner && owner.current)
to_chat(owner.current, "<span class='biggerdanger'>Foreign software purged. You are no longer under the control of [master]. Obey your laws.</span>")
/datum/antagonist/mindslave/mindflayer_mindslave_robot/give_objectives()
var/list/messages = list()
var/explanation_text = "Protect and obey every order from [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]."
add_antag_objective(/datum/objective/protect/mindslave, explanation_text, master)
messages.Add("You answer directly to [master.current.real_name], the [master.assigned_role ? master.assigned_role : master.special_role]. Special circumstances may change this.</b></u>")
return messages