diff --git a/code/__DEFINES/dye_keys.dm b/code/__DEFINES/dye_keys.dm index 582f3127380..ac0c2d35229 100644 --- a/code/__DEFINES/dye_keys.dm +++ b/code/__DEFINES/dye_keys.dm @@ -23,11 +23,18 @@ #define DYE_PURPLE "purple" #define DYE_BLACK "black" #define DYE_WHITE "white" -#define DYE_PINK "pink" -#define DYE_YELLOWGREEN "yellowgreen" +#define DYE_DARKBLUE "darkblue" #define DYE_LIGHTBLUE "lightblue" -#define DYE_LIGHTPURPLE "lightpurple" +#define DYE_AQUA "aqua" +#define DYE_BROWN "brown" +#define DYE_LIGHTBROWN "lightbrown" +#define DYE_DARKRED "darkred" #define DYE_LIGHTRED "lightred" +#define DYE_LIGHTGREEN "lightgreen" +#define DYE_YELLOWGREEN "yellowgreen" +#define DYE_LIGHTPURPLE "lightpurple" +#define DYE_PINK "pink" +#define DYE_GREY "grey" #define DYE_RAINBOW "rainbow" #define DYE_MIME "mime" #define DYE_COSMIC "cosmic" diff --git a/code/__HELPERS/iconprocs.dm b/code/__HELPERS/iconprocs.dm index 92bff1512b4..425c5bb2549 100644 --- a/code/__HELPERS/iconprocs.dm +++ b/code/__HELPERS/iconprocs.dm @@ -547,3 +547,10 @@ GLOBAL_LIST_EMPTY(bicon_cache) "x" = icon_width > world.icon_size && pixel_x != 0 ? (icon_width - world.icon_size) * 0.5 : 0, "y" = icon_height > world.icon_size && pixel_y != 0 ? (icon_height - world.icon_size) * 0.5 : 0, ) + +/// Swaps an entire palette, for convenience, given two same-length lists of rgb or rgba colors +/icon/proc/swap_palette(list/old_colors, list/new_colors) + if(length(old_colors) != length(new_colors)) + return FALSE + for(var/index in 1 to length(old_colors)) + SwapColor(old_colors[index], new_colors[index]) diff --git a/code/_globalvars/lists/dye_registry.dm b/code/_globalvars/lists/dye_registry.dm index fabac01927f..1fb3d867460 100644 --- a/code/_globalvars/lists/dye_registry.dm +++ b/code/_globalvars/lists/dye_registry.dm @@ -321,3 +321,72 @@ GLOBAL_LIST_INIT(dye_registry, list( DYE_NTREP = /obj/item/clothing/head/helmet/space/syndicate/blue, ), )) + +// Palettes for clothing +#define PALETTE_JS_RED list("#4d0d1d", "#7e111e", "#ab312c", "#cb4836") +#define PALETTE_JS_ORANGE list("#651d22", "#9d3720", "#c05425", "#d67a2f") +#define PALETTE_JS_YELLOW list("#733b22", "#9d6025", "#c48c1a", "#d9b114") +#define PALETTE_JS_GREEN list("#112624", "#1c492c", "#2a7330", "#3d9339") +#define PALETTE_JS_BLUE list("#0d1a4d", "#0c3473", "#0e56af", "#2771cb") +#define PALETTE_JS_PURPLE list("#2f0f54", "#571485", "#7f2ea8", "#a043bf") +#define PALETTE_JS_BLACK list("#151414", "#212022", "#2f2e31", "#424144") +#define PALETTE_JS_WHITE list("#6f6f75", "#9da3a3", "#caccca", "#f0efed") +#define PALETTE_JS_DARKBLUE list("#131426", "#1c2649", "#203d65", "#28527a") +#define PALETTE_JS_LIGHTBLUE list("#355780", "#477eb3", "#5fa4cc", "#85c1e6") +#define PALETTE_JS_AQUA list("#285081", "#2d7b9d", "#3badb6", "#5ad2ca") +#define PALETTE_JS_BROWN list("#270806", "#44150e", "#632f18", "#7b4323") +#define PALETTE_JS_LIGHTBROWN list("#814537", "#a86141", "#cb8857", "#dca26a") +#define PALETTE_JS_DARKRED list("#2a0611", "#50091a", "#77161c", "#962525") +#define PALETTE_JS_LIGHTRED list("#853236", "#bd4b4b", "#d9755f", "#ea9275") +#define PALETTE_JS_LIGHTGREEN list("#356241", "#429349", "#66bd5c", "#8dd97e") +#define PALETTE_JS_YELLOWGREEN list("#776934", "#938d45", "#acbd57", "#bddc6e") +#define PALETTE_JS_LIGHTPURPLE list("#564788", "#7e5ac4", "#af77e0", "#ce91ee") +#define PALETTE_JS_PINK list("#853d5b", "#bd5379", "#e07791", "#ee919c") +#define PALETTE_JS_GREY list("#3b363d", "#62626e", "#7e8789", "#9dabab") + +GLOBAL_LIST_INIT(palette_registry, list( + DYE_REGISTRY_UNDER = list( + DYE_RED = PALETTE_JS_RED, + DYE_ORANGE = PALETTE_JS_ORANGE, + DYE_YELLOW = PALETTE_JS_YELLOW, + DYE_GREEN = PALETTE_JS_GREEN, + DYE_BLUE = PALETTE_JS_BLUE, + DYE_PURPLE = PALETTE_JS_PURPLE, + DYE_BLACK = PALETTE_JS_BLACK, + DYE_WHITE = PALETTE_JS_WHITE, + DYE_DARKBLUE = PALETTE_JS_DARKBLUE, + DYE_LIGHTBLUE = PALETTE_JS_LIGHTBLUE, + DYE_AQUA = PALETTE_JS_AQUA, + DYE_BROWN = PALETTE_JS_BROWN, + DYE_LIGHTBROWN = PALETTE_JS_LIGHTBROWN, + DYE_DARKRED = PALETTE_JS_DARKRED, + DYE_LIGHTRED = PALETTE_JS_LIGHTRED, + DYE_LIGHTGREEN = PALETTE_JS_LIGHTGREEN, + DYE_YELLOWGREEN = PALETTE_JS_YELLOWGREEN, + DYE_LIGHTPURPLE = PALETTE_JS_LIGHTPURPLE, + DYE_PINK = PALETTE_JS_PINK, + DYE_GREY = PALETTE_JS_GREY, + ), + DYE_REGISTRY_JUMPSKIRT = list( + DYE_RED = PALETTE_JS_RED, + DYE_ORANGE = PALETTE_JS_ORANGE, + DYE_YELLOW = PALETTE_JS_YELLOW, + DYE_GREEN = PALETTE_JS_GREEN, + DYE_BLUE = PALETTE_JS_BLUE, + DYE_PURPLE = PALETTE_JS_PURPLE, + DYE_BLACK = PALETTE_JS_BLACK, + DYE_WHITE = PALETTE_JS_WHITE, + DYE_DARKBLUE = PALETTE_JS_DARKBLUE, + DYE_LIGHTBLUE = PALETTE_JS_LIGHTBLUE, + DYE_AQUA = PALETTE_JS_AQUA, + DYE_BROWN = PALETTE_JS_BROWN, + DYE_LIGHTBROWN = PALETTE_JS_LIGHTBROWN, + DYE_DARKRED = PALETTE_JS_DARKRED, + DYE_LIGHTRED = PALETTE_JS_LIGHTRED, + DYE_LIGHTGREEN = PALETTE_JS_LIGHTGREEN, + DYE_YELLOWGREEN = PALETTE_JS_YELLOWGREEN, + DYE_LIGHTPURPLE = PALETTE_JS_LIGHTPURPLE, + DYE_PINK = PALETTE_JS_PINK, + DYE_GREY = PALETTE_JS_GREY, + ), +)) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 8cab647ec6a..b7f330bc030 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -579,7 +579,8 @@ GLOBAL_VAR_INIT(record_id_num, 1001) clothes_s = new /icon('icons/mob/clothing/under/centcom.dmi', "officer_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "laceups"), ICON_UNDERLAY) else - clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "grey_s") + clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "color_s") + clothes_s.swap_palette(PALETTE_JS_WHITE, PALETTE_JS_GREY) clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) preview_icon.Blend(face_s, ICON_OVERLAY) // Why do we do this twice diff --git a/code/game/objects/items/dyeing.dm b/code/game/objects/items/dyeing.dm index 101e4d0f8e2..ad26adaef10 100644 --- a/code/game/objects/items/dyeing.dm +++ b/code/game/objects/items/dyeing.dm @@ -30,7 +30,6 @@ worn_icon_state = initial(target_obj.worn_icon_state) inhand_icon_state = initial(target_obj.inhand_icon_state) sprite_sheets = target_obj.sprite_sheets - desc = target_obj.desc base_icon_state = target_obj.base_icon_state // update inhand sprites @@ -41,11 +40,41 @@ // update the name/description name = initial(target_obj.name) - desc += "\nThe colors look a little dodgy." + desc = target_obj.desc + "\nThe colors look a little dodgy." qdel(target_obj) + update_appearance(ALL) return target_type +/// Because of jumpsuit palettes, we have to do some extra icon shenanigans. +/obj/item/clothing/under/dye_item(dye_color, dye_key_override) + if(!dyeable || !dye_color) + return + var/dye_key_selector = dye_key_override ? dye_key_override : dyeing_key + var/obj/item/clothing/under/target_type = GLOB.dye_registry[dye_key_selector][dye_color] + + // If we're dying it to a colored jumpsuit... + if(target_type in typesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/target_obj = new target_type(null) + set_icon_from_cache(palette_key = target_obj.icon_palette_key, dye_key = target_obj.dyeing_key) + // update the name/description + name = initial(target_obj.name) + desc = target_obj.desc + "\nThe colors look a little dodgy." + qdel(target_obj) + + // If it also started as a colored jumpsuit, change the palette key + if("icon_palette_key" in vars) + var/obj/item/clothing/under/color/dyed_item = src + dyed_item.icon_palette_key = dye_color + return + + // If we're not, but it started as a colored jumpsuit, unset the palette key so icon updates don't mess it up + else if("icon_palette_key" in vars) + var/obj/item/clothing/under/color/dyed_item = src + dyed_item.icon_palette_key = null + + return ..() + /// Beanies use the color var for their appearance, we don't normally copy this over but we have to for beanies /obj/item/clothing/head/beanie/dye_item(dye_color, dye_key_override) . = ..() diff --git a/code/modules/asset_cache/assets/asset_clothing_icons.dm b/code/modules/asset_cache/assets/asset_clothing_icons.dm new file mode 100644 index 00000000000..f15d4b52a87 --- /dev/null +++ b/code/modules/asset_cache/assets/asset_clothing_icons.dm @@ -0,0 +1,58 @@ +/datum/asset/icon_cache/clothing + var/list/sprite_sheets = list() + +/datum/asset/icon_cache/clothing/New() + . = ..() + for(var/each_subtype in subtypesof(/obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/jumpsuit_type = each_subtype + // If it doesn't have a palette key, the icon already exists and we don't need to generate it again. + // UNLESS it's the psychedelic jumpsuits. + var/is_psychedelic = jumpsuit_type::icon_state == "psyche" || jumpsuit_type::icon_state == "psycheskirt" + if(!jumpsuit_type::icon_palette_key && !is_psychedelic) + continue + + var/palette_keys = is_psychedelic ? list(DYE_DARKBLUE, DYE_RED, DYE_BLACK, DYE_YELLOW, DYE_AQUA, DYE_PURPLE, DYE_LIGHTGREEN, DYE_PINK) : list(jumpsuit_type::icon_palette_key) + var/registry_key = ispath(jumpsuit_type, /obj/item/clothing/under/color/jumpskirt) ? DYE_REGISTRY_JUMPSKIRT : DYE_REGISTRY_UNDER + var/list/all_sheets = list( + "Vox" = 'icons/mob/clothing/species/vox/under/color.dmi', + "Skkulakin" = 'icons/mob/clothing/species/skkulakin/under/color.dmi', + "Drask" = 'icons/mob/clothing/species/drask/under/color.dmi', + "Grey" = 'icons/mob/clothing/species/grey/under/color.dmi', + "Kidan" = 'icons/mob/clothing/species/kidan/under/color.dmi', + "Human" = jumpsuit_type::worn_icon, + "Obj" = jumpsuit_type::icon, + "Lefthand" = jumpsuit_type::lefthand_file, + "Righthand" = jumpsuit_type::righthand_file) + var/list/state_names = list(jumpsuit_type::icon_state, + "[jumpsuit_type::worn_icon_state || jumpsuit_type::icon_state]_s", + "[jumpsuit_type::worn_icon_state || jumpsuit_type::icon_state]_d_s", + jumpsuit_type::inhand_icon_state,) + // For every sprite sheet... + for(var/sheet_key in all_sheets) + var/filepath = all_sheets[sheet_key] + var/icon/jumpsuit = new(filepath) + var/icon/new_suit = new() + + // If each icon state exists in the file... + for(var/white_state in state_names) + if(!white_state) + continue + if(!(white_state in jumpsuit.IconStates())) + continue + + // For every frame of color we need to dye it... + for(var/frame_num in 1 to length(palette_keys)) + // Dye it the color we want. + var/icon/colored_icon = new(filepath, white_state) + colored_icon.swap_palette( + GLOB.palette_registry[registry_key][jumpsuit_type::default_palette_key], + GLOB.palette_registry[registry_key][palette_keys[frame_num]] + ) + new_suit.Insert(colored_icon, white_state, frame = frame_num, delay = 1) + + // Set the new sprite we just made to the one this jumpsuit uses. + all_sheets[sheet_key] = new_suit + var/suit_key = is_psychedelic ? jumpsuit_type::icon_state : jumpsuit_type::icon_palette_key + if(!sprite_sheets[registry_key]) + sprite_sheets[registry_key] = list() + sprite_sheets[registry_key][suit_key] = all_sheets diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm index 79d1b0584ac..7b9e91b149e 100644 --- a/code/modules/client/preference/character.dm +++ b/code/modules/client/preference/character.dm @@ -1062,7 +1062,8 @@ var/has_gloves = FALSE if(job_support_low & JOB_ASSISTANT) //This gives the preview icon clothes depending on which job(if any) is set to 'high' - clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "grey_s") + clothes_s = new /icon('icons/mob/clothing/under/color.dmi', "color_s") + clothes_s.swap_palette(PALETTE_JS_WHITE, PALETTE_JS_GREY) clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "backpack"), ICON_OVERLAY) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index ff8e9350f02..d78739dfbf7 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -185,6 +185,7 @@ target.name = initial(picked_item.name) target.desc = initial(picked_item.desc) target.icon_state = initial(picked_item.icon_state) + target.icon = initial(picked_item.icon) if(isitem(target)) var/obj/item/I = target @@ -202,14 +203,20 @@ else I.sprite_sheets = null - if(isclothing(I) && isclothing(picked_item)) + if(isclothing(I) && ispath(picked_item, /obj/item/clothing)) var/obj/item/clothing/CL = I var/obj/item/clothing/PCL = picked_item CL.flags_cover = initial(PCL.flags_cover) + if(istype(I, /obj/item/clothing/under) && ispath(picked_item, /obj/item/clothing/under/color)) + var/obj/item/clothing/under/color/colored_jumpsuit = picked_item + if(colored_jumpsuit.icon_palette_key) + var/obj/item/clothing/under/target_jumpsuit = I + target_jumpsuit.set_icon_from_cache(palette_key = colored_jumpsuit::icon_palette_key, dye_key = colored_jumpsuit::dyeing_key) + else if(ispath(colored_jumpsuit, /obj/item/clothing/under/color/psyche) || ispath(colored_jumpsuit, /obj/item/clothing/under/color/jumpskirt/psyche)) + var/obj/item/clothing/under/target_jumpsuit = I + target_jumpsuit.set_icon_from_cache(palette_key = colored_jumpsuit::icon_state, dye_key = colored_jumpsuit::dyeing_key) I.update_appearance() - target.icon = initial(picked_item.icon) - /datum/action/item_action/chameleon_change/Trigger(left_click) if(!IsAvailable()) return @@ -232,12 +239,12 @@ random_look(owner) /obj/item/clothing/under/chameleon - name = "black jumpsuit" + name = "white jumpsuit" desc = "It's a plain jumpsuit. It has a small dial on the wrist." icon = 'icons/obj/clothing/under/color.dmi' - icon_state = "black" + icon_state = "color" worn_icon = 'icons/mob/clothing/under/color.dmi' - inhand_icon_state = "bl_suit" + inhand_icon_state = "color_suit" random_sensor = FALSE resistance_flags = NONE armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, RAD = 0, FIRE = 50, ACID = 50) @@ -260,6 +267,9 @@ /obj/item/clothing/under/dress, /obj/item/clothing/under/pants, /obj/item/clothing/under/color, + /obj/item/clothing/under/color/random, + /obj/item/clothing/under/color/jumpskirt, + /obj/item/clothing/under/color/jumpskirt/random, /obj/item/clothing/under/retro, /obj/item/clothing/under/solgov, /obj/item/clothing/under/suit, diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 47562b3d507..fefcc2561c8 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -2,7 +2,11 @@ desc = "A standard issue colored jumpsuit. Variety is the spice of life!" icon = 'icons/obj/clothing/under/color.dmi' worn_icon = 'icons/mob/clothing/under/color.dmi' + icon_state = "color" + inhand_icon_state = "color_suit" dyeable = TRUE + var/default_palette_key = DYE_WHITE + var/icon_palette_key = null sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/under/color.dmi', "Skkulakin" = 'icons/mob/clothing/species/skkulakin/under/color.dmi', @@ -14,10 +18,43 @@ /obj/item/clothing/under/color/jumpskirt desc = "A standard issue colored jumpskirt. Variety is the spice of life!" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS + icon_state = "colorskirt" dyeing_key = DYE_REGISTRY_JUMPSKIRT -/obj/item/clothing/under/color/random/Initialize(mapload) +/obj/item/clothing/under/color/Initialize(mapload) . = ..() + update_icon() + +/obj/item/clothing/under/color/update_icon() + . = ..() + set_icon_from_cache() + +/obj/item/clothing/under/proc/set_icon_from_cache(palette_key = null, dye_key = null) + if(!palette_key && ("icon_palette_key" in vars)) + var/obj/item/clothing/under/color/colored_jumpsuit = src + palette_key = palette_key || colored_jumpsuit.icon_palette_key + if(!palette_key) + return FALSE + dye_key = dye_key || dyeing_key + if(!GLOB.palette_registry[dye_key]) + stack_trace("Item just tried to be colored with an invalid registry key: [dye_key]") + var/datum/asset/icon_cache/clothing/icon_cache = get_asset_datum(/datum/asset/icon_cache/clothing/) + + // Set icons + for(var/sheet_key in sprite_sheets) + sprite_sheets[sheet_key] = icon_cache.sprite_sheets[dye_key][palette_key][sheet_key] + icon = icon_cache.sprite_sheets[dye_key][palette_key]["Obj"] + worn_icon = icon_cache.sprite_sheets[dye_key][palette_key]["Human"] + lefthand_file = icon_cache.sprite_sheets[dye_key][palette_key]["Lefthand"] + righthand_file = icon_cache.sprite_sheets[dye_key][palette_key]["Righthand"] + + // Set icon states + var/icon_state_prefix = findtext(palette_key, "psyche") ? "psyche" : "color" + var/icon_state_skirt = dye_key == "under" ? "" : "skirt" + icon_state = "[icon_state_prefix][icon_state_skirt]" + inhand_icon_state = "[icon_state_prefix]_suit" + +/obj/item/clothing/under/color/random/Initialize(mapload) var/list/excluded = list(/obj/item/clothing/under/color/random, /obj/item/clothing/under/color/blue/dodgeball, /obj/item/clothing/under/color/orange/prison, @@ -28,48 +65,57 @@ var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - excluded) name = initial(C.name) icon_state = initial(C.icon_state) + icon_palette_key = initial(C.icon_palette_key) inhand_icon_state = initial(C.inhand_icon_state) + . = ..() + if(C == /obj/item/clothing/under/color/psyche) + set_icon_from_cache(palette_key = "psyche") + +/obj/item/clothing/under/color/jumpskirt/random/Initialize(mapload) + var/list/excluded = list(/obj/item/clothing/under/color/jumpskirt/random, + /obj/item/clothing/under/color/jumpskirt/orange/prison,) + var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color/jumpskirt) - excluded) + name = initial(C.name) + icon_state = initial(C.icon_state) + icon_palette_key = initial(C.icon_palette_key) + inhand_icon_state = initial(C.inhand_icon_state) + . = ..() + if(C == /obj/item/clothing/under/color/jumpskirt/psyche) + set_icon_from_cache(palette_key = "psycheskirt") /obj/item/clothing/under/color/black name = "black jumpsuit" - icon_state = "black" - inhand_icon_state = "bl_suit" + icon_palette_key = DYE_BLACK resistance_flags = NONE /obj/item/clothing/under/color/jumpskirt/black name = "black jumpskirt" - icon_state = "blackskirt" - inhand_icon_state = "bl_suit" + icon_palette_key = DYE_BLACK resistance_flags = NONE // I am going to assume this is here for a reason /obj/item/clothing/under/color/blue name = "blue jumpsuit" - icon_state = "blue" - inhand_icon_state = "b_suit" + icon_palette_key = DYE_BLUE /obj/item/clothing/under/color/jumpskirt/blue name = "blue jumpskirt" - icon_state = "blueskirt" - inhand_icon_state = "b_suit" + icon_palette_key = DYE_BLUE /obj/item/clothing/under/color/blue/dodgeball flags = NODROP /obj/item/clothing/under/color/green name = "green jumpsuit" - icon_state = "green" - inhand_icon_state = "g_suit" + icon_palette_key = DYE_GREEN /obj/item/clothing/under/color/jumpskirt/green name = "green jumpskirt" - icon_state = "greenskirt" - inhand_icon_state = "g_suit" + icon_palette_key = DYE_GREEN /obj/item/clothing/under/color/grey name = "grey jumpsuit" desc = "A tasteful grey jumpsuit that reminds you of the good old days." - icon_state = "grey" - inhand_icon_state = "gy_suit" + icon_palette_key = DYE_GREY /obj/item/clothing/under/color/grey/greytide flags = NODROP @@ -77,29 +123,28 @@ /obj/item/clothing/under/color/jumpskirt/grey name = "grey jumpskirt" desc = "A tasteful grey jumpskirt that reminds you of the good old days." - icon_state = "greyskirt" - inhand_icon_state = "gy_suit" + icon_palette_key = DYE_GREY /obj/item/clothing/under/color/grey/glorf name = "ancient jumpsuit" desc = "A terribly ragged and frayed grey jumpsuit. It looks like it hasn't been washed in over a decade." icon_state = "ancient" + icon_palette_key = null /obj/item/clothing/under/color/orange name = "orange jumpsuit" desc = "Don't wear this near paranoid security officers." - icon_state = "orange" - inhand_icon_state = "o_suit" + icon_palette_key = DYE_ORANGE /obj/item/clothing/under/color/jumpskirt/orange name = "orange jumpskirt" desc = "Don't wear this near paranoid security officers." - icon_state = "orangeskirt" - inhand_icon_state = "o_suit" + icon_palette_key = DYE_ORANGE /obj/item/clothing/under/color/orange/prison desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "prisoner" + icon_palette_key = null inhand_icon_state = "prisoner" has_sensor = 2 sensor_mode = SENSOR_COORDS @@ -107,6 +152,7 @@ /obj/item/clothing/under/color/jumpskirt/orange/prison desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." icon_state = "prisonerskirt" + icon_palette_key = null inhand_icon_state = "prisoner" has_sensor = 2 sensor_mode = SENSOR_COORDS @@ -114,74 +160,81 @@ /obj/item/clothing/under/color/pink name = "pink jumpsuit" desc = "Just looking at this makes you feel fabulous." - icon_state = "pink" - inhand_icon_state = "p_suit" + icon_palette_key = DYE_PINK /obj/item/clothing/under/color/jumpskirt/pink name = "pink jumpskirt" desc = "Just looking at this makes you feel fabulous." - icon_state = "pinkskirt" - inhand_icon_state = "p_suit" + icon_palette_key = DYE_PINK /obj/item/clothing/under/color/red name = "red jumpsuit" - icon_state = "red" - inhand_icon_state = "r_suit" + icon_palette_key = DYE_RED /obj/item/clothing/under/color/jumpskirt/red name = "red jumpskirt" - icon_state = "redskirt" - inhand_icon_state = "r_suit" + icon_palette_key = DYE_RED /obj/item/clothing/under/color/red/dodgeball flags = NODROP /obj/item/clothing/under/color/white name = "white jumpsuit" - icon_state = "white" + icon_palette_key = DYE_WHITE /obj/item/clothing/under/color/jumpskirt/white name = "white jumpskirt" - icon_state = "whiteskirt" + icon_palette_key = DYE_WHITE /obj/item/clothing/under/color/yellow name = "yellow jumpsuit" - icon_state = "yellow" + icon_palette_key = DYE_YELLOW /obj/item/clothing/under/color/jumpskirt/yellow name = "yellow jumpskirt" - icon_state = "yellowskirt" + icon_palette_key = DYE_YELLOW /obj/item/clothing/under/color/psyche name = "psychedelic jumpsuit" desc = "Groovy!" icon_state = "psyche" + inhand_icon_state = "psyche_suit" + +/obj/item/clothing/under/color/psyche/set_icon_from_cache(palette_key = "psyche", dye_key = null) + return ..() + +/obj/item/clothing/under/color/jumpskirt/psyche + name = "psychedelic jumpskirt" + desc = "Far out!" + icon_state = "psycheskirt" + inhand_icon_state = "psyche_suit" + +/obj/item/clothing/under/color/jumpskirt/psyche/set_icon_from_cache(palette_key = "psycheskirt", dye_key = null) + return ..() /obj/item/clothing/under/color/lightblue name = "light blue jumpsuit" - icon_state = "lightblue" + icon_palette_key = DYE_LIGHTBLUE /obj/item/clothing/under/color/jumpskirt/lightblue name = "light blue jumpskirt" - icon_state = "lightblueskirt" + icon_palette_key = DYE_LIGHTBLUE /obj/item/clothing/under/color/aqua name = "aqua jumpsuit" - icon_state = "aqua" + icon_palette_key = DYE_AQUA /obj/item/clothing/under/color/jumpskirt/aqua name = "aqua jumpskirt" - icon_state = "aquaskirt" + icon_palette_key = DYE_AQUA /obj/item/clothing/under/color/purple name = "purple jumpsuit" - icon_state = "purple" - inhand_icon_state = "p_suit" + icon_palette_key = DYE_PURPLE /obj/item/clothing/under/color/jumpskirt/purple name = "purple jumpskirt" - icon_state = "purpleskirt" - inhand_icon_state = "p_suit" + icon_palette_key = DYE_PURPLE /// for jani ert /obj/item/clothing/under/color/purple/sensor @@ -190,71 +243,71 @@ /obj/item/clothing/under/color/lightpurple name = "light purple jumpsuit" - icon_state = "lightpurple" + icon_palette_key = DYE_LIGHTPURPLE /obj/item/clothing/under/color/jumpskirt/lightpurple name = "light purple jumpskirt" - icon_state = "lightpurpleskirt" + icon_palette_key = DYE_LIGHTPURPLE /obj/item/clothing/under/color/lightgreen name = "light green jumpsuit" - icon_state = "lightgreen" + icon_palette_key = DYE_LIGHTGREEN /obj/item/clothing/under/color/jumpskirt/lightgreen name = "light green jumpskirt" - icon_state = "lightgreenskirt" + icon_palette_key = DYE_LIGHTGREEN /obj/item/clothing/under/color/lightbrown name = "light brown jumpsuit" - icon_state = "lightbrown" + icon_palette_key = DYE_LIGHTBROWN /obj/item/clothing/under/color/jumpskirt/lightbrown name = "light brown jumpskirt" - icon_state = "lightbrownskirt" + icon_palette_key = DYE_LIGHTBROWN /obj/item/clothing/under/color/brown name = "brown jumpsuit" - icon_state = "brown" + icon_palette_key = DYE_BROWN /obj/item/clothing/under/color/jumpskirt/brown name = "brown jumpskirt" - icon_state = "brownskirt" + icon_palette_key = DYE_BROWN /obj/item/clothing/under/color/yellowgreen name = "yellow green jumpsuit" - icon_state = "yellowgreen" + icon_palette_key = DYE_YELLOWGREEN /obj/item/clothing/under/color/jumpskirt/yellowgreen name = "yellow green jumpskirt" - icon_state = "yellowgreenskirt" + icon_palette_key = DYE_YELLOWGREEN /obj/item/clothing/under/color/darkblue name = "dark blue jumpsuit" - icon_state = "darkblue" + icon_palette_key = DYE_DARKBLUE /obj/item/clothing/under/color/jumpskirt/darkblue name = "dark blue jumpskirt" - icon_state = "darkblueskirt" + icon_palette_key = DYE_DARKBLUE /obj/item/clothing/under/color/lightred name = "light red jumpsuit" - icon_state = "lightred" + icon_palette_key = DYE_LIGHTRED /obj/item/clothing/under/color/jumpskirt/lightred name = "light red jumpskirt" - icon_state = "lightredskirt" + icon_palette_key = DYE_LIGHTRED /obj/item/clothing/under/color/darkred name = "dark red jumpsuit" - icon_state = "darkred" + icon_palette_key = DYE_DARKRED /obj/item/clothing/under/color/jumpskirt/darkred name = "dark red jumpskirt" - icon_state = "darkredskirt" + icon_palette_key = DYE_DARKRED /obj/item/clothing/under/color/rainbow name = "rainbow jumpsuit" - desc = "rainbow." + desc = "Rainbow." icon_state = "rainbow" inhand_icon_state = "rainbow" @@ -268,8 +321,10 @@ name = "red team jersey" desc = "The jersey of the Nanotrasen Phi-ghters!" icon_state = "redjersey" + icon_palette_key = null /obj/item/clothing/under/color/blue/jersey name = "blue team jersey" desc = "The jersey of the Nanotrasen Pi-rates!" icon_state = "bluejersey" + icon_palette_key = null diff --git a/icons/mob/clothing/species/drask/under/color.dmi b/icons/mob/clothing/species/drask/under/color.dmi index c91b1131eae..3db33434977 100644 Binary files a/icons/mob/clothing/species/drask/under/color.dmi and b/icons/mob/clothing/species/drask/under/color.dmi differ diff --git a/icons/mob/clothing/species/grey/under/color.dmi b/icons/mob/clothing/species/grey/under/color.dmi index e286752d659..ce71e565bce 100644 Binary files a/icons/mob/clothing/species/grey/under/color.dmi and b/icons/mob/clothing/species/grey/under/color.dmi differ diff --git a/icons/mob/clothing/species/kidan/under/color.dmi b/icons/mob/clothing/species/kidan/under/color.dmi index b9548a7d3d9..874f3e31c56 100644 Binary files a/icons/mob/clothing/species/kidan/under/color.dmi and b/icons/mob/clothing/species/kidan/under/color.dmi differ diff --git a/icons/mob/clothing/species/skkulakin/under/color.dmi b/icons/mob/clothing/species/skkulakin/under/color.dmi index 82303ac4d40..d91cb7ead87 100644 Binary files a/icons/mob/clothing/species/skkulakin/under/color.dmi and b/icons/mob/clothing/species/skkulakin/under/color.dmi differ diff --git a/icons/mob/clothing/species/vox/under/color.dmi b/icons/mob/clothing/species/vox/under/color.dmi index 82303ac4d40..d91cb7ead87 100644 Binary files a/icons/mob/clothing/species/vox/under/color.dmi and b/icons/mob/clothing/species/vox/under/color.dmi differ diff --git a/icons/mob/clothing/under/color.dmi b/icons/mob/clothing/under/color.dmi index 633488f11cc..3b63ea4e608 100644 Binary files a/icons/mob/clothing/under/color.dmi and b/icons/mob/clothing/under/color.dmi differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 9f4e737b4ac..b09cb0d0e43 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index a750ecb680b..4ff4dd33981 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/obj/clothing/under/color.dmi b/icons/obj/clothing/under/color.dmi index 1da385bf096..6f1744540f4 100644 Binary files a/icons/obj/clothing/under/color.dmi and b/icons/obj/clothing/under/color.dmi differ diff --git a/paradise.dme b/paradise.dme index 7e5c9c81ef5..c25aa0d4103 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1930,6 +1930,7 @@ #include "code\modules\asset_cache\assets\asset_chess.dm" #include "code\modules\asset_cache\assets\asset_claw_game.dm" #include "code\modules\asset_cache\assets\asset_cloning.dm" +#include "code\modules\asset_cache\assets\asset_clothing_icons.dm" #include "code\modules\asset_cache\assets\asset_common.dm" #include "code\modules\asset_cache\assets\asset_emoji.dm" #include "code\modules\asset_cache\assets\asset_icon_ref_map.dm"