diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 7ad5041344..d33d9fe4f5 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -126,7 +126,9 @@ //flags for alternate styles: These are hard sprited so don't set this if you didn't put the effort in #define NORMAL_STYLE 0 #define ALT_STYLE 1 -#define DIGITIGRADE_STYLE 2 + +#define NORMAL_SUIT_STYLE 0 +#define DIGITIGRADE_SUIT_STYLE 1 //flags for outfits that have mutantrace variants (try not to use this): Currently only needed if you're trying to add tight fitting bootyshorts #define NO_MUTANTRACE_VARIATION 0 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 01fd0e78f3..b01f1bca19 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -50,6 +50,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/flags_inv //This flag is used to determine when items in someone's inventory cover others. IE helmets making it so you can't see glasses, etc. var/interaction_flags_item = INTERACT_ITEM_ATTACK_HAND_PICKUP + //Citadel Edit for digitigrade stuff + var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. var/item_color = null //this needs deprecating, soonish @@ -101,8 +103,6 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) var/last_force_string_check = 0 var/tip_timer - var/icon_override //CIT CHANGE - adds icon_override var. Will be removed with #4322 - var/trigger_guard = TRIGGER_GUARD_NONE //Grinder vars diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index b9ce170dc5..1e65c6ca3f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -248,9 +248,8 @@ BLIND // can't see anything H.update_body() /obj/item/clothing/under/proc/toggle_jumpsuit_adjust() - if(adjusted == DIGITIGRADE_STYLE) - return adjusted = !adjusted + if(adjusted) if(fitted != FEMALE_UNIFORM_TOP) fitted = NO_FEMALE_UNIFORM @@ -260,6 +259,7 @@ BLIND // can't see anything fitted = initial(fitted) if(!alt_covers_chest) body_parts_covered |= CHEST + return adjusted /obj/item/clothing/proc/weldingvisortoggle(mob/user) //proc to toggle welding visors on helmets, masks, goggles, etc. diff --git a/code/modules/clothing/glasses/vg_glasses.dm b/code/modules/clothing/glasses/vg_glasses.dm index 58df3102ce..449b34b22e 100644 --- a/code/modules/clothing/glasses/vg_glasses.dm +++ b/code/modules/clothing/glasses/vg_glasses.dm @@ -6,21 +6,21 @@ name = "purple sunglasses" icon_state = "sun_purple" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/glasses.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/sunglasses/star name = "star-shaped sunglasses" desc = "Novelty sunglasses, both lenses are in the shape of a star." icon_state = "sun_star" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/glasses.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/sunglasses/rockstar name = "red star-shaped sunglasses" desc = "Novelty sunglasses with a fancy silver frame and two red-tinted star-shaped lenses. You should probably stomp on them and get a pair of normal ones." icon_state = "sun_star_silver" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/glasses.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/gglasses name = "Green Glasses" @@ -28,7 +28,7 @@ icon_state = "gglasses" item_state = "gglasses" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/glasses.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' /obj/item/clothing/glasses/welding/superior name = "superior welding goggles" @@ -36,7 +36,7 @@ icon_state = "rwelding-g" item_state = "rwelding-g" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/glasses.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/glasses.dmi' actions_types = list(/datum/action/item_action/toggle) flash_protect = 2 tint = 1 diff --git a/code/modules/clothing/head/cit_hats.dm b/code/modules/clothing/head/cit_hats.dm index 8cdfe807c8..7b0e68264f 100644 --- a/code/modules/clothing/head/cit_hats.dm +++ b/code/modules/clothing/head/cit_hats.dm @@ -4,4 +4,4 @@ icon = 'modular_citadel/icons/obj/clothing/cit_hats.dmi' icon_state = "hunter" item_state = "hunter_worn" - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' diff --git a/code/modules/clothing/head/vg_hats.dm b/code/modules/clothing/head/vg_hats.dm index be57619a7a..efeb5291db 100644 --- a/code/modules/clothing/head/vg_hats.dm +++ b/code/modules/clothing/head/vg_hats.dm @@ -12,7 +12,7 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 dog_fashion = null - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/aviatorhelmet name = "Aviator Helmet" @@ -21,7 +21,7 @@ item_state = "aviator_helmet" icon_state = "aviator_helmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/biker name = "Biker's Helmet" @@ -29,7 +29,7 @@ armor = list(melee = 25, bullet = 15, laser = 20, energy = 10, bomb = 10, bio = 0, rad = 0) icon_state = "biker_helmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR /obj/item/clothing/head/helmet/richard @@ -38,7 +38,7 @@ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) icon_state = "richard" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR /obj/item/clothing/head/helmet/megahelmet @@ -47,7 +47,7 @@ icon_state = "megahelmet" item_state = "megahelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 1 /obj/item/clothing/head/helmet/protohelmet @@ -56,7 +56,7 @@ icon_state = "protohelmet" item_state = "protohelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 1 /obj/item/clothing/head/helmet/megaxhelmet @@ -65,7 +65,7 @@ icon_state = "megaxhelmet" item_state = "megaxhelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/joehelmet name = "Sniper Helmet" @@ -74,7 +74,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR item_state = "joehelmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/helmet/doomguy name = "Doomguy's helmet" @@ -83,7 +83,7 @@ flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR item_state = "doom" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' armor = list(melee = 50, bullet = 40, laser = 40,energy = 40, bomb = 5, bio = 0, rad = 0) /obj/item/clothing/head/helmet/neorussian @@ -92,7 +92,7 @@ icon_state = "nr_helmet" item_state = "nr_helmet" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/stalhelm @@ -101,7 +101,7 @@ icon_state = "stalhelm" item_state = "stalhelm" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/panzer name = "Panzer Cap" @@ -109,7 +109,7 @@ icon_state = "panzercap" item_state = "panzercap" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/naziofficer name = "Officer Cap" @@ -117,7 +117,7 @@ icon_state = "officercap" item_state = "officercap" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/russobluecamohat @@ -133,7 +133,7 @@ icon_state = "russofurhat" item_state = "russofurhat" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/squatter_hat name = "slav squatter hat" @@ -141,7 +141,7 @@ item_state = "squatter_hat" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' desc = "Cyka blyat." - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/snake name = "snake head" @@ -149,7 +149,7 @@ icon_state = "snakehead" item_state = "snakehead" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/mummy_rags name = "mummy rags" @@ -158,7 +158,7 @@ item_state = "mummy" item_color = "mummy" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS /obj/item/clothing/head/clownpiece @@ -167,7 +167,7 @@ icon_state = "clownpiece" item_state = "clownpiece" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/mitre name = "mitre" @@ -175,7 +175,7 @@ icon_state = "mitre" item_state = "mitre" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' /obj/item/clothing/head/tinfoil name = "tinfoil hat" @@ -183,7 +183,7 @@ icon_state = "foilhat" item_state = "paper" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' siemens_coefficient = 2 /obj/item/clothing/head/celtic @@ -192,4 +192,4 @@ icon_state = "celtic_crown" item_state = "celtic_crown" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' diff --git a/code/modules/clothing/masks/vg_masks.dm b/code/modules/clothing/masks/vg_masks.dm index 712a023651..7de27fb780 100644 --- a/code/modules/clothing/masks/vg_masks.dm +++ b/code/modules/clothing/masks/vg_masks.dm @@ -3,18 +3,18 @@ desc = "Some pranksters are truly magical." icon_state = "wizzclown" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/masks.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' /obj/item/clothing/mask/chapmask name = "venetian mask" desc = "A plain porcelain mask that covers the entire face. Standard attire for particularly unspeakable religions. The eyes are wide shut." icon_state = "chapmask" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/masks.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' /obj/item/clothing/mask/neorussian name = "neo-Russian mask" desc = "Somehow, it makes you act and look way more polite than usual." icon_state = "nr_mask" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/masks.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/masks.dmi' diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 233a529dcf..61f189e236 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -17,7 +17,7 @@ //CITADEL EDIT Enables digitigrade shoe styles var/adjusted = NORMAL_STYLE - var/mutantrace_variation = MUTANTRACE_VARIATION + mutantrace_variation = MUTANTRACE_VARIATION /obj/item/clothing/shoes/ComponentInitialize() . = ..() @@ -62,9 +62,9 @@ if(mutantrace_variation && ishuman(user)) var/mob/living/carbon/human/H = user if(DIGITIGRADE in H.dna.species.species_traits) - adjusted = DIGITIGRADE_STYLE + adjusted = ALT_STYLE H.update_inv_shoes() - else if(adjusted == DIGITIGRADE_STYLE) + else if(adjusted == ALT_STYLE) adjusted = NORMAL_STYLE H.update_inv_shoes() diff --git a/code/modules/clothing/shoes/vg_shoes.dm b/code/modules/clothing/shoes/vg_shoes.dm index f867b537c7..931c25b823 100644 --- a/code/modules/clothing/shoes/vg_shoes.dm +++ b/code/modules/clothing/shoes/vg_shoes.dm @@ -5,7 +5,8 @@ icon_state = "leather" item_color = "leather" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/magboots/deathsquad desc = "Very expensive and advanced magnetic boots, used only by the elite during extravehicular activity to ensure the user remains safely attached to the vehicle." @@ -13,112 +14,128 @@ icon_state = "DS-magboots0" magboot_state = "DS-magboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/magboots/atmos desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. These are painted in the colors of an atmospheric technician." name = "atmospherics magboots" icon_state = "atmosmagboots0" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' magboot_state = "atmosmagboots" resistance_flags = FIRE_PROOF + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/simonshoes name = "Simon's Shoes" desc = "Simon's Shoes." icon_state = "simonshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/kneesocks name = "kneesocks" desc = "A pair of girly knee-high socks." icon_state = "kneesock" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/jestershoes name = "Jester Shoes" desc = "As worn by the clowns of old." icon_state = "jestershoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/aviatorboots name = "Aviator Boots" desc = "Boots suitable for just about any occasion." icon_state = "aviator_boots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/libertyshoes name = "Liberty Shoes" desc = "Freedom isn't free, neither were these shoes." icon_state = "libertyshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/megaboots name = "DRN-001 Boots" desc = "Large armored boots, very weak to large spikes." icon_state = "megaboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/protoboots name = "Prototype Boots" desc = "Functionally identical to the DRN-001 model's boots, but in red." icon_state = "protoboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/megaxboots name = "Maverick Hunter boots" desc = "Regardless of how much stronger these boots are than the DRN-001 model's, they're still extremely easy to pierce with a large spike." icon_state = "megaxboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/joeboots name = "Sniper Boots" desc = "Nearly identical to the Prototype's boots, except in black." icon_state = "joeboots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/doomguy name = "Doomguy's boots" desc = "If you look closely, you might see skull fragments still buried in these boots." icon_state = "doom" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/rottenshoes name = "rotten shoes" desc = "These shoes seem perfect for sneaking around." icon_state = "rottenshoes" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/sandal/slippers name = "magic slippers" icon_state = "slippers" desc = "For the wizard that puts comfort first. Who's going to laugh?" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/slippers_worn name = "worn bunny slippers" desc = "Fluffy..." icon_state = "slippers_worn" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/jackboots/neorussian name = "neo-Russian boots" desc = "Tovarish, no one will realize you stepped on a pile of shit if your pair already looks like shit." icon_state = "nr_boots" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/head.dmi' \ No newline at end of file + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/head.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION \ No newline at end of file diff --git a/code/modules/clothing/suits/vg_suits.dm b/code/modules/clothing/suits/vg_suits.dm index da06e85392..2c97653637 100644 --- a/code/modules/clothing/suits/vg_suits.dm +++ b/code/modules/clothing/suits/vg_suits.dm @@ -8,7 +8,7 @@ armor = list(melee = 50, bullet = 50, laser = 50, energy = 30, bomb = 60, bio = 30, rad = 20) siemens_coefficient = 0.5 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/armor/xcomsquaddie/dredd name = "Judge Armor" @@ -16,7 +16,7 @@ icon_state = "dredd-suit" item_state = "dredd-suit" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/armor/xcomarmor @@ -29,7 +29,7 @@ slowdown = 1 siemens_coefficient = 0.5 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/armor/vest/neorussian name = "neo-Russian vest" @@ -37,7 +37,7 @@ icon_state = "nr_vest" item_state = "nr_vest" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/armor/doomguy name = "Doomguy's armor" @@ -48,7 +48,7 @@ slowdown = 0 armor = list(melee = 50, bullet = 30, laser = 20, energy = 20, bomb = 30, bio = 0, rad = 0) icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/kaminacape @@ -57,7 +57,7 @@ icon_state = "kaminacape" body_parts_covered = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/officercoat name = "Officer's Coat" @@ -80,7 +80,7 @@ allowed = list(/obj/item/gun) body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/doshjacket name = "Plasterer's Jacket" @@ -88,7 +88,7 @@ icon_state = "doshjacket" body_parts_covered = CHEST|GROIN|ARMS icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/maidapron name = "Apron" @@ -96,7 +96,7 @@ icon_state = "maidapron" body_parts_covered = CHEST|GROIN icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/clownpiece name = "small fairy wings" @@ -104,14 +104,14 @@ icon_state = "clownpiece" body_parts_covered = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/clownpiece/flying name = "small fairy wings" desc = "Some small and translucid insect-like wings. Looks like these are the real deal!" icon_state = "clownpiece-fly" icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' /obj/item/clothing/suit/raincoat name = "Raincoat" @@ -119,6 +119,6 @@ icon_state = "raincoat" body_parts_covered =CHEST|GROIN|LEGS|ARMS|HANDS icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/suit.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/suit.dmi' diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 4d037d652b..8883919e38 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -11,10 +11,11 @@ var/sensor_mode = NO_SENSORS var/can_adjust = TRUE var/adjusted = NORMAL_STYLE + var/suit_style = NORMAL_SUIT_STYLE var/alt_covers_chest = FALSE // for adjusted/rolled-down jumpsuits, FALSE = exposes chest and arms, TRUE = exposes arms only var/obj/item/clothing/accessory/attached_accessory var/mutable_appearance/accessory_overlay - var/mutantrace_variation = NO_MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. + mutantrace_variation = MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to. /obj/item/clothing/under/worn_overlays(isinhands = FALSE) . = list() @@ -49,6 +50,7 @@ //make the sensor mode favor higher levels, except coords. sensor_mode = pick(SENSOR_OFF, SENSOR_LIVING, SENSOR_LIVING, SENSOR_VITALS, SENSOR_VITALS, SENSOR_VITALS, SENSOR_COORDS, SENSOR_COORDS) adjusted = NORMAL_STYLE + suit_style = NORMAL_SUIT_STYLE ..() /obj/item/clothing/under/equipped(mob/user, slot) @@ -62,7 +64,7 @@ if(mutantrace_variation && ishuman(user)) var/mob/living/carbon/human/H = user if(DIGITIGRADE in H.dna.species.species_traits) - adjusted = DIGITIGRADE_STYLE + suit_style = DIGITIGRADE_SUIT_STYLE H.update_inv_w_uniform() if(attached_accessory && slot != SLOT_HANDS && ishuman(user)) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 0411a67846..2288c98b34 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -75,6 +75,7 @@ item_color = "blueclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/rank/greenclown name = "green clown suit" @@ -84,6 +85,7 @@ item_color = "greenclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/rank/yellowclown name = "yellow clown suit" @@ -93,6 +95,7 @@ item_color = "yellowclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/rank/purpleclown name = "purple clown suit" @@ -102,7 +105,8 @@ item_color = "purpleclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE - + mutantrace_variation = NO_MUTANTRACE_VARIATION + /obj/item/clothing/under/rank/orangeclown name = "orange clown suit" desc = "'ORANGE HONK!'" @@ -111,7 +115,8 @@ item_color = "orangeclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE - + mutantrace_variation = NO_MUTANTRACE_VARIATION + /obj/item/clothing/under/rank/rainbowclown name = "rainbow clown suit" desc = "'R A I N B O W HONK!'" @@ -120,6 +125,7 @@ item_color = "rainbowclown" fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/rank/clown/Initialize() . = ..() diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index ce17f3741e..c3e0cf2b85 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -709,6 +709,7 @@ body_parts_covered = CHEST|GROIN|ARMS fitted = FEMALE_UNIFORM_TOP can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/drfreeze name = "doctor freeze's jumpsuit" @@ -717,6 +718,7 @@ item_state = "drfreeze" item_color = "drfreeze" can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/lobster name = "foam lobster suit" @@ -726,6 +728,7 @@ item_color = "lobster" fitted = NO_FEMALE_UNIFORM can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/gondola name = "gondola hide suit" diff --git a/code/modules/clothing/under/vg_under.dm b/code/modules/clothing/under/vg_under.dm index f9b521cade..64bf75d5ac 100644 --- a/code/modules/clothing/under/vg_under.dm +++ b/code/modules/clothing/under/vg_under.dm @@ -5,7 +5,7 @@ item_color = "stripper_p" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/stripper_green @@ -15,7 +15,7 @@ item_color = "stripper_g" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' @@ -27,7 +27,7 @@ item_color = "bride_orange" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/wedding/bride_purple @@ -38,7 +38,7 @@ item_color = "bride_purple" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/wedding/bride_blue @@ -49,7 +49,7 @@ item_color = "bride_blue" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/wedding/bride_red @@ -60,7 +60,7 @@ item_color = "bride_red" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/wedding/bride_white @@ -71,7 +71,7 @@ item_color = "bride_white" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/mankini @@ -81,7 +81,7 @@ item_color = "mankini" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /* /obj/item/clothing/under/psysuit @@ -92,7 +92,7 @@ item_color = "psysuit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/officeruniform @@ -103,7 +103,7 @@ item_color = "officeruniform" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/soldieruniform @@ -114,7 +114,7 @@ item_color = "soldieruniform" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' */ /obj/item/clothing/under/squatter_outfit @@ -125,7 +125,7 @@ item_color = "squatteroutfit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/russobluecamooutfit @@ -136,7 +136,7 @@ item_color = "russobluecamo" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/stilsuit @@ -147,7 +147,7 @@ item_color = "stilsuit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/aviatoruniform @@ -158,7 +158,7 @@ item_color = "aviator_uniform" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/bikersuit @@ -168,7 +168,7 @@ item_color = "biker" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/jacketsuit @@ -179,7 +179,7 @@ item_color = "jacket" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' obj/item/clothing/under/mega @@ -190,7 +190,7 @@ obj/item/clothing/under/mega item_color = "mega" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/proto @@ -201,7 +201,7 @@ obj/item/clothing/under/mega item_color = "proto" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/megax @@ -212,7 +212,7 @@ obj/item/clothing/under/mega item_color = "megax" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/joe @@ -223,7 +223,7 @@ obj/item/clothing/under/mega item_color = "joe" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/roll @@ -234,7 +234,7 @@ obj/item/clothing/under/mega item_color = "roll" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/gokugidown @@ -245,7 +245,7 @@ obj/item/clothing/under/mega item_color = "gokugidown" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/gokugi @@ -256,7 +256,7 @@ obj/item/clothing/under/mega item_color = "gokugi" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/doomguy @@ -267,7 +267,7 @@ obj/item/clothing/under/mega item_color = "doom" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/vault13 @@ -278,7 +278,7 @@ obj/item/clothing/under/mega item_color = "v13-jumpsuit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/vault @@ -289,7 +289,7 @@ obj/item/clothing/under/mega item_color = "v-jumpsuit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/clownpiece @@ -300,7 +300,7 @@ obj/item/clothing/under/mega item_color = "clownpiece" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/cia @@ -311,7 +311,7 @@ obj/item/clothing/under/mega item_color = "cia" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/greaser @@ -321,7 +321,7 @@ obj/item/clothing/under/mega item_state = "greaser_default" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/greaser/New() @@ -350,7 +350,7 @@ obj/item/clothing/under/mega item_color = "shizunewinter" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' @@ -362,7 +362,7 @@ obj/item/clothing/under/mega item_color = "shizunenormal" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/keyholesweater @@ -373,7 +373,7 @@ obj/item/clothing/under/mega item_color = "keyholesweater" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/casualhoodie @@ -384,7 +384,7 @@ obj/item/clothing/under/mega item_color = "hoodiejeans" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' @@ -404,7 +404,7 @@ obj/item/clothing/under/mega can_adjust = 0 has_sensor = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' /obj/item/clothing/under/neorussian @@ -415,7 +415,7 @@ obj/item/clothing/under/mega item_color = "nr_uniform" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' */ /obj/item/clothing/under/rottensuit @@ -426,4 +426,4 @@ obj/item/clothing/under/mega item_color = "rottensuit" can_adjust = 0 icon = 'modular_citadel/icons/obj/clothing/vg_clothes.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index d1450cad15..1f68431771 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -628,8 +628,12 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(!(DIGITIGRADE in species_traits)) //Someone cut off a digitigrade leg and tacked it on species_traits += DIGITIGRADE var/should_be_squished = FALSE - if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) || (H.wear_suit.body_parts_covered & LEGS)) || (H.w_uniform && (H.w_uniform.body_parts_covered & LEGS))) - should_be_squished = TRUE + if(H.wear_suit) + if((H.wear_suit.flags_inv & HIDEJUMPSUIT) || ((H.wear_suit.body_parts_covered & LEGS) && (H.wear_suit.body_parts_covered & FEET))) + should_be_squished = TRUE + if(H.w_uniform && !H.wear_suit) + if(H.w_uniform.mutantrace_variation == NO_MUTANTRACE_VARIATION) + should_be_squished = TRUE if(O.use_digitigrade == FULL_DIGITIGRADE && should_be_squished) O.use_digitigrade = SQUISHED_DIGITIGRADE update_needed = TRUE diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 53c45d199f..cf29b3541f 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -1,687 +1,693 @@ - /////////////////////// - //UPDATE_ICONS SYSTEM// - /////////////////////// -/* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_; -This system allows you to update individual mob-overlays, without regenerating them all each time. -When we generate overlays we generate the standing version and then rotate the mob as necessary.. - -As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. //22 and counting, good job guys - var/overlays_standing[20] //For the standing stance - -Most of the time we only wish to update one overlay: - e.g. - we dropped the fireaxe out of our left hand and need to remove its icon from our mob - e.g.2 - our hair colour has changed, so we need to update our hair icons on our mob -In these cases, instead of updating every overlay using the old behaviour (regenerate_icons), we instead call -the appropriate update_X proc. - e.g. - update_l_hand() - e.g.2 - update_hair() - -Note: Recent changes by aranclanos+carn: - update_icons() no longer needs to be called. - the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. - IN ALL OTHER CASES it's better to just call the specific update_X procs. - -Note: The defines for layer numbers is now kept exclusvely in __DEFINES/misc.dm instead of being defined there, - then redefined and undefiend everywhere else. If you need to change the layering of sprites (or add a new layer) - that's where you should start. - -All of this means that this code is more maintainable, faster and still fairly easy to use. - -There are several things that need to be remembered: -> Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src), rather than using the helper procs) - You will need to call the relevant update_inv_* proc - - All of these are named after the variable they update from. They are defined at the mob/ level like - update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a - slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. - - -> There are also these special cases: - update_damage_overlays() //handles damage overlays for brute/burn damage - update_body() //Handles updating your mob's body layer and mutant bodyparts - as well as sprite-accessories that didn't really fit elsewhere (underwear, undershirts, socks, lips, eyes) - //NOTE: update_mutantrace() is now merged into this! - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - eyes were merged into update_body()) - - -*/ - -//HAIR OVERLAY -/mob/living/carbon/human/update_hair() - dna.species.handle_hair(src) - -//used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. -/mob/living/carbon/human/proc/update_mutant_bodyparts() - dna.species.handle_mutant_bodyparts(src) - - -/mob/living/carbon/human/update_body() - remove_overlay(BODY_LAYER) - dna.species.handle_body(src) - ..() - -/mob/living/carbon/human/update_fire() - ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") - - -/* --------------------------------------- */ -//For legacy support. -/mob/living/carbon/human/regenerate_icons() - - if(!..()) - icon_render_key = null //invalidate bodyparts cache - update_body() - update_hair() - update_inv_w_uniform() - update_inv_wear_id() - update_inv_gloves() - update_inv_glasses() - update_inv_ears() - update_inv_shoes() - update_inv_s_store() - update_inv_wear_mask() - update_inv_head() - update_inv_belt() - update_inv_back() - update_inv_wear_suit() - update_inv_pockets() - update_inv_neck() - update_transform() - //mutations - update_mutations_overlay() - //damage overlays - update_damage_overlays() - -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform() - remove_overlay(UNIFORM_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] - inv.update_icon() - - if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - U.screen_loc = ui_iclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += w_uniform - update_observer_view(w_uniform,1) - - if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) - return - - - var/t_color = U.item_color - if(!t_color) - t_color = U.icon_state - if(U.adjusted == ALT_STYLE) - t_color = "[t_color]_d" - else if(U.adjusted == DIGITIGRADE_STYLE) - t_color = "[t_color]_l" - - var/mutable_appearance/uniform_overlay - - if(dna && dna.species.sexes) - var/G = (gender == FEMALE) ? "f" : "m" - if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi'), isinhands = FALSE, femaleuniform = U.fitted) - - if(!uniform_overlay) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi'), isinhands = FALSE) - - - if(OFFSET_UNIFORM in dna.species.offset_features) - uniform_overlay.pixel_x += dna.species.offset_features[OFFSET_UNIFORM][1] - uniform_overlay.pixel_y += dna.species.offset_features[OFFSET_UNIFORM][2] - overlays_standing[UNIFORM_LAYER] = uniform_overlay - - apply_overlay(UNIFORM_LAYER) - update_mutant_bodyparts() - - -/mob/living/carbon/human/update_inv_wear_id() - remove_overlay(ID_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] - inv.update_icon() - - var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] - - if(wear_id) - wear_id.screen_loc = ui_id - if(client && hud_used && hud_used.hud_shown) - client.screen += wear_id - update_observer_view(wear_id) - - //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = ((wear_id.icon_override) ? wear_id.icon_override : 'icons/mob/mob.dmi')) - if(OFFSET_ID in dna.species.offset_features) - id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] - id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] - overlays_standing[ID_LAYER] = id_overlay - apply_overlay(ID_LAYER) - - -/mob/living/carbon/human/update_inv_gloves() - remove_overlay(GLOVES_LAYER) - - if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] - inv.update_icon() - - if(!gloves && bloody_hands) - var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) - if(get_num_arms() < 2) - if(has_left_hand()) - bloody_overlay.icon_state = "bloodyhands_left" - else if(has_right_hand()) - bloody_overlay.icon_state = "bloodyhands_right" - - overlays_standing[GLOVES_LAYER] = bloody_overlay - - var/mutable_appearance/gloves_overlay = overlays_standing[GLOVES_LAYER] - if(gloves) - gloves.screen_loc = ui_gloves - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += gloves - update_observer_view(gloves,1) - var/t_state = gloves.item_state - if(!t_state) - t_state = gloves.icon_state - overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = ((gloves.icon_override) ? gloves.icon_override : 'icons/mob/hands.dmi')) - gloves_overlay = overlays_standing[GLOVES_LAYER] - if(OFFSET_GLOVES in dna.species.offset_features) - gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] - gloves_overlay.pixel_y += dna.species.offset_features[OFFSET_GLOVES][2] - overlays_standing[GLOVES_LAYER] = gloves_overlay - apply_overlay(GLOVES_LAYER) - - -/mob/living/carbon/human/update_inv_glasses() - remove_overlay(GLASSES_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] - inv.update_icon() - - if(glasses) - glasses.screen_loc = ui_glasses //...draw the item in the inventory screen - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open ... - client.screen += glasses //Either way, add the item to the HUD - update_observer_view(glasses,1) - if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = ((glasses.icon_override) ? glasses.icon_override : 'icons/mob/eyes.dmi')) - var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] - if(glasses_overlay) - if(OFFSET_GLASSES in dna.species.offset_features) - glasses_overlay.pixel_x += dna.species.offset_features[OFFSET_GLASSES][1] - glasses_overlay.pixel_y += dna.species.offset_features[OFFSET_GLASSES][2] - overlays_standing[GLASSES_LAYER] = glasses_overlay - apply_overlay(GLASSES_LAYER) - - -/mob/living/carbon/human/update_inv_ears() - remove_overlay(EARS_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] - inv.update_icon() - - if(ears) - ears.screen_loc = ui_ears //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += ears //add it to the client's screen - update_observer_view(ears,1) - - overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = ((ears.icon_override) ? ears.icon_override : 'icons/mob/ears.dmi')) - var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] - if(OFFSET_EARS in dna.species.offset_features) - ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] - ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] - overlays_standing[EARS_LAYER] = ears_overlay - apply_overlay(EARS_LAYER) - - -/mob/living/carbon/human/update_inv_shoes() - remove_overlay(SHOES_LAYER) - - if(get_num_legs() <2) - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] - inv.update_icon() - - if(shoes) - var/obj/item/clothing/shoes/S = shoes - shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += shoes //add it to client's screen - update_observer_view(shoes,1) - if(S.adjusted == DIGITIGRADE_STYLE) - S.icon_override = 'modular_citadel/icons/mob/digishoes.dmi' - else if(S.adjusted == NORMAL_STYLE) - S.icon_override = null - - overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.icon_override) ? shoes.icon_override : 'icons/mob/feet.dmi')) - var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] - if(OFFSET_SHOES in dna.species.offset_features) - shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] - shoes_overlay.pixel_y += dna.species.offset_features[OFFSET_SHOES][2] - overlays_standing[SHOES_LAYER] = shoes_overlay - apply_overlay(SHOES_LAYER) - -/mob/living/carbon/human/update_inv_s_store() - remove_overlay(SUIT_STORE_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] - inv.update_icon() - - if(s_store) - s_store.screen_loc = ui_sstore1 - if(client && hud_used && hud_used.hud_shown) - client.screen += s_store - update_observer_view(s_store) - var/t_state = s_store.item_state - if(!t_state) - t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.icon_override) ? s_store.icon_override : 'icons/mob/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) - var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_LAYER] - if(OFFSET_S_STORE in dna.species.offset_features) - s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] - s_store_overlay.pixel_y += dna.species.offset_features[OFFSET_S_STORE][2] - overlays_standing[SUIT_STORE_LAYER] = s_store_overlay - apply_overlay(SUIT_STORE_LAYER) - - -/mob/living/carbon/human/update_inv_head() - ..() - update_mutant_bodyparts() - var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] - if(head_overlay) - remove_overlay(HEAD_LAYER) - if(OFFSET_HEAD in dna.species.offset_features) - head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1] - head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2] - overlays_standing[HEAD_LAYER] = head_overlay - apply_overlay(HEAD_LAYER) - -/mob/living/carbon/human/update_inv_belt() - remove_overlay(BELT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] - inv.update_icon() - - if(belt) - belt.screen_loc = ui_belt - if(client && hud_used && hud_used.hud_shown) - client.screen += belt - update_observer_view(belt) - - var/t_state = belt.item_state - if(!t_state) - t_state = belt.icon_state - - overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = ((belt.icon_override) ? belt.icon_override : 'icons/mob/belt.dmi')) - var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] - if(OFFSET_BELT in dna.species.offset_features) - belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] - belt_overlay.pixel_y += dna.species.offset_features[OFFSET_BELT][2] - overlays_standing[BELT_LAYER] = belt_overlay - apply_overlay(BELT_LAYER) - - - -/mob/living/carbon/human/update_inv_wear_suit() - remove_overlay(SUIT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] - inv.update_icon() - - if(istype(wear_suit, /obj/item/clothing/suit)) - wear_suit.screen_loc = ui_oclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += wear_suit - update_observer_view(wear_suit,1) - - overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = ((wear_suit.icon_override) ? wear_suit.icon_override : 'icons/mob/suit.dmi')) - var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] - if(OFFSET_SUIT in dna.species.offset_features) - suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] - suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] - overlays_standing[SUIT_LAYER] = suit_overlay - update_hair() - update_mutant_bodyparts() - - apply_overlay(SUIT_LAYER) - - -/mob/living/carbon/human/update_inv_pockets() - if(client && hud_used) - var/obj/screen/inventory/inv - - inv = hud_used.inv_slots[SLOT_L_STORE] - inv.update_icon() - - inv = hud_used.inv_slots[SLOT_R_STORE] - inv.update_icon() - - if(l_store) - l_store.screen_loc = ui_storage1 - if(hud_used.hud_shown) - client.screen += l_store - update_observer_view(l_store) - - if(r_store) - r_store.screen_loc = ui_storage2 - if(hud_used.hud_shown) - client.screen += r_store - update_observer_view(r_store) - - -/mob/living/carbon/human/update_inv_wear_mask() - ..() - var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER] - if(mask_overlay) - remove_overlay(FACEMASK_LAYER) - if(OFFSET_FACEMASK in dna.species.offset_features) - mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] - mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] - overlays_standing[FACEMASK_LAYER] = mask_overlay - apply_overlay(FACEMASK_LAYER) - update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout - -/mob/living/carbon/human/update_inv_back() - ..() - var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] - if(back_overlay) - remove_overlay(BACK_LAYER) - if(OFFSET_BACK in dna.species.offset_features) - back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] - back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] - overlays_standing[BACK_LAYER] = back_overlay - apply_overlay(BACK_LAYER) - -/mob/living/carbon/human/update_inv_legcuffed() - remove_overlay(LEGCUFF_LAYER) - clear_alert("legcuffed") - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) - apply_overlay(LEGCUFF_LAYER) - throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) - -/proc/wear_female_version(t_color, icon, layer, type) - var/index = t_color - var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] - if(!female_clothing_icon) //Create standing/laying icons if they don't exist - generate_female_clothing(index,t_color,icon,type) - return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) - -/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) - var/list/out = new - for(var/i in 1 to TOTAL_LAYERS) - if(overlays_standing[i]) - if(i in unwantedLayers) - continue - out += overlays_standing[i] - return out - - -//human HUD updates for items in our inventory - -//update whether our head item appears on our hud. -/mob/living/carbon/human/update_hud_head(obj/item/I) - I.screen_loc = ui_head - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our mask item appears on our hud. -/mob/living/carbon/human/update_hud_wear_mask(obj/item/I) - I.screen_loc = ui_mask - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our neck item appears on our hud. -/mob/living/carbon/human/update_hud_neck(obj/item/I) - I.screen_loc = ui_neck - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our back item appears on our hud. -/mob/living/carbon/human/update_hud_back(obj/item/I) - I.screen_loc = ui_back - if(client && hud_used && hud_used.hud_shown) - client.screen += I - update_observer_view(I) - - - - -/* -Does everything in relation to building the /mutable_appearance used in the mob's overlays list -covers: - inhands and any other form of worn item - centering large appearances - layering appearances on custom layers - building appearances from custom icon files - -By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons()) - -state: A string to use as the state, this is FAR too complex to solve in this proc thanks to shitty old code -so it's specified as an argument instead. - -default_layer: The layer to draw this on if no other layer is specified - -default_icon_file: The icon file to draw states from if no other icon file is specified - -isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used, -in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var - -femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we -generate/load female uniform sprites matching all previously decided variables - - -*/ -/obj/item/proc/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM) - - //Find a valid icon file from variables+arguments - var/file2use - if(!isinhands && alternate_worn_icon) - file2use = alternate_worn_icon - if(!file2use) - file2use = default_icon_file - - //Find a valid layer from variables+arguments - var/layer2use - if(alternate_worn_layer) - layer2use = alternate_worn_layer - if(!layer2use) - layer2use = default_layer - - var/mutable_appearance/standing - if(femaleuniform) - standing = wear_female_version(state,file2use,layer2use,femaleuniform) - if(!standing) - standing = mutable_appearance(file2use, state, -layer2use) - - //Get the overlays for this item when it's being worn - //eg: ammo counters, primed grenade flashes, etc. - var/list/worn_overlays = worn_overlays(isinhands, file2use) - if(worn_overlays && worn_overlays.len) - standing.overlays.Add(worn_overlays) - - standing = center_image(standing, isinhands ? inhand_x_dimension : worn_x_dimension, isinhands ? inhand_y_dimension : worn_y_dimension) - - //Handle held offsets - var/mob/M = loc - if(istype(M)) - var/list/L = get_held_offsets() - if(L) - standing.pixel_x += L["x"] //+= because of center()ing - standing.pixel_y += L["y"] - - standing.alpha = alpha - standing.color = color - - return standing - - -/obj/item/proc/get_held_offsets() - var/list/L - if(ismob(loc)) - var/mob/M = loc - L = M.get_item_offsets_for_index(M.get_held_index_of_item(src)) - return L - - -//Can't think of a better way to do this, sadly -/mob/proc/get_item_offsets_for_index(i) - switch(i) - if(3) //odd = left hands - return list("x" = 0, "y" = 16) - if(4) //even = right hands - return list("x" = 0, "y" = 16) - else //No offsets or Unwritten number of hands - return list("x" = 0, "y" = 0) - - - -//produces a key based on the human's limbs -/mob/living/carbon/human/generate_icon_render_key() - . = "[dna.species.limbs_id]" - - if(dna.check_mutation(HULK)) - . += "-coloured-hulk" - else if(dna.species.use_skintones) - . += "-coloured-[skin_tone]" - else if(dna.species.fixed_mut_color) - . += "-coloured-[dna.species.fixed_mut_color]" - else if(dna.features["mcolor"]) - . += "-coloured-[dna.features["mcolor"]]" - else - . += "-not_coloured" - - . += "-[gender]" - - - var/is_taur = FALSE - var/mob/living/carbon/human/H = src - if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) - is_taur = TRUE - - - for(var/X in bodyparts) - var/obj/item/bodypart/BP = X - - if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) - if(is_taur) - continue - - - . += "-[BP.body_zone]" - if(BP.status == BODYPART_ORGANIC) - . += "-organic" - else - . += "-robotic" - if(BP.use_digitigrade) - . += "-digitigrade[BP.use_digitigrade]" - if(BP.dmg_overlay_type) - . += "-[BP.dmg_overlay_type]" - - if(has_trait(TRAIT_HUSK)) - . += "-husk" - -/mob/living/carbon/human/load_limb_from_cache() - ..() - update_hair() - - - -/mob/living/carbon/human/proc/update_observer_view(obj/item/I, inventory) - if(observers && observers.len) - for(var/M in observers) - var/mob/dead/observe = M - if(observe.client && observe.client.eye == src) - if(observe.hud_used) - if(inventory && !observe.hud_used.inventory_shown) - continue - observe.client.screen += I - else - observers -= observe - if(!observers.len) - observers = null - break - -// Only renders the head of the human -/mob/living/carbon/human/proc/update_body_parts_head_only() - if (!dna) - return - - if (!dna.species) - return - - var/obj/item/bodypart/HD = get_bodypart("head") - - if (!istype(HD)) - return - - HD.update_limb() - - add_overlay(HD.get_limb_icon()) - update_damage_overlays() - - if(HD && !(has_trait(TRAIT_HUSK))) - // lipstick - if(lip_style && (LIPS in dna.species.species_traits)) - var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER) - lip_overlay.color = lip_color - if(OFFSET_FACE in dna.species.offset_features) - lip_overlay.pixel_x += dna.species.offset_features[OFFSET_FACE][1] - lip_overlay.pixel_y += dna.species.offset_features[OFFSET_FACE][2] - add_overlay(lip_overlay) - - // eyes - if(!(NOEYES in dna.species.species_traits)) - var/has_eyes = getorganslot(ORGAN_SLOT_EYES) - var/mutable_appearance/eye_overlay - if(!has_eyes) - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) - else - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) - if((EYECOLOR in dna.species.species_traits) && has_eyes) - eye_overlay.color = "#" + eye_color - if(OFFSET_FACE in dna.species.offset_features) - eye_overlay.pixel_x += dna.species.offset_features[OFFSET_FACE][1] - eye_overlay.pixel_y += dna.species.offset_features[OFFSET_FACE][2] - add_overlay(eye_overlay) - - dna.species.handle_hair(src) - - update_inv_head() - update_inv_wear_mask() + /////////////////////// + //UPDATE_ICONS SYSTEM// + /////////////////////// +/* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_; +This system allows you to update individual mob-overlays, without regenerating them all each time. +When we generate overlays we generate the standing version and then rotate the mob as necessary.. + +As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. //22 and counting, good job guys + var/overlays_standing[20] //For the standing stance + +Most of the time we only wish to update one overlay: + e.g. - we dropped the fireaxe out of our left hand and need to remove its icon from our mob + e.g.2 - our hair colour has changed, so we need to update our hair icons on our mob +In these cases, instead of updating every overlay using the old behaviour (regenerate_icons), we instead call +the appropriate update_X proc. + e.g. - update_l_hand() + e.g.2 - update_hair() + +Note: Recent changes by aranclanos+carn: + update_icons() no longer needs to be called. + the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. + IN ALL OTHER CASES it's better to just call the specific update_X procs. + +Note: The defines for layer numbers is now kept exclusvely in __DEFINES/misc.dm instead of being defined there, + then redefined and undefiend everywhere else. If you need to change the layering of sprites (or add a new layer) + that's where you should start. + +All of this means that this code is more maintainable, faster and still fairly easy to use. + +There are several things that need to be remembered: +> Whenever we do something that should cause an overlay to update (which doesn't use standard procs + ( i.e. you do something like l_hand = /obj/item/something new(src), rather than using the helper procs) + You will need to call the relevant update_inv_* proc + + All of these are named after the variable they update from. They are defined at the mob/ level like + update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a + slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. + + +> There are also these special cases: + update_damage_overlays() //handles damage overlays for brute/burn damage + update_body() //Handles updating your mob's body layer and mutant bodyparts + as well as sprite-accessories that didn't really fit elsewhere (underwear, undershirts, socks, lips, eyes) + //NOTE: update_mutantrace() is now merged into this! + update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and + eyes were merged into update_body()) + + +*/ + +//HAIR OVERLAY +/mob/living/carbon/human/update_hair() + dna.species.handle_hair(src) + +//used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. +/mob/living/carbon/human/proc/update_mutant_bodyparts() + dna.species.handle_mutant_bodyparts(src) + + +/mob/living/carbon/human/update_body() + remove_overlay(BODY_LAYER) + dna.species.handle_body(src) + ..() + +/mob/living/carbon/human/update_fire() + ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") + + +/* --------------------------------------- */ +//For legacy support. +/mob/living/carbon/human/regenerate_icons() + + if(!..()) + icon_render_key = null //invalidate bodyparts cache + update_body() + update_hair() + update_inv_w_uniform() + update_inv_wear_id() + update_inv_gloves() + update_inv_glasses() + update_inv_ears() + update_inv_shoes() + update_inv_s_store() + update_inv_wear_mask() + update_inv_head() + update_inv_belt() + update_inv_back() + update_inv_wear_suit() + update_inv_pockets() + update_inv_neck() + update_transform() + //mutations + update_mutations_overlay() + //damage overlays + update_damage_overlays() + +/* --------------------------------------- */ +//vvvvvv UPDATE_INV PROCS vvvvvv + +/mob/living/carbon/human/update_inv_w_uniform() + remove_overlay(UNIFORM_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] + inv.update_icon() + + if(istype(w_uniform, /obj/item/clothing/under)) + var/obj/item/clothing/under/U = w_uniform + U.screen_loc = ui_iclothing + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += w_uniform + update_observer_view(w_uniform,1) + + if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) + return + + + var/t_color = U.item_color + if(!t_color) + t_color = U.icon_state + if(U.suit_style == NORMAL_SUIT_STYLE) + if(U.adjusted == ALT_STYLE) + t_color = "[t_color]_d" + + if(U.mutantrace_variation) + if(U.suit_style == DIGITIGRADE_SUIT_STYLE) + U.alternate_worn_icon = 'modular_citadel/icons/mob/uniform_digi.dmi' + if(U.adjusted == ALT_STYLE) + t_color = "[t_color]_d_l" + else if(U.adjusted == NORMAL_STYLE) + t_color = "[t_color]_l" + + var/mutable_appearance/uniform_overlay + + if(dna && dna.species.sexes) + var/G = (gender == FEMALE) ? "f" : "m" + if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = ((w_uniform.alternate_worn_icon) ? w_uniform.alternate_worn_icon : 'icons/mob/uniform.dmi'), isinhands = FALSE, femaleuniform = U.fitted) + + if(!uniform_overlay) + uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = ((w_uniform.alternate_worn_icon) ? w_uniform.alternate_worn_icon : 'icons/mob/uniform.dmi'), isinhands = FALSE) + + + if(OFFSET_UNIFORM in dna.species.offset_features) + uniform_overlay.pixel_x += dna.species.offset_features[OFFSET_UNIFORM][1] + uniform_overlay.pixel_y += dna.species.offset_features[OFFSET_UNIFORM][2] + overlays_standing[UNIFORM_LAYER] = uniform_overlay + + apply_overlay(UNIFORM_LAYER) + update_mutant_bodyparts() + + +/mob/living/carbon/human/update_inv_wear_id() + remove_overlay(ID_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] + inv.update_icon() + + var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] + + if(wear_id) + wear_id.screen_loc = ui_id + if(client && hud_used && hud_used.hud_shown) + client.screen += wear_id + update_observer_view(wear_id) + + //TODO: add an icon file for ID slot stuff, so it's less snowflakey + id_overlay = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = ((wear_id.alternate_worn_icon) ? wear_id.alternate_worn_icon : 'icons/mob/mob.dmi')) + if(OFFSET_ID in dna.species.offset_features) + id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] + id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] + overlays_standing[ID_LAYER] = id_overlay + apply_overlay(ID_LAYER) + + +/mob/living/carbon/human/update_inv_gloves() + remove_overlay(GLOVES_LAYER) + + if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] + inv.update_icon() + + if(!gloves && bloody_hands) + var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER) + if(get_num_arms() < 2) + if(has_left_hand()) + bloody_overlay.icon_state = "bloodyhands_left" + else if(has_right_hand()) + bloody_overlay.icon_state = "bloodyhands_right" + + overlays_standing[GLOVES_LAYER] = bloody_overlay + + var/mutable_appearance/gloves_overlay = overlays_standing[GLOVES_LAYER] + if(gloves) + gloves.screen_loc = ui_gloves + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += gloves + update_observer_view(gloves,1) + var/t_state = gloves.item_state + if(!t_state) + t_state = gloves.icon_state + overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = ((gloves.alternate_worn_icon) ? gloves.alternate_worn_icon : 'icons/mob/hands.dmi')) + gloves_overlay = overlays_standing[GLOVES_LAYER] + if(OFFSET_GLOVES in dna.species.offset_features) + gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] + gloves_overlay.pixel_y += dna.species.offset_features[OFFSET_GLOVES][2] + overlays_standing[GLOVES_LAYER] = gloves_overlay + apply_overlay(GLOVES_LAYER) + + +/mob/living/carbon/human/update_inv_glasses() + remove_overlay(GLASSES_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] + inv.update_icon() + + if(glasses) + glasses.screen_loc = ui_glasses //...draw the item in the inventory screen + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open ... + client.screen += glasses //Either way, add the item to the HUD + update_observer_view(glasses,1) + if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) + overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = ((glasses.alternate_worn_icon) ? glasses.alternate_worn_icon : 'icons/mob/eyes.dmi')) + var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] + if(glasses_overlay) + if(OFFSET_GLASSES in dna.species.offset_features) + glasses_overlay.pixel_x += dna.species.offset_features[OFFSET_GLASSES][1] + glasses_overlay.pixel_y += dna.species.offset_features[OFFSET_GLASSES][2] + overlays_standing[GLASSES_LAYER] = glasses_overlay + apply_overlay(GLASSES_LAYER) + + +/mob/living/carbon/human/update_inv_ears() + remove_overlay(EARS_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] + inv.update_icon() + + if(ears) + ears.screen_loc = ui_ears //move the item to the appropriate screen loc + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += ears //add it to the client's screen + update_observer_view(ears,1) + + overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = ((ears.alternate_worn_icon) ? ears.alternate_worn_icon : 'icons/mob/ears.dmi')) + var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] + if(OFFSET_EARS in dna.species.offset_features) + ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] + ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] + overlays_standing[EARS_LAYER] = ears_overlay + apply_overlay(EARS_LAYER) + + +/mob/living/carbon/human/update_inv_shoes() + remove_overlay(SHOES_LAYER) + + if(get_num_legs() <2) + return + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] + inv.update_icon() + + if(shoes) + var/obj/item/clothing/shoes/S = shoes + shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) //if the inventory is open + client.screen += shoes //add it to client's screen + update_observer_view(shoes,1) + if(S.mutantrace_variation) + if(S.adjusted == ALT_STYLE) + S.alternate_worn_icon = 'modular_citadel/icons/mob/digishoes.dmi' + + overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi')) + var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] + if(OFFSET_SHOES in dna.species.offset_features) + shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] + shoes_overlay.pixel_y += dna.species.offset_features[OFFSET_SHOES][2] + overlays_standing[SHOES_LAYER] = shoes_overlay + apply_overlay(SHOES_LAYER) + +/mob/living/carbon/human/update_inv_s_store() + remove_overlay(SUIT_STORE_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] + inv.update_icon() + + if(s_store) + s_store.screen_loc = ui_sstore1 + if(client && hud_used && hud_used.hud_shown) + client.screen += s_store + update_observer_view(s_store) + var/t_state = s_store.item_state + if(!t_state) + t_state = s_store.icon_state + overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.alternate_worn_icon) ? s_store.alternate_worn_icon : 'icons/mob/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) + var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_LAYER] + if(OFFSET_S_STORE in dna.species.offset_features) + s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] + s_store_overlay.pixel_y += dna.species.offset_features[OFFSET_S_STORE][2] + overlays_standing[SUIT_STORE_LAYER] = s_store_overlay + apply_overlay(SUIT_STORE_LAYER) + + +/mob/living/carbon/human/update_inv_head() + ..() + update_mutant_bodyparts() + var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] + if(head_overlay) + remove_overlay(HEAD_LAYER) + if(OFFSET_HEAD in dna.species.offset_features) + head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1] + head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2] + overlays_standing[HEAD_LAYER] = head_overlay + apply_overlay(HEAD_LAYER) + +/mob/living/carbon/human/update_inv_belt() + remove_overlay(BELT_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] + inv.update_icon() + + if(belt) + belt.screen_loc = ui_belt + if(client && hud_used && hud_used.hud_shown) + client.screen += belt + update_observer_view(belt) + + var/t_state = belt.item_state + if(!t_state) + t_state = belt.icon_state + + overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = ((belt.alternate_worn_icon) ? belt.alternate_worn_icon : 'icons/mob/belt.dmi')) + var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] + if(OFFSET_BELT in dna.species.offset_features) + belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] + belt_overlay.pixel_y += dna.species.offset_features[OFFSET_BELT][2] + overlays_standing[BELT_LAYER] = belt_overlay + apply_overlay(BELT_LAYER) + + + +/mob/living/carbon/human/update_inv_wear_suit() + remove_overlay(SUIT_LAYER) + + if(client && hud_used) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] + inv.update_icon() + + if(istype(wear_suit, /obj/item/clothing/suit)) + wear_suit.screen_loc = ui_oclothing + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += wear_suit + update_observer_view(wear_suit,1) + + overlays_standing[SUIT_LAYER] = wear_suit.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = ((wear_suit.alternate_worn_icon) ? wear_suit.alternate_worn_icon : 'icons/mob/suit.dmi')) + var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] + if(OFFSET_SUIT in dna.species.offset_features) + suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] + suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] + overlays_standing[SUIT_LAYER] = suit_overlay + update_hair() + update_mutant_bodyparts() + + apply_overlay(SUIT_LAYER) + + +/mob/living/carbon/human/update_inv_pockets() + if(client && hud_used) + var/obj/screen/inventory/inv + + inv = hud_used.inv_slots[SLOT_L_STORE] + inv.update_icon() + + inv = hud_used.inv_slots[SLOT_R_STORE] + inv.update_icon() + + if(l_store) + l_store.screen_loc = ui_storage1 + if(hud_used.hud_shown) + client.screen += l_store + update_observer_view(l_store) + + if(r_store) + r_store.screen_loc = ui_storage2 + if(hud_used.hud_shown) + client.screen += r_store + update_observer_view(r_store) + + +/mob/living/carbon/human/update_inv_wear_mask() + ..() + var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER] + if(mask_overlay) + remove_overlay(FACEMASK_LAYER) + if(OFFSET_FACEMASK in dna.species.offset_features) + mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] + mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] + overlays_standing[FACEMASK_LAYER] = mask_overlay + apply_overlay(FACEMASK_LAYER) + update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout + +/mob/living/carbon/human/update_inv_back() + ..() + var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] + if(back_overlay) + remove_overlay(BACK_LAYER) + if(OFFSET_BACK in dna.species.offset_features) + back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] + back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] + overlays_standing[BACK_LAYER] = back_overlay + apply_overlay(BACK_LAYER) + +/mob/living/carbon/human/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") + if(legcuffed) + overlays_standing[LEGCUFF_LAYER] = mutable_appearance('icons/mob/mob.dmi', "legcuff1", -LEGCUFF_LAYER) + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = src.legcuffed) + +/proc/wear_female_version(t_color, icon, layer, type) + var/index = t_color + var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] + if(!female_clothing_icon) //Create standing/laying icons if they don't exist + generate_female_clothing(index,t_color,icon,type) + return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) + +/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) + var/list/out = new + for(var/i in 1 to TOTAL_LAYERS) + if(overlays_standing[i]) + if(i in unwantedLayers) + continue + out += overlays_standing[i] + return out + + +//human HUD updates for items in our inventory + +//update whether our head item appears on our hud. +/mob/living/carbon/human/update_hud_head(obj/item/I) + I.screen_loc = ui_head + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += I + update_observer_view(I,1) + +//update whether our mask item appears on our hud. +/mob/living/carbon/human/update_hud_wear_mask(obj/item/I) + I.screen_loc = ui_mask + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += I + update_observer_view(I,1) + +//update whether our neck item appears on our hud. +/mob/living/carbon/human/update_hud_neck(obj/item/I) + I.screen_loc = ui_neck + if(client && hud_used && hud_used.hud_shown) + if(hud_used.inventory_shown) + client.screen += I + update_observer_view(I,1) + +//update whether our back item appears on our hud. +/mob/living/carbon/human/update_hud_back(obj/item/I) + I.screen_loc = ui_back + if(client && hud_used && hud_used.hud_shown) + client.screen += I + update_observer_view(I) + + + + +/* +Does everything in relation to building the /mutable_appearance used in the mob's overlays list +covers: + inhands and any other form of worn item + centering large appearances + layering appearances on custom layers + building appearances from custom icon files + +By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons()) + +state: A string to use as the state, this is FAR too complex to solve in this proc thanks to shitty old code +so it's specified as an argument instead. + +default_layer: The layer to draw this on if no other layer is specified + +default_icon_file: The icon file to draw states from if no other icon file is specified + +isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used, +in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var + +femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we +generate/load female uniform sprites matching all previously decided variables + + +*/ +/obj/item/proc/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM) + + //Find a valid icon file from variables+arguments + var/file2use + if(!isinhands && alternate_worn_icon) + file2use = alternate_worn_icon + if(!file2use) + file2use = default_icon_file + + //Find a valid layer from variables+arguments + var/layer2use + if(alternate_worn_layer) + layer2use = alternate_worn_layer + if(!layer2use) + layer2use = default_layer + + var/mutable_appearance/standing + if(femaleuniform) + standing = wear_female_version(state,file2use,layer2use,femaleuniform) + if(!standing) + standing = mutable_appearance(file2use, state, -layer2use) + + //Get the overlays for this item when it's being worn + //eg: ammo counters, primed grenade flashes, etc. + var/list/worn_overlays = worn_overlays(isinhands, file2use) + if(worn_overlays && worn_overlays.len) + standing.overlays.Add(worn_overlays) + + standing = center_image(standing, isinhands ? inhand_x_dimension : worn_x_dimension, isinhands ? inhand_y_dimension : worn_y_dimension) + + //Handle held offsets + var/mob/M = loc + if(istype(M)) + var/list/L = get_held_offsets() + if(L) + standing.pixel_x += L["x"] //+= because of center()ing + standing.pixel_y += L["y"] + + standing.alpha = alpha + standing.color = color + + return standing + + +/obj/item/proc/get_held_offsets() + var/list/L + if(ismob(loc)) + var/mob/M = loc + L = M.get_item_offsets_for_index(M.get_held_index_of_item(src)) + return L + + +//Can't think of a better way to do this, sadly +/mob/proc/get_item_offsets_for_index(i) + switch(i) + if(3) //odd = left hands + return list("x" = 0, "y" = 16) + if(4) //even = right hands + return list("x" = 0, "y" = 16) + else //No offsets or Unwritten number of hands + return list("x" = 0, "y" = 0) + + + +//produces a key based on the human's limbs +/mob/living/carbon/human/generate_icon_render_key() + . = "[dna.species.limbs_id]" + + if(dna.check_mutation(HULK)) + . += "-coloured-hulk" + else if(dna.species.use_skintones) + . += "-coloured-[skin_tone]" + else if(dna.species.fixed_mut_color) + . += "-coloured-[dna.species.fixed_mut_color]" + else if(dna.features["mcolor"]) + . += "-coloured-[dna.features["mcolor"]]" + else + . += "-not_coloured" + + . += "-[gender]" + + + var/is_taur = FALSE + var/mob/living/carbon/human/H = src + if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) + is_taur = TRUE + + + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + + if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) + if(is_taur) + continue + + + . += "-[BP.body_zone]" + if(BP.status == BODYPART_ORGANIC) + . += "-organic" + else + . += "-robotic" + if(BP.use_digitigrade) + . += "-digitigrade[BP.use_digitigrade]" + if(BP.dmg_overlay_type) + . += "-[BP.dmg_overlay_type]" + + if(has_trait(TRAIT_HUSK)) + . += "-husk" + +/mob/living/carbon/human/load_limb_from_cache() + ..() + update_hair() + + + +/mob/living/carbon/human/proc/update_observer_view(obj/item/I, inventory) + if(observers && observers.len) + for(var/M in observers) + var/mob/dead/observe = M + if(observe.client && observe.client.eye == src) + if(observe.hud_used) + if(inventory && !observe.hud_used.inventory_shown) + continue + observe.client.screen += I + else + observers -= observe + if(!observers.len) + observers = null + break + +// Only renders the head of the human +/mob/living/carbon/human/proc/update_body_parts_head_only() + if (!dna) + return + + if (!dna.species) + return + + var/obj/item/bodypart/HD = get_bodypart("head") + + if (!istype(HD)) + return + + HD.update_limb() + + add_overlay(HD.get_limb_icon()) + update_damage_overlays() + + if(HD && !(has_trait(TRAIT_HUSK))) + // lipstick + if(lip_style && (LIPS in dna.species.species_traits)) + var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER) + lip_overlay.color = lip_color + if(OFFSET_FACE in dna.species.offset_features) + lip_overlay.pixel_x += dna.species.offset_features[OFFSET_FACE][1] + lip_overlay.pixel_y += dna.species.offset_features[OFFSET_FACE][2] + add_overlay(lip_overlay) + + // eyes + if(!(NOEYES in dna.species.species_traits)) + var/has_eyes = getorganslot(ORGAN_SLOT_EYES) + var/mutable_appearance/eye_overlay + if(!has_eyes) + eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) + else + eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) + if((EYECOLOR in dna.species.species_traits) && has_eyes) + eye_overlay.color = "#" + eye_color + if(OFFSET_FACE in dna.species.offset_features) + eye_overlay.pixel_x += dna.species.offset_features[OFFSET_FACE][1] + eye_overlay.pixel_y += dna.species.offset_features[OFFSET_FACE][2] + add_overlay(eye_overlay) + + dna.species.handle_hair(src) + + update_inv_head() + update_inv_wear_mask() diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index d5ee3466d4..7d337c67c2 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -294,14 +294,14 @@ var/obj/item/clothing/under/U = H.w_uniform if(U.mutantrace_variation) if(swap_back) - U.adjusted = NORMAL_STYLE + U.suit_style = NORMAL_SUIT_STYLE else - U.adjusted = DIGITIGRADE_STYLE + U.suit_style = DIGITIGRADE_SUIT_STYLE H.update_inv_w_uniform() if(H.shoes) var/obj/item/clothing/shoes/S = H.shoes if(swap_back) S.adjusted = NORMAL_STYLE else - S.adjusted = DIGITIGRADE_STYLE + S.adjusted = ALT_STYLE H.update_inv_shoes() diff --git a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm index c6470ac19e..9d0757e26e 100644 --- a/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm +++ b/modular_citadel/code/game/objects/items/devices/radio/shockcollar.dm @@ -2,7 +2,7 @@ name = "shock collar" desc = "A reinforced metal collar. It seems to have some form of wiring near the front. Strange.." icon = 'modular_citadel/icons/obj/clothing/cit_neck.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/neck.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/neck.dmi' icon_state = "shockcollar" item_state = "shockcollar" body_parts_covered = NECK diff --git a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm b/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm index abf8793f79..c0f7a5d639 100644 --- a/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm +++ b/modular_citadel/code/modules/clothing/under/polychromic_clothes.dm @@ -27,6 +27,8 @@ secondary_color = "#FFFFFF" tertiary_color = "#808080" can_adjust = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION // because I'm too lazy to port these to digi-compatible and to prove a point from /tg/ whining - Pooj + suit_style = NORMAL_SUIT_STYLE /obj/item/clothing/under/polychromic/worn_overlays(isinhands, icon_file) //this is where the main magic happens. Also mandates that ALL polychromic stuff MUST USE alternate_worn_icon . = ..() @@ -63,7 +65,8 @@ item_state = "kilt" primary_color = "#FFFFFF" //RGB in hexcode secondary_color = "#F08080" - tertiary_color = "#808080" + hastertiary = FALSE // so it doesn't futz with digilegs + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/polychromic/skirt name = "polychromic skirt" @@ -74,6 +77,7 @@ primary_color = "#FFFFFF" //RGB in hexcode secondary_color = "#F08080" tertiary_color = "#808080" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/polychromic/shorts name = "polychromic shorts" @@ -84,6 +88,7 @@ primary_color = "#353535" //RGB in hexcode secondary_color = "#808080" tertiary_color = "#808080" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/polychromic/jumpsuit name = "polychromic tri-tone jumpsuit" @@ -116,6 +121,7 @@ primary_color = "#8CC6FF" //RGB in hexcode secondary_color = "#808080" tertiary_color = "#FF3535" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/polychromic/femtank name = "polychromic feminine tank top" @@ -126,6 +132,7 @@ hastertiary = FALSE primary_color = "#808080" //RGB in hexcode secondary_color = "#FF3535" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/polychromic/shortpants/pantsu name = "polychromic panties" @@ -136,6 +143,7 @@ hastertiary = FALSE primary_color = "#FFFFFF" //RGB in hexcode secondary_color = "#8CC6FF" + body_parts_covered = GROIN /obj/item/clothing/under/polychromic/bottomless name = "polychromic bottomless shirt" @@ -146,7 +154,7 @@ hastertiary = FALSE primary_color = "#808080" //RGB in hexcode secondary_color = "#FF3535" - body_parts_covered = CHEST //Because there's no bottom included + body_parts_covered = CHEST|ARMS //Because there's no bottom included /obj/item/clothing/under/polychromic/shimatank name = "polychromic tank top" @@ -156,4 +164,5 @@ item_state = "rainbow" primary_color = "#808080" //RGB in hexcode secondary_color = "#FFFFFF" - tertiary_color = "#8CC6FF" \ No newline at end of file + tertiary_color = "#8CC6FF" + body_parts_covered = CHEST|GROIN \ No newline at end of file diff --git a/modular_citadel/code/modules/clothing/under/trek_under.dm b/modular_citadel/code/modules/clothing/under/trek_under.dm index e058950638..00f84b7583 100644 --- a/modular_citadel/code/modules/clothing/under/trek_under.dm +++ b/modular_citadel/code/modules/clothing/under/trek_under.dm @@ -12,9 +12,10 @@ name = "Section 31 Uniform" desc = "Oooh... right." icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' - icon_override = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' item_state = "" can_adjust = FALSE //to prevent you from "wearing it casually" + mutantrace_variation = NO_MUTANTRACE_VARIATION //TOS /obj/item/clothing/under/rank/trek/command @@ -92,7 +93,7 @@ desc = "The overcoat worn by all officers of the 2380s." icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' icon_state = "trek_ds9_coat" - icon_override = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' item_state = "trek_ds9_coat" body_parts_covered = CHEST|GROIN|ARMS permeability_coefficient = 0.50 @@ -136,7 +137,7 @@ desc = "A uniform jacket from the United Federation. Starfleet still uses this uniform and there are variations of it. Set phasers to awesome." icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' - icon_override = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' icon_state = "fedcoat" item_state = "fedcoat" @@ -204,7 +205,7 @@ name = "Modern Federation Uniform Jacket" desc = "A modern uniform jacket from the United Federation. Their Starfleet had recently started using these uniforms. Wearing this makes you feel like a competant commander." icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' - icon_override = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' icon_state = "fedmodern" item_state = "fedmodern" body_parts_covered = CHEST|GROIN|ARMS @@ -238,7 +239,7 @@ desc = "An officer's cap that demands discipline from the one who wears it." icon = 'modular_citadel/icons/mob/clothing/trek_item_icon.dmi' icon_state = "fedcapofficer" - icon_override = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/clothing/trek_mob_icon.dmi' item_state = "fedcapofficer_mob" //Variants diff --git a/modular_citadel/code/modules/clothing/under/turtlenecks.dm b/modular_citadel/code/modules/clothing/under/turtlenecks.dm index bcd0fd46e2..f4e1ba8bd9 100644 --- a/modular_citadel/code/modules/clothing/under/turtlenecks.dm +++ b/modular_citadel/code/modules/clothing/under/turtlenecks.dm @@ -16,11 +16,12 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0, fire = 0, acid = 0) can_adjust = TRUE alt_covers_chest = TRUE + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/structure/closet/secure_closet/CMO/PopulateContents() //This is placed here because it's a very specific addition for a very specific niche ..() new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src) - + /obj/item/clothing/under/syndicate/cosmetic name = "tactitool turtleneck" desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-." @@ -28,11 +29,12 @@ item_state = "bl_suit" item_color = "tactifool" has_sensor = TRUE + mutantrace_variation = NO_MUTANTRACE_VARIATION armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) - + /obj/item/clothing/under/syndicate/tacticool has_sensor = TRUE - + // Sweaters are good enough for this category too. /obj/item/clothing/under/bb_sweater @@ -44,7 +46,8 @@ body_parts_covered = CHEST|ARMS can_adjust = 1 icon = 'modular_citadel/icons/obj/clothing/turtlenecks.dmi' - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/bb_sweater/black name = "black sweater" diff --git a/modular_citadel/code/modules/clothing/under/under.dm b/modular_citadel/code/modules/clothing/under/under.dm index 94c28fb1c3..1796df01be 100644 --- a/modular_citadel/code/modules/clothing/under/under.dm +++ b/modular_citadel/code/modules/clothing/under/under.dm @@ -10,18 +10,20 @@ desc = "A tactical security skirt for officers complete with Nanotrasen belt buckle." icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi' icon_state = "secskirt" - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' item_state = "r_suit" item_color = "secskirt" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/rank/head_of_security/skirt name = "head of security's skirt" desc = "A security skirt decorated for those few with the dedication to achieve the position of Head of Security." icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi' icon_state = "hosskirt" - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' item_state = "gy_suit" item_color = "hosskirt" + body_parts_covered = CHEST|GROIN|ARMS /obj/item/clothing/under/corporateuniform name = "corporate uniform" @@ -31,15 +33,17 @@ alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' item_state = "r_suit" can_adjust = FALSE - + mutantrace_variation = NO_MUTANTRACE_VARIATION + /obj/item/clothing/under/rank/captain/femformal name ="captain's female formal outfit" desc = "" icon = 'modular_citadel/icons/obj/clothing/cit_clothes.dmi' icon_state = "lewdcap" - icon_override = 'modular_citadel/icons/mob/citadel/uniforms.dmi' + alternate_worn_icon = 'modular_citadel/icons/mob/citadel/uniforms.dmi' item_state = "lewdcap" item_color = "lewdcap" can_adjust = FALSE sensor_mode = SENSOR_COORDS //it's still a captain's suit nerd random_sensor = FALSE + mutantrace_variation = NO_MUTANTRACE_VARIATION diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index bdd17e3c38..a243d48e27 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -1,6 +1,9 @@ //For custom items. +// Unless there's a digitigrade version make sure you add mutantrace_variation = NO_MUTANTRACE_VARIATION to all clothing/under and shoes - Pooj +// Digitigrade stuff is uniform_digi.dmi and digishoes.dmi in modular_citadel/icons/mob + /obj/item/custom/ceb_soap name = "Cebutris' Soap" desc = "A generic bar of soap that doesn't really seem to work right." @@ -23,7 +26,7 @@ desc = "The design on this seems a little too familiar." icon = 'icons/obj/custom.dmi' icon_state = "infcloak" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "infcloak" w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS @@ -33,7 +36,7 @@ desc = "A soft black collar that seems to stretch to fit whoever wears it." icon = 'icons/obj/custom.dmi' icon_state = "infcollar" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "infcollar" item_color = null tagname = null @@ -64,7 +67,7 @@ icon = 'icons/obj/custom.dmi' icon_state = "zombscarf" desc = "A fashionable collar" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_color = "zombscarf" dog_fashion = /datum/dog_fashion/head @@ -73,7 +76,7 @@ desc = "An oddly special looking coat." icon = 'icons/obj/custom.dmi' icon_state = "labred" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "labred" /obj/item/clothing/suit/toggle/labcoat/labredblack @@ -81,7 +84,7 @@ desc = "An oddly special looking coat." icon = 'icons/obj/custom.dmi' icon_state = "labredblack" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "labredblack" /obj/item/toy/plush/carrot @@ -99,7 +102,7 @@ name = "carrot cloak" desc = "A cloak in the shape and color of a carrot!" icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "carrotcloak" item_state = "carrotcloak" w_class = WEIGHT_CLASS_SMALL @@ -111,7 +114,7 @@ icon = 'icons/obj/custom.dmi' icon_state = "satchel_carrot" item_state = "satchel_carrot" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' /obj/item/storage/backpack/satchel/carrot/Initialize() . = ..() @@ -134,7 +137,7 @@ icon = 'icons/obj/custom.dmi' icon_state = "festive" item_state = "festive" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS @@ -142,7 +145,7 @@ name = "Alboroto Rosa mask" icon = 'icons/obj/custom.dmi' icon_state = "lucharzigfie" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "lucharzigfie" /obj/item/clothing/head/hardhat/reindeer/fluff @@ -185,7 +188,7 @@ desc = "You would swear this was in your nightmares after eating too many veggies." icon = 'icons/obj/custom.dmi' icon_state = "hos-g" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "hos-g" body_parts_covered = CHEST|GROIN|ARMS|LEGS @@ -201,7 +204,7 @@ desc = "Smells like reactor four." icon = 'icons/obj/custom.dmi' item_state = "stalker" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "stalker" /obj/item/reagent_containers/food/drinks/flask/steel @@ -216,7 +219,7 @@ desc = "It's a collar..." icon = 'icons/obj/custom.dmi' icon_state = "petcollar-stripe" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "petcollar-stripe" tagname = null @@ -225,34 +228,37 @@ desc = "Just looking at this makes you want to sing." icon = 'icons/obj/custom.dmi' icon_state = "singer" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "singer" item_color = "singer" fitted = NO_FEMALE_UNIFORM alternate_worn_layer = ABOVE_SHOES_LAYER can_adjust = 0 + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/shoes/sneakers/pink icon = 'icons/obj/custom.dmi' icon_state = "pink" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "pink" + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/neck/tie/bloodred name = "Blood Red Tie" desc = "A neosilk clip-on tie. This one has a black S on the tipping and looks rather unique." icon = 'icons/obj/custom.dmi' icon_state = "bloodredtie" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' /obj/item/clothing/suit/puffydress name = "Puffy Dress" desc = "A formal puffy black and red Victorian dress." icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "puffydress" item_state = "puffydress" body_parts_covered = CHEST|GROIN|LEGS + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/suit/vermillion name = "vermillion clothing" @@ -261,7 +267,8 @@ item_state = "vermillion" body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/bb_sweater/black/naomi name = "worn black sweater" @@ -300,7 +307,7 @@ name = "Kiara's Sabre" desc = "This blade looks as dangerous as its owner." icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "darksabre" item_state = "darksabre" lefthand_file = 'modular_citadel/icons/mob/inhands/stunsword_left.dmi' @@ -313,7 +320,7 @@ name = "Ornate Sheathe" desc = "An ornate and rather sinister looking sabre sheathe." icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "darksheath" item_state = "darksheath" w_class = WEIGHT_CLASS_BULKY @@ -332,7 +339,7 @@ name = "Dark Armor" desc = "A dark, non-functional piece of armor sporting a red and black finish." icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' icon_state = "darkcarapace" item_state = "darkcarapace" blood_overlay_type = "armor" @@ -345,7 +352,7 @@ desc = "This cloak doesn't seem too special." icon = 'icons/obj/custom.dmi' icon_state = "wintergreencloak" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "wintergreencloak" w_class = WEIGHT_CLASS_SMALL body_parts_covered = CHEST|GROIN|LEGS|ARMS @@ -361,7 +368,7 @@ desc = "An oddly special looking coat." icon = 'icons/obj/custom.dmi' icon_state = "rdcoat" - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' item_state = "rdcoat" /obj/item/custom/leechjar @@ -393,15 +400,17 @@ /obj/item/clothing/shoes/lucky name = "Lucky Jackboots" icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' desc = "Comfy Lucky Jackboots with the word Luck on them." item_state = "luckyjack" icon_state = "luckyjack" + mutantrace_variation = NO_MUTANTRACE_VARIATION /obj/item/clothing/under/lunasune name = "Divine Robes" icon = 'icons/obj/custom.dmi' - icon_override = 'icons/mob/custom_w.dmi' + alternate_worn_icon = 'icons/mob/custom_w.dmi' desc = "Heavenly robes of the kitsune Luna Pumpkin,you can feel radiance coming from them." item_state = "Divine_robes" icon_state = "Divine_robes" + mutantrace_variation = NO_MUTANTRACE_VARIATION diff --git a/modular_citadel/icons/mob/uniform_digi.dmi b/modular_citadel/icons/mob/uniform_digi.dmi new file mode 100644 index 0000000000..1a95d6a3bd Binary files /dev/null and b/modular_citadel/icons/mob/uniform_digi.dmi differ diff --git a/modular_citadel/icons/polyclothes/item/uniform.dmi b/modular_citadel/icons/polyclothes/item/uniform.dmi index a0b6031a5d..87c3479a6a 100644 Binary files a/modular_citadel/icons/polyclothes/item/uniform.dmi and b/modular_citadel/icons/polyclothes/item/uniform.dmi differ diff --git a/modular_citadel/icons/polyclothes/mob/uniform.dmi b/modular_citadel/icons/polyclothes/mob/uniform.dmi index bf53ea7a3c..15b5262bab 100644 Binary files a/modular_citadel/icons/polyclothes/mob/uniform.dmi and b/modular_citadel/icons/polyclothes/mob/uniform.dmi differ