diff --git a/common/culture/cultures/wc_avianic.txt b/common/culture/cultures/wc_avianic.txt index 9592baebca..eaa13beefc 100644 --- a/common/culture/cultures/wc_avianic.txt +++ b/common/culture/cultures/wc_avianic.txt @@ -17,11 +17,13 @@ coa_gfx = { harpy_coa_gfx } building_gfx = { indian_building_gfx } - clothing_gfx = { creature_harpy_gfx african_clothing_gfx } + clothing_gfx = { creature_harpy_gfx no_headgear_gfx no_beard_gfx } unit_gfx = { sub_sahran_unit_gfx } ethnicities = { - # 10 = night_elven - 5 = caucasian_blond + 10 = green_harpy_ethnicity + 10 = yellow_harpy_ethnicity + 10 = blue_harpy_ethnicity + 10 = elven_harpy_ethnicity } } \ No newline at end of file diff --git a/common/ethnicities/wc_ethnicities_harpy.txt b/common/ethnicities/wc_ethnicities_harpy.txt new file mode 100644 index 0000000000..232fd2b820 --- /dev/null +++ b/common/ethnicities/wc_ethnicities_harpy.txt @@ -0,0 +1,553 @@ +@beauty1min = 0.35 +@beauty1max = 0.65 + +@beauty2min = 0.4 +@beauty2max = 0.6 + +@beauty3min = 0.45 +@beauty3max = 0.55 + +# Warcraft +###Skin colors +@human_skin_color_x_min = 0.15 +@human_skin_color_x_max = 0.2 + +###Hair colors +@blonde_color_x_min = 0.2 +@blonde_color_x_max = 0.25 +@blonde_color_y_min = 0.15 +@blonde_color_y_max = 0.62 + +@brown_color_x_min = 0.08 +@brown_color_x_max = 0.2 +@brown_color_y_min = 0.86 +@brown_color_y_max = 0.95 + +@red_color_x_min = 0.05 +@red_color_x_max = @brown_color_x_min +@red_color_y_min = 0.53 +@red_color_y_max = 0.65 + +@white_color_y_min = 0.05 +@white_color_y_max = 0.05 + +###Eye colors + +@blue_eye_color_x_min = 0.6 +@blue_eye_color_x_max = 0.7 + +@arcane_color_y_min = 0.34 +@arcane_color_y_max = 0.53 + +@green_color_x_min = 0.33 + +@elven_red_color_x_max = 1 + +@blue_color_x_min = @blue_eye_color_x_min +@blue_color_x_max = 0.83 + +harpy_ethnicity = { + template = "night_elven" + visible = no + + gene_race = { 1 = { name = creature_harpy range = { 0 1 } } } + + hair_color = { + 10 = { 0.84 0.414 0.992 0.672 } #purple/pink + 10 = { 0.65 0.055 0.71 0.239 } #White/Silver + 10 = { 0.001 0.49 0.01 0.666 } #Red + 10 = { 0.01 0.45 0.037 0.740 } #Orange + 10 = { 0.055 0.820 0.078 1 } #Brown + 10 = { 0.68 0.512 0.746 0.62 } #blue + 10 = { 0.757 0.99 0.823 1 } #black + 10 = { 0.4 0.38 0.453 0.539 } #green + 10 = { 0.748 0.902 0.813 0.926 } #dark blue + } + skin_color = { + #light green + 10 = { 0.312 0.145 0.352 0.195 } + #light yellow + 10 = { 0.207 0.117 0.266 0.293 } + #blue + 10 = { 0.676 0.402 0.690 0.474 } + #night elven + 10 = { 0.85 0.20 0.95 0.30 } + } + eye_color = { + # Grey + 10 = { 0.5 0.025 0.578 0.038 } + # Light Blue + 10 = { 0.650 0.18 0.750 0.32 } + } + + #Height + gene_height = { + 1 = { name = normal_height range = { 0.485 0.515 } } + } + + #Neck + gene_neck_length = { + 1 = { name = neck_length_neg range = { 0.55 0.70 } } + } + gene_neck_width = { + 10 = { name = neck_width_pos range = { 0.20 0.30 } } + } + + ###Cheeks + gene_bs_cheek_forward = { + 1 = { name = cheek_forward_pos range = { 0.15 0.45 } } + } + gene_bs_cheek_height = { + 1 = { name = cheek_height_pos range = { 0.5 1 } } + } + gene_bs_cheek_width = { + 1 = { name = cheek_width_pos range = { 0.05 0.4 } } + } + face_detail_cheek_def = { + 1 = { name = cheek_def_01 range = { 0.1 0.5 } } + 1 = { name = cheek_def_02 range = { 0.1 0.5 } } + } + face_detail_cheek_fat = { + 1 = { name = cheek_fat_01_pos range = { 0 0.5 } } + 1 = { name = cheek_fat_02_pos range = { 0 0.5 } } + 1 = { name = cheek_fat_03_pos range = { 0 0.4 } } + 1 = { name = cheek_fat_04_pos range = { 0 0.5 } } + 2 = { name = cheek_fat_01_neg range = { 0 0.4 } } + } + + ###Chin + gene_chin_forward = { + 1 = { name = chin_forward_neg range = { 0.08 0.25 } } + } + gene_chin_height = { + 1 = { name = chin_height_pos range = { 0.8 0.93 } } + } + gene_chin_width = { + 1 = { name = chin_width_neg range = { 0.1 0.5 } } + } + face_detail_chin_def = { + 1 = { name = chin_def range = { 0.4 1 } } + } + face_detail_chin_cleft = { + 10 = { name = chin_cleft range = { 0 0.1 } } + 1 = { name = chin_dimple range = { 0 0.6 } } + } + + ###Jaw + gene_jaw_angle = { + 1 = { name = jaw_angle_neg range = { 0.45 0.7 } } + } + gene_jaw_forward = { + 1 = { name = jaw_forward_neg range = { 0.3 0.45 } } + } + gene_jaw_height = { + 1 = { name = jaw_height_neg range = { 0.05 0.30 } } + } + gene_jaw_width = { + 1 = { name = jaw_width_pos range = { 0.3 0.56 } } + } + gene_bs_jaw_def = { + 1 = { name = jaw_def_pos range = { 0 0.55 } } + } + + ###Mouth + gene_mouth_corner_depth = { + 1 = { name = mouth_corner_depth_pos range = { 0.45 0.75 } } + } + gene_mouth_corner_height = { + 1 = { name = mouth_corner_height_neg range = { 0.42 0.58 } } + } + gene_mouth_forward = { + 1 = { name = mouth_forward_neg range = { 0.3 0.567 } } + } + gene_mouth_height = { + 1 = { name = mouth_height_neg range = { 0.3 0.5 } } + } + gene_mouth_width = { + 1 = { name = mouth_width_neg range = { 0.3 0.55 } } + } + gene_mouth_open = { + 1 = { name = mouth_open_pos range = { 0 0 } } + } + + #Philtrum + gene_bs_mouth_philtrum_def = { + 1 = { name = mouth_philtrum_def_pos range = { 0 0.5 } } + } + gene_bs_mouth_philtrum_shape = { + 1 = { name = mouth_philtrum_shape_neg range = { 0 0.25 } } + 1 = { name = mouth_philtrum_shape_pos range = { 0 0.7 } } + } + gene_bs_mouth_philtrum_width = { + 1 = { name = mouth_philtrum_width_pos range = { 0 0.25 } } + 2 = { name = mouth_philtrum_width_neg range = { 0.4 0.9 } } + } + + #Upper Lip + gene_mouth_upper_lip_size = { + 1 = { name = mouth_upper_lip_size_neg range = { 0.6 0.8 } } + } + gene_bs_mouth_upper_lip_def = { + 1 = { name = mouth_upper_lip_def_pos range = { 0.2 1 } } + } + gene_bs_mouth_upper_lip_full = { + 1 = { name = mouth_upper_lip_full_neg range = { 0.3 0.9 } } + } + gene_bs_mouth_upper_lip_profile = { + 1 = { name = mouth_upper_lip_profile_pos range = { 0 0.4 } } + } + gene_bs_mouth_upper_lip_width = { + 1 = { name = mouth_upper_lip_width_neg range = { 0 0.5 } } + } + + #Lower Lip + gene_mouth_lower_lip_size = { + 1 = { name = mouth_lower_lip_size_neg range = { 0.5 0.6 } } + } + gene_bs_mouth_lower_lip_def = { + 1 = { name = mouth_lower_lip_def_pos range = { 0.2 1 } } + } + gene_bs_mouth_lower_lip_full = { + 1 = { name = mouth_lower_lip_full_pos range = { 0.1 0.4 } } + } + gene_bs_mouth_lower_lip_pad = { + 1 = { name = mouth_lower_lip_pad_pos range = { 0 0.4 } } + 1 = { name = mouth_lower_lip_pad_neg range = { 0 1 } } + } + gene_bs_mouth_lower_lip_width = { + 1 = { name = mouth_lower_lip_width_neg range = { 0.25 0.75 } } + } + gene_grade = { + 1 = { name = harpygrade range = { 1 1 } } + } + hooves = { + 1 = { name = harpy_hooves range = { 0 1 } } + } + ###Nose + gene_bs_nose_length = { + 1 = { name = nose_length_pos range = { 0.25 0.45 } } + } + gene_bs_nose_size = { + 3 = { name = nose_size_pos range = { 0 0.5 } } + 1 = { name = nose_size_neg range = { 0.25 1 } } + } + gene_bs_nose_forward = { + 1 = { name = nose_forward_pos range = { 0.25 0.5 } } + } + gene_bs_nose_height = { + 1 = { name = nose_height_neg range = { 0.55 0.85 } } + } + face_detail_nasolabial = { + 1 = { name = nasolabial_01 range = { 0.25 0.6 } } + 1 = { name = nasolabial_02 range = { 0.25 0.6 } } + 1 = { name = nasolabial_03 range = { 0.25 0.6 } } + 1 = { name = nasolabial_04 range = { 0.25 0.6 } } + 1 = { name = nasolabial_04 range = { 0 0.2 } } + } + + #Nose tip + gene_bs_nose_tip_forward = { + 1 = { name = nose_tip_forward_pos range = { 0 0.2 } } + 1 = { name = nose_tip_forward_neg range = { 0 0.45 } } + } + gene_bs_nose_tip_width = { + 1 = { name = nose_tip_width_neg range = { 0.6 1 } } + } + gene_bs_nose_tip_angle = { + 10 = { name = nose_tip_angle_neg range = { 0.3 0.6 } } + 1 = { name = nose_tip_angle_neg range = { 0 0.1 } } + } + face_detail_nose_tip_def = { + 1 = { name = nose_tip_def range = { 0.3 1 } } + } + + #Ridge + gene_bs_nose_profile = { + 1 = { name = nose_profile_pos range = { 0 0.35 } } + } + gene_bs_nose_ridge_angle = { + 1 = { name = nose_ridge_angle_pos range = { 0.2 0.65 } } + } + gene_bs_nose_ridge_width = { + 10 = { name = nose_ridge_width_pos range = { 0 0.4 } } + 1 = { name = nose_ridge_width_neg range = { 0 0.2 } } + } + face_detail_nose_ridge_def = { + 1 = { name = nose_ridge_def_pos range = { 0.45 1 } } + } + + #Nostril + gene_bs_nose_nostril_height = { + 1 = { name = nose_nostril_height_pos range = { 0.05 0.25 } } + } + gene_bs_nose_nostril_width = { + 1 = { name = nose_nostril_width_pos range = { 0 0.3 } } + 1 = { name = nose_nostril_width_neg range = { 0 0.3 } } + } + + ###Ear + gene_bs_ear_lenght = { + 1 = { name = harpy_ear range = { 0.75 0.85 } } + } + gene_bs_ear_tip = { + 1 = { name = ear_tip_pos range = { 0 1 } } + } + gene_bs_ear_angle = { + 1 = { name = ear_angle_neg range = { 0.5 1 } } + } + gene_bs_ear_inner_shape = { + 1 = { name = ear_inner_shape_pos range = { 0 0.5 } } + } + gene_bs_ear_bend = { + 1 = { name = ear_lower_bend_pos range = { 0.2 0.7 } } + 1 = { name = ear_both_bend_pos range = { 0.2 0.7 } } + } + gene_bs_ear_outward = { + 1 = { name = ear_outward_neg range = { 0.3 0.6 } } + } + gene_bs_ear_size = { + 1 = { name = ear_size_pos range = { 0.3 1 } } + } + + ###Forehead + gene_forehead_angle = { + 1 = { name = forehead_angle_neg range = { 0.2 0.4 } } + } + gene_forehead_brow_height = { + 1 = { name = forehead_brow_height_neg range = { 0.15 0.4 } } + } + gene_forehead_roundness = { + 1 = { name = forehead_roundness_neg range = { 0.5 0.7 } } + } + gene_forehead_width = { + 1 = { name = forehead_width_neg range = { 0.5 0.95 } } + } + gene_forehead_height = { + 1 = { name = forehead_height_neg range = { 0.4 0.65 } } + } + gene_bs_forehead_brow_forward = { + 1 = { name = forehead_brow_forward_pos range = { 0.65 0.85 } } + } + gene_bs_forehead_brow_curve = { + 1 = { name = forehead_brow_curve_pos range = { 0 1 } } + } + gene_bs_forehead_brow_inner_height = { + 1 = { name = forehead_brow_inner_height_neg range = { 0.5 0.9 } } + } + gene_bs_forehead_brow_outer_height = { + 1 = { name = forehead_brow_outer_height_pos range = { 0.1 0.5 } } + #1 = { name = forehead_brow_outer_height_neg range = { 0 1 } } + } + gene_bs_forehead_brow_width = { + 1 = { name = forehead_brow_width_pos range = { 0 0.8 } } + } + + ###Head + gene_head_height = { + 1 = { name = head_height_neg range = { 0.5 0.6 } } + } + gene_head_width = { + 1 = { name = head_width_neg range = { 0.2 0.3 } } + } + gene_head_profile = { + 1 = { name = head_profile_neg range = { 0.15 0.4 } } + } + + #Head top + gene_head_top_height = { + 1 = { name = head_top_height_neg range = { 0.45 0.55 } } + } + gene_head_top_width = { + 1 = { name = head_top_width_neg range = { 0.45 0.55 } } + } + + #Eyes + special_eyes = { + 1 = { name = magic_no_pupils_eyes range = { 0.5 0.5 } } + } + gene_eye_depth = { + 1 = { name = eye_depth_neg range = { 0.3 0.7 } } + } + gene_eye_angle = { + 1 = { name = eye_angle_neg range = { 0.75 0.9 } } + } + gene_eye_height = { + 1 = { name = eye_height_neg range = { 0.35 0.5 } } + } + gene_eye_distance = { + 1 = { name = eye_distance_neg range = { 0.5 0.58 } } + } + gene_eye_shut = { + 1 = { name = eye_shut_neg range = { 0.4 0.6 } } + } + gene_bs_eye_corner_depth = { + 1 = { name = eye_corner_depth_pos range = { 0.25 1 } } + } + gene_bs_eye_fold_shape = { + 3 = { name = eye_fold_shape_pos range = { 0 1 } } + 1 = { name = eye_fold_shape_neg range = { 0 0.5 } } + } + gene_bs_eye_size = { + 1 = { name = eye_size_pos range = { 0 1 } } + } + gene_bs_eye_upper_lid_size = { + 1 = { name = eye_upper_lid_size_pos range = { 0.5 1 } } + } + face_detail_eye_lower_lid_def = { + 1 = { name = eye_lower_lid_def range = { 0 0.6 } } + } + face_detail_eye_socket = { + 1 = { name = eye_socket_01 range = { 0 0.5 } } + 1 = { name = eye_socket_02 range = { 0 0.5 } } + 1 = { name = eye_socket_03 range = { 0 0.5 } } + } + + #Body + gene_bs_body_type = { + 1 = { name = body_fat_head_fat_low range = { 0.3 0.5 } } + } + gene_bs_body_shape = { + 1 = { name = body_shape_average range = { 0 0.5 } } + } + + ###Other + gene_hair_type = { + 8 = { name = hair_straight range = { 0.35 0.75 } } + 4 = { name = hair_wavy range = { 0.35 0.75 } } + 1 = { name = hair_curly range = { 0.35 0.75 } } + } + special_eyebrows = { + 1 = { name = high_elven_eyebrows range = { 0 1 } } + } + face_detail_temple_def = { + 1 = { name = temple_def range = { 0 1 } } + } + expression_brow_wrinkles = { + 1 = { name = brow_wrinkles_01 range = { 0 1 } } + 1 = { name = brow_wrinkles_02 range = { 0 1 } } + 1 = { name = brow_wrinkles_03 range = { 0 1 } } + 1 = { name = brow_wrinkles_04 range = { 0 1 } } + } + expression_eye_wrinkles = { + 1 = { name = eye_wrinkles_01 range = { 0 0.5 } } + 1 = { name = eye_wrinkles_02 range = { 0 0.5 } } + 1 = { name = eye_wrinkles_03 range = { 0 0.5 } } + } + expression_forehead_wrinkles = { + 1 = { name = forehead_wrinkles_01 range = { 0 0 } } + 1 = { name = forehead_wrinkles_02 range = { 0 0 } } + 1 = { name = forehead_wrinkles_03 range = { 0 0 } } + } + expression_other = { + 1 = { name = cheek_wrinkles_both_01 range = { 0 0.4 } } + } + complexion = { + 1 = { name = complexion_1 range = { 0 1 } } + 1 = { name = complexion_3 range = { 0 1 } } + 1 = { name = complexion_4 range = { 0 1 } } + } + gene_body_hair = { + 1 = { name = body_hair_sparse range = { 0 0 } } + } + gene_age = { + 1 = { name = old_beauty_1 range = { 0 1 } } + 1 = { name = old_2 range = { 0 1 } } + 1 = { name = old_4 range = { 0 1 } } + } + gene_facial_markings = { + 28 = { name = no_markings range = { 0 0 } } + 10 = { name = facial_wildhammer_tattoo_05_f range = { 1 1 } } + 10 = { name = facial_nightelf_markings_05 range = { 1 1 } } + 2 = { name = facial_nightelf_markings_01 range = { 1 1 } } + 2 = { name = tyrande_no_eyelids range = { 1 1 } } + 1 = { name = facial_nightelf_markings_07 range = { 1 1 } } + + 1 = { name = succubus_facial_marking_01 range = { 1 1 } } + 1 = { name = succubus_facial_marking_02 range = { 1 1 } } + 1 = { name = succubus_facial_marking_03 range = { 1 1 } } + } + gene_facial_markings_2 = { + 3 = { name = no_markings range = { 0 0 } } + 1 = { name = nathrezim_lipstick range = { 0.7 0.95 } } + } + eyelashes_accessory = { + 10 = { name = harpy_eyelashes range = { 0.0 1.0 } } + } + wings = { + 1 = { name = harpy_wings range = { 0 1 } } + } +} +green_harpy_ethnicity = { + template = "harpy_ethnicity" + + hair_color = { + #10 = { 0.84 0.414 0.992 0.672 } #purple/pink + #10 = { 0.65 0.055 0.71 0.239 } #White/Silver + #10 = { 0.001 0.49 0.01 0.666 } #Red + #10 = { 0.01 0.45 0.037 0.740 } #Orange + #10 = { 0.055 0.820 0.078 1 } #Brown + 10 = { 0.68 0.512 0.746 0.62 } #blue + 10 = { 0.757 0.99 0.823 1 } #black + 10 = { 0.4 0.38 0.453 0.539 } #green + } + skin_color = { + #light green + 10 = { 0.312 0.145 0.352 0.195 } + } +} +yellow_harpy_ethnicity = { + template = "harpy_ethnicity" + + hair_color = { + 10 = { 0.84 0.414 0.992 0.672 } #purple/pink + 10 = { 0.65 0.055 0.71 0.239 } #White/Silver + 10 = { 0.001 0.49 0.01 0.666 } #Red + 10 = { 0.01 0.45 0.037 0.740 } #Orange + 10 = { 0.055 0.820 0.078 1 } #Brown + 10 = { 0.68 0.512 0.746 0.62 } #blue + 40 = { 0.757 0.99 0.823 1 } #black + 10 = { 0.4 0.38 0.453 0.539 } #green + 10 = { 0.748 0.902 0.813 0.926 } #dark blue + } + skin_color = { + #light yellow + 10 = { 0.207 0.117 0.266 0.293 } + } +} +blue_harpy_ethnicity = { + template = "harpy_ethnicity" + + hair_color = { + #10 = { 0.84 0.414 0.992 0.672 } #purple/pink + 10 = { 0.65 0.055 0.71 0.239 } #White/Silver + 10 = { 0.001 0.49 0.01 0.666 } #Red + 10 = { 0.01 0.45 0.037 0.740 } #Orange + 10 = { 0.055 0.820 0.078 1 } #Brown + 30 = { 0.68 0.512 0.746 0.62 } #blue + 30 = { 0.757 0.99 0.823 1 } #black + #10 = { 0.4 0.38 0.453 0.539 } #green + 30 = { 0.748 0.902 0.813 0.926 } #dark blue + } + skin_color = { + #blue + 10 = { 0.676 0.402 0.690 0.474 } + } +} +elven_harpy_ethnicity = { + template = "harpy_ethnicity" + + hair_color = { + 30 = { 0.84 0.414 0.992 0.672 } #purple/pink + 10 = { 0.65 0.055 0.71 0.239 } #White/Silver + 10 = { 0.001 0.49 0.01 0.666 } #Red + 10 = { 0.01 0.45 0.037 0.740 } #Orange + #10 = { 0.055 0.820 0.078 1 } #Brown + #10 = { 0.68 0.512 0.746 0.62 } #blue + 20 = { 0.757 0.99 0.823 1 } #black + 10 = { 0.748 0.902 0.813 0.926 } #dark blue + } + skin_color = { + #night elven + 10 = { 0.85 0.20 0.95 0.30 } + } +} \ No newline at end of file diff --git a/common/genes/02_genes_accessories_misc.txt b/common/genes/02_genes_accessories_misc.txt index c29d8aeba4..502862294b 100644 --- a/common/genes/02_genes_accessories_misc.txt +++ b/common/genes/02_genes_accessories_misc.txt @@ -192,6 +192,17 @@ accessory_genes = { boy = male girl = female } + harpy_eyelashes = { + index = 3 + male = { + 1 = "male_eyelashes_normal_harpy" + } + female = { + 1 = "female_eyelashes_normal_harpy" + } + boy = male + girl = female + } } } diff --git a/common/genes/wc_genes_hooves.txt b/common/genes/wc_genes_hooves.txt index 76e697a5e5..76d7f286bc 100644 --- a/common/genes/wc_genes_hooves.txt +++ b/common/genes/wc_genes_hooves.txt @@ -3,7 +3,7 @@ inheritable = yes group = hooves_group - sync_inheritance_with = gene_race + sync_inheritance_with = gene_grade no_hoves = { index = 0 @@ -26,5 +26,16 @@ boy = male girl = female } + harpy_hooves = { + index = 2 + male = { + 1 = male_hooves_harpy_0 + } + female = { + 1 = female_hooves_harpy_0 + } + boy = male + girl = female + } } } \ No newline at end of file diff --git a/common/genes/wc_genes_morph.txt b/common/genes/wc_genes_morph.txt index 7c9b1fdbc6..840f098824 100644 --- a/common/genes/wc_genes_morph.txt +++ b/common/genes/wc_genes_morph.txt @@ -239,6 +239,25 @@ morph_genes = { setting = { attribute = "bs_ear_length" value = { min = 0.0 max = 4 } age = age_preset_child_features } } } + harpy_ear = { + index = 4 + male = { + setting = { attribute = "bs_harpy_ear" value = { min = 0.0 max = 1 } age = age_preset_child_features } + setting = { attribute = "bs_ear_length" value = { min = 0.0 max = 4 } age = age_preset_child_features } + } + female = { + setting = { attribute = "bs_harpy_ear" value = { min = 0.0 max = 1 } age = age_preset_child_features } + setting = { attribute = "bs_ear_length" value = { min = 0.0 max = 4 } age = age_preset_child_features } + } + boy = { + setting = { attribute = "bs_harpy_ear" value = { min = 0.0 max = 1 } age = age_preset_child_features } + setting = { attribute = "bs_ear_length" value = { min = 0.0 max = 4 } age = age_preset_child_features } + } + girl = { + setting = { attribute = "bs_harpy_ear" value = { min = 0.0 max = 1 } age = age_preset_child_features } + setting = { attribute = "bs_ear_length" value = { min = 0.0 max = 4 } age = age_preset_child_features } + } + } } gene_bs_ear_tip = { ugliness_feature_categories = { head } @@ -319,7 +338,7 @@ morph_genes = { } } gene_grade = { - sync_inheritance_with = gene_race + #sync_inheritance_with = gene_race plantigrade = { index = 0 @@ -342,6 +361,16 @@ morph_genes = { boy = male girl = male } + harpygrade = { + index = 2 + male = { + setting = { attribute = "body_digitigrade" value = { min = @maleMax max = @maleMax } } + setting = { attribute = "bs_body_harpy" value = { min = @maleMax max = @maleMax } } + } + female = male + boy = male + girl = male + } } gene_mustaches = { group = beard diff --git a/common/genes/wc_genes_static_models.txt b/common/genes/wc_genes_static_models.txt index 99faf8252c..76005776d4 100644 --- a/common/genes/wc_genes_static_models.txt +++ b/common/genes/wc_genes_static_models.txt @@ -302,24 +302,17 @@ girl = female } - static_harpy = { + static_lich_duke = { index = 23 male = { - 1 = harpy2brown - 1 = harpy2black - 1 = harpy2white - 1 = harpy2red - 1 = harpy2blue - } - female = { - 1 = harpy2brown - 1 = harpy2black - 1 = harpy2white - 1 = harpy2red - 1 = harpy2blue + 1 = lich4gold + 1 = lich4bronze + 1 = lich4silver + 1 = lich4pewter } + female = male boy = male - girl = female + girl = male } static_dryad = { @@ -1336,18 +1329,6 @@ boy = male girl = male } - static_lich_duke = { - index = 89 - male = { - 1 = lich4gold - 1 = lich4bronze - 1 = lich4silver - 1 = lich4pewter - } - female = male - boy = male - girl = male - } } static_mustaches = { sync_inheritance_with = gene_race diff --git a/common/genes/wc_genes_wings.txt b/common/genes/wc_genes_wings.txt index 8457034a5c..8b3b020e85 100644 --- a/common/genes/wc_genes_wings.txt +++ b/common/genes/wc_genes_wings.txt @@ -33,5 +33,16 @@ boy = male girl = female } + harpy_wings = { + index = 3 + male = { + 1 = male_wings_harpy_0 + } + female = { + 1 = female_wings_harpy_0 + } + boy = male + girl = female + } } } \ No newline at end of file diff --git a/common/scripted_triggers/wc_clothing_triggers.txt b/common/scripted_triggers/wc_clothing_triggers.txt index 3ecfaa0b70..39f924d88c 100644 --- a/common/scripted_triggers/wc_clothing_triggers.txt +++ b/common/scripted_triggers/wc_clothing_triggers.txt @@ -247,6 +247,28 @@ portrait_demonic_clothing_spouse_trigger = { culture = { has_clothing_gfx = demonic_clothing_gfx } } } +portrait_harpy_clothing_trigger = { + scope:culture = { has_clothing_gfx = creature_harpy_gfx } +} +portrait_harpy_clothing_spouse_trigger = { + culture = { has_clothing_gfx = creature_harpy_gfx } +} +portrait_indian_harpy_clothing_trigger = { + scope:culture = { + OR = { + has_clothing_gfx = creature_harpy_gfx + has_clothing_gfx = indian_clothing_gfx + } + } +} +portrait_indian_harpy_clothing_spouse_trigger = { + culture = { + OR = { + has_clothing_gfx = creature_harpy_gfx + has_clothing_gfx = indian_clothing_gfx + } + } +} portrait_wildhammer_clothing_trigger = { scope:culture = { has_clothing_gfx = wildhammer_clothing_gfx } @@ -883,6 +905,24 @@ portrait_steppe_night_elven_clothing_spouse_trigger = { } } } +portrait_steppe_night_elven_harpy_clothing_trigger = { + scope:culture = { + OR = { + portrait_steppe_clothing_contents_trigger = yes + has_clothing_gfx = night_elven_clothing_gfx + has_clothing_gfx = creature_harpy_gfx + } + } +} +portrait_steppe_night_elven_harpy_clothing_spouse_trigger = { + culture = { + OR = { + portrait_steppe_clothing_contents_trigger = yes + has_clothing_gfx = night_elven_clothing_gfx + has_clothing_gfx = creature_harpy_gfx + } + } +} portrait_southern_clothing_trigger = { scope:culture = { this = culture:pirate_culture diff --git a/common/scripted_triggers/wc_portrait_triggers.txt b/common/scripted_triggers/wc_portrait_triggers.txt index 825a05fd29..31c863f0d4 100644 --- a/common/scripted_triggers/wc_portrait_triggers.txt +++ b/common/scripted_triggers/wc_portrait_triggers.txt @@ -19,7 +19,6 @@ is_race_no_gene_trigger = { RACE = creature_jinyu } is_race_no_gene_trigger = { RACE = creature_mogu } is_race_no_gene_trigger = { RACE = creature_centaur } - is_race_no_gene_trigger = { RACE = creature_harpy } is_race_no_gene_trigger = { RACE = creature_dryad } is_race_no_gene_trigger = { RACE = creature_sethrak } is_race_no_gene_trigger = { RACE = creature_magnataur } @@ -161,10 +160,6 @@ has_centaur_portrait_trigger = { exists = culture is_race_no_gene_trigger = { RACE = creature_centaur } } -has_harpy_portrait_trigger = { - exists = culture - is_race_no_gene_trigger = { RACE = creature_harpy } -} has_dryad_portrait_trigger = { exists = culture is_race_no_gene_trigger = { RACE = creature_dryad } diff --git a/common/scripted_triggers/wc_race_triggers.txt b/common/scripted_triggers/wc_race_triggers.txt index 2dd45230ea..7d5267d7e4 100644 --- a/common/scripted_triggers/wc_race_triggers.txt +++ b/common/scripted_triggers/wc_race_triggers.txt @@ -214,6 +214,7 @@ can_have_sexual_relation_with_trigger = { is_race_no_gene_trigger = { RACE = creature_gnome } has_trait_with_flag = goblin_family is_race_no_gene_trigger = { RACE = creature_ogre } + is_race_no_gene_trigger = { RACE = creature_harpy } } } $CHARACTER$ = { @@ -228,6 +229,7 @@ can_have_sexual_relation_with_trigger = { is_race_no_gene_trigger = { RACE = creature_gnome } has_trait_with_flag = goblin_family is_race_no_gene_trigger = { RACE = creature_ogre } + is_race_no_gene_trigger = { RACE = creature_harpy } } } } diff --git a/common/traits/wc_race_traits.txt b/common/traits/wc_race_traits.txt index b53a6afefa..cc1e4659e8 100644 --- a/common/traits/wc_race_traits.txt +++ b/common/traits/wc_race_traits.txt @@ -1142,7 +1142,7 @@ creature_harpy = { group = race level = 44 - flag = static_race + flag = ruler_designer_harpy flag = avian_class flag = can_fly diff --git a/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.asset b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.asset new file mode 100644 index 0000000000..fe19857e10 --- /dev/null +++ b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.asset @@ -0,0 +1,31 @@ +pdxmesh = { + name = "female_hooves_harpy_0_mesh" + file = "female_hooves_harpy_0.mesh" + + meshsettings = { + name = "female_hooves_harpy_0Shape" + index = 0 + texture_diffuse = "harpy_dif.dds" + texture_normal = "harpy_norm.dds" + #texture_normal = "default_yellow_normal.dds" + texture_specular = "male_elven_eyebrows_0_properties.dds" + + #texture_diffuse = "harpy_dif.dds" + #texture_normal = "harpy_norm.dds" + + shader = "wc_portrait_skin_attachment_alpha_to_coverage" + shader_file = "gfx/FX/jomini/portrait.shader" + } +} +entity = { + name = "female_hooves_harpy_0_entity" + pdxmesh = "female_hooves_harpy_0_mesh" + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} \ No newline at end of file diff --git a/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.mesh b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.mesh new file mode 100644 index 0000000000..6c1b391c92 Binary files /dev/null and b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/female_hooves_harpy_0.mesh differ diff --git a/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_dif.dds b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_dif.dds new file mode 100644 index 0000000000..a9f8b9ddd9 Binary files /dev/null and b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_dif.dds differ diff --git a/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_norm.dds b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_norm.dds new file mode 100644 index 0000000000..c686b124ca Binary files /dev/null and b/gfx/models/portraits/attachments/female_hooves/female_hooves_harpy_0/harpy_norm.dds differ diff --git a/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.asset b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.asset new file mode 100644 index 0000000000..26adbae7c5 --- /dev/null +++ b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.asset @@ -0,0 +1,27 @@ +pdxmesh = { + name = "female_wings_harpy_0_mesh" + file = "female_wings_harpy_0.mesh" + + meshsettings = { + name = "female_wings_harpy_0Shape" + index = 0 + texture_diffuse = "harpy_dif.dds" + texture_normal = "harpy_wings_norm.dds" + texture_specular = "male_elven_eyebrows_0_properties.dds" + texture = { file = "black_ssao_color.dds" index = 3 } + shader = "portrait_hair" + shader_file = "gfx/FX/jomini/portrait.shader" + } +} +entity = { + name = "female_wings_harpy_0_entity" + pdxmesh = "female_wings_harpy_0_mesh" + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} \ No newline at end of file diff --git a/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.mesh b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.mesh new file mode 100644 index 0000000000..192bfd8083 Binary files /dev/null and b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/female_wings_harpy_0.mesh differ diff --git a/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/harpy_wings_norm.dds b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/harpy_wings_norm.dds new file mode 100644 index 0000000000..b6db37dcdd Binary files /dev/null and b/gfx/models/portraits/attachments/female_wings/female_wings_harpy_0/harpy_wings_norm.dds differ diff --git a/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.asset b/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.asset new file mode 100644 index 0000000000..31ceb18038 --- /dev/null +++ b/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.asset @@ -0,0 +1,31 @@ +pdxmesh = { + name = "male_hooves_harpy_0_mesh" + file = "male_hooves_harpy_0.mesh" + + meshsettings = { + name = "male_hooves_harpy_0Shape" + index = 0 + texture_diffuse = "harpy_dif.dds" + texture_normal = "harpy_norm.dds" + #texture_normal = "default_yellow_normal.dds" + texture_specular = "male_elven_eyebrows_0_properties.dds" + + #texture_diffuse = "harpy_dif.dds" + #texture_normal = "harpy_norm.dds" + + shader = "wc_portrait_skin_attachment_alpha_to_coverage" + shader_file = "gfx/FX/jomini/portrait.shader" + } +} +entity = { + name = "male_hooves_harpy_0_entity" + pdxmesh = "male_hooves_harpy_0_mesh" + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} \ No newline at end of file diff --git a/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.mesh b/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.mesh new file mode 100644 index 0000000000..93c5a0391f Binary files /dev/null and b/gfx/models/portraits/attachments/male_hooves/male_hooves_harpy_0/male_hooves_harpy_0.mesh differ diff --git a/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.asset b/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.asset new file mode 100644 index 0000000000..d29f1f75e0 --- /dev/null +++ b/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.asset @@ -0,0 +1,27 @@ +pdxmesh = { + name = "male_wings_harpy_0_mesh" + file = "male_wings_harpy_0.mesh" + + meshsettings = { + name = "male_wings_harpy_0Shape" + index = 0 + texture_diffuse = "harpy_dif.dds" + texture_normal = "harpy_wings_norm.dds" + texture_specular = "male_elven_eyebrows_0_properties.dds" + texture = { file = "black_ssao_color.dds" index = 3 } + shader = "portrait_hair" + shader_file = "gfx/FX/jomini/portrait.shader" + } +} +entity = { + name = "male_wings_harpy_0_entity" + pdxmesh = "male_wings_harpy_0_mesh" + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} \ No newline at end of file diff --git a/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.mesh b/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.mesh new file mode 100644 index 0000000000..cf26fb4c04 Binary files /dev/null and b/gfx/models/portraits/attachments/male_wings/male_wings_harpy_0/male_wings_harpy_0.mesh differ diff --git a/gfx/models/portraits/female_body/blendshapes/female_bs_body_harpy.mesh b/gfx/models/portraits/female_body/blendshapes/female_bs_body_harpy.mesh new file mode 100644 index 0000000000..89b347d20e Binary files /dev/null and b/gfx/models/portraits/female_body/blendshapes/female_bs_body_harpy.mesh differ diff --git a/gfx/models/portraits/female_body/female_body.asset b/gfx/models/portraits/female_body/female_body.asset index bf60a49563..53b2736c51 100644 --- a/gfx/models/portraits/female_body/female_body.asset +++ b/gfx/models/portraits/female_body/female_body.asset @@ -63,6 +63,7 @@ pdxmesh = { # Warcraft additive_animation = { id = "body_digitigrade" type = "female_body_digitigrade.anim" } blend_shape = { id = "female_bs_body_hooves" type = "blendshapes/female_bs_body_hooves.mesh" } + blend_shape = { id = "female_bs_body_harpy" type = "blendshapes/female_bs_body_harpy.mesh" } additive_animation = { id = "body_body_shape_apple" type = "female_body_body_shape_apple.anim" } additive_animation = { id = "body_body_shape_hourglass" type = "female_body_body_shape_hourglass.anim" } @@ -423,6 +424,7 @@ entity = { # Warcraft attribute = { name = "body_digitigrade" additive_animation = "body_digitigrade" } attribute = { name = "bs_body_hooves" blend_shape = "female_bs_body_hooves" } + attribute = { name = "bs_body_harpy" blend_shape = "female_bs_body_harpy" } attribute = { name = "body_body_shape_apple" additive_animation = "body_body_shape_apple" default = 0.5 } attribute = { name = "body_body_shape_hourglass" additive_animation = "body_body_shape_hourglass" default = 0.5 } diff --git a/gfx/models/portraits/female_body/girl_body.asset b/gfx/models/portraits/female_body/girl_body.asset index 8dc45f27fd..f37368ee35 100644 --- a/gfx/models/portraits/female_body/girl_body.asset +++ b/gfx/models/portraits/female_body/girl_body.asset @@ -63,6 +63,7 @@ pdxmesh = { # Warcraft additive_animation = { id = "body_digitigrade" type = "female_body_digitigrade.anim" } blend_shape = { id = "female_bs_body_hooves" type = "blendshapes/female_bs_body_hooves.mesh" } + blend_shape = { id = "female_bs_body_harpy" type = "blendshapes/female_bs_body_harpy.mesh" } additive_animation = { id = "body_body_shape_apple" type = "female_body_body_shape_apple.anim" } additive_animation = { id = "body_body_shape_hourglass" type = "female_body_body_shape_hourglass.anim" } @@ -426,6 +427,7 @@ entity = { # Warcraft attribute = { name = "body_digitigrade" additive_animation = "body_digitigrade" } attribute = { name = "bs_body_hooves" blend_shape = "female_bs_body_hooves" } + attribute = { name = "bs_body_harpy" blend_shape = "female_bs_body_harpy" } attribute = { name = "body_body_shape_apple" additive_animation = "body_body_shape_apple" default = 0.5 } diff --git a/gfx/models/portraits/female_head/blendshapes/female_bs_harpy_ear.mesh b/gfx/models/portraits/female_head/blendshapes/female_bs_harpy_ear.mesh new file mode 100644 index 0000000000..82a82fb48e Binary files /dev/null and b/gfx/models/portraits/female_head/blendshapes/female_bs_harpy_ear.mesh differ diff --git a/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes.asset b/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes.asset new file mode 100644 index 0000000000..7a6f6a5750 --- /dev/null +++ b/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes.asset @@ -0,0 +1,72 @@ +pdxmesh = { + name = "female_eyelashes_mesh" + file = "female_eyelashes.mesh" + + meshsettings = { + name = "female_eyelashesShape" + index = 0 + texture_diffuse = "female_eyelashes_diffuse.dds" + texture_normal = "female_eyelashes_normal.dds" + texture_specular = "female_eyelashes_properties.dds" + texture = { file = "female_eyelashes_ssao_color.dds" index = 3 } + shader = "portrait_hair_alpha" + shader_file = "gfx/FX/jomini/portrait.shader" + } + + blend_shape = { id = "female_eyelashes_bs_eye_upper_lid_size_min" type = "female_eyelashes_bs_eye_upper_lid_size_min.mesh" } + blend_shape = { id = "female_eyelashes_bs_eye_size_min" type = "female_eyelashes_bs_eye_size_min.mesh" } + blend_shape = { id = "female_eyelashes_bs_eye_size_max" type = "female_eyelashes_bs_eye_size_max.mesh" } +} + +entity = { + name = "female_eyelashes_entity" + pdxmesh = "female_eyelashes_mesh" + + attribute = { name = "bs_eye_upper_lid_size_min" blend_shape = "female_eyelashes_bs_eye_upper_lid_size_min" } + attribute = { name = "bs_eye_size_min" blend_shape = "female_eyelashes_bs_eye_size_min" } + attribute = { name = "bs_eye_size_max" blend_shape = "female_eyelashes_bs_eye_size_max" } + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} +pdxmesh = { + name = "female_eyelashes_harpy_mesh" + file = "female_eyelashes_harpy.mesh" + + meshsettings = { + name = "female_eyelashesShape" + index = 0 + texture_diffuse = "female_eyelashes_diffuse.dds" + texture_normal = "female_eyelashes_normal.dds" + texture_specular = "female_eyelashes_properties.dds" + texture = { file = "female_eyelashes_ssao_color.dds" index = 3 } + shader = "portrait_hair_alpha" + shader_file = "gfx/FX/jomini/portrait.shader" + } + + blend_shape = { id = "female_eyelashes_bs_eye_upper_lid_size_min" type = "female_eyelashes_bs_eye_upper_lid_size_min.mesh" } + blend_shape = { id = "female_eyelashes_bs_eye_size_min" type = "female_eyelashes_bs_eye_size_min.mesh" } + blend_shape = { id = "female_eyelashes_bs_eye_size_max" type = "female_eyelashes_bs_eye_size_max.mesh" } +} + +entity = { + name = "female_eyelashes_harpy_entity" + pdxmesh = "female_eyelashes_harpy_mesh" + + attribute = { name = "bs_eye_upper_lid_size_min" blend_shape = "female_eyelashes_bs_eye_upper_lid_size_min" } + attribute = { name = "bs_eye_size_min" blend_shape = "female_eyelashes_bs_eye_size_min" } + attribute = { name = "bs_eye_size_max" blend_shape = "female_eyelashes_bs_eye_size_max" } + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} diff --git a/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes_harpy.mesh b/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes_harpy.mesh new file mode 100644 index 0000000000..57cc96ad01 Binary files /dev/null and b/gfx/models/portraits/female_head/female_eyelashes/female_eyelashes_harpy.mesh differ diff --git a/gfx/models/portraits/female_head/female_head.asset b/gfx/models/portraits/female_head/female_head.asset index f004c9f32e..33ab1f38c3 100644 --- a/gfx/models/portraits/female_head/female_head.asset +++ b/gfx/models/portraits/female_head/female_head.asset @@ -92,6 +92,7 @@ pdxmesh = { blend_shape = { id = "female_bs_ear_upper_bend_max" type = "blendshapes/female_bs_ear_upper_bend_max.mesh" } # Warcraft + blend_shape = { id = "female_bs_harpy_ear" type = "blendshapes/female_bs_harpy_ear.mesh" } blend_shape = { id = "female_bs_floppy_ear_length" type = "blendshapes/female_bs_floppy_ear_length.mesh" } blend_shape = { id = "female_bs_erect_ear_lenght_max" type = "blendshapes/female_bs_erect_ear_lenght_max.mesh" } blend_shape = { id = "female_bs_ear_tip_max" type = "blendshapes/female_bs_ear_tip_max.mesh" } @@ -535,6 +536,7 @@ entity = { attribute = { name = "bs_ear_upper_bend_max" blend_shape = "female_bs_ear_upper_bend_max" } # Warcraft + attribute = { name = "bs_harpy_ear" blend_shape = "female_bs_harpy_ear" } attribute = { name = "bs_ear_length" blend_shape = "female_bs_neutral" } #Attribute to blendshape hairs attribute = { name = "bs_floppy_ear_length" blend_shape = "female_bs_floppy_ear_length" } attribute = { name = "bs_erect_ear_lenght_max" blend_shape = "female_bs_erect_ear_lenght_max" } diff --git a/gfx/models/portraits/male_body/blendshapes/male_bs_body_harpy.mesh b/gfx/models/portraits/male_body/blendshapes/male_bs_body_harpy.mesh new file mode 100644 index 0000000000..fb5e2fa7e8 Binary files /dev/null and b/gfx/models/portraits/male_body/blendshapes/male_bs_body_harpy.mesh differ diff --git a/gfx/models/portraits/male_body/boy_body.asset b/gfx/models/portraits/male_body/boy_body.asset index 90e131ba27..40f9076dc4 100644 --- a/gfx/models/portraits/male_body/boy_body.asset +++ b/gfx/models/portraits/male_body/boy_body.asset @@ -28,6 +28,7 @@ pdxmesh = { # Warcraft additive_animation = { id = "body_digitigrade" type = "male_body_digitigrade.anim" } blend_shape = { id = "male_bs_body_hooves" type = "blendshapes/male_bs_body_hooves.mesh" } + blend_shape = { id = "male_bs_body_harpy" type = "blendshapes/male_bs_body_harpy.mesh" } additive_animation = { id = "body_body_shape_apple" type = "male_body_body_shape_apple.anim" } additive_animation = { id = "body_body_shape_hourglass" type = "male_body_body_shape_hourglass.anim" } @@ -368,6 +369,7 @@ entity = { # Warcraft attribute = { name = "body_digitigrade" additive_animation = "body_digitigrade" } attribute = { name = "bs_body_hooves" blend_shape = "male_bs_body_hooves" } + attribute = { name = "bs_body_harpy" blend_shape = "male_bs_body_harpy" } attribute = { name = "body_body_shape_apple" additive_animation = "body_body_shape_apple" default = 0.5 } attribute = { name = "body_body_shape_hourglass" additive_animation = "body_body_shape_hourglass" default = 0.5 } diff --git a/gfx/models/portraits/male_body/male_body.asset b/gfx/models/portraits/male_body/male_body.asset index 12d4a5cb1f..9a2dec9a8f 100644 --- a/gfx/models/portraits/male_body/male_body.asset +++ b/gfx/models/portraits/male_body/male_body.asset @@ -424,6 +424,7 @@ pdxmesh = { # Warcraft additive_animation = { id = "body_digitigrade" type = "male_body_digitigrade.anim" } blend_shape = { id = "male_bs_body_hooves" type = "blendshapes/male_bs_body_hooves.mesh" } + blend_shape = { id = "male_bs_body_harpy" type = "blendshapes/male_bs_body_harpy.mesh" } blend_shape = { id = "male_bs_body_fat_1" type = "blendshapes/male_bs_body_fat_1.mesh" } blend_shape = { id = "male_bs_body_gaunt_1" type = "blendshapes/male_bs_body_gaunt_1.mesh" } @@ -764,6 +765,7 @@ entity = { # Warcraft attribute = { name = "body_digitigrade" additive_animation = "body_digitigrade" } attribute = { name = "bs_body_hooves" blend_shape = "male_bs_body_hooves" } + attribute = { name = "bs_body_harpy" blend_shape = "male_bs_body_harpy" } attribute = { name = "bs_body_fat_1" blend_shape = "male_bs_body_fat_1" } attribute = { name = "bs_body_gaunt_1" blend_shape = "male_bs_body_gaunt_1" } diff --git a/gfx/models/portraits/male_head/blendshapes/male_bs_harpy_ear.mesh b/gfx/models/portraits/male_head/blendshapes/male_bs_harpy_ear.mesh new file mode 100644 index 0000000000..039f56f3dc Binary files /dev/null and b/gfx/models/portraits/male_head/blendshapes/male_bs_harpy_ear.mesh differ diff --git a/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes.asset b/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes.asset new file mode 100644 index 0000000000..e551c9e11d --- /dev/null +++ b/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes.asset @@ -0,0 +1,73 @@ +pdxmesh = { + name = "male_eyelashes_mesh" + file = "male_eyelashes.mesh" + + meshsettings = { + name = "male_eyelashesShape" + index = 0 + texture_diffuse = "female_eyelashes_diffuse.dds" + texture_normal = "female_eyelashes_normal.dds" + texture_specular = "female_eyelashes_properties.dds" + texture = { file = "female_eyelashes_ssao_color.dds" index = 3 } + shader = "portrait_hair_alpha" + shader_file = "gfx/FX/jomini/portrait.shader" + } + + blend_shape = { id = "male_eyelashes_bs_eye_upper_lid_size_min" type = "male_eyelashes_bs_eye_upper_lid_size_min.mesh" } + blend_shape = { id = "male_eyelashes_bs_eye_size_min" type = "male_eyelashes_bs_eye_size_min.mesh" } + blend_shape = { id = "male_eyelashes_bs_eye_size_max" type = "male_eyelashes_bs_eye_size_max.mesh" } +} + +entity = { + name = "male_eyelashes_entity" + pdxmesh = "male_eyelashes_mesh" + + attribute = { name = "bs_eye_upper_lid_size_min" blend_shape = "male_eyelashes_bs_eye_upper_lid_size_min" } + attribute = { name = "bs_eye_size_min" blend_shape = "male_eyelashes_bs_eye_size_min" } + attribute = { name = "bs_eye_size_max" blend_shape = "male_eyelashes_bs_eye_size_max" } + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} +pdxmesh = { + name = "male_eyelashes_harpy_mesh" + file = "male_eyelashes_harpy.mesh" + + meshsettings = { + name = "male_eyelashesShape" + index = 0 + texture_diffuse = "female_eyelashes_diffuse.dds" + texture_normal = "female_eyelashes_normal.dds" + texture_specular = "female_eyelashes_properties.dds" + texture = { file = "female_eyelashes_ssao_color.dds" index = 3 } + shader = "portrait_hair_alpha" + shader_file = "gfx/FX/jomini/portrait.shader" + } + + blend_shape = { id = "male_eyelashes_bs_eye_upper_lid_size_min" type = "male_eyelashes_bs_eye_upper_lid_size_min.mesh" } + blend_shape = { id = "male_eyelashes_bs_eye_size_min" type = "male_eyelashes_bs_eye_size_min.mesh" } + blend_shape = { id = "male_eyelashes_bs_eye_size_max" type = "male_eyelashes_bs_eye_size_max.mesh" } +} + +entity = { + name = "male_eyelashes_harpy_entity" + pdxmesh = "male_eyelashes_harpy_mesh" + + attribute = { name = "bs_eye_upper_lid_size_min" blend_shape = "male_eyelashes_bs_eye_upper_lid_size_min" } + attribute = { name = "bs_eye_size_min" blend_shape = "male_eyelashes_bs_eye_size_min" } + attribute = { name = "bs_eye_size_max" blend_shape = "male_eyelashes_bs_eye_size_max" } + + game_data = { + portrait_entity_user_data = { + color_mask_remap_interval = { + interval = {0.0 1.0} + } + } + } +} + diff --git a/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes_harpy.mesh b/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes_harpy.mesh new file mode 100644 index 0000000000..444c9a5044 Binary files /dev/null and b/gfx/models/portraits/male_head/male_eyelashes/male_eyelashes_harpy.mesh differ diff --git a/gfx/models/portraits/male_head/male_head.asset b/gfx/models/portraits/male_head/male_head.asset index 05a959bbbf..9c81d91353 100644 --- a/gfx/models/portraits/male_head/male_head.asset +++ b/gfx/models/portraits/male_head/male_head.asset @@ -383,6 +383,7 @@ pdxmesh = { blend_shape = { id = "male_bs_ear_upper_bend_max" type = "blendshapes/male_bs_ear_upper_bend_max.mesh" } # Warcraft + blend_shape = { id = "male_bs_harpy_ear" type = "blendshapes/male_bs_harpy_ear.mesh" } blend_shape = { id = "male_bs_floppy_ear_length" type = "blendshapes/male_bs_floppy_ear_length.mesh" } blend_shape = { id = "male_bs_erect_ear_lenght_max" type = "blendshapes/male_bs_erect_ear_lenght_max.mesh" } blend_shape = { id = "male_bs_ear_tip_max" type = "blendshapes/male_bs_ear_tip_max.mesh" } @@ -806,6 +807,7 @@ entity = { attribute = { name = "bs_ear_upper_bend_max" blend_shape = "male_bs_ear_upper_bend_max" } # Warcraft + attribute = { name = "bs_harpy_ear" blend_shape = "male_bs_harpy_ear" } attribute = { name = "bs_ear_length" blend_shape = "male_bs_neutral" } #Attribute to blendshape hairs attribute = { name = "bs_floppy_ear_length" blend_shape = "male_bs_floppy_ear_length" } attribute = { name = "bs_erect_ear_lenght_max" blend_shape = "male_bs_erect_ear_lenght_max" } diff --git a/gfx/models/portraits/static_races/harpy/harpy.asset b/gfx/models/portraits/static_races/harpy/harpy.asset deleted file mode 100644 index 3bcb9c3bdd..0000000000 --- a/gfx/models/portraits/static_races/harpy/harpy.asset +++ /dev/null @@ -1,75 +0,0 @@ -###Transformation I applied in Blender to WoW model - -###Rotation -#Z -90 - -###Size -#60 - -###harpy2brown -pdxmesh = { - name = "harpy_mesh" - file = "harpy.mesh" - - meshsettings = { - name = "harpyShape" - index = 0 - texture_diffuse = "harpy2brown.dds" - texture_normal = "default_yellow_normal.dds" - texture_specular = "male_elven_eyebrows_0_properties.dds" - shader = "portrait_attachment_alpha_to_coverage" - shader_file = "gfx/FX/jomini/portrait.shader" - } -} -entity = { - name = "harpy2brown_entity" - pdxmesh = "harpy_mesh" -} - -###harpy2black -entity = { - name = "harpy2black_entity" - pdxmesh = "harpy_mesh" - - meshsettings = { - name = "harpyShape" - index = 0 - texture_diffuse = "harpy2black.dds" - } -} - -###harpy2white -entity = { - name = "harpy2white_entity" - pdxmesh = "harpy_mesh" - - meshsettings = { - name = "harpyShape" - index = 0 - texture_diffuse = "harpy2white.dds" - } -} - -###harpy2red -entity = { - name = "harpy2red_entity" - pdxmesh = "harpy_mesh" - - meshsettings = { - name = "harpyShape" - index = 0 - texture_diffuse = "harpy2red.dds" - } -} - -###harpy2blue -entity = { - name = "harpy2blue_entity" - pdxmesh = "harpy_mesh" - - meshsettings = { - name = "harpyShape" - index = 0 - texture_diffuse = "harpy2blue.dds" - } -} \ No newline at end of file diff --git a/gfx/models/portraits/static_races/harpy/harpy.mesh b/gfx/models/portraits/static_races/harpy/harpy.mesh deleted file mode 100644 index 9ae9deda5d..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy.mesh and /dev/null differ diff --git a/gfx/models/portraits/static_races/harpy/harpy2black.dds b/gfx/models/portraits/static_races/harpy/harpy2black.dds deleted file mode 100644 index 6ec70a14bb..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy2black.dds and /dev/null differ diff --git a/gfx/models/portraits/static_races/harpy/harpy2blue.dds b/gfx/models/portraits/static_races/harpy/harpy2blue.dds deleted file mode 100644 index 9a79449a25..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy2blue.dds and /dev/null differ diff --git a/gfx/models/portraits/static_races/harpy/harpy2brown.dds b/gfx/models/portraits/static_races/harpy/harpy2brown.dds deleted file mode 100644 index 989d2b190d..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy2brown.dds and /dev/null differ diff --git a/gfx/models/portraits/static_races/harpy/harpy2red.dds b/gfx/models/portraits/static_races/harpy/harpy2red.dds deleted file mode 100644 index 99c7bed954..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy2red.dds and /dev/null differ diff --git a/gfx/models/portraits/static_races/harpy/harpy2white.dds b/gfx/models/portraits/static_races/harpy/harpy2white.dds deleted file mode 100644 index 61c0593342..0000000000 Binary files a/gfx/models/portraits/static_races/harpy/harpy2white.dds and /dev/null differ diff --git a/gfx/portraits/accessories/wc_eyes.txt b/gfx/portraits/accessories/wc_eyes.txt index 5f282702bb..35beef6536 100644 --- a/gfx/portraits/accessories/wc_eyes.txt +++ b/gfx/portraits/accessories/wc_eyes.txt @@ -1 +1,6 @@ - \ No newline at end of file +male_eyelashes_normal_harpy = { + entity = { entity = "male_eyelashes_harpy_entity" shared_pose_entity = head } +} +female_eyelashes_normal_harpy = { + entity = { entity = "female_eyelashes_harpy_entity" shared_pose_entity = head } +} \ No newline at end of file diff --git a/gfx/portraits/accessories/wc_hooves.txt b/gfx/portraits/accessories/wc_hooves.txt index ca3a5677c1..f9b0de5208 100644 --- a/gfx/portraits/accessories/wc_hooves.txt +++ b/gfx/portraits/accessories/wc_hooves.txt @@ -9,4 +9,16 @@ female_hooves_draenei_0 = { set_tags = "no_legwear" entity = { required_tags = "" shared_pose_entity = torso entity = "female_hooves_draenei_0_entity" } +} + +male_hooves_harpy_0 = { + set_tags = "no_legwear" + + entity = { required_tags = "" shared_pose_entity = torso entity = "male_hooves_harpy_0_entity" } +} + +female_hooves_harpy_0 = { + set_tags = "no_legwear" + + entity = { required_tags = "" shared_pose_entity = torso entity = "female_hooves_harpy_0_entity" } } \ No newline at end of file diff --git a/gfx/portraits/accessories/wc_static_races.txt b/gfx/portraits/accessories/wc_static_races.txt index 2d9d49aad4..9095f783d9 100644 --- a/gfx/portraits/accessories/wc_static_races.txt +++ b/gfx/portraits/accessories/wc_static_races.txt @@ -21,7 +21,6 @@ # - Jinyu # - Mogu # - Centaur -# - Harpy # - Dryad # - Frost Nymph # - Sethrak @@ -450,23 +449,6 @@ femalecentaur_black = { entity = { required_tags = "" node = "head_root" entity = "femalecentaur_black_entity" } } -# Harpy -harpy2brown = { - entity = { required_tags = "" node = "head_root" entity = "harpy2brown_entity" } -} -harpy2black = { - entity = { required_tags = "" node = "head_root" entity = "harpy2black_entity" } -} -harpy2white = { - entity = { required_tags = "" node = "head_root" entity = "harpy2white_entity" } -} -harpy2red = { - entity = { required_tags = "" node = "head_root" entity = "harpy2red_entity" } -} -harpy2blue = { - entity = { required_tags = "" node = "head_root" entity = "harpy2blue_entity" } -} - # Dryad ## Female Dryad dryad2default = { diff --git a/gfx/portraits/accessories/wc_wings.txt b/gfx/portraits/accessories/wc_wings.txt index e6a0e95506..4c7b2bfdab 100644 --- a/gfx/portraits/accessories/wc_wings.txt +++ b/gfx/portraits/accessories/wc_wings.txt @@ -7,4 +7,10 @@ female_wings_dh_0 = { } female_wings_succubus_0 = { entity = { required_tags = "" shared_pose_entity = torso entity = "female_wings_succubus_0_entity" } +} +female_wings_harpy_0 = { + entity = { required_tags = "" shared_pose_entity = torso entity = "female_wings_harpy_0_entity" } +} +male_wings_harpy_0 = { + entity = { required_tags = "" shared_pose_entity = torso entity = "male_wings_harpy_0_entity" } } \ No newline at end of file diff --git a/gfx/portraits/portrait_modifiers/01_clothes_base.txt b/gfx/portraits/portrait_modifiers/01_clothes_base.txt index e506208b20..6e73c90afa 100644 --- a/gfx/portraits/portrait_modifiers/01_clothes_base.txt +++ b/gfx/portraits/portrait_modifiers/01_clothes_base.txt @@ -617,8 +617,8 @@ clothes_base = { # The lowest priority group of clothes with triggers based on r base = 0 modifier = { add = 20 - portrait_commoner_clothing_trigger = { - CULTURE_INPUT = indian + portrait_commoner_clothing_trigger = { + CULTURE_INPUT = indian_harpy } } } @@ -635,11 +635,11 @@ clothes_base = { # The lowest priority group of clothes with triggers based on r } weight = { base = 0 - court_fashion_level_4_modifier = { INPUT_PARAMETER = indian } + court_fashion_level_4_modifier = { INPUT_PARAMETER = indian_harpy } modifier = { add = 50 portrait_low_nobles_clothing_trigger = { - CULTURE_INPUT = indian + CULTURE_INPUT = indian_harpy } } } @@ -656,11 +656,11 @@ clothes_base = { # The lowest priority group of clothes with triggers based on r } weight = { base = 0 - court_fashion_level_5_modifier = { INPUT_PARAMETER = indian } + court_fashion_level_5_modifier = { INPUT_PARAMETER = indian_harpy } modifier = { add = 50 portrait_high_nobles_clothing_trigger = { - CULTURE_INPUT = indian + CULTURE_INPUT = indian_harpy } } } diff --git a/gfx/portraits/portrait_modifiers/01_hairstyles_base.txt b/gfx/portraits/portrait_modifiers/01_hairstyles_base.txt index 2042220ca2..47bf9e77c4 100644 --- a/gfx/portraits/portrait_modifiers/01_hairstyles_base.txt +++ b/gfx/portraits/portrait_modifiers/01_hairstyles_base.txt @@ -1320,7 +1320,10 @@ fp3_hairstyles_turkic_wavy_commoners = { template = hair_straight_thin_beard } } - portrait_wc_iberian_christian_clothing_trigger = yes + OR = { + portrait_wc_iberian_christian_clothing_trigger = yes + portrait_harpy_clothing_trigger = yes + } } # Warcraft @@ -1372,7 +1375,10 @@ fp3_hairstyles_turkic_wavy_commoners = { category = gene_hair_type template = hair_curly } - portrait_wc_iberian_christian_clothing_trigger = yes + OR = { + portrait_wc_iberian_christian_clothing_trigger = yes + portrait_harpy_clothing_trigger = yes + } } # Warcraft @@ -1414,6 +1420,67 @@ fp3_hairstyles_turkic_wavy_commoners = { } } + female_hair_fp1_01 = { + dna_modifiers = { + accessory = { + mode = add + gene = hairstyles + template = fp1_hairstyles_straight + accessory = female_hair_fp1_01 + type = female + } + } + weight = { + base = 0 + modifier = { + add = default_hair_chance + exists = this + OR = { + has_gene = { + category = gene_hair_type + template = hair_straight + } + has_gene = { + category = gene_hair_type + template = hair_straight_thin_beard + } + } + is_female = yes + portrait_harpy_clothing_trigger = yes + } + + # Warcraft + fixed_appearance_modifiers = yes + } + } + female_hair_sub_saharan_02 = { + dna_modifiers = { + accessory = { + mode = add + gene = hairstyles + template = western_hairstyles_afro + accessory = female_hair_sub_saharan_02 + type = female + } + } + weight = { + base = 0 + modifier = { + add = default_hair_chance + exists = this + has_gene = { + category = gene_hair_type + template = hair_curly + } + is_female = yes + portrait_harpy_clothing_trigger = yes + } + + # Warcraft + fixed_appearance_modifiers = yes + } + } + fp1_wavy = { dna_modifiers = { accessory = { @@ -1481,6 +1548,7 @@ fp3_hairstyles_turkic_wavy_commoners = { portrait_orcish_hairstyles_trigger = yes portrait_goblin_clothing_trigger = yes portrait_dwarven_hairstyles_trigger = yes + portrait_harpy_clothing_trigger = yes } } } @@ -1526,6 +1594,7 @@ fp3_hairstyles_turkic_wavy_commoners = { portrait_demonic_clothing_trigger = yes portrait_goblin_clothing_trigger = yes portrait_dwarven_hairstyles_trigger = yes + portrait_harpy_clothing_trigger = yes } } } @@ -1571,6 +1640,7 @@ fp3_hairstyles_turkic_wavy_commoners = { portrait_demonic_clothing_trigger = yes portrait_goblin_clothing_trigger = yes portrait_dwarven_hairstyles_trigger = yes + portrait_harpy_clothing_trigger = yes } } } @@ -1617,6 +1687,7 @@ fp3_hairstyles_turkic_wavy_commoners = { portrait_orcish_hairstyles_trigger = yes portrait_goblin_clothing_trigger = yes portrait_dwarven_hairstyles_trigger = yes + portrait_harpy_clothing_trigger = yes } } } @@ -1738,6 +1809,7 @@ fp3_hairstyles_turkic_wavy_commoners = { CULTURE_INPUT = 1_9_hairstyles } } + portrait_harpy_clothing_trigger = yes AND = { is_female = yes portrait_vrykul_beards_trigger = yes diff --git a/gfx/portraits/portrait_modifiers/01_legwear_base.txt b/gfx/portraits/portrait_modifiers/01_legwear_base.txt index 1388b95cee..9b8daeb3cd 100644 --- a/gfx/portraits/portrait_modifiers/01_legwear_base.txt +++ b/gfx/portraits/portrait_modifiers/01_legwear_base.txt @@ -21,7 +21,17 @@ # Warcraft modifier = { add = 2000 - has_no_portrait_trigger = yes + OR = { + has_no_portrait_trigger = yes + has_gene = { + category = gene_grade + template = digitigrade + } + has_gene = { + category = gene_grade + template = harpygrade + } + } } modifier = { diff --git a/gfx/portraits/portrait_modifiers/04_clothes_armor.txt b/gfx/portraits/portrait_modifiers/04_clothes_armor.txt index 7a9067096f..77f049c636 100644 --- a/gfx/portraits/portrait_modifiers/04_clothes_armor.txt +++ b/gfx/portraits/portrait_modifiers/04_clothes_armor.txt @@ -1098,22 +1098,22 @@ modifier = { add = 50 OR = { - portrait_commoner_armor_trigger = { - CULTURE_INPUT = steppe_night_elven + portrait_commoner_armor_trigger = { + CULTURE_INPUT = steppe_night_elven_harpy } - portrait_low_nobles_armor_trigger = { - CULTURE_INPUT = steppe_night_elven + portrait_low_nobles_armor_trigger = { + CULTURE_INPUT = steppe_night_elven_harpy } } } modifier = { add = 21 # So priests who are actively serving in a raised army as a commander or knight wear armor instead of priest robes OR = { - portrait_commoner_armor_in_army_trigger = { - CULTURE_INPUT = steppe_night_elven + portrait_commoner_armor_in_army_trigger = { + CULTURE_INPUT = steppe_night_elven_harpy } - portrait_low_nobles_armor_in_army_trigger = { - CULTURE_INPUT = steppe_night_elven + portrait_low_nobles_armor_in_army_trigger = { + CULTURE_INPUT = steppe_night_elven_harpy } } } @@ -1135,13 +1135,13 @@ modifier = { add = 50 portrait_high_nobles_armor_trigger = { - CULTURE_INPUT = steppe_night_elven + CULTURE_INPUT = steppe_night_elven_harpy } } modifier = { add = 21 # So priests who are actively serving in a raised army as a commander or knight wear armor instead of priest robes portrait_high_nobles_armor_in_army_trigger = { - CULTURE_INPUT = steppe_night_elven + CULTURE_INPUT = steppe_night_elven_harpy } } } diff --git a/gfx/portraits/portrait_modifiers/wc_race_portrait_modifiers.txt b/gfx/portraits/portrait_modifiers/wc_race_portrait_modifiers.txt index 5eae2d1e99..622f8708ab 100644 --- a/gfx/portraits/portrait_modifiers/wc_race_portrait_modifiers.txt +++ b/gfx/portraits/portrait_modifiers/wc_race_portrait_modifiers.txt @@ -517,24 +517,6 @@ } } - static_harpy = { - dna_modifiers = { - accessory = { - mode = add - gene = static_model - template = static_harpy - range = { 0 1 } # For the randomness to work correctly - } - } - weight = { - base = 0 - modifier = { - add = 100 - is_race_no_gene_trigger = { RACE = creature_harpy } - } - } - } - static_dryad = { dna_modifiers = { accessory = { diff --git a/gfx/portraits/trait_portrait_modifiers/00_trait_modifiers.txt b/gfx/portraits/trait_portrait_modifiers/00_trait_modifiers.txt index b81dd7fed3..a28c221618 100644 --- a/gfx/portraits/trait_portrait_modifiers/00_trait_modifiers.txt +++ b/gfx/portraits/trait_portrait_modifiers/00_trait_modifiers.txt @@ -853,6 +853,16 @@ one_legged = { trigger = { # Warcraft has_no_portrait_trigger = no + NOR = { + has_gene = { + category = gene_grade + template = digitigrade + } + has_gene = { + category = gene_grade + template = harpygrade + } + } } traits = { one_legged diff --git a/gui/window_ruler_designer.gui b/gui/window_ruler_designer.gui index c250d55845..15f5111e70 100644 --- a/gui/window_ruler_designer.gui +++ b/gui/window_ruler_designer.gui @@ -1263,6 +1263,17 @@ window = { layoutpolicy_horizontal = expanding datamodel = "[GetTraitsWithFlag('dragon_family')]" } + #harpy traits + vbox_race_trait_selection_content = { + visible = "[Or(VariableSystem.HasValue( 'picked_ethnicity', Localize('green_harpy_ethnicity') ), VariableSystem.HasValue( 'picked_ethnicity', Localize('yellow_harpy_ethnicity') ))]" + layoutpolicy_horizontal = expanding + datamodel = "[GetTraitsWithFlag('ruler_designer_harpy')]" + } + vbox_race_trait_selection_content = { + visible = "[Or(VariableSystem.HasValue( 'picked_ethnicity', Localize('blue_harpy_ethnicity') ), VariableSystem.HasValue( 'picked_ethnicity', Localize('elven_harpy_ethnicity') ))]" + layoutpolicy_horizontal = expanding + datamodel = "[GetTraitsWithFlag('ruler_designer_harpy')]" + } #creature_satyr vbox_race_trait_selection_content = { visible = "[VariableSystem.HasValue( 'picked_ethnicity', Localize('satyr_ethnicity') )]" diff --git a/localization/english/wc_portraits_l_english.yml b/localization/english/wc_portraits_l_english.yml index 19153df878..3a7eba55eb 100644 --- a/localization/english/wc_portraits_l_english.yml +++ b/localization/english/wc_portraits_l_english.yml @@ -482,9 +482,13 @@ dragon_green_ethnicity:0 "Green Dragon" dragon_red_ethnicity:0 "Red Dragon" dragon_red_ethnicity_without_horn:0 "$dragon_red_ethnicity$" - + + green_harpy_ethnicity:0 "Harpy Green" + yellow_harpy_ethnicity:0 "Harpy Yellow" + blue_harpy_ethnicity:0 "Harpy Blue" + elven_harpy_ethnicity:0 "Harpy Elven" + #Giant Ethnicities skrog_ethnicity:0 "Skrog" - drogbar_ethnicity:0 "Drogbar" - trogg_ethnicity:0 "Trogg" \ No newline at end of file + trogg_ethnicity:0 "Trogg"