Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[SEMI-MODULAR] The Prefsening, Pt 1. #29

Merged
merged 23 commits into from
Sep 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@
#define DNA_MOTH_MARKINGS_BLOCK 13
#define DNA_MUSHROOM_CAPS_BLOCK 14
#define DNA_POD_HAIR_BLOCK 15
/// DOPPLER SHIFT ADDITION BEGIN
#define DNA_BREASTS_BLOCK 16
/// DOPPLER SHIFT ADDITION END

// Hey! Listen up if you're here because you're adding a species feature!
//
Expand All @@ -68,7 +71,7 @@
// (Which means having a DNA block for a feature tied to a mob without DNA is entirely pointless.)

/// Total amount of DNA blocks, must be equal to the highest DNA block number
#define DNA_FEATURE_BLOCKS 15
#define DNA_FEATURE_BLOCKS 16 /// DOPPLER SHIFT EDIT: 16, up from 15

#define DNA_SEQUENCE_LENGTH 4
#define DNA_MUTATION_BLOCKS 8
Expand Down
31 changes: 29 additions & 2 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -681,12 +681,20 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list(
#define MUTATIONS_LAYER 35
/// Mutantrace features (tail when looking south) that must appear behind the body parts
#define BODY_BEHIND_LAYER 34
/// DOPPLER SHIFT ADDITION BEGIN
#define BODY_BEHIND_LAYER_2 33.99
#define BODY_BEHIND_LAYER_3 33.98
/// DOPPLER SHIFT ADDITION END
/// Layer for bodyparts that should appear behind every other bodypart - Mostly, legs when facing WEST or EAST
#define BODYPARTS_LOW_LAYER 33
/// Layer for most bodyparts, appears above BODYPARTS_LOW_LAYER and below BODYPARTS_HIGH_LAYER
#define BODYPARTS_LAYER 32
/// Mutantrace features (snout, body markings) that must appear above the body parts
#define BODY_ADJ_LAYER 31
/// DOPPLER SHIFT ADDITION BEGIN
#define BODY_ADJ_LAYER_2 30.99
#define BODY_ADJ_LAYER_3 30.98
/// DOPPLER SHIFT ADDITION END
/// Underwear, undershirts, socks, eyes, lips(makeup)
#define BODY_LAYER 30
/// Mutations that should appear above body, body_adj and bodyparts layer (e.g. laser eyes)
Expand Down Expand Up @@ -737,6 +745,10 @@ GLOBAL_LIST_INIT(human_heights_to_offsets, list(
#define HANDS_LAYER 7
/// Body front layer. Usually used for mutant bodyparts that need to be in front of stuff (e.g. cat ears)
#define BODY_FRONT_LAYER 6
/// DOPPLER SHIFT ADDITION BEGIN
#define BODY_FRONT_LAYER_2 5.99
#define BODY_FRONT_LAYER_3 5.98
/// DOPPLER SHIFT ADDITION END
/// Special body layer that actually require to be above the hair (e.g. lifted welding goggles)
#define ABOVE_BODY_FRONT_GLASSES_LAYER 5
/// Special body layer for the rare cases where something on the head needs to be above everything else (e.g. flowers)
Expand Down Expand Up @@ -798,10 +810,25 @@ GLOBAL_LIST_INIT(layers_to_offset, list(
//Bitflags for the layers a bodypart overlay can draw on (can be drawn on multiple layers)
/// Draws overlay on the BODY_FRONT_LAYER
#define EXTERNAL_FRONT (1 << 0)
/// Draws overlay on the BODY_ADJ_LAYER
/// DOPPLER SHIFT REMOVAL BEGIN
/*/// Draws overlay on the BODY_ADJ_LAYER
#define EXTERNAL_ADJACENT (1 << 1)
/// Draws overlay on the BODY_BEHIND_LAYER
#define EXTERNAL_BEHIND (1 << 2)
#define EXTERNAL_BEHIND (1 << 2) */
/// DOPPLER SHIFT REMOVAL END
/// DOPPLER SHIFT ADDITION BEGIN
//Front extra-color layers.
#define EXTERNAL_FRONT_2 (1 << 1)
#define EXTERNAL_FRONT_3 (1 << 2)
//Updated adjacent & extra-color layers.
#define EXTERNAL_ADJACENT (1 << 3)
#define EXTERNAL_ADJACENT_2 (1 << 4)
#define EXTERNAL_ADJACENT_3 (1 << 5)
//Updated behind & extra-color layers.
#define EXTERNAL_BEHIND (1 << 6)
#define EXTERNAL_BEHIND_2 (1 << 7)
#define EXTERNAL_BEHIND_3 (1 << 8)
/// DOPPLER SHIFT ADDITION END
/// Draws organ on all EXTERNAL layers
#define ALL_EXTERNAL_OVERLAYS EXTERNAL_FRONT | EXTERNAL_ADJACENT | EXTERNAL_BEHIND

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Why we need bespoke organ slots for these isn't entirely within my understanding but I assume there's a good reason
#define ORGAN_SLOT_EXTERNAL_BREASTS "breasts"
2 changes: 2 additions & 0 deletions code/__DEFINES/~doppler_defines/species.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
// Slugcats, from Talon III.
#define SPECIES_SLUGCAT "slugcat"
35 changes: 34 additions & 1 deletion code/datums/bodypart_overlays/bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@
///Sometimes we need multiple layers, for like the back, middle and front of the person (EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
var/layers
///List of all possible layers. Used for looping through in drawing
var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND)
//var/static/list/all_layers = list(EXTERNAL_FRONT, EXTERNAL_ADJACENT, EXTERNAL_BEHIND) /// DOPPLER SHIFT REMOVAL
/// DOPPLER SHIFT ADDITION BEGIN
var/static/list/all_layers = list(EXTERNAL_FRONT,EXTERNAL_FRONT_2,EXTERNAL_FRONT_3,
EXTERNAL_ADJACENT,EXTERNAL_ADJACENT_2,EXTERNAL_ADJACENT_3,
EXTERNAL_BEHIND,EXTERNAL_BEHIND_2,EXTERNAL_BEHIND_3)
/// DOPPLER SHIFT ADDITION END

///Key of the icon states of all the sprite_datums for easy caching
var/cache_key = ""
Expand Down Expand Up @@ -57,6 +62,20 @@
return "ADJ"
if(-BODY_FRONT_LAYER)
return "FRONT"
/// DOPPLER SHIFT ADDITION BEGIN
if(-BODY_BEHIND_LAYER_2)
return "BEHIND_2"
if(-BODY_BEHIND_LAYER_3)
return "BEHIND_3"
if(-BODY_ADJ_LAYER_2)
return "ADJ_2"
if(-BODY_ADJ_LAYER_3)
return "ADJ_3"
if(-BODY_FRONT_LAYER_2)
return "FRONT_2"
if(-BODY_FRONT_LAYER_3)
return "FRONT_3"
/// DOPPLER SHIFT ADDITION END

///Converts a bitflag to the right layer. I'd love to make this a static index list, but byond made an attempt on my life when i did
/datum/bodypart_overlay/proc/bitflag_to_layer(layer)
Expand All @@ -67,6 +86,20 @@
return -BODY_ADJ_LAYER
if(EXTERNAL_FRONT)
return -BODY_FRONT_LAYER
/// DOPPLER SHIFT ADDITION BEGIN
if(EXTERNAL_BEHIND_2)
return -BODY_BEHIND_LAYER_2
if(EXTERNAL_BEHIND_3)
return -BODY_BEHIND_LAYER_3
if(EXTERNAL_ADJACENT_2)
return -BODY_ADJ_LAYER_2
if(EXTERNAL_ADJACENT_3)
return -BODY_ADJ_LAYER_3
if(EXTERNAL_FRONT_2)
return -BODY_FRONT_LAYER_2
if(EXTERNAL_FRONT_3)
return -BODY_FRONT_LAYER_3
/// DOPPLER SHIFT ADDITION END

///Check whether we can draw the overlays. You generally don't want lizard snouts to draw over an EVA suit
/datum/bodypart_overlay/proc/can_draw_on_bodypart(mob/living/carbon/human/human)
Expand Down
2 changes: 1 addition & 1 deletion code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@
var/gender = (limb?.limb_gender == FEMALE) ? "f" : "m"
var/list/icon_state_builder = list()
icon_state_builder += sprite_datum.gender_specific ? gender : "m" //Male is default because sprite accessories are so ancient they predate the concept of not hardcoding gender
icon_state_builder += feature_key
icon_state_builder += feature_key_sprite ? feature_key_sprite : feature_key /// DOPPLER SHIFT EDIT: try to use the sprite key first, normal key otherwise
icon_state_builder += get_base_icon_state()
icon_state_builder += mutant_bodyparts_layertext(image_layer)

Expand Down
12 changes: 12 additions & 0 deletions code/datums/dna.dm
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
L[DNA_MUSHROOM_CAPS_BLOCK] = construct_block(SSaccessories.caps_list.Find(features["caps"]), length(SSaccessories.caps_list))
if(features["pod_hair"])
L[DNA_POD_HAIR_BLOCK] = construct_block(SSaccessories.pod_hair_list.Find(features["pod_hair"]), length(SSaccessories.pod_hair_list))
/// DOPPLER SHIFT ADDITION BEGIN
if(features["breasts"])
L[DNA_BREASTS_BLOCK] = construct_block(SSaccessories.breasts_list.Find(features["breasts"]), length(SSaccessories.breasts_list))
/// DOPPLER SHIFT ADDITION END

for(var/blocknum in 1 to DNA_FEATURE_BLOCKS)
. += L[blocknum] || random_string(GET_UI_BLOCK_LEN(blocknum), GLOB.hex_characters)
Expand Down Expand Up @@ -380,6 +384,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
set_uni_feature_block(blocknumber, construct_block(SSaccessories.caps_list.Find(features["caps"]), length(SSaccessories.caps_list)))
if(DNA_POD_HAIR_BLOCK)
set_uni_feature_block(blocknumber, construct_block(SSaccessories.pod_hair_list.Find(features["pod_hair"]), length(SSaccessories.pod_hair_list)))
/// DOPPLER SHIFT ADDITION BEGIN
if(DNA_BREASTS_BLOCK)
set_uni_feature_block(blocknumber, construct_block(SSaccessories.breasts_list.Find(features["breasts"]), length(SSaccessories.breasts_list)))
/// DOPPLER SHIFT ADDITION END

//Please use add_mutation or activate_mutation instead
/datum/dna/proc/force_give(datum/mutation/human/human_mutation)
Expand Down Expand Up @@ -681,6 +689,10 @@ GLOBAL_LIST_INIT(total_uf_len_by_block, populate_total_uf_len_by_block())
dna.features["caps"] = SSaccessories.caps_list[deconstruct_block(get_uni_feature_block(features, DNA_MUSHROOM_CAPS_BLOCK), length(SSaccessories.caps_list))]
if(dna.features["pod_hair"])
dna.features["pod_hair"] = SSaccessories.pod_hair_list[deconstruct_block(get_uni_feature_block(features, DNA_POD_HAIR_BLOCK), length(SSaccessories.pod_hair_list))]
/// DOPPLER SHIFT ADDITION BEGIN
if(dna.features["breasts"])
dna.features["breasts"] = SSaccessories.breasts_list[deconstruct_block(get_uni_feature_block(features, DNA_BREASTS_BLOCK), length(SSaccessories.breasts_list))]
/// DOPPLER SHIFT ADDITION END

for(var/obj/item/organ/organ in organs)
organ.mutate_feature(features, src)
Expand Down
12 changes: 8 additions & 4 deletions code/datums/sprite_accessories.dm
Original file line number Diff line number Diff line change
Expand Up @@ -1724,9 +1724,11 @@
/datum/sprite_accessory/lizard_markings
icon = 'icons/mob/human/species/lizard/lizard_markings.dmi'

/datum/sprite_accessory/lizard_markings/none
/// DOPPLER SHIFT REMOVAL BEGIN
/*/datum/sprite_accessory/lizard_markings/none
name = "None"
icon_state = "none"
icon_state = "none"*/
/// DOPPLER SHIFT REMOVAL END

/datum/sprite_accessory/lizard_markings/dtiger
name = "Dark Tiger Body"
Expand All @@ -1752,10 +1754,12 @@
icon = 'icons/mob/human/species/lizard/lizard_tails.dmi'
spine_key = SPINE_KEY_LIZARD

/datum/sprite_accessory/tails/lizard/none
/// DOPPLER SHIFT REMOVAL BEGIN
/*/datum/sprite_accessory/tails/lizard/none
name = SPRITE_ACCESSORY_NONE
icon_state = "none"
natural_spawn = FALSE
natural_spawn = FALSE*/
/// DOPPLER SHIFT REMOVAL END

/datum/sprite_accessory/tails/lizard/smooth
name = "Smooth"
Expand Down
35 changes: 35 additions & 0 deletions code/modules/client/preferences.dm
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,41 @@ GLOBAL_LIST_EMPTY(preferences_datums)
return FALSE

return TRUE
/// DOPPLER SHIFT ADDITION BEGIN
if ("set_tricolor_preference")
var/requested_preference_key = params["preference"]
var/index_key = params["value"]

var/datum/preference/requested_preference = GLOB.preference_entries_by_key[requested_preference_key]
if (isnull(requested_preference))
return FALSE

if (!istype(requested_preference, /datum/preference/tri_color))
return FALSE

var/default_value_list = read_preference(requested_preference.type)
if (!islist(default_value_list))
return FALSE
var/default_value = default_value_list[index_key]

// Yielding
var/new_color = input(
usr,
"Select new color",
null,
default_value || COLOR_WHITE,
) as color | null

if (!new_color)
return FALSE

default_value_list[index_key] = new_color

if (!update_preference(requested_preference, default_value_list))
return FALSE

return TRUE
/// DOPPLER SHIFT ADDITION END

for (var/datum/preference_middleware/preference_middleware as anything in middleware)
var/delegation = preference_middleware.action_delegations[action]
Expand Down
34 changes: 29 additions & 5 deletions code/modules/client/preferences/species_features/lizard.dm
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,22 @@

if (!isnull(sprite_accessory))
var/icon/accessory_icon = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_ADJ", EAST)
/// DOPPLER SHIFT ADDITION BEGIN
accessory_icon.Blend(COLOR_RED, ICON_MULTIPLY)
var/icon/accessory_icon_2 = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_ADJ_2", EAST)
accessory_icon_2.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
var/icon/accessory_icon_3 = icon(sprite_accessory.icon, "m_[key]_[sprite_accessory.icon_state]_ADJ_3", EAST)
accessory_icon_3.Blend(COLOR_BLUE, ICON_MULTIPLY)
/// DOPPLER SHIFT ADDITION END
final_icon.Blend(accessory_icon, ICON_OVERLAY)
/// DOPPLER SHIFT ADDITION BEGIN
final_icon.Blend(accessory_icon_2, ICON_OVERLAY)
final_icon.Blend(accessory_icon_3, ICON_OVERLAY)
/// DOPPLER SHIFT ADDITION END

final_icon.Crop(11, 20, 23, 32)
final_icon.Scale(32, 32)
final_icon.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
//final_icon.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) /// DOPPLER SHIFT REMOVAL

return final_icon

Expand All @@ -40,14 +51,27 @@
var/icon/final_icon = icon('icons/mob/human/species/lizard/bodyparts.dmi', "lizard_chest_m")

if (sprite_accessory.icon_state != "none")
var/icon/body_markings_icon = icon(
/// DOPPLER SHIFT REMOVAL BEGIN
/*var/icon/body_markings_icon = icon(
'icons/mob/human/species/lizard/lizard_misc.dmi',
"male_[sprite_accessory.icon_state]_chest",
)

final_icon.Blend(body_markings_icon, ICON_OVERLAY)

final_icon.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
final_icon.Blend(body_markings_icon, ICON_OVERLAY)*/
/// DOPPLER SHIFT REMOVAL END
/// DOPPLER SHIFT ADDITION BEGIN
var/icon/markings_icon_1 = icon(sprite_accessory.icon, "male_[sprite_accessory.icon_state]_chest")
markings_icon_1.Blend(COLOR_RED, ICON_MULTIPLY)
var/icon/markings_icon_2 = icon(sprite_accessory.icon, "male_[sprite_accessory.icon_state]_chest_2")
markings_icon_2.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY)
var/icon/markings_icon_3 = icon(sprite_accessory.icon, "male_[sprite_accessory.icon_state]_chest_3")
markings_icon_3.Blend(COLOR_BLUE, ICON_MULTIPLY)
final_icon.Blend(markings_icon_1, ICON_OVERLAY)
final_icon.Blend(markings_icon_2, ICON_OVERLAY)
final_icon.Blend(markings_icon_3, ICON_OVERLAY)
/// DOPPLER SHIFT ADDITION END

//final_icon.Blend(COLOR_VIBRANT_LIME, ICON_MULTIPLY) /// DOPPLER SHIFT REMOVAL
final_icon.Crop(10, 8, 22, 23)
final_icon.Scale(26, 32)
final_icon.Crop(-2, 1, 29, 32)
Expand Down
24 changes: 22 additions & 2 deletions code/modules/mob_spawn/mob_spawn.dm
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@
var/skin_tone
/// Weakref to the mob this spawner created - just if you needed to do something with it.
var/datum/weakref/spawned_mob_ref
/// DOPPLER SHIFT ADDITION: allowing players to have their current character loaded
var/allow_prefs = TRUE

/obj/effect/mob_spawn/Initialize(mapload)
. = ..()
Expand Down Expand Up @@ -93,7 +95,20 @@
if(!ispath(outfit_override[outfit_var]) && !isnull(outfit_override[outfit_var]))
CRASH("outfit_override var on [mob_name] spawner has incorrect values! it must be an assoc list with outfit \"var\" = path | null")
outfit.vars[outfit_var] = outfit_override[outfit_var]
spawned_human.equipOutfit(outfit)
//spawned_human.equipOutfit(outfit) /// DOPPLER SHIFT REMOVAL
/// DOPPLER SHIFT ADDITION BEGIN
if(allow_prefs && spawned_human.client)
spawned_human.client?.prefs.safe_transfer_prefs_to(spawned_human)
SSquirks.AssignQuirks(spawned_human, spawned_human.client)
spawned_human.equip_outfit_and_loadout(outfit, spawned_human.client?.prefs)
else
spawned_human.equipOutfit(outfit)
else if(allow_prefs && spawned_mob.client)
var/mob/living/carbon/human/spawned_human = spawned_mob
spawned_human.client?.prefs.safe_transfer_prefs_to(spawned_human)
SSquirks.AssignQuirks(spawned_human, spawned_human.client)
spawned_human.equip_outfit_and_loadout(new /datum/outfit(), spawned_human.client?.prefs)
/// DOPPLER SHIFT ADDITION END

///these mob spawn subtypes do not trigger until attacked by a ghost.
/obj/effect/mob_spawn/ghost_role
Expand Down Expand Up @@ -157,9 +172,14 @@
LAZYADD(ckeys_trying_to_spawn, user_ckey)

if(prompt_ghost)
var/prompt = "Become [prompt_name]?"
var/realname = user.client?.prefs?.read_preference(/datum/preference/name/real_name) || "yourself" /// DOPPLER SHIFT ADDITION
var/prompt = "Become [prompt_name] as [realname]?" /// DOPPLER SHIFT EDIT: adding your name to it
if(!temp_body && user.can_reenter_corpse && user.mind)
prompt += " (Warning, You can no longer be revived!)"
/// DOPPLER SHIFT ADDITION BEGIN
if(allow_prefs)
prompt += "\nYou will be loaded in with your current character, [realname] - loadout & quirks included! Make sure they fit the role!"
/// DOPPLER SHIFT ADDITION END
var/ghost_role = tgui_alert(usr, prompt, buttons = list("Yes", "No"), timeout = 10 SECONDS)
if(ghost_role != "Yes" || !loc || QDELETED(user))
LAZYREMOVE(ckeys_trying_to_spawn, user_ckey)
Expand Down
7 changes: 7 additions & 0 deletions code/modules/surgery/organs/external/tails.dm
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,13 @@
receiver.add_mood_event("tail_regained", /datum/mood_event/tail_regained_wrong)

/obj/item/organ/external/tail/on_bodypart_insert(obj/item/bodypart/bodypart)
/// DOPPLER SHIFT ADDITION BEGIN
// damnit TG your own code fails CI for reasons unclear - TODO, stack trace this to eventually figure out how it's ending up with null owners
if(bodypart == null)
return ..()
if(bodypart.owner == null)
return ..()
/// DOPPLER SHIFT ADDITION END
var/obj/item/organ/external/spines/our_spines = bodypart.owner.get_organ_slot(ORGAN_SLOT_EXTERNAL_SPINES)
if(our_spines)
try_insert_tail_spines(bodypart)
Expand Down
11 changes: 8 additions & 3 deletions code/modules/surgery/organs/internal/eyes/_eyes.dm
Original file line number Diff line number Diff line change
Expand Up @@ -129,15 +129,20 @@
if(isnull(eye_icon_state))
return list()

var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -BODY_LAYER)
var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -BODY_LAYER)
/// DOPPLER SHIFT ADDITION BEGIN
var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD)
var/eye_icon = my_head?.eyes_icon || 'icons/mob/human/human_face.dmi'
/// DOPPLER SHIFT ADDITION END

var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -BODY_LAYER) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi
var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -BODY_LAYER) /// DOPPLER SHIFT EDIT: using eye_icon instead of human_face.dmi
var/list/overlays = list(eye_left, eye_right)

var/obscured = parent.check_obscured_slots(TRUE)
if(overlay_ignore_lighting && !(obscured & ITEM_SLOT_EYES))
overlays += emissive_appearance(eye_left.icon, eye_left.icon_state, parent, -BODY_LAYER, alpha = eye_left.alpha)
overlays += emissive_appearance(eye_right.icon, eye_right.icon_state, parent, -BODY_LAYER, alpha = eye_right.alpha)
var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD)
//var/obj/item/bodypart/head/my_head = parent.get_bodypart(BODY_ZONE_HEAD) /// DOPPLER SHIFT REMOVAL
if(my_head)
if(my_head.head_flags & HEAD_EYECOLOR)
eye_right.color = eye_color_right
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading