diff --git a/code/datums/outfits/misc/shitspawn.dm b/code/datums/outfits/misc/shitspawn.dm index a9328fd7d6f3..e5d113ba7a8d 100644 --- a/code/datums/outfits/misc/shitspawn.dm +++ b/code/datums/outfits/misc/shitspawn.dm @@ -347,7 +347,7 @@ /datum/outfit/psyops_officer name = "psyops officer" - uniform = /obj/item/clothing/under/darkred + uniform = /obj/item/clothing/under/color/darkred head = /obj/item/clothing/head/helmet/psyamp suit = /obj/item/clothing/suit/armor/vest/fullbody/psy_robe shoes = /obj/item/clothing/shoes/boots/combat @@ -492,7 +492,7 @@ id = /obj/item/weapon/card/id/centcom/special_ops /datum/outfit/wizard - uniform = /obj/item/clothing/under/lightpurple + uniform = /obj/item/clothing/under/color/lightpurple shoes = /obj/item/clothing/shoes/sandal l_ear = /obj/item/device/radio/headset r_pocket = /obj/item/weapon/teleportation_scroll diff --git a/code/game/gamemodes/factions/families.dm b/code/game/gamemodes/factions/families.dm index f44802c20321..ca4a8a8c712f 100644 --- a/code/game/gamemodes/factions/families.dm +++ b/code/game/gamemodes/factions/families.dm @@ -87,13 +87,13 @@ name = "Ballas" gang_id = "B" acceptable_clothes = list(/obj/item/clothing/head/soft/purple, - /obj/item/clothing/under/lightpurple, + /obj/item/clothing/under/color/lightpurple, /obj/item/clothing/mask/scarf/violet, /obj/item/clothing/gloves/purple, /obj/item/clothing/mask/bandana/skull, /obj/item/clothing/under/color/pink) - free_clothes = list(/obj/item/clothing/under/lightpurple, + free_clothes = list(/obj/item/clothing/under/color/lightpurple, /obj/item/clothing/gloves/purple, /obj/item/toy/crayon/spraycan) gang_objective_type = /datum/objective/gang/protect_security @@ -102,12 +102,12 @@ name = "Grove Street Families" gang_id = "GSF" acceptable_clothes = list(/obj/item/clothing/head/soft/green, - /obj/item/clothing/under/lightgreen, + /obj/item/clothing/under/color/lightgreen, /obj/item/clothing/mask/scarf/green, /obj/item/clothing/suit/poncho/green, /obj/item/clothing/mask/bandana/green) free_clothes = list(/obj/item/clothing/mask/bandana/green, - /obj/item/clothing/under/lightgreen, + /obj/item/clothing/under/color/lightgreen, /obj/item/toy/crayon/spraycan) gang_objective_type = /datum/objective/gang/capture_station diff --git a/code/game/gamemodes/modes_gameplays/ninja/outfit.dm b/code/game/gamemodes/modes_gameplays/ninja/outfit.dm index ac66d67349ce..5b8fe9cdca5e 100644 --- a/code/game/gamemodes/modes_gameplays/ninja/outfit.dm +++ b/code/game/gamemodes/modes_gameplays/ninja/outfit.dm @@ -2,7 +2,7 @@ name = "Space Ninja" uniform = /obj/item/clothing/under/color/black - uniform_f = /obj/item/clothing/under/color/blackf + uniform_f = /obj/item/clothing/under/blackf shoes = /obj/item/clothing/shoes/space_ninja suit = /obj/item/clothing/suit/space/space_ninja gloves = /obj/item/clothing/gloves/space_ninja diff --git a/code/game/gamemodes/modes_gameplays/wizard/artefact.dm b/code/game/gamemodes/modes_gameplays/wizard/artefact.dm index ec6b4145e427..57233c5f9fba 100644 --- a/code/game/gamemodes/modes_gameplays/wizard/artefact.dm +++ b/code/game/gamemodes/modes_gameplays/wizard/artefact.dm @@ -204,7 +204,7 @@ for(var/obj/item/I in target) target.remove_from_mob(I) target.equip_to_slot_or_del(new /obj/item/device/radio/headset(target), SLOT_L_EAR) - target.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(target), SLOT_W_UNIFORM) + target.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(target), SLOT_W_UNIFORM) target.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(target), SLOT_SHOES) target.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(target), SLOT_WEAR_SUIT) target.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(target), SLOT_HEAD) diff --git a/code/game/gamemodes/roles/wizard.dm b/code/game/gamemodes/roles/wizard.dm index 46df1d07739b..ff70e7d1e98d 100644 --- a/code/game/gamemodes/roles/wizard.dm +++ b/code/game/gamemodes/roles/wizard.dm @@ -56,7 +56,7 @@ qdel(wizard_mob.l_store) wizard_mob.equip_to_slot_or_del(new /obj/item/device/radio/headset(wizard_mob), SLOT_L_EAR) - wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/lightpurple(wizard_mob), SLOT_W_UNIFORM) + wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(wizard_mob), SLOT_W_UNIFORM) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), SLOT_SHOES) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), SLOT_WEAR_SUIT) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), SLOT_HEAD) diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 398dc8d22b61..f020a924c16d 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -5,7 +5,7 @@ var/global/list/dyed_item_types = list( DYE_YELLOW = /obj/item/clothing/under/color/yellow, DYE_GREEN = /obj/item/clothing/under/color/green, DYE_BLUE = /obj/item/clothing/under/color/blue, - DYE_PURPLE = /obj/item/clothing/under/purple, + DYE_PURPLE = /obj/item/clothing/under/color/purple, DYE_WHITE = /obj/item/clothing/under/color/white, DYE_MIME = /obj/item/clothing/under/mime, DYE_RAINBOW = /obj/item/clothing/under/rainbow, diff --git a/code/game/objects/structures/pit.dm b/code/game/objects/structures/pit.dm index fa79b17a3d60..315b4384c96b 100644 --- a/code/game/objects/structures/pit.dm +++ b/code/game/objects/structures/pit.dm @@ -144,7 +144,7 @@ /obj/item/clothing/under/pants/jeans, /obj/item/clothing/under/pants/camo, /obj/item/clothing/under/det, - /obj/item/clothing/under/brown, + /obj/item/clothing/under/color/brown, /obj/item/clothing/under/jetsons, /obj/item/clothing/under/jetsons/j2 ) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1b4982257d9f..2cedf2eaaab4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -516,7 +516,7 @@ BLIND // can't see anything 3 = Report location */ var/displays_id = 1 - var/rolled_down = 0 + var/rolled_down = FALSE var/basecolor var/fresh_laundered_until = 0 @@ -529,6 +529,7 @@ BLIND // can't see anything /obj/item/clothing/under/equipped(mob/user, slot) ..() + rolled_down = FALSE if(slot == SLOT_W_UNIFORM && fresh_laundered_until > world.time) fresh_laundered_until = world.time SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "fresh_laundry", /datum/mood_event/fresh_laundry) @@ -631,18 +632,23 @@ BLIND // can't see anything if(usr.incapacitated()) return - if(copytext(item_state,-2) != "_d") - basecolor = item_state - if(icon_exists('icons/mob/uniform.dmi', "[basecolor]_d")) - item_state = item_state == "[basecolor]" ? "[basecolor]_d" : "[basecolor]" - update_inv_mob() + if(rolled_down) + to_chat(usr, "Вы пытаетесь распахнуть униформу.") else - to_chat(usr, "You cannot roll down the uniform!") + to_chat(usr, "Вы пытаетесь застягнуть униформу.") + rolled_down = !rolled_down + update_inv_mob() /obj/item/clothing/under/wash_act(w_color) . = ..() fresh_laundered_until = world.time + 5 MINUTES + var/obj/item/clothing/dye_type = get_dye_type(w_color) + if(!dye_type) + return + color = dye_type.color + + /obj/item/clothing/under/rank/atom_init() sensor_mode = pick(SUIT_SENSOR_OFF, SUIT_SENSOR_BINARY, SUIT_SENSOR_VITAL, SUIT_SENSOR_TRACKING) . = ..() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 2cbfd20cf819..d2fb16fe18aa 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -1,133 +1,155 @@ -/obj/item/clothing/under/color/black - name = "black jumpsuit" - icon_state = "black" - item_state = "black" + +/obj/item/clothing/under/color + name = "colored uniform" + icon_state = "colored" + item_state_inventory= "colored" + item_state_world = "colored_w" + item_state = "colored" + color = "#818181" flags = ONESIZEFITSALL|HEAR_TALK + var/mutable_appearance/item_under_overlay + +// if needed, this can easily be changed to /obj/item/clothing/under +// in case of adding support for /obj/item/clothing, this proc will require some tweaking +/obj/item/clothing/under/color/get_standing_overlay(mob/living/carbon/human/H, def_icon_path, sprite_sheet_slot, layer, bloodied_icon_state = null, icon_state_appendix = null) + var/mutable_appearance/I = ..() + + var/icon_path = def_icon_path + var/t_state = item_state ? item_state : icon_state + + var/datum/species/S = H.species + + if(S.sprite_sheets[sprite_sheet_slot]) + icon_path = S.sprite_sheets[sprite_sheet_slot] + + var/fem_appendix = "" + + // we dont have female sprites for fat uniforms + if(H.gender == FEMALE && S.gender_limb_icons && sprite_sheet_slot != SPRITE_SHEET_UNIFORM_FAT) + fem_appendix = "_fem" + + // checks if we have a colorless overlay we need to apply + if(rolled_down || !icon_exists(icon_path, "[t_state]_overlay[fem_appendix]")) + return I -/obj/item/clothing/under/color/blackf - name = "feminine black jumpsuit" - desc = "It's very smart and in a ladies-size!" - icon_state = "black" - item_state = "blackf" + // add the colorless overlay + I.cut_overlays() + var/mutable_appearance/under_mob_overlay = mutable_appearance(icon = icon_path, icon_state = "[t_state]_overlay[fem_appendix]") + under_mob_overlay.appearance_flags = RESET_COLOR + I.add_overlay(under_mob_overlay) + + // re-apply blood & dirt + if(dirt_overlay && bloodied_icon_state) + var/mutable_appearance/bloodsies = mutable_appearance(icon = 'icons/effects/blood.dmi', icon_state = bloodied_icon_state) + bloodsies.color = dirt_overlay.color + I.add_overlay(bloodsies) + + return I + +/obj/item/clothing/under/color/update_icon() + ..() + + // add the colorless overlay + //var/mutable_appearance/under_overlay = mutable_appearance(icon, "[icon_state]_overlay") + //under_overlay.appearance_flags = RESET_COLOR + //add_overlay(under_overlay) + +/obj/item/clothing/under/color/dropped() + . = ..() + update_world_icon() + +// cut_overlay just isnt fast enough for this, unfortunately. +/obj/item/clothing/under/color/putdown_animation() + return + +/obj/item/clothing/under/color/update_world_icon() + ..() + + // add the colorless overlay + cut_overlay(item_under_overlay) + item_under_overlay = image(icon, "[icon_state]_overlay") + item_under_overlay.appearance_flags = RESET_COLOR + add_overlay(item_under_overlay) + +/obj/item/clothing/under/color/black + name = "black jumpsuit" + color = "#303030" /obj/item/clothing/under/color/blue name = "blue jumpsuit" - icon_state = "blue" - item_state = "blue" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#2b4e95" /obj/item/clothing/under/color/green name = "green jumpsuit" - icon_state = "green" - item_state = "green" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#477238" /obj/item/clothing/under/color/grey name = "grey jumpsuit" - icon_state = "grey" - item_state = "grey" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#818181" /obj/item/clothing/under/color/orange name = "orange jumpsuit" desc = "It's standardised Nanotrasen prisoner-wear. Its suit sensors are stuck in the \"Fully On\" position." - icon_state = "orange" - item_state = "orange" + color = "#b9451d" has_sensor = 2 sensor_mode = SUIT_SENSOR_TRACKING - flags = ONESIZEFITSALL|HEAR_TALK /obj/item/clothing/under/color/pink name = "pink jumpsuit" - icon_state = "pink" - item_state = "pink" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#e27285" /obj/item/clothing/under/color/red name = "red jumpsuit" - icon_state = "red" - item_state = "red" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#b91d1d" /obj/item/clothing/under/color/white name = "white jumpsuit" - icon_state = "white" - item_state = "white" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#f1ebdb" /obj/item/clothing/under/color/yellow name = "yellow jumpsuit" - icon_state = "yellow" - item_state = "yellow" - flags = ONESIZEFITSALL|HEAR_TALK + color = "#f8c53a" -/obj/item/clothing/under/psyche - name = "psychedelic" - desc = "Groovy!" - icon_state = "psyche" +/obj/item/clothing/under/color/lightblue + name = "lightblue jumpsuit" + color = "#42bfe8" -/obj/item/clothing/under/lightblue - name = "lightblue" - desc = "lightblue" - icon_state = "lightblue" - flags = ONESIZEFITSALL|HEAR_TALK +/obj/item/clothing/under/color/aqua + name = "aqua jumpsuit" + color = "#59cf93" -/obj/item/clothing/under/aqua - name = "aqua" - desc = "aqua" - icon_state = "aqua" - flags = ONESIZEFITSALL|HEAR_TALK +/obj/item/clothing/under/color/purple + name = "purple jumpsuit" + color = "#9052bc" -/obj/item/clothing/under/purple - name = "purple" - desc = "purple" - icon_state = "purple" - item_state = "purple" +/obj/item/clothing/under/color/lightpurple + name = "lightpurple jumpsuit" + color = "#ceaaed" -/obj/item/clothing/under/lightpurple - name = "lightpurple" - desc = "lightpurple" - icon_state = "lightpurple" - flags = ONESIZEFITSALL|HEAR_TALK +/obj/item/clothing/under/color/lightgreen + name = "lightgreen jumpsuit" + color = "#c4f129" -/obj/item/clothing/under/lightgreen - name = "lightgreen" - desc = "lightgreen" - icon_state = "lightgreen" - -/obj/item/clothing/under/lightblue - name = "lightblue" - desc = "lightblue" - icon_state = "lightblue" - -/obj/item/clothing/under/lightbrown - name = "lightbrown" - desc = "lightbrown" - icon_state = "lightbrown" - -/obj/item/clothing/under/brown - name = "brown" - desc = "brown" - icon_state = "brown" - -/obj/item/clothing/under/yellowgreen - name = "yellowgreen" - desc = "yellowgreen" - icon_state = "yellowgreen" - -/obj/item/clothing/under/darkblue - name = "darkblue" - desc = "darkblue" - icon_state = "darkblue" - flags = ONESIZEFITSALL|HEAR_TALK +/obj/item/clothing/under/color/lightbrown + name = "lightbrown jumpsuit" + color = "#d39741" -/obj/item/clothing/under/lightred - name = "lightred" - desc = "lightred" - icon_state = "lightred" +/obj/item/clothing/under/color/brown + name = "brown jumpsuit" + color = "#855f39" -/obj/item/clothing/under/darkred - name = "darkred" - desc = "darkred" - icon_state = "darkred" - flags = ONESIZEFITSALL|HEAR_TALK +/obj/item/clothing/under/color/yellowgreen + name = "yellowgreen jumpsuit" + color = "#b0dc1d" + +/obj/item/clothing/under/color/darkblue + name = "darkblue jumpsuit" + color = "#1b2447" + +/obj/item/clothing/under/color/lightred + name = "lightred jumpsuit" + color = "#e27272" + +/obj/item/clothing/under/color/darkred + name = "darkred jumpsuit" + color = "#612721" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 15bd227d8ab6..271e6f54b367 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -769,3 +769,14 @@ name = "pluvia suit" icon_state = "pluviaGold" item_state = "pluviaGold" + +/obj/item/clothing/under/blackf + name = "feminine black jumpsuit" + desc = "It's very smart and in a ladies-size!" + icon_state = "black" + item_state = "blackf" + +/obj/item/clothing/under/psyche + name = "psychedelic" + desc = "Groovy!" + icon_state = "psyche" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 24173e23c0d9..38b09bf5eecc 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -124,13 +124,23 @@ Please contact me on #coderbus IRC. ~Carn x if(icon_path != def_icon_path && !icon_exists(icon_path, "[t_state][icon_state_appendix]")) icon_path = def_icon_path - var/fem = "" + var/fem_appendix = "" if(H.gender == FEMALE && S.gender_limb_icons) if(t_state != null) if(icon_exists(icon_path, "[t_state]_fem")) - fem = "_fem" - - var/mutable_appearance/I = mutable_appearance(icon = icon_path, icon_state = "[t_state][fem][icon_state_appendix]", layer = layer) + fem_appendix = "_fem" + + var/rolled_down_appendix = "" + if(sprite_sheet_slot == SPRITE_SHEET_UNIFORM || sprite_sheet_slot == SPRITE_SHEET_UNIFORM_FAT) + if(isunder(src)) + if(sprite_sheet_slot == SPRITE_SHEET_UNIFORM_FAT) + fem_appendix = "" // we do not have overweight sprites for women + var/obj/item/clothing/under/U = src + if(U.rolled_down) + if(icon_exists(icon_path, "[t_state]_d[fem_appendix]")) // check if there is such sprite + rolled_down_appendix = "_d" + + var/mutable_appearance/I = mutable_appearance(icon = icon_path, icon_state = "[t_state][rolled_down_appendix][fem_appendix][icon_state_appendix]", layer = layer) I.color = color if(dirt_overlay && bloodied_icon_state) diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index f080f2d8cd32..dd6cc135f264 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/mob/uniform_fat.dmi b/icons/mob/uniform_fat.dmi index ae15bdefbefb..991496f3171d 100644 Binary files a/icons/mob/uniform_fat.dmi and b/icons/mob/uniform_fat.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index f0f6d28612af..3f8f3ddf4a50 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/maps/RandomZLevels/Academy.dmm b/maps/RandomZLevels/Academy.dmm index 4e115d095501..6784d73a40f5 100644 --- a/maps/RandomZLevels/Academy.dmm +++ b/maps/RandomZLevels/Academy.dmm @@ -2492,8 +2492,8 @@ /area/awaymission/academy/academyaft) "gM" = ( /obj/machinery/door/airlock/gold{ - locked = 1; - dir = 4 + dir = 4; + locked = 1 }, /obj/structure/cable{ d1 = 4; @@ -2942,7 +2942,7 @@ /area/awaymission/academy/academyaft) "hN" = ( /obj/structure/closet, -/obj/item/clothing/under/lightpurple, +/obj/item/clothing/under/color/lightpurple, /obj/item/clothing/shoes/sandal, /turf/simulated/floor, /area/awaymission/academy/academyaft) @@ -2957,7 +2957,7 @@ /area/awaymission/academy/academyaft) "hQ" = ( /obj/structure/closet, -/obj/item/clothing/under/lightpurple, +/obj/item/clothing/under/color/lightpurple, /obj/item/weapon/staff, /turf/simulated/floor, /area/awaymission/academy/academyaft) @@ -2975,7 +2975,7 @@ /area/awaymission/academy/academyaft) "hT" = ( /obj/structure/closet, -/obj/item/clothing/under/purple, +/obj/item/clothing/under/color/purple, /obj/item/weapon/poster/contraband, /turf/simulated/floor, /area/awaymission/academy/academyaft) diff --git a/maps/delta/delta.dmm b/maps/delta/delta.dmm index 2efca823d9f0..03c2efcdfa5d 100644 --- a/maps/delta/delta.dmm +++ b/maps/delta/delta.dmm @@ -20299,7 +20299,7 @@ "btq" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/lightred, +/obj/item/clothing/under/color/lightred, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "bot_old" }, @@ -55917,7 +55917,7 @@ "jNK" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/yellowgreen, +/obj/item/clothing/under/color/yellowgreen, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "delivery" }, @@ -63088,7 +63088,7 @@ icon_state = "crateopen" }, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/brown, +/obj/item/clothing/under/color/brown, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "bot_old" }, @@ -63409,7 +63409,7 @@ "lCO" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/lightbrown, +/obj/item/clothing/under/color/lightbrown, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "delivery" }, @@ -94688,7 +94688,7 @@ icon_state = "crateopen" }, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/aqua, +/obj/item/clothing/under/color/aqua, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "bot_old" }, @@ -103395,7 +103395,7 @@ "vwV" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, -/obj/item/clothing/under/darkred, +/obj/item/clothing/under/color/darkred, /obj/effect/decal/turf_decal/alpha/yellow{ icon_state = "delivery" },