diff --git a/code/__DEFINES/~~bubber_defines/traits/declarations.dm b/code/__DEFINES/~~bubber_defines/traits/declarations.dm index 5e8440dd752..a6325489a91 100644 --- a/code/__DEFINES/~~bubber_defines/traits/declarations.dm +++ b/code/__DEFINES/~~bubber_defines/traits/declarations.dm @@ -15,6 +15,9 @@ //For the hemophage quirk that allows hemophages to eat/drink normal food/drink. #define TRAIT_MASQUERADE_FOOD "masquerade_food" +/// Preference toggleable trait that gives a mob four eyes +#define TRAIT_QUAD_EYES "quad_eyes" + //basic security hud #define TRAIT_BASIC_SECURITY_HUD "basic_security_hud" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 762300f41f2..723c2178936 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -388,6 +388,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_MARTIAL_ARTS_IMMUNE" = TRAIT_MARTIAL_ARTS_IMMUNE, "TRAIT_MANSUS_TOUCHED" = TRAIT_MANSUS_TOUCHED, "TRAIT_MASQUERADE_FOOD" = TRAIT_MASQUERADE_FOOD, // BUBBER EDIT + "TRAIT_QUAD_EYES" = TRAIT_QUAD_EYES, // BUBBER EDIT "TRAIT_MEDICAL_HUD" = TRAIT_MEDICAL_HUD, "TRAIT_MEDICAL_HUD_SENSOR_ONLY" = TRAIT_MEDICAL_HUD_SENSOR_ONLY, "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 70c284aa2db..6ad761d5917 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -273,6 +273,21 @@ var/mutable_appearance/eye_left = mutable_appearance(eye_icon, "[eye_icon_state]_l", -eyes_layer, parent) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_left = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_l", -EYES_LAYER, parent) var/mutable_appearance/eye_right = mutable_appearance(eye_icon, "[eye_icon_state]_r", -eyes_layer, parent) // SKYRAT EDIT CHANGE - Customization - ORIGINAL: var/mutable_appearance/eye_right = mutable_appearance('icons/mob/human/human_face.dmi', "[eye_icon_state]_r", -EYES_LAYER, parent) + + // BEGIN BUBBER ADDITION: + if(HAS_TRAIT(owner, TRAIT_QUAD_EYES)) // (*) (*) v (*) (*) + var/mutable_appearance/eye_left_2 = new /mutable_appearance(eye_left) + eye_left_2.pixel_x -= 1 + eye_left_2.pixel_y += parent.quad_eyes_offset + var/mutable_appearance/eye_right_2 = new /mutable_appearance(eye_right) + eye_right_2.pixel_x += 1 + eye_right_2.pixel_y += parent.quad_eyes_offset + + eye_left.underlays.Add(eye_left_2) + eye_right.underlays.Add(eye_right_2) + + // END BUBBER ADDITION + var/list/overlays = list(eye_left, eye_right) if(overlay_ignore_lighting && !(parent.obscured_slots & HIDEEYES)) diff --git a/modular_zubbers/code/modules/customization/quad_eyes/preferences.dm b/modular_zubbers/code/modules/customization/quad_eyes/preferences.dm new file mode 100644 index 00000000000..c3739f46037 --- /dev/null +++ b/modular_zubbers/code/modules/customization/quad_eyes/preferences.dm @@ -0,0 +1,33 @@ +/datum/preference/toggle/quad_eyes + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + savefile_key = "quad_eyes" + savefile_identifier = PREFERENCE_CHARACTER + priority = PREFERENCE_PRIORITY_BODYPARTS + 0.1 + default_value = FALSE + +/datum/preference/toggle/quad_eyes/is_accessible(datum/preferences/preferences) + if(!..(preferences)) + return FALSE + return TRUE + +/datum/preference/toggle/quad_eyes/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + if(!value) + return + ADD_TRAIT(target, TRAIT_QUAD_EYES, TRAIT_GENERIC) + +/datum/preference/numeric/quad_eyes_offset + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + savefile_key = "quad_eyes_offset" + savefile_identifier = PREFERENCE_CHARACTER + maximum = 0 // Any value higher than this and the eyes don't appear after the character is spawned in. + minimum = -2 + +/datum/preference/numeric/quad_eyes_offset/is_accessible(datum/preferences/preferences) + if(!..(preferences)) + return FALSE + return (preferences.read_preference(/datum/preference/toggle/quad_eyes)) + +/datum/preference/numeric/quad_eyes_offset/apply_to_human(mob/living/carbon/human/target, value, datum/preferences/preferences) + if(!value) + return + target.quad_eyes_offset = value diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/human.dm b/modular_zubbers/code/modules/mob/living/carbon/human/human.dm index d97e85bcfca..f3ed9efa05c 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/human.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/human.dm @@ -1,3 +1,7 @@ +/mob/living/carbon/human + /// Quad eyes offset in pixels. Positive is up, negative is down. (Suggested to not go above 2 or below -2) + var/quad_eyes_offset = 0 + /mob/living/carbon/human/species/shadekin race = /datum/species/shadekin diff --git a/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm b/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm index 6bbc294fc4b..10ea2587121 100644 --- a/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/modular_zubbers/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -16,3 +16,10 @@ blink_animation = FALSE iris_overlay = null lighting_cutoff = LIGHTING_CUTOFF_LOW + +/obj/item/organ/eyes/robotic/multitool_act(mob/living/user, obj/item/tool) + . = ..() + // Choose left and right eye color + to_chat(user, span_notice("Changing Eye Color: Pressing 'Cancel' or closing out the window will return the eye's current color.")) + eye_color_left = tgui_color_picker(user, "Pick a new color", "Left Eye Color", eye_color_left) + eye_color_right = tgui_color_picker(user, "Pick a new color", "Right Eye Color", eye_color_right) diff --git a/tgstation.dme b/tgstation.dme index ac179d4cbc7..71fda0da4c8 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -9312,6 +9312,7 @@ #include "modular_zubbers\code\modules\customization\height_scaling\icons.dm" #include "modular_zubbers\code\modules\customization\height_scaling\preferences.dm" #include "modular_zubbers\code\modules\customization\modules\reagents\drink_reagents.dm" +#include "modular_zubbers\code\modules\customization\quad_eyes\preferences.dm" #include "modular_zubbers\code\modules\customization\species\lycans\__DEFINES.dm" #include "modular_zubbers\code\modules\customization\species\lycans\_cursekin_species.dm" #include "modular_zubbers\code\modules\customization\species\lycans\_lycan_species.dm" diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx index 093982f305c..bbc837e73d9 100644 --- a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/skyrat/species_features.tsx @@ -271,6 +271,18 @@ export const ears_emissive: Feature = { component: FeatureTriBoolInput, }; +export const quad_eyes: FeatureToggle = { + name: 'Quad Eyes', + description: + 'Gives the character four eyes, may have some oddities with custom eyes (Snail, moth, shadekin, akula, etc...) - ( ** v ** )', + component: CheckboxInput, +}; + +export const quad_eyes_offset: Feature = { + name: 'Quad Eyes Offset', + component: FeatureNumberInput, +}; + export const wings_toggle: FeatureToggle = { name: 'Wings', component: CheckboxInput,