diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index d3bcfb594ed..0e8ec1b4406 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -53,7 +53,6 @@ flags_inv = NONE icon_state = "cage" inhand_icon_state = "cage" - dynamic_hair_suffix = "" worn_y_offset = 7 /obj/item/clothing/head/helmet/chaplain/ancient diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a5d28634ccf..898ec327c43 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -40,13 +40,6 @@ var/pocket_storage_component_path - //These allow head/mask items to dynamically alter the user's hair - // and facial hair, checking hair_extensions.dmi and facialhair_extensions.dmi - // for a state matching hair_state+dynamic_hair_suffix - // THESE OVERRIDE THE HIDEHAIR FLAGS - var/dynamic_hair_suffix = ""//head > mask for head hair - var/dynamic_fhair_suffix = ""//mask > head for facial hair - /// How much clothing damage has been dealt to each of the limbs of the clothing, assuming it covers more than one limb var/list/damage_by_parts /// How much integrity is in a specific limb before that limb is disabled (for use in [/obj/item/clothing/proc/take_damage_zone], and only if we cover multiple zones.) Set to 0 to disable shredding. diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 9ea6fddca72..83585452208 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -7,13 +7,6 @@ slot_flags = ITEM_SLOT_HEAD var/blockTracking = 0 //For AI tracking var/can_toggle = null - dynamic_hair_suffix = "+generic" - -/obj/item/clothing/head/Initialize(mapload) - . = ..() - if(ishuman(loc) && dynamic_hair_suffix) - var/mob/living/carbon/human/H = loc - H.update_hair() ///Special throw_impact for hats to frisbee hats at people to place them on their heads/attempt to de-hat them. /obj/item/clothing/head/throw_impact(atom/hit_atom, datum/thrownthing/thrownthing) diff --git a/code/modules/clothing/head/animalears.dm b/code/modules/clothing/head/animalears.dm index f5a73214538..13890bf507f 100644 --- a/code/modules/clothing/head/animalears.dm +++ b/code/modules/clothing/head/animalears.dm @@ -3,7 +3,6 @@ desc = "A pair of kitty ears. Meow!" icon_state = "kitty" color = "#999999" - dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/kitty @@ -25,6 +24,5 @@ name = "rabbit ears" desc = "Wearing these makes you look useless, and only good for your sex appeal." icon_state = "bunny" - dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/rabbit diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 5f143552310..b0f375ee152 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -26,7 +26,6 @@ desc = "A rare chef's hat meant for hat collectors!" icon_state = "chef" inhand_icon_state = "chef" - dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/chef @@ -55,7 +54,6 @@ name = "collectable police officer's hat" desc = "A collectable police officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" - dynamic_hair_suffix = "" dog_fashion = /datum/dog_fashion/head/warden @@ -82,7 +80,7 @@ icon_state = "headslime" inhand_icon_state = "headslime" clothing_flags = SNUG_FIT - dynamic_hair_suffix = "" + /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" @@ -106,7 +104,7 @@ desc = "The fur feels... a bit too realistic." icon_state = "kitty" inhand_icon_state = "kitty" - dynamic_hair_suffix = "" + dog_fashion = /datum/dog_fashion/head/kitty @@ -115,7 +113,7 @@ desc = "Not as lucky as the feet!" icon_state = "bunny" inhand_icon_state = "bunny" - dynamic_hair_suffix = "" + dog_fashion = /datum/dog_fashion/head/rabbit @@ -139,7 +137,7 @@ name = "collectable HoS hat" desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" icon_state = "hoscap" - dynamic_hair_suffix = "" + /obj/item/clothing/head/collectable/hop name = "collectable HoP hat" diff --git a/code/modules/clothing/head/cone.dm b/code/modules/clothing/head/cone.dm index 7d31ecde476..2754fe8445e 100644 --- a/code/modules/clothing/head/cone.dm +++ b/code/modules/clothing/head/cone.dm @@ -12,7 +12,7 @@ attack_verb_continuous = list("warns", "cautions", "smashes") attack_verb_simple = list("warn", "caution", "smash") resistance_flags = NONE - dynamic_hair_suffix = "" + /obj/item/clothing/head/cone/worn_overlays(mutable_appearance/standing, isinhands, icon_file) . = ..() diff --git a/code/modules/clothing/head/costume.dm b/code/modules/clothing/head/costume.dm index 8eba8dbc4e7..acd2cb08e4f 100644 --- a/code/modules/clothing/head/costume.dm +++ b/code/modules/clothing/head/costume.dm @@ -88,7 +88,7 @@ flags_inv = HIDEHAIR //bald icon_state = "shrine_wig" inhand_icon_state = "shrine_wig" - dynamic_hair_suffix = "" + worn_y_offset = 1 /obj/item/clothing/head/cardborg diff --git a/code/modules/clothing/head/crown.dm b/code/modules/clothing/head/crown.dm index 2a3eb907e1d..33e7f2e5225 100644 --- a/code/modules/clothing/head/crown.dm +++ b/code/modules/clothing/head/crown.dm @@ -4,7 +4,7 @@ icon_state = "crown" armor = list(MELEE = 15, BULLET = 0, LASER = 0,ENERGY = 10, BOMB = 0, BIO = 0, FIRE = 100, ACID = 50, WOUND = 5) resistance_flags = FIRE_PROOF - dynamic_hair_suffix = "" + /obj/item/clothing/head/crown/fancy name = "magnificent crown" diff --git a/code/modules/clothing/head/frenchberet.dm b/code/modules/clothing/head/frenchberet.dm index 18f80955e44..f2d14b195ba 100644 --- a/code/modules/clothing/head/frenchberet.dm +++ b/code/modules/clothing/head/frenchberet.dm @@ -5,7 +5,7 @@ greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#972A2A" - dynamic_hair_suffix = "" + /obj/item/clothing/head/frenchberet/equipped(mob/M, slot) . = ..() diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index fe860b67ea2..2f94e488b96 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -8,7 +8,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) clothing_flags = SNUG_FIT | PLASMAMAN_HELMET_EXEMPT resistance_flags = FIRE_PROOF - dynamic_hair_suffix = "+generic" + light_system = MOVABLE_LIGHT_DIRECTIONAL light_range = 4 light_power = 0.8 @@ -242,6 +242,6 @@ flags_inv = 0 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 0, FIRE = 0, ACID = 0) light_range = 1 //luminosity when on - dynamic_hair_suffix = "" + dog_fashion = /datum/dog_fashion/head/reindeer diff --git a/code/modules/clothing/head/hat.dm b/code/modules/clothing/head/hat.dm index 5a884d3507f..5f0c1c4294d 100644 --- a/code/modules/clothing/head/hat.dm +++ b/code/modules/clothing/head/hat.dm @@ -39,7 +39,7 @@ name = "nurse's hat" desc = "It allows quick identification of trained medical personnel." icon_state = "nursehat" - dynamic_hair_suffix = "" + dog_fashion = /datum/dog_fashion/head/nurse @@ -48,7 +48,7 @@ desc = "Gentleman, elite aboard!" icon_state = "bowler" inhand_icon_state = "bowler" - dynamic_hair_suffix = "" + /obj/item/clothing/head/bearpelt name = "bear pelt hat" @@ -117,7 +117,7 @@ name = "jester hat" desc = "A hat with bells, to add some merriness to the suit." icon_state = "jester_hat" - dynamic_hair_suffix = "" + /obj/item/clothing/head/jester/alt icon_state = "jester2" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 4ab6c05640d..14fc01f5144 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -227,7 +227,7 @@ name = "police officer's hat" desc = "A police officer's Hat. This hat emphasizes that you are THE LAW." icon_state = "policehelm" - dynamic_hair_suffix = "" + /obj/item/clothing/head/helmet/constable name = "constable helmet" diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 268ca3b01c2..39e47a8f27e 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -12,7 +12,7 @@ desc = "The commander in chef's head wear." strip_delay = 10 equip_delay_other = 10 - dynamic_hair_suffix = "" + pocket_storage_component_path = /datum/component/storage/concrete/pockets/chefhat dog_fashion = /datum/dog_fashion/head/chef ///the chance that the movements of a mouse inside of this hat get relayed to the human wearing the hat @@ -125,7 +125,7 @@ desc = "A beret, a mime's favorite headwear." icon_state = "beret" dog_fashion = /datum/dog_fashion/head/beret - dynamic_hair_suffix = "" + greyscale_config = /datum/greyscale_config/beret greyscale_config_worn = /datum/greyscale_config/beret/worn greyscale_colors = "#972A2A" @@ -140,7 +140,7 @@ armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 35, BOMB = 25, BIO = 10, FIRE = 50, ACID = 60, WOUND = 10) icon_state = "hoscap" strip_delay = 80 - dynamic_hair_suffix = "" + /obj/item/clothing/head/hos/syndicate name = "syndicate cap" diff --git a/code/modules/clothing/head/pirate.dm b/code/modules/clothing/head/pirate.dm index c66c58211e3..0ddaa4bd639 100644 --- a/code/modules/clothing/head/pirate.dm +++ b/code/modules/clothing/head/pirate.dm @@ -40,7 +40,7 @@ desc = "Yarr." icon_state = "bandana" inhand_icon_state = "bandana" - dynamic_hair_suffix = "" + /obj/item/clothing/head/bandana/armored armor = list(MELEE = 30, BULLET = 50, LASER = 30,ENERGY = 40, BOMB = 30, BIO = 30, FIRE = 60, ACID = 75) diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index e6a8b101a14..875a54903bd 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -11,8 +11,7 @@ permeability_coefficient = 0.01 armor = list(MELEE = 0, BULLET = 0, LASER = 0,ENERGY = 0, BOMB = 0, BIO = 100, FIRE = 80, ACID = 70) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - dynamic_hair_suffix = "" - dynamic_fhair_suffix = "" + cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD diff --git a/code/modules/clothing/spacesuits/specialops.dm b/code/modules/clothing/spacesuits/specialops.dm index 059a675a308..f996d8a0432 100644 --- a/code/modules/clothing/spacesuits/specialops.dm +++ b/code/modules/clothing/spacesuits/specialops.dm @@ -5,8 +5,7 @@ greyscale_config_worn = /datum/greyscale_config/beret_badge/worn icon_state = "beret_badge" greyscale_colors = "#972A2A#F2F2F2" - dynamic_hair_suffix = "+generic" - dynamic_fhair_suffix = "+generic" + flags_inv = 0 armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 60, BOMB = 100, BIO = 100, FIRE = 100, ACID = 100, WOUND = 15) strip_delay = 130 diff --git a/code/modules/clothing/suits/costume.dm b/code/modules/clothing/suits/costume.dm index b4b399bb5c8..3165476a3ed 100644 --- a/code/modules/clothing/suits/costume.dm +++ b/code/modules/clothing/suits/costume.dm @@ -320,7 +320,7 @@ body_parts_covered = HEAD clothing_flags = THICKMATERIAL flags_inv = HIDEHAIR|HIDEEARS - dynamic_hair_suffix = "" + /obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!? name = "bloated human suit" diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 8273ec8e7db..206908a37c1 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -84,7 +84,7 @@ /obj/item/clothing/head/hooded var/obj/item/clothing/suit/hooded/suit - dynamic_hair_suffix = "" + /obj/item/clothing/head/hooded/Destroy() suit = null diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index b3201ac224e..fb55ce647c7 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -63,8 +63,7 @@ clothing_flags = THICKMATERIAL | SNUG_FIT armor = list(MELEE = 20, BULLET = 0, LASER = 20,ENERGY = 30, BOMB = 100, BIO = 0, FIRE = 80, ACID = 50) flags_inv = HIDEFACE|HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT - dynamic_hair_suffix = "" - dynamic_fhair_suffix = "" + cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index eec9dff8ec0..be66c441eed 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -274,10 +274,6 @@ /mob/living/carbon/human/head_update(obj/item/I, forced) if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced) update_hair() - else - var/obj/item/clothing/C = I - if(istype(C) && C.dynamic_hair_suffix) - update_hair() if(I.flags_inv & HIDEEYES || forced) update_inv_glasses() if(I.flags_inv & HIDEEARS || forced) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 1a41cf2a54e..b9afb17ee33 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -545,9 +545,6 @@ GLOBAL_LIST_EMPTY(features_by_species) var/hair_hidden = FALSE //ignored if the matching dynamic_X_suffix is non-empty var/facialhair_hidden = FALSE // ^ - var/dynamic_hair_suffix = "" //if this is non-null, and hair+suffix matches an iconstate, then we render that hair instead - var/dynamic_fhair_suffix = "" - //for augmented heads if(noggin.status == BODYPART_ROBOTIC) return @@ -555,41 +552,19 @@ GLOBAL_LIST_EMPTY(features_by_species) //we check if our hat or helmet hides our facial hair. if(H.head) var/obj/item/I = H.head - if(isclothing(I)) - var/obj/item/clothing/C = I - dynamic_fhair_suffix = C.dynamic_fhair_suffix if(I.flags_inv & HIDEFACIALHAIR) facialhair_hidden = TRUE if(H.wear_mask) var/obj/item/I = H.wear_mask - if(isclothing(I)) - var/obj/item/clothing/C = I - dynamic_fhair_suffix = C.dynamic_fhair_suffix //mask > head in terms of facial hair if(I.flags_inv & HIDEFACIALHAIR) facialhair_hidden = TRUE - if(H.facial_hairstyle && (FACEHAIR in species_traits) && (!facialhair_hidden || dynamic_fhair_suffix)) + if(H.facial_hairstyle && (FACEHAIR in species_traits) && !facialhair_hidden) S = GLOB.facial_hairstyles_list[H.facial_hairstyle] if(S) - //List of all valid dynamic_fhair_suffixes - var/static/list/fextensions - if(!fextensions) - var/icon/fhair_extensions = icon('icons/mob/facialhair_extensions.dmi') - fextensions = list() - for(var/s in fhair_extensions.IconStates(1)) - fextensions[s] = TRUE - qdel(fhair_extensions) - - //Is hair+dynamic_fhair_suffix a valid iconstate? - var/fhair_state = S.icon_state - var/fhair_file = S.icon - if(fextensions[fhair_state+dynamic_fhair_suffix]) - fhair_state += dynamic_fhair_suffix - fhair_file = 'icons/mob/facialhair_extensions.dmi' - - var/mutable_appearance/facial_overlay = mutable_appearance(fhair_file, fhair_state, -HAIR_LAYER) + var/mutable_appearance/facial_overlay = mutable_appearance(S.icon, S.icon_state, -HAIR_LAYER) var/mutable_appearance/gradient_overlay if(!forced_colour) @@ -606,12 +581,12 @@ GLOBAL_LIST_EMPTY(features_by_species) var/grad_style = LAZYACCESS(H.grad_style, GRADIENT_FACIAL_HAIR_KEY) if(grad_style) var/grad_color = LAZYACCESS(H.grad_color, GRADIENT_FACIAL_HAIR_KEY) - gradient_overlay = make_gradient_overlay(fhair_file, fhair_state, HAIR_LAYER, GLOB.facial_hair_gradients_list[grad_style], grad_color) + gradient_overlay = make_gradient_overlay(S.icon, S.icon_state, HAIR_LAYER, GLOB.facial_hair_gradients_list[grad_style], grad_color) else facial_overlay.color = forced_colour facial_overlay.alpha = hair_alpha - facial_overlay.overlays += emissive_blocker(fhair_file, fhair_state, alpha = hair_alpha) + facial_overlay.overlays += emissive_blocker(S.icon, S.icon_state, alpha = hair_alpha) standing += facial_overlay if(gradient_overlay) @@ -619,29 +594,20 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.head) var/obj/item/I = H.head - if(isclothing(I)) - var/obj/item/clothing/C = I - dynamic_hair_suffix = C.dynamic_hair_suffix if(I.flags_inv & HIDEHAIR) hair_hidden = TRUE if(H.w_uniform) var/obj/item/item_uniform = H.w_uniform - if(isclothing(item_uniform)) - var/obj/item/clothing/clothing_object = item_uniform - dynamic_hair_suffix = clothing_object.dynamic_hair_suffix if(item_uniform.flags_inv & HIDEHAIR) hair_hidden = TRUE if(H.wear_mask) var/obj/item/I = H.wear_mask - if(!dynamic_hair_suffix && isclothing(I)) //head > mask in terms of head hair - var/obj/item/clothing/C = I - dynamic_hair_suffix = C.dynamic_hair_suffix if(I.flags_inv & HIDEHAIR) hair_hidden = TRUE - if(!hair_hidden || dynamic_hair_suffix) + if(!hair_hidden) var/mutable_appearance/hair_overlay = mutable_appearance(layer = -HAIR_LAYER) var/mutable_appearance/gradient_overlay if(!hair_hidden && !H.getorgan(/obj/item/organ/brain)) //Applies the debrained overlay if there is no brain @@ -652,22 +618,8 @@ GLOBAL_LIST_EMPTY(features_by_species) else if(H.hairstyle && (HAIR in species_traits)) S = GLOB.hairstyles_list[H.hairstyle] if(S) - - //List of all valid dynamic_hair_suffixes - var/static/list/extensions - if(!extensions) - var/icon/hair_extensions = icon('icons/mob/hair_extensions.dmi') //hehe - extensions = list() - for(var/s in hair_extensions.IconStates(1)) - extensions[s] = TRUE - qdel(hair_extensions) - - //Is hair+dynamic_hair_suffix a valid iconstate? var/hair_state = S.icon_state var/hair_file = S.icon - if(extensions[hair_state+dynamic_hair_suffix]) - hair_state += dynamic_hair_suffix - hair_file = 'icons/mob/hair_extensions.dmi' hair_overlay.icon = hair_file hair_overlay.icon_state = hair_state diff --git a/code/modules/mod/mod_clothes.dm b/code/modules/mod/mod_clothes.dm index 2fac5bc629d..e13c7d7085b 100644 --- a/code/modules/mod/mod_clothes.dm +++ b/code/modules/mod/mod_clothes.dm @@ -8,7 +8,7 @@ body_parts_covered = HEAD heat_protection = HEAD cold_protection = HEAD - dynamic_hair_suffix = "" + obj_flags = IMMUTABLE_SLOW var/alternate_layer = NECK_LAYER var/obj/item/mod/control/mod diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index 915bb490b9d..3d141866f31 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -101,7 +101,7 @@ Slimecrossing Armor slot_flags = ITEM_SLOT_HEAD clothing_traits = list(TRAIT_PACIFISM) body_parts_covered = NONE - dynamic_hair_suffix = "" + force = 0 throwforce = 0 w_class = WEIGHT_CLASS_TINY diff --git a/icons/mob/facialhair_extensions.dmi b/icons/mob/facialhair_extensions.dmi deleted file mode 100644 index cf74d73796c..00000000000 Binary files a/icons/mob/facialhair_extensions.dmi and /dev/null differ diff --git a/icons/mob/hair_extensions.dmi b/icons/mob/hair_extensions.dmi deleted file mode 100644 index 8a2f332c7f4..00000000000 Binary files a/icons/mob/hair_extensions.dmi and /dev/null differ