From 9e8952142f9b9eef72f9e39ce819b51dac695f36 Mon Sep 17 00:00:00 2001 From: sarcoph <83266791+sarcoph@users.noreply.github.com> Date: Thu, 12 May 2022 12:00:59 -0800 Subject: [PATCH] matrixed bodyparts and sleek ipcs --- code/modules/surgery/bodyparts/bodyparts.dm | 40 +++++++---- .../mob/dead/new_player/cosmetic_parts.dm | 68 +++++++++++++++++- hyperstation/icons/mob/char_parts.dmi | Bin 209 -> 1791 bytes hyperstation/icons/mob/char_parts.png | Bin 0 -> 1629 bytes 4 files changed, 91 insertions(+), 17 deletions(-) create mode 100644 hyperstation/icons/mob/char_parts.png diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index c25299f0a..2be66de29 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -391,6 +391,7 @@ if(cosmetic_icon.icon) base_bp_icon = cosmetic_icon.icon use_digitigrade = cosmetic_icon.support_digitigrade ? use_digitigrade : NOT_DIGITIGRADE + color_src = cosmetic_icon.color_src ? cosmetic_icon.color_src : MUTCOLORS if("mam_body_markings" in S.default_features) var/datum/sprite_accessory/Smark @@ -403,11 +404,12 @@ else body_markings = "plain" auxmarking = "plain" - markings_color = list(colorlist) - else body_markings = null auxmarking = null + + if((MUTCOLORS in S.species_traits) || (MUTCOLORS_PARTSONLY in S.species_traits)) + markings_color = list(colorlist) if(!dropping_limb && H.dna.check_mutation(HULK)) mutation_color = "00aa00" @@ -567,20 +569,28 @@ . += marking return - if(color_src) //TODO - add color matrix support for base species limbs - var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) - if(draw_color) - limb.color = "#[draw_color]" + if(!color_src) + return + switch(color_src) + if(MUTCOLORS) + var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) + if(draw_color) + limb.color = "#[draw_color]" + if(aux_zone) + aux.color = "#[draw_color]" + if(MATRIXED) + limb.color = list(markings_color) if(aux_zone) - aux.color = "#[draw_color]" - if(!isnull(auxmarking) && !has_cosmetic_state) - auxmarking.color = list(markings_color) - - if(!isnull(body_markings) && !has_cosmetic_state) - if(is_husk) - marking.color = "#141414" - else - marking.color = list(markings_color) + aux.color = list(markings_color) + if(has_cosmetic_state) + return + if(!isnull(auxmarking)) + auxmarking.color = list(markings_color) + if(!isnull(body_markings)) + if(is_husk) + marking.color = "#141414" + else + marking.color = list(markings_color) /obj/item/bodypart/deconstruct(disassembled = TRUE) diff --git a/hyperstation/code/modules/mob/dead/new_player/cosmetic_parts.dm b/hyperstation/code/modules/mob/dead/new_player/cosmetic_parts.dm index aab187740..2e5e10987 100644 --- a/hyperstation/code/modules/mob/dead/new_player/cosmetic_parts.dm +++ b/hyperstation/code/modules/mob/dead/new_player/cosmetic_parts.dm @@ -13,10 +13,15 @@ safely. */ /datum/cosmetic_part + /** The name of the cosmetic part. This shows up in the preferences dropdown. */ var/name var/icon = 'hyperstation/icons/mob/char_parts.dmi' var/icon_state + /** How colors are determined for this part. MUTCOLORS for base color, MATRIXED to allow multiple channels. */ + var/color_src = MUTCOLORS + /** Whether or not this cosmetic part has an alternate form for digitigrade legs. */ var/support_digitigrade = TRUE + /** Species IDs that support this cosmetic part. Bypassed with "show mismatched markings" option. */ var/list/supported_species /datum/cosmetic_part/head @@ -24,25 +29,84 @@ safely. /datum/cosmetic_part/arms /datum/cosmetic_part/legs +// HEADS +// ========================================= + /datum/cosmetic_part/head/default name = "default" icon = null + +// CHESTS +// ========================================= + /datum/cosmetic_part/chest/default name = "default" icon = null +/datum/cosmetic_part/chest/ipc_sleek + name = "sleek ipc chest" + icon_state = "ipc_sleek" + supported_species = list("ipc") + color_src = MATRIXED + + +// ARMS +// ========================================= + /datum/cosmetic_part/arms/default name = "default" icon = null +/datum/cosmetic_part/arms/avian_alt + name = "avian claws" + icon_state = "avian_alt" + supported_species = list("mammal", "avian", "aquatic", "insect", "xeno", "synthliz") + +/datum/cosmetic_part/arms/insect + name = "insect arms" + icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' + icon_state = "insect" + supported_species = list("mammal", "avian", "aquatic", "insect", "xeno", "synthliz") + support_digitigrade = TRUE + +/datum/cosmetic_part/arms/ipc_sleek + name = "sleek ipc arms" + icon_state = "ipc_sleek" + supported_species = list("ipc") + color_src = MATRIXED + + +// LEGS +// ========================================= + /datum/cosmetic_part/legs/default name = "default" icon = null /datum/cosmetic_part/legs/avian - name = "avian" + name = "avian legs" icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' icon_state = "avian" supported_species = list("mammal", "avian", "aquatic", "insect", "xeno", "synthliz") - support_digitigrade = FALSE \ No newline at end of file + support_digitigrade = FALSE + +/datum/cosmetic_part/legs/mammal + name = "mammal legs" + icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' + icon_state = "mammal" + supported_species = list("mammal", "avian", "aquatic", "insect", "xeno", "synthliz") + support_digitigrade = TRUE + +/datum/cosmetic_part/legs/insect + name = "insect legs" + icon = 'modular_citadel/icons/mob/mutant_bodyparts.dmi' + icon_state = "insect" + supported_species = list("mammal", "avian", "aquatic", "insect", "xeno", "synthliz") + support_digitigrade = TRUE + +/datum/cosmetic_part/legs/ipc_sleek + name = "sleek ipc legs" + icon_state = "ipc_sleek" + supported_species = list("ipc") + color_src = MATRIXED \ No newline at end of file diff --git a/hyperstation/icons/mob/char_parts.dmi b/hyperstation/icons/mob/char_parts.dmi index f082396ac3b805335d7c3d25b15bfded481a7102..216df9afee73a4f50deee43c5f8be496fd2aa9de 100644 GIT binary patch literal 1791 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 bbZG2EFOO(J