From 389e6de8f5792e2d253c0aa847f142e2f49dc593 Mon Sep 17 00:00:00 2001 From: Michiyamenotehifunana <31995558+Michiyamenotehifunana@users.noreply.github.com> Date: Wed, 7 Feb 2018 09:08:08 +0800 Subject: [PATCH] FINALLY modularizes Polychromic Clothes AND modernizes all polychromic code! (#5269) * FINALLY AFTER 2 MONTHS WOOOOOOOOOOOOOOO * Updates all polychromic code This makes the default argument of all polychromic color input menus the last chosen color. --- code/citadel/cit_guns.dm | 38 ++--- modular_citadel/code/game/objects/ids.dm | 2 +- .../objects/items/melee/eutactic_blades.dm | 6 +- .../crates_lockers/closets/fitness.dm | 5 + .../crates_lockers/closets/wardrobe.dm | 33 +++++ .../clothing/under}/polychromic_clothes.dm | 132 ++++++++---------- modular_citadel/cydonian_armor.dm | 2 +- .../icons/polyclothes/item/uniform.dmi | Bin 1410 -> 1588 bytes .../icons/polyclothes/mob/uniform.dmi | Bin 9550 -> 10416 bytes tgstation.dme | 8 +- 10 files changed, 125 insertions(+), 101 deletions(-) create mode 100644 modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm create mode 100644 modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm rename modular_citadel/{ => code/modules/clothing/under}/polychromic_clothes.dm (50%) diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm index 7818f47a05..c1eacaab2e 100644 --- a/code/citadel/cit_guns.dm +++ b/code/citadel/cit_guns.dm @@ -1004,49 +1004,49 @@ obj/item/projectile/bullet/c10mm/soporific switch(choice) if("Frame Color") - var/frame_color_input = input(usr,"Choose Frame Color") as color|null + var/frame_color_input = input(usr,"","Choose Frame Color",frame_color) as color|null if(frame_color_input) frame_color = sanitize_hexcolor(frame_color_input, desired_format=6, include_crunch=1) update_icon() if("Receiver Color") - var/receiver_color_input = input(usr,"Choose Receiver Color") as color|null + var/receiver_color_input = input(usr,"","Choose Receiver Color",receiver_color) as color|null if(receiver_color_input) receiver_color = sanitize_hexcolor(receiver_color_input, desired_format=6, include_crunch=1) update_icon() if("Body Color") - var/body_color_input = input(usr,"Choose Body Color") as color|null + var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null if(body_color_input) body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() if("Barrel Color") - var/barrel_color_input = input(usr,"Choose Barrel Color") as color|null + var/barrel_color_input = input(usr,"","Choose Barrel Color",barrel_color) as color|null if(barrel_color_input) barrel_color = sanitize_hexcolor(barrel_color_input, desired_format=6, include_crunch=1) update_icon() if("Barrel Tip Color") - var/tip_color_input = input(usr,"Choose Barrel Tip Color") as color|null + var/tip_color_input = input(usr,"","Choose Barrel Tip Color",tip_color) as color|null if(tip_color_input) tip_color = sanitize_hexcolor(tip_color_input, desired_format=6, include_crunch=1) update_icon() if("Grip Light Color") - var/grip_color_input = input(usr,"Choose Grip Light Color") as color|null + var/grip_color_input = input(usr,"","Choose Grip Light Color",grip_color) as color|null if(grip_color_input) grip_color = sanitize_hexcolor(grip_color_input, desired_format=6, include_crunch=1) update_icon() if("Light Color") - var/energy_color_input = input(usr,"Choose Light Color") as color|null + var/energy_color_input = input(usr,"","Choose Light Color",energy_color) as color|null if(energy_color_input) energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() if("Arm Color") - var/arm_color_input = input(usr,"Choose Arm Color") as color|null + var/arm_color_input = input(usr,"","Choose Arm Color",arm_color) as color|null if(arm_color_input) arm_color = sanitize_hexcolor(arm_color_input, desired_format=6, include_crunch=1) update_icon() @@ -1183,7 +1183,6 @@ obj/item/gun/energy/e_gun/cx ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser) flight_x_offset = 15 flight_y_offset = 10 - actions_types = list(/datum/action/item_action/pick_color) var/body_color = "#252528" obj/item/gun/energy/e_gun/cx/update_icon() @@ -1197,16 +1196,17 @@ obj/item/gun/energy/e_gun/cx/update_icon() var/mob/M = loc M.update_inv_hands() -obj/item/gun/energy/e_gun/cx/ui_action_click(mob/user, var/datum/action/A) - if(istype(A, /datum/action/item_action/pick_color)) - if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes") - var/body_color_input = input(usr,"Choose Body Color") as color|null - if(body_color_input) - body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) +obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user) + if(!in_range(src, user)) //Basic checks to prevent abuse + return + if(user.incapacitated() || !istype(user)) + to_chat(user, "You can't do that right now!") + return + if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes") + var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null + if(body_color_input) + body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() - A.UpdateButtonIcon() - else - ..() obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file) . = ..() @@ -1262,7 +1262,7 @@ obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file) to_chat(user, "You can't do that right now!") return if(alert("Are you sure you want to recolor your gun?", "Confirm Repaint", "Yes", "No") == "Yes") - var/body_color_input = input(usr,"Choose Shroud Color") as color|null + var/body_color_input = input(usr,"","Choose Shroud Color",body_color) as color|null if(body_color_input) body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1) update_icon() diff --git a/modular_citadel/code/game/objects/ids.dm b/modular_citadel/code/game/objects/ids.dm index 6604cac13d..63def730f1 100644 --- a/modular_citadel/code/game/objects/ids.dm +++ b/modular_citadel/code/game/objects/ids.dm @@ -32,7 +32,7 @@ to_chat(user, "You can't do that right now!") return if(alert("Are you sure you want to recolor your id?", "Confirm Repaint", "Yes", "No") == "Yes") - var/energy_color_input = input(usr,"Choose Energy Color") as color|null + var/energy_color_input = input(usr,"","Choose Energy Color",id_color) as color|null if(energy_color_input) id_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() diff --git a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm index 682e6b6496..526b8296a6 100644 --- a/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm +++ b/modular_citadel/code/game/objects/items/melee/eutactic_blades.dm @@ -83,7 +83,7 @@ return if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") - var/energy_color_input = input(usr,"Choose Energy Color") as color|null + var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null if(energy_color_input) light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() @@ -165,7 +165,7 @@ return if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") - var/energy_color_input = input(usr,"Choose Energy Color") as color|null + var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null if(energy_color_input) light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() @@ -282,7 +282,7 @@ return if(alert("Are you sure you want to recolor your blade?", "Confirm Repaint", "Yes", "No") == "Yes") - var/energy_color_input = input(usr,"Choose Energy Color") as color|null + var/energy_color_input = input(usr,"","Choose Energy Color",light_color) as color|null if(energy_color_input) light_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) update_icon() diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm new file mode 100644 index 0000000000..1ef2285878 --- /dev/null +++ b/modular_citadel/code/game/objects/structures/crates_lockers/closets/fitness.dm @@ -0,0 +1,5 @@ +/obj/structure/closet/athletic_mixed/PopulateContents() + ..() + new /obj/item/clothing/under/polychromic/shortpants(src) + new /obj/item/clothing/under/polychromic/shortpants(src) + new /obj/item/clothing/under/polychromic/shortpants(src) \ No newline at end of file diff --git a/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm new file mode 100644 index 0000000000..6e5c160408 --- /dev/null +++ b/modular_citadel/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -0,0 +1,33 @@ +/obj/structure/closet/wardrobe/mixed/PopulateContents() + if(prob(40)) + new /obj/item/clothing/suit/jacket(src) + if(prob(40)) + new /obj/item/clothing/suit/jacket(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/jumpsuit(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/shirt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/kilt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/skirt(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/under/polychromic/shorts(src) + new /obj/item/clothing/mask/bandana/red(src) + new /obj/item/clothing/mask/bandana/red(src) + new /obj/item/clothing/mask/bandana/blue(src) + new /obj/item/clothing/mask/bandana/blue(src) + new /obj/item/clothing/mask/bandana/gold(src) + new /obj/item/clothing/mask/bandana/gold(src) + new /obj/item/clothing/shoes/sneakers/black(src) + new /obj/item/clothing/shoes/sneakers/brown(src) + new /obj/item/clothing/shoes/sneakers/white(src) + if(prob(30)) + new /obj/item/clothing/suit/hooded/wintercoat(src) + new /obj/item/clothing/shoes/winterboots(src) + return \ No newline at end of file diff --git a/modular_citadel/polychromic_clothes.dm b/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm similarity index 50% rename from modular_citadel/polychromic_clothes.dm rename to modular_citadel/code/modules/clothing/under/polychromic_clothes.dm index b14a083f3e..c3b361148c 100644 --- a/modular_citadel/polychromic_clothes.dm +++ b/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm @@ -1,14 +1,28 @@ -/obj/item/clothing/under/polychromic +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// Polychromic Clothes: // +// // +// Polychromic clothes simply consist of 4 sprites: A base, unrecoloured sprite, and up to 3 greyscaled sprites. // +// In order to add more polychromic clothes, simply create a base sprite, and up to 3 recolourable overlays for it, // +// and then name them as follows: [name], [name]-primary, [name]-secondary, [name]-tertiary. The sprites should // +// ideally be in 'modular_citadel/icons/polyclothes/item/uniform.dmi' and 'modular_citadel/icons/polyclothes/mob/uniform.dmi' for the // +// worn sprites. After that, copy paste the code from any of the example clothes beneath the giant mass of procs and // +// change the names around. [name] should go in BOTH icon_state and item_color. You can preset colors and disable // +// any overlays using the self-explainatory vars. // +// // +// -Tori // +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/obj/item/clothing/under/polychromic //This is the parent object. DO NOT copy paste this and its vars if you want to make something new. name = "polychromic suit" desc = "For when you want to show off your horrible colour coordination skills." icon = 'modular_citadel/icons/polyclothes/item/uniform.dmi' - icon_override = 'modular_citadel/icons/polyclothes/mob/uniform.dmi' + alternate_worn_icon = 'modular_citadel/icons/polyclothes/mob/uniform.dmi' //To make human/update_icon.dm read worn sprites from here. icon_state = "polysuit" - item_color = "polysuit" - item_state = "sl_suit" - can_adjust = FALSE + item_color = "polysuit" //The item color is used to select its mob icon + item_state = "sl_suit" //Inhand sprites. Would be an arse to make one for all the clothes. Should probably be standardized to rainbow. + can_adjust = FALSE //to prevent you from "wearing it casually" - var/hasprimary = TRUE + var/hasprimary = TRUE //These vars allow you to choose which overlays a clothing has var/hassecondary = TRUE var/hastertiary = TRUE @@ -18,63 +32,55 @@ /obj/item/clothing/under/polychromic/update_icon() ..() - cut_overlays() - - if(hasprimary) - var/mutable_appearance/primary_overlay = mutable_appearance('modular_citadel/icons/polyclothes/item/uniform.dmi', "[item_color]-primary") - primary_overlay.color = primary_color - add_overlay(primary_overlay) - + cut_overlays() //prevents the overlays from infinitely stacking + if(hasprimary) //Checks if the overlay is enabled + var/mutable_appearance/primary_overlay = mutable_appearance('modular_citadel/icons/polyclothes/item/uniform.dmi', "[item_color]-primary") //Automagically picks overlays + primary_overlay.color = primary_color //Colors the greyscaled overlay + add_overlay(primary_overlay) //Applies the coloured overlay onto the item sprite. but NOT the mob sprite. if(hassecondary) var/mutable_appearance/secondary_overlay = mutable_appearance('modular_citadel/icons/polyclothes/item/uniform.dmi', "[item_color]-secondary") secondary_overlay.color = secondary_color add_overlay(secondary_overlay) - if(hastertiary) var/mutable_appearance/tertiary_overlay = mutable_appearance('modular_citadel/icons/polyclothes/item/uniform.dmi', "[item_color]-tertiary") tertiary_overlay.color = tertiary_color add_overlay(tertiary_overlay) /obj/item/clothing/under/polychromic/AltClick(mob/living/user) + if(!in_range(src, user)) //Basic checks to prevent abuse + return if(user.incapacitated() || !istype(user)) to_chat(user, "You can't do that right now!") return - if(!in_range(src, user)) - return - if(user.incapacitated() || !istype(user) || !in_range(src, user)) - return - - var/choice = input(user,"polychromic thread options", "Clothing Recolor") in list("Primary Color","Secondary Color","Tertiary Color","*CANCEL*") - switch(choice) + var/choice = input(user,"polychromic thread options", "Clothing Recolor") as null|anything in list("[hasprimary ? "Primary Color" : ""]", "[hassecondary ? "Secondary Color" : ""]", "[hastertiary ? "Tertiary Color" : ""]") //generates a list depending on the enabled overlays + switch(choice) //Lets the list's options actually lead to something if("Primary Color") - var/primary_color_input = input(usr,"Choose Primary Color") as color|null - if(primary_color_input) - primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) - update_icon() - user.update_inv_w_uniform() - + var/primary_color_input = input(usr,"","Choose Primary Color",primary_color) as color|null //color input menu, the "|null" adds a cancel button to it. + if(primary_color_input) //Checks if the color selected is NULL, rejects it if it is NULL. + primary_color = sanitize_hexcolor(primary_color_input, desired_format=6, include_crunch=1) //formats the selected color properly + update_icon() //updates the item icon + user.update_inv_w_uniform() //updates the worn icon if("Secondary Color") - var/secondary_color_input = input(usr,"Choose Secondary Color") as color|null + var/secondary_color_input = input(usr,"","Choose Secondary Color",secondary_color) as color|null if(secondary_color_input) secondary_color = sanitize_hexcolor(secondary_color_input, desired_format=6, include_crunch=1) update_icon() user.update_inv_w_uniform() - if("Tertiary Color") - var/tertiary_color_input = input(usr,"Choose Tertiary Color") as color|null + var/tertiary_color_input = input(usr,"","Choose Tertiary Color",tertiary_color) as color|null if(tertiary_color_input) tertiary_color = sanitize_hexcolor(tertiary_color_input, desired_format=6, include_crunch=1) update_icon() user.update_inv_w_uniform() -/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) +/obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens . = ..() - if(!isinhands) - if(hasprimary) - var/mutable_appearance/primary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-primary") - primary_worn.color = primary_color - . += primary_worn + if(!isinhands) //prevents the worn sprites from showing up if you're just holding them + if(hasprimary) //checks if overlays are enabled + var/mutable_appearance/primary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-primary") //automagical sprite selection + primary_worn.color = primary_color //colors the overlay + . += primary_worn //adds the overlay onto the buffer list to draw on the mob sprite. if(hassecondary) var/mutable_appearance/secondary_worn = mutable_appearance('modular_citadel/icons/polyclothes/mob/uniform.dmi', "[item_color]-secondary") secondary_worn.color = secondary_color @@ -86,13 +92,13 @@ /obj/item/clothing/under/polychromic/examine(mob/user) ..() - to_chat(user, "Alt-click to recolor it.") + to_chat(user, "Alt-click to recolor it.") // so people don't "OOC how do you use polychromic clothes????" /obj/item/clothing/under/polychromic/Initialize() ..() - update_icon() + update_icon() //Applies the overlays and default colors onto the clothes on spawn. -/obj/item/clothing/under/polychromic/shirt +/obj/item/clothing/under/polychromic/shirt //COPY PASTE THIS TO MAKE A NEW THING name = "polychromic button-up shirt" desc = "A fancy button-up shirt made with polychromic threads." icon_state = "polysuit" @@ -157,38 +163,16 @@ secondary_color = "#808080" tertiary_color = "#FF3535" -//replaces the jumpsuit contents of the mixed wardrobe - -/obj/structure/closet/wardrobe/mixed/PopulateContents() - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - if(prob(40)) - new /obj/item/clothing/suit/jacket(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/jumpsuit(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/shirt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/kilt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/skirt(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/under/polychromic/shorts(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/red(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/blue(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/mask/bandana/gold(src) - new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/shoes/sneakers/brown(src) - new /obj/item/clothing/shoes/sneakers/white(src) - if(prob(30)) - new /obj/item/clothing/suit/hooded/wintercoat(src) - new /obj/item/clothing/shoes/winterboots(src) - return \ No newline at end of file +/obj/item/clothing/under/polychromic/shortpants + name = "polychromic athletic shorts" + desc = "95% Polychrome, 5% Spandex!" + icon_state = "polyshortpants" + item_color = "polyshortpants" + item_state = "rainbow" + hasprimary = TRUE + hassecondary = TRUE + hastertiary = FALSE + primary_color = "#FFFFFF" //RGB in hexcode + secondary_color = "#F08080" + gender = PLURAL //Because shortS + body_parts_covered = GROIN //Because there's no shirt included \ No newline at end of file diff --git a/modular_citadel/cydonian_armor.dm b/modular_citadel/cydonian_armor.dm index 0189358d36..831d43afba 100644 --- a/modular_citadel/cydonian_armor.dm +++ b/modular_citadel/cydonian_armor.dm @@ -141,7 +141,7 @@ return if(alert("Are you sure you want to recolor your armor stripes?", "Confirm Repaint", "Yes", "No") == "Yes") - var/energy_color_input = input(usr,"Choose Energy Color") as color|null + var/energy_color_input = input(usr,"","Choose Energy Color",energy_color) as color|null if(energy_color_input) energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1) user.update_inv_wear_suit() diff --git a/modular_citadel/icons/polyclothes/item/uniform.dmi b/modular_citadel/icons/polyclothes/item/uniform.dmi index 4406da89fa21b9ed37fb19c43e165851abcc8546..06b880b48c6c16bcd01fbfcd8b9214287f8315a6 100644 GIT binary patch delta 1512 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 literal 9550 zcmb7qXIN9+y6vKgbm<+GF1@HIU5FIv(wl(5he$`Nlz=E*5Rs-7>4J12^dg-AQlxhY zNRvQ72qA==#kcpq_uPA)^PGKtBrH~D=A4=H9pfEyyerl~PlJk_jT`^~DlJXOBLE;! z0bkdzUIFj)I+h)PfA(G&oBKkXo;&!sc=@_`dH_IRR{eO59+4E~l~v3kgQ+8WI=G%aIIX1V2Na-^juNy&C+CSEpHlG0b4rWzAd zQX|Y0MXXKN-@S`?jy?&qSUeA%&y#pA_s35!x_x?kOk%?^+SvTFTAADA4HL7Sw@hE> zHM^WVXEnS0=I=ck%vKu;Ea7-G&TK?o3YXh>D_mqmy^YUu-8vDgYk7<#42Af%#IsMm z2Y~B<7UaHhVAkGJsGIRjw(PKGm`SZv`_vH!ekQ{Ej$|ZvZoCja z6|B=mEh$mnO4=q;2r_gj6TkJKSNAvVwr;J{SDI8qKCchu<@|i#R6SnRx-=QSWS(~; zy~e`M=0!-nS+t4izBl7sS>^mIalh%vr=5H7L#8|elb!i|-}Ad7dNKHkGW1yL8g1s* z2UX_qn9l|oK72Pp!&XcUQojN7hEe~oTDzcI!JPlOtKB?z{)n_^(yU8+~()ZeJwZF8q3j_~2&}X7~6zFMkF59XFPSb5~m| zo6^}GV`?8X=zMu%dPi*d(qFg2FX}jTH0AK(Zv#T z^b-J=)6Tf#Zuz;!9Pgl0j`vCbasMqiURyA_87(3#Y+z_e03bvCn1vSNJ|uy6^Q)>P z5UyuuXNx{NJ}18|02MPc=3>3LM3La#QlpamFJD9| z-0U52Nm4ZzLl%9+LeS92O5c;DhFXwy&zpnQIyc1ud`PU}wB6K(%k(@J{D=tf-v=n;(Xv&RVlb18^LNVI zrgv&PG`LW~m{4}0=P9d(YV5Z&eP>Is!!eboCc>#*`%rwa80T`Pb)(mfiNMEUYLr(< zNu{3u(&12i!GJ%>9ewr&`e(~fw%B&AvNe7T+jd^~=w`_7$22=!(iFZMe?Wxt#AC{* zZwS%gyJ=n}Y@5M8?{rwND_mm(?ue}jJbU)cz|1Tf3{+9ex~rr#T$hLdhw%Q{MRI;V z)n8WuTw(_JR9PwRPGZ2l%Ml&mw(_ab{ejIq))Ne9gN~%K7Uh{{0_zu>FY>}Rmq&Na z)Oik>g$N!8hcurabki(-OXua~MS8`6fT)7vcIWk9KjfoBA{?d3_8qcONqg)Jz;*gz z5dDO}bd@a)u(h={rbLHdTae1@BUdUv!L=JvbAtR39-Xkr@ zTWb=J7wcFoh3`(23VIrhX_+aDfcyps34=fosez zKv(T0cMuYr*-03&p)Y*=*KFTuSQn{sh6ttkyk#YC!)?cK3lY%Krl!1GAQ9jpr}*#4 z^nc=9VSrFx>t+oz0bjTG$c20?jx(>+xL{yGatLSa4@TRfzN0Ya`%(nIv?_g5 zD#CqeH_&$T0qtOm4cD1UoER_*qgsG1?b{)0D^$ga!s}gUxEAU{7JO__VneD%M)W|Z zHwT~sUWg7&FxjT=urj4NHKE)V`W)$QNJQTz1L=!#!8SN+W)=I8VI?|tC8*5V{PWk! zK}T5ydB!hFKdu9fWCSeP`4gUm=;}3Ro{~~ZnJ}1-j(~twIOKuol#D{96R(xZlr!6e zrP|zuMEPlE-0hN57bR7Zv1^;=z)v)y=`_XZ$tyB7Y zA*a>BE489M2vq03w@n5KPyT^%uFEyl=~LH|wl>aqW{K}-%CQhaRA9(0)~pDYoNRco zneiJ5D=R~gW`=&=)q6}f3MRA9nuC#4z`?)?qtw25&Pt_c_r#95QD_Rb8CUWsuZKG) zn~m9)pWY|~)i!DRSUPifo@a!F{<>lEJoMRUepN7HcYE$oq~Tb1k>Zb!{cMJ%U)qe5D%gPA=lP6?xJgJ@UIPSD=F zoY15QBWPb`V(!l$qa+u>ko{lh+%}^HYt1aw9dzCAcdNePvClB6qxd*|Wo8zP>S}J< z1-CnDFZUb}$z50#m;rka{1v?0t2@(wP~i#Xj{k@!yl0o1nv$$4_8t*%pFW4ALe8vzrK*uqssYK zloYkJfz{s|XIiN(C!^18UAmY@SR#T~l(~{hQbnGgtB@J!^@s_swx9az0G(&Yy959y zC+B5im(x7{PbmMKHBj&k_`BO2h1jO&o5f=NZf&Tq{3=T*qwm#kiE^Ccjm6ByP9p*$ zoZbW00OC8N$!+*Rsd*VuTNb22?S`O4&rY10rEi(O*+^!=;j9r1+^e$0)N zYnxM~fgpDoq^zXqE6@h5-Gg}=od3zivv!)(IUW}HoD7b$_Y8F`N5Wut>KYob%R9(O z5npb*S=1bd&#hdX6!2Y5-E#+2<#I5DN4-dTrongRQm+tEJ47H zKkArhJIS?%dC!?%UfY;fqNaR4O9|4aw{$}IRdd|EPY>+T<)lFj#!B3ObYdRGRi&xD zA-lfc7$n&F?W;5Dl7xhYlV=u8Cwmk38q&%r{q@HrSx~AYjBtiEjuK zEbWHfRKi)W?xZ^e2d{+MtNosF^>3u`Xcmux?>d+-qdL?)-wvEYF@LnJajL7H#n!uh z_@Pt@l&n$Z6r1e^I+I|XF@1)JPuQob5?|DK=Zf*tweCM3E5H5uI3c_6v69_Joc`OF zT`21_+bp(@<|m@mfc3@is>Tbp)n=BuUNizXjOlaY218#SziqpO<+UyJMDW@sJbtyh zX7XuGPLWFD_C>FL2Qkp2u20y#Xh1@dI&dALKSHw{iNl2eu^FJ}%KUJkb zDzM@AO(0me(%Q|k-My)mdbZEW>c^8oCy+CGiZ>R1Z71aJ>6?Y5vW;SGAUEM>f)h8Y zh=t5Tf^@})YC*vRYD>#IFLj3+#B5vq_dFxUGxOXQq81M}AX2rWAPp+QF8Q!|%_=SR z4!xqJoZy#M(Wb=HGUL(ew=1%eXQ7bns|A%%9-BisX7kFeK}Vm(=OCr{%r{pTzKD9w zrtJ~f{nbcn?(i+yeGS%Dl#CW19dPX|;B6^~oP(Y*_4Q_OO8j0F2H$(c&BBg%%H>Y$ zg&pGy&UDl)U4<6#uNjr;F>PBORD(?hPQ!r;Tv`;OJK$GtdJ(>tsnG_RgSuWN?A;)r z+k(H99DVZW=Dejy>M6ZpNAOUsx?t3F`L$#HLT#ZLB43Vv_cyOf&vYVV`ZcWN_xAS8 zTLZnP@!*7F`Vj?#tCT&Cziyf!HqS6!3HuspYI;QGl)h8S$sQ?s;faXC`asd4t_!1J z0W1u7>%WB8fK|l=1)$FTL)p_z`#a51P)u$W9MP+d!*ONE$|R~iYx$+L@e~=DxDHNzL?oO*xn>u2|`7?h+uQ}_pgB* z*GUx~6ZaS#2-jtaa&{jKU&vIE5res8= zmv$2OZJ3-wEUw)COWaBHuLvw4Hsli!?6$xq%U$ARF$)rzeQMGG|IEFiS_7HjD}R~l z_m_T?Y5X%@-D2&GFK9;U`+j-8gkFHH8)AgkhNR#BIN`oa0O!s3DB?wOZR;FUQeYFP zhN(L~L40ljz;Jm^Vv3;t6Xar(%aC7XFk(71*XkeShHC|b_Z3Gp>w^%BD4+QY!6`yx zj|U1|(MH@ORo61LxI&UiLw|kG{s^-U*ezhO47cs2O+;L87o9)Nk$&HMqKsj(>*;vu zSjmk$?+?Vx1dmNmUjd%Fx~c^Sw-}0bs(J?Z8bnFHo+3>6V-_>~Cq-AeZ$NB!$zp0ir;BOtHPrU5?-E1m<{%zn|JT=32z1e3KhSxKbUvebPD#NJRJORRqMW~KJ};SN!VA5MY< zBn|7;9}<0**(;$DC7rZ}+gBG!g;KZy?^!Rx1j=7x61&K2%#0Hq|M#`obWNhbF{x_mnVA*(Qx=fVlihWkUxY)L~1-& zlmeuMESM}{l9;Iubj!%bZTsHQ2X9Yx!r!Mrc#`i>5d!E(>+cYEHTme0d(jiDD?>2% zf$2|97Ee7rM=jeW?JAcGT*s7oVlCRLrZ2^qx5r z7G@17F*Y57{mjDl1eBW;eqRW7pi{LvgLlpJI42>z`wjK=4<^oZ_~=|h!@`^7+sWNJ69QJBCfM$lb*Kwkqn*DP3L3WvOR| zRNqiNIwDEP*~_*tcZv>dvqLaq0Gon2cO!VD=fnB7>_{|0wQsbDQqFD7%B*fdcVVVMWvtzpGpEBR&N-6+zL8wB)`+e!9R;hxxT`{8Y0cCmG*U{Z}F$3lbBU(EuH6uVU~wuKCo;%an^mqAUCUlhha(^Lh)D86D989N3x zvWQbtQ-N?WxHU_9jznmHy83zoFTwa}ISJwMOS1r&1x=KH0Q!5R6@^9N%QGxHb3Bu) zI^ROh@cqs2+4RuHvtNY{Bpw9t^#BmL!0V5%9%NrvPkWH|MzbWFw4tx8tPGSS;CuDa zs%Zh#3-5J2V(#R`?~@7ht^Ef^Y1I#j1jb2)oL^U!mnSHYm5CV+)h=3W$L9AOdknYZ z&(h5qe!P=Qj10veOXT5JiS@!kR0%_dh9p2^AjbDHkx32JR)hA^8xLIR`YqZb2Hq;B zPamGH<6tnDre#EFj(y$<29p{qL=FbH{h<*A<#5eEp_6P3=H9Sfg(L(8vBos%*z$6Y zDVJwcOpFh$5CJ@r`tPvSSDKlgPP=ojUOX1krMRJ~< zAVj`RPjKSpf%6^oY%TL4_R#T9I1Gvd!<;B({EN}ktP5X?!ir|0&-8Vc)oD{cFA}p| zT>`z7VvqG@Dy6bK$>j|CRE_92Loo6=+TFI?t??C-YEWOJE(sogziGkK1cq=6et z!}CzQNpYlx)90aspGvgLtN&tKTAdhWXat&?M-MRVrOk zml$man<^Yn8s+t+J04oqKQoy>R8x#5PHSf#RA05hv^m`y3su?Dc{#UZ+u(N0T?9_7 z7o5_T+tTb==ZMv zYlQ7mf>JPvs(|NP4mn>&tOfzu%Lj5k&zLJ zAfaF?+>6_OV!<@Iv>X>l?(6IOG)cti3pC|3&f|3%{?Q&bh4glJ7t;d|!=B}zDJonl`)sT22-w)!mu$p?7FJf0)S{{Hx9jy2EA}@>Png1v zcV|lK!^owinh^$8%&So$ery)TjoW?yVBW>J6L&{@rrw-@YxOS4O3Exln zv6GWFhR4kM;<-LEnxez&n{R0B7RA%g0^v5iQZ^z#CrgdI7b5GWFeSX|N|VyM*>WbX z<>1P{);X^F(fQFVzP;Xr+{riaP-@tCb5P_RuNxJE8_UbW?|XW7*0R!_s7b8J!dpl zT9lEfT2YEb1So{e(-^nmGyo2VOYR#g?C9vQ)3^_w@*~Q&5VaTm8RmF<;n>LQkI=Bk zQm)gYlT%Z9Fqml~ru!d`rj(>)I4QT)=RIZ@yv%-#{C+Dv^x`Pj8}xY#m%eA+qlca& zxW^B-mgd*Ep&MBl=+1;XwDK6LGD9g;4zx)RwhEH+v9ne67d*;=3jw_{qY9A}%;Kx( zn4?BdoQ(_W9Ik0x{;-VXF7)EuyW@mDJ3FttHR!1N#ql$=Hx#N2?i+7BO#&AtMPtcw z$1Ls*zGf=aqdST!qyALA0u_K#}h#@jDql{i*b%OxStg=r#BQEq;~j zxEL!lGqd$bsY`1k;~6yOH_NokGLg)a?Ck6(OU-^=Eek*9=gEN#k~Xq~6n&-puC5|E z(2F3T;Fvb4|1}uAzkd^3K?{vQQ*w}#n4nKC#}tEX>M%t&Y3v15T37dGwuRS(5XHm`j$+5V)0S|hcC%ew^K9m_Nl^#$iv{2*92D0)` zAG;@nX@OmTkA`nT?Dt+rVIm+jl@;>NJ;$&naoBH$Bq5bT;&y;u=N32bl4cEVENbJEsRe< z5Lk%F&dj7*hHRUo-!|^IV*#L~Y*{3ZEMrGv=_at+89~IaY=g7AsMbT@_p_jok)3nc4&vn1hhLZ>rH85R+m}$YrFqYnpogYX^Egz;_!FAa?^s~Y> z;71f6yg}6KjFv4Z#lT^_K;BKpP4#kve5d>mzT><>Xz}&0H`pbJ;saL(frm;* zo1@XP7_C?ck9)xF-=}lLv7^N1>rqirt9PlJTUwsK2n90)*xlHefkjWQriO-w;ct)S z6Fc|vf`Wpv-ZAk^9k2#88d?rJEo^UB;!7FST*D3uD$&~|yP8{aQpoM5g30oIb`jT# z>&S=O55^CVgr|LUqufFV3-eD}2s*7i+fq-=m2!0i)Lcl;dUJ)yPL7W^7;{6z`R#6H zCanLNzZvkRht0so6jk)(DGGCQ+UNCs0gkzql9QIHsVS$B?8MWZ=gT(xA!{;V!Le$2 z`SG8V6G8y_IP}X2UIY>XmM0JW&^uP4RKZv$xPp_`Kb}v3rDb2 zX{Z-=^l@diqG4Ip#)i|Q1Lv;*miPj3$1~nwb%m0e`U%MJG)gc7tMhF6fG0n@UY~-Q z)T^H}AfW~HRC*hrCrJ^@GABo7+(VdNP)yldq+uI7I=J7wd4qJw*1!X+ry`p@&3?Pp z_{kg=pl-5?0mMvb*uUVU1!WAd1^jM7)a5LZ-G z1YTe^2>?_e2dHcACK3rK3kU3ca`d##s+0wcbwTAs9XH;6_ z4|MAe+vn*hc@9*z!1RbbfiErf_4U2v18!p;xPv?ba?mh_K`P&eCqT9>vcNB;!xsQW$r^H=9B4Zp(vsllk}cXQ$T ztHhtb4;NMj8dios(`mZ#Jy+S*m34A-?+q{au4rU}1U`}D-r7a!P=RKbz_fB|iHg~) zG?5PU8CD}v#kvXO>jsaFy}IlI0N`N?d=}uI>SkSFEv2++aqTNkqiibeHwZC}=g(!{ z4LW{yI*4CcTvYHd6}JI>W-t>Pw_l3yAFG2}5A!_;22yRaZ#?WDHm2w2#$@8|bU}D% z=g~izl|M=%f-_C=#>>?5` z+s>Vh!odrK(Pt%x40j32*z>GuKYskki#s+!l(MVM9?=aJkX$>VqUz*LA+; z{DJ<)?^F8TWO&;}>G{SKp=ckYu36?f79LjQmQw2&yyS@Za{f+l7A2Efn!(_Z`T3M2 zhuPenWDr}crX*Z@Wb1ysmGP;mp@F%rtqlloFGxl?v>;kK*9R|Bnhk4Pk& zX(9D=Wn$d*qW1fTy0^ODqqn{UAZT3wDp&2#jk$TOzaim8_y-wRS`jYP)NvtOk}g*E zMnxc7b?*hEusFD5TAy5`aD73zT|BPhGU+255!8!e*uC~p6Z;Q7PZICG_#>orx=NI# z4CPw6m{aa+9evKhLc76ZKv4}&4ip2v^uu5*^i+i%i=bzecW$uQ))P*^e=IDpzvy75 zeY+qI`_659EXn~OEmU^E+UE)wrk7-5&>-u_;U=A#P)NYn-wSU8a`%)srHLPg2UNA+ zp2j|^GH>+C3qCV^&&|bR^X=VWA?U<-{N~lT9zIT7(Sna3E~b8nKIv7T0$8l}lN!+l zTXZ-3_mmGLGr+}S+uhp}8;DMCKcfQ@vQxjUYZz{WNyCc!Fzh|p)kn7}tfA0lmDD@@ z@+a&w`<$n;S&7jnd-%+V?EIAVi6rgwZ@}sGPnKrE@LD!B)ht(XnbcTgbc`t%mK}#A zw<+?Od;nq64mw8DQcpY>5|%lB*NRko_~8D+j!pe&BlrUJlXv)pyaev1`(2ehY9$8k zdjphVyH@Xa?eY-L!qLc#W_Yq02vT9vEQZ*Bq7=USOcG*0R~KTH7q4=~f#SbDU-ECF z_wQyY55xb4Z~jxB{3pFk;Bn0L5t$^sNfT5WeV70K-v?O8ZwU^7`$!B7=PGjpUgxLY zXwB-ZBHX1~_#S`uBlm&W{|Yg#(PtK%|1JTU&v0X`rF NXg$z_RI1v&{0~5o&s+ci diff --git a/tgstation.dme b/tgstation.dme index 6b9bd546e9..cf7f7923c3 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2505,7 +2505,6 @@ #include "modular_citadel\citadel_ghostrole_spawners.dm" #include "modular_citadel\cydonian_armor.dm" #include "modular_citadel\dresscode_values.dm" -#include "modular_citadel\polychromic_clothes.dm" #include "modular_citadel\simplemob_vore_values.dm" #include "modular_citadel\code\init.dm" #include "modular_citadel\code\__HELPERS\lists.dm" @@ -2521,17 +2520,19 @@ #include "modular_citadel\code\game\machinery\Sleeper.dm" #include "modular_citadel\code\game\objects\ids.dm" #include "modular_citadel\code\game\objects\items\handcuffs.dm" -#include "modular_citadel\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_citadel\code\game\objects\items\stunsword.dm" +#include "modular_citadel\code\game\objects\items\circuitboards\machine_circuitboards.dm" #include "modular_citadel\code\game\objects\items\devices\aicard.dm" #include "modular_citadel\code\game\objects\items\devices\PDA\PDA.dm" #include "modular_citadel\code\game\objects\items\devices\radio\shockcollar.dm" #include "modular_citadel\code\game\objects\items\melee\eutactic_blades.dm" +#include "modular_citadel\code\game\objects\structures\beds_chairs\sofa.dm" +#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\fitness.dm" +#include "modular_citadel\code\game\objects\structures\crates_lockers\closets\wardrobe.dm" #include "modular_citadel\code\modules\admin\admin.dm" #include "modular_citadel\code\modules\admin\holder2.dm" #include "modular_citadel\code\modules\admin\secrets.dm" #include "modular_citadel\code\modules\admin\topic.dm" -#include "modular_citadel\code\game\objects\structures\beds_chairs\sofa.dm" #include "modular_citadel\code\modules\cargo\console.dm" #include "modular_citadel\code\modules\cargo\packs.dm" #include "modular_citadel\code\modules\client\client_procs.dm" @@ -2554,6 +2555,7 @@ #include "modular_citadel\code\modules\client\loadout\uniform.dm" #include "modular_citadel\code\modules\client\verbs\who.dm" #include "modular_citadel\code\modules\clothing\under.dm" +#include "modular_citadel\code\modules\clothing\under\polychromic_clothes.dm" #include "modular_citadel\code\modules\clothing\under\turtlenecks.dm" #include "modular_citadel\code\modules\crafting\recipes.dm" #include "modular_citadel\code\modules\mentor\follow.dm"