From 698d06dad7cd2a213938b57c41703d97e905357a Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Tue, 23 Nov 2021 16:25:32 +0000 Subject: [PATCH] [MIRROR] Add station trait for varying colored assistant jumpsuits [MDB IGNORE] (#9646) * Add station trait for varying colored assistant jumpsuits * Feex Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com> Co-authored-by: GoldenAlpharex --- code/datums/station_traits/neutral_traits.dm | 13 ++ code/modules/clothing/under/color.dm | 23 ++- code/modules/jobs/job_types/assistant.dm | 153 +++++++++++++++++-- 3 files changed, 173 insertions(+), 16 deletions(-) diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index e5438922cb9..3da3c8005f6 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -114,3 +114,16 @@ /datum/station_trait/announcement_medbot/New() . = ..() SSstation.announcer = /datum/centcom_announcer/medbot + +/datum/station_trait/colored_assistants + name = "Colored Assistants" + trait_type = STATION_TRAIT_NEUTRAL + weight = 10 + show_in_report = TRUE + report_message = "Due to a shortage in standard issue jumpsuits, we have provided your assistants with one of our backup supplies." + +/datum/station_trait/colored_assistants/New() + . = ..() + + var/new_colored_assistant_type = pick(subtypesof(/datum/colored_assistant) - get_configured_colored_assistant_type()) + GLOB.colored_assistant = new new_colored_assistant_type diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 40c41907b71..8c492e7a9a1 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -21,12 +21,23 @@ icon_state = "jumpskirt" greyscale_config_worn_digi = null +/// Returns a random, acceptable jumpsuit typepath +/proc/get_random_jumpsuit() + return pick( + subtypesof(/obj/item/clothing/under/color) \ + - typesof(/obj/item/clothing/under/color/jumpskirt) \ + - /obj/item/clothing/under/color/random \ + - /obj/item/clothing/under/color/grey/ancient \ + - /obj/item/clothing/under/color/black/ghost \ + - /obj/item/clothing/under/rank/prisoner \ + ) + /obj/item/clothing/under/color/random icon_state = "random_jumpsuit" /obj/item/clothing/under/color/random/Initialize(mapload) ..() - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/ancient - /obj/item/clothing/under/color/black/ghost - /obj/item/clothing/under/rank/prisoner) + var/obj/item/clothing/under/color/C = get_random_jumpsuit() if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING, initial=TRUE) //or else you end up with naked assistants running around everywhere... @@ -34,12 +45,20 @@ new C(loc) return INITIALIZE_HINT_QDEL +/// Returns a random, acceptable jumpskirt typepath +/proc/get_random_jumpskirt() + return pick( + subtypesof(/obj/item/clothing/under/color/jumpskirt) \ + - /obj/item/clothing/under/color/jumpskirt/random \ + - /obj/item/clothing/under/rank/prisoner/skirt \ + ) + /obj/item/clothing/under/color/jumpskirt/random icon_state = "random_jumpsuit" //Skirt variant needed /obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload) ..() - var/obj/item/clothing/under/color/jumpskirt/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/jumpskirt/random - /obj/item/clothing/under/rank/prisoner/skirt) + var/obj/item/clothing/under/color/jumpskirt/C = get_random_jumpskirt() if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING, initial=TRUE) diff --git a/code/modules/jobs/job_types/assistant.dm b/code/modules/jobs/job_types/assistant.dm index 505f4f5b8e7..2e3290e5f8b 100644 --- a/code/modules/jobs/job_types/assistant.dm +++ b/code/modules/jobs/job_types/assistant.dm @@ -1,3 +1,5 @@ +GLOBAL_DATUM(colored_assistant, /datum/colored_assistant) + /* Assistant */ @@ -39,29 +41,31 @@ Assistant uniform = /obj/item/clothing/under/color/random /* SKYRAT EDIT REMOVAL - THIS OVERRIDES CLOTHING LOADOUTS -/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/H) +/datum/outfit/job/assistant/pre_equip(mob/living/carbon/human/target) ..() - if (CONFIG_GET(flag/grey_assistants)) - give_grey_suit(H) - else - if(H.jumpsuit_style == PREF_SUIT) - uniform = /obj/item/clothing/under/color/random - else - uniform = /obj/item/clothing/under/color/jumpskirt/random + give_jumpsuit(target) + +/datum/outfit/job/assistant/proc/give_jumpsuit(mob/living/carbon/human/target) + var/static/jumpsuit_number = 0 + jumpsuit_number += 1 + + if (isnull(GLOB.colored_assistant)) + var/configured_type = get_configured_colored_assistant_type() + GLOB.colored_assistant = new configured_type + + var/index = (jumpsuit_number % GLOB.colored_assistant.jumpsuits.len) + 1 -/datum/outfit/job/assistant/proc/give_grey_suit(mob/living/carbon/human/target) if (target.jumpsuit_style == PREF_SUIT) - uniform = /obj/item/clothing/under/color/grey + uniform = GLOB.colored_assistant.jumpsuits[index] else - uniform = /obj/item/clothing/under/color/jumpskirt/grey + uniform = GLOB.colored_assistant.jumpskirts[index] */ /datum/outfit/job/assistant/consistent name = "Assistant - Consistent" /* SKYRAT EDIT REMOVAL -/datum/outfit/job/assistant/consistent/pre_equip(mob/living/carbon/human/H) - ..() - give_grey_suit(H) +/datum/outfit/job/assistant/consistent/give_jumpsuit(mob/living/carbon/human/target) + uniform = /obj/item/clothing/under/color/grey /datum/outfit/job/assistant/consistent/post_equip(mob/living/carbon/human/H, visualsOnly) ..() @@ -70,3 +74,124 @@ Assistant if (SSatoms.initialized == INITIALIZATION_INSSATOMS) H.w_uniform?.update_greyscale() */ + +/proc/get_configured_colored_assistant_type() + return CONFIG_GET(flag/grey_assistants) ? /datum/colored_assistant/grey : /datum/colored_assistant/random + +/// Defines a style of jumpsuit/jumpskirt for assistants. +/// Jumpsuit and jumpskirt lists should match in colors, as they are used interchangably. +/datum/colored_assistant + var/list/jumpsuits + var/list/jumpskirts + +/datum/colored_assistant/grey + jumpsuits = list(/obj/item/clothing/under/color/grey) + jumpskirts = list(/obj/item/clothing/under/color/jumpskirt/grey) + +/datum/colored_assistant/random + jumpsuits = list(/obj/item/clothing/under/color/random) + jumpskirts = list(/obj/item/clothing/under/color/jumpskirt/random) + +/datum/colored_assistant/christmas + jumpsuits = list( + /obj/item/clothing/under/color/green, + /obj/item/clothing/under/color/red, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/green, + /obj/item/clothing/under/color/jumpskirt/red, + ) + +/datum/colored_assistant/mcdonalds + jumpsuits = list( + /obj/item/clothing/under/color/yellow, + /obj/item/clothing/under/color/red, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/yellow, + /obj/item/clothing/under/color/jumpskirt/red, + ) + +/datum/colored_assistant/halloween + jumpsuits = list( + /obj/item/clothing/under/color/orange, + /obj/item/clothing/under/color/black, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/orange, + /obj/item/clothing/under/color/jumpskirt/black, + ) + +/datum/colored_assistant/ikea + jumpsuits = list( + /obj/item/clothing/under/color/yellow, + /obj/item/clothing/under/color/blue, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/yellow, + /obj/item/clothing/under/color/jumpskirt/blue, + ) + +/datum/colored_assistant/mud + jumpsuits = list( + /obj/item/clothing/under/color/brown, + /obj/item/clothing/under/color/lightbrown, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/brown, + /obj/item/clothing/under/color/jumpskirt/lightbrown, + ) + +/datum/colored_assistant/warm + jumpsuits = list( + /obj/item/clothing/under/color/red, + /obj/item/clothing/under/color/pink, + /obj/item/clothing/under/color/orange, + /obj/item/clothing/under/color/yellow, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/red, + /obj/item/clothing/under/color/jumpskirt/pink, + /obj/item/clothing/under/color/jumpskirt/orange, + /obj/item/clothing/under/color/jumpskirt/yellow, + ) + +/datum/colored_assistant/cold + jumpsuits = list( + /obj/item/clothing/under/color/blue, + /obj/item/clothing/under/color/darkblue, + /obj/item/clothing/under/color/darkgreen, + /obj/item/clothing/under/color/green, + /obj/item/clothing/under/color/lightpurple, + /obj/item/clothing/under/color/teal, + ) + + jumpskirts = list( + /obj/item/clothing/under/color/jumpskirt/blue, + /obj/item/clothing/under/color/jumpskirt/darkblue, + /obj/item/clothing/under/color/jumpskirt/darkgreen, + /obj/item/clothing/under/color/jumpskirt/green, + /obj/item/clothing/under/color/jumpskirt/lightpurple, + /obj/item/clothing/under/color/jumpskirt/teal, + ) + +/// Will pick one color, and stick with it +/datum/colored_assistant/solid + +/datum/colored_assistant/solid/New() + var/obj/item/clothing/under/color/random_jumpsuit_type = get_random_jumpsuit() + jumpsuits = list(random_jumpsuit_type) + + for (var/obj/item/clothing/under/color/jumpskirt/jumpskirt_type as anything in subtypesof(/obj/item/clothing/under/color/jumpskirt)) + if (initial(jumpskirt_type.greyscale_colors) == initial(random_jumpsuit_type.greyscale_colors)) + jumpskirts = list(jumpskirt_type) + return + + // Couldn't find a matching jumpskirt, oh well + jumpskirts = list(get_random_jumpskirt())