From cd0f754052cb5a0e221d8839c8d4e5c7ca74de72 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Sat, 9 Mar 2024 17:49:20 -0500 Subject: [PATCH] Re-implements reinforcement operative antag datum, adds support cyborg datums (#81795) ## About The Pull Request This adjusts the nukeop reinforcement spawners/reinforcement datums. There's a lot of very minor code touch-ups involved here, but I've tested it and it sure does feel like everything still works. Some unused or unneeded variables on the spawner item were axed. Now that the reinforcement datum is in use again, it also no longer needs to manipulate the datum to not use spawnpoints. There's a cyborg reinforcement datum too. Identical to the human reinforcement datum, but they're also now used in lieu of the (now removed) `borg_to_spawn` variable. By removing this variable and tightening some things up, the logic for generating the deadchat poll is a little bit smaller. I'm seriously running out of stuff to say about this PR. Can you tell that I'm procrastinating on other stuff? ## Why It's Good For The Game Some information provided to reinforcement candidates/players is more distinct. Puts an orphaned datum back into use, and cinches up some code attached to it. If someone wants to do more with reinforcements or support borgs, it'll be a bit easier for them. ## Changelog :cl: Rhials code: Players now receive antag datums specific for reinforcements/support borgs. /:cl: --- code/__DEFINES/role_preferences.dm | 3 ++ .../antagonists/_common/antag_spawner.dm | 32 +++++++++---------- .../nukeop/datums/operative_reinforcement.dm | 4 +++ 3 files changed, 22 insertions(+), 17 deletions(-) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 09b07295bec..71fa29b6ea3 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -78,6 +78,9 @@ #define ROLE_WIZARD_APPRENTICE "apprentice" #define ROLE_SYNDICATE_MONKEY "Syndicate Monkey Agent" #define ROLE_CONTRACTOR_SUPPORT "Contractor Support Unit" +#define ROLE_SYNDICATE_SABOBORG "Syndicate Sabotage Cyborg" +#define ROLE_SYNDICATE_MEDBORG "Syndicate Medical Cyborg" +#define ROLE_SYNDICATE_ASSAULTBORG "Syndicate Assault Cyborg" //Spawner roles #define ROLE_ANCIENT_CREW "Ancient Crew" diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 19ff29651ef..e497a30f705 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -98,15 +98,12 @@ desc = "MI13 designed one-use radio for calling immediate backup. Have no regards for safety of whom it summons - they are all inferior clones from Interdyne's genebanks anyway." icon = 'icons/obj/devices/voice.dmi' icon_state = "nukietalkie" - var/borg_to_spawn /// The name of the special role given to the recruit var/special_role_name = ROLE_NUCLEAR_OPERATIVE /// The applied outfit var/datum/outfit/syndicate/outfit = /datum/outfit/syndicate/reinforcement - /// The outfit given to plasmaman operatives - var/datum/outfit/syndicate/plasma_outfit = /datum/outfit/syndicate/reinforcement/plasmaman /// The antag datum applied - var/datum/antagonist/nukeop/antag_datum = /datum/antagonist/nukeop + var/datum/antagonist/nukeop/reinforcement/antag_datum = /datum/antagonist/nukeop/reinforcement /// Style used by the droppod var/pod_style = STYLE_SYNDICATE /// Do we use a random subtype of the outfit? @@ -133,7 +130,7 @@ return to_chat(user, span_notice("You activate [src] and wait for confirmation.")) - var/mob/chosen_one = SSpolling.poll_ghost_candidates(check_jobban = ROLE_OPERATIVE, role = ROLE_OPERATIVE, poll_time = 15 SECONDS, ignore_category = POLL_IGNORE_SYNDICATE, alert_pic = src, role_name_text = "syndicate [borg_to_spawn ? "[borg_to_spawn] cyborg":"operative"]", amount_to_pick = 1) + var/mob/chosen_one = SSpolling.poll_ghost_candidates("Do you want to play as a reinforcement [special_role_name]?", check_jobban = ROLE_OPERATIVE, role = ROLE_OPERATIVE, poll_time = 15 SECONDS, ignore_category = POLL_IGNORE_SYNDICATE, alert_pic = src, role_name_text = special_role_name, amount_to_pick = 1) if(chosen_one) if(QDELETED(src) || !check_usability(user)) return @@ -156,7 +153,6 @@ nukie.forceMove(locate(1,1,1)) antag_datum = new() - antag_datum.send_to_spawnpoint = FALSE antag_datum.nukeop_outfit = use_subtypes ? pick(subtypesof(outfit)) : outfit @@ -182,18 +178,20 @@ desc = "A single-use beacon designed to quickly launch reinforcement cyborgs into the field." icon = 'icons/obj/devices/remote.dmi' icon_state = "gangtool-red" + antag_datum = /datum/antagonist/nukeop/reinforcement/cyborg + special_role_name = "Syndicate Cyborg" /obj/item/antag_spawner/nuke_ops/borg_tele/assault name = "syndicate assault cyborg beacon" - borg_to_spawn = "Assault" + special_role_name = ROLE_SYNDICATE_ASSAULTBORG /obj/item/antag_spawner/nuke_ops/borg_tele/medical name = "syndicate medical beacon" - borg_to_spawn = "Medical" + special_role_name = ROLE_SYNDICATE_MEDBORG /obj/item/antag_spawner/nuke_ops/borg_tele/saboteur name = "syndicate saboteur beacon" - borg_to_spawn = "Saboteur" + special_role_name = ROLE_SYNDICATE_SABOBORG /obj/item/antag_spawner/nuke_ops/borg_tele/spawn_antag(client/C, turf/T, kind, datum/mind/user) var/mob/living/silicon/robot/borg @@ -201,13 +199,15 @@ if(!creator_op) return var/obj/structure/closet/supplypod/pod = setup_pod() - switch(borg_to_spawn) - if("Medical") + switch(special_role_name) + if(ROLE_SYNDICATE_MEDBORG) borg = new /mob/living/silicon/robot/model/syndicate/medical() - if("Saboteur") + if(ROLE_SYNDICATE_SABOBORG) borg = new /mob/living/silicon/robot/model/syndicate/saboteur() + if(ROLE_SYNDICATE_ASSAULTBORG) + borg = new /mob/living/silicon/robot/model/syndicate() else - borg = new /mob/living/silicon/robot/model/syndicate() //Assault borg by default + stack_trace("Unknown cyborg type '[special_role_name]' could not be found by [src]!") var/brainfirstname = pick(GLOB.first_names_male) if(prob(50)) @@ -225,10 +225,8 @@ borg.key = C.key - var/datum/antagonist/nukeop/new_borg = new() - new_borg.send_to_spawnpoint = FALSE - borg.mind.add_antag_datum(new_borg,creator_op.nuke_team) - borg.mind.special_role = "Syndicate Cyborg" + borg.mind.add_antag_datum(antag_datum, creator_op ? creator_op.get_team() : null) + borg.mind.special_role = special_role_name borg.forceMove(pod) new /obj/effect/pod_landingzone(get_turf(src), pod) diff --git a/code/modules/antagonists/nukeop/datums/operative_reinforcement.dm b/code/modules/antagonists/nukeop/datums/operative_reinforcement.dm index eedaef3f720..eb386342c09 100644 --- a/code/modules/antagonists/nukeop/datums/operative_reinforcement.dm +++ b/code/modules/antagonists/nukeop/datums/operative_reinforcement.dm @@ -1,4 +1,8 @@ /datum/antagonist/nukeop/reinforcement + name = "Nuclear Operative Reinforcement" show_in_antagpanel = FALSE send_to_spawnpoint = FALSE nukeop_outfit = /datum/outfit/syndicate/reinforcement + +/datum/antagonist/nukeop/reinforcement/cyborg + name = "Nuclear Operative Support Cyborg"