It's 2 am and im having a manic episode so i fixed hair (#69092)

* 2 am coding

* lazylists like this are stupid

* reviews
This commit is contained in:
Kapu1178
2022-08-17 20:20:04 -04:00
committed by GitHub
parent 89341c100c
commit dcd84e1bdc
36 changed files with 239 additions and 202 deletions
@@ -32,5 +32,5 @@
if(index > 0 && H.facial_hairstyle != beard_order[index])
to_chat(H, span_warning("Your chin itches."))
H.facial_hairstyle = beard_order[index]
H.update_hair(is_creating = TRUE)
H.update_body_parts()
@@ -45,4 +45,4 @@
H.hairstyle = "Bald"
else
H.hairstyle = "Balding Hair"
H.update_hair(is_creating = TRUE)
H.update_body_parts()
+2 -2
View File
@@ -608,8 +608,8 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
external_organ.mutate_feature(features, src)
if(icon_update)
dna.species.handle_body(src) // We want 'update_body_parts()' to be called only if mutcolor_update is TRUE, so no 'update_body()' here.
update_hair(is_creating = TRUE)
dna.species.handle_body(src) // We want 'update_body_parts(update_limb_data = TRUE)' to be called only if mutcolor_update is TRUE, so no 'update_body()' here.
update_body_parts() //We can call this because it doesnt refresh limb data, and it handles hair and such.
if(mutcolor_update)
update_body_parts(update_limb_data = TRUE)
if(mutations_overlay_update)
+2 -2
View File
@@ -294,7 +294,7 @@
var/mob/living/carbon/human/human_holder = quirk_holder
old_hair = human_holder.hairstyle
human_holder.hairstyle = "Bald"
human_holder.update_hair(is_creating = TRUE)
human_holder.update_body_parts()
RegisterSignal(human_holder, COMSIG_CARBON_EQUIP_HAT, .proc/equip_hat)
RegisterSignal(human_holder, COMSIG_CARBON_UNEQUIP_HAT, .proc/unequip_hat)
@@ -314,7 +314,7 @@
. = ..()
var/mob/living/carbon/human/human_holder = quirk_holder
human_holder.hairstyle = old_hair
human_holder.update_hair(is_creating = TRUE)
human_holder.update_body_parts()
UnregisterSignal(human_holder, list(COMSIG_CARBON_EQUIP_HAT, COMSIG_CARBON_UNEQUIP_HAT))
human_holder.clear_mood_event("bad_hair_day")
+3 -3
View File
@@ -121,7 +121,7 @@
else
H.hairstyle = "Skinhead"
H.update_hair(is_creating = TRUE)
H.update_body_parts()
playsound(loc, 'sound/items/welder2.ogg', 20, TRUE)
@@ -150,7 +150,7 @@
if(new_style && do_after(user, 60, target = H))
user.visible_message(span_notice("[user] successfully changes [H]'s facial hairstyle using [src]."), span_notice("You successfully change [H]'s facial hairstyle using [src]."))
H.facial_hairstyle = new_style
H.update_hair(is_creating = TRUE)
H.update_body_parts()
return
else
return
@@ -201,7 +201,7 @@
if(new_style && do_after(user, 60, target = H))
user.visible_message(span_notice("[user] successfully changes [H]'s hairstyle using [src]."), span_notice("You successfully change [H]'s hairstyle using [src]."))
H.hairstyle = new_style
H.update_hair(is_creating = TRUE)
H.update_body_parts()
return
else
+1 -1
View File
@@ -47,4 +47,4 @@
human_target.grad_style[gradient_key] = new_grad_style
human_target.grad_color[gradient_key] = sanitize_hexcolor(new_grad_color)
playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 5)
human_target.update_hair(is_creating = TRUE)
human_target.update_body_parts()
+2 -2
View File
@@ -49,7 +49,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
hairdresser.hairstyle = new_style
hairdresser.update_hair(is_creating = TRUE)
hairdresser.update_body_parts()
/obj/structure/mirror/examine_status(mob/user)
if(broken)
@@ -250,7 +250,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/mirror, 28)
if(new_face_color)
amazed_human.facial_hair_color = sanitize_hexcolor(new_face_color)
amazed_human.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
amazed_human.update_hair()
amazed_human.update_body_parts()
if(BODY_ZONE_PRECISE_EYES)
var/new_eye_color = input(amazed_human, "Choose your eye color", "Eye Color", amazed_human.eye_color_left) as color|null
+1 -1
View File
@@ -188,7 +188,7 @@
icon = H.icon
icon_state = "zombie"
H.hairstyle = null
H.update_hair(is_creating = TRUE)
H.update_body_parts()
H.forceMove(src)
oldguy = H
update_icons()
@@ -95,7 +95,7 @@
H.temporarilyRemoveItemFromInventory(H.wear_suit, TRUE)
H.update_worn_oversuit()
H.update_worn_head()
H.update_hair(is_creating = TRUE)
H.update_body_parts()
if(blood_on_castoff)
H.add_splatter_floor()
+1 -1
View File
@@ -41,7 +41,7 @@
var/mob/living/carbon/human/dummy/consistent/victim_dummy = new
victim_dummy.hair_color = "#bb9966" // Brown
victim_dummy.hairstyle = "Messy"
victim_dummy.update_hair(is_creating = TRUE)
victim_dummy.update_body_parts()
var/icon/obsessed_icon = render_preview_outfit(preview_outfit)
obsessed_icon.Blend(icon('icons/effects/blood.dmi', "uniformblood"), ICON_OVERLAY)
@@ -206,7 +206,7 @@
/datum/antagonist/rev/head/proc/make_assistant_icon(hairstyle)
var/mob/living/carbon/human/dummy/consistent/assistant = new
assistant.hairstyle = hairstyle
assistant.update_hair(is_creating = TRUE)
assistant.update_body_parts()
var/icon/assistant_icon = render_preview_outfit(/datum/outfit/job/assistant/consistent, assistant)
assistant_icon.ChangeOpacity(0.5)
+1 -1
View File
@@ -165,7 +165,7 @@
thief.physique = FEMALE //update_body() and gender block or something
thief.hair_color = "#2A71DC" //hair color dna block
thief.skin_tone = "caucasian2" //skin tone dna block
thief.hairstyle = "Bun Head 2" //update_hair()
thief.hairstyle = "Bun Head 2" //update_body_parts()
thief.dna.update_ui_block(DNA_GENDER_BLOCK)
thief.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
thief.dna.update_ui_block(DNA_SKIN_TONE_BLOCK)
@@ -66,7 +66,7 @@
/datum/preference/choiced/facial_hairstyle/apply_to_human(mob/living/carbon/human/target, value)
target.facial_hairstyle = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/choiced/facial_hairstyle/compile_constant_data()
var/list/data = ..()
@@ -83,7 +83,7 @@
/datum/preference/color/facial_hair_color/apply_to_human(mob/living/carbon/human/target, value)
target.facial_hair_color = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/choiced/facial_hair_gradient
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
@@ -97,7 +97,7 @@
/datum/preference/choiced/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value)
LAZYSETLEN(target.grad_style, GRADIENTS_LEN)
target.grad_style[GRADIENT_FACIAL_HAIR_KEY] = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/choiced/facial_hair_gradient/create_default_value()
return "None"
@@ -111,7 +111,7 @@
/datum/preference/color/facial_hair_gradient/apply_to_human(mob/living/carbon/human/target, value)
LAZYSETLEN(target.grad_color, GRADIENTS_LEN)
target.grad_color[GRADIENT_FACIAL_HAIR_KEY] = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/color/facial_hair_gradient/is_accessible(datum/preferences/preferences)
if (!..(preferences))
@@ -160,7 +160,7 @@
/datum/preference/choiced/hair_gradient/apply_to_human(mob/living/carbon/human/target, value)
LAZYSETLEN(target.grad_style, GRADIENTS_LEN)
target.grad_style[GRADIENT_HAIR_KEY] = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/choiced/hair_gradient/create_default_value()
return "None"
@@ -174,7 +174,7 @@
/datum/preference/color/hair_gradient/apply_to_human(mob/living/carbon/human/target, value)
LAZYSETLEN(target.grad_color, GRADIENTS_LEN)
target.grad_color[GRADIENT_HAIR_KEY] = value
target.update_hair(is_creating = TRUE)
target.update_body_parts()
/datum/preference/color/hair_gradient/is_accessible(datum/preferences/preferences)
if (!..(preferences))
+1 -1
View File
@@ -25,4 +25,4 @@
H.facial_hairstyle = "Beard (Full)"
H.hair_color = "#FFFFFF"
H.facial_hair_color = "#FFFFFF"
H.update_hair(is_creating = TRUE)
H.update_body_parts()
+3 -3
View File
@@ -46,7 +46,7 @@
if(brainmob && !(C.stat == DEAD || (HAS_TRAIT(C, TRAIT_DEATHCOMA))))
to_chat(brainmob, span_danger("You can't feel your body! You're still just a brain!"))
forceMove(C)
C.update_hair()
C.update_body_parts()
return
if(brainmob)
@@ -71,7 +71,7 @@
BT.on_gain()
//Update the body's icon so it doesnt appear debrained anymore
C.update_hair()
C.update_body_parts()
/obj/item/organ/internal/brain/Remove(mob/living/carbon/C, special = 0, no_id_transfer = FALSE)
// Delete skillchips first as parent proc sets owner to null, and skillchips need to know the brain's owner.
@@ -91,7 +91,7 @@
if((!gc_destroyed || (owner && !owner.gc_destroyed)) && !no_id_transfer)
transfer_identity(C)
C.update_hair()
C.update_body_parts()
/obj/item/organ/internal/brain/proc/transfer_identity(mob/living/L)
name = "[L.name]'s brain"
@@ -664,7 +664,7 @@
emote("scream")
facial_hairstyle = "Shaved"
hairstyle = "Bald"
update_hair(is_creating = TRUE)
update_body_parts()
ADD_TRAIT(src, TRAIT_DISFIGURED, TRAIT_GENERIC)
update_damage_overlays()
@@ -16,7 +16,7 @@ Most of the time we only wish to update one overlay:
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()
e.g.2 - update_body_parts()
Note: Recent changes by aranclanos+carn:
update_icons() no longer needs to be called.
@@ -41,23 +41,10 @@ There are several things that need to be remembered:
> 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())
update_body_parts() //Handles bodyparts, and everything bodyparts render. (Organs, hair, facial features)
update_body() //Calls update_body_parts(), as well as updates mutant bodyparts, the old, not-actually-bodypart system.
*/
//HAIR OVERLAY
/mob/living/carbon/human/update_hair(is_creating)
var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD)
if(!my_head)
return
my_head.update_limb(FALSE, is_creating)
update_body_parts()
/* --------------------------------------- */
//For legacy support.
/mob/living/carbon/human/regenerate_icons()
@@ -454,7 +441,7 @@ There are several things that need to be remembered:
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_body_parts()
update_mutant_bodyparts()
apply_overlay(SUIT_LAYER)
@@ -289,7 +289,7 @@
/mob/living/carbon/human/wear_mask_update(obj/item/I, toggle_off = 1)
if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || (initial(I.flags_inv) & (HIDEHAIR|HIDEFACIALHAIR)))
update_hair()
update_body_parts()
if(toggle_off && internal && !getorganslot(ORGAN_SLOT_BREATHING_TUBE))
internal = null
if(I.flags_inv & HIDEEYES)
@@ -299,7 +299,7 @@
/mob/living/carbon/human/head_update(obj/item/I, forced)
if((I.flags_inv & (HIDEHAIR|HIDEFACIALHAIR)) || forced)
update_hair()
update_body_parts()
if(I.flags_inv & HIDEEYES || forced)
update_worn_glasses()
if(I.flags_inv & HIDEEARS || forced)
@@ -786,6 +786,10 @@ GLOBAL_LIST_EMPTY(features_by_species)
if(BODY_FRONT_LAYER)
return "FRONT"
///Proc that will randomise the hair, or primary appearance element (i.e. for moths wings) of a species' associated mob
/datum/species/proc/randomize_main_appearance_element(mob/living/carbon/human/human_mob)
human_mob.hairstyle = random_hairstyle(human_mob.gender)
human_mob.update_body_parts()
///Proc that will randomise the underwear (i.e. top, pants and socks) of a species' associated mob
/datum/species/proc/randomize_active_underwear(mob/living/carbon/human/human_mob)
@@ -1047,7 +1051,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
return
target.facial_hairstyle = "Shaved"
target.hairstyle = "Bald"
target.update_hair(is_creating = TRUE)
target.update_body_parts()
//////////////////
// ATTACK PROCS //
@@ -77,8 +77,6 @@
var/obj/item/organ/internal/heart/ethereal/ethereal_heart = C.getorganslot(ORGAN_SLOT_HEART)
ethereal_heart.ethereal_color = default_color
//The following code is literally only to make admin-spawned ethereals not be black.
C.dna.features["mcolor"] = C.dna.features["ethcolor"] //Ethcolor and Mut color are both dogshit and i hate them
for(var/obj/item/bodypart/limb as anything in C.bodyparts)
if(limb.limb_id == SPECIES_ETHEREAL)
limb.update_limb(is_creating = TRUE)
@@ -121,7 +119,9 @@
else
ethereal_light.set_light_on(FALSE)
fixed_mut_color = rgb(128,128,128)
ethereal.update_body(is_creating = TRUE)
ethereal.hair_color = current_color
ethereal.facial_hair_color = current_color
ethereal.update_body()
/datum/species/ethereal/proc/on_emp_act(mob/living/carbon/human/H, severity)
SIGNAL_HANDLER
@@ -128,7 +128,7 @@
/datum/species/human/felinid/prepare_human_for_preview(mob/living/carbon/human/human_for_preview)
human_for_preview.hairstyle = "Hime Cut"
human_for_preview.hair_color = "#ffcccc" // pink
human_for_preview.update_hair(is_creating = TRUE)
human_for_preview.update_body_parts()
var/obj/item/organ/internal/ears/cat/cat_ears = human_for_preview.getorgan(/obj/item/organ/internal/ears/cat)
if (cat_ears)
@@ -19,7 +19,7 @@
/datum/species/human/prepare_human_for_preview(mob/living/carbon/human/human)
human.hairstyle = "Business Hair"
human.hair_color = "#bb9966" // brown
human.update_hair(is_creating = TRUE)
human.update_body_parts()
/datum/species/human/randomize_features(mob/living/carbon/human/human_mob)
human_mob.skin_tone = random_skin_tone()
@@ -29,7 +29,7 @@
/mob/living/carbon/human/cure_husk(list/sources)
. = ..()
if(.)
update_hair()
update_body_parts()
/mob/living/carbon/human/become_husk(source)
if(istype(dna.species, /datum/species/skeleton)) //skeletons shouldn't be husks.
@@ -37,4 +37,4 @@
return
. = ..()
if(.)
update_hair()
update_body_parts()
+1 -1
View File
@@ -211,7 +211,7 @@
wearer.update_worn_head()
wearer.update_worn_mask()
wearer.update_worn_glasses()
wearer.update_hair()
wearer.update_body_parts()
/// Finishes the suit's activation, starts processing
/obj/item/mod/control/proc/finish_activation(on)
@@ -2015,10 +2015,10 @@ All effects don't start immediately, but rather get worse over time; the rate is
continue
is_between_the_sheets = TRUE
break
if(!drinker.IsSleeping() || !is_between_the_sheets)
return
if(drinker.getBruteLoss() && drinker.getFireLoss()) //If you are damaged by both types, slightly increased healing but it only heals one. The more the merrier wink wink.
if(prob(50))
drinker.adjustBruteLoss(-0.25 * REM * delta_time)
@@ -2397,12 +2397,12 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(metabolizer.age > 70)
metabolizer.facial_hair_color = "#cccccc"
metabolizer.hair_color = "#cccccc"
metabolizer.update_hair(is_creating = TRUE)
metabolizer.update_body_parts()
if(metabolizer.age > 100)
metabolizer.become_nearsighted(type)
if(metabolizer.gender == MALE)
metabolizer.facial_hairstyle = "Beard (Very Long)"
metabolizer.update_hair(is_creating = TRUE)
metabolizer.update_body_parts()
if(metabolizer.age > 969) //Best not let people get older than this or i might incur G-ds wrath
metabolizer.visible_message(span_notice("[metabolizer] becomes older than any man should be.. and crumbles into dust!"))
@@ -121,7 +121,7 @@
var/mob/living/carbon/human/H = M
H.facial_hairstyle = "Shaved"
H.hairstyle = "Bald"
H.update_hair(is_creating = TRUE) // makes you loose hair as well
H.update_body_parts() // makes you loose hair as well
M.set_species(/datum/species/human/krokodil_addict)
M.adjustBruteLoss(50 * REM, 0) // holy shit your skin just FELL THE FUCK OFF
..()
@@ -708,7 +708,6 @@
druggy_dna.species.species_traits -= NOBLOODOVERLAY
invisible_man.update_body()
invisible_man.update_hair()
invisible_man.sound_environment_override = NONE
if(!invisible_man.hud_used)
@@ -1082,7 +1082,7 @@
var/mob/living/carbon/human/exposed_human = exposed_mob
exposed_human.hair_color = "#CC22FF"
exposed_human.facial_hair_color = "#CC22FF"
exposed_human.update_hair()
exposed_human.update_body_parts()
/datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
M.adjustBruteLoss(-1.5 * REM * delta_time, 0)
@@ -1453,7 +1453,7 @@
return
exposed_human.hair_color = "#9922ff"
exposed_human.facial_hair_color = "#9922ff"
exposed_human.update_hair()
exposed_human.update_body_parts()
/datum/reagent/medicine/polypyr/overdose_process(mob/living/M, delta_time, times_fired)
M.adjustOrganLoss(ORGAN_SLOT_LUNGS, 0.5 * REM * delta_time)
@@ -2185,7 +2185,7 @@
var/mob/living/carbon/human/exposed_human = exposed_mob
exposed_human.hair_color = pick(potential_colors)
exposed_human.facial_hair_color = pick(potential_colors)
exposed_human.update_hair()
exposed_human.update_body_parts()
/datum/reagent/barbers_aid
name = "Barber's Aid"
@@ -2207,7 +2207,7 @@
to_chat(exposed_human, span_notice("Hair starts sprouting from your scalp."))
exposed_human.hairstyle = picked_hair
exposed_human.facial_hairstyle = picked_beard
exposed_human.update_hair(is_creating = TRUE)
exposed_human.update_body_parts()
/datum/reagent/concentrated_barbers_aid
name = "Concentrated Barber's Aid"
@@ -2227,7 +2227,7 @@
to_chat(exposed_human, span_notice("Your hair starts growing at an incredible speed!"))
exposed_human.hairstyle = "Very Long Hair"
exposed_human.facial_hairstyle = "Beard (Very Long)"
exposed_human.update_hair(is_creating = TRUE)
exposed_human.update_body_parts()
/datum/reagent/concentrated_barbers_aid/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
. = ..()
@@ -2249,7 +2249,7 @@
else
message = span_notice("Your scalp mutates, a full head of hair sprouting from it.")
to_chat(M, message)
human_mob.update_hair(is_creating = TRUE)
human_mob.update_body_parts()
/datum/reagent/baldium
name = "Baldium"
@@ -2269,7 +2269,7 @@
to_chat(exposed_human, span_danger("Your hair is falling out in clumps!"))
exposed_human.hairstyle = "Bald"
exposed_human.facial_hairstyle = "Shaved"
exposed_human.update_hair(is_creating = TRUE)
exposed_human.update_body_parts()
/datum/reagent/saltpetre
name = "Saltpetre"
@@ -111,7 +111,7 @@
if(affected_human.gender == MALE)
to_chat(affected_human, span_warning("Your chin itches."))
affected_human.facial_hairstyle = "Beard (Full)"
affected_human.update_hair(is_creating = TRUE)
affected_human.update_body_parts()
//Only like gross food
affected_human.dna?.species.liked_food = GROSS
affected_human.dna?.species.disliked_food = NONE
+1 -3
View File
@@ -30,8 +30,6 @@
var/limb_id = SPECIES_HUMAN
//Defines what sprite the limb should use if it is also sexually dimorphic.
VAR_PROTECTED/limb_gender = "m"
///Does this limb have a greyscale version?
var/uses_mutcolor = TRUE
///Is there a sprite difference between male and female?
var/is_dimorphic = FALSE
///The actual color a limb is drawn as, set by /proc/update_limb()
@@ -660,7 +658,7 @@
else
skin_tone = ""
if(((MUTCOLORS in owner_species.species_traits) || (DYNCOLORS in owner_species.species_traits)) && uses_mutcolor) //Ethereal code. Motherfuckers.
if(((MUTCOLORS in owner_species.species_traits) || (DYNCOLORS in owner_species.species_traits))) //Ethereal code. Motherfuckers.
if(owner_species.fixed_mut_color)
species_color = owner_species.fixed_mut_color
else
@@ -140,7 +140,7 @@
synchronize_bodytypes(phantom_owner)
phantom_owner.update_health_hud() //update the healthdoll
phantom_owner.update_body()
phantom_owner.update_hair()
phantom_owner.update_body_parts()
if(!drop_loc) // drop_loc = null happens when a "dummy human" used for rendering icons on prefs screen gets its limbs replaced.
qdel(src)
@@ -418,6 +418,21 @@
pill_action.Grant(new_head_owner)
break
///Transfer existing hair properties to the new human.
if(!special && ishuman(new_head_owner))
var/mob/living/carbon/human/sexy_chad = new_head_owner
sexy_chad.hairstyle = hair_style
sexy_chad.hair_color = hair_color
sexy_chad.facial_hair_color = facial_hair_color
sexy_chad.facial_hairstyle = facial_hairstyle
if(hair_gradient_style || facial_hair_gradient_style)
LAZYSETLEN(sexy_chad.grad_style, GRADIENTS_LEN)
LAZYSETLEN(sexy_chad.grad_color, GRADIENTS_LEN)
sexy_chad.grad_style[GRADIENT_HAIR_KEY] = hair_gradient_style
sexy_chad.grad_color[GRADIENT_HAIR_KEY] = hair_gradient_color
sexy_chad.grad_style[GRADIENT_FACIAL_HAIR_KEY] = facial_hair_gradient_style
sexy_chad.grad_color[GRADIENT_FACIAL_HAIR_KEY] = facial_hair_gradient_color
new_head_owner.updatehealth()
new_head_owner.update_body()
new_head_owner.update_damage_overlays()
+111
View File
@@ -0,0 +1,111 @@
#define SET_OVERLAY_VALUE(X,Y,Z) if(X) X.Y = Z
///Part of `update_limb()`, this proc does what the name implies.
/obj/item/bodypart/head/proc/update_hair_and_lips()
var/mob/living/carbon/human/human_head_owner = owner
var/datum/species/owner_species = human_head_owner.dna.species
if(human_head_owner.lip_style && (LIPS in owner_species.species_traits))
lip_style = human_head_owner.lip_style
lip_color = human_head_owner.lip_color
else
lip_style = null
lip_color = "white"
///FACIAL HAIR CHECKS START
//we check if our hat or helmet hides our facial hair.
facial_hair_hidden = FALSE
if(human_head_owner.head)
var/obj/item/hat = human_head_owner.head
if(hat.flags_inv & HIDEFACIALHAIR)
facial_hair_hidden = TRUE
if(human_head_owner.wear_mask)
var/obj/item/mask = human_head_owner.wear_mask
if(mask.flags_inv & HIDEFACIALHAIR)
facial_hair_hidden = TRUE
///FACIAL HAIR CHECKS END
///HAIR CHECKS START
hair_hidden = FALSE
if(human_head_owner.head)
var/obj/item/hat = human_head_owner.head
if(hat.flags_inv & HIDEHAIR)
hair_hidden = TRUE
if(human_head_owner.w_uniform)
var/obj/item/item_uniform = human_head_owner.w_uniform
if(item_uniform.flags_inv & HIDEHAIR)
hair_hidden = TRUE
if(human_head_owner.wear_mask)
var/obj/item/mask = human_head_owner.wear_mask
if(mask.flags_inv & HIDEHAIR)
hair_hidden = TRUE
///HAIR CHECKS END
if(!hair_hidden && !owner.getorganslot(ORGAN_SLOT_BRAIN) && !(NOBLOOD in species_flags_list))
show_debrained = TRUE
else
show_debrained = FALSE
var/datum/sprite_accessory/sprite_accessory
facial_overlay = null
facial_gradient_overlay = null
hair_overlay = null
hair_gradient_overlay = null
hair_alpha = owner_species.hair_alpha
hair_color = human_head_owner.hair_color
facial_hair_color = human_head_owner.facial_hair_color
fixed_hair_color = owner_species.fixed_mut_color //Can be null
hair_style = human_head_owner.hairstyle
facial_hairstyle = human_head_owner.facial_hairstyle
if(facial_hairstyle && !facial_hair_hidden && (FACEHAIR in species_flags_list))
sprite_accessory = GLOB.facial_hairstyles_list[facial_hairstyle]
if(sprite_accessory)
//Create the overlay
facial_overlay = mutable_appearance(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER)
facial_overlay.overlays += emissive_blocker(facial_overlay.icon, facial_overlay.icon_state, alpha = hair_alpha)
//Gradients
facial_hair_gradient_style = LAZYACCESS(human_head_owner.grad_style, GRADIENT_FACIAL_HAIR_KEY)
if(facial_hair_gradient_style)
facial_hair_gradient_color = LAZYACCESS(human_head_owner.grad_color, GRADIENT_FACIAL_HAIR_KEY)
facial_gradient_overlay = make_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, HAIR_LAYER, GLOB.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color)
facial_overlay.overlays += emissive_blocker(sprite_accessory.icon, sprite_accessory.icon_state, alpha = hair_alpha)
if(!hair_hidden && !show_debrained && (HAIR in species_flags_list))
sprite_accessory = GLOB.hairstyles_list[hair_style]
if(sprite_accessory)
hair_overlay = mutable_appearance(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER)
hair_overlay.overlays += emissive_blocker(hair_overlay.icon, hair_overlay.icon_state, alpha = hair_alpha)
hair_gradient_style = LAZYACCESS(human_head_owner.grad_style, GRADIENT_HAIR_KEY)
if(hair_gradient_style)
hair_gradient_color = LAZYACCESS(human_head_owner.grad_color, GRADIENT_HAIR_KEY)
hair_gradient_overlay = make_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, HAIR_LAYER, GLOB.hair_gradients_list[hair_gradient_style], hair_gradient_color)
//CREATION-ONLY END
//HAIR COLOR START
if(!override_hair_color)
if(hair_color_source)
if(hair_color_source == "fixedmutcolor")
SET_OVERLAY_VALUE(facial_overlay, color, fixed_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, fixed_hair_color)
else if(hair_color_source == "mutcolor")
SET_OVERLAY_VALUE(facial_overlay, color, facial_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color)
else
SET_OVERLAY_VALUE(facial_overlay, color, hair_color_source)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color_source)
else
SET_OVERLAY_VALUE(facial_overlay, color, facial_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color)
else
SET_OVERLAY_VALUE(facial_overlay, color, override_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, override_hair_color)
//HAIR COLOR END
#undef SET_OVERLAY_VALUE
+7 -114
View File
@@ -166,7 +166,6 @@
return ..()
#define SET_OVERLAY_VALUE(X,Y,Z) if(X) X.Y = Z
/obj/item/bodypart/head/update_limb(dropping_limb, is_creating)
. = ..()
@@ -178,117 +177,10 @@
lip_style = null
stored_lipstick_trait = null
else if(!animal_origin && ishuman(owner))
var/mob/living/carbon/human/human_head_owner = owner
var/datum/species/owner_species = human_head_owner.dna.species
if(human_head_owner.lip_style && (LIPS in owner_species.species_traits))
lip_style = human_head_owner.lip_style
lip_color = human_head_owner.lip_color
else
lip_style = null
lip_color = "white"
///FACIAL HAIR CHECKS START
//we check if our hat or helmet hides our facial hair.
facial_hair_hidden = FALSE
if(human_head_owner.head)
var/obj/item/hat = human_head_owner.head
if(hat.flags_inv & HIDEFACIALHAIR)
facial_hair_hidden = TRUE
if(human_head_owner.wear_mask)
var/obj/item/mask = human_head_owner.wear_mask
if(mask.flags_inv & HIDEFACIALHAIR)
facial_hair_hidden = TRUE
///FACIAL HAIR CHECKS END
///HAIR CHECKS START
hair_hidden = FALSE
if(human_head_owner.head)
var/obj/item/hat = human_head_owner.head
if(hat.flags_inv & HIDEHAIR)
hair_hidden = TRUE
if(human_head_owner.w_uniform)
var/obj/item/item_uniform = human_head_owner.w_uniform
if(item_uniform.flags_inv & HIDEHAIR)
hair_hidden = TRUE
if(human_head_owner.wear_mask)
var/obj/item/mask = human_head_owner.wear_mask
if(mask.flags_inv & HIDEHAIR)
hair_hidden = TRUE
///HAIR CHECKS END
if(!hair_hidden && !owner.getorgan(/obj/item/organ/internal/brain) && !(NOBLOOD in species_flags_list))
show_debrained = TRUE
else
show_debrained = FALSE
//CREATION-ONLY START
if(is_creating)
var/datum/sprite_accessory/sprite_accessory
facial_overlay = null
facial_gradient_overlay = null
hair_overlay = null
hair_gradient_overlay = null
hair_alpha = owner_species.hair_alpha
hair_color = human_head_owner.hair_color
facial_hair_color = human_head_owner.facial_hair_color
fixed_hair_color = owner_species.fixed_mut_color //Can be null
hair_style = human_head_owner.hairstyle
facial_hairstyle = human_head_owner.facial_hairstyle
if(!animal_origin && ishuman(owner))
update_hair_and_lips()
if(facial_hairstyle && !facial_hair_hidden && (FACEHAIR in species_flags_list))
sprite_accessory = GLOB.facial_hairstyles_list[facial_hairstyle]
if(sprite_accessory)
//Create the overlay
facial_overlay = mutable_appearance(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER)
facial_overlay.overlays += emissive_blocker(facial_overlay.icon, facial_overlay.icon_state, alpha = hair_alpha)
//Gradients
facial_hair_gradient_style = LAZYACCESS(human_head_owner.grad_style, GRADIENT_FACIAL_HAIR_KEY)
if(facial_hair_gradient_style)
facial_hair_gradient_color = LAZYACCESS(human_head_owner.grad_color, GRADIENT_FACIAL_HAIR_KEY)
facial_gradient_overlay = make_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, HAIR_LAYER, GLOB.facial_hair_gradients_list[facial_hair_gradient_style], facial_hair_gradient_color)
facial_overlay.overlays += emissive_blocker(sprite_accessory.icon, sprite_accessory.icon_state, alpha = hair_alpha)
if(!hair_hidden && !show_debrained && (HAIR in species_flags_list))
sprite_accessory = GLOB.hairstyles_list[hair_style]
if(sprite_accessory)
hair_overlay = mutable_appearance(sprite_accessory.icon, sprite_accessory.icon_state, -HAIR_LAYER)
hair_overlay.overlays += emissive_blocker(hair_overlay.icon, hair_overlay.icon_state, alpha = hair_alpha)
hair_gradient_style = LAZYACCESS(human_head_owner.grad_style, GRADIENT_HAIR_KEY)
if(hair_gradient_style)
hair_gradient_color = LAZYACCESS(human_head_owner.grad_color, GRADIENT_HAIR_KEY)
hair_gradient_overlay = make_gradient_overlay(sprite_accessory.icon, sprite_accessory.icon_state, HAIR_LAYER, GLOB.hair_gradients_list[hair_gradient_style], hair_gradient_color)
//CREATION-ONLY END
//HAIR COLOR START
if(!override_hair_color)
if(hair_color_source)
if(hair_color_source == "fixedmutcolor")
SET_OVERLAY_VALUE(facial_overlay, color, fixed_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, fixed_hair_color)
else if(hair_color_source == "mutcolor")
SET_OVERLAY_VALUE(facial_overlay, color, facial_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color)
else
SET_OVERLAY_VALUE(facial_overlay, color, hair_color_source)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color_source)
else
SET_OVERLAY_VALUE(facial_overlay, color, facial_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, hair_color)
else
SET_OVERLAY_VALUE(facial_overlay, color, override_hair_color)
SET_OVERLAY_VALUE(hair_overlay, color, override_hair_color)
//HAIR COLOR END
#undef SET_OVERLAY_VALUE
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/obj/item/bodypart/head/get_limb_icon(dropped, draw_external_organs)
@@ -361,10 +253,11 @@
. += hair_overlay
if(hair_gradient_overlay)
. += hair_gradient_overlay
///Set the haircolor of a human. Override instead sets the override value, it will not be changed away from the override value until override is set to null.
/mob/proc/set_haircolor(hex_string, override)
/mob/living/proc/set_haircolor(hex_string, override)
return
///Set the haircolor of a human. Override instead sets the override value, it will not be changed away from the override value until override is set to null.
/mob/living/carbon/human/set_haircolor(hex_string, override)
var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD)
if(!my_head)
@@ -373,8 +266,8 @@
if(override)
my_head.override_hair_color = hex_string
else
my_head.hair_color = hex_string
update_hair(is_creating = TRUE)
hair_color = hex_string
update_body_parts()
/obj/item/bodypart/head/proc/make_gradient_overlay(file, icon, layer, datum/sprite_accessory/gradient, grad_color)
RETURN_TYPE(/mutable_appearance)
@@ -2,30 +2,67 @@
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
is_dimorphic = FALSE
uses_mutcolor = TRUE
/obj/item/bodypart/head/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
/obj/item/bodypart/chest/ethereal
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
is_dimorphic = FALSE
uses_mutcolor = TRUE
/obj/item/bodypart/chest/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
/obj/item/bodypart/l_arm/ethereal
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
uses_mutcolor = TRUE
/obj/item/bodypart/l_arm/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
/obj/item/bodypart/r_arm/ethereal
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
uses_mutcolor = TRUE
/obj/item/bodypart/r_arm/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
/obj/item/bodypart/l_leg/ethereal
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
uses_mutcolor = TRUE
/obj/item/bodypart/l_leg/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
/obj/item/bodypart/r_leg/ethereal
icon_greyscale = 'icons/mob/species/ethereal/bodyparts.dmi'
limb_id = SPECIES_ETHEREAL
uses_mutcolor = TRUE
/obj/item/bodypart/r_leg/ethereal/update_limb(dropping_limb, is_creating)
. = ..()
if(isethereal(owner))
var/mob/living/carbon/human/potato_oc = owner
var/datum/species/ethereal/eth_holder = potato_oc.dna.species
species_color = eth_holder.current_color
@@ -1,38 +1,31 @@
/obj/item/bodypart/head/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
limb_id = SPECIES_LIZARD
uses_mutcolor = TRUE
is_dimorphic = FALSE
/obj/item/bodypart/chest/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = SPECIES_LIZARD
is_dimorphic = TRUE
/obj/item/bodypart/l_arm/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = SPECIES_LIZARD
/obj/item/bodypart/r_arm/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = SPECIES_LIZARD
/obj/item/bodypart/l_leg/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = SPECIES_LIZARD
/obj/item/bodypart/r_leg/lizard
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = SPECIES_LIZARD
/obj/item/bodypart/l_leg/digitigrade
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = BODYPART_TYPE_DIGITIGRADE
bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE
@@ -59,7 +52,6 @@
/obj/item/bodypart/r_leg/digitigrade
icon_greyscale = 'icons/mob/species/lizard/bodyparts.dmi'
uses_mutcolor = TRUE
limb_id = BODYPART_TYPE_DIGITIGRADE
bodytype = BODYTYPE_HUMANOID | BODYTYPE_ORGANIC | BODYTYPE_DIGITIGRADE
+1
View File
@@ -4378,6 +4378,7 @@
#include "code\modules\surgery\advanced\bioware\vein_threading.dm"
#include "code\modules\surgery\bodyparts\_bodyparts.dm"
#include "code\modules\surgery\bodyparts\dismemberment.dm"
#include "code\modules\surgery\bodyparts\hair.dm"
#include "code\modules\surgery\bodyparts\head.dm"
#include "code\modules\surgery\bodyparts\helpers.dm"
#include "code\modules\surgery\bodyparts\parts.dm"