diff --git a/code/__DEFINES/DNA.dm b/code/__DEFINES/DNA.dm index 035563627f..a8026f752b 100644 --- a/code/__DEFINES/DNA.dm +++ b/code/__DEFINES/DNA.dm @@ -79,21 +79,22 @@ //DNA - Because fuck you and your magic numbers being all over the codebase. #define DNA_BLOCK_SIZE 3 -#define DNA_UNI_IDENTITY_BLOCKS 14 +#define DNA_UNI_IDENTITY_BLOCKS 15 #define DNA_HAIR_COLOR_BLOCK 1 #define DNA_FACIAL_HAIR_COLOR_BLOCK 2 #define DNA_SKIN_TONE_BLOCK 3 -#define DNA_EYE_COLOR_BLOCK 4 -#define DNA_GENDER_BLOCK 5 -#define DNA_FACIAL_HAIR_STYLE_BLOCK 6 -#define DNA_HAIR_STYLE_BLOCK 7 -#define DNA_COLOR_ONE_BLOCK 8 -#define DNA_COLOR_TWO_BLOCK 9 -#define DNA_COLOR_THREE_BLOCK 10 -#define DNA_MUTANTTAIL_BLOCK 11 -#define DNA_MUTANTEAR_BLOCK 12 -#define DNA_MUTANTMARKING_BLOCK 13 -#define DNA_TAUR_BLOCK 14 +#define DNA_LEFT_EYE_COLOR_BLOCK 4 +#define DNA_RIGHT_EYE_COLOR_BLOCK 5 +#define DNA_GENDER_BLOCK 6 +#define DNA_FACIAL_HAIR_STYLE_BLOCK 7 +#define DNA_HAIR_STYLE_BLOCK 8 +#define DNA_COLOR_ONE_BLOCK 9 +#define DNA_COLOR_TWO_BLOCK 10 +#define DNA_COLOR_THREE_BLOCK 11 +#define DNA_MUTANTTAIL_BLOCK 12 +#define DNA_MUTANTEAR_BLOCK 13 +#define DNA_MUTANTMARKING_BLOCK 14 +#define DNA_TAUR_BLOCK 15 #define DNA_SEQUENCE_LENGTH 4 #define DNA_MUTATION_BLOCKS 8 diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 9486029fdd..843ea06f74 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -132,7 +132,8 @@ L[DNA_FACIAL_HAIR_STYLE_BLOCK] = construct_block(GLOB.facial_hair_styles_list.Find(H.facial_hair_style), GLOB.facial_hair_styles_list.len) L[DNA_FACIAL_HAIR_COLOR_BLOCK] = sanitize_hexcolor(H.facial_hair_color) L[DNA_SKIN_TONE_BLOCK] = construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len) - L[DNA_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.eye_color) + L[DNA_LEFT_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.left_eye_color) + L[DNA_RIGHT_EYE_COLOR_BLOCK] = sanitize_hexcolor(H.right_eye_color) L[DNA_COLOR_ONE_BLOCK] = sanitize_hexcolor(features["mcolor"], 6) L[DNA_COLOR_TWO_BLOCK] = sanitize_hexcolor(features["mcolor2"], 6) L[DNA_COLOR_THREE_BLOCK] = sanitize_hexcolor(features["mcolor3"], 6) @@ -224,8 +225,10 @@ setblock(uni_identity, blocknumber, sanitize_hexcolor(H.facial_hair_color)) if(DNA_SKIN_TONE_BLOCK) setblock(uni_identity, blocknumber, construct_block(GLOB.skin_tones.Find(H.skin_tone), GLOB.skin_tones.len)) - if(DNA_EYE_COLOR_BLOCK) - setblock(uni_identity, blocknumber, sanitize_hexcolor(H.eye_color)) + if(DNA_LEFT_EYE_COLOR_BLOCK) + setblock(uni_identity, blocknumber, sanitize_hexcolor(H.left_eye_color)) + if(DNA_RIGHT_EYE_COLOR_BLOCK) + setblock(uni_identity, blocknumber, sanitize_hexcolor(H.right_eye_color)) if(DNA_GENDER_BLOCK) switch(H.gender) if(MALE) @@ -464,7 +467,8 @@ hair_color = sanitize_hexcolor(getblock(structure, DNA_HAIR_COLOR_BLOCK)) facial_hair_color = sanitize_hexcolor(getblock(structure, DNA_FACIAL_HAIR_COLOR_BLOCK)) skin_tone = dna.skin_tone_override || GLOB.skin_tones[deconstruct_block(getblock(structure, DNA_SKIN_TONE_BLOCK), GLOB.skin_tones.len)] - eye_color = sanitize_hexcolor(getblock(structure, DNA_EYE_COLOR_BLOCK)) + left_eye_color = sanitize_hexcolor(getblock(structure, DNA_LEFT_EYE_COLOR_BLOCK)) + right_eye_color = sanitize_hexcolor(getblock(structure, DNA_RIGHT_EYE_COLOR_BLOCK)) facial_hair_style = GLOB.facial_hair_styles_list[deconstruct_block(getblock(structure, DNA_FACIAL_HAIR_STYLE_BLOCK), GLOB.facial_hair_styles_list.len)] hair_style = GLOB.hair_styles_list[deconstruct_block(getblock(structure, DNA_HAIR_STYLE_BLOCK), GLOB.hair_styles_list.len)] if(icon_update) diff --git a/code/game/objects/items/implants/implant_hijack.dm b/code/game/objects/items/implants/implant_hijack.dm index 5dd610059c..36e58d8887 100644 --- a/code/game/objects/items/implants/implant_hijack.dm +++ b/code/game/objects/items/implants/implant_hijack.dm @@ -7,7 +7,8 @@ activated = 1 var/toggled = FALSE icon_state = "hijack" - var/eye_color + var/left_eye_color + var/right_eye_color var/stealthmode = FALSE var/stealthcooldown = 0 var/hijacking = FALSE @@ -25,8 +26,10 @@ return var/on = toggled && !stealthmode var/mob/living/carbon/human/H = imp_in - H.eye_color = on ? "ff0" : eye_color - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.left_eye_color = on ? "ff0" : left_eye_color + H.right_eye_color = on ? "ff0" : right_eye_color + H.dna.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK) + H.dna.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK) H.update_body() /obj/item/implant/hijack/implant(mob/living/target, mob/user, silent = FALSE) @@ -34,7 +37,8 @@ ADD_TRAIT(target, TRAIT_HIJACKER, "implant") if (ishuman(target)) var/mob/living/carbon/human/H = target - eye_color = H.eye_color + left_eye_color = H.left_eye_color + right_eye_color = H.right_eye_color return TRUE /obj/item/implant/hijack/removed(mob/living/source, silent = FALSE, special = 0) @@ -49,7 +53,8 @@ apc.update_icon() if (ishuman(source)) var/mob/living/carbon/human/H = source - H.eye_color = eye_color + H.left_eye_color = left_eye_color + H.right_eye_color = left_eye_color return TRUE /obj/item/implant/hijack/proc/InterceptClickOn(mob/living/user,params,atom/object) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index 237cfdbf0b..758685ede7 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -229,17 +229,32 @@ H.update_hair() if(BODY_ZONE_PRECISE_EYES) - var/new_eye_color = input(H, "Choose your eye color", "Eye Color","#"+H.eye_color) as color|null - if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - if(new_eye_color) - var/n_color = sanitize_hexcolor(new_eye_color) - var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) - if(eyes) - eyes.eye_color = n_color - H.eye_color = n_color - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - H.dna.species.handle_body() + var/eye_type = input(H, "Choose the eye you want to color", "Eye Color") as null|anything in list("Both Eyes", "Left Eye", "Right Eye") + if(eye_type) + var/input_color = H.left_eye_color + if(eye_type == "Right Eye") + input_color = H.right_eye_color + var/new_eye_color = input(H, "Choose your eye color", "Eye Color","#"+input_color) as color|null + if(!user.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) + return + if(new_eye_color) + var/n_color = sanitize_hexcolor(new_eye_color) + var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) + var/left_color = n_color + var/right_color = n_color + if(eye_type == "Left Eye") + right_color = H.right_eye_color + else + if(eye_type == "Right Eye") + left_color = H.left_eye_color + if(eyes) + eyes.left_eye_color = left_color + eyes.right_eye_color = right_color + H.left_eye_color = left_color + H.right_eye_color = right_color + H.dna.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK) + H.dna.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK) + H.dna.species.handle_body() if(choice) curse(user) diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 59651b17d5..e287d9b1b3 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -24,7 +24,9 @@ H.facial_hair_style = random_facial_hair_style(H.gender) H.hair_color = random_short_color() H.facial_hair_color = H.hair_color - H.eye_color = random_eye_color() + var/random_eye_color = random_eye_color() + H.left_eye_color = random_eye_color + H.right_eye_color = random_eye_color H.dna.blood_type = random_blood_type() H.saved_underwear = H.underwear H.saved_undershirt = H.undershirt diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 87e116166e..61f6ec9998 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -142,8 +142,10 @@ if(ishuman(current)) var/mob/living/carbon/human/H = current var/obj/item/organ/eyes/eyes = H.getorganslot(ORGAN_SLOT_EYES) - H.eye_color = eyes?.eye_color || initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.left_eye_color = eyes?.left_eye_color || initial(H.left_eye_color) + H.right_eye_color = eyes?.right_eye_color || initial(H.right_eye_color) + H.dna?.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK) + H.dna?.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK) REMOVE_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist") H.update_body() H.cut_overlays() @@ -236,8 +238,10 @@ if(ishuman(current)) var/mob/living/carbon/human/H = current - H.eye_color = initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.left_eye_color = initial(H.left_eye_color) + H.right_eye_color = initial(H.right_eye_color) + H.dna?.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK) + H.dna?.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK) REMOVE_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist") H.cut_overlays() H.regenerate_icons() @@ -312,8 +316,10 @@ /datum/team/cult/proc/rise(cultist) if(ishuman(cultist)) var/mob/living/carbon/human/H = cultist - H.eye_color = "f00" - H.dna?.update_ui_block(DNA_EYE_COLOR_BLOCK) + H.left_eye_color = "f00" + H.right_eye_color = "f00" + H.dna?.update_ui_block(DNA_LEFT_EYE_COLOR_BLOCK) + H.dna?.update_ui_block(DNA_RIGHT_EYE_COLOR_BLOCK) ADD_TRAIT(H, TRAIT_CULT_EYES, "valid_cultist") H.update_body() diff --git a/code/modules/antagonists/fugitive/fugitive_outfits.dm b/code/modules/antagonists/fugitive/fugitive_outfits.dm index be11960692..242a7cc7fd 100644 --- a/code/modules/antagonists/fugitive/fugitive_outfits.dm +++ b/code/modules/antagonists/fugitive/fugitive_outfits.dm @@ -30,7 +30,8 @@ if(visualsOnly) return H.fully_replace_character_name(null,"Waldo") - H.eye_color = "000" + H.left_eye_color = "000" + H.right_eye_color = "000" H.gender = MALE H.skin_tone = "caucasian3" H.hair_style = "Business Hair 3" diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2fe674e59e..1502d744a4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -95,7 +95,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/facial_hair_color = "000000" //Facial hair color var/skin_tone = "caucasian1" //Skin color var/use_custom_skin_tone = FALSE - var/eye_color = "000000" //Eye color + var/left_eye_color = "000000" //Eye color + var/right_eye_color = "000000" + var/split_eye_colors = FALSE var/datum/species/pref_species = new /datum/species/human() //Mutant race var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", @@ -462,15 +464,22 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Sprite Size: [features["body_size"]*100]%
" if((EYECOLOR in pref_species.species_traits) && !(NOEYES in pref_species.species_traits)) - if(!use_skintones && !mutant_colors) dat += APPEARANCE_CATEGORY_COLUMN - - dat += "

Eye Color

" - - dat += "    Change
" - - dat += "" + if(left_eye_color != right_eye_color) + split_eye_colors = TRUE + dat += "

Heterochromia

" + dat += "[split_eye_colors ? "Enabled" : "Disabled"]
" + if(!split_eye_colors) + dat += "

Eye Color

" + dat += "    Change" + dat += "" + else + dat += "

Left Eye Color

" + dat += "    Change" + dat += "

Right Eye Color

" + dat += "    Change
" + dat += "" else if(use_skintones || mutant_colors) dat += "" @@ -1358,7 +1367,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) socks = random_socks() socks_color = random_short_color() if(BODY_ZONE_PRECISE_EYES) - eye_color = random_eye_color() + var/random_eye_color = random_eye_color() + left_eye_color = random_eye_color + right_eye_color = random_eye_color if("s_tone") skin_tone = random_skin_tone() use_custom_skin_tone = null @@ -1514,9 +1525,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) socks_color = sanitize_hexcolor(n_socks_color, 6) if("eyes") - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+eye_color) as color|null + var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference","#"+left_eye_color) as color|null if(new_eyes) - eye_color = sanitize_hexcolor(new_eyes, 6) + left_eye_color = sanitize_hexcolor(new_eyes, 6) + right_eye_color = sanitize_hexcolor(new_eyes, 6) + + if("eye_left") + var/new_eyes = input(user, "Choose your character's left eye colour:", "Character Preference","#"+left_eye_color) as color|null + if(new_eyes) + left_eye_color = sanitize_hexcolor(new_eyes, 6) + + if("eye_right") + var/new_eyes = input(user, "Choose your character's right eye colour:", "Character Preference","#"+right_eye_color) as color|null + if(new_eyes) + right_eye_color = sanitize_hexcolor(new_eyes, 6) + + if("toggle_split_eyes") + split_eye_colors = !split_eye_colors + right_eye_color = left_eye_color if("species") var/result = input(user, "Select a species", "Species Selection") as null|anything in GLOB.roundstart_race_names @@ -2486,12 +2512,15 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.gender = gender character.age = age - character.eye_color = eye_color + character.left_eye_color = left_eye_color + character.right_eye_color = right_eye_color var/obj/item/organ/eyes/organ_eyes = character.getorgan(/obj/item/organ/eyes) if(organ_eyes) - if(!initial(organ_eyes.eye_color)) - organ_eyes.eye_color = eye_color - organ_eyes.old_eye_color = eye_color + if(!initial(organ_eyes.left_eye_color)) + organ_eyes.left_eye_color = left_eye_color + organ_eyes.right_eye_color = right_eye_color + organ_eyes.old_left_eye_color = left_eye_color + organ_eyes.old_right_eye_color = right_eye_color character.hair_color = hair_color character.facial_hair_color = facial_hair_color character.skin_tone = skin_tone diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 55a594cf21..f1df0fe158 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 35 +#define SAVEFILE_VERSION_MAX 36 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -204,6 +204,10 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(S["species"] == "lizard") features["mam_snouts"] = features["snout"] + if(current_version < 36) + left_eye_color = S["eye_color"] + right_eye_color = S["eye_color"] + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -476,7 +480,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["age"] >> age S["hair_color"] >> hair_color S["facial_hair_color"] >> facial_hair_color - S["eye_color"] >> eye_color + S["left_eye_color"] >> left_eye_color + S["right_eye_color"] >> left_eye_color S["use_custom_skin_tone"] >> use_custom_skin_tone S["skin_tone"] >> skin_tone S["hair_style_name"] >> hair_style @@ -648,7 +653,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) hair_color = sanitize_hexcolor(hair_color, 6, FALSE) facial_hair_color = sanitize_hexcolor(facial_hair_color, 6, FALSE) - eye_color = sanitize_hexcolor(eye_color, 6, FALSE) + left_eye_color = sanitize_hexcolor(left_eye_color, 6, FALSE) + right_eye_color = sanitize_hexcolor(right_eye_color, 6, FALSE) var/static/allow_custom_skintones if(isnull(allow_custom_skintones)) @@ -777,7 +783,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["age"] , age) WRITE_FILE(S["hair_color"] , hair_color) WRITE_FILE(S["facial_hair_color"] , facial_hair_color) - WRITE_FILE(S["eye_color"] , eye_color) + WRITE_FILE(S["left_eye_color"] , left_eye_color) + WRITE_FILE(S["right_eye_color"] , right_eye_color) WRITE_FILE(S["use_custom_skin_tone"] , use_custom_skin_tone) WRITE_FILE(S["skin_tone"] , skin_tone) WRITE_FILE(S["hair_style_name"] , hair_style) diff --git a/code/modules/clothing/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index 3f6d21bcd2..11de0124cb 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -373,7 +373,7 @@ /obj/item/clothing/glasses/sunglasses/blindfold/white/update_icon(mob/living/carbon/human/user) if(ishuman(user) && !colored_before) - add_atom_colour("#[user.eye_color]", FIXED_COLOUR_PRIORITY) + add_atom_colour("#[user.left_eye_color]", FIXED_COLOUR_PRIORITY) colored_before = TRUE /obj/item/clothing/glasses/sunglasses/blindfold/white/worn_overlays(isinhands = FALSE, icon_file, used_state, style_flags = NONE) @@ -382,7 +382,7 @@ var/mob/living/carbon/human/H = loc var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes.dmi', "blindfoldwhite") M.appearance_flags |= RESET_COLOR - M.color = "#[H.eye_color]" + M.color = "#[H.left_eye_color]" . += M /obj/item/clothing/glasses/sunglasses/big diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index e03de83e02..73851283b1 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -868,7 +868,8 @@ if(1) to_chat(user, "Your appearance morphs to that of a very small humanoid ash dragon! You get to look like a freak without the cool abilities.") H.dna.features = list("mcolor" = "A02720", "tail_lizard" = "Dark Tiger", "tail_human" = "None", "snout" = "Sharp", "horns" = "Curled", "ears" = "None", "wings" = "None", "frills" = "None", "spines" = "Long", "body_markings" = "Dark Tiger Body", "legs" = "Digitigrade") - H.eye_color = "fee5a3" + H.left_eye_color = "fee5a3" + H.right_eye_color = "fee5a3" H.set_species(/datum/species/lizard) if(2) to_chat(user, "Your flesh begins to melt! Miraculously, you seem fine otherwise.") diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index 9a0d9f9242..19e6ca4720 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -17,7 +17,9 @@ facial_hair_style = random_facial_hair_style(gender) hair_color = random_short_color() facial_hair_color = hair_color - eye_color = random_eye_color() + var/random_eye_color = random_eye_color() + left_eye_color = random_eye_color + right_eye_color = random_eye_color if(!pref_species) var/rando_race = pick(GLOB.roundstart_races) pref_species = new rando_race() diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 65b2931e08..ecd484032f 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -92,7 +92,7 @@ if(!(SLOT_GLASSES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." - else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) + else if((left_eye_color == BLOODCULT_EYE || right_eye_color == BLOODCULT_EYE) && iscultist(src) && HAS_TRAIT(src, TRAIT_CULT_EYES)) . += "[t_His] eyes are glowing an unnatural red!" else if(HAS_TRAIT(src, TRAIT_HIJACKER)) var/obj/item/implant/hijack/H = user.getImplant(/obj/item/implant/hijack) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 13456ed61c..a6a3f408dc 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -24,7 +24,8 @@ var/facial_hair_style = "Shaved" //Eye colour - var/eye_color = "000" + var/left_eye_color = "000" + var/right_eye_color = "000" var/skin_tone = "caucasian1" //Skin tone diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index ed509f900a..6991b3efcd 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -570,19 +570,21 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) // eyes if(!(NOEYES in species_traits)) var/has_eyes = H.getorganslot(ORGAN_SLOT_EYES) - var/mutable_appearance/eye_overlay if(!has_eyes) - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) + standing += mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) else - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) - if((EYECOLOR in species_traits) && has_eyes) - eye_overlay.color = "#" + H.eye_color - - if(OFFSET_EYES in H.dna.species.offset_features) - eye_overlay.pixel_x += H.dna.species.offset_features[OFFSET_EYES][1] - eye_overlay.pixel_y += H.dna.species.offset_features[OFFSET_EYES][2] - - standing += eye_overlay + var/mutable_appearance/left_eye = mutable_appearance('icons/mob/human_face.dmi', "left_eye", -BODY_LAYER) + var/mutable_appearance/right_eye = mutable_appearance('icons/mob/human_face.dmi', "right_eye", -BODY_LAYER) + if((EYECOLOR in species_traits) && has_eyes) + left_eye.color = "#" + H.left_eye_color + right_eye.color = "#" + H.right_eye_color + if(OFFSET_EYES in offset_features) + left_eye.pixel_x += offset_features[OFFSET_EYES][1] + left_eye.pixel_y += offset_features[OFFSET_EYES][2] + right_eye.pixel_x += offset_features[OFFSET_EYES][1] + right_eye.pixel_y += offset_features[OFFSET_EYES][2] + standing += left_eye + standing += right_eye //Underwear, Undershirts & Socks if(!(NO_UNDERWEAR in species_traits)) @@ -783,7 +785,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(FACEHAIR) accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) - accessory_overlay.color = "#[H.eye_color]" + accessory_overlay.color = "#[H.left_eye_color]" if(HORNCOLOR) accessory_overlay.color = "#[H.dna.features["horns_color"]]" if(WINGCOLOR) @@ -838,7 +840,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(FACEHAIR) extra_accessory_overlay.color = "#[H.facial_hair_color]" if(EYECOLOR) - extra_accessory_overlay.color = "#[H.eye_color]" + extra_accessory_overlay.color = "#[H.left_eye_color]" if(HORNCOLOR) extra_accessory_overlay.color = "#[H.dna.features["horns_color"]]" diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 9b39438563..cfb35fbb00 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -758,17 +758,22 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if // eyes if(!(NOEYES in dna.species.species_traits)) var/has_eyes = getorganslot(ORGAN_SLOT_EYES) - var/mutable_appearance/eye_overlay if(!has_eyes) - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) + add_overlay(mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER)) else - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) - if((EYECOLOR in dna.species.species_traits) && has_eyes) - eye_overlay.color = "#" + eye_color - if(OFFSET_EYES in dna.species.offset_features) - eye_overlay.pixel_x += dna.species.offset_features[OFFSET_EYES][1] - eye_overlay.pixel_y += dna.species.offset_features[OFFSET_EYES][2] - add_overlay(eye_overlay) + var/mutable_appearance/left_eye = mutable_appearance('icons/mob/human_face.dmi', "left_eye", -BODY_LAYER) + var/mutable_appearance/right_eye = mutable_appearance('icons/mob/human_face.dmi', "right_eye", -BODY_LAYER) + if((EYECOLOR in dna.species.species_traits) && has_eyes) + left_eye.color = "#" + left_eye_color + right_eye.color = "#" + right_eye_color + if(OFFSET_EYES in dna.species.offset_features) + left_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] + left_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] + right_eye.pixel_x += dna.species.offset_features[OFFSET_EYES][1] + right_eye.pixel_y += dna.species.offset_features[OFFSET_EYES][2] + add_overlay(left_eye) + add_overlay(right_eye) + dna.species.handle_hair(src) diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 13b1140527..b6a0a387e2 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -180,13 +180,17 @@ . += lips_overlay // eyes - var/image/eyes_overlay = image('icons/mob/human_face.dmi', "eyes", -BODY_LAYER, SOUTH) - . += eyes_overlay - if(!eyes) - eyes_overlay.icon_state = "eyes_missing" - - else if(eyes.eye_color) - eyes_overlay.color = "#" + eyes.eye_color + if(eyes) + var/image/left_eye = image('icons/mob/human_face.dmi', "left_eye", -BODY_LAYER, SOUTH) + var/image/right_eye = image('icons/mob/human_face.dmi', "right_eye", -BODY_LAYER, SOUTH) + if(eyes.left_eye_color && eyes.right_eye_color) + left_eye.color = "#" + eyes.left_eye_color + right_eye.color = "#" + eyes.right_eye_color + . += left_eye + . += right_eye + else + var/eyes_overlay = image('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER, SOUTH) + . += eyes_overlay /obj/item/bodypart/head/monkey icon = 'icons/mob/animal_parts.dmi' diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 9172ce00bc..80dc29f905 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -26,8 +26,10 @@ var/sight_flags = 0 var/see_in_dark = 2 var/tint = 0 - var/eye_color = "" //set to a hex code to override a mob's eye color - var/old_eye_color = "fff" + var/left_eye_color = "" //set to a hex code to override a mob's eye color + var/right_eye_color = "" + var/old_left_eye_color = "fff" + var/old_right_eye_color = "fff" var/flash_protect = 0 var/see_invisible = SEE_INVISIBLE_LIVING var/lighting_alpha @@ -44,11 +46,19 @@ owner.become_blind(EYE_DAMAGE) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - old_eye_color = H.eye_color - if(eye_color) - H.eye_color = eye_color + old_left_eye_color = H.left_eye_color + old_right_eye_color = H.right_eye_color + + if(left_eye_color) + H.left_eye_color = left_eye_color else - eye_color = H.eye_color + left_eye_color = H.left_eye_color + + if(right_eye_color) + H.right_eye_color = right_eye_color + else + right_eye_color = H.right_eye_color + if(!special) H.dna?.species?.handle_body(H) //regenerate eyeballs overlays. M.update_tint() @@ -64,9 +74,10 @@ C.clear_fullscreen("eye_damage") if(BLIND_VISION_THREE) C.cure_blind(EYE_DAMAGE) - if(ishuman(C) && eye_color) + if(ishuman(C) && left_eye_color && right_eye_color) var/mob/living/carbon/human/H = C - H.eye_color = old_eye_color + H.left_eye_color = old_left_eye_color + H.right_eye_color = old_right_eye_color if(!special) H.dna.species.handle_body(H) if(!special) @@ -162,14 +173,16 @@ /obj/item/organ/eyes/robotic/xray name = "\improper X-ray eyes" desc = "These cybernetic eyes will give you X-ray vision. Blinking is futile." - eye_color = "000" + left_eye_color = "000" + right_eye_color = "000" see_in_dark = 8 sight_flags = SEE_MOBS | SEE_OBJS | SEE_TURFS /obj/item/organ/eyes/robotic/thermals name = "thermal eyes" desc = "These cybernetic eye implants will give you thermal vision. Vertical slit pupil included." - eye_color = "FC0" + left_eye_color = "FC0" + right_eye_color = "FC0" sight_flags = SEE_MOBS lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE flash_protect = -1 @@ -178,7 +191,8 @@ /obj/item/organ/eyes/robotic/flashlight name = "flashlight eyes" desc = "It's two flashlights rigged together with some wire. Why would you put these in someone's head?" - eye_color ="fee5a3" + left_eye_color ="fee5a3" + right_eye_color ="fee5a3" icon = 'icons/obj/lighting.dmi' icon_state = "flashlight_eyes" flash_protect = 2 @@ -219,7 +233,8 @@ /obj/item/organ/eyes/robotic/glow name = "High Luminosity Eyes" desc = "Special glowing eyes, used by snowflakes who want to be special." - eye_color = "000" + left_eye_color = "000" + right_eye_color = "000" actions_types = list(/datum/action/item_action/organ_action/use, /datum/action/item_action/organ_action/toggle) var/current_color_string = "#ffffff" var/active = FALSE @@ -278,7 +293,9 @@ /obj/item/organ/eyes/robotic/glow/proc/assume_rgb(newcolor) current_color_string = newcolor - eye_color = RGB2EYECOLORSTRING(current_color_string) + var/current_color = RGB2EYECOLORSTRING(current_color_string) + left_eye_color = current_color + right_eye_color = current_color sync_light_effects() cycle_mob_overlay() if(!QDELETED(owner) && ishuman(owner)) //Other carbon mobs don't have eye color. diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index 8055233ea7..1e67d7baba 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ