From e89b05cfdd282094b0f530225032e93c2483fb14 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 23 Apr 2021 21:13:32 +0100 Subject: [PATCH 01/63] oh dear --- code/modules/client/preferences.dm | 21 +++-- code/modules/surgery/bodyparts/_bodyparts.dm | 99 ++++++++++---------- 2 files changed, 64 insertions(+), 56 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 3e4b962bc4..60be3dac5c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/eye_type = DEFAULT_EYES_TYPE //Eye type var/split_eye_colors = FALSE var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = list(), "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races @@ -1725,12 +1725,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) //let's ensure that no weird shit happens on species swapping. custom_species = null if(!parent.can_have_part("body_markings")) - features["body_markings"] = "None" + features["body_markings"] = list() if(!parent.can_have_part("mam_body_markings")) - features["mam_body_markings"] = "None" + features["mam_body_markings"] = list() if(parent.can_have_part("mam_body_markings")) if(features["mam_body_markings"] == "None") - features["mam_body_markings"] = "Plain" + features["mam_body_markings"] = list() if(parent.can_have_part("tail_lizard")) features["tail_lizard"] = "Smooth" if(pref_species.id == "felinid") @@ -1963,9 +1963,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/new_body_markings new_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in GLOB.body_markings_list if(new_body_markings) - features["body_markings"] = new_body_markings + var/marking_list = list() + for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) + marking_list += list(part, new_body_markings) + features["body_markings"] = marking_list if(new_body_markings != "None") - features["mam_body_markings"] = "None" + features["mam_body_markings"] = list() if("legs") var/new_legs @@ -2101,10 +2104,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_mam_body_markings) features["mam_body_markings"] = new_mam_body_markings if(new_mam_body_markings != "None") - features["body_markings"] = "None" + features["body_markings"] = list() else if(new_mam_body_markings == "None") - features["mam_body_markings"] = "Plain" - features["body_markings"] = "None" + features["mam_body_markings"] = list() + features["body_markings"] = list() //Xeno Bodyparts if("xenohead")//Head or caste type diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 38f53c93a5..1790809d14 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -47,10 +47,11 @@ var/species_color = "" var/mutation_color = "" var/no_update = 0 - var/body_markings = "" //for bodypart markings - var/body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' + var/body_markings = "" //for bodypart markings, deprecated + var/list/body_markings_list // stores body markings as lists, with the first value being the name of the bodypart, the second value being the name of the marking, and the third being the colour + var/marking_value // combination of old aux_marking and body_marking variables as they were always set together to the same value + var/static/default_body_markings_icon = 'modular_citadel/icons/mob/mam_markings.dmi' var/list/markings_color = list() - var/aux_marking var/digitigrade_type var/animal_origin = null //for nonhuman bodypart (e.g. monkey) @@ -632,8 +633,7 @@ color_src = FALSE base_bp_icon = DEFAULT_BODYPART_ICON no_update = TRUE - body_markings = "husk" // reeee - aux_marking = "husk" + marking_value = "husk" if(no_update) return @@ -649,11 +649,7 @@ //body marking memes var/list/colorlist = list() - //var/advanced_color_system = (H.dna.features["color_scheme"] == ADVANCED_CHARACTER_COLORING) colorlist.Cut() - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_primary"]]00") : ReadRGB("[H.dna.features["mcolor"]]00") - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_secondary"]]00") : ReadRGB("[H.dna.features["mcolor2"]]00") - //colorlist += advanced_color_system ? ReadRGB("[H.dna.features["mam_body_markings_tertiary"]]00") : ReadRGB("[H.dna.features["mcolor3"]]00") colorlist += ReadRGB("[H.dna.features["mcolor"]]00") colorlist += ReadRGB("[H.dna.features["mcolor2"]]00") colorlist += ReadRGB("[H.dna.features["mcolor3"]]00") @@ -688,21 +684,26 @@ else digitigrade_type = null - if(S.mutant_bodyparts["mam_body_markings"]) - var/datum/sprite_accessory/Smark - Smark = GLOB.mam_body_markings_list[H.dna.features["mam_body_markings"]] - if(Smark) - body_markings_icon = Smark.icon - if(H.dna.features["mam_body_markings"] != "None") - body_markings = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) - aux_marking = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) - else - body_markings = "plain" - aux_marking = "plain" + if(S.mutant_bodyparts["mam_body_markings"]) // checks if the species can actually have body markings + // get all markings for this bodypart type + for(var/list/marking in H.dna.features["mam_body_markings"]) + // marking is a list containing bodypart type, bodymarking name, and then the colour (colour won't be used in v1) + if(marking[1] == body_part) + var/datum/sprite_accessory/Smark + Smark = GLOB.mam_body_markings_list[marking[2]] + var/body_markings_icon = default_body_markings_icon + if(Smark) + body_markings_icon = Smark.icon + var/marking_value = "" // combination of body and aux markings from old system + if(H.dna.features["mam_body_markings"] != "None") + marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) + else + marking_value = "plain" + body_markings_list += list(body_markings_icon, marking_value) + markings_color = list(colorlist) else - body_markings = null - aux_marking = null + marking_value = null if(S.override_bp_icon) base_bp_icon = S.override_bp_icon @@ -728,8 +729,7 @@ if(is_robotic_limb()) dmg_overlay_type = "robotic" if(is_robotic_limb(FALSE)) - body_markings = null - aux_marking = null + marking_value = null if(dropping_limb) no_update = TRUE //when attached, the limb won't be affected by the appearance changes of its mob owner. @@ -755,7 +755,7 @@ var/image_dir = 0 var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable - +/* if(dropped) image_dir = SOUTH if(dmg_overlay_type) @@ -772,7 +772,7 @@ . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else . += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - +*/ var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/list/aux = list() var/image/marking @@ -808,21 +808,22 @@ limb.icon_state = "[species_id]_[body_zone]" // Body markings - if(!isnull(body_markings)) + if(!length(body_markings_list)) if(species_id == "husk") marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - else if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) - else - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - - . += marking + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) + else + . += image(marking[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) // Citadel End @@ -830,11 +831,12 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[species_id]_[I]", -aux_layer, image_dir) - if(!isnull(aux_marking)) + if(!isnull(marking_value)) if(species_id == "husk") auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) else - auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir) + for(var/marking_list in body_markings_list) + auxmarking += image(body_markings_list[1], "[body_markings_list[2]]_[I]", -aux_layer, image_dir) . += aux . += auxmarking @@ -849,11 +851,12 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[I]", -aux_layer, image_dir) - if(!isnull(aux_marking)) + if(!isnull(marking_value)) if(species_id == "husk") auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) else - auxmarking += image(body_markings_icon, "[body_markings]_[I]", -aux_layer, image_dir) + for(var/marking_list in body_markings_list) + auxmarking += image(body_markings_list[1], "[body_markings_list[2]]_[I]", -aux_layer, image_dir) . += auxmarking . += aux @@ -863,14 +866,16 @@ else if(species_id == "husk" && use_digitigrade) marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - else if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - marking = image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) - else - marking = image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) else - marking = image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - . += marking + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) + else + . += image(marking[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) return if(color_src) //TODO - add color matrix support for base species limbs @@ -891,7 +896,7 @@ if(grayscale) I.icon_state += "_g" I.color = draw_color - if(!isnull(aux_marking)) + if(!isnull(marking_value)) for(var/a in auxmarking) var/image/I = a if(species_id == "husk") From 869124bb5035837e9401447ceed406c4848f5f4a Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 24 Apr 2021 15:56:57 +0100 Subject: [PATCH 02/63] markings --- code/modules/client/preferences.dm | 17 +++++++++-------- .../carbon/human/species_types/anthromorph.dm | 2 +- .../carbon/human/species_types/lizardpeople.dm | 2 +- .../living/carbon/human/species_types/xeno.dm | 2 +- 4 files changed, 12 insertions(+), 11 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 60be3dac5c..af38521b4a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1967,7 +1967,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) marking_list += list(part, new_body_markings) features["body_markings"] = marking_list - if(new_body_markings != "None") + if(new_body_markings != list()) features["mam_body_markings"] = list() if("legs") @@ -2101,13 +2101,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) snowflake_markings_list[S.name] = path var/new_mam_body_markings new_mam_body_markings = input(user, "Choose your character's body markings:", "Character Preference") as null|anything in snowflake_markings_list - if(new_mam_body_markings) - features["mam_body_markings"] = new_mam_body_markings - if(new_mam_body_markings != "None") - features["body_markings"] = list() - else if(new_mam_body_markings == "None") - features["mam_body_markings"] = list() - features["body_markings"] = list() + if(new_mam_body_markings != "None") + var/marking_list = list() + for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) + marking_list += list(part, new_mam_body_markings) + features["mam_body_markings"] = marking_list + else if(new_mam_body_markings == "None") + features["mam_body_markings"] = list() + features["body_markings"] = list() //Xeno Bodyparts if("xenohead")//Head or caste type diff --git a/code/modules/mob/living/carbon/human/species_types/anthromorph.dm b/code/modules/mob/living/carbon/human/species_types/anthromorph.dm index d718db818c..1c0936af37 100644 --- a/code/modules/mob/living/carbon/human/species_types/anthromorph.dm +++ b/code/modules/mob/living/carbon/human/species_types/anthromorph.dm @@ -5,7 +5,7 @@ species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE) inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "deco_wings" = "None", - "mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") + "mam_body_markings" = list(), "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian") attack_verb = "claw" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 40645b13d4..a6cc8e8b8c 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -11,7 +11,7 @@ coldmod = 1.5 heatmod = 0.67 mutant_bodyparts = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "mam_snouts" = "Round", - "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", + "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = list(), "legs" = "Digitigrade", "taur" = "None", "deco_wings" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' diff --git a/code/modules/mob/living/carbon/human/species_types/xeno.dm b/code/modules/mob/living/carbon/human/species_types/xeno.dm index 9d5a700417..e9d9aa2d5b 100644 --- a/code/modules/mob/living/carbon/human/species_types/xeno.dm +++ b/code/modules/mob/living/carbon/human/species_types/xeno.dm @@ -5,7 +5,7 @@ say_mod = "hisses" default_color = "00FF00" species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None") + mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = list(),"mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade","deco_wings"= "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' From ec41b301c792f110ad66ddbb15f5ceaa98d99c4b Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 24 Apr 2021 18:55:07 +0100 Subject: [PATCH 03/63] a --- code/modules/client/preferences.dm | 4 ++-- code/modules/surgery/bodyparts/_bodyparts.dm | 16 +++++++--------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index af38521b4a..ccb79ce255 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1965,7 +1965,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_body_markings) var/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) - marking_list += list(part, new_body_markings) + marking_list += list(list(part, new_body_markings)) features["body_markings"] = marking_list if(new_body_markings != list()) features["mam_body_markings"] = list() @@ -2104,7 +2104,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_mam_body_markings != "None") var/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) - marking_list += list(part, new_mam_body_markings) + marking_list += list(list(part, new_mam_body_markings)) features["mam_body_markings"] = marking_list else if(new_mam_body_markings == "None") features["mam_body_markings"] = list() diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 1790809d14..f8c1b525c6 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -810,10 +810,9 @@ // Body markings if(!length(body_markings_list)) if(species_id == "husk") - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else for(var/list/marking_list in body_markings_list) // marking stores icon and value for the specific bodypart @@ -862,10 +861,9 @@ if(!isnull(body_markings)) if(species_id == "husk") - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - + . += = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else for(var/list/marking_list in body_markings_list) // marking stores icon and value for the specific bodypart @@ -877,8 +875,8 @@ else . += image(marking[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) return - - if(color_src) //TODO - add color matrix support for base species limbs +/* + if(color_src) //TODO - add color matrix support for base species limbs (or dont because color matrixes suck) var/draw_color = mutation_color || species_color var/grayscale = FALSE if(!draw_color) @@ -909,7 +907,7 @@ marking.color = "#141414" else marking.color = list(markings_color) - +*/ /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() From fce471cabbc2b53f23ab3d590c1be20648d532d9 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 24 Apr 2021 23:40:55 +0100 Subject: [PATCH 04/63] debug messages --- code/modules/surgery/bodyparts/_bodyparts.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index f8c1b525c6..88834d4e0d 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -615,6 +615,7 @@ //we inform the bodypart of the changes that happened to the owner, or give it the informations from a source mob. /obj/item/bodypart/proc/update_limb(dropping_limb, mob/living/carbon/source) + body_markings_list = list() var/mob/living/carbon/C if(source) C = source @@ -689,6 +690,7 @@ for(var/list/marking in H.dna.features["mam_body_markings"]) // marking is a list containing bodypart type, bodymarking name, and then the colour (colour won't be used in v1) if(marking[1] == body_part) + message_admins("MATCH FOUND FOR [marking[1]] ON PART [body_part] ON USER [C]") var/datum/sprite_accessory/Smark Smark = GLOB.mam_body_markings_list[marking[2]] var/body_markings_icon = default_body_markings_icon @@ -699,7 +701,7 @@ marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) else marking_value = "plain" - body_markings_list += list(body_markings_icon, marking_value) + body_markings_list += list(list(body_markings_icon, marking_value)) markings_color = list(colorlist) else @@ -808,7 +810,8 @@ limb.icon_state = "[species_id]_[body_zone]" // Body markings - if(!length(body_markings_list)) + if(length(body_markings_list)) + message_admins("ADDING FUNNY IMAGES AT [owner] FOR [src]") if(species_id == "husk") . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) @@ -822,7 +825,7 @@ else . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(marking[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) // Citadel End @@ -859,11 +862,11 @@ . += auxmarking . += aux - if(!isnull(body_markings)) + if(length(body_markings)) if(species_id == "husk") . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - . += = image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_digitigrade_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else for(var/list/marking_list in body_markings_list) // marking stores icon and value for the specific bodypart From 97e18833d5c168e6a5d9e8f22794ea0e5714721a Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 25 Apr 2021 00:07:59 +0100 Subject: [PATCH 05/63] better debug info --- code/modules/surgery/bodyparts/_bodyparts.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 88834d4e0d..e843be9212 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -690,7 +690,6 @@ for(var/list/marking in H.dna.features["mam_body_markings"]) // marking is a list containing bodypart type, bodymarking name, and then the colour (colour won't be used in v1) if(marking[1] == body_part) - message_admins("MATCH FOUND FOR [marking[1]] ON PART [body_part] ON USER [C]") var/datum/sprite_accessory/Smark Smark = GLOB.mam_body_markings_list[marking[2]] var/body_markings_icon = default_body_markings_icon @@ -701,6 +700,7 @@ marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) else marking_value = "plain" + message_admins("MATCH FOUND FOR [marking[1]] ON PART [body_part] ON USER [C], VALUE IS [body_markings_icon] AND [marking_value]") body_markings_list += list(list(body_markings_icon, marking_value)) markings_color = list(colorlist) From f243c6b7c4b98ca7ed2ea0725a94e72e26c05eb2 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 25 Apr 2021 13:23:16 +0100 Subject: [PATCH 06/63] makes them apply properly --- code/modules/mob/living/carbon/human/update_icons.dm | 7 ++----- code/modules/surgery/bodyparts/_bodyparts.dm | 3 ++- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5f77d25eae..f18d768df3 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -729,11 +729,8 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if . += "-[BP.digitigrade_type]" if(BP.dmg_overlay_type) . += "-[BP.dmg_overlay_type]" - if(BP.body_markings) - . += "-[BP.body_markings]" - if(length(BP.markings_color) && length(BP.markings_color[1])) - for(var/color in BP.markings_color[1]) - . += "-[color]" + if(BP.body_markings_list) + . += "-[safe_json_encode(BP.body_markings_list)]" if(BP.icon) . += "-[BP.icon]" else diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index e843be9212..6091b9e5d1 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -798,6 +798,7 @@ should_draw_gender = FALSE if(is_organic_limb()) + message_admins("UPDATING ORGANIC LIMB FOR [owner] AT [src]") limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi' if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" @@ -876,7 +877,7 @@ else . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(marking[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) return /* if(color_src) //TODO - add color matrix support for base species limbs (or dont because color matrixes suck) From 371b25062322f5d5be6701286df11484fc29971b Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 25 Apr 2021 13:24:04 +0100 Subject: [PATCH 07/63] unused var --- code/modules/surgery/bodyparts/_bodyparts.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 6091b9e5d1..e5e65773be 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -777,7 +777,6 @@ */ var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/list/aux = list() - var/image/marking var/list/auxmarking = list() . += limb From a6a3f995398dd306c574469b359bbabe4d8b75dd Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 25 Apr 2021 20:57:02 +0100 Subject: [PATCH 08/63] rp marking ui --- code/_globalvars/lists/flavor_misc.dm | 3 +++ code/modules/client/preferences.dm | 24 ++++++++++++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index f0a8a4e2c6..518b61f4d2 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -350,3 +350,6 @@ GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow" //list of eye types, corresponding to a respective left and right icon state for the set of eyes GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "cyclops")) + +//list linking bodypart bitflags to their actual names +GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ccb79ce255..1a9a9a6cbf 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -512,7 +512,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" mutant_category = 0 + // rp marking selection + // assume you can only have mam markings or regular markings or none, never both + var/marking_type + if(parent.can_have_part("body_markings")) + marking_type = "body_markings" + else if(parent.can_have_part("mam_body_markings")) + marking_type = "mam_body_markings" + if(marking_type) + dat += APPEARANCE_CATEGORY_COLUMN + dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking + // list out the current markings you have + if(length(features[marking_type])) + dat += "" + for(var/list/marking_list in features[marking_type]) + var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to + dat += "" + dat += "
[marking_list[2]] - [actual_name] ˄ ˅
" + for(var/mutant_part in GLOB.all_mutant_parts) + // these are sorted out separately due to the rp marking system being funky + // NOTE TO SELF: UNCOMMENT THIS ONCE YOU'RE DONE DEBUGGING + //if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) + // continue if(parent.can_have_part(mutant_part)) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -531,8 +553,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(accessory) if(accessory.color_src == MATRIXED || accessory.color_src == MUTCOLORS || accessory.color_src == MUTCOLORS2 || accessory.color_src == MUTCOLORS3) //mutcolors1-3 are deprecated now, please don't rely on these in the future var/mutant_string = accessory.mutant_part_string - if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) - continue var/primary_feature = "[mutant_string]_primary" var/secondary_feature = "[mutant_string]_secondary" var/tertiary_feature = "[mutant_string]_tertiary" From ca3ef3b0f304c53fab77cd89556f27a046598b8f Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 26 Apr 2021 18:02:47 +0100 Subject: [PATCH 09/63] X button --- code/modules/client/preferences.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1a9a9a6cbf..6a5dd3b8d5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -522,12 +522,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking + dat += "Add marking" // list out the current markings you have if(length(features[marking_type])) dat += "" for(var/list/marking_list in features[marking_type]) var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to - dat += "" + dat += "" dat += "
[marking_list[2]] - [actual_name] ˄ ˅
[marking_list[2]] - [actual_name] ˄ ˅ X
" for(var/mutant_part in GLOB.all_mutant_parts) From 06e003f49b14d450fb57dafa08537dc78b665ba6 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 26 Apr 2021 21:58:12 +0100 Subject: [PATCH 10/63] functionality --- code/modules/client/preferences.dm | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6a5dd3b8d5..451c3c73dc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -526,9 +526,10 @@ GLOBAL_LIST_EMPTY(preferences_datums) // list out the current markings you have if(length(features[marking_type])) dat += "" - for(var/list/marking_list in features[marking_type]) + var/list/markings = features[marking_type] + for(var/list/marking_list in markings) var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to - dat += "" + dat += "" dat += "
[marking_list[2]] - [actual_name] ˄ ˅ X
[marking_list[2]] - [actual_name] ˄ ˅ X
" for(var/mutant_part in GLOB.all_mutant_parts) @@ -2413,6 +2414,29 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids if(selected_body_sprite) chosen_limb_id = selected_body_sprite //this gets sanitized before loading + + if("marking_down") + // move the specified marking down + var/index = href_list["marking_index"] + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type]) + // placeholder + var/a + + if("marking_up") + // move the specified marking up + var/index = href_list["marking_index"] + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type]) + // placeholder + var/a + + if("marking_remove") + // remove the specified marking + var/marking_list = href_list["marking_list"] + var/marking_type = href_list["marking_type"] + if(marking_list && marking_type && features[marking_type]) + features[marking_type] -= marking_list else switch(href_list["preference"]) //CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj From 79b73a53a063979d875188b4e1240a01024410ea Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 28 Apr 2021 16:53:12 +0100 Subject: [PATCH 11/63] working buttons probably --- code/modules/client/preferences.dm | 34 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 451c3c73dc..6eef427b27 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -529,7 +529,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/markings = features[marking_type] for(var/list/marking_list in markings) var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to - dat += "[marking_list[2]] - [actual_name] ˄ ˅ X" + dat += "[marking_list[2]] - [actual_name] ˄ ˅ X" dat += "" for(var/mutant_part in GLOB.all_mutant_parts) @@ -2417,26 +2417,34 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("marking_down") // move the specified marking down - var/index = href_list["marking_index"] + var/index = text2num(href_list["marking_index"]) var/marking_type = href_list["marking_type"] - if(index && marking_type && features[marking_type]) - // placeholder - var/a + if(index && marking_type && features[marking_type] && index != length(features[marking_type])) + var/index_down = index + 1 + var/markings = features[marking_type] + var/first_marking = markings[index] + var/second_marking = markings[index_down] + markings[index] = second_marking + markings[index_down] = first_marking if("marking_up") // move the specified marking up - var/index = href_list["marking_index"] + var/index = text2num(href_list["marking_index"]) var/marking_type = href_list["marking_type"] - if(index && marking_type && features[marking_type]) - // placeholder - var/a + if(index && marking_type && features[marking_type] && index != 1) + var/index_up = index - 1 + var/markings = features[marking_type] + var/first_marking = markings[index] + var/second_marking = markings[index_up] + markings[index] = second_marking + markings[index_up] = first_marking if("marking_remove") - // remove the specified marking - var/marking_list = href_list["marking_list"] + // move the specified marking up + var/index = text2num(href_list["marking_index"]) var/marking_type = href_list["marking_type"] - if(marking_list && marking_type && features[marking_type]) - features[marking_type] -= marking_list + if(index && marking_type && features[marking_type]) + features[marking_type].Cut(index, index + 1) else switch(href_list["preference"]) //CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj From 2f5cb6399420bdcde7fce7e8aaf6209c9ceb8e75 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 28 Apr 2021 17:37:09 +0100 Subject: [PATCH 12/63] who deleted this --- code/modules/mob/dead/new_player/preferences_setup.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index d198140c5f..a9233938ab 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -54,6 +54,8 @@ mannequin.job = previewJob.title previewJob.equip(mannequin, TRUE, preference_source = parent) + mannequin.regenerate_icons() + COMPILE_OVERLAYS(mannequin) parent.show_character_previews(new /mutable_appearance(mannequin)) unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES) From 72a009dc7c7df96bce7ace0e188cd456118b03f7 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 28 Apr 2021 19:31:20 +0100 Subject: [PATCH 13/63] based? --- code/modules/surgery/bodyparts/_bodyparts.dm | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index e5e65773be..5664319a38 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -810,22 +810,23 @@ limb.icon_state = "[species_id]_[body_zone]" // Body markings + var/list/marking_list if(length(body_markings_list)) - message_admins("ADDING FUNNY IMAGES AT [owner] FOR [src]") if(species_id == "husk") - . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + marking_list += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking_list += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else for(var/list/marking_list in body_markings_list) // marking stores icon and value for the specific bodypart if(!use_digitigrade) if(body_zone == BODY_ZONE_CHEST) - . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + marking_list += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) else - . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) + marking_list += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + marking_list += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += marking_list // Citadel End @@ -878,7 +879,7 @@ else . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) return -/* + if(color_src) //TODO - add color matrix support for base species limbs (or dont because color matrixes suck) var/draw_color = mutation_color || species_color var/grayscale = FALSE @@ -907,10 +908,10 @@ if(!isnull(body_markings)) if(species_id == "husk") + marking.color = "#141414" else marking.color = list(markings_color) -*/ /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() From cb98cbd19f2c8e05c34567624639e8610135aabd Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 28 Apr 2021 22:33:05 +0100 Subject: [PATCH 14/63] colour backend --- code/modules/client/preferences.dm | 15 ++++++++- code/modules/surgery/bodyparts/_bodyparts.dm | 35 ++++++++++++-------- 2 files changed, 35 insertions(+), 15 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6eef427b27..0e9618067b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -528,8 +528,21 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" var/list/markings = features[marking_type] for(var/list/marking_list in markings) + var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to - dat += "" + var/color_marking_dat = "" + var/datum/sprite_accessory/S = (actual_name == "mam_body_markings") ? GLOB.mam_body_markings_list[marking_list[2]] : GLOB.body_markings_list[marking_list[2]] + if(S && S.matrixed_sections && S.matrixed_sections != MATRIX_NONE) + // we know it has one matrixed section at minimum + color_marking_dat += "   " + // if it has a second section, add it + if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN) + color_marking_dat += "   " + // if it has a third section, add it + if(S.matrixed_sections == MATRIX_ALL) + color_marking_dat += "   " + color_marking_dat += " Change
" + dat += "" dat += "
[marking_list[2]] - [actual_name] ˄ ˅ X
[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]
" for(var/mutant_part in GLOB.all_mutant_parts) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 5664319a38..f970e04726 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -700,8 +700,12 @@ marking_value = Smark?.icon_state || lowertext(H.dna.features["mam_body_markings"]) else marking_value = "plain" - message_admins("MATCH FOUND FOR [marking[1]] ON PART [body_part] ON USER [C], VALUE IS [body_markings_icon] AND [marking_value]") - body_markings_list += list(list(body_markings_icon, marking_value)) + var/list/color_values + if(length(marking) == 3) + color_values = marking[3] + else + color_values = list("#FFFFFF", "#FFFFFF", "#FFFFFF") + body_markings_list += list(list(body_markings_icon, marking_value, color_values)) markings_color = list(colorlist) else @@ -796,8 +800,8 @@ if((body_zone != BODY_ZONE_HEAD && body_zone != BODY_ZONE_CHEST)) should_draw_gender = FALSE + var/list/markings_list = list() if(is_organic_limb()) - message_admins("UPDATING ORGANIC LIMB FOR [owner] AT [src]") limb.icon = base_bp_icon || 'icons/mob/human_parts.dmi' if(should_draw_gender) limb.icon_state = "[species_id]_[body_zone]_[icon_gender]" @@ -810,23 +814,28 @@ limb.icon_state = "[species_id]_[body_zone]" // Body markings - var/list/marking_list if(length(body_markings_list)) if(species_id == "husk") - marking_list += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[body_zone]", -MARKING_LAYER, image_dir) else if(species_id == "husk" && use_digitigrade) - marking_list += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + . += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) else for(var/list/marking_list in body_markings_list) // marking stores icon and value for the specific bodypart if(!use_digitigrade) if(body_zone == BODY_ZONE_CHEST) - marking_list += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)) + message_admins("length is now [length(markings_list)]") else - marking_list += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir)) + message_admins("length is now [length(markings_list)]") else - marking_list += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) - . += marking_list + markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)) + message_admins("length is now [length(markings_list)]") + if(color_src && length(marking_list) == 3) + message_admins("trying to color list of length [length(marking_list)] and also trying to access index [length(markings_list)] on a list of the same length") + markings_list[length(markings_list)].color = marking_list[3] + . += markings_list // Citadel End @@ -908,10 +917,8 @@ if(!isnull(body_markings)) if(species_id == "husk") - - marking.color = "#141414" - else - marking.color = list(markings_color) + for(var/image/marking in markings_list) + marking.color = "#141414" /obj/item/bodypart/deconstruct(disassembled = TRUE) drop_organs() From ddc3e3b3b23a095e3473b35fc5344cd664081077 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 15 May 2021 21:24:20 +0100 Subject: [PATCH 15/63] Update preferences.dm --- code/modules/client/preferences.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0e9618067b..b351ba9478 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -531,8 +531,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to var/color_marking_dat = "" - var/datum/sprite_accessory/S = (actual_name == "mam_body_markings") ? GLOB.mam_body_markings_list[marking_list[2]] : GLOB.body_markings_list[marking_list[2]] + var/datum/sprite_accessory/S = (marking_type == "mam_body_markings") ? GLOB.mam_body_markings_list[marking_list[2]] : GLOB.body_markings_list[marking_list[2]] if(S && S.matrixed_sections && S.matrixed_sections != MATRIX_NONE) + // if it has nothing initialize it to white + if(length(marking_list) == 2) + marking_list += list(list("#FFFFFF","#FFFFFF","#FFFFFF")) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values // we know it has one matrixed section at minimum color_marking_dat += "   " // if it has a second section, add it From 8aed1b4236ce134ca9dd7d1da73fd3d93cf58624 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 1 May 2021 20:37:22 +0100 Subject: [PATCH 16/63] more color code --- code/modules/client/preferences.dm | 33 ++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b351ba9478..8df69b2f03 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -537,15 +537,15 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(length(marking_list) == 2) marking_list += list(list("#FFFFFF","#FFFFFF","#FFFFFF")) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values // we know it has one matrixed section at minimum - color_marking_dat += "   " + color_marking_dat += "   " // if it has a second section, add it if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN) - color_marking_dat += "   " + color_marking_dat += "   " // if it has a third section, add it if(S.matrixed_sections == MATRIX_ALL) - color_marking_dat += "   " + color_marking_dat += "   " color_marking_dat += " Change
" - dat += "[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]" + dat += "[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]" dat += "" for(var/mutant_part in GLOB.all_mutant_parts) @@ -2461,6 +2461,31 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/marking_type = href_list["marking_type"] if(index && marking_type && features[marking_type]) features[marking_type].Cut(index, index + 1) + + if("marking_color") + var/index = text2num(href_list["marking_index"]) + var/marking_type = href_list["marking_type"] + if(index && marking_type && features[marking_type]) + // work out the input options to show the user + var/list/options = list("Primary") + var/matrixed_sections = href_list["matrixed_sections"] + var/color_number = 1 // 1-3 which color are we editing + if(matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE) + options += "Secondary" + else if(matrixed_sections == MATRIX_ALL) + options += list("Secondary", "Tertiary") + var/color_option = input(user, "Select the colour you wish to edit") as null|anything in options + if(color_option) + if(color_option == "Secondary") color_number = 2 + if(color_option == "Tertiary") color_number = 3 + var/color_list = features[marking_type][index][3] + var/new_marking_color = input(user, "Choose your character's marking color:", "Character Preference","#"+color_list[color_number]) as color|null + if(new_marking_color) + var/temp_hsv = RGBtoHSV(new_marking_color) + if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright, but only if they affect the skin + color_list[color_number] = sanitize_hexcolor(new_marking_color, 6) + else + to_chat(user, "Invalid color. Your color is not bright enough.") else switch(href_list["preference"]) //CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj From 7efadade151c58c73d2818355f98178c755dbc2f Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 1 May 2021 20:55:13 +0100 Subject: [PATCH 17/63] href fix --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 8df69b2f03..f616d80005 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -544,7 +544,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) // if it has a third section, add it if(S.matrixed_sections == MATRIX_ALL) color_marking_dat += "   " - color_marking_dat += " Change
" + color_marking_dat += " Change
" dat += "[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]" dat += "" From 2daed9250f4aa9fb6200b623eb876c08416a0ee6 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 2 May 2021 18:30:35 +0100 Subject: [PATCH 18/63] some bugfixes --- code/modules/client/preferences.dm | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f616d80005..6e92a910c9 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -531,6 +531,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to var/color_marking_dat = "" + var/number_colors = 1 var/datum/sprite_accessory/S = (marking_type == "mam_body_markings") ? GLOB.mam_body_markings_list[marking_list[2]] : GLOB.body_markings_list[marking_list[2]] if(S && S.matrixed_sections && S.matrixed_sections != MATRIX_NONE) // if it has nothing initialize it to white @@ -541,11 +542,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) // if it has a second section, add it if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN) color_marking_dat += "   " + number_colors = 2 // if it has a third section, add it if(S.matrixed_sections == MATRIX_ALL) color_marking_dat += "   " - color_marking_dat += " Change
" - dat += "[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]" + number_colors = 3 + color_marking_dat += " Change
" + dat += "[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]" dat += "" for(var/mutant_part in GLOB.all_mutant_parts) @@ -2468,12 +2471,12 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(index && marking_type && features[marking_type]) // work out the input options to show the user var/list/options = list("Primary") - var/matrixed_sections = href_list["matrixed_sections"] + var/number_colors = href_list["number_colors"] var/color_number = 1 // 1-3 which color are we editing - if(matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE) + if(number_colors >= 2) options += "Secondary" - else if(matrixed_sections == MATRIX_ALL) - options += list("Secondary", "Tertiary") + if(number_colors == 3) + options += "Tertiary" var/color_option = input(user, "Select the colour you wish to edit") as null|anything in options if(color_option) if(color_option == "Secondary") color_number = 2 @@ -2483,7 +2486,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(new_marking_color) var/temp_hsv = RGBtoHSV(new_marking_color) if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV(MINIMUM_MUTANT_COLOR)[3]) // mutantcolors must be bright, but only if they affect the skin - color_list[color_number] = sanitize_hexcolor(new_marking_color, 6) + color_list[color_number] = "#[sanitize_hexcolor(new_marking_color, 6)]" else to_chat(user, "Invalid color. Your color is not bright enough.") else From d32770a0fafab36ff4651f6b0491ffa8538915b8 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 2 May 2021 22:19:41 +0100 Subject: [PATCH 19/63] test --- code/modules/client/preferences.dm | 2 +- code/modules/client/preferences_savefile.dm | 30 +++++++++++++++---- code/modules/surgery/bodyparts/_bodyparts.dm | 22 +++++++------- .../modules/client/preferences_savefile.dm | 2 +- 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6e92a910c9..65809383c4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2471,7 +2471,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(index && marking_type && features[marking_type]) // work out the input options to show the user var/list/options = list("Primary") - var/number_colors = href_list["number_colors"] + var/number_colors = text2num(href_list["number_colors"]) var/color_number = 1 // 1-3 which color are we editing if(number_colors >= 2) options += "Secondary" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b8959d93aa..0367fc9471 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -5,7 +5,7 @@ // You do not need to raise this if you are adding new values that have sane defaults. // Only raise this value when changing the meaning/format/name/layout of an existing value // where you would want the updater procs below to run -#define SAVEFILE_VERSION_MAX 50 +#define SAVEFILE_VERSION_MAX 51 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn @@ -295,6 +295,27 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car L -= ROLE_SYNDICATE S["be_special"] << L + if(current_version < 51) // rp markings means markings are now stored as a list + var/marking_type + var/species_id = S["species"] + var/datum/species/actual_species = GLOB.species_datums[species_id] + if(actual_species.mutant_bodyparts["body_markings"] && S["feature_lizard_body_markings"]) marking_type = "feature_lizard_body_markings" + if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings" + + if(marking_type) + var/old_marking_value = S[marking_type] + var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF") + + if(S["feature_mcolor"]) color_list[1] = S["feature_mcolor"] + if(S["feature_mcolor2"]) color_list[2] = S["feature_mcolor2"] + if(S["feature_mcolor3"]) color_list[3] = S["feature_mcolor3"] + + var/marking_list = list() + for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) + marking_list += list(list(part, old_marking_value, color_list.Copy())) + + S[marking_type] = safe_json_encode(marking_list) + /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) return @@ -638,7 +659,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_horns"] >> features["horns"] S["feature_lizard_frills"] >> features["frills"] S["feature_lizard_spines"] >> features["spines"] - S["feature_lizard_body_markings"] >> features["body_markings"] + features["body_markings"] = safe_json_decode(S["feature_lizard_body_markings"]) S["feature_lizard_legs"] >> features["legs"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] @@ -707,7 +728,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] - S["feature_mam_body_markings"] >> features["mam_body_markings"] + features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"]) S["feature_mam_tail"] >> features["mam_tail"] S["feature_mam_ears"] >> features["mam_ears"] S["feature_mam_tail_animated"] >> features["mam_tail_animated"] @@ -837,7 +858,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) - features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) features["legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Plantigrade") features["deco_wings"] = sanitize_inlist(features["deco_wings"], GLOB.deco_wings_list, "None") features["insect_fluff"] = sanitize_inlist(features["insect_fluff"], GLOB.insect_fluffs_list) @@ -1006,7 +1026,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_human_ears"] , features["ears"]) WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"] , features["body_markings"]) + WRITE_FILE(S["feature_lizard_body_markings"] , safe_json_encode(features["body_markings"])) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"]) WRITE_FILE(S["feature_horns_color"] , features["horns_color"]) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index f970e04726..712f0a33a0 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -761,7 +761,7 @@ var/image_dir = 0 var/icon_gender = (body_gender == FEMALE) ? "f" : "m" //gender of the icon, if applicable -/* + if(dropped) image_dir = SOUTH if(dmg_overlay_type) @@ -771,14 +771,16 @@ . += image('icons/mob/dam_mob.dmi', "[dmg_overlay_type]_[body_zone]_0[burnstate]", -DAMAGE_LAYER, image_dir) if(!isnull(body_markings) && is_organic_limb(FALSE)) - if(!use_digitigrade) - if(body_zone == BODY_ZONE_CHEST) - . += image(body_markings_icon, "[body_markings]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + for(var/list/marking_list in body_markings_list) + // marking stores icon and value for the specific bodypart + if(!use_digitigrade) + if(body_zone == BODY_ZONE_CHEST) + . += image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir) + else + . += image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir) else - . += image(body_markings_icon, "[body_markings]_[body_zone]", -MARKING_LAYER, image_dir) - else - . += image(body_markings_icon, "[body_markings]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) -*/ + . += image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir) + var/image/limb = image(layer = -BODYPARTS_LAYER, dir = image_dir) var/list/aux = list() var/list/auxmarking = list() @@ -825,13 +827,11 @@ if(!use_digitigrade) if(body_zone == BODY_ZONE_CHEST) markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]_[icon_gender]", -MARKING_LAYER, image_dir)) - message_admins("length is now [length(markings_list)]") else markings_list.Add(image(marking_list[1], "[marking_list[2]]_[body_zone]", -MARKING_LAYER, image_dir)) - message_admins("length is now [length(markings_list)]") else markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)) - message_admins("length is now [length(markings_list)]") + if(color_src && length(marking_list) == 3) message_admins("trying to color list of length [length(marking_list)] and also trying to access index [length(markings_list)] on a list of the same length") markings_list[length(markings_list)].color = marking_list[3] diff --git a/modular_citadel/code/modules/client/preferences_savefile.dm b/modular_citadel/code/modules/client/preferences_savefile.dm index bbd71d22e3..102ae41921 100644 --- a/modular_citadel/code/modules/client/preferences_savefile.dm +++ b/modular_citadel/code/modules/client/preferences_savefile.dm @@ -23,7 +23,7 @@ WRITE_FILE(S["feature_genitals_use_skintone"], features["genitals_use_skintone"]) WRITE_FILE(S["feature_mcolor2"], features["mcolor2"]) WRITE_FILE(S["feature_mcolor3"], features["mcolor3"]) - WRITE_FILE(S["feature_mam_body_markings"], features["mam_body_markings"]) + WRITE_FILE(S["feature_mam_body_markings"], safe_json_encode(features["mam_body_markings"])) WRITE_FILE(S["feature_mam_tail"], features["mam_tail"]) WRITE_FILE(S["feature_mam_ears"], features["mam_ears"]) WRITE_FILE(S["feature_mam_tail_animated"], features["mam_tail_animated"]) From 7ac50b7ba2044603aa8ec1c23f1855b3191886e5 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 3 May 2021 22:43:22 +0100 Subject: [PATCH 20/63] big changes --- code/modules/client/preferences.dm | 63 ++++++++++++++---------------- tgstation.dme | 4 -- 2 files changed, 30 insertions(+), 37 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f5c1e5f254..a06e2c4b22 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking - dat += "Add marking" + dat += " Date: Mon, 3 May 2021 22:43:32 +0100 Subject: [PATCH 21/63] Revert "big changes" This reverts commit 7ac50b7ba2044603aa8ec1c23f1855b3191886e5. --- code/modules/client/preferences.dm | 63 ++++++++++++++++-------------- tgstation.dme | 4 ++ 2 files changed, 37 insertions(+), 30 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a06e2c4b22..f5c1e5f254 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking - dat += "
Date: Mon, 3 May 2021 22:43:45 +0100 Subject: [PATCH 22/63] big changes 2 --- code/modules/client/preferences.dm | 63 ++++++++++++++---------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f5c1e5f254..a06e2c4b22 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking - dat += "
Add marking" + dat += " Date: Mon, 3 May 2021 22:47:22 +0100 Subject: [PATCH 23/63] new limb covering var for markings --- .../mob/dead/new_player/sprite_accessories/body_markings.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index bc6c4899dd..533e406d57 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -6,6 +6,7 @@ icon = 'icons/mob/mutant_bodyparts.dmi' relevant_layers = list(BODY_ADJ_LAYER) mutant_part_string = "body_markings" + var/list/covered_limbs = list(HEAD, CHEST, LEG_LEFT, LEG_RIGHT, ARM_LEFT, ARM_RIGHT) /datum/sprite_accessory/body_markings/none name = "None" @@ -50,6 +51,7 @@ icon = 'modular_citadel/icons/mob/mam_markings.dmi' recommended_species = list("mammal", "xeno", "slimeperson", "podweak") matrixed_sections = MATRIX_ALL + var/list/covered_limbs = list(HEAD, CHEST, LEG_LEFT, LEG_RIGHT, ARM_LEFT, ARM_RIGHT) /datum/sprite_accessory/mam_body_markings/none name = "None" From f816bba62a34b3858d02510e61d978e1cea94cd2 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 00:51:52 +0100 Subject: [PATCH 24/63] bugfixes --- code/modules/client/preferences.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index a06e2c4b22..7e06868c6b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -524,7 +524,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN dat += "

[GLOB.all_mutant_parts[marking_type]]

" // give it the appropriate title for the type of marking - dat += "
Add marking" // list out the current markings you have if(length(features[marking_type])) dat += "" @@ -554,10 +554,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" for(var/mutant_part in GLOB.all_mutant_parts) - // these are sorted out separately due to the rp marking system being funky - // NOTE TO SELF: UNCOMMENT THIS ONCE YOU'RE DONE DEBUGGING - //if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) - // continue + if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) + continue if(parent.can_have_part(mutant_part)) if(!mutant_category) dat += APPEARANCE_CATEGORY_COLUMN @@ -2450,11 +2448,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) // gross copypasta here because mam markings arent a subtype of regular markings despite one containing the other ??? if(istype(S, /datum/sprite_accessory/body_markings)) var/datum/sprite_accessory/body_markings/marking = S - if(!(GLOB.bodypart_names[selected_limb] in marking.covered_limbs)) + if(!(text2num(GLOB.bodypart_names[selected_limb]) in marking.covered_limbs)) continue if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S - if(!(GLOB.bodypart_names[selected_limb] in marking.covered_limbs)) + if(!(text2num(GLOB.bodypart_names[selected_limb]) in marking.covered_limbs)) continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) From b2d8c980e43f4a65904068df0e83275ce0e8b6ba Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 00:54:44 +0100 Subject: [PATCH 25/63] task failed sucessfully --- code/modules/client/preferences.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7e06868c6b..f6660fa54d 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2448,11 +2448,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) // gross copypasta here because mam markings arent a subtype of regular markings despite one containing the other ??? if(istype(S, /datum/sprite_accessory/body_markings)) var/datum/sprite_accessory/body_markings/marking = S - if(!(text2num(GLOB.bodypart_names[selected_limb]) in marking.covered_limbs)) + if(!(GLOB.bodypart_names[num2text(selected_limb)] in marking.covered_limbs)) continue if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S - if(!(text2num(GLOB.bodypart_names[selected_limb]) in marking.covered_limbs)) + if(!(GLOB.bodypart_names[num2text(selected_limb)] in marking.covered_limbs)) continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) From 1664459b148095114d1c9855ec92bda1dcb1a4df Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 15:26:56 +0100 Subject: [PATCH 26/63] squash bugs --- code/_globalvars/lists/flavor_misc.dm | 4 +++- code/modules/client/preferences.dm | 11 ++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 518b61f4d2..7eb1ab0957 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -352,4 +352,6 @@ GLOBAL_LIST_INIT(nongendered_limb_types, list("fly", "zombie" ,"synth", "shadow" GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2", "double3", "cyclops")) //list linking bodypart bitflags to their actual names -GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) \ No newline at end of file +GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) +// list linking bodypart names back to the bitflags +GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f6660fa54d..ea0ba2c802 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -542,7 +542,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) // we know it has one matrixed section at minimum color_marking_dat += "   " // if it has a second section, add it - if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN) + if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN || S.matrixed_sections == MATRIX_ALL) color_marking_dat += "   " number_colors = 2 // if it has a third section, add it @@ -554,7 +554,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" for(var/mutant_part in GLOB.all_mutant_parts) - if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) + if(mutant_part == "body_markings" || mutant_part == "mam_body_markings") continue if(parent.can_have_part(mutant_part)) if(!mutant_category) @@ -2439,6 +2439,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(marking_type && features[marking_type]) var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg") if(selected_limb) + var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) var/list/marking_list = GLOB.mam_body_markings_list if(marking_type == "body_markings") marking_list = GLOB.body_markings_list var/list/snowflake_markings_list = list() @@ -2448,11 +2449,11 @@ GLOBAL_LIST_EMPTY(preferences_datums) // gross copypasta here because mam markings arent a subtype of regular markings despite one containing the other ??? if(istype(S, /datum/sprite_accessory/body_markings)) var/datum/sprite_accessory/body_markings/marking = S - if(!(GLOB.bodypart_names[num2text(selected_limb)] in marking.covered_limbs)) + if(!(limb_value in marking.covered_limbs)) continue if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S - if(!(GLOB.bodypart_names[num2text(selected_limb)] in marking.covered_limbs)) + if(!(limb_value in marking.covered_limbs)) continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) @@ -2460,7 +2461,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list if(selected_marking) - features[marking_type] += list(list(selected_limb, selected_marking)) + features[marking_type] += list(list(limb_value, selected_marking)) if("marking_color") var/index = text2num(href_list["marking_index"]) From ba71bb944a06d123acd72250698b25fb6e23357d Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 18:11:05 +0100 Subject: [PATCH 27/63] im not crazy but this commit breaks 90% of the game --- code/__HELPERS/global_lists.dm | 1 - code/__HELPERS/mobs.dm | 2 - code/_globalvars/lists/flavor_misc.dm | 1 - code/modules/client/preferences.dm | 8 +-- code/modules/client/preferences_savefile.dm | 11 ++-- .../sprite_accessories/body_markings.dm | 56 ++++++------------ .../human/species_types/lizardpeople.dm | 2 +- icons/mob/mutant_bodyparts.dmi | Bin 35941 -> 34139 bytes modular_citadel/icons/mob/mam_markings.dmi | Bin 114275 -> 115508 bytes 9 files changed, 29 insertions(+), 52 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 9719157d4d..0a17f0d1df 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -14,7 +14,6 @@ //socks init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) //bodypart accessories (blizzard intensifies) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/lizard, GLOB.tails_list_lizard) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails_animated/lizard, GLOB.animated_tails_list_lizard) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 92cf7050e0..46c75e702b 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -64,8 +64,6 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/spines, GLOB.spines_list) if(!GLOB.legs_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/legs, GLOB.legs_list) - if(!GLOB.body_markings_list.len) - init_sprite_accessory_subtypes(/datum/sprite_accessory/body_markings, GLOB.body_markings_list) if(!GLOB.wings_list.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/wings, GLOB.wings_list) if(!GLOB.deco_wings_list.len) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 7eb1ab0957..0affa50a72 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -55,7 +55,6 @@ GLOBAL_LIST_INIT(mutant_reference_list, list( "frills" = GLOB.frills_list, "horns" = GLOB.horns_list, "ears" = GLOB.ears_list, - "body_markings" = GLOB.body_markings_list, "wings" = GLOB.wings_list, "wingsopen" = GLOB.wings_open_list, "deco_wings" = GLOB.deco_wings_list, diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ea0ba2c802..0194301134 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -529,7 +529,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(length(features[marking_type])) dat += "" var/list/markings = features[marking_type] - for(var/list/marking_list in markings) + var/list/reverse_markings = reverseList(markings) + for(var/list/marking_list in reverse_markings) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to var/color_marking_dat = "" @@ -2446,11 +2447,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) for(var/path in marking_list) var/datum/sprite_accessory/S = marking_list[path] if(istype(S)) - // gross copypasta here because mam markings arent a subtype of regular markings despite one containing the other ??? - if(istype(S, /datum/sprite_accessory/body_markings)) - var/datum/sprite_accessory/body_markings/marking = S - if(!(limb_value in marking.covered_limbs)) - continue if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S if(!(limb_value in marking.covered_limbs)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 7c93bec600..f430854575 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -295,11 +295,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car L -= ROLE_SYNDICATE S["be_special"] << L - if(current_version < 51) // rp markings means markings are now stored as a list + if(current_version < 51) // rp markings means markings are now stored as a list, lizard markings now mam like the rest var/marking_type var/species_id = S["species"] var/datum/species/actual_species = GLOB.species_datums[species_id] - if(actual_species.mutant_bodyparts["body_markings"] && S["feature_lizard_body_markings"]) marking_type = "feature_lizard_body_markings" + + // convert lizard markings to lizard markings + if(species_id == SPECIES_LIZARD && S["feature_lizard_body_markings"]) + S["feature_mam_body_markings"] = S["feature_lizard_body_markings"] + + // convert mam body marking data to the new rp marking data if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings" if(marking_type) @@ -670,7 +675,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_horns"] >> features["horns"] S["feature_lizard_frills"] >> features["frills"] S["feature_lizard_spines"] >> features["spines"] - features["body_markings"] = safe_json_decode(S["feature_lizard_body_markings"]) S["feature_lizard_legs"] >> features["legs"] S["feature_human_tail"] >> features["tail_human"] S["feature_human_ears"] >> features["ears"] @@ -1037,7 +1041,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["feature_human_ears"] , features["ears"]) WRITE_FILE(S["feature_lizard_frills"] , features["frills"]) WRITE_FILE(S["feature_lizard_spines"] , features["spines"]) - WRITE_FILE(S["feature_lizard_body_markings"] , safe_json_encode(features["body_markings"])) WRITE_FILE(S["feature_lizard_legs"] , features["legs"]) WRITE_FILE(S["feature_deco_wings"] , features["deco_wings"]) WRITE_FILE(S["feature_horns_color"] , features["horns_color"]) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 533e406d57..a6137eb908 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -1,40 +1,3 @@ -/****************************************** -************* Lizard Markings ************* -*******************************************/ - -/datum/sprite_accessory/body_markings - icon = 'icons/mob/mutant_bodyparts.dmi' - relevant_layers = list(BODY_ADJ_LAYER) - mutant_part_string = "body_markings" - var/list/covered_limbs = list(HEAD, CHEST, LEG_LEFT, LEG_RIGHT, ARM_LEFT, ARM_RIGHT) - -/datum/sprite_accessory/body_markings/none - name = "None" - icon_state = "none" - relevant_layers = null - -/datum/sprite_accessory/body_markings/dtiger - name = "Dark Tiger Body" - icon_state = "dtiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/guilmon - name = "Guilmon" - icon_state = "guilmon" - color_src = MATRIXED - icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - matrixed_sections = MATRIX_ALL - -/datum/sprite_accessory/body_markings/ltiger - name = "Light Tiger Body" - icon_state = "ltiger" - gender_specific = 1 - -/datum/sprite_accessory/body_markings/lbelly - name = "Light Belly" - icon_state = "lbelly" - gender_specific = 1 - /****************************************** ************ Furry Markings *************** *******************************************/ @@ -227,6 +190,25 @@ icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' +// sticking old lizard markings here for now +/datum/sprite_accessory/mam_body_markings/dtiger + name = "Dark Tiger Body" + icon_state = "dtiger" + +/datum/sprite_accessory/mam_body_markings/guilmon + name = "Guilmon" + icon_state = "guilmon" + icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + matrixed_sections = MATRIX_ALL + +/datum/sprite_accessory/mam_body_markings/ltiger + name = "Light Tiger Body" + icon_state = "ltiger" + +/datum/sprite_accessory/mam_body_markings/lbelly + name = "Light Belly" + icon_state = "lbelly" + /****************************************** ************* Insect Markings ************* *******************************************/ diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index a6cc8e8b8c..41d9ed4fef 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -11,7 +11,7 @@ coldmod = 1.5 heatmod = 0.67 mutant_bodyparts = list("mcolor" = "0F0", "mcolor2" = "0F0", "mcolor3" = "0F0", "tail_lizard" = "Smooth", "mam_snouts" = "Round", - "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = list(), + "horns" = "None", "frills" = "None", "spines" = "None", "mam_body_markings" = list(), "legs" = "Digitigrade", "taur" = "None", "deco_wings" = "None") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' diff --git a/icons/mob/mutant_bodyparts.dmi b/icons/mob/mutant_bodyparts.dmi index ca047a93bdb32559cae9198f326c8817d86006b0..7b93a3ff732b69c32166f69ee8e197747782f312 100644 GIT binary patch literal 34139 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 literal 35941 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 I?JgJo3wV#~i2wiq diff --git a/modular_citadel/icons/mob/mam_markings.dmi b/modular_citadel/icons/mob/mam_markings.dmi index 3fe7f0060e14d65557c90ab29931d36e924a2142..05cc1731fd5ac293d1093363fed6b7969fa6ad6e 100644 GIT binary patch delta 14010 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 delta 12768 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

>axY;GRjwDnx+ zgtF4hXykp>oqIi`JA#yY$o<+kJN$H#rOebwX>t3hld|UNvgMjEkyg5rY(7bm z^KCOCuOU(Z#L6Ju?XcCQG#@ARXe$w|e&7=4sew8ltmZq}bv;x@NO})Sg{AI4w`s>qfN?hR~PPnG^3t-`5smKvrBckWXT(FA5x9(z+SBecvj>1H+3l{nkE?B z1F4%!uACKUrE4hCrjEU)3cgoj9k_lLS#iiTnMeXkOs=kLEa7SUj%WGmLM4;n495um zOv%wG2`Ps~PXT-a%)|L{)XH8_g7sa`;a3j2lb-NN_}d?%foRLzyCHs z#_|WuR)~-X-{oo4a`R1CMU#)@9l9?-`4R&Ish;*qywu5+|CxU7ZO+IBwrP08`<2F> zz4y+pMqZy=VMcQgUm8E=n{K_p1R62ihUJ@N$c{OO^Dz2b6NIp}N#NhczmvO< zrk^!GF(AF9vQRI)Aof>bN$D*Yqtxq6>$klXmP@M|%~!{sDU8nTKn45X`4gbGSO3oa z@k;24pY~F+)hbV2w7wesNDml)H1p3O-$=*BP&Cwjxp56TW>0TBGuCyGgDuV~G-C+a z0en9>=a+=&je5_dYOdC{1LS2mcC(eQC&P=C`8TQ4&)cR%xcf|!}ykZ22Lr82|7vWL8%YL>;K`4|mvmbC6>~M9W^S*ycJzcdv*s7tXid@O%Fk)NiLuq9Ej z-6iRz&CPyR?YUrRMd5VfZftcD2yB6mKyZz}O))~kwFaSr9vwGo?I zG|oajy>o#E={wzaJT5^Dlg9MHvyB*~R(OUmRaceJ_my>LR~<6`Qpc9$_e|ZRV$VQ> z-i?#wokGVoIT6wkLq9QIi4}Gtf81*lSZLxHQ2zKip%Pee=sT*!9Yc-%+f0@fMAs3N zfTXbFL+HQw=N&}s|HGF0{}z<|;aN@rz<(nia{T+h+pzz?lKy`dPR3utiKl7q4N(sm zOQrKE5@@ z#o)QqW=`>^-;eF9cM!I~c&5vQ-$Y}Jq3|YeqAxw>6d;qYpk<8PpN*W;8(xeygz!E; zA=LH^l5uBGN1ko*tb%J2-wgj}T6#@zFXIvGg!VQ$v#@ijZnL|M3s4 z4BxVl$ao1goMhUrN8f7CtVL6wxn4!+UCqUkgHrWPYJ?bBY&ec1_N_S;gCey;z zGGA}Osal)wjm;oEw@n>V0>fG3#wKU{LS}z=jGSamGJw>#^yfprrR%VsK7&2dd|07m H75qN{1H}x{ From 3c7137f95186b1b12c2b18ab8e7001793e24a4c4 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 18:19:02 +0100 Subject: [PATCH 28/63] what if we didnt break 90% of the game --- code/__HELPERS/mobs.dm | 1 - code/_globalvars/lists/flavor_misc.dm | 3 +-- code/modules/admin/create_mob.dm | 1 - code/modules/client/preferences.dm | 15 +++++---------- code/modules/client/preferences_savefile.dm | 2 +- code/modules/mining/lavaland/necropolis_chests.dm | 1 - 6 files changed, 7 insertions(+), 16 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 46c75e702b..c6c8c0bced 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -175,7 +175,6 @@ "ears" = "None", "frills" = pick(GLOB.frills_list), "spines" = pick(GLOB.spines_list), - "body_markings" = pick(GLOB.body_markings_list), "legs" = pick("Plantigrade","Digitigrade"), "caps" = pick(GLOB.caps_list), "insect_wings" = pick(GLOB.insect_wings_list), diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 0affa50a72..d94c677a42 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_EMPTY(undershirt_f) //stores only undershirt name //Socks GLOBAL_LIST_EMPTY_TYPED(socks_list, /datum/sprite_accessory/underwear/socks) //stores socks indexed by name //Lizard Bits (all datum lists indexed by name) -GLOBAL_LIST_EMPTY(body_markings_list) GLOBAL_LIST_EMPTY(tails_list_lizard) GLOBAL_LIST_EMPTY(animated_tails_list_lizard) GLOBAL_LIST_EMPTY(snouts_list) @@ -298,7 +297,7 @@ GLOBAL_LIST_INIT(roundstart_languages, get_roundstart_languages()) //locked parts are those that your picked species requires to have //unlocked parts are those that anyone can choose on customisation regardless //parts not in unlocked, but in all, are thus locked -GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "body_markings" = "Body Markings", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "arachnid_legs" = "Arachnid Legs", "arachnid_spinneret" = "Spinneret", "arachnid_mandibles" = "Mandibles", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns")) +GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Tail", "tail_human" = "Tail", "snout" = "Snout", "frills" = "Frills", "spines" = "Spines", "mam_body_markings" = "Species Markings" , "mam_ears" = "Ears", "ears" = "Ears", "mam_snouts" = "Snout", "legs" = "Legs", "deco_wings" = "Decorative Wings", "insect_wings" = "Insect Wings", "insect_fluff" = "Insect Fluff", "taur" = "Tauric Body", "insect_markings" = "Insect Markings", "wings" = "Wings", "arachnid_legs" = "Arachnid Legs", "arachnid_spinneret" = "Spinneret", "arachnid_mandibles" = "Mandibles", "xenohead" = "Caste Head", "xenotail" = "Tail", "xenodorsal" = "Dorsal Spines", "ipc_screen" = "Screen", "ipc_antenna" = "Antenna", "meat_type" = "Meat Type", "horns" = "Horns")) GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff")) //parts in either of the above two lists that require a second option that allows them to be coloured diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 0679d9ffac..9a74b63040 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -41,7 +41,6 @@ H.dna.features["horns"] = pick(GLOB.horns_list) H.dna.features["frills"] = pick(GLOB.frills_list) H.dna.features["spines"] = pick(GLOB.spines_list) - H.dna.features["body_markings"] = pick(GLOB.body_markings_list) H.dna.features["insect_wings"] = pick(GLOB.insect_wings_list) H.dna.features["deco_wings"] = pick(GLOB.deco_wings_list) H.dna.features["insect_fluff"] = pick(GLOB.insect_fluffs_list) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0194301134..f311d1910a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -124,7 +124,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/eye_type = DEFAULT_EYES_TYPE //Eye type var/split_eye_colors = FALSE var/datum/species/pref_species = new /datum/species/human() //Mutant race - var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = list(), "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + var/list/features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = list(), "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) var/custom_speech_verb = "default" //if your say_mod is to be something other than your races var/custom_tongue = "default" //if your tongue is to be something other than your races @@ -517,9 +517,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) // rp marking selection // assume you can only have mam markings or regular markings or none, never both var/marking_type - if(parent.can_have_part("body_markings")) - marking_type = "body_markings" - else if(parent.can_have_part("mam_body_markings")) + if(parent.can_have_part("mam_body_markings")) marking_type = "mam_body_markings" if(marking_type) dat += APPEARANCE_CATEGORY_COLUMN @@ -535,7 +533,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to var/color_marking_dat = "" var/number_colors = 1 - var/datum/sprite_accessory/S = (marking_type == "mam_body_markings") ? GLOB.mam_body_markings_list[marking_list[2]] : GLOB.body_markings_list[marking_list[2]] + var/datum/sprite_accessory/S = GLOB.mam_body_markings_list[marking_list[2]] if(S && S.matrixed_sections && S.matrixed_sections != MATRIX_NONE) // if it has nothing initialize it to white if(length(marking_list) == 2) @@ -555,7 +553,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "

" for(var/mutant_part in GLOB.all_mutant_parts) - if(mutant_part == "body_markings" || mutant_part == "mam_body_markings") + if(mutant_part == "mam_body_markings") continue if(parent.can_have_part(mutant_part)) if(!mutant_category) @@ -1766,8 +1764,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) pref_species = new newtype() //let's ensure that no weird shit happens on species swapping. custom_species = null - if(!parent.can_have_part("body_markings")) - features["body_markings"] = list() if(!parent.can_have_part("mam_body_markings")) features["mam_body_markings"] = list() if(parent.can_have_part("mam_body_markings")) @@ -2145,7 +2141,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["xenodorsal"] = new_dors //every single primary/secondary/tertiary colouring done at once - if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","body_markings_primary","body_markings_secondary","body_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary") + if("xenodorsal_primary","xenodorsal_secondary","xenodorsal_tertiary","xhead_primary","xhead_secondary","xhead_tertiary","tail_primary","tail_secondary","tail_tertiary","insect_markings_primary","insect_markings_secondary","insect_markings_tertiary","insect_fluff_primary","insect_fluff_secondary","insect_fluff_tertiary","ears_primary","ears_secondary","ears_tertiary","frills_primary","frills_secondary","frills_tertiary","ipc_antenna_primary","ipc_antenna_secondary","ipc_antenna_tertiary","taur_primary","taur_secondary","taur_tertiary","snout_primary","snout_secondary","snout_tertiary","spines_primary","spines_secondary","spines_tertiary", "mam_body_markings_primary", "mam_body_markings_secondary", "mam_body_markings_tertiary") var/the_feature = features[href_list["preference"]] if(!the_feature) features[href_list["preference"]] = "FFFFFF" @@ -2442,7 +2438,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(selected_limb) var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) var/list/marking_list = GLOB.mam_body_markings_list - if(marking_type == "body_markings") marking_list = GLOB.body_markings_list var/list/snowflake_markings_list = list() for(var/path in marking_list) var/datum/sprite_accessory/S = marking_list[path] diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index f430854575..ca993be7c4 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -605,7 +605,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/savefile/S = new /savefile(path) if(!S) return FALSE - features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) + features = list("mcolor" = "FFFFFF", "mcolor2" = "FFFFFF", "mcolor3" = "FFFFFF", "tail_lizard" = "Smooth", "tail_human" = "None", "snout" = "Round", "horns" = "None", "horns_color" = "85615a", "ears" = "None", "wings" = "None", "wings_color" = "FFF", "frills" = "None", "deco_wings" = "None", "spines" = "None", "legs" = "Plantigrade", "insect_wings" = "Plain", "insect_fluff" = "None", "insect_markings" = "None", "arachnid_legs" = "Plain", "arachnid_spinneret" = "Plain", "arachnid_mandibles" = "Plain", "mam_body_markings" = "Plain", "mam_ears" = "None", "mam_snouts" = "None", "mam_tail" = "None", "mam_tail_animated" = "None", "xenodorsal" = "Standard", "xenohead" = "Standard", "xenotail" = "Xenomorph Tail", "taur" = "None", "genitals_use_skintone" = FALSE, "has_cock" = FALSE, "cock_shape" = DEF_COCK_SHAPE, "cock_length" = COCK_SIZE_DEF, "cock_diameter_ratio" = COCK_DIAMETER_RATIO_DEF, "cock_color" = "ffffff", "cock_taur" = FALSE, "has_balls" = FALSE, "balls_color" = "ffffff", "balls_shape" = DEF_BALLS_SHAPE, "balls_size" = BALLS_SIZE_DEF, "balls_cum_rate" = CUM_RATE, "balls_cum_mult" = CUM_RATE_MULT, "balls_efficiency" = CUM_EFFICIENCY, "has_breasts" = FALSE, "breasts_color" = "ffffff", "breasts_size" = BREASTS_SIZE_DEF, "breasts_shape" = DEF_BREASTS_SHAPE, "breasts_producing" = FALSE, "has_vag" = FALSE, "vag_shape" = DEF_VAGINA_SHAPE, "vag_color" = "ffffff", "has_womb" = FALSE, "balls_visibility" = GEN_VISIBLE_NO_UNDIES, "breasts_visibility"= GEN_VISIBLE_NO_UNDIES, "cock_visibility" = GEN_VISIBLE_NO_UNDIES, "vag_visibility" = GEN_VISIBLE_NO_UNDIES, "ipc_screen" = "Sunburst", "ipc_antenna" = "None", "flavor_text" = "", "silicon_flavor_text" = "", "ooc_notes" = "", "meat_type" = "Mammalian", "body_model" = MALE, "body_size" = RESIZE_DEFAULT_SIZE, "color_scheme" = OLD_CHARACTER_COLORING) S.cd = "/" if(!slot) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 48e8a4c338..acceb331ab 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -994,7 +994,6 @@ H.dna.features["wings"] = "None" H.dna.features["frills"] = "None" H.dna.features["spines"] = "Long" - H.dna.features["body_markings"] = "Dark Tiger Body" H.dna.features["legs"] = "Digitigrade" H.dna.features["taur_body"] = "None" H.left_eye_color = "fee5a3" From ea071bd0312ef3716f13850016c3db3d13cbca51 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 18:28:55 +0100 Subject: [PATCH 29/63] comment --- .../mob/dead/new_player/sprite_accessories/body_markings.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index a6137eb908..278a31959f 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -13,7 +13,7 @@ gender_specific = 0 icon = 'modular_citadel/icons/mob/mam_markings.dmi' recommended_species = list("mammal", "xeno", "slimeperson", "podweak") - matrixed_sections = MATRIX_ALL + matrixed_sections = MATRIX_ALL // this value is used if there is no value in covered_limbs, don't rely on it, it's a backup value var/list/covered_limbs = list(HEAD, CHEST, LEG_LEFT, LEG_RIGHT, ARM_LEFT, ARM_RIGHT) /datum/sprite_accessory/mam_body_markings/none From d39a60dd6b87e1df5289edd8c386a13695428783 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 21:24:07 +0100 Subject: [PATCH 30/63] casually list the matrixes for several hundred sprites --- .../sprite_accessories/Citadel_Snowflake.dm | 2 + .../sprite_accessories/body_markings.dm | 43 ++++++++++++++++++- .../new_player/sprite_accessories/synthliz.dm | 6 +-- 3 files changed, 47 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm index f58788d9af..860c299baf 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm @@ -12,6 +12,7 @@ name = "DataShark" icon_state = "datashark" ckeys_allowed = list("rubyflamewing") + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) //Sabresune /datum/sprite_accessory/ears/mam_ears/sabresune @@ -39,6 +40,7 @@ name = "Sabresune" icon_state = "sabresune" ckeys_allowed = list("poojawa") + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) //Lunasune /datum/sprite_accessory/ears/mam_ears/lunasune diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 278a31959f..d6da8be86e 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -27,87 +27,107 @@ /datum/sprite_accessory/mam_body_markings/redpanda name = "Redpanda" icon_state = "redpanda" + covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/bat name = "Bat" icon_state = "bat" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bee name = "Bee" icon_state = "bee" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/belly name = "Belly" icon_state = "belly" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bellyslim name = "Bellyslim" icon_state = "bellyslim" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/cow name = "Bovine" icon_state = "bovine" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corgi name = "Corgi" icon_state = "corgi" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corvid name = "Corvid" icon_state = "corvid" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/dalmation name = "Dalmation" icon_state = "dalmation" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/deer name = "Deer" icon_state = "deer" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_GREEN_BLUE, LEG_RIGHT = MATRIX_GREEN_BLUE, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/dog name = "Dog" icon_state = "dog" + covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_GREEN_BLUE, LEG_RIGHT = MATRIX_GREEN_BLUE, ARM_LEFT = MATRIX_ALL, ARM_RIGHT = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/fennec name = "Fennec" icon_state = "Fennec" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/frog name = "Frog" icon_state = "frog" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/goat name = "Goat" icon_state = "goat" + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/handsfeet name = "Handsfeet" icon_state = "handsfeet" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hawk name = "Hawk" icon_state = "hawk" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/husky name = "Husky" icon_state = "husky" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hyena name = "Hyena" icon_state = "hyena" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/insect name = "Insect" @@ -117,97 +137,118 @@ /datum/sprite_accessory/mam_body_markings/lab name = "Lab" icon_state = "lab" + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/orca name = "Orca" icon_state = "orca" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/otie name = "Otie" icon_state = "otie" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_ALL, ARM_RIGHT = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/otter name = "Otter" icon_state = "otter" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/panther name = "Panther" icon_state = "panther" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/plain name = "Plain" icon_state = "plain" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/possum name = "Possum" icon_state = "possum" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/raccoon name = "Raccoon" icon_state = "raccoon" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/sergal name = "Sergal" icon_state = "sergal" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/pede name = "Scolipede" icon_state = "scolipede" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_GREEN, CHEST = MATRIX_GREEN_BLUE, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/shark name = "Shark" icon_state = "shark" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/shepherd name = "Shepherd" icon_state = "shepherd" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/skunk name = "Skunk" icon_state = "skunk" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tajaran name = "Tajaran" icon_state = "tajaran" + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tiger name = "Tiger" icon_state = "tiger" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/turian name = "Turian" icon_state = "turian" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/wolf name = "Wolf" icon_state = "wolf" + covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/xeno name = "Xeno" icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' + covered_limbs = list(HEAD = MATRIX_BLUE, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) // sticking old lizard markings here for now /datum/sprite_accessory/mam_body_markings/dtiger name = "Dark Tiger Body" icon_state = "dtiger" + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/guilmon name = "Guilmon" icon_state = "guilmon" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - matrixed_sections = MATRIX_ALL + covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_GREEN_BLUE, LEG_LEFT = MATRIX_BLUE, LEG_RIGHT = MATRIX_BLUE, ARM_LEFT = MATRIX_GREEN_BLUE, ARM_RIGHT = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/ltiger name = "Light Tiger Body" icon_state = "ltiger" + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/lbelly name = "Light Belly" icon_state = "lbelly" + covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) /****************************************** ************* Insect Markings ************* diff --git a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm index bc4d4dd00d..22015a9e92 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -32,20 +32,20 @@ icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs" icon_state = "synthlizpecs" - matrixed_sections = MATRIX_GREEN + covered_limbs = list(CHEST = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs Light" icon_state = "synthlizpecslight" - matrixed_sections = MATRIX_GREEN_BLUE + covered_limbs = list(CHEST = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/synthliz recommended_species = list("synthliz") icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Plates" icon_state = "synthlizscutes" - matrixed_sections = MATRIX_GREEN + covered_limbs = list(CHEST = MATRIX_GREEN) //Synth tails /datum/sprite_accessory/tails/mam_tails/synthliz From bee9d9c047e5ca258f1ff55b473c84e0a2c13af0 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Wed, 5 May 2021 22:29:21 +0100 Subject: [PATCH 31/63] support for the ridiculous thing i just did --- code/modules/client/preferences.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f311d1910a..b6b134cb1a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -530,22 +530,24 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/reverse_markings = reverseList(markings) for(var/list/marking_list in reverse_markings) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here - var/actual_name = GLOB.bodypart_names[num2text(marking_list[1])] // get the actual name from the bitflag representing the part the marking is applied to + var/limb_value = marking_list[1] + var/actual_name = GLOB.bodypart_names[num2text(limb_value)] // get the actual name from the bitflag representing the part the marking is applied to var/color_marking_dat = "" var/number_colors = 1 - var/datum/sprite_accessory/S = GLOB.mam_body_markings_list[marking_list[2]] - if(S && S.matrixed_sections && S.matrixed_sections != MATRIX_NONE) + var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]] + var/matrixed_sections = S.covered_limbs[limb_value] + if(S && matrixed_sections) // if it has nothing initialize it to white if(length(marking_list) == 2) marking_list += list(list("#FFFFFF","#FFFFFF","#FFFFFF")) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values // we know it has one matrixed section at minimum color_marking_dat += "   " // if it has a second section, add it - if(S.matrixed_sections == MATRIX_RED_BLUE || S.matrixed_sections == MATRIX_GREEN_BLUE || S.matrixed_sections == MATRIX_RED_GREEN || S.matrixed_sections == MATRIX_ALL) + if(matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE || matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_ALL) color_marking_dat += "   " number_colors = 2 // if it has a third section, add it - if(S.matrixed_sections == MATRIX_ALL) + if(matrixed_sections == MATRIX_ALL) color_marking_dat += "   " number_colors = 3 color_marking_dat += " Change
" From a269e8bf03f7f6d21267f71fe9fb2f7979469a36 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 01:51:17 +0100 Subject: [PATCH 32/63] migration fix --- code/modules/client/preferences_savefile.dm | 23 +++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ca993be7c4..1166920c9f 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -311,13 +311,28 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/old_marking_value = S[marking_type] var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF") - if(S["feature_mcolor"]) color_list[1] = S["feature_mcolor"] - if(S["feature_mcolor2"]) color_list[2] = S["feature_mcolor2"] - if(S["feature_mcolor3"]) color_list[3] = S["feature_mcolor3"] + if(S["feature_mcolor"]) color_list[1] = S["feature_mcolor"] else color_list[1] = "#FFFFFF" + if(S["feature_mcolor2"]) color_list[2] = S["feature_mcolor2"] else color_list[2] = "#FFFFFF" + if(S["feature_mcolor3"]) color_list[3] = S["feature_mcolor3"] else color_list[3] = "#FFFFFF" var/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) - marking_list += list(list(part, old_marking_value, color_list.Copy())) + var/list/copied_color_list = color_list.Copy() + var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[old_marking_value] + if(length(S.covered_limbs) && S.covered_limbs[part]) + var/matrixed_sections = S.covered_limbs[part] + // just trust me this is fine + switch(matrixed_sections) + if(MATRIX_GREEN) + color_list[1] = color_list[2] + if(MATRIX_BLUE) + color_list[1] = color_list[3] + if(MATRIX_RED_BLUE) + color_list[2] = color_list[3] + if(MATRIX_GREEN_BLUE) + color_list[1] = color_list[2] + color_list[2] = color_list[3] + marking_list += list(list(part, old_marking_value, copied_color_list)) S[marking_type] = safe_json_encode(marking_list) From eefabc90494a26f82f8ea61edd09f28ee16f883a Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 22:08:51 +0100 Subject: [PATCH 33/63] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f6660fa54d..5c25e13e84 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -554,7 +554,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "" for(var/mutant_part in GLOB.all_mutant_parts) - if(istype(accessory, /datum/sprite_accessory/mam_body_markings) || istype(accessory, /datum/sprite_accessory/body_markings)) + if(mutant_part == "body_markings" || mutant_part == "mam_body_markings") continue if(parent.can_have_part(mutant_part)) if(!mutant_category) From cb12843a34843542d161e3dcda1dfbcfa6bc650d Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 22:35:15 +0100 Subject: [PATCH 34/63] bugfix --- .../sprite_accessories/body_markings.dm | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index d6da8be86e..0d9e845d74 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -27,107 +27,107 @@ /datum/sprite_accessory/mam_body_markings/redpanda name = "Redpanda" icon_state = "redpanda" - covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/bat name = "Bat" icon_state = "bat" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bee name = "Bee" icon_state = "bee" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/belly name = "Belly" icon_state = "belly" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bellyslim name = "Bellyslim" icon_state = "bellyslim" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/cow name = "Bovine" icon_state = "bovine" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corgi name = "Corgi" icon_state = "corgi" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corvid name = "Corvid" icon_state = "corvid" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/dalmation name = "Dalmation" icon_state = "dalmation" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/deer name = "Deer" icon_state = "deer" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_GREEN_BLUE, LEG_RIGHT = MATRIX_GREEN_BLUE, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN_BLUE, num2text(LEG_RIGHT) = MATRIX_GREEN_BLUE, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/dog name = "Dog" icon_state = "dog" - covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_GREEN_BLUE, LEG_RIGHT = MATRIX_GREEN_BLUE, ARM_LEFT = MATRIX_ALL, ARM_RIGHT = MATRIX_ALL) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_GREEN_BLUE, num2text(LEG_RIGHT) = MATRIX_GREEN_BLUE, num2text(ARM_LEFT) = MATRIX_ALL, num2text(ARM_RIGHT) = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/fennec name = "Fennec" icon_state = "Fennec" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/frog name = "Frog" icon_state = "frog" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/goat name = "Goat" icon_state = "goat" - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/handsfeet name = "Handsfeet" icon_state = "handsfeet" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hawk name = "Hawk" icon_state = "hawk" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/husky name = "Husky" icon_state = "husky" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hyena name = "Hyena" icon_state = "hyena" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/insect name = "Insect" @@ -137,118 +137,118 @@ /datum/sprite_accessory/mam_body_markings/lab name = "Lab" icon_state = "lab" - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/orca name = "Orca" icon_state = "orca" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/otie name = "Otie" icon_state = "otie" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_ALL, ARM_RIGHT = MATRIX_ALL) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_ALL, num2text(ARM_RIGHT) = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/otter name = "Otter" icon_state = "otter" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/panther name = "Panther" icon_state = "panther" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/plain name = "Plain" icon_state = "plain" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/possum name = "Possum" icon_state = "possum" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/raccoon name = "Raccoon" icon_state = "raccoon" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/sergal name = "Sergal" icon_state = "sergal" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/pede name = "Scolipede" icon_state = "scolipede" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_GREEN, CHEST = MATRIX_GREEN_BLUE, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_GREEN, num2text(CHEST) = MATRIX_GREEN_BLUE, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/shark name = "Shark" icon_state = "shark" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/shepherd name = "Shepherd" icon_state = "shepherd" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/skunk name = "Skunk" icon_state = "skunk" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tajaran name = "Tajaran" icon_state = "tajaran" - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tiger name = "Tiger" icon_state = "tiger" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_ALL, LEG_RIGHT = MATRIX_ALL, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/turian name = "Turian" icon_state = "turian" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/wolf name = "Wolf" icon_state = "wolf" - covered_limbs = list(HEAD = MATRIX_ALL, CHEST = MATRIX_ALL, LEG_LEFT = MATRIX_RED_BLUE, LEG_RIGHT = MATRIX_RED_BLUE, ARM_LEFT = MATRIX_RED_BLUE, ARM_RIGHT = MATRIX_RED_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/xeno name = "Xeno" icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_BLUE, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list(num2text(HEAD) = MATRIX_BLUE, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) // sticking old lizard markings here for now /datum/sprite_accessory/mam_body_markings/dtiger name = "Dark Tiger Body" icon_state = "dtiger" - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/guilmon name = "Guilmon" icon_state = "guilmon" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(HEAD = MATRIX_RED_BLUE, CHEST = MATRIX_GREEN_BLUE, LEG_LEFT = MATRIX_BLUE, LEG_RIGHT = MATRIX_BLUE, ARM_LEFT = MATRIX_GREEN_BLUE, ARM_RIGHT = MATRIX_GREEN_BLUE) + covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_GREEN_BLUE, num2text(LEG_LEFT) = MATRIX_BLUE, num2text(LEG_RIGHT) = MATRIX_BLUE, num2text(ARM_LEFT) = MATRIX_GREEN_BLUE, num2text(ARM_RIGHT) = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/ltiger name = "Light Tiger Body" icon_state = "ltiger" - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/lbelly name = "Light Belly" icon_state = "lbelly" - covered_limbs = list(HEAD = MATRIX_RED, CHEST = MATRIX_RED, LEG_LEFT = MATRIX_RED, LEG_RIGHT = MATRIX_RED, ARM_LEFT = MATRIX_RED, ARM_RIGHT = MATRIX_RED) + covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) /****************************************** ************* Insect Markings ************* From 80599201cf212013d86b8ca02e4ea2e1cd388f49 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 22:39:07 +0100 Subject: [PATCH 35/63] better fix --- code/modules/client/preferences.dm | 4 +- .../sprite_accessories/body_markings.dm | 92 +++++++++---------- 2 files changed, 48 insertions(+), 48 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index b6b134cb1a..1572d45d2f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -535,7 +535,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/color_marking_dat = "" var/number_colors = 1 var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]] - var/matrixed_sections = S.covered_limbs[limb_value] + var/matrixed_sections = S.covered_limbs[actual_name] if(S && matrixed_sections) // if it has nothing initialize it to white if(length(marking_list) == 2) @@ -2446,7 +2446,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(istype(S)) if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S - if(!(limb_value in marking.covered_limbs)) + if(!(selected_limb in marking.covered_limbs)) continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 0d9e845d74..285e7ca7e2 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -14,7 +14,7 @@ icon = 'modular_citadel/icons/mob/mam_markings.dmi' recommended_species = list("mammal", "xeno", "slimeperson", "podweak") matrixed_sections = MATRIX_ALL // this value is used if there is no value in covered_limbs, don't rely on it, it's a backup value - var/list/covered_limbs = list(HEAD, CHEST, LEG_LEFT, LEG_RIGHT, ARM_LEFT, ARM_RIGHT) + var/list/covered_limbs = list("Head", "Chest", "Left Leg", "Right Leg", "Left Arm", "Right Arm") /datum/sprite_accessory/mam_body_markings/none name = "None" @@ -27,107 +27,107 @@ /datum/sprite_accessory/mam_body_markings/redpanda name = "Redpanda" icon_state = "redpanda" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/bat name = "Bat" icon_state = "bat" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bee name = "Bee" icon_state = "bee" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/belly name = "Belly" icon_state = "belly" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/bellyslim name = "Bellyslim" icon_state = "bellyslim" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/cow name = "Bovine" icon_state = "bovine" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corgi name = "Corgi" icon_state = "corgi" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/corvid name = "Corvid" icon_state = "corvid" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/dalmation name = "Dalmation" icon_state = "dalmation" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/deer name = "Deer" icon_state = "deer" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN_BLUE, num2text(LEG_RIGHT) = MATRIX_GREEN_BLUE, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/dog name = "Dog" icon_state = "dog" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_GREEN_BLUE, num2text(LEG_RIGHT) = MATRIX_GREEN_BLUE, num2text(ARM_LEFT) = MATRIX_ALL, num2text(ARM_RIGHT) = MATRIX_ALL) + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_GREEN_BLUE, "Right Leg" = MATRIX_GREEN_BLUE, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/eevee name = "Eevee" icon_state = "eevee" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/fennec name = "Fennec" icon_state = "Fennec" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/frog name = "Frog" icon_state = "frog" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/goat name = "Goat" icon_state = "goat" - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/handsfeet name = "Handsfeet" icon_state = "handsfeet" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hawk name = "Hawk" icon_state = "hawk" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/husky name = "Husky" icon_state = "husky" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/hyena name = "Hyena" icon_state = "hyena" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/insect name = "Insect" @@ -137,118 +137,118 @@ /datum/sprite_accessory/mam_body_markings/lab name = "Lab" icon_state = "lab" - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/orca name = "Orca" icon_state = "orca" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/otie name = "Otie" icon_state = "otie" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_ALL, num2text(ARM_RIGHT) = MATRIX_ALL) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_ALL, "Right Arm" = MATRIX_ALL) /datum/sprite_accessory/mam_body_markings/otter name = "Otter" icon_state = "otter" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/panther name = "Panther" icon_state = "panther" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/plain name = "Plain" icon_state = "plain" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/possum name = "Possum" icon_state = "possum" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/raccoon name = "Raccoon" icon_state = "raccoon" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/sergal name = "Sergal" icon_state = "sergal" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/pede name = "Scolipede" icon_state = "scolipede" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_GREEN, num2text(CHEST) = MATRIX_GREEN_BLUE, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_GREEN, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/shark name = "Shark" icon_state = "shark" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED_GREEN, num2text(ARM_RIGHT) = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) /datum/sprite_accessory/mam_body_markings/shepherd name = "Shepherd" icon_state = "shepherd" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/skunk name = "Skunk" icon_state = "skunk" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED_GREEN, num2text(LEG_RIGHT) = MATRIX_RED_GREEN, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tajaran name = "Tajaran" icon_state = "tajaran" - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED_GREEN, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/tiger name = "Tiger" icon_state = "tiger" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_ALL, num2text(LEG_RIGHT) = MATRIX_ALL, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/turian name = "Turian" icon_state = "turian" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_GREEN, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/wolf name = "Wolf" icon_state = "wolf" - covered_limbs = list(num2text(HEAD) = MATRIX_ALL, num2text(CHEST) = MATRIX_ALL, num2text(LEG_LEFT) = MATRIX_RED_BLUE, num2text(LEG_RIGHT) = MATRIX_RED_BLUE, num2text(ARM_LEFT) = MATRIX_RED_BLUE, num2text(ARM_RIGHT) = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_ALL, "Chest" = MATRIX_ALL, "Left Leg" = MATRIX_RED_BLUE, "Right Leg" = MATRIX_RED_BLUE, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/xeno name = "Xeno" icon_state = "xeno" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_BLUE, num2text(CHEST) = MATRIX_GREEN, num2text(LEG_LEFT) = MATRIX_GREEN, num2text(LEG_RIGHT) = MATRIX_GREEN, num2text(ARM_LEFT) = MATRIX_GREEN, num2text(ARM_RIGHT) = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_BLUE, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) // sticking old lizard markings here for now /datum/sprite_accessory/mam_body_markings/dtiger name = "Dark Tiger Body" icon_state = "dtiger" - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/guilmon name = "Guilmon" icon_state = "guilmon" icon = 'modular_citadel/icons/mob/markings_notmammals.dmi' - covered_limbs = list(num2text(HEAD) = MATRIX_RED_BLUE, num2text(CHEST) = MATRIX_GREEN_BLUE, num2text(LEG_LEFT) = MATRIX_BLUE, num2text(LEG_RIGHT) = MATRIX_BLUE, num2text(ARM_LEFT) = MATRIX_GREEN_BLUE, num2text(ARM_RIGHT) = MATRIX_GREEN_BLUE) + covered_limbs = list("Head" = MATRIX_RED_BLUE, "Chest" = MATRIX_GREEN_BLUE, "Left Leg" = MATRIX_BLUE, "Right Leg" = MATRIX_BLUE, "Left Arm" = MATRIX_GREEN_BLUE, "Right Arm" = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/ltiger name = "Light Tiger Body" icon_state = "ltiger" - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /datum/sprite_accessory/mam_body_markings/lbelly name = "Light Belly" icon_state = "lbelly" - covered_limbs = list(num2text(HEAD) = MATRIX_RED, num2text(CHEST) = MATRIX_RED, num2text(LEG_LEFT) = MATRIX_RED, num2text(LEG_RIGHT) = MATRIX_RED, num2text(ARM_LEFT) = MATRIX_RED, num2text(ARM_RIGHT) = MATRIX_RED) + covered_limbs = list("Head" = MATRIX_RED, "Chest" = MATRIX_RED, "Left Leg" = MATRIX_RED, "Right Leg" = MATRIX_RED, "Left Arm" = MATRIX_RED, "Right Arm" = MATRIX_RED) /****************************************** ************* Insect Markings ************* @@ -296,9 +296,9 @@ icon_state = "snow" color_src = HAIR -/datum/sprite_accessory/insect_fluff/deathhead - name = "Deathshead" - icon_state = "deathhead" +/datum/sprite_accessory/insect_fluff/death"Head" + name = "Deaths"Head"" + icon_state = "death"Head"" /datum/sprite_accessory/insect_fluff/featherymoth name = "Feathery Moth" From b1f84f94db8901acff3f377b1f6517d89a562a02 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 22:43:31 +0100 Subject: [PATCH 36/63] Update body_markings.dm --- .../mob/dead/new_player/sprite_accessories/body_markings.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 285e7ca7e2..7e275e49a2 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -296,9 +296,9 @@ icon_state = "snow" color_src = HAIR -/datum/sprite_accessory/insect_fluff/death"Head" - name = "Deaths"Head"" - icon_state = "death"Head"" +/datum/sprite_accessory/insect_fluff/deathhead + name = "Deathshead" + icon_state = "deathhead" /datum/sprite_accessory/insect_fluff/featherymoth name = "Feathery Moth" From e95e4ed106ec3b31268613aecd2c756d2dc87a73 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Thu, 6 May 2021 23:39:41 +0100 Subject: [PATCH 37/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index ca993be7c4..a59f35e111 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -47,6 +47,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car addtimer(CALLBACK(src, .proc/force_reset_keybindings), 30) //No mob available when this is run, timer allows user choice. /datum/preferences/proc/update_character(current_version, savefile/S) + message_admins(current_version) if(current_version < 19) pda_style = "mono" if(current_version < 20) @@ -296,6 +297,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["be_special"] << L if(current_version < 51) // rp markings means markings are now stored as a list, lizard markings now mam like the rest + message_admins("migrating") var/marking_type var/species_id = S["species"] var/datum/species/actual_species = GLOB.species_datums[species_id] @@ -318,7 +320,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) marking_list += list(list(part, old_marking_value, color_list.Copy())) - + message_admins("saved data of length [length(marking_list)]") S[marking_type] = safe_json_encode(marking_list) /datum/preferences/proc/load_path(ckey,filename="preferences.sav") From 440a6633ea3add97b3c89065406cb4974ca6f3b5 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 00:37:33 +0100 Subject: [PATCH 38/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a59f35e111..9e7c942967 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -317,11 +317,12 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(S["feature_mcolor2"]) color_list[2] = S["feature_mcolor2"] if(S["feature_mcolor3"]) color_list[3] = S["feature_mcolor3"] - var/marking_list = list() + var/list/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) marking_list += list(list(part, old_marking_value, color_list.Copy())) message_admins("saved data of length [length(marking_list)]") S[marking_type] = safe_json_encode(marking_list) + message_admins("final json code is: [S[marking_type]]") /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) From eab47bb6ae2a01fb80c7eacbf45b6b9c172e20e8 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 00:43:33 +0100 Subject: [PATCH 39/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9e7c942967..285f34ddd4 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -47,7 +47,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car addtimer(CALLBACK(src, .proc/force_reset_keybindings), 30) //No mob available when this is run, timer allows user choice. /datum/preferences/proc/update_character(current_version, savefile/S) - message_admins(current_version) if(current_version < 19) pda_style = "mono" if(current_version < 20) @@ -297,7 +296,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["be_special"] << L if(current_version < 51) // rp markings means markings are now stored as a list, lizard markings now mam like the rest - message_admins("migrating") var/marking_type var/species_id = S["species"] var/datum/species/actual_species = GLOB.species_datums[species_id] @@ -320,9 +318,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) marking_list += list(list(part, old_marking_value, color_list.Copy())) - message_admins("saved data of length [length(marking_list)]") - S[marking_type] = safe_json_encode(marking_list) - message_admins("final json code is: [S[marking_type]]") + features["mam_body_markings"] = safe_json_encode(marking_list) /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) From f5e2d3de2c1487efca70e4aa0907ef49b6c9f222 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 00:44:44 +0100 Subject: [PATCH 40/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 285f34ddd4..70e4e1656d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -302,7 +302,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car // convert lizard markings to lizard markings if(species_id == SPECIES_LIZARD && S["feature_lizard_body_markings"]) - S["feature_mam_body_markings"] = S["feature_lizard_body_markings"] + features["mam_body_markings"] = features["body_markings"] // convert mam body marking data to the new rp marking data if(actual_species.mutant_bodyparts["mam_body_markings"] && S["feature_mam_body_markings"]) marking_type = "feature_mam_body_markings" From 3b07164fb4c90c106122458128a8ff70638d9fe7 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 00:56:27 +0100 Subject: [PATCH 41/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 70e4e1656d..a759fd1411 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -283,7 +283,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car qdel(temporary_gear_item) //it's double packed into a list because += will union the two lists contents - S["loadout"] = safe_json_encode(loadout_data) + S["loadout"] = loadout_data if(current_version < 48) //unlockable loadout items but we need to clear bad data from a mistake S["unlockable_loadout"] = list() From bef9473fa1727bdccce604c901ef1d399c0b33f1 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 16:10:20 +0100 Subject: [PATCH 42/63] more migration fixes and general bugfixes --- code/modules/client/preferences_savefile.dm | 2 +- .../dead/new_player/sprite_accessories/Citadel_Snowflake.dm | 4 ++-- .../mob/dead/new_player/sprite_accessories/synthliz.dm | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a759fd1411..d33f249956 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -318,7 +318,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) marking_list += list(list(part, old_marking_value, color_list.Copy())) - features["mam_body_markings"] = safe_json_encode(marking_list) + features["mam_body_markings"] = marking_list /datum/preferences/proc/load_path(ckey,filename="preferences.sav") if(!ckey) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm index 860c299baf..016b12d8ec 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/Citadel_Snowflake.dm @@ -12,7 +12,7 @@ name = "DataShark" icon_state = "datashark" ckeys_allowed = list("rubyflamewing") - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_GREEN, LEG_LEFT = MATRIX_GREEN, LEG_RIGHT = MATRIX_GREEN, ARM_LEFT = MATRIX_GREEN, ARM_RIGHT = MATRIX_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_GREEN, "Left Leg" = MATRIX_GREEN, "Right Leg" = MATRIX_GREEN, "Left Arm" = MATRIX_GREEN, "Right Arm" = MATRIX_GREEN) //Sabresune /datum/sprite_accessory/ears/mam_ears/sabresune @@ -40,7 +40,7 @@ name = "Sabresune" icon_state = "sabresune" ckeys_allowed = list("poojawa") - covered_limbs = list(HEAD = MATRIX_RED_GREEN, CHEST = MATRIX_RED_GREEN, LEG_LEFT = MATRIX_RED_GREEN, LEG_RIGHT = MATRIX_RED_GREEN, ARM_LEFT = MATRIX_RED_GREEN, ARM_RIGHT = MATRIX_RED_GREEN) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_GREEN, "Right Arm" = MATRIX_RED_GREEN) //Lunasune /datum/sprite_accessory/ears/mam_ears/lunasune diff --git a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm index 22015a9e92..c7cd699ec9 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/synthliz.dm @@ -32,20 +32,20 @@ icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs" icon_state = "synthlizpecs" - covered_limbs = list(CHEST = MATRIX_GREEN) + covered_limbs = list("Chest" = MATRIX_GREEN) /datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecslight icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Pecs Light" icon_state = "synthlizpecslight" - covered_limbs = list(CHEST = MATRIX_GREEN_BLUE) + covered_limbs = list("Chest" = MATRIX_GREEN_BLUE) /datum/sprite_accessory/mam_body_markings/synthliz recommended_species = list("synthliz") icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi' name = "Synthetic Lizard - Plates" icon_state = "synthlizscutes" - covered_limbs = list(CHEST = MATRIX_GREEN) + covered_limbs = list("Chest" = MATRIX_GREEN) //Synth tails /datum/sprite_accessory/tails/mam_tails/synthliz From 0fb72497ff9799c3475aa4c65afe9436dbe43553 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 16:46:40 +0100 Subject: [PATCH 43/63] color fix --- code/modules/client/preferences_savefile.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index d33f249956..25c96aed1a 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -311,9 +311,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/old_marking_value = S[marking_type] var/list/color_list = list("#FFFFFF","#FFFFFF","#FFFFFF") - if(S["feature_mcolor"]) color_list[1] = S["feature_mcolor"] - if(S["feature_mcolor2"]) color_list[2] = S["feature_mcolor2"] - if(S["feature_mcolor3"]) color_list[3] = S["feature_mcolor3"] + if(S["feature_mcolor"]) color_list[1] = "#" + S["feature_mcolor"] + if(S["feature_mcolor2"]) color_list[2] = "#" + S["feature_mcolor2"] + if(S["feature_mcolor3"]) color_list[3] = "#" + S["feature_mcolor3"] var/list/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) From bb893383bc7b00f84dc93518f7dab4cb8272fde5 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 7 May 2021 17:27:55 +0100 Subject: [PATCH 44/63] Update _bodyparts.dm --- code/modules/surgery/bodyparts/_bodyparts.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 712f0a33a0..bd5095059b 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -833,7 +833,6 @@ markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)) if(color_src && length(marking_list) == 3) - message_admins("trying to color list of length [length(marking_list)] and also trying to access index [length(markings_list)] on a list of the same length") markings_list[length(markings_list)].color = marking_list[3] . += markings_list From 5e271c239fe22f8b76ee6a433b5018cf9063d2a3 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 01:31:44 +0100 Subject: [PATCH 45/63] conflict resolving caused runtimes --- code/modules/client/preferences_savefile.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 339d831881..05370b29cd 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -322,9 +322,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/list/marking_list = list() for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) var/list/copied_color_list = color_list.Copy() - var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[old_marking_value] - if(length(S.covered_limbs) && S.covered_limbs[part]) - var/matrixed_sections = S.covered_limbs[part] + var/datum/sprite_accessory/mam_body_markings/mam_marking = GLOB.mam_body_markings_list[old_marking_value] + if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part]) + var/matrixed_sections = mam_marking.covered_limbs[part] // just trust me this is fine switch(matrixed_sections) if(MATRIX_GREEN) From 149cdeb9fdacfe812bb2043c17a55038b6d90476 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 01:34:43 +0100 Subject: [PATCH 46/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 05370b29cd..4a1c0b0d98 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -328,15 +328,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car // just trust me this is fine switch(matrixed_sections) if(MATRIX_GREEN) - color_list[1] = color_list[2] + copied_color_list[1] = copied_color_list[2] if(MATRIX_BLUE) - color_list[1] = color_list[3] + copied_color_list[1] = copied_color_list[3] if(MATRIX_RED_BLUE) - color_list[2] = color_list[3] + copied_color_list[2] = copied_color_list[3] if(MATRIX_GREEN_BLUE) - color_list[1] = color_list[2] - color_list[2] = color_list[3] - marking_list += list(list(part, old_marking_value, color_list.Copy())) + copied_color_list[1] = copied_color_list[2] + copied_color_list[2] = copied_color_list[3] + marking_list += list(list(part, old_marking_value, copied_color_list)) features["mam_body_markings"] = marking_list /datum/preferences/proc/load_path(ckey,filename="preferences.sav") From 42d8d83ca2af474323c19a2c1fcc0e2988356176 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 01:52:55 +0100 Subject: [PATCH 47/63] Update preferences_savefile.dm --- code/modules/client/preferences_savefile.dm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 4a1c0b0d98..b5a54375e8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -323,8 +323,9 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car for(var/part in list(ARM_LEFT, ARM_RIGHT, LEG_LEFT, LEG_RIGHT, CHEST, HEAD)) var/list/copied_color_list = color_list.Copy() var/datum/sprite_accessory/mam_body_markings/mam_marking = GLOB.mam_body_markings_list[old_marking_value] - if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part]) - var/matrixed_sections = mam_marking.covered_limbs[part] + var/part_name = GLOB.bodypart_names[num2text(part)] + if(length(mam_marking.covered_limbs) && mam_marking.covered_limbs[part_name]) + var/matrixed_sections = mam_marking.covered_limbs[part_name] // just trust me this is fine switch(matrixed_sections) if(MATRIX_GREEN) From 022003dc7c314d519ae390460561f5b6c6b73961 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 02:05:20 +0100 Subject: [PATCH 48/63] funny comment --- code/modules/client/preferences_savefile.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index b5a54375e8..45c5357c4d 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -762,6 +762,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_genitals_use_skintone"] >> features["genitals_use_skintone"] S["feature_mcolor2"] >> features["mcolor2"] S["feature_mcolor3"] >> features["mcolor3"] + // note safe json decode will runtime the first time it migrates but this is fine and it solves itself don't worry about it if you see it error features["mam_body_markings"] = safe_json_decode(S["feature_mam_body_markings"]) S["feature_mam_tail"] >> features["mam_tail"] S["feature_mam_ears"] >> features["mam_ears"] From 0bc90971ffdd90d82f58ef7577517f029513dc08 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 21:04:01 +0100 Subject: [PATCH 49/63] removes the newline --- code/_globalvars/lists/flavor_misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index d94c677a42..9417d52bea 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -352,4 +352,4 @@ GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2" //list linking bodypart bitflags to their actual names GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) // list linking bodypart names back to the bitflags -GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) +GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) \ No newline at end of file From 23015f83c43907ef9048d7458c1aa67974d2c2a4 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 21:04:27 +0100 Subject: [PATCH 50/63] re-adds the newline --- code/_globalvars/lists/flavor_misc.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_globalvars/lists/flavor_misc.dm b/code/_globalvars/lists/flavor_misc.dm index 9417d52bea..d94c677a42 100644 --- a/code/_globalvars/lists/flavor_misc.dm +++ b/code/_globalvars/lists/flavor_misc.dm @@ -352,4 +352,4 @@ GLOBAL_LIST_INIT(eye_types, list("normal", "insect", "moth", "double", "double2" //list linking bodypart bitflags to their actual names GLOBAL_LIST_INIT(bodypart_names, list(num2text(HEAD) = "Head", num2text(CHEST) = "Chest", num2text(LEG_LEFT) = "Left Leg", num2text(LEG_RIGHT) = "Right Leg", num2text(ARM_LEFT) = "Left Arm", num2text(ARM_RIGHT) = "Right Arm")) // list linking bodypart names back to the bitflags -GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) \ No newline at end of file +GLOBAL_LIST_INIT(bodypart_values, list("Head" = num2text(HEAD), "Chest" = num2text(CHEST), "Left Leg" = num2text(LEG_LEFT), "Right Leg" = num2text(LEG_RIGHT), "Left Arm" = num2text(ARM_LEFT), "Right Arm" = num2text(ARM_RIGHT))) From d479f80f9b5a403c3fbed79d95d3849d737cda68 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sat, 8 May 2021 21:19:07 +0100 Subject: [PATCH 51/63] linters are literally stupid --- code/modules/client/preferences.dm | 4 +++- code/modules/surgery/bodyparts/_bodyparts.dm | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 1572d45d2f..4acf911e7b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2430,7 +2430,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/index = text2num(href_list["marking_index"]) var/marking_type = href_list["marking_type"] if(index && marking_type && features[marking_type]) - features[marking_type].Cut(index, index + 1) + // because linters are just absolutely awful: + var/list/L = features[marking_type] + L.Cut(index, index + 1) if("marking_add") // add a marking diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index bd5095059b..50d8cdaed5 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -833,7 +833,8 @@ markings_list.Add(image(marking_list[1], "[marking_list[2]]_[digitigrade_type]_[use_digitigrade]_[body_zone]", -MARKING_LAYER, image_dir)) if(color_src && length(marking_list) == 3) - markings_list[length(markings_list)].color = marking_list[3] + var/image/I = markings_list[length(markings_list)] + I.color = marking_list[3] . += markings_list // Citadel End From 6095b4724f2641f9551f9eb81ddf10a00dd3d244 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 01:54:24 +0100 Subject: [PATCH 52/63] fixes fox markings legs --- .../mob/dead/new_player/sprite_accessories/body_markings.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm index 7e275e49a2..148af35247 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/body_markings.dm @@ -95,7 +95,7 @@ /datum/sprite_accessory/mam_body_markings/fox name = "Fox" icon_state = "fox" - covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_RED_GREEN, "Right Leg" = MATRIX_RED_GREEN, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) + covered_limbs = list("Head" = MATRIX_RED_GREEN, "Chest" = MATRIX_RED_GREEN, "Left Leg" = MATRIX_ALL, "Right Leg" = MATRIX_ALL, "Left Arm" = MATRIX_RED_BLUE, "Right Arm" = MATRIX_RED_BLUE) /datum/sprite_accessory/mam_body_markings/frog name = "Frog" From 6926ea74abe299c0beadfd995809f6ec46936745 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 13:58:53 +0100 Subject: [PATCH 53/63] Update preferences.dm --- code/modules/client/preferences.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4acf911e7b..fd2235234b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -527,6 +527,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(length(features[marking_type])) dat += "" var/list/markings = features[marking_type] + if(!islist(markings)) + # something went terribly wrong + markings = [] var/list/reverse_markings = reverseList(markings) for(var/list/marking_list in reverse_markings) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here From cfcbaa001b4f9f8097a854cacdf78ac4042dfb67 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 14:31:36 +0100 Subject: [PATCH 54/63] fixes --- code/modules/client/preferences.dm | 2 +- code/modules/surgery/bodyparts/_bodyparts.dm | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index fd2235234b..6a463d53bb 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -528,7 +528,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "
" var/list/markings = features[marking_type] if(!islist(markings)) - # something went terribly wrong + // something went terribly wrong markings = [] var/list/reverse_markings = reverseList(markings) for(var/list/marking_list in reverse_markings) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 50d8cdaed5..8c7a99f8b1 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -848,7 +848,7 @@ auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) else for(var/marking_list in body_markings_list) - auxmarking += image(body_markings_list[1], "[body_markings_list[2]]_[I]", -aux_layer, image_dir) + auxmarking += image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) . += aux . += auxmarking @@ -868,7 +868,7 @@ auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) else for(var/marking_list in body_markings_list) - auxmarking += image(body_markings_list[1], "[body_markings_list[2]]_[I]", -aux_layer, image_dir) + auxmarking += image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) . += auxmarking . += aux From 24774856bcaba368cbafc125093efca1fada1312 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 14:34:22 +0100 Subject: [PATCH 55/63] Update preferences.dm --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 6a463d53bb..7ae8ec280b 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -529,7 +529,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/list/markings = features[marking_type] if(!islist(markings)) // something went terribly wrong - markings = [] + markings = list() var/list/reverse_markings = reverseList(markings) for(var/list/marking_list in reverse_markings) var/marking_index = markings.Find(marking_list) // consider changing loop to go through indexes over lists instead of using Find here From be9b1ddffb7c3b1ae6e28b1ec93e14c09b20dba0 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 14:43:45 +0100 Subject: [PATCH 56/63] fixes --- code/__HELPERS/mobs.dm | 10 +--------- .../mob/living/carbon/human/species_types/podpeople.dm | 2 +- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index c6c8c0bced..245f8e5d4c 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -114,14 +114,6 @@ if(!S.ckeys_allowed) snowflake_mam_tails_list[S.name] = mtpath var/list/snowflake_markings_list = list() - for(var/mmpath in GLOB.mam_body_markings_list) - var/datum/sprite_accessory/mam_body_markings/instance = GLOB.mam_body_markings_list[mmpath] - if(istype(instance, /datum/sprite_accessory)) - var/datum/sprite_accessory/S = instance - if(intendedspecies && S.recommended_species && !S.recommended_species.Find(intendedspecies)) - continue - if(!S.ckeys_allowed) - snowflake_markings_list[S.name] = mmpath var/list/snowflake_ears_list = list() for(var/mepath in GLOB.mam_ears_list) var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[mepath] @@ -184,7 +176,7 @@ "arachnid_spinneret" = pick(GLOB.arachnid_spinneret_list), "arachnid_mandibles" = pick(GLOB.arachnid_mandibles_list), "taur" = "None", - "mam_body_markings" = snowflake_markings_list.len ? pick(snowflake_markings_list) : "None", + "mam_body_markings" = list(), "mam_ears" = snowflake_ears_list ? pick(snowflake_ears_list) : "None", "mam_snouts" = snowflake_mam_snouts_list ? pick(snowflake_mam_snouts_list) : "None", "mam_tail" = snowflake_mam_tails_list ? pick(snowflake_mam_tails_list) : "None", diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index 697c3db35e..e30f4622a0 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -74,7 +74,7 @@ name = "Anthromorphic Plant" id = SPECIES_POD_WEAK species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE) - mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = "Husky", "taur" = "None", "legs" = "Normal Legs") + mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = list(), "taur" = "None", "legs" = "Normal Legs") limbs_id = SPECIES_POD light_nutrition_gain_factor = 3 light_bruteheal = -0.2 From c51fa954cf5fc524b152c1f334b4a71a83301c37 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 14:51:18 +0100 Subject: [PATCH 57/63] Update mobs.dm --- code/__HELPERS/mobs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 245f8e5d4c..02af6fab79 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -113,7 +113,6 @@ continue if(!S.ckeys_allowed) snowflake_mam_tails_list[S.name] = mtpath - var/list/snowflake_markings_list = list() var/list/snowflake_ears_list = list() for(var/mepath in GLOB.mam_ears_list) var/datum/sprite_accessory/ears/mam_ears/instance = GLOB.mam_ears_list[mepath] From 60673d9c5c09fd4b9498d568d9bcb3ddadbc38f3 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 17:13:24 +0100 Subject: [PATCH 58/63] AAAAAA --- code/modules/client/preferences.dm | 17 +++++++++ code/modules/surgery/bodyparts/_bodyparts.dm | 39 ++++++++++---------- 2 files changed, 37 insertions(+), 19 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 7ae8ec280b..19103d8d9a 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2477,6 +2477,23 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(color_option) if(color_option == "Secondary") color_number = 2 if(color_option == "Tertiary") color_number = 3 + // perform some magic on the color number + var/list/marking_list = features[marking_type][index] + var/datum/sprite_accessory/mam_body_markings/S = GLOB.mam_body_markings_list[marking_list[2]] + var/matrixed_sections = S.covered_limbs[GLOB.bodypart_names[num2text(marking_list[1])]] + if(color_number == 1) + switch(matrixed_sections) + if(MATRIX_GREEN) + color_number = 2 + if(MATRIX_BLUE) + color_number = 3 + else if(color_number == 2) + switch(matrixed_sections) + if(MATRIX_RED_BLUE) + color_number = 3 + if(MATRIX_GREEN_BLUE) + color_number = 3 + var/color_list = features[marking_type][index][3] var/new_marking_color = input(user, "Choose your character's marking color:", "Character Preference","#"+color_list[color_number]) as color|null if(new_marking_color) diff --git a/code/modules/surgery/bodyparts/_bodyparts.dm b/code/modules/surgery/bodyparts/_bodyparts.dm index 8c7a99f8b1..168a12a2ef 100644 --- a/code/modules/surgery/bodyparts/_bodyparts.dm +++ b/code/modules/surgery/bodyparts/_bodyparts.dm @@ -843,12 +843,14 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[species_id]_[I]", -aux_layer, image_dir) - if(!isnull(marking_value)) - if(species_id == "husk") - auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) - else - for(var/marking_list in body_markings_list) - auxmarking += image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(species_id == "husk") + auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) + else + for(var/marking_list in body_markings_list) + var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(length(marking_list) == 3) + aux_marking_image.color = marking_list[3] + auxmarking += aux_marking_image . += aux . += auxmarking @@ -863,12 +865,14 @@ for(var/I in aux_icons) var/aux_layer = aux_icons[I] aux += image(limb.icon, "[I]", -aux_layer, image_dir) - if(!isnull(marking_value)) - if(species_id == "husk") - auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) - else - for(var/marking_list in body_markings_list) - auxmarking += image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(species_id == "husk") + auxmarking += image('modular_citadel/icons/mob/markings_notmammals.dmi', "husk_[I]", -aux_layer, image_dir) + else + for(var/marking_list in body_markings_list) + var/image/aux_marking_image = image(marking_list[1], "[marking_list[2]]_[I]", -aux_layer, image_dir) + if(length(marking_list) == 3) + aux_marking_image.color = marking_list[3] + auxmarking += aux_marking_image . += auxmarking . += aux @@ -907,13 +911,10 @@ if(grayscale) I.icon_state += "_g" I.color = draw_color - if(!isnull(marking_value)) - for(var/a in auxmarking) - var/image/I = a - if(species_id == "husk") - I.color = "#141414" - else - I.color = list(markings_color) + for(var/a in auxmarking) + var/image/I = a + if(species_id == "husk") + I.color = "#141414" if(!isnull(body_markings)) if(species_id == "husk") From 7560898f94ecb36a1dcc4e5331084281d9d99b41 Mon Sep 17 00:00:00 2001 From: timothyteakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 10 May 2021 22:53:27 +0100 Subject: [PATCH 59/63] Update preferences.dm --- code/modules/client/preferences.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 19103d8d9a..bc62879d46 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2487,6 +2487,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) color_number = 2 if(MATRIX_BLUE) color_number = 3 + if(MATRIX_GREEN_BLUE) + color_number = 2 else if(color_number == 2) switch(matrixed_sections) if(MATRIX_RED_BLUE) From 80d287abca3104e8558994c59354103bc1d1147b Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Sun, 16 May 2021 03:10:35 +0100 Subject: [PATCH 60/63] index magic moment --- code/modules/client/preferences.dm | 34 ++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index bc62879d46..610e4716a4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -542,16 +542,40 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(S && matrixed_sections) // if it has nothing initialize it to white if(length(marking_list) == 2) - marking_list += list(list("#FFFFFF","#FFFFFF","#FFFFFF")) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values + var/first = "#FFFFFF" + var/second = "#FFFFFF" + var/third = "#FFFFFF" + if(features["mcolor"]) + first = "#[features["mcolor"]]" + if(features["mcolor2"]) + second = "#[features["mcolor2"]]" + if(features["mcolor3"]) + third = "#[features["mcolor3"]]" + marking_list += list(list(first, second, third)) // just assume its 3 colours if it isnt it doesnt matter we just wont use the other values + // index magic + var/primary_index = 1 + var/secondary_index = 2 + var/tertiary_index = 3 + switch(matrixed_sections) + if(MATRIX_GREEN) + primary_index = 2 + if(MATRIX_BLUE) + primary_index = 3 + if(MATRIX_RED_BLUE) + secondary_index = 2 + if(MATRIX_GREEN_BLUE) + primary_index = 2 + secondary_index = 3 + // we know it has one matrixed section at minimum - color_marking_dat += "   " + color_marking_dat += "   " // if it has a second section, add it if(matrixed_sections == MATRIX_RED_BLUE || matrixed_sections == MATRIX_GREEN_BLUE || matrixed_sections == MATRIX_RED_GREEN || matrixed_sections == MATRIX_ALL) - color_marking_dat += "   " + color_marking_dat += "   " number_colors = 2 // if it has a third section, add it if(matrixed_sections == MATRIX_ALL) - color_marking_dat += "   " + color_marking_dat += "   " number_colors = 3 color_marking_dat += " Change
" dat += "" @@ -2487,8 +2511,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) color_number = 2 if(MATRIX_BLUE) color_number = 3 - if(MATRIX_GREEN_BLUE) - color_number = 2 else if(color_number == 2) switch(matrixed_sections) if(MATRIX_RED_BLUE) From 4cb0eb34181f7bb4f4b0db9a2c24172b43b362c3 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 17 May 2021 10:59:26 +0100 Subject: [PATCH 61/63] Update preferences.dm --- code/modules/client/preferences.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 610e4716a4..0b65eddec7 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2465,9 +2465,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) // add a marking var/marking_type = href_list["marking_type"] if(marking_type && features[marking_type]) - var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg") + var/selected_limb = input(user, "Choose the limb to apply to.", "Character Preference") as null|anything in list("Head", "Chest", "Left Arm", "Right Arm", "Left Leg", "Right Leg", "All") if(selected_limb) - var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) var/list/marking_list = GLOB.mam_body_markings_list var/list/snowflake_markings_list = list() for(var/path in marking_list) @@ -2475,12 +2474,13 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(istype(S)) if(istype(S, /datum/sprite_accessory/mam_body_markings)) var/datum/sprite_accessory/mam_body_markings/marking = S - if(!(selected_limb in marking.covered_limbs)) + if(!(selected_limb in marking.covered_limbs) && selected_limb != "All") continue if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_markings_list[S.name] = path + var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list if(selected_marking) features[marking_type] += list(list(limb_value, selected_marking)) From 6d13f09c3d8a5b667bc961ceb9b8ceaae859593f Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 17 May 2021 11:20:47 +0100 Subject: [PATCH 62/63] Update preferences.dm --- code/modules/client/preferences.dm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0b65eddec7..509a4ce114 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2480,10 +2480,16 @@ GLOBAL_LIST_EMPTY(preferences_datums) if((!S.ckeys_allowed) || (S.ckeys_allowed.Find(user.client.ckey))) snowflake_markings_list[S.name] = path - var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) var/selected_marking = input(user, "Select the marking to apply to the limb.") as null|anything in snowflake_markings_list if(selected_marking) - features[marking_type] += list(list(limb_value, selected_marking)) + if(selected_limb != "All") + var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) + features[marking_type] += list(list(limb_value, selected_marking)) + else + var/datum/sprite_accessory/S = marking_list[selected_marking] + for(var/limb in S.covered_limbs) + var/limb_value = text2num(GLOB.bodypart_values[limb]) + features[marking_type] += list(list(limb_value, selected_marking)) if("marking_color") var/index = text2num(href_list["marking_index"]) From da7c1ddb0aa862fe4a624c4f0c39b46872879186 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Mon, 17 May 2021 19:04:51 +0100 Subject: [PATCH 63/63] bold statement for someone who didnt test their code --- code/modules/client/preferences.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 509a4ce114..251bcc72ad 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2486,7 +2486,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/limb_value = text2num(GLOB.bodypart_values[selected_limb]) features[marking_type] += list(list(limb_value, selected_marking)) else - var/datum/sprite_accessory/S = marking_list[selected_marking] + var/datum/sprite_accessory/mam_body_markings/S = marking_list[selected_marking] for(var/limb in S.covered_limbs) var/limb_value = text2num(GLOB.bodypart_values[limb]) features[marking_type] += list(list(limb_value, selected_marking))
[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]