[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>
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 33 KiB |
|
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 52 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
@@ -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,
|
||||
};
|
||||