mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Removes Dynamic Hair Suffixes (#65209)
About The Pull Request Removes Dynamic Hair Suffixes + Included files Why It's Good For The Game Facial hair suffixes went unused, @Twaticus and the spriting team are planning something new for hair that is not going to use this horribly underused and just kinda like, bad system Changelog not player facing
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
. = ..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 182 B |
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB |
Reference in New Issue
Block a user