Skip to content

Commit

Permalink
Исправления под апстрим
Browse files Browse the repository at this point in the history
  • Loading branch information
Nlaysi committed Sep 13, 2024
1 parent 3522305 commit 0a7d9b8
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 95 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@
overlays_standing[FACEMASK_LAYER] = mask_overlay

apply_overlay(FACEMASK_LAYER)
update_mutant_bodyparts()
update_body_parts()

/mob/living/carbon/human/update_worn_head(update_obscured = TRUE)
remove_overlay(HEAD_LAYER)
Expand Down Expand Up @@ -130,6 +130,6 @@
my_chest?.worn_suit_offset?.apply_offset(suit_overlay)
overlays_standing[SUIT_LAYER] = suit_overlay
update_body_parts()
update_mutant_bodyparts()
update_body_parts()

apply_overlay(SUIT_LAYER)
106 changes: 20 additions & 86 deletions modular_bandastation/species/code/human/species_type/vulpkanin.dm
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,11 @@
mutanttongue = /obj/item/organ/internal/tongue/vulpkanin
mutantliver = /obj/item/organ/internal/liver/vulpkanin
mutantstomach = /obj/item/organ/internal/stomach/vulpkanin

external_organs = list(
mutant_organs = list(
/obj/item/organ/external/tail/vulpkanin = "Default",
)

mutant_bodyparts = list(
"wings" = "None",
"vulpkanin_body_markings" = "None",
"vulpkanin_tail_markings" = "None",
)

body_markings = list(/datum/bodypart_overlay/simple/body_marking/vulpkanin = "None")
bodypart_overrides = list(
BODY_ZONE_HEAD = /obj/item/bodypart/head/vulpkanin,
BODY_ZONE_CHEST = /obj/item/bodypart/chest/vulpkanin,
Expand Down Expand Up @@ -214,90 +208,30 @@
'sound/voice/human/manlaugh2.ogg',
)

/datum/species/vulpkanin/handle_mutant_bodyparts(mob/living/carbon/human/source, forced_colour)
var/list/bodyparts_to_add = mutant_bodyparts.Copy()
var/list/relevent_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
var/list/standing = list()

source.remove_overlay(BODY_BEHIND_LAYER)
source.remove_overlay(BODY_ADJ_LAYER)
source.remove_overlay(BODY_FRONT_LAYER)

if(!mutant_bodyparts || HAS_TRAIT(source, TRAIT_INVISIBLE_MAN))
return

var/obj/item/bodypart/head/noggin = source.get_bodypart(BODY_ZONE_HEAD)


if(mutant_bodyparts["ears"])
if(!source.dna.features["ears"] || source.dna.features["ears"] == "None" || source.head && (source.head.flags_inv & HIDEHAIR) || (source.wear_mask && (source.wear_mask.flags_inv & HIDEHAIR)) || !noggin || IS_ROBOTIC_LIMB(noggin))
bodyparts_to_add -= "ears"
/datum/species/vulpkanin/add_body_markings(mob/living/carbon/human/vulp)
for(var/markings_type in body_markings)
var/datum/bodypart_overlay/simple/body_marking/markings = new markings_type()
var/accessory_name = vulp.dna.features[markings.dna_feature_key]
var/datum/sprite_accessory/vulpkanin_body_markings/accessory = markings.get_accessory(accessory_name)

if(!bodyparts_to_add)
return
if(isnull(accessory))
CRASH("Value: [accessory_name] did not have a corresponding sprite accessory!")

var/g = (source.physique == FEMALE) ? "f" : "m"
for(var/obj/item/bodypart/part as anything in markings.applies_to) //check through our limbs
var/obj/item/bodypart/people_part = vulp.get_bodypart(initial(part.body_zone)) // and see if we have a compatible marking for that limb

for(var/layer in relevent_layers)
var/layertext = mutant_bodyparts_layertext(layer)
if(!people_part)
continue

for(var/bodypart in bodyparts_to_add)
var/datum/sprite_accessory/accessory
switch(bodypart)
if("ears")
accessory = SSaccessories.ears_list[source.dna.features["ears"]]
if("vulpkanin_body_markings")
accessory = SSaccessories.vulpkanin_body_markings_list[source.dna.features["vulpkanin_body_markings"]]
var/datum/bodypart_overlay/simple/body_marking/overlay = new markings_type ()

if(!accessory || accessory.icon_state == "none")
continue
// Tell the overlay what it should look like
overlay.icon = accessory.icon
overlay.icon_state = accessory.icon_state
overlay.use_gender = accessory.gender_specific
overlay.draw_color = accessory.color_src ? vulp.dna.features["furcolor_first"] : null

var/mutable_appearance/accessory_overlay = mutable_appearance(accessory.icon, layer = -layer)

if(accessory.gender_specific)
accessory_overlay.icon_state = "[g]_[bodypart]_[accessory.icon_state]_[layertext]"
else
accessory_overlay.icon_state = "m_[bodypart]_[accessory.icon_state]_[layertext]"

if(accessory.em_block)
accessory_overlay.overlays += emissive_blocker(accessory_overlay.icon, accessory_overlay.icon_state, source, accessory_overlay.alpha)

if(accessory.center)
accessory_overlay = center_image(accessory_overlay, accessory.dimension_x, accessory.dimension_y)

if(!(HAS_TRAIT(source, TRAIT_HUSK)))
if(!forced_colour)
switch(accessory.color_src)
if(MUTANT_COLOR)
accessory_overlay.color = fixed_mut_color || source.dna.features["mcolor"]
if(HAIR_COLOR)
accessory_overlay.color = get_fixed_hair_color(source) || source.hair_color
if(EYE_COLOR)
accessory_overlay.color = source.eye_color_left
if("vulpkanin_body_markings_color")
accessory_overlay.color = source.dna.features["furcolor_first"]
else
accessory_overlay.color = forced_colour
standing += accessory_overlay

if(accessory.hasinner)
var/mutable_appearance/inner_accessory_overlay = mutable_appearance(accessory.icon, layer = -layer)
if(accessory.gender_specific)
inner_accessory_overlay.icon_state = "[g]_[bodypart]inner_[accessory.icon_state]_[layertext]"
else
inner_accessory_overlay.icon_state = "m_[bodypart]inner_[accessory.icon_state]_[layertext]"

if(accessory.center)
inner_accessory_overlay = center_image(inner_accessory_overlay, accessory.dimension_x, accessory.dimension_y)

standing += inner_accessory_overlay

source.overlays_standing[layer] = standing.Copy()
standing = list()

source.apply_overlay(BODY_BEHIND_LAYER)
source.apply_overlay(BODY_ADJ_LAYER)
source.apply_overlay(BODY_FRONT_LAYER)
people_part.add_bodypart_overlay(overlay)

/obj/item/bodypart/head/get_hair_and_lips_icon(dropped)
. = ..()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
// BODY

/datum/bodypart_overlay/simple/body_marking/vulpkanin
dna_feature_key = "vulpkanin_body_markings"
applies_to = list(/obj/item/bodypart/chest)

/datum/bodypart_overlay/simple/body_marking/vulpkanin/get_accessory(name)
return SSaccessories.vulpkanin_body_markings_list[name]

/datum/sprite_accessory/vulpkanin_body_markings
icon = 'modular_bandastation/species/icons/mob/species/vulpkanin/body_markings.dmi'
name = "None"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Раскраска тела"
should_generate_icons = TRUE
relevant_mutant_bodypart = "vulpkanin_body_markings"
relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/vulpkanin

/datum/preference/choiced/vulpkanin_body_markings/init_possible_values()
return assoc_to_keys_features(SSaccessories.vulpkanin_body_markings_list)
Expand All @@ -32,7 +32,7 @@
var/icon/icon_with_markings = new(body)

if (value != "None")
var/icon/body_part_icon = icon(markings.icon, "m_vulpkanin_body_markings_[markings.icon_state]_ADJ")
var/icon/body_part_icon = icon(markings.icon, "male_[markings.icon_state]_chest")
body_part_icon.Crop(1, 1, 32, 32)
body_part_icon.Blend(COLOR_VERY_LIGHT_GRAY, ICON_MULTIPLY)
icon_with_markings.Blend(body_part_icon, ICON_OVERLAY)
Expand Down Expand Up @@ -60,8 +60,7 @@
target.dna.features["tail_vulpkanin"] = value

/datum/preference/choiced/tail_vulpkanin/create_default_value()
var/datum/sprite_accessory/tails/vulpkanin/fluffy/tail = /datum/sprite_accessory/tails/vulpkanin/fluffy
return initial(tail.name)
return /datum/sprite_accessory/tails/vulpkanin/fluffy::name

/datum/preference/choiced/vulpkanin_body_markings/compile_constant_data()
var/list/data = ..()
Expand All @@ -75,7 +74,7 @@
savefile_key = "vulpkanin_body_markings_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SUPPLEMENTAL_FEATURES
relevant_mutant_bodypart = "vulpkanin_body_markings"
relevant_body_markings = /datum/bodypart_overlay/simple/body_marking/vulpkanin

/datum/preference/color/vulpkanin_body_markings_color/create_default_value()
return COLOR_WHITE
Expand Down Expand Up @@ -283,7 +282,7 @@
savefile_key = "feature_vulpkanin_tail_markings"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
relevant_mutant_bodypart = "vulpkanin_tail_markings"
relevant_external_organ = /obj/item/organ/external/tail/vulpkanin

/datum/preference/choiced/vulpkanin_tail_markings/init_possible_values()
return assoc_to_keys_features(SSaccessories.vulpkanin_tail_markings_list)
Expand Down Expand Up @@ -312,7 +311,7 @@
savefile_key = "vulpkanin_tail_markings_color"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_SECONDARY_FEATURES
relevant_mutant_bodypart = "vulpkanin_tail_markings"
relevant_external_organ = /obj/item/organ/external/tail/vulpkanin

/datum/preference/color/vulpkanin_tail_markings_color/create_default_value()
return COLOR_WHITE
Expand Down
Binary file not shown.

0 comments on commit 0a7d9b8

Please sign in to comment.