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 001/108] 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 002/108] 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 003/108] 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 004/108] 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 005/108] 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 006/108] 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 007/108] 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 008/108] 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 009/108] 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 010/108] 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 011/108] 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 012/108] 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 013/108] 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 014/108] 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 015/108] 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 016/108] 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 017/108] 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 018/108] 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 019/108] 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 020/108] 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 021/108] 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 022/108] 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 023/108] 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 024/108] 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 025/108] 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 026/108] 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 027/108] 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 028/108] 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 029/108] 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 030/108] 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 031/108] 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 032/108] 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 033/108] 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 034/108] 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 035/108] 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 036/108] 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 037/108] 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 038/108] 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 039/108] 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 040/108] 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 041/108] 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 042/108] 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 043/108] 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 044/108] 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 045/108] 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 046/108] 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 047/108] 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 048/108] 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 049/108] 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 050/108] 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 051/108] 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 052/108] 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 053/108] 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 054/108] 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 055/108] 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 056/108] 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 057/108] 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 058/108] 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 059/108] 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 f52a89bc33f434c0549b537ed0d4157896956c33 Mon Sep 17 00:00:00 2001 From: zerothebigboy Date: Fri, 14 May 2021 05:20:19 -0400 Subject: [PATCH 060/108] chungus --- modular_citadel/icons/mob/mam_ears.dmi | Bin 10751 -> 10763 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi index 1ed3d8fbbe98dd3808dc6a5e0e86c1e08812b38c..a8209f25c5a9eb4e60aae2eb2e659753c1770d69 100644 GIT binary patch delta 8759 zcmY*;cU)5K|2}4=l_Oe~3$-VUhE|qaabPwasi`?Jb7Y2Q?s+IpDNF5f<*r=ie%#@z zCpU@%6&3duR9rYf;CuZ1o_~J)b9nLM+~?fyalNnWx;ZA1k4jD+0D2BTvf~l{CC9}z zs`OIpP&gOr`jMo|Lk_1t#FAt9YG2b{CKhnZ%Ma^2aVrnm#h1n&8NhtO=!xzSAfaU# zqw4~HJ-v9s&U#g5;qpI&6pjr&FL^HrbH~@bZe<%s&l{_-n*`m-jO@d3B zcU6xg-Cr<(U90V)3mjpf8iF{a@X}HKY_XDeoIYP}2&Tq)7GeyW)I-=-uE^u`;D`^{ z2#?@{uM){dZ`dT+aZbh87rxpqJTIOXo{OPLP5t>i+J*QaI$qHu^?5p!BJVCX%8;4M zu-}!KcVITKLUt+nN!-6`XG>Zwxn?fCLhdO#FGu$?$mkj1?$eU67&kGQp9H%h26;lp zozoCRH)Z#?z`Crr^P>@Gv>ub&xn>v(a|*OhuORbl4HhdtjB*@s8p;ud$_Bi^N9OSt z=gsFlS#0<96qmK~C6CN51GYPlz18%rm{NTkcWGjaqI0Q)=>gc@$U~Z6RG=y)pSt3C z@$sP&)m3mL-?#WsVBeq_Q*w;Rr0hsDVGc_M`V`C90lr znM0Y5b}nLqnW8!H{v`QwKklUWbh?kJ^wt7-3FB9NRhAXRIX|k*^sG&*aQe(+?JKys zrIrG=g1gvqb@GPa5RRNP)@-Z8$*9=eLdXUc;6kti>0G;TDfQ3yhha0RAFKnOl-G0ur`K8$-QRK>Z4s^_Rr zwZ#r)Y`4X3;!L!4HrFuF2w?D^n7RSzW4Gm2s;tC>sWd+~DcBb-%Xl+WSd1g$-8@ zv_?H!aS-Ci_@bSyhrgZs-iuzugDJc&W$=v?9dtrTym@q&osk`f(!UmXTI=o+T@*ol zhU%z`^0DIBUM&KO$rKey0J9X6kM&b@9{uxNZ8SyPFXH-f?ok!x$Q_60Ll^tkW%?(l zN^t#>4yndPiMR2~N4Xp#_T2FF^4XRPUGBvxa{SsmBP4Y7l`@G<>YvD_u9{V8DFNZG z?VOcNOHK|mr<`It&Tn_Sb0~T-DN2X>3`JKSkHIW}O zYZx_uzp7Uep~*0%viEARJ0{3Ik2@EwD#an;NC+3?y(fR{q@aE5_2Z`i!oe7i`~IoM zW0f7~8*yFAaXyd|D<5eL5-A$26!aWIpoXkTd*Xw!!1$XZROsN zOpCHTmSWVUm|d%2S`^6uwiEggu43gbamMUhQtHb!lKkF*I6g_;+*qa#52W)II?!me z>)2WPx=@+fO;TOGNJ-HiGj(cPAu%|{vmN@0%@$bR8{ZtoglnOPteymu^!-mlBb0LI zO8=yq$Q{&7v~4Uoa2NUd^)`|E(j(p2%`FrxnVN~7Ng)%UIn@0S^|4|5?#hRuDowR+ zF=V47QdEyWJliHGj#}9voJxKKo9)PZ+Jlp)qBhz10c|VFQ22B@)2huU3m>=fdoLiN zaJ>0)hUX=YbPWa$!beZ(KBry?*d4 z2vSD?-(uQf2;Y!m_DE33XHQE0waBIWDqp2BFBVIO7X**GFJ)8G#(wB@jQvw+DUh)H zqbIRQY6|^yl!e_1y3+uTg$5VZ@kngM$9dR`L7^7-Z01e_bS=dfPsrcm&jv{3F{4`w zzhTp=*&|LOx~6I^a$}x7%AZ@{pRe^vPUrxF-Xw2Z!r2}2%{-raQWX%DkKOUfBeb@bCCVSU zyUSXIHlS}y^pn@yENZK4qK(@xIxFCRUp^Sa4+a#~_!n=V2ouI*9hopNlvMd3ct*WT-!N+34D+&qy(a!V+Y+HeDVLI24bWoqu+ZgQP zxrmV3@$jubx`kt1`tBt9hWb|Ml6u0rgp52G9`)B>OPCSr*TmyocvgVG}yr}tKYK4K4 zeF)R(`uYI9)euNlh$vEf03RkJ z67xF{XRN;K+UW6gs10>qDtm;q{cH4w?28ZbO8_`?KA5ymEAc-rFG63STI!INf5M=; zCzHaqHh) zRT2s#(0qKV-fpNkzzfk3+2a$6{pW~lZ1<5Pz{;4s ztT>2Mo(AaKPS4PO3C2Y*ghghQK8i4BU2jnrLdJ{3s%t>9Mg;>SFfzwfs^`7On1m6S#F#H^A)m z8E_J_s+GvyRmwqq%iOsBfvtwo+Y++Ua+2s<4kxGMUezwFurg*+$C^9OeYB9w5`cAn zvEK?stFx+{+#0C)w=R;N?-H^eLClD_=B|b z05cKBUqK~52AnjGzKs!u0vpP{c>~%P5BG75`JQfNRxSj(G=0+yF;c9)MwfLpL4|i8 z_Az(ma%d=2NS>y#S7^qKHJTG@^mUwQxeJEnewS6dQP~%|SDQ(7r25ve8FeW%L|9Vz z;+EG?4meK7UawrrRy`B$W6(a-a1Qe4wgDWa)428qBX=K8(`^JMA#cv*4`qWBq53I^ z6PaaAljrSA*$V|7vygIa2$x+9_-kw#*6-w}JCUI}!r7wkQU-*u7@Nsce2`EgA1wD` ztRvpwHxikedZ*F0agjJ%CcXIpyzyakze^&P9@T!ry-5l?P%ANV!#!ML5Asx`Dl_cHt+D>!->%#ihe**TpV_X^qQv9DJy3_mJe zQKyKSdyC6_caOi>?Ql3OejkaNquhx%OWuK04I#BPJqM|MVe>;iKCdQP*%f3~W6k@_ zD&hH&s<)7TjlpKKMJ_ebjR?|?b|>jyYToy1esOQoZnbEi(BypWnRJ1Slad;6+0N+%A-If@F+EfH13kN zxC<`Ms_t?32jD!12#)=)0Ca`3tdy;nHL27mNEqt=joejBXmXT6a@(B_<($@28-%49 zq{Cz{1scaIA(Co~Xg`L?_G#B8{U9apH8bA0ghvx&+t8nI9X&2dk!6fj7B+81DA-g0 zVs&G#6PIkG}_prRk(1(rOJ;bZ3KYy>K5aU=S^zCOc=1BKx}49Vgd8B(QCEP0;|Ziv;CYC7hV>xA(G^3Wn_bXc_gq<=B=SHSVpc*C@xB;BS$H{mfS$ z2wlqw7!!R-)vUH1r`xF-z+rb9t2JzD`p!&jec#U4McqjS)GT~V3td-6sA8NDdaVp_ zT8lRY#6(1)IBA-FndM%L1E6^3czdoL1yE2caHBUH3I2*OnZ+5C5(&yh&-fRY=6ny7 z6oR9|6xkTk*faFkV-UHb>djf?6rSNNp_NEs}wVEe(a^I=zOX{M)O}rk2GhV=XID`^F&v_R}8)!)E(sn@V@(u z_}y(?|9l7g_&f%TLUaE#9;^8MvSO=}jT!zyT6pybY)~)j1^)7ueQyFj`vTVh_-tjC zvh=-a3M-B2LHJ?o%cxk@tVx!17`Si-9A%8NL22OoG~bp81p%yHp%T<55T6b=4xcYC zHxP}!Tcq@Q+v^{j!GSM-1=px?AAl@njiz(`B(L|WUGHgrXBNIH5n#EWwQUGVn=cGpop?=4GoTM~=KAaO>#l$-z_`7W zoD=U|NcE8k?2-f&meg6rsA5zDK}bkQj$~tPeN|M{&PoNiJ+u&T1z~`?DXw7cgH2Oeufs1g@8b?E69R( z18)Q#|L)5UM4KHpiIR~bz`AIFt`IagTB!E-VX*P(%xI9G-Z;Y0K6XA4J}Y!%Nd3ID zW&thuz!Nqcmcv`Pzh zpR1~$NTsvsJzpVO=8P2pOmv$L(ptZ=qTX3Md2$+9c(MLv`FLfgzqe!Os!{c=v#Z~=E z%K6G&QidY*DajQh@Us{$4;D}GFyIqzKSZ5>o90bDr2)y&>vG~fwfQ9AOGd~T-6heq zNNp$_a-jQ-(_N_9!oS~s^;ny)TV|mtCo~{V$ED7`QI~n)Mkwz%swSg#=#oSHb*Ykv z!<#zaFHq6b!65$_FMF9hYl`Fc90Pz4$!n>j)Fd(Kp&&)%JZ;!N8qFdVKBm~7(??#KO;Xav# zfDNZlu_h~K2Px83?QeEB1ghH9HvymPsS!E&X1lXck8Tsxm7XYP_^f&Vbi|Ew6Ewqk z7lFNE;bPY-5WcVc*O!T(4`S-IKor<>LDmjVshOp7`R}ef0!7ZZC@mmtbZltdwJMVU zXZA(t+V6sRrQFZMNA4i^PC>_YROFz+Btd9Ug)YZS1(I**^Mnm2LyM( z%cy9~+y`wrNSuHq(c4}5Wa)a>OX{y1b+rP*_yqLRm5K3MlvzjwH3HlAh4Zp`eNp1! zzXi&$W+qT3h5pX7?#~U_8G7H5G7kBxu3Z3suQST?rZ^1M)Ac z#O70zHD~f#DsPb=R=JLD4>DxG$~$Wh@AczV%ZdsWJCuS+-c8&;GHP4~ZVN#-xIK=P zQPigRmAt#6D%BQbcR#JDQkK$d>)AGyM683p?#2WA|GrbeXML0+xyk z9m3JH=G47YuX}&b>Y(7lSj-zIU6XkL`@-@aRZVID)<_oLWER1sq;pl1NoJegl7J1I7Tf8pk)vY1NHD{(b-w1hYrBb*;ESYW((f#pMmrz+r0mz& zpEc4%yl3%vZhx41{Gc6f%;HZA|7euF^fJoRmf=r=*Ic1%6T2CY6PMc>y5J!I!avBU z|D-uIG1^2OBn3Hf(@V;JqL0uoH~(BVCb)XX<5mlz>Yv$IG4cS$gFGIV<`QNKcdcyr zX9fOw%f`0=byr<;+CfBNI;^}}ZmA~ZnXq~A@@0mgB#7`K^qmq7t6l|o1|scXlrjeN zPcq9c7yJ?)P&*WB&;C;R4A@^7(dnm}^$~5BV(EfXE77$UT-mrqQb1MV!B@SMZJl8= zh^=FgftyaW)jY>V{0b!;i~SjjZhL(_JIJD-bXMm4`yjUR3)Kg3lqtSwigEYR*{@-X zNzrI0t%SodL8(N|^bxR&OY=5gUH0p9-0(0+k$+CCjC-{1sgPZU&6v9yA!B1!wfNf2 z`p_GxuV3=0YZmX?%{F!l^mvszl={b6f1X8~dksbj zI17`uayp#d2|*xG^jBe1_ef~8D!Y~S@jDjxlI1wQ+hSUZ?O?8A$Ez^GNlgyQ~z zmAq8Cmv8eG2!vBTFbeV?0Ff z@Yl+HZ?WSCzzZ@|!}C*LX1A7g8Ufa;^__8(_A;&3D)_9gW4&A1R$GHJdjE*&56qCo z)J_DeIDfFdxX_!wH8z!)|Cw*I^EcZfb0e|004Q_o%3qM?OH)q^dmmfYw&9+u?#`-} zIUm%W6QEtJu;tGxmLclwfCK;vy_g&Onq3-!4oL_7_kCim?DEu{U3l~iky*poZKx1c zoja%Bk6?-7Zn=H%C0n{4&RR5`UJKEa|JPVfl3pR+DTX#LgVCb4@?=@DO0(+ksKCUH zzVk>Q!_mY$S2i1HIkv?3SR$4fiw%{zVxcYe0k`f?SR5Bhwe|noGtZE?$0S7>5?@SR zpD$n7YzKL7Kk-&~cz!c$@(itP3mi9~HPJj0eN#@d>|fnSXv*a<R0nzZJYc7~RITUCB(T0BO}q5kokp;p4ptccx{e zJ{WXR95&oR3Xw37(N$j!OuQ=l&kVb!sVTsy>WAC;>p@QY#%RZXXL6!|uX~CR$lam) z_PkFr_b+8I0aeho%Tl1L9WAyT-Eeo`9QlK-hHWulxaUJo+*n-wWIS;0by1L!*b=fs z+zw<+17LtFv{)b`w|yExtKkV~xK_BH9LP1Kn_P6T$4n!~oBtb*mvJ~bL1og-`9 z-VoV#wUvcEt~JT@v zXNw9CfO2JVbI~C*>jMmAcrXNWsf@EwBSuu;{{m7z82g|6ZGgFjZe0JZWszQ-BDGbil{OI_*G;FAzWl{dUvu z*UFu#sNbM!7Ra{};kW;RVC`*mLH{WC5=>LreWr)DY2$`n83@$lx!sL<4-T7Uz<4rF zH~Haoj>5Gat&|(!^X(C^pXI?ZpU8)hUU>8K zvi#V4y8vgYtc&f8fIT?u86NFS0TiAo4fah-VAi#~=b%BqHun|W_ z$CT{X1K01S*b*l#V@43ynlEF5UT_3%b#RCJsj3#+`cFaU6fs88@x;@b?t*eZ@8)2KJrneD=%1Q zj^{QYvqYD-8sc8Hf82KWWWEtk;(Aj5yd_}m34OB*s+6s|v2Z0jl|6EanRv*N^d0f- zD6F3~`G(;hmyZJ6rNd-Q$#?e}u#qUkGipUztpluv5RNDmVdHKU%^B(4I;1AY{jWVt zZ$;phflxzwSj=`*Jy@O8dq3x>m8KEz|4@RR31PSXZTa}B`=8BuKOuGSk334b%9qL) zr~WiEIRVDb3{NIqbOM<8`OLOeT_M=na{)_+#!$ACEFvFH_^ zZ@BbJ4@oz@k6UhyzM$O9uDw?>xamy?;;;A5(ym`Yn?{+-#3}2KV^Xa z$*08{Hu=>c@7#LYTUj{{5Rdl^ylBml)Y^fZtxV&U=+p#0$?(`izNm!?N_4KS+20!y zGLjDKLoZInwcz$$fce81n;ScjUOpK9@ZOwV?UGlgbTTP~@6!+r;?p$2-I_zP;G1Od zLF_8ic20L(%C03WMtS3l$q88TC#fMW!q00klj~Q`GRjYK9mH%Mk=S%u&9#GI$hxt= gB<23*lRCpjtk9E8`geHUAmHbojsdbr%kItp0l2jm9smFU delta 8738 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 From 739b7cea261b552275776b94b52e91bb375e1878 Mon Sep 17 00:00:00 2001 From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com> Date: Fri, 14 May 2021 16:47:40 +0100 Subject: [PATCH 061/108] borg spraycans have a five second delay before being able to knock someone down again (#14627) * Update crayons.dm * Update crayons.dm * kevin review changes * Update crayons.dm * Update code/game/objects/items/crayons.dm Co-authored-by: DeltaFire <46569814+DeltaFire15@users.noreply.github.com> --- code/game/objects/items/crayons.dm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index e584cad9e8..aa48930d6c 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -649,6 +649,9 @@ pre_noise = TRUE post_noise = FALSE + var/stun_delay = 0 // how long it takes for you to be able to stun someone with the spraycan again + var/last_stun_time = 0 + /obj/item/toy/crayon/spraycan/isValidSurface(surface) return (istype(surface, /turf/open/floor) || istype(surface, /turf/closed/wall)) @@ -716,7 +719,8 @@ if(C.client) C.blur_eyes(3) C.blind_eyes(1) - if(C.get_eye_protection() <= 0) // no eye protection? ARGH IT BURNS. + if(C.get_eye_protection() <= 0 && (last_stun_time + stun_delay) <= world.time) // no eye protection? ARGH IT BURNS. + last_stun_time = world.time C.confused = max(C.confused, 3) C.DefaultCombatKnockdown(60) if(ishuman(C) && actually_paints) @@ -771,6 +775,7 @@ name = "cyborg spraycan" desc = "A metallic container containing shiny synthesised paint." charges = -1 + stun_delay = 5 SECONDS /obj/item/toy/crayon/spraycan/borg/draw_on(atom/target,mob/user,proximity, params) var/diff = ..() From a3c98920811507494d5a71accdcd6f0d5168b0a1 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 14 May 2021 10:47:42 -0500 Subject: [PATCH 062/108] Automatic changelog generation for PR #14627 [ci skip] --- html/changelogs/AutoChangeLog-pr-14627.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14627.yml diff --git a/html/changelogs/AutoChangeLog-pr-14627.yml b/html/changelogs/AutoChangeLog-pr-14627.yml new file mode 100644 index 0000000000..cde6b62174 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14627.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - balance: "borg spraycans have a five second delay before being able to knock someone down again" From 4ffec1dafa93364c758556cfa3ef3c13169e04a5 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Fri, 14 May 2021 09:50:27 -0600 Subject: [PATCH 063/108] Update gateway.dm (#14711) --- code/modules/awaymissions/gateway.dm | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 36ceabe3b4..551c1c5536 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -172,13 +172,15 @@ GLOBAL_LIST_EMPTY(gateway_destinations) /// bumper object, the thing that starts actual teleport var/obj/effect/gateway_portal_bumper/portal /// Visual object for handling the viscontents - var/obj/effect/gateway_portal_effect/portal_visuals + /// DISABLED DUE TO BYOND BUG CAUSING STACK OVERFLOWS OF ANY HUMAN INSTANTIATION NEAR AN ACTIVATED GATEWAY. + /// Probably due to it referencing each other through the gateway (there's a deep loop, maybe BYOND isn't catching something when it usually would) + // var/obj/effect/gateway_portal_effect/portal_visuals /obj/machinery/gateway/Initialize() generate_destination() update_icon() - portal_visuals = new - vis_contents += portal_visuals + // portal_visuals = new + // vis_contents += portal_visuals return ..() /obj/machinery/gateway/proc/generate_destination() @@ -195,7 +197,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) if(use_power == ACTIVE_POWER_USE) use_power = IDLE_POWER_USE update_icon() - portal_visuals.reset_visuals() + // portal_visuals.reset_visuals() /obj/machinery/gateway/process() if((stat & (NOPOWER)) && use_power) @@ -215,7 +217,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) return target = D target.activate(destination) - portal_visuals.setup_visuals(target) + // portal_visuals.setup_visuals(target) generate_bumper() use_power = ACTIVE_POWER_USE update_icon() From 97685de715db9b5a193e1dc6512e00a9b00a32d5 Mon Sep 17 00:00:00 2001 From: bunny232 Date: Fri, 14 May 2021 14:54:37 -0400 Subject: [PATCH 064/108] Update MetaStation.dmm --- _maps/map_files/MetaStation/MetaStation.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 216b2a3db7..35e15c4179 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -21712,7 +21712,7 @@ icon_state = "1-2" }, /obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=13.3-Engineering-Central"; + codes_txt = "patrol;next_patrol=14-Starboard-Central"; location = "13.2-Tcommstore" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, From e01908742aae98c26232ff396a535ff024dcae54 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Fri, 14 May 2021 17:31:51 -0500 Subject: [PATCH 065/108] Automatic changelog generation for PR #14721 [ci skip] --- html/changelogs/AutoChangeLog-pr-14721.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14721.yml diff --git a/html/changelogs/AutoChangeLog-pr-14721.yml b/html/changelogs/AutoChangeLog-pr-14721.yml new file mode 100644 index 0000000000..fbfa2cbd33 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14721.yml @@ -0,0 +1,4 @@ +author: "bunny232" +delete-after: True +changes: + - bugfix: "Corrects the bot pathing by engineering on meta station" From 3d1bbd6229cc3a7ee1484dbe299ef80c57c53df9 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 15 May 2021 00:27:18 +0000 Subject: [PATCH 066/108] Automatic changelog compile [ci skip] --- html/changelog.html | 10 ++++++++++ html/changelogs/.all_changelog.yml | 6 ++++++ html/changelogs/AutoChangeLog-pr-14627.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14721.yml | 4 ---- 4 files changed, 16 insertions(+), 8 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14627.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14721.yml diff --git a/html/changelog.html b/html/changelog.html index 7e3f24bf3b..64549ad33b 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,16 @@ -->
+

15 May 2021

+

bunny232 updated:

+
    +
  • Corrects the bot pathing by engineering on meta station
  • +
+

timothyteakettle updated:

+
    +
  • borg spraycans have a five second delay before being able to knock someone down again
  • +
+

14 May 2021

keronshb updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index ca2426d1f0..7cdad77414 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29301,3 +29301,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - balance: Removes VOG sleep command since it was an undocumented readd. zeroisthebiggay: - spellcheck: consealed +2021-05-15: + bunny232: + - bugfix: Corrects the bot pathing by engineering on meta station + timothyteakettle: + - balance: borg spraycans have a five second delay before being able to knock someone + down again diff --git a/html/changelogs/AutoChangeLog-pr-14627.yml b/html/changelogs/AutoChangeLog-pr-14627.yml deleted file mode 100644 index cde6b62174..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14627.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - balance: "borg spraycans have a five second delay before being able to knock someone down again" diff --git a/html/changelogs/AutoChangeLog-pr-14721.yml b/html/changelogs/AutoChangeLog-pr-14721.yml deleted file mode 100644 index fbfa2cbd33..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14721.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "bunny232" -delete-after: True -changes: - - bugfix: "Corrects the bot pathing by engineering on meta station" From a2cd960e20fa721495bddb9b8680c65c72861746 Mon Sep 17 00:00:00 2001 From: bunny232 Date: Sat, 15 May 2021 00:34:54 -0400 Subject: [PATCH 067/108] Update MetaStation.dmm --- _maps/map_files/MetaStation/MetaStation.dmm | 4 ---- 1 file changed, 4 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 35e15c4179..93c625b238 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -16060,10 +16060,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=14-Starboard-Central"; - location = "13.3-Engineering-Central" - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, From e06b354613afc01ec771b960cf3065970e9fc87a Mon Sep 17 00:00:00 2001 From: zerothebigboy Date: Sat, 15 May 2021 06:58:20 -0400 Subject: [PATCH 068/108] sex!!!!!!!!!! --- code/controllers/subsystem/ticker.dm | 3 ++- sound/roundend/approachingbaystation.ogg | Bin 0 -> 38089 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 sound/roundend/approachingbaystation.ogg diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 58238247ff..a06ef3f03b 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -713,7 +713,8 @@ SUBSYSTEM_DEF(ticker) 'sound/roundend/disappointed.ogg', 'sound/roundend/gondolabridge.ogg', 'sound/roundend/haveabeautifultime.ogg', - 'sound/roundend/CitadelStationHasSeenBetterDays.ogg'\ + 'sound/roundend/CitadelStationHasSeenBetterDays.ogg', + 'sound/roundend/approachingbaystation'\ ) SEND_SOUND(world, sound(round_end_sound)) diff --git a/sound/roundend/approachingbaystation.ogg b/sound/roundend/approachingbaystation.ogg new file mode 100644 index 0000000000000000000000000000000000000000..83f5f6aae7069fd0426dc508bbeb6b54129f0fb5 GIT binary patch literal 38089 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 Date: Sat, 15 May 2021 08:35:46 -0400 Subject: [PATCH 069/108] Update ticker.dm --- code/controllers/subsystem/ticker.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a06ef3f03b..a7a3e87672 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -714,7 +714,7 @@ SUBSYSTEM_DEF(ticker) 'sound/roundend/gondolabridge.ogg', 'sound/roundend/haveabeautifultime.ogg', 'sound/roundend/CitadelStationHasSeenBetterDays.ogg', - 'sound/roundend/approachingbaystation'\ + 'sound/roundend/approachingbaystation.ogg'\ ) SEND_SOUND(world, sound(round_end_sound)) From 37873d6750d1596778630b5bc3bc7f7d0565dfda Mon Sep 17 00:00:00 2001 From: zerothebigboy Date: Sat, 15 May 2021 08:52:24 -0400 Subject: [PATCH 070/108] gommit --- .../food_and_drinks/drinks/drinks/bottle.dm | 13 ++++ .../food_and_drinks/recipes/drinks_recipes.dm | 16 +++++ .../chemistry/reagents/alcohol_reagents.dm | 56 ++++++++++++++++++ code/modules/vending/boozeomat.dm | 1 + icons/obj/drinks.dmi | Bin 117952 -> 120157 bytes 5 files changed, 86 insertions(+) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index e31a9704df..7377913c15 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -305,6 +305,15 @@ /obj/item/reagent_containers/food/drinks/bottle/hcider/empty list_reagents = null +/obj/item/reagent_containers/food/drinks/bottle/amaretto + name = "Luini Amaretto" + desc = "A gentle and syrup-like drink that tastes of almonds and apricots." + icon_state = "disaronno" + list_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 100) + +/obj/item/reagent_containers/food/drinks/bottle/amaretto/empty + list_reagents = null + /obj/item/reagent_containers/food/drinks/bottle/grappa name = "Phillipes well-aged Grappa" desc = "Bottle of Grappa." @@ -615,6 +624,10 @@ icon_state = "hcider" name = "Sealed Cider" +/obj/item/export/bottle/amaretto + icon_state = "disaronno" + name = "Sealed Amaretto" + /obj/item/export/bottle/cognac icon_state = "cognacbottle" name = "Sealed Cognac" diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 943f421a64..1f306c47f0 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -899,6 +899,22 @@ required_reagents = list(/datum/reagent/consumable/ethanol/alliescocktail = 50, /datum/reagent/consumable/ethanol/champagne = 20, /datum/reagent/consumable/doctor_delight = 10, /datum/reagent/consumable/ethanol/quintuple_sec = 10, /datum/reagent/consumable/ethanol/screwdrivercocktail = 10) mix_message = "When your powers combine, I am Captain Pl-..." +/datum/chemical_reaction/godfather + results = list(/datum/reagent/consumable/ethanol/godfather = 2) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/whiskey = 1) + +/datum/chemical_reaction/godmother + results = list(/datum/reagent/consumable/ethanol/godmother = 2) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/vodka = 1) + +/datum/chemical_reaction/amaretto_alexander + results = list(/datum/reagent/consumable/ethanol/amaretto_alexander = 3) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/ethanol/creme_de_cacao = 1, /datum/reagent/consumable/cream = 1) + +/datum/chemical_reaction/ginger_amaretto + results = list(/datum/reagent/consumable/ethanol/ginger_amaretto = 4) + required_reagents = list(/datum/reagent/consumable/ethanol/amaretto = 1, /datum/reagent/consumable/sol_dry = 1, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/lemonjuice = 1) + ////////////////////////////////////////// Tea Base Drinks ////////////////////////////////////// /datum/chemical_reaction/mush diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index f53ac7ac40..2882a85b5e 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -360,6 +360,18 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." pH = 3.5 +/datum/reagent/consumable/ethanol/amaretto + name = "Amaretto" + description = "A gentle drink that carries a sweet aroma." + color = "#E17600" + boozepwr = 25 + taste_description = "fruity and nutty sweetness" + glass_icon_state = "amarettoglass" + shot_glass_icon_state = "shotglassgold" + glass_name = "glass of amaretto" + glass_desc = "A sweet and syrupy-looking drink." + pH = 3.5 + /datum/reagent/consumable/ethanol/cognac name = "Cognac" description = "A sweet and strongly alcoholic drink, made after numerous distillations and years of maturing. Classy as fornication." @@ -1790,6 +1802,50 @@ All effects don't start immediately, but rather get worse over time; the rate is to_chat(L,"You notice [mighty_shield] looks worn again. Weird.") ..() +/datum/reagent/consumable/ethanol/amaretto_alexander + name = "Amaretto Alexander" + description = "A weaker version of the Alexander, what it lacks in strength it makes up for in flavor." + color = "#DBD5AE" + boozepwr = 35 + quality = DRINK_VERYGOOD + taste_description = "sweet, creamy cacao" + glass_icon_state = "alexanderam" + glass_name = "Amaretto Alexander" + glass_desc = "A creamy, indulgent delight that is in fact as gentle as it seems." + +/datum/reagent/consumable/ethanol/ginger_amaretto + name = "Ginger Amaretto" + description = "A delightfully simple cocktail that pleases the senses." + boozepwr = 30 + color = "#EFB42A" + quality = DRINK_GOOD + taste_description = "sweetness followed by a soft sourness and warmth" + glass_icon_state = "gingeramaretto" + glass_name = "Ginger Amaretto" + glass_desc = "The sprig of rosemary adds a nice aroma to the drink, and isn't just to be pretentious afterall!" + +/datum/reagent/consumable/ethanol/godfather + name = "Godfather" + description = "A rough cocktail with illegal connections." + boozepwr = 50 + color = "#E68F00" + quality = DRINK_GOOD + taste_description = "a delightful softened punch" + glass_icon_state = "godfather" + glass_name = "Godfather" + glass_desc = "A classic from old Italy and enjoyed by gangsters, pray the orange peel doesnt end up in your mouth." + +/datum/reagent/consumable/ethanol/godmother + name = "Godmother" + description = "A twist on a classic, liked more by mature women." + boozepwr = 50 + color = "#E68F00" + quality = DRINK_GOOD + taste_description = "sweetness and a zesty twist" + glass_icon_state = "godmother" + glass_name = "Godmother" + glass_desc = "A lovely fresh-smelling cocktail, a true Sicilian delight." + /datum/reagent/consumable/ethanol/sidecar name = "Sidecar" description = "The one ride you'll gladly give up the wheel for." diff --git a/code/modules/vending/boozeomat.dm b/code/modules/vending/boozeomat.dm index 97efbecb77..5ec0987111 100644 --- a/code/modules/vending/boozeomat.dm +++ b/code/modules/vending/boozeomat.dm @@ -18,6 +18,7 @@ /obj/item/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/reagent_containers/food/drinks/bottle/grappa = 5, /obj/item/reagent_containers/food/drinks/bottle/sake = 5, + /obj/item/reagent_containers/food/drinks/bottle/amaretto = 5, /obj/item/reagent_containers/food/drinks/ale = 6, /obj/item/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/reagent_containers/food/drinks/bottle/tomatojuice = 4, diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 1c3b10b9decf52895e4920824b1ab1ee6fbe97cd..b7f21a1fe47536606bf11a2b3d38ccbfbfd3599f 100644 GIT binary patch delta 24347 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 delta 22125 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 Date: Sat, 15 May 2021 09:39:56 -0400 Subject: [PATCH 071/108] Update drinks_recipes.dm --- .../food_and_drinks/recipes/drinks_recipes.dm | 30 +++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 943f421a64..e774387cfb 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -601,7 +601,7 @@ id = /datum/reagent/consumable/ethanol/cogchamp results = list(/datum/reagent/consumable/ethanol/cogchamp = 3) required_reagents = list(/datum/reagent/consumable/ethanol/cognac = 1, /datum/reagent/fuel = 1, /datum/reagent/consumable/ethanol/screwdrivercocktail = 1) - mix_message = "You hear faint sounds of gears turning as it mixes." + mix_message = "You hear faint sounds of gears turning as the mixture gives off virulent plumes of steam." mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg' /datum/chemical_reaction/pinotmort @@ -744,18 +744,21 @@ id = /datum/reagent/consumable/pwr_game results = list(/datum/reagent/consumable/pwr_game = 5) required_reagents = list(/datum/reagent/consumable/sodawater = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1, /datum/reagent/consumable/sodiumchloride = 1) + mix_message = "The mixture froths as it turns black, rousing a nauseating aroma of sweat and salt before settling to an eerie purple color. /datum/chemical_reaction/pinkmilk name = "Strawberry Milk" id = /datum/reagent/consumable/pinkmilk results = list(/datum/reagent/consumable/pinkmilk = 2) required_reagents = list(/datum/reagent/consumable/strawberryjuice = 1, /datum/reagent/consumable/milk = 1) + mix_message = "You feel a sweet aroma drift up your nose as the lactic mixture swirls. It reminds you of... a cafeteria." /datum/chemical_reaction/blank_paper name = "Blank Paper" id = /datum/reagent/consumable/ethanol/blank_paper results = list(/datum/reagent/consumable/ethanol/blank_paper = 3) required_reagents = list(/datum/reagent/consumable/ethanol/silencer = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nuka_cola = 1) + mix_message = "..." /datum/chemical_reaction/wizz_fizz name = "Wizz Fizz" @@ -785,18 +788,21 @@ id = /datum/reagent/consumable/ethanol/turbo results = list(/datum/reagent/consumable/ethanol/turbo = 5) required_reagents = list(/datum/reagent/consumable/ethanol/moonshine = 2, /datum/reagent/nitrous_oxide = 1, /datum/reagent/consumable/ethanol/sugar_rush = 1, /datum/reagent/consumable/pwr_game = 1) + mix_message = "The mixture pops and fizzles, it's going to bl- oh, nevermind." /datum/chemical_reaction/old_timer name = "Old Timer" id = /datum/reagent/consumable/ethanol/old_timer results = list(/datum/reagent/consumable/ethanol/old_timer = 6) required_reagents = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3, /datum/reagent/consumable/parsnipjuice = 2, /datum/reagent/consumable/ethanol/alexander = 1) + mix_message = "You hear a faded record playing in the distance. Then, you hear nothing." /datum/chemical_reaction/rubberneck name = "Rubberneck" id = /datum/reagent/consumable/ethanol/rubberneck results = list(/datum/reagent/consumable/ethanol/rubberneck = 10) required_reagents = list(/datum/reagent/consumable/ethanol = 4, /datum/reagent/consumable/grey_bull = 5, /datum/reagent/consumable/astrotame = 1) + mix_message = "The mixture boils and bubbles as the faint scent of rubber and heart disease hits your nose." /datum/chemical_reaction/duplex name = "Duplex" @@ -809,6 +815,7 @@ id = /datum/reagent/consumable/ethanol/trappist results = list(/datum/reagent/consumable/ethanol/trappist = 5) required_reagents = list(/datum/reagent/consumable/ethanol/ale = 2, /datum/reagent/water/holywater = 2, /datum/reagent/consumable/sugar = 1) + mix_message = "As the mixture froths, you swear you can hear a distant holy choir." /datum/chemical_reaction/cream_soda name = "Cream Soda" @@ -821,6 +828,7 @@ id = /datum/reagent/consumable/ethanol/blazaam results = list(/datum/reagent/consumable/ethanol/blazaam = 3) required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/peachjuice = 1, /datum/reagent/bluespace = 1) + mix_message = "The mixture- hey, where'd all the liquid go? Oh, there it is." /datum/chemical_reaction/planet_cracker name = "Planet Cracker" @@ -861,6 +869,7 @@ id = /datum/reagent/consumable/ethanol/strawberry_daiquiri results = list(/datum/reagent/consumable/ethanol/strawberry_daiquiri = 7) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/sugar = 1, /datum/reagent/consumable/strawberryjuice = 2, /datum/reagent/consumable/ice = 1) + mix_message = "The mixture settles as a nostril-flaring waft of strawberry hits your nose." /datum/chemical_reaction/miami_vice name = "Miami Vice" @@ -879,18 +888,21 @@ id = /datum/reagent/consumable/ethanol/liz_fizz results = list(/datum/reagent/consumable/ethanol/liz_fizz = 5) required_reagents = list(/datum/reagent/consumable/triple_citrus = 3, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/cream = 1) + mix_message = "The smell of cream and lime hits your nose as everything feels very real for a split moment. You want to lick your eye." /datum/chemical_reaction/hotlime_miami name = "Hotlime Miami" id = /datum/reagent/consumable/ethanol/hotlime_miami results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2) required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/consumable/ethanol/pina_colada = 1) + mix_message = "You hear synthwave in the distance as the drink mixes; this makes you want to hit someone with a baseball bat." /datum/chemical_reaction/mauna_loa name = "Mauna Loa" id = /datum/reagent/consumable/ethanol/mauna_loa results = list(/datum/reagent/consumable/ethanol/mauna_loa = 5) required_reagents = list(/datum/reagent/consumable/capsaicin = 2, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/bahama_mama = 2) + mix_message = "The drink erupts as a plume of lava sprays all over the place! Oh, wait, it's just luke-warm liquor." /datum/chemical_reaction/commander_and_chief name = "Commander and Chief" @@ -906,6 +918,7 @@ id = /datum/reagent/consumable/tea/mush results = list(/datum/reagent/consumable/tea/mush = 3) required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 3, /datum/reagent/consumable/tea = 3) + mix_message = "The liquid stirs with a mixture of psychedelic colors that makes stars peek from the corner of your vision." /datum/chemical_reaction/foresttea1 name = "Forest Tea" @@ -967,7 +980,7 @@ id = /datum/reagent/consumable/catnip_tea results = list(/datum/reagent/consumable/catnip_tea = 3) required_reagents = list(/datum/reagent/consumable/tea = 5, /datum/reagent/pax/catnip = 2) - + mix_message = "The mixture seems to purr aloud as it stirs together." ////////////////////////////////////////// Race Base Drinks ////////////////////////////////////// @@ -976,54 +989,64 @@ id = /datum/reagent/consumable/ethanol/species_drink/coldscales results = list(/datum/reagent/consumable/ethanol/species_drink/coldscales = 3) required_reagents = list(/datum/reagent/consumable/tea = 1, /datum/reagent/toxin/slimejelly = 1, /datum/reagent/consumable/menthol = 1) + mix_message = "Bubbles erupt from the glass and spill all over the place as it mixes, before settling with the faint smell of a reptile enclosure." /datum/chemical_reaction/oil_drum name = "Oil Drum" id = /datum/reagent/consumable/ethanol/species_drink/oil_drum results = list(/datum/reagent/consumable/ethanol/species_drink/oil_drum = 3) required_reagents = list(/datum/reagent/consumable/ethanol = 1, /datum/reagent/oil = 1, /datum/reagent/consumable/ethanol/champagne = 12) + mix_message = "You can taste oil in your mouth as the newly-formed mixture floats to the top of the glass." /datum/chemical_reaction/nord_king name = "Nord King" id = /datum/reagent/consumable/ethanol/species_drink/nord_king results = list(/datum/reagent/consumable/ethanol/species_drink/nord_king = 10) required_reagents = list(/datum/reagent/consumable/ethanol = 5, /datum/reagent/consumable/honey = 1, /datum/reagent/consumable/ethanol/red_mead = 10) + mix_message = "You can feel hair growing on places it shouldn't be as the smell of salt water and flame burns into your senses." /datum/chemical_reaction/velvet_kiss name = "Velvet Kiss" id = /datum/reagent/consumable/ethanol/species_drink/velvet_kiss results = list(/datum/reagent/consumable/ethanol/species_drink/velvet_kiss = 15) //Limited races use this required_reagents = list(/datum/reagent/blood = 5, /datum/reagent/consumable/tea = 1, /datum/reagent/consumable/ethanol/wine = 10) + mix_message = "The taste of blood rolls off your tongue as the mixture oozes a crimson secretion." /datum/chemical_reaction/abduction_fruit name = "Abduction Fruit" id = /datum/reagent/consumable/ethanol/species_drink/abduction_fruit results = list(/datum/reagent/consumable/ethanol/species_drink/abduction_fruit = 3) required_reagents = list(/datum/reagent/consumable/limejuice = 10, /datum/reagent/consumable/strawberryjuice = 5, /datum/reagent/consumable/watermelonjuice = 10) + mix_message = "The mixture forms with a green cloud of smoke, carrying with a smell of bovines and medicine." /datum/chemical_reaction/bug_zapper name = "Bug Zapper" id = /datum/reagent/consumable/ethanol/species_drink/bug_zapper results = list(/datum/reagent/consumable/ethanol/species_drink/bug_zapper = 20) //Harder to make required_reagents = list(/datum/reagent/consumable/lemonjuice = 10, /datum/reagent/teslium = 1, /datum/reagent/copper = 10) + mix_message = "The mixture comes to life with a spark and a zap - shortly after, you can hear the faint buzzing of moths circling your head." + mix_sound = 'sound/weapons/taser.ogg' /datum/chemical_reaction/mush_crush name = "Mush Crush" id = /datum/reagent/consumable/ethanol/species_drink/mush_crush results = list(/datum/reagent/consumable/ethanol/species_drink/mush_crush = 10) required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/ash = 5, /datum/reagent/toxin/coffeepowder = 10) + mix_message = "The mixture sputters and coughs as a mushroom suddenly emerges from the glass!" /datum/chemical_reaction/darkbrew name = "Darkbrew" id = /datum/reagent/consumable/ethanol/species_drink/darkbrew results = list(/datum/reagent/consumable/ethanol/species_drink/darkbrew = 20)//Limited races use this required_reagents = list(/datum/reagent/liquid_dark_matter = 5, /datum/reagent/toxin/bungotoxin = 5, /datum/reagent/toxin/coffeepowder = 10) + mix_message = "As the glass turns into a shadowy pit, you can smell... nothing." /datum/chemical_reaction/hollow_bone name = "Hollow Bone" id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10) required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10) + mix_message = "Your bones feel week." /datum/chemical_reaction/frisky_kitty name = "Frisky Kitty" @@ -1031,6 +1054,7 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/frisky_kitty = 2) required_reagents = list(/datum/reagent/consumable/catnip_tea = 1, /datum/reagent/consumable/milk = 1) required_temp = 296 //Just above room temp (22.85'C) + mix_message = "The drink bubbles over the rim as it settles, and the smell of wet fur and felines makes it feel like you're in heat." /datum/chemical_reaction/jell_wyrm name = "Jell Wyrm" @@ -1038,6 +1062,7 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/jell_wyrm = 2) required_reagents = list(/datum/reagent/toxin/slimejelly = 1, /datum/reagent/toxin/carpotoxin = 1, /datum/reagent/carbondioxide = 5) required_temp = 333 // (59.85'C) + mix_message = "The smell of toxins scrunches your nose as your limbs grow limp and feel like jelly." /datum/chemical_reaction/laval_spit name = "Laval Spit" @@ -1045,3 +1070,4 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/laval_spit = 20) //Limited use required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/ethanol/mauna_loa = 10, /datum/reagent/sulfur = 5) required_temp = 900 // (626.85'C) + mix_message = "The room grows warm as burning rock rockets over the edge of the drink before settling." From 1ff27aa732807e9651d8da91d0f89dea08a8abd5 Mon Sep 17 00:00:00 2001 From: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com> Date: Sat, 15 May 2021 09:43:55 -0400 Subject: [PATCH 072/108] Update drinks_recipes.dm --- code/modules/food_and_drinks/recipes/drinks_recipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index e774387cfb..5bcb64f764 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -1046,7 +1046,7 @@ id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10) required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10) - mix_message = "Your bones feel week." + mix_message = "Your bones feel weak." /datum/chemical_reaction/frisky_kitty name = "Frisky Kitty" From 8166167a4598454eb3b420394a8d5d339aa65a8b Mon Sep 17 00:00:00 2001 From: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com> Date: Sat, 15 May 2021 09:44:21 -0400 Subject: [PATCH 073/108] Update drinks_recipes.dm --- code/modules/food_and_drinks/recipes/drinks_recipes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 5bcb64f764..3a7c2827eb 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -744,7 +744,7 @@ id = /datum/reagent/consumable/pwr_game results = list(/datum/reagent/consumable/pwr_game = 5) required_reagents = list(/datum/reagent/consumable/sodawater = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1, /datum/reagent/consumable/sodiumchloride = 1) - mix_message = "The mixture froths as it turns black, rousing a nauseating aroma of sweat and salt before settling to an eerie purple color. + mix_message = "The mixture froths as it turns black, rousing a nauseating aroma of sweat and salt before settling to an eerie purple color." /datum/chemical_reaction/pinkmilk name = "Strawberry Milk" From 2bc5edede058b96f769495fef249488cc0a1be97 Mon Sep 17 00:00:00 2001 From: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com> Date: Sat, 15 May 2021 09:51:48 -0400 Subject: [PATCH 074/108] Update drinks_recipes.dm --- .../modules/food_and_drinks/recipes/drinks_recipes.dm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 3a7c2827eb..708fcd6bcf 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -447,6 +447,7 @@ id = /datum/reagent/consumable/ethanol/syndicatebomb results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2) required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1) + mix_message = "You can hear beeping coming from behind you." /datum/chemical_reaction/erikasurprise name = "Erika Surprise" @@ -459,24 +460,28 @@ id = /datum/reagent/consumable/ethanol/devilskiss results = list(/datum/reagent/consumable/ethanol/devilskiss = 3) required_reagents = list(/datum/reagent/blood = 1, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/rum = 1) + mix_message = "You can hear faint whispering in your ear and a burning on your cheeks as the mixture blends together into with a fiery swirl." /datum/chemical_reaction/hippiesdelight name = "Hippies Delight" id = /datum/reagent/consumable/ethanol/hippies_delight results = list(/datum/reagent/consumable/ethanol/hippies_delight = 2) required_reagents = list(/datum/reagent/drug/mushroomhallucinogen = 1, /datum/reagent/consumable/ethanol/gargle_blaster = 1) + mix_message = "You can like... Smell the flowers, man - as the drink mixes." /datum/chemical_reaction/bananahonk name = "Banana Honk" id = /datum/reagent/consumable/ethanol/bananahonk results = list(/datum/reagent/consumable/ethanol/bananahonk = 2) required_reagents = list(/datum/reagent/consumable/laughter = 1, /datum/reagent/consumable/cream = 1) + mix_message = "The mixture honks. Honk!" /datum/chemical_reaction/silencer name = "Silencer" id = /datum/reagent/consumable/ethanol/silencer results = list(/datum/reagent/consumable/ethanol/silencer = 3) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/sugar = 1) + mix_message = "..." /datum/chemical_reaction/driestmartini name = "Driest Martini" @@ -519,12 +524,14 @@ id = /datum/reagent/consumable/gibbfloats results = list(/datum/reagent/consumable/gibbfloats = 15) required_reagents = list(/datum/reagent/consumable/dr_gibb = 5, /datum/reagent/consumable/ice = 5, /datum/reagent/consumable/cream = 5) + mix_message = "As the cream floats to the top of the glass, you can feel your cholesterol levels rising just looking at it." /datum/chemical_reaction/triple_citrus name = "triple_citrus" id = /datum/reagent/consumable/triple_citrus results = list(/datum/reagent/consumable/triple_citrus = 5) required_reagents = list(/datum/reagent/consumable/lemonjuice = 1, /datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/orangejuice = 1) + mix_message = "The glass's contents shift colors from a rainbow of fruity twinges before settling with a distinct flowery smell." /datum/chemical_reaction/grape_soda name = "grape soda" @@ -895,7 +902,7 @@ id = /datum/reagent/consumable/ethanol/hotlime_miami results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2) required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/consumable/ethanol/pina_colada = 1) - mix_message = "You hear synthwave in the distance as the drink mixes; this makes you want to hit someone with a baseball bat." + mix_message = "You can hear synthwave in the distance as the drink mixes as you can feel your blood boiling." /datum/chemical_reaction/mauna_loa name = "Mauna Loa" @@ -1046,7 +1053,7 @@ id = /datum/reagent/consumable/ethanol/species_drink/hollow_bone results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10) required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10) - mix_message = "Your bones feel weak." + mix_message = "Your bones feel weak." /datum/chemical_reaction/frisky_kitty name = "Frisky Kitty" From 03c2f752fa214e8d4d220fde62bc31e1bb521f5f Mon Sep 17 00:00:00 2001 From: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com> Date: Sat, 15 May 2021 11:51:43 -0400 Subject: [PATCH 075/108] Update drinks_recipes.dm --- .../food_and_drinks/recipes/drinks_recipes.dm | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 708fcd6bcf..0061e6076c 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -29,6 +29,7 @@ id = /datum/reagent/consumable/nuka_cola results = list(/datum/reagent/consumable/nuka_cola = 6) required_reagents = list(/datum/reagent/uranium = 1, /datum/reagent/consumable/space_cola = 6) + mix_message = "The bitter-sweet smell of radiation almost makes you wish for a space winter." /datum/chemical_reaction/moonshine name = "Moonshine" @@ -36,6 +37,7 @@ results = list(/datum/reagent/consumable/ethanol/moonshine = 10) required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5) + mix_message = "As the moisture in the glass settles, your entire face burns from the reaction's alcoholic virility." /datum/chemical_reaction/wine name = "Wine" @@ -112,6 +114,7 @@ id = /datum/reagent/consumable/ethanol/screwdrivercocktail results = list(/datum/reagent/consumable/ethanol/screwdrivercocktail = 3) required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 2, /datum/reagent/consumable/orangejuice = 1) + mix_message = "The mixture billows a sweet scent of orange, promptly drowned out by a thick nose-scrunching cloud of potato liquor." /datum/chemical_reaction/bloody_mary name = "Bloody Mary" @@ -142,18 +145,21 @@ id = /datum/reagent/consumable/ethanol/toxins_special results = list(/datum/reagent/consumable/ethanol/toxins_special = 5) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ethanol/vermouth = 1, /datum/reagent/toxin/plasma = 2) + mix_message = "The surface of the mixture sets ablaze as toxic gas erupts into a mystical cloud of fire, shortly settling to but a humble - albeit eternal blaze." /datum/chemical_reaction/beepsky_smash name = "Beepksy Smash" id = /datum/reagent/consumable/ethanol/beepsky_smash results = list(/datum/reagent/consumable/ethanol/beepsky_smash = 5) required_reagents = list(/datum/reagent/consumable/limejuice = 2, /datum/reagent/consumable/ethanol/quadruple_sec = 2, /datum/reagent/iron = 1) + mix_message = "You can hear the law nearby." /datum/chemical_reaction/doctor_delight name = "The Doctor's Delight" id = /datum/reagent/consumable/doctor_delight results = list(/datum/reagent/consumable/doctor_delight = 5) required_reagents = list(/datum/reagent/consumable/limejuice = 1, /datum/reagent/consumable/tomatojuice = 1, /datum/reagent/consumable/orangejuice = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/medicine/cryoxadone = 1) + mix_message = "The scent of medicine hits you like a truck!" /datum/chemical_reaction/irish_cream name = "Irish Cream" @@ -166,6 +172,7 @@ id = /datum/reagent/consumable/ethanol/manly_dorf results = list(/datum/reagent/consumable/ethanol/manly_dorf = 3) required_reagents = list (/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/ale = 2) + mix_message = "You can feel the hair growing on your chest!" /datum/chemical_reaction/greenbeer name = "Green Beer" @@ -233,6 +240,7 @@ id = /datum/reagent/consumable/ethanol/hiveminderaser results = list(/datum/reagent/consumable/ethanol/hiveminderaser = 4) required_reagents = list(/datum/reagent/consumable/ethanol/black_russian = 2, /datum/reagent/consumable/ethanol/thirteenloko = 1, /datum/reagent/consumable/grenadine = 1) + mix_message = "Your head throbs as the purple-colored mixture swirls with alien-like vigor!" /datum/chemical_reaction/manhattan name = "Manhattan" @@ -269,6 +277,8 @@ id = /datum/reagent/consumable/ethanol/singulo results = list(/datum/reagent/consumable/ethanol/singulo = 10) required_reagents = list(/datum/reagent/consumable/ethanol/vodka = 5, /datum/reagent/radium = 1, /datum/reagent/consumable/ethanol/wine = 5) + mix_message = "A horrible screeching fills your ears, and a wave of dread washes over you..." + mix_sound = 'sound/effects/supermatter.ogg' /datum/chemical_reaction/alliescocktail name = "Allies Cocktail" @@ -448,6 +458,7 @@ results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2) required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1) mix_message = "You can hear beeping coming from behind you." + mix_sound = 'sound/machines/nuke/angry_beep.ogg' /datum/chemical_reaction/erikasurprise name = "Erika Surprise" @@ -475,6 +486,7 @@ results = list(/datum/reagent/consumable/ethanol/bananahonk = 2) required_reagents = list(/datum/reagent/consumable/laughter = 1, /datum/reagent/consumable/cream = 1) mix_message = "The mixture honks. Honk!" + mix_sound = 'sound/items/bikehorn.ogg' /datum/chemical_reaction/silencer name = "Silencer" @@ -574,6 +586,7 @@ results = list(/datum/reagent/consumable/ethanol/bacchus_blessing = 4) required_reagents = list(/datum/reagent/consumable/ethanol/hooch = 1, /datum/reagent/consumable/ethanol/absinthe = 1, /datum/reagent/consumable/ethanol/manly_dorf = 1, /datum/reagent/consumable/ethanol/syndicatebomb = 1) mix_message = "The mixture turns to a sickening froth." + mix_sound = 'sound/FermiChem/bufferadd.ogg' /datum/chemical_reaction/lemonade name = "Lemonade" @@ -863,6 +876,7 @@ results = list(/datum/reagent/consumable/ethanol/hellfire = 4) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 2, /datum/reagent/consumable/ice = 1, /datum/reagent/consumable/ethanol/crevice_spike = 1) mix_message = "The liquid begins to churn as it changes to an amber orange and catches on fire." + mix_sound = 'sound/FermiChem/bufferadd.ogg' /datum/chemical_reaction/sins_delight name = "Sins Delight" @@ -902,7 +916,7 @@ id = /datum/reagent/consumable/ethanol/hotlime_miami results = list(/datum/reagent/consumable/ethanol/hotlime_miami = 2) required_reagents = list(/datum/reagent/medicine/ephedrine = 1, /datum/reagent/consumable/ethanol/pina_colada = 1) - mix_message = "You can hear synthwave in the distance as the drink mixes as you can feel your blood boiling." + mix_message = "You can hear synthwave in the distance as you can feel your blood boiling with rage." /datum/chemical_reaction/mauna_loa name = "Mauna Loa" @@ -1054,6 +1068,7 @@ results = list(/datum/reagent/consumable/ethanol/species_drink/hollow_bone = 10) required_reagents = list(/datum/reagent/toxin/bonehurtingjuice = 5, /datum/reagent/consumable/milk = 10, /datum/reagent/consumable/coconutmilk = 10) mix_message = "Your bones feel weak." + mix_sound = 'sound/effects/wounds/crack1.ogg' /datum/chemical_reaction/frisky_kitty name = "Frisky Kitty" From a0b83950aedfaaacf22370b4ee46dc13b47730ed Mon Sep 17 00:00:00 2001 From: zeroisthebiggay <43571008+zeroisthebiggay@users.noreply.github.com> Date: Sat, 15 May 2021 12:03:04 -0400 Subject: [PATCH 076/108] Update drinks_recipes.dm --- .../food_and_drinks/recipes/drinks_recipes.dm | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 0061e6076c..b812cdbba3 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -458,7 +458,7 @@ results = list(/datum/reagent/consumable/ethanol/syndicatebomb = 2) required_reagents = list(/datum/reagent/consumable/ethanol/beer = 1, /datum/reagent/consumable/ethanol/whiskey_cola = 1) mix_message = "You can hear beeping coming from behind you." - mix_sound = 'sound/machines/nuke/angry_beep.ogg' + mix_sound = 'sound/items/timer.ogg' /datum/chemical_reaction/erikasurprise name = "Erika Surprise" @@ -493,13 +493,16 @@ id = /datum/reagent/consumable/ethanol/silencer results = list(/datum/reagent/consumable/ethanol/silencer = 3) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/cream = 1, /datum/reagent/consumable/sugar = 1) - mix_message = "..." + mix_message = "As the drink mixes, you can hear nothing..." + mix_sound = null /datum/chemical_reaction/driestmartini name = "Driest Martini" id = /datum/reagent/consumable/ethanol/driestmartini results = list(/datum/reagent/consumable/ethanol/driestmartini = 2) required_reagents = list(/datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/ethanol/gin = 1) + mix_message = "You feel like a prune beneath a sun as the mixture yanks the moisture from your tongue - yet, it's all so silent." + mix_sound = null /datum/chemical_reaction/thirteenloko name = "Thirteen Loko" @@ -778,7 +781,8 @@ id = /datum/reagent/consumable/ethanol/blank_paper results = list(/datum/reagent/consumable/ethanol/blank_paper = 3) required_reagents = list(/datum/reagent/consumable/ethanol/silencer = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nuka_cola = 1) - mix_message = "..." + mix_message = "As the drink mixes, you can hear nothing..." + mix_sound = null /datum/chemical_reaction/wizz_fizz name = "Wizz Fizz" @@ -816,6 +820,7 @@ results = list(/datum/reagent/consumable/ethanol/old_timer = 6) required_reagents = list(/datum/reagent/consumable/ethanol/whiskeysoda = 3, /datum/reagent/consumable/parsnipjuice = 2, /datum/reagent/consumable/ethanol/alexander = 1) mix_message = "You hear a faded record playing in the distance. Then, you hear nothing." + mix_sound = null /datum/chemical_reaction/rubberneck name = "Rubberneck" @@ -849,6 +854,7 @@ results = list(/datum/reagent/consumable/ethanol/blazaam = 3) required_reagents = list(/datum/reagent/consumable/ethanol/gin = 2, /datum/reagent/consumable/peachjuice = 1, /datum/reagent/bluespace = 1) mix_message = "The mixture- hey, where'd all the liquid go? Oh, there it is." + mix_sound = 'sound/magic/Teleport_app.ogg' /datum/chemical_reaction/planet_cracker name = "Planet Cracker" @@ -869,6 +875,7 @@ results = list(/datum/reagent/consumable/ethanol/gunfire = 4) required_reagents = list(/datum/reagent/consumable/ethanol/rum = 1, /datum/reagent/consumable/tea = 3) mix_message = "A loud popping begins to fill the air as the drink is mixed." + mix_sound = 'sound/effects/wounds/sizzle1.ogg' /datum/chemical_reaction/hellfire name = "Hellfire" @@ -924,6 +931,7 @@ results = list(/datum/reagent/consumable/ethanol/mauna_loa = 5) required_reagents = list(/datum/reagent/consumable/capsaicin = 2, /datum/reagent/consumable/ethanol/kahlua = 1, /datum/reagent/consumable/ethanol/bahama_mama = 2) mix_message = "The drink erupts as a plume of lava sprays all over the place! Oh, wait, it's just luke-warm liquor." + mix_sound = 'sound/effects/wounds/sizzle2.ogg' /datum/chemical_reaction/commander_and_chief name = "Commander and Chief" @@ -1093,3 +1101,4 @@ required_reagents = list(/datum/reagent/iron = 5, /datum/reagent/consumable/ethanol/mauna_loa = 10, /datum/reagent/sulfur = 5) required_temp = 900 // (626.85'C) mix_message = "The room grows warm as burning rock rockets over the edge of the drink before settling." + mix_sound = 'sound/effects/wounds/sizzle2.ogg' From 340571832bb3334fb55077a530b841424bb76529 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sun, 16 May 2021 00:30:09 +0000 Subject: [PATCH 077/108] Automatic changelog compile [ci skip] --- html/changelog.html | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 64549ad33b..28f6ffcad4 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -781,30 +781,6 @@

    • Fixed interacting with telecomms.
    - -

    14 March 2021

    -

    Adelphon updated:

    -
      -
    • messy2
    • -
    • papermask
    • -
    -

    Hatterhat updated:

    -
      -
    • Robotic limb repair surgery now has tiers.
    • -
    • Pubby and Delta now have roundstart limb-growers relatively close to, if not in, the operating theaters. tweak: Box QM's console now can announce things.
    • -
    -

    Putnam3145 updated:

    -
      -
    • chaos loads now
    • -
    -

    kiwedespars updated:

    -
      -
    • adds a cute new plushie
    • -
    -

    necromanceranne updated:

    -
      -
    • Fixes cosmetic augments missing their foot sprites.
    • -
GoonStation 13 Development Team 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 078/108] 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 e4e5d8f5cddf733dde5b0c8f02c012ab7d17869d Mon Sep 17 00:00:00 2001 From: shellspeed1 <46614774+shellspeed1@users.noreply.github.com> Date: Mon, 17 May 2021 00:59:10 -0700 Subject: [PATCH 079/108] adds an pod for projects --- _maps/templates/shelter_4.dmm | 24 +++++++++++++++++++ code/modules/mining/equipment/survival_pod.dm | 8 +++++++ code/modules/mining/machine_vending.dm | 1 + code/modules/mining/shelters.dm | 12 ++++++++++ 4 files changed, 45 insertions(+) create mode 100644 _maps/templates/shelter_4.dmm diff --git a/_maps/templates/shelter_4.dmm b/_maps/templates/shelter_4.dmm new file mode 100644 index 0000000000..5e749afbed --- /dev/null +++ b/_maps/templates/shelter_4.dmm @@ -0,0 +1,24 @@ +"a" = (/turf/closed/wall/mineral/titanium/survival/pod,/area/survivalpod/nonpowered) +"j" = (/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"k" = (/obj/item/gps/computer,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"p" = (/obj/machinery/light,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"x" = (/obj/machinery/smartfridge/survival_pod,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"H" = (/obj/machinery/light{dir = 1},/obj/structure/table/survival_pod,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"J" = (/obj/machinery/light{dir = 8},/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"P" = (/obj/machinery/door/airlock/survival_pod,/obj/machinery/poweredfans,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"U" = (/obj/machinery/light{dir = 1},/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) +"Y" = (/obj/machinery/power/apc/auto_name/north,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) + +(1,1,1) = {" +aaaaaPaaaaa +ajjUjjYHxka +ajjjjjjjjja +aJjjjjjjjja +ajjjjjjjjja +PjjjjjjjjjP +ajjjjjjjjja +ajjjjjjjjja +ajjjjjjjjja +ajjpjjjpjja +aaaaaPaaaaa +"} diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index fff971c953..f780d889ea 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -8,6 +8,10 @@ area_flags = BLOBS_ALLOWED | UNIQUE_AREA flags_1 = CAN_BE_DIRTY_1 +/area/survivalpod/nonpowered + name = "\proper Emergency Shelter" + requires_power = TRUE + //Survival Capsule /obj/item/survivalcapsule name = "bluespace shelter capsule" @@ -81,6 +85,10 @@ desc = "A luxury bar in a capsule. Bartender required and not included." template_id = "shelter_charlie" +/obj/item/survivalcapsule/luxury/empty + name = "large empty capsule" + desc = "An extremly large capsule which requires power. Useful for projects all over." + template_id = "shelter_delta" //Pod objects //Window diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index ec6a430c0c..8a7c3a81bd 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -56,6 +56,7 @@ new /datum/data/mining_equipment("Ice hiking boots", /obj/item/clothing/shoes/winterboots/ice_boots, 2500), new /datum/data/mining_equipment("Luxury Shelter Capsule", /obj/item/survivalcapsule/luxury, 3000), new /datum/data/mining_equipment("Luxury Bar Capsule", /obj/item/survivalcapsule/luxury/elitebar, 10000), + new /datum/data/mining_equipment("Empty Capsule", /obj/item/survivalcapsule/luxury/empty, 5000), new /datum/data/mining_equipment("Nanotrasen Minebot", /mob/living/simple_animal/hostile/mining_drone, 800), new /datum/data/mining_equipment("Minebot Melee Upgrade", /obj/item/mine_bot_upgrade, 400), new /datum/data/mining_equipment("Minebot Armor Upgrade", /obj/item/mine_bot_upgrade/health, 400), diff --git a/code/modules/mining/shelters.dm b/code/modules/mining/shelters.dm index 2481634e5f..6bd04ffd6d 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -73,3 +73,15 @@ . = ..() whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) + +/datum/map_template/shelter/delta + name = "Shelter Delta" + shelter_id = "shelter_delta" + description = "A massive but barebones survival capsule useful\ + for projects that require great deals of space." + mappath = "_maps/templates/shelter_4.dmm" + +/datum/map_template/shelter/delta/New() + . = ..() + whitelisted_turfs = typecacheof(/turf/closed/mineral) + banned_objects = typecacheof(/obj/structure/stone_tile) From d76a0eed041d1fbde8c8ca00aea1d27c62fe65ed Mon Sep 17 00:00:00 2001 From: shellspeed1 <46614774+shellspeed1@users.noreply.github.com> Date: Mon, 17 May 2021 01:26:36 -0700 Subject: [PATCH 080/108] woops forgot map merge, lets fix that --- _maps/templates/shelter_4.dmm | 24 ------------------------ 1 file changed, 24 deletions(-) delete mode 100644 _maps/templates/shelter_4.dmm diff --git a/_maps/templates/shelter_4.dmm b/_maps/templates/shelter_4.dmm deleted file mode 100644 index 5e749afbed..0000000000 --- a/_maps/templates/shelter_4.dmm +++ /dev/null @@ -1,24 +0,0 @@ -"a" = (/turf/closed/wall/mineral/titanium/survival/pod,/area/survivalpod/nonpowered) -"j" = (/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"k" = (/obj/item/gps/computer,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"p" = (/obj/machinery/light,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"x" = (/obj/machinery/smartfridge/survival_pod,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"H" = (/obj/machinery/light{dir = 1},/obj/structure/table/survival_pod,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"J" = (/obj/machinery/light{dir = 8},/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"P" = (/obj/machinery/door/airlock/survival_pod,/obj/machinery/poweredfans,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"U" = (/obj/machinery/light{dir = 1},/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) -"Y" = (/obj/machinery/power/apc/auto_name/north,/turf/open/floor/pod/dark,/area/survivalpod/nonpowered) - -(1,1,1) = {" -aaaaaPaaaaa -ajjUjjYHxka -ajjjjjjjjja -aJjjjjjjjja -ajjjjjjjjja -PjjjjjjjjjP -ajjjjjjjjja -ajjjjjjjjja -ajjjjjjjjja -ajjpjjjpjja -aaaaaPaaaaa -"} From 5d873cd215619314c44e79f21aab4526805d47a8 Mon Sep 17 00:00:00 2001 From: shellspeed1 <46614774+shellspeed1@users.noreply.github.com> Date: Mon, 17 May 2021 01:33:19 -0700 Subject: [PATCH 081/108] lets see if this fixed that --- _maps/templates/shelter_4.dmm | 191 ++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 _maps/templates/shelter_4.dmm diff --git a/_maps/templates/shelter_4.dmm b/_maps/templates/shelter_4.dmm new file mode 100644 index 0000000000..abb85a09f8 --- /dev/null +++ b/_maps/templates/shelter_4.dmm @@ -0,0 +1,191 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/wall/mineral/titanium/survival/pod, +/area/survivalpod/nonpowered) +"j" = ( +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"k" = ( +/obj/item/gps/computer, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"p" = ( +/obj/machinery/light, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"x" = ( +/obj/machinery/smartfridge/survival_pod, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"H" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/survival_pod, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"J" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"P" = ( +/obj/machinery/door/airlock/survival_pod, +/obj/machinery/poweredfans, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"U" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) +"Y" = ( +/obj/machinery/power/apc/auto_name/north, +/turf/open/floor/pod/dark, +/area/survivalpod/nonpowered) + +(1,1,1) = {" +a +a +a +a +a +P +a +a +a +a +a +"} +(2,1,1) = {" +a +j +j +J +j +j +j +j +j +j +a +"} +(3,1,1) = {" +a +j +j +j +j +j +j +j +j +j +a +"} +(4,1,1) = {" +a +U +j +j +j +j +j +j +j +p +a +"} +(5,1,1) = {" +a +j +j +j +j +j +j +j +j +j +a +"} +(6,1,1) = {" +P +j +j +j +j +j +j +j +j +j +P +"} +(7,1,1) = {" +a +Y +j +j +j +j +j +j +j +j +a +"} +(8,1,1) = {" +a +H +j +j +j +j +j +j +j +p +a +"} +(9,1,1) = {" +a +x +j +j +j +j +j +j +j +j +a +"} +(10,1,1) = {" +a +k +j +j +j +j +j +j +j +j +a +"} +(11,1,1) = {" +a +a +a +a +a +P +a +a +a +a +a +"} 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 082/108] 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 083/108] 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 957f9ddf23e8015bec4c0dd7c4220ec82ddac0ce Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:24:54 +0200 Subject: [PATCH 084/108] E-fink Icon --- icons/obj/kitchen.dmi | Bin 29482 -> 29742 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 9a4af824494149f2225e0b244aa7e7af5e79ee74..7ada41dbcff9c07652714316871e7bdbea45662d 100644 GIT binary patch delta 9508 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 o5J$}V!-z-h;GA-G`<3pdyr&j0`b delta 9246 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¬A++wrYG?>-kpIYs zSDe4|G)%=2r_S-=JE8Kx#^d#;a;5Pqia7@^z(w!I;7qm;-5dI_ zP5)h*cWKEP%kP6dy-P+8uMLf0e@8O^HJ=mGn0-<5%8a{#v;N%Vy|SBdK_jy(HxR?& z;FYkx{Gow3@n<3!*E@(-7{V!r`=15HZ;AifJtoJmtW0VUoL+3~88syEQsV=bhS|sm zdTQHxSQ{bNwZj=CVH*=4mYA4`smd{G5C9KdW#1|`qo{}xY`fM`SXlV!#77X^eU7QX zKwx;;>p_pp5Cm@CNjHrd$_f~6vn>5VxixjmQwN%(o=;2?G`5G9G|7lR!uuk1E@)>* zTUuHQ5-c-OC?*r`tY@7dh)P<8y+6+(0riY+eNjT5F^q|@vg|p27nZ%cdFXwsPar&- zE#l!HLsby>-|>J*n7;0zqlJY?Ce3zVq0%}sVzQ?@3*+L1Wp zxYxVRQ{ZdPb{I^%a7E+rp-e@c=NGM7!Z3%djce!aT?XBA%&iq+8zG}0Iy!|-`4W!S z89%rlhwYtDP>q#Pq33?~;(~hDK_%qZIEp$5Y+9=hH^6tHEPr@ZrX22qUl`3nN4)U%hE;#BC1ebYyz~%}G9%SEcz3rsWNhM%{~@Q< zy+bD?mr{LLo#)=SIw%`1=Nt)()rSqNoeQWAj)Jvb5EpI{sjB#0;92YcpQ!!Bia|8q zu+Z~6iV5|z)U*5j4$kD!*IiMa!oIW|m8H&aJEZxs ztMTI9nSbK6CqVOlG*iY=S$e+Sd+YTb1!K$rN4RDtPy}~_2$xawtj@Q#JW^YK=mCg6 z0qrwjHsF)Kz7sJ&dy{g57PJ?P8p6WPZqb)4i`kBC08GTe@5p@OP{LLjZuPdN!iAwl=b)5|k4nZ@p~PdV#Hj_RO=ncMZ34{uA@{P?iq9 zRQ$L40U5}%=g*t1$}+ODDDw4D>i6#l?JQgN#07Cj94q4!&DM8d2fR-VY5U7lR6Wi( zyu5&RoXay>X0;FIWJ4W|AF>ybU|Ld5*r{7I(aS$--P7^_GWRa5%*$I4Wg$(?eL5^n zlu#OloRIW_0zh=b=^%24^y+N|Un6oL zl|tphMC&s$=wE-Uk1|P#5mF^BsoK*7Xc}iy7tij-!!+k~1#LD@kw5_K6OmGd-u|E6 z4?p{-z9@J(|1<*uu%s7eDRQy(!N1<&-SeiZS!A68wX~F!E{P4EAHRO+-7$s}3B_TW{hx1bOh65@-Wb`o5;ovOUCo gtxLNadN2o&`J^uJ&8B>~3ITsw_qElE?wJPs52H!z=l}o! From 6a78b3555f4b301751a786493ed5e3109c368d13 Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:26:48 +0200 Subject: [PATCH 085/108] Inhands --- .../inhands/equipment/kitchen_lefthand.dmi | Bin 2196 -> 2329 bytes .../inhands/equipment/kitchen_righthand.dmi | Bin 2554 -> 2653 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/inhands/equipment/kitchen_lefthand.dmi b/icons/mob/inhands/equipment/kitchen_lefthand.dmi index bd3e1f779fcca6694d9637cc7ceea61392bf1053..af16e06a3902626dcc012e1c7d1b8bb363a180e0 100644 GIT binary patch delta 2186 zcmZ`)dpHyP9-m&c>J(ikV#hhfDaGWvEb}gxH(DgQX71L^kXvSBy-|*$x#lppaEQH8 z=02B7u~Oow9}-{SSQy= z%YX>Ka7gUX1z)Gp+Fz_L)ph)FKuhR@w9PoT)0R-I zt2%`Q9a=ZiDYMWA@AW3WNS?&Y1(rjC=#?%pLZh-Nt)r zSmYi&QbN=~4^^0M$nVp%eSMBW=@{7db5IKhAHV(zqvM2RE;T%VkbUEfX(RvuJeHqD&R-T{yhZ=$@`7YMb=BM z`jA6gwF7qMVGFH1R)u~bdc0k5kF>M^PVfQ({(HD%uFYx3rTN-XL51DKua&eD+pu6o zHpf&+{4v7BS=V20C)$8yMosS3uy<3d7eT>+=r9fYaK9EEOP!JQ6V!49kazyR6NTtF z@&umaZa%SWDq+@;Jm|@k@!{h*rW6+b*IK!2G=L*^h5g=jtC_PRUSu@-V6jx^Z4VER zge4SF4Qo4Ha&;^-qyKZ)hllfeBzMdfRaCdm8pQXt&56ra4maUm3n}i0G!ti}V=Yvs zCj+nAcX>+oHm=BA1dSE`)UyYT63DTz@t!QX%-0Ga62R2{mc8N3M344r>~)PX&_c|& z60Pnl-FdxuEd3d$_9VI6Epr%Ne~C3H+AIwP;5Bpfys9JP;yuBt#UTp;j=h0=e7WPa zo8t@ktfIqhfSQ_GcE7FQ(jmPI#-6D<6(L;3Sz=x7}F|huI#zr-x z*){#OXk!gB?Q_`Qu9Z%gzihj-sGb=N_J_H-xrA2D;o)I6ybqG` zrKCWsqM<8!VW8Be2Y@IW|{Kl{bWE3futK^G=AS60G-njF5o;|GGFY5=S7 zvgG^vTW^SHtM&^HFaO7bV z_9XkxPr%RJ<@5aRkGir(@MQBf`bNYp<1wmBP4wbXxxV@>vn_ne@WX@ND@m2rWXh%H zAF98B^}gfo#i4RC8iH)06chWUEjn|~anKp5UyC6cd#gvOnM_$1aiTAr4ZPWSS5mjH z&eLvW!b$+xe~|9J{EV9{$>0{RUF-?SG?{0CKzh#2<{i~a6pJx_@B4pf&Gxi26d*uJ z2lcMNL^H8X8KIK6EzuXA@L=`ALLIJ=vUIi-JC)pg7R(9}8vymI%0G47WrhDdKVZDa+Iae>M z6|;O7Y|qX|)AIasYL_=ztkpd~sM6LJJ?oDmssH9mIX;aNwPe-Zx|tGO0#?#MY z2ej)w?H=8cbdqIY|A?adNXWfeR1Q;^Da_!YZuK>RvqD4 zO61duT>1WT=g$Z0UeF>cZtmhgL-AFNlJzHZVxD1w^fF_OEsCJv`1rzgLzGmENByAU zJ+ugmbD6PZR}KHY>}8%~zi_6Y!zGWv{g-md@vs=6=>I9V^5`YOocK7^ymEJM`?Nwo zF&JLX#BKQP;UwhlF8lf$+`$&JWw?d>caB_%aZ!gfQgJhL#3cg;ZpZk@raqK60fvk_ zT&rRQt4!%Bb+B~qbfR(yTpU+{h1s$By>$i1I(q=aU~o?NKC}K|8Ox%meC=YT|Eiy& z2=s<81pTjS`ATp&i=bK~-Gb?5KHqbUl$MdRSKDowg?FqF;`@>cFJT8*oq-T!>S~(O z<@J@{PfNI9X?g+oeE_-Qw^aUSz7p-IDEQ52Z$jq$&O}1kLa!3~^wVm+M>UT?dl}vL zywsDF5i#3qr(sQITl33V*<4gqO1rQ#*b1)R^kL6NP|RIOOS=jJ_?e#r>f9!E?`_*? z8tM9?^c*a9y4+Syt{DB{l@LJG2@7yu>x-9+B0FeNOX^4kvUtIruc60R{OB)NHacmA z)7!cISbXfd?T>^s{dnv`z36B?+5<`wc&0O literal 2196 zcmah~c~}zI7RSmhTbyyGCNa(T$|aZLr7%s3=2BUqnby-tOU)ETG*J{msnK#8)Jk$m z1RO0)6H&-5P%}-RX)b{qqGpkbxR5(0IQV+=z3-cE-uLbw_uPBV`Q!Y~?|1IKd(QRb z_N}^G0RX^ums3vX0RR={5%69^O}S4UuRfY5dan5KPBFJq zO;0>}sHhm)aw$e(cLqyfPA-KM^^>PvW}AHCBFYX8!XYS! zg6>-3<2B?o#*dwJG3-1e!tZ3Zj=%~dXCEqfOd`epoOr;%Js&A$Z-0N)+|T<}f&$*2 zrXKKJbQ<@dSZl^RX52O;rvU&^Pj_)T?irgqJ!BWGH?UV-T2*vm@V4%r@5mfiiH>2! zkD8jVwupT5nl-_QpUHelg`oOI&dWzc;H@|<%Lbtz{s)Kq2V!;@9ppdl>X|XVZCm%5 znki#aAoDV-vHnMp+2x@T9LKk@R(qp`|5?9s$}y&`ilh4jL-hTj3w*A#UDDe;*Hp)U zB~v#-Sj95Am21?2v%L=E_m1Pea=V>vM9qRHqK2Uxv5RBoN!qUzZ9J)5VsK)h4^n@5 zhhdWR^>|jJoS6p2+Fr+2?A}|zl$CigAnx6&T`fl8{-1+dCgD)?;ZA`bw|&!!VsU4I zJgd+!N!z#fsMgMzv;xJka1zljDR%zRS)+_Guf@93;1EUFc$Yx!T%bymK*Y}RT`TIJ zQ$}0E3GCbu+(mi`?6b4`?$?I=4Q;;0T1ymz#tE9m&*? zXQlzcOU@nTX0mOII@0{HzD2!1n)qjXljynNM1oTB|KOwNChB_A)H{nKZKB}lnqXMp zw{S42b$`*EqUGYajSsVaar-_C(PYoF+of(yiR0#n3|lwk0G|?M9^IkiC}*Gm1FB`U zwLTLi3)9on?#R>x>cNWfyVhh1g>rr|tF}&}=Di+k<7z~5VR1O{BKMe>7*gxC^puv5 z!Me5=s+Md(*N!ZV*xvEAJM0t|e=u6cv#fY}6k|%RgqHiu_UpyT|6KmpyFGeoX=#n{ z#xOFYL+$MDdRSgIJu)2vGmF<4ZD=?iiO1_zR#u)sIHJPBUK6tY&ajA;uCB0DUggPq z`tdB6Ax;c)?lM{L8FTWw=j4aP#Kiqc+G+Rh5#}yskt5w%K+*89FYCn%-QK=F97l{o zp%UJueEIUFV!XdOJHFcqoRI_CLbj*Q*Of9$OYdkq6v6h^(aLX#;c9|bh@CnYauq?!*_F zNmRqVX*Gu~eIL@P;{!%CD)3lY^V>wkje zt~X*W{}=SK;P8=M$GV?SM1v5;^lWyGcf^eIAJ`==iOJ{cZUmqfyp`h-01gCJxsmO8 z6;`&s5+$Q$ZK|E8+?d4j?w|}M(v$&V$%s`tgXASEUl}Eq9&PimTp{V z&|zPXvFMl|eb!4grXyKe?vSp#`|tpCaPqs@iTPF@t45x@DAn>m98$jqdhwS7ao z<+}ms8tHA`)TWi6(sjp+JaE*0w#sU|OxlQ@!Tuj?F;uQaR6e3x;{VPQ1`3)Nb=Ylv zTl*C&n1ztXO10lWQ0=MEXW~o#?R4bFC4^4!i%fb;sIm@V<&;bc088=1E2%Xm^sgqp}6JG+ZI}?n9f)zzDF?M^bm$oL7ugP zE16}B32v@#>+!oBG^z~Nf8!~ss#vmt1@Q!sn^SwlfxBNu1(;4A>5}}L)r9uEwN3rm z36<#yg6NuN>;~6M$eU0!bS;94)1O_BplbaUqfMgM-QMYP^r<&|ntHfpxD9 Or;D?zQ>nw%pMM8r>owH? diff --git a/icons/mob/inhands/equipment/kitchen_righthand.dmi b/icons/mob/inhands/equipment/kitchen_righthand.dmi index 9e9f21b0f51408294b65afd8d84c5234c2efec51..539ef42a19ae252c0aa371fdc661387f6bf0cfe1 100644 GIT binary patch delta 2158 zcmV-!2$A>t6WtV$B!9wsR9JLGWpiV4X>fFDZ*Bkpc$|%pu?oU46h-IcD=u{{Vzjtr zkrwHozaVLwnn!C=l2q~U9RzhUqJ~7~-8hoHUM8{`XC3(fiGs7hsC)+DJ``M5yl71_o;{;b$@*6C3_AtCb5ab{c$lZ%iLA{YBy{8(qZ;Lj^m=Mv?q z<}a6rf|Qg6>wy3O306r&K~#90?cKd^R7VuX;j>mc_ja+(76c(W+nXX1aug*lh-BAD z?%joonyanjiaatx3JsF$r3E1nO_YVCqCgaGDBz#CDPYW)y|#Dl`M5Lh?~yD4F?(k2 znR$KpBg~*}TLYkJCHDXTO(4%$z<^C`O{?eVtV%csZA!6C@=cPuAQV0ZQFK!ZEvi#fBe4DZf~r$ zXMInfzfz39mKx`M-M@do$o@a)9CwV`vF0;q+p~YT$9&5yg%snjr3N&e`%z$j(UtNv zz#nJq5BtQd;p;;mN_jn?^cVe7*EshM06^XNpMjHc1w)hn0uGb#0tA1X3xHBifLT_m zd4;Nzs}EaSTUGWy)x1L0Nj2WiJAm3kptQ{&>+u#)Y&M%ohd`(>Oc|=30nju}Tl&es&SmD3d;YoW zFT!7({;yR-AXFH-zvmt&b_kq%2hjILc#*4)Kll7|*FQ_wqP%wPnwgo6$Kz-x@%B}y zF!aCwtj7$kGXN%&e@RtMTy{RW=byX&MGg-SPyL?Ff7)fQhx>l__b;jw!i9%}Hciv^ zeL;2!HSXN=&t3mKM@L7k^5!=)8;{5By?gggejnm`xI2OO@86&N+2P@#&1SRU*O=3R zaV4|atX19ozR+Rlhk$!MAclqC1?cPZ(Qm~XXYTpuu74KA7tKE&kLP;fHfgBq;T|XE z<~QRG0FcJ#lc5G9li&k0fBWvd|M=j+gHxx5+`W6Z_ou+b9&?G;WGRF3#M)Vtdl*rq zm|LhCiTZHi$v}I1d#Ao(I-T}*!KWH)N!Mg)gYm@7thx|LF|Uv{67}KSI{-7Y>2!MX z>%G0bm}3dTA8(2pC0vsw{a|MQRCOodHq+<1l~N-~9~OBHU~qhVe{9Fc$Far`lsDFx zKb4ERCQE5&znNRaUl(<`{Ehi}Ze`R+)Q5#$1RRY{ddX3n9Xxnz7uif32Uwb*CAXQX^L%R#%%*O(EcK z%+=L6{f|*2RUbN^IRf~LuZHvCV{ZPKHFEXAUwk$6Kj!9-StCUsI2{-ew(#44CH*8w zG1gqyL#^&*(Er782LK4;gFusz1~il410jFS1;FhJ4um{Qin)cVk*f~}kKR?={}giz zRU=g&I`05#41tn1f2_w_RE;4}(&mr#cwOcKz@0`~QwZEna6WwK8oB!5>edtjZZ0wV zAG$`WKFkHcL+?o98bZL|m=7Zz5gnsOu0Aw7tD~Aiz~7k7&g!U?8maow`4r$`h37HD z$J+ccYvk&KzxZnDf2_?Pvqp+Oa5^v`Y~i;7OZrK``SA7By$t%lIPL%dVSEq>ld%R9 zli&k2f5g4~_mkwm3Y%iy%hbr#2LeFc_Qu-4Exy{rz@O*##@e7yHFEWV0Km!OYyNyw zZ3y`Di@Eu)QX@wn2msj2e?PTPUVX6f&2_6W1l*>eP*Vt$xcQxweV7Y?o#w`O5XfVsy=i+1@ISNNvFbo>+9L=@iu?V8oB!5FTTmaX7J4u+xEuVU~;f& zIc9M-f65xM`@reII8)5G%u+}({?cnK{5D`ocLJObABMl^N_iUKk2Cg%ePY(|#q0xj k0Dv$)2n3U#1|AmsAG2bM1Z4ue?EnA(07*qoM6N<$f;44cIRF3v delta 2080 zcmV+*2;cYJ6#5g8B!9hnR9JLGWpiV4X>fFDZ*Bkpc$|%pu?mAQ07U2HD-KETGps=J`TaXwL^ zq#jgw8y`fF;E0@^CT)h>tW88or=15!N=fg;U3ze^FWXx;Zhu0f(Y@TH{A}%ZVY7r* zZBngpVMmw~+BA0kvoE8hlaqLYgC!qPqHOT94d7rbVOhd{QWvx1!5BrIBd<#O0`4Do z=1v9$KL7v-_(?=TRCt{2-91lRR~*OjW2>8Y7`%9(QIrjv43!XV)iR_Ko-MJXF3n4@ z<++(MMv_HBJ3L=l;+6 zap5{S4Qs6dps5*q00814lkfu|f6X7e>yn=Z4l(aVYN+-BaW&taUN(xwm-`|t&-2~s zWus0tl=^`BXd3fv@r@6<*)G2F{CsZyRca{o0rk=}=4#>YZMV(j^QFmg@fDkD^7+#2 zZMVJ5&qa;g`+)knz5_VqCde;~)jm(u1h z)TIxj(J1NO7h=xCMQz{XzwsEbE{o5F6gPh%b{|Hgk^SZ8Uy~1knDcN^JH+^>J_itc z@wt%l<}XzBA(ZiW+<5c$b+CFqy?OiEjK^ayKlJroJ4hd_wUw`(%{BYyADeb(bIs2B zJ#~JC7=JD`?s^S}!zBA3KXcqZYWtc`!`j(j+ zfO@IC1ITUhrMCHfz272rb6Eq+%q8~xL)M=PfCmpATn{3|0DLRvQOqlqI(6tn>T6)t z@yDKji273ju)n|GsKerOp}Z;g_xHUW;_0JK%s#AgrhOePI-l6{4_bfLx#5S0hjus| z+HSX-A--nxgP`edc7o)BGfoz zU5{9GQ~7q#*EnO(-&cL^003cp5D1gN1}&4&1|5F{03ggs03011@pp>@30gS-ip@_5 zTyb?BxSj}MrGr6=MLHM^8b?P*c4K41Y;A32b+F_j%A0mD7%Y7qT)oe#oDc;ldc<0sc_iyz1`1rWC zy$ydg)|9TveU=IUHvdhouE%6DvBns4c6K)P-y(*<_1yaXeytaKzu&jV$H(Pg@-^0E zuE~9t`We8pXU}f@JDdNeWv@r^`-}hozB++4&d<-y`T2RI@{1{r)#qAF>YChTsQ{Qv zCXM1NlJe#^#(fyh3W3{oLh5unN%c0wcvDKdCbO*c6rczJ)y;2=pD?@~0)xSzF_}zc zuQ5Eb*792L)$8?a)vtg2__6ZWmwmZ@zg1p)dwaDROI^m9$~C#`wbEli0BPf+z>}W_ zPLmJ>2Y*cmKx1nhVH{zEn47B_k^1oOtAl@H)D0oT++5WN)raakfE+_0rOof_{pOTo z2&A<6eZ60mssMOwjL9nmzRl%vLN%iF;rn)b-I%;WpqNWBw-joG>ceyZ*vW4urw}M_ z%&WPjQ6o|xTDzl8P9ad?vxJzNs~WNT z@ao{NZ2KQ#Zmw#C>O(Tv#aw)z5AV80 ztUk2cKdc**R|phyDdv_!jZl4<3V_jWtCLd*lsD#Rx7A6dMyx*UjvjV$3W4&*+#Nma zq*5bPA2uq#1t>4Rlum`ct$cR7ug&kXMyx)R7hfLz_qX|d)(FuDP6q~r&HWfKrLP2> z51&unWzhfmlb#1953uiI4*+pB8jaXPKt$XDlV1TJe+U3TSo8g-uabW&Xoz_)QbV;5 zh|F4R-ko0B@;`HZg_!3mHDdGu;>wHfr{Dj!xrRW9`MIbOx)0FSH0J8|^W?*Y*?P2Y zMlVjYyB&T1>8l;RI5k_3*3HR>3or9?Q6u+0pnjUh7_+mv*4W!_8)Hm%i?6&fjWK3# zyKQzhf7hJ;8CX{}a_$4_>G~-^j*Bm)&0ol|52&vjj{$R9d?{}JLQZ`^y-j@%Acw`5 z^5!q(&#8A4vJwJRyV_e-1VHE5XFw_ed)C2b~irqGtC10000< KMNUMnLSTZ`a3OF2 From a947ec1322fcefbcae94bf57dd0acc7311e37428 Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:30:01 +0200 Subject: [PATCH 086/108] Recipes --- .../recipes/tablecraft/recipes_bread.dm | 9 +++++++++ .../recipes/tablecraft/recipes_meat.dm | 10 ++++++++++ .../recipes/tablecraft/recipes_misc.dm | 18 ++++++++++++++++++ .../recipes/tablecraft/recipes_pastry.dm | 9 +++++++++ 4 files changed, 46 insertions(+) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index 5161ff349e..98a347eedd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -3,6 +3,15 @@ ////////////////////////////////////////////////BREAD//////////////////////////////////////////////// +/datum/crafting_recipe/food/bread + name = "Meat Slab" + reqs = list( + /obj/item/reagent_containers/food/snacks/breadslice/plain = 5, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/store/bread/plain + subcategory = CAT_BREAD + /datum/crafting_recipe/food/banananutbread name = "Banana nut bread" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 17ea36a160..2409032760 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -66,6 +66,16 @@ ////////////////////////////////////////////////MISC RECIPE's//////////////////////////////////////////////// +/datum/crafting_recipe/food/meatslab + name = "Meat Slab" + reqs = list( + /obj/item/reagent_containers/food/snacks/meat/rawcutlet = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/meat/slab + subcategory = CAT_MEAT + + /datum/crafting_recipe/food/ribs name = "BBQ Ribs" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 93102e1ad0..eaebfbb44e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -47,6 +47,24 @@ /////////////////////////////////MISC///////////////////////////////////// +/datum/crafting_recipe/food/dough + name = "Dough" + reqs = list( + /obj/item/reagent_containers/food/snacks/doughslice = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/flatdough + subcategory = CAT_MISCFOOD + +/datum/crafting_recipe/food/Pineapple + name = "Pineapple" + reqs = list( + /obj/item/reagent_containers/food/snacks/pineappleslice = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/grown/pineapple + subcategory = CAT_MISCFOOD + /datum/crafting_recipe/food/beans name = "Beans" time = 40 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 5343595f89..80f168fe2f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -194,6 +194,15 @@ ////////////////////////////////////////////OTHER//////////////////////////////////////////// +/datum/crafting_recipe/food/piedough + name = "Pie Dough" + reqs = list( + /obj/item/reagent_containers/food/snacks/rawpastrybase = 3, + ) + tools = list(/obj/item/kitchen/efink) + result = /obj/item/reagent_containers/food/snacks/piedough + subcategory = CAT_PASTRY + /datum/crafting_recipe/food/chococornet name = "Choco cornet" reqs = list( From 1d56b9cedae1bb512f6d1e0cb7d5b52461aa66ac Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:31:46 +0200 Subject: [PATCH 087/108] E-Fink --- code/game/objects/items/kitchen.dm | 36 ++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 417fd96c85..6abbb687a0 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -100,6 +100,42 @@ "[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.")) return (BRUTELOSS) +/obj/item/kitchen/efink + name = "E-Fink" + icon_state = "efink" + desc = "The E-Fink is a product by Mending Solutions Inc. Unfortunately it can only mend sliced meat, fruits and dough back to their original state. Unbutchering is not possible." + flags_1 = CONDUCT_1 + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=12000) + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharpness = SHARP_POINTY + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + var/bayonet = FALSE //Can this be attached to a gun? + wound_bonus = -5 + bare_wound_bonus = 10 + custom_price = PRICE_NORMAL + +/obj/item/kitchen/efink/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force + +/obj/item/kitchen/efink/attack(mob/living/carbon/M, mob/living/carbon/user) + if(user.zone_selected == BODY_ZONE_PRECISE_EYES) + return eyestab(M,user) + else + return ..() + +/obj/item/kitchen/efink/suicide_act(mob/user) + user.visible_message(pick("[user] is slitting [user.p_their()] wrists with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] throat with the [src.name]! It looks like [user.p_theyre()] trying to commit suicide.", \ + "[user] is slitting [user.p_their()] stomach open with the [src.name]! It looks like [user.p_theyre()] trying to commit seppuku.")) + return (BRUTELOSS) + /obj/item/kitchen/knife/ritual name = "ritual knife" desc = "The unearthly energies that once powered this blade are now dormant." From 499111edf8d8d37a02975dca9915977ca9b60fb8 Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:33:39 +0200 Subject: [PATCH 088/108] Efink --- .../autolathe_designs_medical_and_dinnerware.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm index 574c7c9282..76b016e3de 100644 --- a/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm +++ b/code/modules/research/designs/autolathe_desings/autolathe_designs_medical_and_dinnerware.dm @@ -13,6 +13,14 @@ build_path = /obj/item/kitchen/knife category = list("initial","Dinnerware") +/datum/design/efink + name = "E-Fink" + id = "efink" + build_type = AUTOLATHE | NO_PUBLIC_LATHE + materials = list(/datum/material/iron = 12000) + build_path = /obj/item/kitchen/efink + category = list("initial","Dinnerware") + /datum/design/fork name = "Fork" id = "fork" From 7cbe105061a1d8cfcb12ef1d8d36d5b919b35045 Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:34:38 +0200 Subject: [PATCH 089/108] Efink --- code/modules/vending/dinnerware.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/vending/dinnerware.dm b/code/modules/vending/dinnerware.dm index c5b85ed61c..95fd8e04d8 100644 --- a/code/modules/vending/dinnerware.dm +++ b/code/modules/vending/dinnerware.dm @@ -7,6 +7,7 @@ /obj/item/storage/bag/tray = 8, /obj/item/kitchen/fork = 6, /obj/item/kitchen/knife = 6, + /obj/item/kitchen/efink = 2, /obj/item/kitchen/rollingpin = 4, /obj/item/kitchen/unrollingpin = 4, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, From 57d22c69627ddc8d50c584777b7a9fc56d94a19f Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:36:12 +0200 Subject: [PATCH 090/108] Typo --- .../modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm index 98a347eedd..e0eaf35353 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -4,7 +4,7 @@ ////////////////////////////////////////////////BREAD//////////////////////////////////////////////// /datum/crafting_recipe/food/bread - name = "Meat Slab" + name = "Bread" reqs = list( /obj/item/reagent_containers/food/snacks/breadslice/plain = 5, ) From 502092f284bed917e9149a34b5b82ca62a02840a Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:40:37 +0200 Subject: [PATCH 091/108] changed sound path --- code/game/objects/items/kitchen.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 6abbb687a0..2e7cef2c9f 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -108,7 +108,7 @@ force = 10 w_class = WEIGHT_CLASS_SMALL throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' + hitsound = 'sound/weapons/bladesliceb.ogg' throw_speed = 3 throw_range = 6 custom_materials = list(/datum/material/iron=12000) From 15053d8064ec4e0a94c7263281dd67f70dbf06f2 Mon Sep 17 00:00:00 2001 From: WanderingFox95 <75953558+WanderingFox95@users.noreply.github.com> Date: Mon, 17 May 2021 12:41:18 +0200 Subject: [PATCH 092/108] Backwards Blade Slash. Yeah really. --- sound/weapons/bladesliceb.ogg | Bin 0 -> 9390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 sound/weapons/bladesliceb.ogg diff --git a/sound/weapons/bladesliceb.ogg b/sound/weapons/bladesliceb.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b916363acda44674bf0c62567256d2215ef25afc GIT binary patch literal 9390 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 Date: Mon, 17 May 2021 19:04:51 +0100 Subject: [PATCH 093/108] 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)) From 780a579c7be6af83da5faf9acd94bb4606b00c93 Mon Sep 17 00:00:00 2001 From: silicons <2003111+silicons@users.noreply.github.com> Date: Mon, 17 May 2021 12:20:15 -0700 Subject: [PATCH 094/108] Update SDQL_2_wrappers.dm --- code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm index 4f518b7f8e..ca07f9a50b 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_wrappers.dm @@ -238,3 +238,9 @@ /proc/__nan() var/list/L = json_decode("{\"value\":NaN}") return L["value"] + +/** + * Wrapper to return a copy of contents, as SDQL2 can't tell an internal list from a normal list. + */ +/atom/proc/_contents() + return contents.Copy() From 9dd372ed11c1a765626d9fd50ab6979c3596bb2e Mon Sep 17 00:00:00 2001 From: qweq12yt <45515587+qweq12yt@users.noreply.github.com> Date: Mon, 17 May 2021 17:33:23 -0300 Subject: [PATCH 095/108] fix void cloak going to the void --- code/modules/antagonists/eldritch_cult/eldritch_items.dm | 7 ++++--- code/modules/mob/living/carbon/human/examine.dm | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm index 0dd9cf6bea..1f7eb4ab8b 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm @@ -218,8 +218,8 @@ flags_inv = NONE flags_cover = NONE desc = "Black like tar, doesn't reflect any light. Runic symbols line the outside, with each flash you lose comprehension of what you are seeing." - item_flags = EXAMINE_SKIP armor = list("melee" = 30, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + obj_flags = NONE | EXAMINE_SKIP /obj/item/clothing/suit/hooded/cultrobes/void name = "void cloak" @@ -242,9 +242,10 @@ //We need to account for the hood shenanigans, and that way we can make sure items always fit, even if one of the slots is used by the fucking hood. if(suittoggled) to_chat(carbon_user,"The light shifts around you making the cloak invisible!") - else + obj_flags |= EXAMINE_SKIP + else if(obj_flags & EXAMINE_SKIP) // ensures that it won't toggle visibility if raising the hood failed to_chat(carbon_user,"The kaleidoscope of colours collapses around you, as the cloak shifts to visibility!") - item_flags = suittoggled ? EXAMINE_SKIP : ~EXAMINE_SKIP + obj_flags ^= EXAMINE_SKIP else to_chat(carbon_user,"You can't force the hood onto your head!") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 31ab636ceb..aa14fe6013 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -41,10 +41,10 @@ . += "[t_He] [t_is] wearing [w_uniform.get_examine_string(user)][accessory_msg]." //head - if(head && !(head.item_flags & EXAMINE_SKIP)) + if(head && !(head.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [head.get_examine_string(user)] on [t_his] head." //suit/armor - if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) + if(wear_suit && !(wear_suit.obj_flags & EXAMINE_SKIP)) . += "[t_He] [t_is] wearing [wear_suit.get_examine_string(user)]." //suit/armor storage if(s_store && !(SLOT_S_STORE in obscured)) From ba20b5b8aa3332b2550c21f465ab43b83446f971 Mon Sep 17 00:00:00 2001 From: qweq12yt <45515587+qweq12yt@users.noreply.github.com> Date: Mon, 17 May 2021 18:48:01 -0300 Subject: [PATCH 096/108] fix emag shuttle order --- code/game/machinery/computer/communications.dm | 1 + .../mob/living/simple_animal/hostile/megafauna/bubblegum.dm | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 048247c630..d49b4e54b4 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -83,6 +83,7 @@ authorize_access = get_all_accesses() to_chat(user, "You scramble the communication routing circuits!") playsound(src, 'sound/machines/terminal_alert.ogg', 50, FALSE) + SSshuttle.shuttle_purchase_requirements_met["emagged"] = TRUE return /obj/machinery/computer/communications/ui_act(action, list/params) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index b1441ce55f..5305813ebf 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -134,7 +134,7 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/grant_achievement(medaltype,scoretype) . = ..() if(.) - SSshuttle.shuttle_purchase_requirements_met |= "bubblegum" + SSshuttle.shuttle_purchase_requirements_met["bubblegum"] = TRUE /mob/living/simple_animal/hostile/megafauna/bubblegum/do_attack_animation(atom/A, visual_effect_icon, obj/item/used_item, no_effect) if(!charging) From 79051c3e8ea97944d420cfbe44ce861ff4664a70 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 18 May 2021 00:30:35 +0000 Subject: [PATCH 097/108] Automatic changelog compile [ci skip] --- html/changelog.html | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/html/changelog.html b/html/changelog.html index 28f6ffcad4..72efb6aa06 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -754,33 +754,6 @@
  • speech panel added to main menu customization
- -

16 March 2021

-

GrayRachnid updated:

-
    -
  • removed red toolbox, agent id, and guerilla gloves from unlocking illegal tech.
  • -
-

HeroWithYay updated:

-
    -
  • fixed spelling error
  • -
-

LetterN updated:

-
    -
  • Borg light icons not turning off
  • -
  • Double ai icon select + Fixes ai core not having icons
  • -
  • Missing air tank icon
  • -
  • Computer boards being dumb and nullspacing/qdeling itself
  • -
-

Putnam3145 updated:

-
    -
  • Supernova now much lower chance to be inconsequential
  • -
  • Made hyper-nob's point values way lower (25/20 for science/cargo instead of 1000/1000)
  • -
  • Made nitryl's cargo sell value less (10 instead of 30)
  • -
-

SandPoot updated:

-
    -
  • Fixed interacting with telecomms.
  • -
GoonStation 13 Development Team From 66a72015395d8a070635b9e1e1ed903f86f38920 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 18 May 2021 17:44:27 -0500 Subject: [PATCH 098/108] Automatic changelog generation for PR #14726 [ci skip] --- html/changelogs/AutoChangeLog-pr-14726.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14726.yml diff --git a/html/changelogs/AutoChangeLog-pr-14726.yml b/html/changelogs/AutoChangeLog-pr-14726.yml new file mode 100644 index 0000000000..dab1c57bed --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14726.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - rscadd: "New Alcohol Amaretto and various cocktails" From a515911b07c264b9e8a034bddf3ebb6190c9af70 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 18 May 2021 17:44:38 -0500 Subject: [PATCH 099/108] Automatic changelog generation for PR #14727 [ci skip] --- html/changelogs/AutoChangeLog-pr-14727.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14727.yml diff --git a/html/changelogs/AutoChangeLog-pr-14727.yml b/html/changelogs/AutoChangeLog-pr-14727.yml new file mode 100644 index 0000000000..2a2ef30e21 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14727.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - rscadd: "more drink mixture flavortext" From d0c20597f15f1cdda65f0b5d0915bf6a2c50538b Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 18 May 2021 18:09:00 -0500 Subject: [PATCH 100/108] Automatic changelog generation for PR #14731 [ci skip] --- html/changelogs/AutoChangeLog-pr-14731.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14731.yml diff --git a/html/changelogs/AutoChangeLog-pr-14731.yml b/html/changelogs/AutoChangeLog-pr-14731.yml new file mode 100644 index 0000000000..c75c4b78a5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14731.yml @@ -0,0 +1,6 @@ +author: "WanderingFox95" +delete-after: True +changes: + - rscadd: "The E-Fink, a mending tool for food." + - soundadd: "A backwards bladeslice. (Yes, for the E-fink)" + - imageadd: "And Icons for the E-fink, of course." From 5fb4cb200354339430c29f71ae7e00626b1bd299 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 18 May 2021 18:09:07 -0500 Subject: [PATCH 101/108] Automatic changelog generation for PR #14730 [ci skip] --- html/changelogs/AutoChangeLog-pr-14730.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14730.yml diff --git a/html/changelogs/AutoChangeLog-pr-14730.yml b/html/changelogs/AutoChangeLog-pr-14730.yml new file mode 100644 index 0000000000..6214e6d087 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14730.yml @@ -0,0 +1,5 @@ +author: "shellspeed1" +delete-after: True +changes: + - rscadd: "Survival pods can now be designated as requiring power. Survival pods with this feature should include an APC when created and will run out of power rather quickly if no source is added. Perfect for true emergencies." + - rscadd: "An empty survival pod has been added to the mining vendor. This is an extremely barebones pod featuring only a gps, table, apc, and the standard fridge for some donk pockets." From d4b9c514a16301a094c52c41135d3c62ba55db72 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Tue, 18 May 2021 18:09:16 -0500 Subject: [PATCH 102/108] Automatic changelog generation for PR #14725 [ci skip] --- html/changelogs/AutoChangeLog-pr-14725.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14725.yml diff --git a/html/changelogs/AutoChangeLog-pr-14725.yml b/html/changelogs/AutoChangeLog-pr-14725.yml new file mode 100644 index 0000000000..e3a434ac87 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14725.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - soundadd: "you're going to Baystation" From fc31453587135881d557cd42c6a4943bcedbc13e Mon Sep 17 00:00:00 2001 From: Putnam Date: Tue, 18 May 2021 16:27:07 -0700 Subject: [PATCH 103/108] Makes antags actually get activity properly --- code/modules/antagonists/_common/antag_datum.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index 93b2e20271..ba3d8106ef 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -111,7 +111,7 @@ GLOBAL_LIST_EMPTY(antagonists) var/datum/skill_modifier/job/M = GLOB.skill_modifiers[GET_SKILL_MOD_ID(A, type)] if(istype(M)) M.name = "[name] Training" - owner.AddComponent(/datum/component/activity) + owner.current.AddComponent(/datum/component/activity) SEND_SIGNAL(owner.current, COMSIG_MOB_ANTAG_ON_GAIN, src) /datum/antagonist/proc/is_banned(mob/M) From d2c947c41449424989de1487718ccf60e4eaf1c0 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 19 May 2021 00:27:25 +0000 Subject: [PATCH 104/108] Automatic changelog compile [ci skip] --- html/changelog.html | 31 +++++++++++++--------- html/changelogs/.all_changelog.yml | 16 +++++++++++ html/changelogs/AutoChangeLog-pr-14725.yml | 4 --- html/changelogs/AutoChangeLog-pr-14726.yml | 4 --- html/changelogs/AutoChangeLog-pr-14727.yml | 4 --- html/changelogs/AutoChangeLog-pr-14730.yml | 5 ---- html/changelogs/AutoChangeLog-pr-14731.yml | 6 ----- 7 files changed, 35 insertions(+), 35 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14725.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14726.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14727.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14730.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14731.yml diff --git a/html/changelog.html b/html/changelog.html index 72efb6aa06..d5472f772f 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,25 @@ -->
+

19 May 2021

+

WanderingFox95 updated:

+
    +
  • The E-Fink, a mending tool for food.
  • +
  • A backwards bladeslice. (Yes, for the E-fink)
  • +
  • And Icons for the E-fink, of course.
  • +
+

shellspeed1 updated:

+
    +
  • Survival pods can now be designated as requiring power. Survival pods with this feature should include an APC when created and will run out of power rather quickly if no source is added. Perfect for true emergencies.
  • +
  • An empty survival pod has been added to the mining vendor. This is an extremely barebones pod featuring only a gps, table, apc, and the standard fridge for some donk pockets.
  • +
+

zeroisthebiggay updated:

+
    +
  • New Alcohol Amaretto and various cocktails
  • +
  • more drink mixture flavortext
  • +
  • you're going to Baystation
  • +
+

15 May 2021

bunny232 updated:

    @@ -742,18 +761,6 @@
  • Hypospray vials are now printable from the medical techshift start.
  • Empty hypospray kits are now printable behind biological technology. tweak: Quantum electromag (T4 lasers) are now behind Advanced Bluespace like the rest of T4.
- -

17 March 2021

-

KeRSedChaplain updated:

-
    -
  • Added three new rites, and makes soul vessels obtainable
  • -
  • fixes clockwork guardians inheriting marauders blocking
  • -
  • added sounds for the ratvar end sequence, voiced by @dzahlus
  • -
-

timothyteakettle updated:

-
    -
  • speech panel added to main menu customization
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7cdad77414..e9414f5d03 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29307,3 +29307,19 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. timothyteakettle: - balance: borg spraycans have a five second delay before being able to knock someone down again +2021-05-19: + WanderingFox95: + - rscadd: The E-Fink, a mending tool for food. + - soundadd: A backwards bladeslice. (Yes, for the E-fink) + - imageadd: And Icons for the E-fink, of course. + shellspeed1: + - rscadd: Survival pods can now be designated as requiring power. Survival pods + with this feature should include an APC when created and will run out of power + rather quickly if no source is added. Perfect for true emergencies. + - rscadd: An empty survival pod has been added to the mining vendor. This is an + extremely barebones pod featuring only a gps, table, apc, and the standard fridge + for some donk pockets. + zeroisthebiggay: + - rscadd: New Alcohol Amaretto and various cocktails + - rscadd: more drink mixture flavortext + - soundadd: you're going to Baystation diff --git a/html/changelogs/AutoChangeLog-pr-14725.yml b/html/changelogs/AutoChangeLog-pr-14725.yml deleted file mode 100644 index e3a434ac87..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14725.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zeroisthebiggay" -delete-after: True -changes: - - soundadd: "you're going to Baystation" diff --git a/html/changelogs/AutoChangeLog-pr-14726.yml b/html/changelogs/AutoChangeLog-pr-14726.yml deleted file mode 100644 index dab1c57bed..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14726.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zeroisthebiggay" -delete-after: True -changes: - - rscadd: "New Alcohol Amaretto and various cocktails" diff --git a/html/changelogs/AutoChangeLog-pr-14727.yml b/html/changelogs/AutoChangeLog-pr-14727.yml deleted file mode 100644 index 2a2ef30e21..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14727.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zeroisthebiggay" -delete-after: True -changes: - - rscadd: "more drink mixture flavortext" diff --git a/html/changelogs/AutoChangeLog-pr-14730.yml b/html/changelogs/AutoChangeLog-pr-14730.yml deleted file mode 100644 index 6214e6d087..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14730.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "shellspeed1" -delete-after: True -changes: - - rscadd: "Survival pods can now be designated as requiring power. Survival pods with this feature should include an APC when created and will run out of power rather quickly if no source is added. Perfect for true emergencies." - - rscadd: "An empty survival pod has been added to the mining vendor. This is an extremely barebones pod featuring only a gps, table, apc, and the standard fridge for some donk pockets." diff --git a/html/changelogs/AutoChangeLog-pr-14731.yml b/html/changelogs/AutoChangeLog-pr-14731.yml deleted file mode 100644 index c75c4b78a5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14731.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "WanderingFox95" -delete-after: True -changes: - - rscadd: "The E-Fink, a mending tool for food." - - soundadd: "A backwards bladeslice. (Yes, for the E-fink)" - - imageadd: "And Icons for the E-fink, of course." From 3a28e8a7edaf929eaf88bae588ac70190307e3c9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 19 May 2021 09:03:02 -0500 Subject: [PATCH 105/108] Automatic changelog generation for PR #14653 [ci skip] --- html/changelogs/AutoChangeLog-pr-14653.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14653.yml diff --git a/html/changelogs/AutoChangeLog-pr-14653.yml b/html/changelogs/AutoChangeLog-pr-14653.yml new file mode 100644 index 0000000000..4e8652eaf6 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14653.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "ports rp's marking system" From a8b5484b48c93e8781ecc7740b4fa99e00cabfd9 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 19 May 2021 14:49:03 -0500 Subject: [PATCH 106/108] Automatic changelog generation for PR #14733 [ci skip] --- html/changelogs/AutoChangeLog-pr-14733.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14733.yml diff --git a/html/changelogs/AutoChangeLog-pr-14733.yml b/html/changelogs/AutoChangeLog-pr-14733.yml new file mode 100644 index 0000000000..807a92d285 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14733.yml @@ -0,0 +1,5 @@ +author: "qweq12yt" +delete-after: True +changes: + - bugfix: "Fixed void cloak voiding itself into oblivion." + - bugfix: "You can now order emag shuttles again." From f3024d48ea5e5b83855a4c08bb29b9b5cbf5e582 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 20 May 2021 00:27:46 +0000 Subject: [PATCH 107/108] Automatic changelog compile [ci skip] --- html/changelog.html | 22 +++++++++++----------- html/changelogs/.all_changelog.yml | 6 ++++++ html/changelogs/AutoChangeLog-pr-14653.yml | 4 ---- html/changelogs/AutoChangeLog-pr-14733.yml | 5 ----- 4 files changed, 17 insertions(+), 20 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-14653.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-14733.yml diff --git a/html/changelog.html b/html/changelog.html index d5472f772f..19aaf87564 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,17 @@ -->
+

20 May 2021

+

qweq12yt updated:

+
    +
  • Fixed void cloak voiding itself into oblivion.
  • +
  • You can now order emag shuttles again.
  • +
+

timothyteakettle updated:

+
    +
  • ports rp's marking system
  • +
+

19 May 2021

WanderingFox95 updated:

    @@ -750,17 +761,6 @@
    • fixes spriteless heretic book
    - -

    18 March 2021

    -

    Arturlang updated:

    -
      -
    • Combat mode right click and right click verb give's are now actualyl targeted
    • -
    -

    Hatterhat updated:

    -
      -
    • Hypospray vials are now printable from the medical techshift start.
    • -
    • Empty hypospray kits are now printable behind biological technology. tweak: Quantum electromag (T4 lasers) are now behind Advanced Bluespace like the rest of T4.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index e9414f5d03..4bf762d148 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29323,3 +29323,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: New Alcohol Amaretto and various cocktails - rscadd: more drink mixture flavortext - soundadd: you're going to Baystation +2021-05-20: + qweq12yt: + - bugfix: Fixed void cloak voiding itself into oblivion. + - bugfix: You can now order emag shuttles again. + timothyteakettle: + - rscadd: ports rp's marking system diff --git a/html/changelogs/AutoChangeLog-pr-14653.yml b/html/changelogs/AutoChangeLog-pr-14653.yml deleted file mode 100644 index 4e8652eaf6..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14653.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "timothyteakettle" -delete-after: True -changes: - - rscadd: "ports rp's marking system" diff --git a/html/changelogs/AutoChangeLog-pr-14733.yml b/html/changelogs/AutoChangeLog-pr-14733.yml deleted file mode 100644 index 807a92d285..0000000000 --- a/html/changelogs/AutoChangeLog-pr-14733.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "qweq12yt" -delete-after: True -changes: - - bugfix: "Fixed void cloak voiding itself into oblivion." - - bugfix: "You can now order emag shuttles again." From 743a4f02d69860009118fe18bd0f7ace83ca4270 Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Thu, 20 May 2021 13:33:53 -0500 Subject: [PATCH 108/108] Automatic changelog generation for PR #14738 [ci skip] --- html/changelogs/AutoChangeLog-pr-14738.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-14738.yml diff --git a/html/changelogs/AutoChangeLog-pr-14738.yml b/html/changelogs/AutoChangeLog-pr-14738.yml new file mode 100644 index 0000000000..5c51f8929b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14738.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - bugfix: "Fixed activity being attached to minds instead of mobs on antag attach."
[marking_list[2]] - [actual_name] ˄ ˅ X [color_marking_dat]