[MIRROR] Nuclear operatives can now be other species. Pref toggle to always be human as operative [MDB IGNORE] (#23433)

* Nuclear operatives can now be other species. Pref toggle to always be human as operative

* remove skyrat edit

---------

Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
This commit is contained in:
SkyratBot
2023-08-31 23:27:59 +02:00
committed by GitHub
parent a868832007
commit 1edbfcd0f0
18 changed files with 135 additions and 12 deletions
@@ -28,6 +28,7 @@
new /obj/item/clothing/under/syndicate(src)
new /obj/item/clothing/under/syndicate/skirt(src)
new /obj/item/clothing/shoes/sneakers/black(src)
new /obj/item/mod/module/plasma_stabilizer(src)
/obj/structure/closet/syndicate/nuclear
desc = "It's a storage unit for a Syndicate boarding party."
@@ -104,7 +104,9 @@
var/special_role_name = ROLE_NUCLEAR_OPERATIVE
/// The applied outfit
var/datum/outfit/syndicate/outfit = /datum/outfit/syndicate/reinforcement
/// The antag datam applied
/// 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
/// Style used by the droppod
var/pod_style = STYLE_SYNDICATE
@@ -144,11 +146,11 @@
else
to_chat(user, span_warning("Unable to connect to Syndicate command. Please wait and try again later or use the beacon on your uplink to get your points refunded."))
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/C, turf/T, kind, datum/mind/user)
/obj/item/antag_spawner/nuke_ops/spawn_antag(client/our_client, turf/T, kind, datum/mind/user)
var/mob/living/carbon/human/nukie = new()
var/obj/structure/closet/supplypod/pod = setup_pod()
C.prefs.safe_transfer_prefs_to(nukie, is_antag = TRUE)
nukie.ckey = C.key
our_client.prefs.safe_transfer_prefs_to(nukie, is_antag = TRUE)
nukie.ckey = our_client.key
var/datum/mind/op_mind = nukie.mind
if(length(GLOB.newplayer_start)) // needed as hud code doesn't render huds if the atom (in this case the nukie) is in nullspace, so just move the nukie somewhere safe
nukie.forceMove(pick(GLOB.newplayer_start))
@@ -157,6 +159,7 @@
antag_datum = new()
antag_datum.send_to_spawnpoint = FALSE
antag_datum.nukeop_outfit = use_subtypes ? pick(subtypesof(outfit)) : outfit
var/datum/antagonist/nukeop/creator_op = user.has_antag_datum(/datum/antagonist/nukeop, TRUE)
+13 -8
View File
@@ -8,9 +8,13 @@
show_to_ghosts = TRUE
hijack_speed = 2 //If you can't take out the station, take the shuttle instead.
suicide_cry = "FOR THE SYNDICATE!!"
/// Which nukie team are we on?
var/datum/team/nuclear/nuke_team
var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint.
/// If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
var/always_new_team = FALSE
/// Should the user be moved to default spawnpoint after being granted this datum.
var/send_to_spawnpoint = TRUE
/// The DEFAULT outfit we will give to players granted this datum
var/nukeop_outfit = /datum/outfit/syndicate
preview_outfit = /datum/outfit/nuclear_operative_elite
@@ -40,13 +44,12 @@
if(!nukeop_outfit) // this variable is null in instances where an antagonist datum is granted via enslaving the mind (/datum/mind/proc/enslave_mind_to_creator), like in golems.
return
// SKYRAT EDIT START
//operative.set_species(/datum/species/human) //Plasmamen burn up otherwise, and besides, all other species are vulnerable to asimov AIs. Let's standardize all operatives being human.
if(isplasmaman(operative))
operative.equipOutfit(/datum/outfit/plasmaman) // they lose the turtleneck but that's fine
// SKYRAT EDIT END
// If our nuke_ops_species pref is set to TRUE, (or we have no client) make us a human
if(isnull(operative.client) || operative.client.prefs.read_preference(/datum/preference/toggle/nuke_ops_species))
operative.set_species(/datum/species/human)
operative.equip_species_outfit(nukeop_outfit)
operative.equipOutfit(nukeop_outfit)
return TRUE
/datum/antagonist/nukeop/greet()
@@ -243,7 +246,9 @@
name = "Nuclear Operative Leader"
nukeop_outfit = /datum/outfit/syndicate/leader
always_new_team = TRUE
/// Randomly chosen honorific, for distinction
var/title
/// The nuclear challenge remote we will spawn this player with.
var/challengeitem = /obj/item/nuclear_challenge
/datum/antagonist/nukeop/leader/memorize_code()
@@ -13,18 +13,33 @@
skillchips = list(/obj/item/skillchip/disk_verifier)
box = /obj/item/storage/box/survival/syndie
/// Amount of TC to automatically store in this outfit's uplink.
var/tc = 25
/// Enables big voice on this outfit's headset, used for nukie leaders.
var/command_radio = FALSE
/// The type of uplink to be given on equip.
var/uplink_type = /obj/item/uplink/nuclear
id_trim = /datum/id_trim/chameleon/operative
/datum/outfit/syndicate/plasmaman
name = "Syndicate Operative - Basic (Plasmaman)"
head = /obj/item/clothing/head/helmet/space/plasmaman/syndie
uniform = /obj/item/clothing/under/plasmaman/syndicate
r_hand = /obj/item/tank/internals/plasmaman/belt/full
/datum/outfit/syndicate/leader
name = "Syndicate Leader - Basic"
command_radio = TRUE
id_trim = /datum/id_trim/chameleon/operative/nuke_leader
/datum/outfit/syndicate/leader/plasmaman
name = "Syndicate Leader - Basic (Plasmaman)"
head = /obj/item/clothing/head/helmet/space/plasmaman/syndie
uniform = /obj/item/clothing/under/plasmaman/syndicate
r_hand = /obj/item/tank/internals/plasmaman/belt/full
/datum/outfit/syndicate/post_equip(mob/living/carbon/human/nukie, visualsOnly = FALSE)
if(visualsOnly)
return
@@ -64,6 +79,17 @@
/obj/item/pen/edagger = 1,
)
/datum/outfit/syndicate/full/plasmaman
name = "Syndicate Operative - Full Kit (Plasmaman)"
back = /obj/item/mod/control/pre_equipped/nuclear/plasmaman
uniform = /obj/item/clothing/under/plasmaman/syndicate
r_pocket = /obj/item/tank/internals/plasmaman/belt/full
mask = null
/datum/outfit/syndicate/full/plasmaman/New()
backpack_contents += /obj/item/clothing/head/helmet/space/plasmaman/syndie
return ..()
/datum/outfit/syndicate/reinforcement
name = "Syndicate Operative - Reinforcement"
tc = 0
@@ -80,6 +106,13 @@
to_chat(H, span_notice("You're an agent of [faction], sent to accompany the nuclear squad on their mission. \
Support your allies, and remember: Down with Nanotrasen."))
/datum/outfit/syndicate/reinforcement/plasmaman
name = "Syndicate Operative - Reinforcement (Plasmaman)"
head = /obj/item/clothing/head/helmet/space/plasmaman/syndie
uniform = /obj/item/clothing/under/plasmaman/syndicate
r_hand = /obj/item/tank/internals/plasmaman/belt/full
tc = 0
/datum/outfit/syndicate/reinforcement/gorlex
name = "Syndicate Operative - Gorlex Reinforcement"
suit = /obj/item/clothing/suit/armor/vest/alt
@@ -0,0 +1,23 @@
/// When TRUE, will spawn you as a human when selected for an operative role
/// When FALSE, players will be placed into the game as their character's species
/datum/preference/toggle/nuke_ops_species
category = PREFERENCE_CATEGORY_NON_CONTEXTUAL
can_randomize = FALSE
default_value = TRUE
savefile_identifier = PREFERENCE_CHARACTER
savefile_key = "operative_species"
/datum/preference/toggle/nuke_ops_species/is_accessible(datum/preferences/preferences)
. = ..()
if(!.)
return FALSE
// If one of the roles is ticked in the antag prefs menu, this option will show.
var/static/list/ops_roles = list(ROLE_OPERATIVE, ROLE_LONE_OPERATIVE, ROLE_OPERATIVE_MIDROUND, ROLE_CLOWN_OPERATIVE)
if(length(ops_roles & preferences.be_special))
return TRUE
return FALSE
/datum/preference/toggle/nuke_ops_species/apply_to_human(mob/living/carbon/human/target, value)
return
@@ -436,3 +436,10 @@
desc = "A special containment helmet designed for CentCom Staff. You know, so any coffee spills don't kill the poor sod."
icon_state = "intern_envirohelm"
inhand_icon_state = null
/obj/item/clothing/head/helmet/space/plasmaman/syndie
name = "tacticool envirosuit helmet"
desc = "There's no doubt about it, this helmet puts you above ALL of the other plasmamen. If you see another plasmaman wearing a helmet like this, it's either because they're a fellow badass, \
or they've murdered one of your fellow badasses and have taken it from them as a trophy. Either way, anyone wearing this deserves at least a cursory nod of respect."
icon_state = "syndie_envirohelm"
inhand_icon_state = null
+8
View File
@@ -149,3 +149,11 @@
bio = 50
fire = 50
acid = 40
/obj/item/clothing/under/plasmaman/syndicate
name = "tacticool envirosuit"
desc = "A sinister looking envirosuit, for the boniest of operatives."
icon_state = "syndie_envirosuit"
has_sensor = NO_SENSORS
resistance_flags = FIRE_PROOF
inhand_icon_state = null
@@ -30,6 +30,10 @@
Mind.special_role = ROLE_LONE_OPERATIVE
Mind.active = TRUE
Mind.transfer_to(operative)
if(!operative.client?.prefs.read_preference(/datum/preference/toggle/nuke_ops_species))
var/species_type = operative.client.prefs.read_preference(/datum/preference/choiced/species)
operative.set_species(species_type) //Apply the preferred species to our freshly-made body.
Mind.add_antag_datum(/datum/antagonist/nukeop/lone)
message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone operative by an event.")
@@ -198,6 +198,9 @@ GLOBAL_LIST_EMPTY(features_by_species)
**/
var/properly_gained = FALSE
///A list containing outfits that will be overridden in the species_equip_outfit proc. [Key = Typepath passed in] [Value = Typepath of outfit you want to equip for this specific species instead].
var/list/outfit_override_registry = list()
///////////
// PROCS //
///////////
@@ -405,6 +405,22 @@
return O.equip(src, visualsOnly)
///A version of equipOutfit that overrides passed in outfits with their entry on the species' outfit override registry
/mob/living/carbon/human/proc/equip_species_outfit(outfit, visualsOnly = FALSE)
var/datum/outfit/outfit_to_equip
var/override_outfit_path = dna?.species.outfit_override_registry[outfit]
if(override_outfit_path)
outfit_to_equip = new override_outfit_path
else
outfit_to_equip = new outfit
if(isnull(outfit_to_equip))
return FALSE
return outfit_to_equip.equip(src, visualsOnly)
//delete all equipment without dropping anything
/mob/living/carbon/human/proc/delete_equipment()
for(var/slot in get_all_worn_items())//order matters, dependant slots go first
@@ -51,6 +51,13 @@
ass_image = 'icons/ass/assplasma.png'
outfit_override_registry = list(
/datum/outfit/syndicate = /datum/outfit/syndicate/plasmaman,
/datum/outfit/syndicate/full = /datum/outfit/syndicate/full/plasmaman,
/datum/outfit/syndicate/leader = /datum/outfit/syndicate/leader/plasmaman,
/datum/outfit/syndicate/reinforcement = /datum/outfit/syndicate/reinforcement/plasmaman,
)
/// If the bones themselves are burning clothes won't help you much
var/internal_fire = FALSE
+6
View File
@@ -256,6 +256,12 @@
/obj/item/mod/module/jetpack/advanced,
)
/obj/item/mod/control/pre_equipped/nuclear/plasmaman
/obj/item/mod/control/pre_equipped/nuclear/plasmaman/Initialize(mapload, new_theme, new_skin, new_core)
applied_modules += /obj/item/mod/module/plasma_stabilizer
return ..()
/obj/item/mod/control/pre_equipped/nuclear/unrestricted
req_access = null
Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

+1
View File
@@ -3320,6 +3320,7 @@
#include "code\modules\client\preferences\multiz_performance.dm"
#include "code\modules\client\preferences\names.dm"
#include "code\modules\client\preferences\ooc.dm"
#include "code\modules\client\preferences\operative_species.dm"
#include "code\modules\client\preferences\paint_color.dm"
#include "code\modules\client\preferences\parallax.dm"
#include "code\modules\client\preferences\pda.dm"
@@ -0,0 +1,6 @@
import { CheckboxInput, FeatureToggle } from '../base';
export const operative_species: FeatureToggle = {
name: 'Always Human as Operative',
component: CheckboxInput,
};