diff --git a/code/modules/surgery/organs/external/_external_organs.dm b/code/modules/surgery/organs/external/_external_organs.dm index aa42f3dc8e8..0fe24270ccd 100644 --- a/code/modules/surgery/organs/external/_external_organs.dm +++ b/code/modules/surgery/organs/external/_external_organs.dm @@ -41,6 +41,8 @@ var/draw_color ///Where does this organ inherit it's color from? var/color_source = ORGAN_COLOR_INHERIT + ///FALSE will set the color on the organ, TRUE will call get_overlay_color() for every layer and put it directly on the overlay + var/apply_color_to_layer = FALSE ///Does this organ have any bodytypes to pass to it's ownerlimb? var/external_bodytypes = NONE @@ -164,6 +166,9 @@ if(sprite_datum.color_src) appearance.color = draw_color + if(apply_color_to_layer) + appearance.color = get_overlay_color(image_layer) + if(sprite_datum.center) center_image(appearance, sprite_datum.dimension_x, sprite_datum.dimension_y) @@ -264,13 +269,18 @@ return var/mob/living/carbon/human/human_owner = ownerlimb.owner draw_color = human_owner.hair_color - color = draw_color + if(!apply_color_to_layer) + color = draw_color return TRUE ///Colorizes the limb it's inserted to, if required. /obj/item/organ/external/proc/override_color(rgb_value) CRASH("External organ color set to override with no override proc.") +///Return a color for our specific layer +/obj/item/organ/external/proc/get_overlay_color(draw_layer) + return draw_color + ///The horns of a lizard! /obj/item/organ/external/horns name = "horns" @@ -425,7 +435,12 @@ dna_block = DNA_POD_HAIR_BLOCK restyle_flags = EXTERNAL_RESTYLE_PLANT - color_source = ORGAN_COLOR_OVERRIDE + apply_color_to_layer = TRUE + + ///This layer will be colored differently than the rest of the organ. So we can get differently colored flowers or something + var/color_swapped_layer = EXTERNAL_FRONT + ///The individual rgb colors are subtracted from this to get the color shifted layer + var/color_inverse_base = 255 /obj/item/organ/external/pod_hair/get_global_feature_list() return GLOB.pod_hair_list @@ -435,13 +450,9 @@ return TRUE return FALSE -/obj/item/organ/external/pod_hair/get_global_feature_list() - return GLOB.pod_hair_list +/obj/item/organ/external/pod_hair/get_overlay_color(draw_layer) + if(draw_layer != bitflag_to_layer(color_swapped_layer)) + return ..() -/obj/item/organ/external/pod_hair/override_color(rgb_value) - // SKYRAT EDIT START - I hate non-sensical errors sometimes. - if(!findtext(rgb_value, "#", 1, 2)) - rgb_value = "#[rgb_value]" - // SKYRAT EDIT END - var/list/rgb_list = rgb2num(rgb_value) - return rgb(255 - rgb_list[1], 255 - rgb_list[2], 255 - rgb_list[3]) + var/list/rgb_list = rgb2num(draw_color) + return rgb(color_inverse_base - rgb_list[1], color_inverse_base - rgb_list[2], color_inverse_base - rgb_list[3])