mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-19 19:13:30 +01:00
Merge pull request #5879 from KasparoVy/glasses_handling_properly
Adds switch-layer rendering functionality for f.hair, glasses and head accessories.
This commit is contained in:
@@ -43,6 +43,7 @@
|
||||
H.h_style = hair_style
|
||||
|
||||
update_hair()
|
||||
update_inv_glasses()
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style)
|
||||
|
||||
@@ -395,6 +395,7 @@ var/global/list/damage_icon_parts = list()
|
||||
/mob/living/carbon/human/proc/update_head_accessory(var/update_icons=1)
|
||||
//Reset our head accessory
|
||||
overlays_standing[HEAD_ACCESSORY_LAYER] = null
|
||||
overlays_standing[HEAD_ACC_OVER_LAYER] = null
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
|
||||
@@ -408,9 +409,8 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
//base icons
|
||||
var/icon/head_accessory_standing = new /icon('icons/mob/body_accessory.dmi',"accessory_none_s")
|
||||
|
||||
if(head_organ.ha_style && (head_organ.species.bodyflags & HAS_HEAD_ACCESSORY))
|
||||
var/datum/sprite_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style]
|
||||
var/datum/sprite_accessory/head_accessory/head_accessory_style = head_accessory_styles_list[head_organ.ha_style]
|
||||
if(head_accessory_style && head_accessory_style.species_allowed)
|
||||
if(head_organ.species.name in head_accessory_style.species_allowed)
|
||||
var/icon/head_accessory_s = new/icon("icon" = head_accessory_style.icon, "icon_state" = "[head_accessory_style.icon_state]_s")
|
||||
@@ -418,11 +418,14 @@ var/global/list/damage_icon_parts = list()
|
||||
head_accessory_s.Blend(rgb(head_organ.r_headacc, head_organ.g_headacc, head_organ.b_headacc), ICON_ADD)
|
||||
head_accessory_standing = head_accessory_s //head_accessory_standing.Blend(head_accessory_s, ICON_OVERLAY)
|
||||
//Having it this way preserves animations. Useful for animated antennae.
|
||||
|
||||
if(head_accessory_style.over_hair) //Select which layer to use based on the properties of the head accessory style.
|
||||
overlays_standing[HEAD_ACC_OVER_LAYER] = image(head_accessory_standing)
|
||||
else
|
||||
overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing)
|
||||
else
|
||||
//warning("Invalid ha_style for [species.name]: [ha_style]")
|
||||
|
||||
overlays_standing[HEAD_ACCESSORY_LAYER] = image(head_accessory_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
|
||||
@@ -446,7 +449,7 @@ var/global/list/damage_icon_parts = list()
|
||||
//var/icon/debrained_s = new /icon("icon"='icons/mob/human_face.dmi', "icon_state" = "debrained_s")
|
||||
|
||||
if(head_organ.h_style && !(head && (head.flags & BLOCKHEADHAIR) && !(isSynthetic())))
|
||||
var/datum/sprite_accessory/hair_style = hair_styles_list[head_organ.h_style]
|
||||
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[head_organ.h_style]
|
||||
//if(!src.get_int_organ(/obj/item/organ/internal/brain) && src.get_species() != "Machine" )//make it obvious we have NO BRAIN
|
||||
// hair_standing.Blend(debrained_s, ICON_OVERLAY)
|
||||
if(hair_style && hair_style.species_allowed)
|
||||
@@ -477,7 +480,8 @@ var/global/list/damage_icon_parts = list()
|
||||
//FACIAL HAIR OVERLAY
|
||||
/mob/living/carbon/human/proc/update_fhair(var/update_icons=1)
|
||||
//Reset our facial hair
|
||||
overlays_standing[FHAIR_LAYER] = null
|
||||
overlays_standing[FHAIR_LAYER] = null
|
||||
overlays_standing[FHAIR_OVER_LAYER] = null
|
||||
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED))
|
||||
@@ -493,7 +497,7 @@ var/global/list/damage_icon_parts = list()
|
||||
var/icon/face_standing = new /icon('icons/mob/human_face.dmi',"bald_s")
|
||||
|
||||
if(head_organ.f_style)
|
||||
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[head_organ.f_style]
|
||||
var/datum/sprite_accessory/facial_hair/facial_hair_style = facial_hair_styles_list[head_organ.f_style]
|
||||
if(facial_hair_style && facial_hair_style.species_allowed)
|
||||
if((head_organ.species.name in facial_hair_style.species_allowed) || (head_organ.species.flags & ALL_RPARTS)) //If the head's species is in the list of allowed species for the hairstyle, or the head's species is one flagged to have bodies comprised wholly of cybernetics...
|
||||
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
|
||||
@@ -509,11 +513,14 @@ var/global/list/damage_icon_parts = list()
|
||||
facial_s.Blend(facial_secondary_s, ICON_OVERLAY)
|
||||
|
||||
face_standing.Blend(facial_s, ICON_OVERLAY)
|
||||
|
||||
if(facial_hair_style.over_hair) //Select which layer to use based on the properties of the facial hair style.
|
||||
overlays_standing[FHAIR_OVER_LAYER] = image(face_standing)
|
||||
else
|
||||
overlays_standing[FHAIR_LAYER] = image(face_standing)
|
||||
else
|
||||
//warning("Invalid f_style for [species.name]: [f_style]")
|
||||
|
||||
overlays_standing[FHAIR_LAYER] = image(face_standing)
|
||||
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_mutations(var/update_icons=1)
|
||||
@@ -736,6 +743,8 @@ var/global/list/damage_icon_parts = list()
|
||||
|
||||
|
||||
/mob/living/carbon/human/update_inv_glasses(var/update_icons=1)
|
||||
overlays_standing[GLASSES_LAYER] = null
|
||||
overlays_standing[GLASSES_OVER_LAYER] = null
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_glasses]
|
||||
@@ -743,20 +752,26 @@ var/global/list/damage_icon_parts = list()
|
||||
inv.update_icon()
|
||||
|
||||
if(glasses)
|
||||
var/image/new_glasses
|
||||
var/obj/item/organ/external/head/head_organ = get_organ("head")
|
||||
if(client && hud_used && hud_used.hud_shown)
|
||||
if(hud_used.inventory_shown) //if the inventory is open ...
|
||||
glasses.screen_loc = ui_glasses //...draw the item in the inventory screen
|
||||
client.screen += glasses //Either way, add the item to the HUD
|
||||
|
||||
if(glasses.icon_override)
|
||||
overlays_standing[GLASSES_LAYER] = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
|
||||
else if(glasses.sprite_sheets && glasses.sprite_sheets[species.name])
|
||||
overlays_standing[GLASSES_LAYER]= image("icon" = glasses.sprite_sheets[species.name], "icon_state" = "[glasses.icon_state]")
|
||||
new_glasses = image("icon" = glasses.icon_override, "icon_state" = "[glasses.icon_state]")
|
||||
else if(glasses.sprite_sheets && glasses.sprite_sheets[head_organ.species.name])
|
||||
new_glasses = image("icon" = glasses.sprite_sheets[head_organ.species.name], "icon_state" = "[glasses.icon_state]")
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER]= image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
|
||||
new_glasses = image("icon" = 'icons/mob/eyes.dmi', "icon_state" = "[glasses.icon_state]")
|
||||
|
||||
var/datum/sprite_accessory/hair/hair_style = hair_styles_list[head_organ.h_style]
|
||||
if(hair_style && hair_style.glasses_over) //Select which layer to use based on the properties of the hair style. Hair styles with hair that don't overhang the arms of the glasses should have glasses_over set to a positive value.
|
||||
overlays_standing[GLASSES_OVER_LAYER] = new_glasses
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER] = new_glasses
|
||||
|
||||
else
|
||||
overlays_standing[GLASSES_LAYER] = null
|
||||
if(update_icons) update_icons()
|
||||
|
||||
/mob/living/carbon/human/update_inv_ears(var/update_icons=1)
|
||||
|
||||
@@ -65,19 +65,23 @@
|
||||
|
||||
/datum/sprite_accessory/hair
|
||||
icon = 'icons/mob/human_face.dmi' // default icon for all hairs
|
||||
var/glasses_over //Hair styles with hair that don't overhang the arms of glasses should have glasses_over set to a positive value.
|
||||
|
||||
/datum/sprite_accessory/hair/bald
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
species_allowed = list("Human", "Unathi", "Vox", "Diona", "Kidan", "Grey", "Plasmaman", "Skeleton", "Vulpkanin", "Tajaran")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/short
|
||||
name = "Short Hair" // try to capatilize the names please~
|
||||
icon_state = "hair_a" // you do not need to define _s or _l sub-states, game automatically does this for you
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/cut
|
||||
name = "Cut Hair"
|
||||
icon_state = "hair_c"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/long
|
||||
name = "Shoulder-length Hair"
|
||||
@@ -123,6 +127,7 @@
|
||||
name = "Ponytail male"
|
||||
icon_state = "hair_ponytailm"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/ponytail2
|
||||
name = "Ponytail female"
|
||||
@@ -132,16 +137,19 @@
|
||||
/datum/sprite_accessory/hair/ponytail3
|
||||
name = "Ponytail alt"
|
||||
icon_state = "hair_ponytail3"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/sideponytail
|
||||
name = "Side Ponytail"
|
||||
icon_state = "hair_stail"
|
||||
gender = FEMALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/highponytail
|
||||
name = "High Ponytail"
|
||||
icon_state = "hair_highponytail"
|
||||
gender = FEMALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/wisp
|
||||
name = "Wisp"
|
||||
@@ -157,11 +165,13 @@
|
||||
icon_state = "hair_pompadour"
|
||||
gender = MALE
|
||||
species_allowed = list("Human", "Slime People", "Unathi")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/quiff
|
||||
name = "Quiff"
|
||||
icon_state = "hair_quiff"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/bedhead
|
||||
name = "Bedhead"
|
||||
@@ -197,6 +207,7 @@
|
||||
name = "Bowl"
|
||||
icon_state = "hair_bowlcut"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/braid2
|
||||
name = "Long Braid"
|
||||
@@ -219,20 +230,24 @@
|
||||
icon_state = "hair_buzzcut"
|
||||
gender = MALE
|
||||
species_allowed = list("Human", "Slime People", "Unathi")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/crew
|
||||
name = "Crewcut"
|
||||
icon_state = "hair_crewcut"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/combover
|
||||
name = "Combover"
|
||||
icon_state = "hair_combover"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/devillock
|
||||
name = "Devil Lock"
|
||||
icon_state = "hair_devilock"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/dreadlocks
|
||||
name = "Dreadlocks"
|
||||
@@ -249,6 +264,7 @@
|
||||
/datum/sprite_accessory/hair/afro2
|
||||
name = "Afro 2"
|
||||
icon_state = "hair_afro2"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/afro_large
|
||||
name = "Big Afro"
|
||||
@@ -259,6 +275,7 @@
|
||||
name = "Flat Top"
|
||||
icon_state = "hair_sergeant"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/emo
|
||||
name = "Emo"
|
||||
@@ -276,31 +293,37 @@
|
||||
name = "Hitop"
|
||||
icon_state = "hair_hitop"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/mohawk
|
||||
name = "Mohawk"
|
||||
icon_state = "hair_d"
|
||||
species_allowed = list("Human", "Slime People", "Unathi")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/jensen
|
||||
name = "Adam Jensen Hair"
|
||||
icon_state = "hair_jensen"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/cia
|
||||
name = "CIA"
|
||||
icon_state = "hair_cia"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/mulder
|
||||
name = "Mulder"
|
||||
icon_state = "hair_mulder"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/gelled
|
||||
name = "Gelled Back"
|
||||
icon_state = "hair_gelled"
|
||||
gender = FEMALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/gentle
|
||||
name = "Gentle"
|
||||
@@ -311,6 +334,7 @@
|
||||
name = "Spiky"
|
||||
icon_state = "hair_spikey"
|
||||
species_allowed = list("Human", "Slime People", "Unathi")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/kusanagi
|
||||
name = "Kusanagi Hair"
|
||||
@@ -320,6 +344,7 @@
|
||||
name = "Pigtails"
|
||||
icon_state = "hair_kagami"
|
||||
gender = FEMALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/himecut
|
||||
name = "Hime Cut"
|
||||
@@ -335,6 +360,7 @@
|
||||
name = "Odango"
|
||||
icon_state = "hair_odango"
|
||||
gender = FEMALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/ombre
|
||||
name = "Ombre"
|
||||
@@ -349,11 +375,13 @@
|
||||
/datum/sprite_accessory/hair/skinhead
|
||||
name = "Skinhead"
|
||||
icon_state = "hair_skinhead"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/balding
|
||||
name = "Balding Hair"
|
||||
icon_state = "hair_e"
|
||||
gender = MALE // turnoff!
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/longemo
|
||||
name = "Long Emo"
|
||||
@@ -385,6 +413,7 @@
|
||||
name = "Unshaven Mohawk"
|
||||
icon_state = "hair_unshavenmohawk"
|
||||
gender = MALE
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/drills
|
||||
name = "Twincurls"
|
||||
@@ -401,6 +430,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/ipc
|
||||
species_allowed = list("Machine")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/ipc/ipc_screen_pink
|
||||
name = "Pink IPC Screen"
|
||||
@@ -547,6 +577,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/unathi
|
||||
species_allowed = list("Unathi")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/unathi/una_horns
|
||||
name = "Unathi Horns"
|
||||
@@ -593,6 +624,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/tajara
|
||||
species_allowed = list("Tajaran")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_clean
|
||||
name = "Tajara Clean"
|
||||
@@ -601,11 +633,13 @@
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_bangs
|
||||
name = "Tajara Bangs"
|
||||
icon_state = "hair_bangs"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_braid
|
||||
name = "Tajara Braid"
|
||||
icon_state = "hair_tbraid"
|
||||
secondary_theme = "beads"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_shaggy
|
||||
name = "Tajara Shaggy"
|
||||
@@ -642,22 +676,27 @@
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_curls
|
||||
name = "Tajara Curly"
|
||||
icon_state = "hair_curly"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_retro
|
||||
name = "Tajaran Ladies' Retro"
|
||||
icon_state = "hair_ladies_retro"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_victory
|
||||
name = "Tajara Victory Curls"
|
||||
icon_state = "hair_victory"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_bob
|
||||
name = "Tajara Bob"
|
||||
icon_state = "hair_tbob"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/tajara/taj_hair_fingercurl
|
||||
name = "Tajara Finger Curls"
|
||||
icon_state = "hair_fingerwave"
|
||||
glasses_over = null
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin
|
||||
species_allowed = list("Vulpkanin")
|
||||
@@ -694,6 +733,7 @@
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_bun
|
||||
name = "Bun"
|
||||
icon_state = "bun"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_jagged
|
||||
name = "Jagged"
|
||||
@@ -706,6 +746,7 @@
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_hawk
|
||||
name = "Hawk"
|
||||
icon_state = "hawk"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_anita
|
||||
name = "Anita"
|
||||
@@ -718,6 +759,7 @@
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_spike
|
||||
name = "Spike"
|
||||
icon_state = "spike"
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/vulpkanin/vulp_hair_braided
|
||||
name = "Braided"
|
||||
@@ -726,6 +768,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/vox
|
||||
species_allowed = list("Vox")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/vox/vox_quills_short
|
||||
name = "Short Vox Quills"
|
||||
@@ -787,6 +830,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/wryn
|
||||
species_allowed = list("Wryn")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/wryn/wry_antennae_default
|
||||
name = "Antennae"
|
||||
@@ -794,6 +838,7 @@
|
||||
|
||||
/datum/sprite_accessory/hair/nucleation
|
||||
species_allowed = list("Nucleation")
|
||||
glasses_over = 1
|
||||
|
||||
/datum/sprite_accessory/hair/nucleation/nuc_crystals
|
||||
name = "Nucleation Crystals"
|
||||
@@ -835,6 +880,7 @@
|
||||
/datum/sprite_accessory/facial_hair
|
||||
icon = 'icons/mob/human_face.dmi'
|
||||
gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P)
|
||||
var/over_hair
|
||||
|
||||
/datum/sprite_accessory/facial_hair/shaved
|
||||
name = "Shaved"
|
||||
@@ -1024,6 +1070,7 @@
|
||||
/datum/sprite_accessory/facial_hair/unathi
|
||||
species_allowed = list("Unathi")
|
||||
gender = NEUTER
|
||||
over_hair = 1
|
||||
|
||||
/datum/sprite_accessory/facial_hair/unathi/una_spines_long
|
||||
name = "Long Spines"
|
||||
@@ -1594,6 +1641,7 @@
|
||||
icon = 'icons/mob/body_accessory.dmi'
|
||||
species_allowed = list("Unathi", "Vulpkanin", "Tajaran", "Machine")
|
||||
icon_state = "accessory_none"
|
||||
var/over_hair
|
||||
|
||||
/datum/sprite_accessory/head_accessory/none
|
||||
name = "None"
|
||||
@@ -1602,6 +1650,7 @@
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi
|
||||
species_allowed = list("Unathi")
|
||||
over_hair = 1
|
||||
|
||||
/datum/sprite_accessory/head_accessory/unathi/simple
|
||||
name = "Simple"
|
||||
@@ -1701,6 +1750,7 @@
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc
|
||||
species_allowed = list("Machine")
|
||||
over_hair = 1
|
||||
|
||||
/datum/sprite_accessory/head_accessory/ipc/ipc_antennae
|
||||
name = "Antennae"
|
||||
|
||||
Reference in New Issue
Block a user