diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 63054e533b1bf..054a08743acc8 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -148,12 +148,18 @@ DEFINE_BITFIELD(no_equip_flags, list( #define DIGITIGRADE_STYLE 2 //Flags (actual flags, fucker ^) for /obj/item/var/supports_variations_flags -///No alternative sprites based on bodytype +/// No alternative sprites or handling based on bodytype #define CLOTHING_NO_VARIATION (1<<0) -///Has a sprite for digitigrade legs specifically. +/// Has a sprite for digitigrade legs specifically. #define CLOTHING_DIGITIGRADE_VARIATION (1<<1) -///The sprite works fine for digitigrade legs as-is. +/// The sprite works fine for digitigrade legs as-is. #define CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON (1<<2) +/// Auto-generates the leg portion of the sprite with GAGS +/// Suggested that you set [/obj/item/var/digitigrade_greyscale_config_worn] when using this flag +#define CLOTHING_DIGITIGRADE_MASK (1<<3) + +/// All variation flags which render "correctly" on a digitigrade leg setup +#define DIGITIGRADE_VARIATIONS (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON|CLOTHING_DIGITIGRADE_MASK) //flags for covering body parts #define GLASSESCOVERSEYES (1<<0) diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index a740a2bc887e5..833d2d546a718 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -100,6 +100,15 @@ ///The limb is snouted. #define BODYSHAPE_SNOUTED (1<<3) +/// DOPPLER SHIFT ADDITION BEGIN +// This is where our custom bodyshapes are going to go. Keeping these in one place is critical for readability. +/// BREAKER: Numeric -> text for use in defines +#define BODYSHAPE_HUMANOID_T "1" +#define BODYSHAPE_MONKEY_T "2" +#define BODYSHAPE_DIGITIGRADE_T "4" +#define BODYSHAPE_SNOUTED_T "8" +/// DOPPLER SHIFT ADDITIO NEND + #define BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE (BODYTYPE_ROBOTIC | BODYTYPE_LARVA_PLACEHOLDER | BODYTYPE_GOLEM | BODYTYPE_PEG) #define BODYTYPE_CAN_BE_BIOSCRAMBLED(bodytype) (!(bodytype & BODYTYPE_BIOSCRAMBLE_INCOMPATIBLE)) diff --git a/code/__DEFINES/overlays.dm b/code/__DEFINES/overlays.dm index b95a460168f19..a3318e7fda050 100644 --- a/code/__DEFINES/overlays.dm +++ b/code/__DEFINES/overlays.dm @@ -1,6 +1,6 @@ // A reasonable number of maximum overlays an object needs // If you think you need more, rethink it -#define MAX_ATOM_OVERLAYS 100 +#define MAX_ATOM_OVERLAYS 200 /// DOPPLER SHIFT EDIT: 200, up from 100 /// Checks if an atom has reached the overlay limit, and make a loud error if it does. #define VALIDATE_OVERLAY_LIMIT(changed_on) \ diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 27c0d27ec2e92..8db59bccc3532 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -442,6 +442,7 @@ DEFINE_BITFIELD(supports_variations_flags, list( "CLOTHING_NO_VARIATION" = CLOTHING_NO_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION" = CLOTHING_DIGITIGRADE_VARIATION, "CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON" = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON, + "CLOTHING_DIGITIGRADE_MASK" = CLOTHING_DIGITIGRADE_MASK, )) DEFINE_BITFIELD(flora_flags, list( diff --git a/code/datums/elements/gags_recolorable.dm b/code/datums/elements/gags_recolorable.dm index c59b314ee96c1..40967d6c308e5 100644 --- a/code/datums/elements/gags_recolorable.dm +++ b/code/datums/elements/gags_recolorable.dm @@ -33,7 +33,11 @@ allowed_configs += "[config]" if(isitem(target)) var/obj/item/item = target - if(initial(item.greyscale_config_worn)) + /// DOPPLER SHIFT ADDITION BEGIN + if(initial(item.greyscale_config_worn_bodyshapes)) + for(var/bconfig in item.greyscale_config_worn_bodyshapes) + allowed_configs += "[initial(item.greyscale_config_worn_bodyshapes[bconfig])]" + else if(initial(item.greyscale_config_worn)) /// DOPPLER SHIFT EDIT END allowed_configs += "[initial(item.greyscale_config_worn)]" if(initial(item.greyscale_config_inhand_left)) allowed_configs += "[initial(item.greyscale_config_inhand_left)]" diff --git a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm index 377a2fa16938e..bdc2a7d2928c5 100644 --- a/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm +++ b/code/datums/greyscale/config_types/greyscale_configs/greyscale_clothes.dm @@ -276,6 +276,11 @@ icon_file = 'icons/mob/inhands/clothing/suits_righthand.dmi' json_config = 'code/datums/greyscale/json_configs/jumpsuit_prison_inhand.json' +/datum/greyscale_config/jumpsuit/worn_digi + name = "Jumpsuit Worn (Digitigrate)" + icon_file = 'icons/mob/clothing/under/digi_template.dmi' + json_config = 'code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json' + /datum/greyscale_config/eth_tunic name = "Ethereal Tunic" icon_file = 'icons/obj/clothing/under/ethereal.dmi' diff --git a/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json b/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json new file mode 100644 index 0000000000000..9aa201cece3c1 --- /dev/null +++ b/code/datums/greyscale/json_configs/jumpsuit_worn_digilegs.json @@ -0,0 +1,10 @@ +{ + "": [ + { + "type": "icon_state", + "icon_state": "jumpsuit", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 12adcf15c22f7..8ee5e171f3d2e 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -39,6 +39,31 @@ ///The config type to use for greyscaled belt overlays. Both this and greyscale_colors must be assigned to work. var/greyscale_config_belt + /// Greyscale config used when generating digitigrade versions of the sprite. + var/digitigrade_greyscale_config_worn + /// Greyscale colors used when generating digitigrade versions of the sprite. + /// Optional - If not set it will default to normal greyscale colors, or approximate them if those are unset as well + var/digitigrade_greyscale_colors + + /// DOPPLER SHIFT ADDITION BEGIN + // A list to take the place of GREYSCALE_CONFIG_WORN used for alternate bodyshapes (e.g, Digitigrade) + // Use bodyshape IDs as the keys to a greyscale config for the alternate version. + // For instance, greyscale_config_worn_bodyshapes[BODYSHAPE_DIGITIGRADE] = /datum/greyscale_config/trek/worn_digi + // If you include multiple variants, make sure to include the default value of the worn config as BODYSHAPE_HUMANOID. + // This helps avoid Fuckery(tm) with dyes, changelings, chameleons, etc. + var/list/greyscale_config_worn_bodyshapes + /// Used with the above to help switch between greyscale configs cleanly and avoid Fuckery(tm). + var/greyscale_config_last_bodyshape + + /// Used with both greyscales and eventually icon_state variants to allow MOAR BODYSHAPES + // this needs to contain a list of supported numerical IDs and be ordered in TOP PRIORITY to BOTTOM PRIORITY (e.g, DigiFemme > Digi > Femme > Normal) + var/list/supported_bodyshapes + /// Used to pick alternative worn_icon files + // See above; sort by TOP PRIORITY to BOTTOM PRIORITY with the bodyshapes as keys (DIGI | FEMME > DIGI > FEMME > HUMANOID) + // !!KEYS IN THIS SHOULD BE IDENTICAL TO SUPPORTED_BODYSHAPES!! + var/list/bodyshape_icon_files + /// DOPPLER SHIFT ADDITION END + /* !!!!!!!!!!!!!!! IMPORTANT !!!!!!!!!!!!!! IF YOU ADD MORE ICON CRAP TO THIS @@ -407,7 +432,15 @@ . = ..() if(!greyscale_colors) return - if(greyscale_config_worn) + /// DOPPLER SHIFT ADDITION BEGIN + if(greyscale_config_worn_bodyshapes && greyscale_config_last_bodyshape) + if(greyscale_config_worn_bodyshapes[greyscale_config_last_bodyshape]) + greyscale_config_worn = greyscale_config_worn_bodyshapes[greyscale_config_last_bodyshape] + bodyshape_icon_files["[greyscale_config_last_bodyshape]"] = SSgreyscale.GetColoredIconByType(greyscale_config_worn, greyscale_colors) + worn_icon = bodyshape_icon_files["[greyscale_config_last_bodyshape]"] + else + worn_icon = SSgreyscale.GetColoredIconByType(greyscale_config_worn, greyscale_colors) + else if(greyscale_config_worn) /// DOPPLER SHIFT EDIT END worn_icon = SSgreyscale.GetColoredIconByType(greyscale_config_worn, greyscale_colors) if(greyscale_config_inhand_left) lefthand_file = SSgreyscale.GetColoredIconByType(greyscale_config_inhand_left, greyscale_colors) @@ -717,6 +750,14 @@ * polling ghosts while it's just being equipped as a visual preview for a dummy. */ /obj/item/proc/visual_equipped(mob/user, slot, initial = FALSE) + /// DOPPLER SHIFT ADDITION BEGIN + if(ishuman(user)) + var/mob/living/carbon/human/humie = user + for(var/shape in supported_bodyshapes) + if(humie.bodyshape & shape) + greyscale_config_last_bodyshape = "[shape]" + update_greyscale() + /// DOPPLER SHIFT ADDITION END return /** diff --git a/code/game/objects/items/storage/garment.dm b/code/game/objects/items/storage/garment.dm index 65dda7b65ead2..e97e9ab3d8b49 100644 --- a/code/game/objects/items/storage/garment.dm +++ b/code/game/objects/items/storage/garment.dm @@ -43,7 +43,7 @@ atom_storage.max_specific_storage = WEIGHT_CLASS_NORMAL atom_storage.numerical_stacking = FALSE atom_storage.max_total_storage = 200 - atom_storage.max_slots = 15 + atom_storage.max_slots = 21 /// DOPPLER EDIT - 21, up from 15 atom_storage.insert_preposition = "in" atom_storage.set_holdable(/obj/item/clothing) diff --git a/code/game/objects/structures/mannequin.dm b/code/game/objects/structures/mannequin.dm index a47802273d5a0..afad19b27114f 100644 --- a/code/game/objects/structures/mannequin.dm +++ b/code/game/objects/structures/mannequin.dm @@ -98,15 +98,15 @@ var/datum/sprite_accessory/underwear/underwear = SSaccessories.underwear_list[underwear_name] if(underwear) if(body_type == FEMALE && underwear.gender == MALE) - . += wear_female_version(underwear.icon_state, underwear.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) + . += mutable_appearance(wear_female_version(underwear.icon_state, underwear.icon, FEMALE_UNIFORM_FULL), layer = -BODY_LAYER) else - . += mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) + . += mutable_appearance(underwear.icon, underwear.icon_state, layer = -BODY_LAYER) var/datum/sprite_accessory/undershirt/undershirt = SSaccessories.undershirt_list[undershirt_name] if(undershirt) if(body_type == FEMALE) - . += wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + . += mutable_appearance(wear_female_version(undershirt.icon_state, undershirt.icon), layer = -BODY_LAYER) else - . += mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + . += mutable_appearance(undershirt.icon, undershirt.icon_state, layer = -BODY_LAYER) var/datum/sprite_accessory/socks/socks = SSaccessories.socks_list[socks_name] if(socks) . += mutable_appearance(socks.icon, socks.icon_state, -BODY_LAYER) diff --git a/code/modules/clothing/chameleon/_chameleon_action.dm b/code/modules/clothing/chameleon/_chameleon_action.dm index 7d11355791bde..25d6744152156 100644 --- a/code/modules/clothing/chameleon/_chameleon_action.dm +++ b/code/modules/clothing/chameleon/_chameleon_action.dm @@ -135,6 +135,16 @@ item_target.lefthand_file = initial(picked_item.lefthand_file) item_target.righthand_file = initial(picked_item.righthand_file) + /// DOPPLER SHIFT ADDITION BEGIN + item_target.supported_bodyshapes = picked_item.supported_bodyshapes + item_target.bodyshape_icon_files = picked_item.bodyshape_icon_files + if(ishuman(owner)) + var/mob/living/carbon/human/humie = owner + for(var/shape in picked_item.supported_bodyshapes) + if(humie.bodyshape & shape) + item_target.worn_icon = picked_item.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + item_target.worn_icon_state = initial(picked_item.worn_icon_state) item_target.inhand_icon_state = initial(picked_item.inhand_icon_state) @@ -154,6 +164,18 @@ initial(picked_item.greyscale_config_inhand_right), initial(picked_item.greyscale_colors), ) + /// DOPPLER SHIFT ADDITION BEGIN - the necessary sacrifice to chameleon clothing + if(initial(picked_item.greyscale_config_worn_bodyshapes) && initial(picked_item.greyscale_colors)) + item_target.greyscale_config_worn_bodyshapes = picked_item.greyscale_config_worn_bodyshapes + if(ishuman(owner)) + var/mob/living/carbon/human/humie = owner + var/altbody + for(var/shape in picked_item.supported_bodyshapes) + if(humie.bodyshape & shape) + altbody = picked_item.greyscale_config_worn_bodyshapes["[shape]"] + item_target.bodyshape_icon_files["[shape]"] = SSgreyscale.GetColoredIconByType(altbody, initial(picked_item.greyscale_colors)) + item_target.worn_icon = item_target.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END item_target.flags_inv = initial(picked_item.flags_inv) item_target.transparent_protection = initial(picked_item.transparent_protection) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index 2168177abcba1..c3505b4285dc9 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -8,6 +8,8 @@ slot_flags = ITEM_SLOT_ICLOTHING interaction_flags_click = NEED_DEXTERITY armor_type = /datum/armor/clothing_under + supports_variations_flags = CLOTHING_DIGITIGRADE_MASK + digitigrade_greyscale_config_worn = /datum/greyscale_config/jumpsuit/worn_digi equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' @@ -85,7 +87,8 @@ context[SCREENTIP_CONTEXT_LMB] = "Repair suit sensors" changed = TRUE - if(can_adjust && adjusted != DIGITIGRADE_STYLE) + //if(can_adjust && adjusted != DIGITIGRADE_STYLE) /// DOPPLER SHIFT REMOVAL + if(can_adjust) /// DOPPLER SHIFT REPLACEMENT context[SCREENTIP_CONTEXT_ALT_LMB] = "Wear [adjusted == ALT_STYLE ? "normally" : "casually"]" changed = TRUE @@ -162,11 +165,15 @@ if(adjusted == ALT_STYLE) adjust_to_normal() + /// DOPPLER SHFIT REMOVAL BEGIN + /* if((supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION) && ishuman(user)) var/mob/living/carbon/human/wearer = user if(wearer.bodyshape & BODYSHAPE_DIGITIGRADE) adjusted = DIGITIGRADE_STYLE - update_appearance() + update_appearance() + */ + /// DOPPLER SHIFT REMOVAL END /obj/item/clothing/under/equipped(mob/living/user, slot) ..() @@ -407,8 +414,10 @@ /// Returns the new state /obj/item/clothing/under/proc/toggle_jumpsuit_adjust() switch(adjusted) - if(DIGITIGRADE_STYLE) - return + /// DOPPLER SHIFT REMOVAL BEGIN + /*if(DIGITIGRADE_STYLE) + return*/ + /// DOPPLER SHIFT REMOVAL END if(NORMAL_STYLE) adjust_to_alt() diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 748e697415c54..9ae1c7d63e366 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -224,6 +224,7 @@ greyscale_config_inhand_left = null greyscale_config_inhand_right = null greyscale_config_worn = null + digitigrade_greyscale_colors = "#3f3f3f" can_adjust = FALSE flags_1 = NONE diff --git a/code/modules/clothing/under/jobs/cargo.dm b/code/modules/clothing/under/jobs/cargo.dm index f6f1ac94cb81c..1faa4ab06648f 100644 --- a/code/modules/clothing/under/jobs/cargo.dm +++ b/code/modules/clothing/under/jobs/cargo.dm @@ -30,6 +30,10 @@ inhand_icon_state = "lb_suit" body_parts_covered = CHEST|GROIN|ARMS supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + /// DOPPLER SHIFT ADDITION BEGIN + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = DEFAULT_UNIFORM_FILE, BODYSHAPE_DIGITIGRADE_T = DIGITIGRADE_UNIFORM_FILE) + /// DOPPLER SHIFT ADDITION END /obj/item/clothing/under/rank/cargo/tech/skirt name = "cargo technician's skirt" diff --git a/code/modules/clothing/under/jobs/civilian/clown_mime.dm b/code/modules/clothing/under/jobs/civilian/clown_mime.dm index 98571182f2928..55f0da88918b5 100644 --- a/code/modules/clothing/under/jobs/civilian/clown_mime.dm +++ b/code/modules/clothing/under/jobs/civilian/clown_mime.dm @@ -31,6 +31,7 @@ inhand_icon_state = "clown" female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY can_adjust = FALSE + supports_variations_flags = CLOTHING_NO_VARIATION /obj/item/clothing/under/rank/civilian/clown/Initialize(mapload) . = ..() diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 8f1263fa3e2b2..81002bd8a9e2d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -33,6 +33,7 @@ desc = "Groovy!" icon_state = "psyche" inhand_icon_state = "p_suit" + digitigrade_greyscale_colors = "#3f3f3f" /obj/item/clothing/under/misc/vice_officer name = "vice officer's jumpsuit" diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index a995eafbb3ac0..f587b9d00160c 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -162,3 +162,6 @@ Des: Removes all infected images from the alien. /mob/living/carbon/alien/proc/update_alien_speed() add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/alien_speed, multiplicative_slowdown = alien_speed) + +/mob/living/carbon/alien/get_footprint_sprite() + return FOOTPRINT_SPRITE_CLAWS diff --git a/code/modules/mob/living/carbon/human/_species.dm b/code/modules/mob/living/carbon/human/_species.dm index 4b12e8d42287d..5ed52fd84b628 100644 --- a/code/modules/mob/living/carbon/human/_species.dm +++ b/code/modules/mob/living/carbon/human/_species.dm @@ -495,7 +495,7 @@ GLOBAL_LIST_EMPTY(features_by_species) var/mutable_appearance/underwear_overlay if(underwear) if(species_human.dna.species.sexes && species_human.physique == FEMALE && (underwear.gender == MALE)) - underwear_overlay = wear_female_version(underwear.icon_state, underwear.icon, BODY_LAYER, FEMALE_UNIFORM_FULL) + underwear_overlay = mutable_appearance(wear_female_version(underwear.icon_state, underwear.icon, FEMALE_UNIFORM_FULL), layer = -BODY_LAYER) else underwear_overlay = mutable_appearance(underwear.icon, underwear.icon_state, -BODY_LAYER) if(!underwear.use_static) @@ -507,9 +507,9 @@ GLOBAL_LIST_EMPTY(features_by_species) if(undershirt) var/mutable_appearance/working_shirt if(species_human.dna.species.sexes && species_human.physique == FEMALE) - working_shirt = wear_female_version(undershirt.icon_state, undershirt.icon, BODY_LAYER) + working_shirt = mutable_appearance(wear_female_version(undershirt.icon_state, undershirt.icon), layer = -BODY_LAYER) else - working_shirt = mutable_appearance(undershirt.icon, undershirt.icon_state, -BODY_LAYER) + working_shirt = mutable_appearance(undershirt.icon, undershirt.icon_state, layer = -BODY_LAYER) standing += working_shirt if(species_human.socks && species_human.num_legs >= 2 && !(species_human.bodyshape & BODYSHAPE_DIGITIGRADE)) @@ -629,7 +629,7 @@ GLOBAL_LIST_EMPTY(features_by_species) if(H.num_legs < 2) return FALSE if((H.bodyshape & BODYSHAPE_DIGITIGRADE) && !(I.item_flags & IGNORE_DIGITIGRADE)) - if(!(I.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) + if(!((I.supports_variations_flags & DIGITIGRADE_VARIATIONS) || (BODYSHAPE_DIGITIGRADE in I.supported_bodyshapes))) /// DOPPLER SHIFT EDIT if(!disable_warning) to_chat(H, span_warning("The footwear around here isn't compatible with your feet!")) return FALSE @@ -1863,8 +1863,8 @@ GLOBAL_LIST_EMPTY(features_by_species) var/list/final_bodypart_overrides = new_species.bodypart_overrides.Copy() if((new_species.digitigrade_customization == DIGITIGRADE_OPTIONAL && target.dna.features["legs"] == DIGITIGRADE_LEGS) || new_species.digitigrade_customization == DIGITIGRADE_FORCED) - final_bodypart_overrides[BODY_ZONE_R_LEG] = /obj/item/bodypart/leg/right/digitigrade - final_bodypart_overrides[BODY_ZONE_L_LEG] = /obj/item/bodypart/leg/left/digitigrade + final_bodypart_overrides[BODY_ZONE_R_LEG] = new_species.digi_leg_overrides[BODY_ZONE_R_LEG] /// DOPPLER SHIFT EDIT: allows digilegs to be overridden + final_bodypart_overrides[BODY_ZONE_L_LEG] = new_species.digi_leg_overrides[BODY_ZONE_L_LEG] /// DOPPLER SHIFT EDIT: allows digilegs to be overridden for(var/obj/item/bodypart/old_part as anything in target.bodyparts) if((old_part.change_exempt_flags & BP_BLOCK_CHANGE_SPECIES) || (old_part.bodypart_flags & BODYPART_IMPLANTED)) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index e9553cc2e3efc..fc23160ac013e 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -109,11 +109,17 @@ There are several things that need to be remembered: var/handled_by_bodyshape = TRUE var/icon_file var/woman + /// DOPPLER ADDITION BEGIN + for(var/shape in uniform.supported_bodyshapes) + if(bodyshape & shape) + icon_file = uniform.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT REMOVAL BEGIN //BEGIN SPECIES HANDLING - if((bodyshape & BODYSHAPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) - icon_file = DIGITIGRADE_UNIFORM_FILE + /*if((bodyshape & BODYSHAPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION)) + icon_file = DIGITIGRADE_UNIFORM_FILE*/ + /// DOPPLER SHIFT REMOVAL END //Female sprites have lower priority than digitigrade sprites - else if(dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh + if(dna.species.sexes && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(uniform.female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh /// DOPPLER SHIFT EDIT END woman = TRUE if(!icon_exists(icon_file, RESOLVE_ICON_STATE(uniform))) @@ -128,6 +134,7 @@ There are several things that need to be remembered: female_uniform = woman ? uniform.female_sprite_flags : null, override_state = target_overlay, override_file = handled_by_bodyshape ? icon_file : null, + humie = src, /// DOPPLER SHIFT ADDITION ) var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) @@ -155,7 +162,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/id.dmi' - id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in wear_id.supported_bodyshapes) + if(bodyshape & shape) + icon_file = wear_id.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + id_overlay = wear_id.build_worn_icon(default_layer = ID_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT if(!id_overlay) return @@ -200,7 +213,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/hands.dmi' - var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in gloves.supported_bodyshapes) + if(bodyshape & shape) + icon_file = gloves.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/gloves_overlay = gloves.build_worn_icon(default_layer = GLOVES_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/feature_y_offset = 0 //needs to be typed, hand_bodyparts can have nulls @@ -237,7 +256,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/eyes.dmi' - var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in glasses.supported_bodyshapes) + if(bodyshape & shape) + icon_file = glasses.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/glasses_overlay = glasses.build_worn_icon(default_layer = GLASSES_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT my_head.worn_glasses_offset?.apply_offset(glasses_overlay) overlays_standing[GLASSES_LAYER] = glasses_overlay apply_overlay(GLASSES_LAYER) @@ -266,7 +291,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/ears.dmi' - var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in ears.supported_bodyshapes) + if(bodyshape & shape) + icon_file = ears.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/ears_overlay = ears.build_worn_icon(default_layer = EARS_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT my_head.worn_ears_offset?.apply_offset(ears_overlay) overlays_standing[EARS_LAYER] = ears_overlay apply_overlay(EARS_LAYER) @@ -290,7 +321,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/neck.dmi' - var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in worn_item.supported_bodyshapes) + if(bodyshape & shape) + icon_file = worn_item.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/neck_overlay = worn_item.build_worn_icon(default_layer = NECK_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_belt_offset?.apply_offset(neck_overlay) overlays_standing[NECK_LAYER] = neck_overlay @@ -319,7 +356,13 @@ There are several things that need to be remembered: var/icon_file = DEFAULT_SHOES_FILE - var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in shoes.supported_bodyshapes) + if(bodyshape & shape) + icon_file = shoes.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/shoes_overlay = shoes.build_worn_icon(default_layer = SHOES_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT if(!shoes_overlay) return @@ -357,7 +400,15 @@ There are several things that need to be remembered: if(check_obscured_slots(transparent_protection = TRUE) & ITEM_SLOT_SUITSTORE) return - var/mutable_appearance/s_store_overlay = worn_item.build_worn_icon(default_layer = SUIT_STORE_LAYER, default_icon_file = 'icons/mob/clothing/belt_mirror.dmi') + /// DOPPLER SHIFT ADDITION BEGIN + var/icon_file = 'icons/mob/clothing/belt_mirror.dmi' + + for(var/shape in worn_item.supported_bodyshapes) + if(bodyshape & shape) + icon_file = worn_item.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/s_store_overlay = worn_item.build_worn_icon(default_layer = SUIT_STORE_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_suit_storage_offset?.apply_offset(s_store_overlay) overlays_standing[SUIT_STORE_LAYER] = s_store_overlay @@ -381,7 +432,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/head/default.dmi' - var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in head.supported_bodyshapes) + if(bodyshape & shape) + icon_file = head.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/head_overlay = head.build_worn_icon(default_layer = HEAD_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/head/my_head = get_bodypart(BODY_ZONE_HEAD) my_head?.worn_head_offset?.apply_offset(head_overlay) overlays_standing[HEAD_LAYER] = head_overlay @@ -407,7 +464,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/belt.dmi' - var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in belt.supported_bodyshapes) + if(bodyshape & shape) + icon_file = belt.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/belt_overlay = belt.build_worn_icon(default_layer = BELT_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_belt_offset?.apply_offset(belt_overlay) overlays_standing[BELT_LAYER] = belt_overlay @@ -430,7 +493,13 @@ There are several things that need to be remembered: var/icon_file = DEFAULT_SUIT_FILE - var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in wear_suit.supported_bodyshapes) + if(bodyshape & shape) + icon_file = wear_suit.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/suit_overlay = wear_suit.build_worn_icon(default_layer = SUIT_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST) my_chest?.worn_suit_offset?.apply_offset(suit_overlay) overlays_standing[SUIT_LAYER] = suit_overlay @@ -482,7 +551,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/mask.dmi' - var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in wear_mask.supported_bodyshapes) + if(bodyshape & shape) + icon_file = wear_mask.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + var/mutable_appearance/mask_overlay = wear_mask.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT my_head.worn_mask_offset?.apply_offset(mask_overlay) overlays_standing[FACEMASK_LAYER] = mask_overlay @@ -506,7 +581,13 @@ There are several things that need to be remembered: var/icon_file = 'icons/mob/clothing/back.dmi' - back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file) + /// DOPPLER SHIFT ADDITION BEGIN + for(var/shape in worn_item.supported_bodyshapes) + if(bodyshape & shape) + icon_file = worn_item.bodyshape_icon_files["[shape]"] + /// DOPPLER SHIFT ADDITION END + + back_overlay = back.build_worn_icon(default_layer = BACK_LAYER, default_icon_file = icon_file, humie = src) /// DOPPLER SHIFT EDIT if(!back_overlay) return @@ -539,19 +620,79 @@ There are several things that need to be remembered: var/mutable_appearance/hand_overlay var/icon_file = held_index % 2 == 0 ? worn_item.righthand_file : worn_item.lefthand_file - hand_overlay = worn_item.build_worn_icon(default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) + hand_overlay = worn_item.build_worn_icon(default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE, humie = src) /// DOPPLER SHIFT EDIT var/obj/item/bodypart/arm/held_in_hand = hand_bodyparts[held_index] held_in_hand?.held_hand_offset?.apply_offset(hand_overlay) hands += hand_overlay return hands -/proc/wear_female_version(t_color, icon, layer, type, greyscale_colors) - var/index = "[t_color]-[greyscale_colors]" - var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] - if(!female_clothing_icon) //Create standing/laying icons if they don't exist - generate_female_clothing(index, t_color, icon, type) - return mutable_appearance(GLOB.female_clothing_icons[index], layer = -layer) +/// Modifies a sprite slightly to conform to female body shapes +/proc/wear_female_version(icon_state, icon, type, greyscale_colors) + var/index = "[icon_state]-[greyscale_colors]" + var/static/list/female_clothing_icons = list() + var/icon/female_clothing_icon = female_clothing_icons[index] + if(!female_clothing_icon) //Create standing/laying icons if they don't exist + var/female_icon_state = "female[type == FEMALE_UNIFORM_FULL ? "_full" : ((!type || type & FEMALE_UNIFORM_TOP_ONLY) ? "_top" : "")][type & FEMALE_UNIFORM_NO_BREASTS ? "_no_breasts" : ""]" + var/icon/female_cropping_mask = icon('icons/mob/clothing/under/masking_helpers.dmi', female_icon_state) + female_clothing_icon = icon(icon, icon_state) + female_clothing_icon.Blend(female_cropping_mask, ICON_MULTIPLY) + female_clothing_icon = fcopy_rsc(female_clothing_icon) + female_clothing_icons[index] = female_clothing_icon + + return icon(female_clothing_icon) + +// These coordonates point to roughly somewhere in the middle of the left leg +// Used in approximating what color the pants of clothing should be +#define LEG_SAMPLE_X_LOWER 13 +#define LEG_SAMPLE_X_UPPER 14 + +#define LEG_SAMPLE_Y_LOWER 8 +#define LEG_SAMPLE_Y_UPPER 9 + +/// Modifies a sprite to conform to digitigrade body shapes +/proc/wear_digi_version(icon/base_icon, key, greyscale_config = /datum/greyscale_config/jumpsuit/worn_digi, greyscale_colors) + ASSERT(key, "wear_digi_version: no key passed") + ASSERT(ispath(greyscale_config, /datum/greyscale_config), "wear_digi_version: greyscale_config is not a valid path (got: [greyscale_config])") + // items with greyscale colors containing multiple colors are invalid + if(isnull(greyscale_colors) || length(SSgreyscale.ParseColorString(greyscale_colors)) > 1) + var/pant_color + // approximates the color of the pants by sampling a few pixels in the middle of the left leg + for(var/x in LEG_SAMPLE_X_LOWER to LEG_SAMPLE_X_UPPER) + for(var/y in LEG_SAMPLE_Y_LOWER to LEG_SAMPLE_Y_UPPER) + var/xy_color = base_icon.GetPixel(x, y) + pant_color = pant_color ? BlendRGB(pant_color, xy_color, 0.5) : xy_color + + greyscale_colors = pant_color || "#1d1d1d" // black pants always look good + + var/index = "[key]-[greyscale_config]-[greyscale_colors]" + var/static/list/digitigrade_clothing_icons = list() + var/icon/digitigrade_clothing_icon = digitigrade_clothing_icons[index] + if(!digitigrade_clothing_icon) + var/static/icon/torso_mask + if(!torso_mask) + torso_mask = icon('icons/mob/clothing/under/masking_helpers.dmi', "digi_torso_mask") + var/static/icon/leg_mask + if(!leg_mask) + leg_mask = icon('icons/mob/clothing/under/masking_helpers.dmi', "digi_leg_mask") + + base_icon.Blend(leg_mask, ICON_SUBTRACT) // cuts the legs off + + var/icon/leg_icon = SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) + leg_icon.Blend(torso_mask, ICON_SUBTRACT) // cuts the torso off + + base_icon.Blend(leg_icon, ICON_OVERLAY) // puts the new legs on + + digitigrade_clothing_icon = fcopy_rsc(base_icon) + digitigrade_clothing_icons[index] = digitigrade_clothing_icon + + return icon(digitigrade_clothing_icon) + +#undef LEG_SAMPLE_X_LOWER +#undef LEG_SAMPLE_X_UPPER + +#undef LEG_SAMPLE_Y_LOWER +#undef LEG_SAMPLE_Y_UPPER /mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) var/list/out = new @@ -678,20 +819,47 @@ generate/load female uniform sprites matching all previously decided variables female_uniform = NO_FEMALE_UNIFORM, override_state = null, override_file = null, + mob/living/carbon/human/humie = null, ) //Find a valid icon_state from variables+arguments var/t_state = override_state || (isinhands ? inhand_icon_state : worn_icon_state) || icon_state + /// DOPPLER SHIFT ADDITION BEGIN + /// IMPORTANT NOTE: Keep the humie var! + var/chosen_worn_icon = worn_icon + if(ishuman(humie)) + for(var/shape in supported_bodyshapes) + if(humie.bodyshape & shape) + chosen_worn_icon = bodyshape_icon_files["[shape]"] //Find a valid icon file from variables+arguments - var/file2use = override_file || (isinhands ? null : worn_icon) || default_icon_file + var/file2use = override_file || (isinhands ? null : chosen_worn_icon) || default_icon_file /// DOPPLER SHIFT EDIT END //Find a valid layer from variables+arguments var/layer2use = alternate_worn_layer || default_layer - var/mutable_appearance/standing + var/mob/living/carbon/wearer = loc + var/is_digi = istype(wearer) && (wearer.bodyshape & BODYSHAPE_DIGITIGRADE) && !wearer.is_digitigrade_squished() + + var/mutable_appearance/standing // this is the actual resulting MA + var/icon/building_icon // used to construct an icon across multiple procs before converting it to MA if(female_uniform) - standing = wear_female_version(t_state, file2use, layer2use, female_uniform, greyscale_colors) //should layer2use be in sync with the adjusted value below? needs testing - shiz - if(!standing) - standing = mutable_appearance(file2use, t_state, -layer2use) + building_icon = wear_female_version( + icon_state = t_state, + icon = file2use, + type = female_uniform, + greyscale_colors = greyscale_colors, + ) + if(!isinhands && is_digi && (supports_variations_flags & CLOTHING_DIGITIGRADE_MASK)) + building_icon = wear_digi_version( + base_icon = building_icon || icon(file2use, t_state), + key = "[t_state]-[file2use]-[female_uniform]", + greyscale_config = digitigrade_greyscale_config_worn || greyscale_config_worn, + greyscale_colors = digitigrade_greyscale_colors || greyscale_colors || color, + ) + if(building_icon) + standing = mutable_appearance(building_icon, layer = -layer2use) + + // no special handling done, default it + standing ||= mutable_appearance(file2use, t_state, layer = -layer2use) //Get the overlays for this item when it's being worn //eg: ammo counters, primed grenade flashes, etc. diff --git a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm index 350e2f32883fb..fec3c8f858434 100644 --- a/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm +++ b/code/modules/surgery/bodyparts/species_parts/lizard_bodyparts.dm @@ -47,54 +47,58 @@ icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = SPECIES_LIZARD +/// Checks if this mob is wearing anything that does not have a valid sprite set for digitigrade legs +/// (In other words, is the mob's digitigrade body squished by its clothing?) +/mob/living/carbon/proc/is_digitigrade_squished() + return FALSE + +/mob/living/carbon/human/is_digitigrade_squished() + var/obj/item/clothing/shoes/worn_shoes = shoes + var/obj/item/clothing/under/worn_suit = wear_suit + var/obj/item/clothing/under/worn_uniform = w_uniform + + var/uniform_compatible = isnull(worn_uniform) \ + || (worn_uniform.supports_variations_flags & DIGITIGRADE_VARIATIONS) \ + || !(worn_uniform.body_parts_covered & LEGS) \ + || (worn_suit?.flags_inv & HIDEJUMPSUIT) // If suit hides our jumpsuit, it doesn't matter if it squishes + + var/suit_compatible = isnull(worn_suit) \ + || (worn_suit.supports_variations_flags & DIGITIGRADE_VARIATIONS) \ + || !(worn_suit.body_parts_covered & LEGS) + + var/shoes_compatible = isnull(worn_shoes) \ + || (worn_shoes.supports_variations_flags & DIGITIGRADE_VARIATIONS) + + return !uniform_compatible || !suit_compatible || !shoes_compatible + /obj/item/bodypart/leg/left/digitigrade icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE + footprint_sprite = FOOTPRINT_SPRITE_CLAWS /obj/item/bodypart/leg/left/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - var/obj/item/clothing/shoes/worn_shoes = human_owner.get_item_by_slot(ITEM_SLOT_FEET) - var/uniform_compatible = FALSE - var/suit_compatible = FALSE - var/shoes_compatible = FALSE - if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) //Checks uniform compatibility - uniform_compatible = TRUE - if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability - suit_compatible = TRUE - if((worn_shoes == null) || (worn_shoes.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) - shoes_compatible = TRUE - - if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && shoes_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible - limb_id = BODYPART_ID_DIGITIGRADE - - else - limb_id = SPECIES_LIZARD + var/old_id = limb_id + limb_id = owner?.is_digitigrade_squished() ? SPECIES_LIZARD : BODYPART_ID_DIGITIGRADE + if(old_id != limb_id) + // Something unsquished / squished us so we need to go through and update everything that is affected + for(var/obj/item/thing as anything in owner?.get_equipped_items()) + if(thing.supports_variations_flags & DIGITIGRADE_VARIATIONS || (BODYSHAPE_DIGITIGRADE in thing.supported_bodyshapes)) + thing.update_slot_icon() /obj/item/bodypart/leg/right/digitigrade icon_greyscale = 'icons/mob/human/species/lizard/bodyparts.dmi' limb_id = BODYPART_ID_DIGITIGRADE bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE + footprint_sprite = FOOTPRINT_SPRITE_CLAWS /obj/item/bodypart/leg/right/digitigrade/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() - if(ishuman(owner)) - var/mob/living/carbon/human/human_owner = owner - var/obj/item/clothing/shoes/worn_shoes = human_owner.get_item_by_slot(ITEM_SLOT_FEET) - var/uniform_compatible = FALSE - var/suit_compatible = FALSE - var/shoes_compatible = FALSE - if(!(human_owner.w_uniform) || (human_owner.w_uniform.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) //Checks uniform compatibility - uniform_compatible = TRUE - if((!human_owner.wear_suit) || (human_owner.wear_suit.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON)) || !(human_owner.wear_suit.body_parts_covered & LEGS)) //Checks suit compatability - suit_compatible = TRUE - if((worn_shoes == null) || (worn_shoes.supports_variations_flags & (CLOTHING_DIGITIGRADE_VARIATION|CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON))) - shoes_compatible = TRUE - - if((uniform_compatible && suit_compatible && shoes_compatible) || (suit_compatible && shoes_compatible && human_owner.wear_suit?.flags_inv & HIDEJUMPSUIT)) //If the uniform is hidden, it doesnt matter if its compatible - limb_id = BODYPART_ID_DIGITIGRADE - - else - limb_id = SPECIES_LIZARD + var/old_id = limb_id + limb_id = owner?.is_digitigrade_squished() ? SPECIES_LIZARD : BODYPART_ID_DIGITIGRADE + if(old_id != limb_id) + // Something unsquished / squished us so we need to go through and update everything that is affected + for(var/obj/item/thing as anything in owner?.get_equipped_items()) + if(thing.supports_variations_flags & DIGITIGRADE_VARIATIONS || (BODYSHAPE_DIGITIGRADE in thing.supported_bodyshapes)) + thing.update_slot_icon() diff --git a/code/modules/surgery/organs/organ_movement.dm b/code/modules/surgery/organs/organ_movement.dm index 010daa3fd24c5..d2e01b4e3abc5 100644 --- a/code/modules/surgery/organs/organ_movement.dm +++ b/code/modules/surgery/organs/organ_movement.dm @@ -114,6 +114,13 @@ bodypart.contents |= src bodypart_owner = bodypart + /// DOPPLER SHIFT ADDITION - recalculate these things now, this is a fix until TG unbuggers it all up + if(external_bodytypes && istype(limb_owner)) + limb_owner.synchronize_bodytypes() + if(external_bodyshapes && istype(limb_owner)) + limb_owner.synchronize_bodyshapes() + /// DOPPLER SHIFT ADDITION END + RegisterSignal(src, COMSIG_MOVABLE_MOVED, PROC_REF(forced_removal)) // Apply unique side-effects. Return value does not matter. diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_blobinfection.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_blobinfection.png index e3d7acbf5d891..9a94c3d4314f3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_blobinfection.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_blobinfection.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png index 4af34b006d757..9107385791fb7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png index c63a02c837052..1fc5ed1581fe7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_changeling.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentiencepotionspawn.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentiencepotionspawn.png index 02cdb1cb31a9f..2e21dd7d4098e 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentiencepotionspawn.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_sentiencepotionspawn.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png index c63a02c837052..1fc5ed1581fe7 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_stowawaychangeling.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png index 4c9212509d2ea..e35ea7f091cfe 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicateinfiltrator.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png index 4c9212509d2ea..e35ea7f091cfe 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_syndicatesleeperagent.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png index 4c9212509d2ea..e35ea7f091cfe 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png and b/code/modules/unit_tests/screenshots/screenshot_antag_icons_traitor.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png index 7b9f46157fb5c..bd701ab56bc96 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_android.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png index eaee84fed4942..ab2ee4cacb82a 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_luminescent.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_luminescent.png index 641c9050ee467..8fd0e16dbf400 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_luminescent.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_luminescent.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_slime.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_slime.png index 34288a8a8e5da..1ecea86f347e3 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_slime.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_slime.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png index eaee84fed4942..ab2ee4cacb82a 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_jelly_stargazer.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png index b7325952e0d2d..e52ca2d6c66eb 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png index 698b80483e14b..3de016d13c6e9 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_ashwalker.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png index 054d30c4a8094..d11be14f9831c 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_lizard_silverscale.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png index f3dff225c1eb3..21fac0d93f786 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_moth.png differ diff --git a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_slugcat.png b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_slugcat.png index 1d9bf938b78e0..76179e1856480 100644 Binary files a/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_slugcat.png and b/code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_slugcat.png differ diff --git a/code/modules/unit_tests/screenshots/transformation_sting_appearances.png b/code/modules/unit_tests/screenshots/transformation_sting_appearances.png index 5d526a0dedc76..e54ab4d7a3b84 100644 Binary files a/code/modules/unit_tests/screenshots/transformation_sting_appearances.png and b/code/modules/unit_tests/screenshots/transformation_sting_appearances.png differ diff --git a/code/modules/unit_tests/species_change_clothing.dm b/code/modules/unit_tests/species_change_clothing.dm index c68037099605f..d75cb2833da3d 100644 --- a/code/modules/unit_tests/species_change_clothing.dm +++ b/code/modules/unit_tests/species_change_clothing.dm @@ -9,12 +9,14 @@ morphing_human.equipOutfit(/datum/outfit/job/assistant/consistent) morphing_human.dna.features["legs"] = DIGITIGRADE_LEGS //you WILL have digitigrade legs - var/obj/item/human_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET) + /// DOPPLER SHIFT REMOVAL BEGIN - fuck tg and their stupid lizard racism gimmicks, genuinely + /*var/obj/item/human_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET) human_shoes.supports_variations_flags = NONE //do not fit lizards at all costs. morphing_human.set_species(/datum/species/lizard) var/obj/item/lizard_shoes = morphing_human.get_item_by_slot(ITEM_SLOT_FEET) - TEST_ASSERT_NOTEQUAL(human_shoes, lizard_shoes, "Lizard still has shoes after changing species.") + TEST_ASSERT_NOTEQUAL(human_shoes, lizard_shoes, "Lizard still has shoes after changing species.")*/ + /// DOPPLER SHIFT REMOVAL END // Testing whether item-species restrictions properly blocks changing into a blacklisted species. morphing_human.set_species(/datum/species/monkey) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 6e63000951cbc..2a27433bdee6d 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1358,7 +1358,12 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) allowed_configs += "[config]" if(ispath(fake_atom, /obj/item)) var/obj/item/item = fake_atom - if(initial(item.greyscale_config_worn)) + /// DOPPLER SHIFT ADDITION BEGIN + if(initial(item.greyscale_config_worn_bodyshapes)) + var/bconfig + for(bconfig in item.greyscale_config_worn_bodyshapes) + allowed_configs += "[initial(item.greyscale_config_worn_bodyshapes[bconfig])]" + else if(initial(item.greyscale_config_worn)) /// DOPPLER SHIFT EDIT END allowed_configs += "[initial(item.greyscale_config_worn)]" if(initial(item.greyscale_config_inhand_left)) allowed_configs += "[initial(item.greyscale_config_inhand_left)]" diff --git a/icons/mob/clothing/under/digi_template.dmi b/icons/mob/clothing/under/digi_template.dmi new file mode 100644 index 0000000000000..0c9db80eb1c88 Binary files /dev/null and b/icons/mob/clothing/under/digi_template.dmi differ diff --git a/icons/mob/clothing/under/masking_helpers.dmi b/icons/mob/clothing/under/masking_helpers.dmi index 9ee54a598fad5..dfbec7d1cb8ec 100644 Binary files a/icons/mob/clothing/under/masking_helpers.dmi and b/icons/mob/clothing/under/masking_helpers.dmi differ diff --git a/modular_doppler/hearthkin/primitive_cooking_additions/code/plant_bag.dm b/modular_doppler/hearthkin/primitive_cooking_additions/code/plant_bag.dm index 9ceadd7057980..1a747cff6f99e 100644 --- a/modular_doppler/hearthkin/primitive_cooking_additions/code/plant_bag.dm +++ b/modular_doppler/hearthkin/primitive_cooking_additions/code/plant_bag.dm @@ -19,7 +19,15 @@ // This is so the linen reskin shows properly in the suit storage. -/obj/item/storage/bag/plants/build_worn_icon(default_layer, default_icon_file, isinhands, female_uniform, override_state, override_file, mutant_styles) +/obj/item/storage/bag/plants/build_worn_icon( + default_layer = 0, + default_icon_file = null, + isinhands = FALSE, + female_uniform = NO_FEMALE_UNIFORM, + override_state = null, + override_file = null, + mob/living/carbon/human/humie = null, +) if(default_layer == SUIT_STORE_LAYER && current_skin == RESKIN_LINEN) override_file = 'modular_doppler/hearthkin/primitive_cooking_additions/icons/plant_bag_worn_mirror.dmi' diff --git a/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_under.dm b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_under.dm new file mode 100644 index 0000000000000..1c2baec251708 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/greyscale_configs_under.dm @@ -0,0 +1,96 @@ +/* + />  フ meow! this dm file contains greyscale configs for any clothes we add. please name + |  _ _| / them in obvious, easy to search ways that are consistent with your item paths <3 + /` ミ_xノ + /     | + /  ヽ   ノ + │  | | | +/ ̄|   | | | +( ̄ヽ__ヽ_)__) +\二) +*/ + + +///////////////////// +//STANDARD UNIFORMS// +///////////////////// + +// Standard version +/datum/greyscale_config/doppler_undersuit + name = "Doppler Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/obj/under/doppler_uniforms.dmi' + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard.json' + +/datum/greyscale_config/doppler_undersuit/worn + name = "Worn Doppler Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/worn/digi + name = "Worn Digitigrade Doppler Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' + +// Cozy version +/datum/greyscale_config/doppler_undersuit/cozy + name = "Doppler Cozy Suit" + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy.json' + +/datum/greyscale_config/doppler_undersuit/cozy/worn + name = "Worn Doppler Cozy Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/cozy/worn/digi + name = "Worn Digitigrade Doppler Cozy Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' + +// Fancy version +/datum/greyscale_config/doppler_undersuit/fancysuit + name = "Doppler Fancy Suit" + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit.json' + +/datum/greyscale_config/doppler_undersuit/fancysuit/worn + name = "Worn Doppler Fancy Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/fancysuit/worn/digi + name = "Worn Digitigrade Doppler Fancy Suit" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' + +/// VERSIONS W/ OVERALLS +// Standard w/ Overalls +/datum/greyscale_config/doppler_undersuit/overalls + name = "Doppler Suit w/ Overalls" + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard_overalls.json' + +/datum/greyscale_config/doppler_undersuit/overalls/worn + name = "Worn Doppler Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/overalls/worn/digi + name = "Worn Digitigrade Doppler Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' + +// Cozy w/ Overalls +/datum/greyscale_config/doppler_undersuit/cozy/overalls + name = "Doppler Cozy Suit w/ Overalls" + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy_overalls.json' + +/datum/greyscale_config/doppler_undersuit/cozy/overalls/worn + name = "Worn Doppler Cozy Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/cozy/overalls/worn/digi + name = "Worn Digitigrade Doppler Cozy Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' + +// Fancy w/ Overalls +/datum/greyscale_config/doppler_undersuit/fancysuit/overalls + name = "Doppler Fancy Suit w/ Overalls" + json_config = 'modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit_overalls.json' + +/datum/greyscale_config/doppler_undersuit/fancysuit/overalls/worn + name = "Worn Doppler Fancy Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + +/datum/greyscale_config/doppler_undersuit/fancysuit/overalls/worn/digi + name = "Worn Digitigrade Doppler Fancy Suit w/ Overalls" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi' diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy.json new file mode 100644 index 0000000000000..37ab0965d8dcd --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy.json @@ -0,0 +1,30 @@ +{ + "doppler_cozy": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_cozy", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "doppler_cozy_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_cozy_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy_overalls.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy_overalls.json new file mode 100644 index 0000000000000..29ed46d3e867a --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_cozy_overalls.json @@ -0,0 +1,42 @@ +{ + "doppler_cozy_overalls": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_cozy", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "doppler_cozy_overalls_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_cozy_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard.json new file mode 100644 index 0000000000000..4656f3f07e17f --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard.json @@ -0,0 +1,30 @@ +{ + "doppler_uniform": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_top", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ], + "doppler_uniform_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_top_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard_overalls.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard_overalls.json new file mode 100644 index 0000000000000..7758f5942063c --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_standard_overalls.json @@ -0,0 +1,42 @@ +{ + "doppler_uniform_overalls": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_top", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "doppler_uniform_overalls_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_top_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit.json new file mode 100644 index 0000000000000..5b1abf4bc0e56 --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit.json @@ -0,0 +1,54 @@ +{ + "doppler_suit": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_tie", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_trim", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ], + "doppler_suit_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_tie_d", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_trim_d", + "blend_mode": "overlay", + "color_ids": [ 4 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit_overalls.json b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit_overalls.json new file mode 100644 index 0000000000000..dd415bcd8cefc --- /dev/null +++ b/modular_doppler/modular_cosmetics/GAGS/json_configs/under/doppler_uniform_suit_overalls.json @@ -0,0 +1,66 @@ +{ + "doppler_suit_overalls": [ + { + "type": "icon_state", + "icon_state": "gags_pants", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_tie", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_trim", + "blend_mode": "overlay", + "color_ids": [ 4 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ], + "doppler_suit_overalls_d": [ + { + "type": "icon_state", + "icon_state": "gags_pants_d", + "blend_mode": "overlay", + "color_ids": [ 1 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_d", + "blend_mode": "overlay", + "color_ids": [ 2 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_tie_d", + "blend_mode": "overlay", + "color_ids": [ 3 ] + }, + { + "type": "icon_state", + "icon_state": "gags_suit_trim_d", + "blend_mode": "overlay", + "color_ids": [ 4 ] + }, + { + "type": "icon_state", + "icon_state": "gags_overalls", + "blend_mode": "overlay", + "color_ids": [ 1 ] + } + ] +} diff --git a/modular_doppler/modular_cosmetics/code/face/basemasks.dm b/modular_doppler/modular_cosmetics/code/face/basemasks.dm new file mode 100644 index 0000000000000..8102e95786ede --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/face/basemasks.dm @@ -0,0 +1,4 @@ +/obj/item/clothing/mask + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_SNOUTED) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/mask.dmi', + BODYSHAPE_SNOUTED_T = 'modular_doppler/modular_cosmetics/icons/mob/face/basemask_muzzled.dmi') diff --git a/modular_doppler/modular_cosmetics/code/hats/doppler_command_hats.dm b/modular_doppler/modular_cosmetics/code/hats/doppler_command_hats.dm new file mode 100644 index 0000000000000..511494d3fd879 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/hats/doppler_command_hats.dm @@ -0,0 +1,112 @@ +/obj/item/clothing/head/utility/hardhat/welding/doppler_command + name = "generic doppler command hardhat" + desc = "You shouldn't be seeing this. Yell at Naaka." + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hardhats.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hardhats.dmi' + resistance_flags = FIRE_PROOF | ACID_PROOF + icon_state = null + hat_type = null + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/medical + name = "doppler medical hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_med" + hat_type = "med" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/science + name = "doppler science hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_sci" + hat_type = "sci" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/engineering + name = "doppler engineering hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_eng" + hat_type = "eng" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/cargo + name = "doppler cargo hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_cargo" + hat_type = "cargo" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/service + name = "doppler service hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_serv" + hat_type = "serv" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/command + name = "doppler command hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_cmd" + hat_type = "cmd" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/performer + name = "doppler performer hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_perf" + hat_type = "perf" + +/obj/item/clothing/head/utility/hardhat/welding/doppler_command/security + name = "doppler security hardhat" + desc = "Heavy-duty headgear demarkated in standard command colors. A special of Doppler Shift-series stations." + icon_state = "hardhat0_sec" + hat_type = "sec" + + + +/// Beret breaker +/obj/item/clothing/head/beret/doppler_command + name = "generic doppler command beret" + desc = "You shouldn't be seeing this. Yell at Naaka." + icon = 'modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hats.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hats.dmi' + icon_state = null + icon_preview = null + dog_fashion = null + greyscale_config = null + greyscale_config_worn = null + greyscale_colors = null + flags_1 = NONE + +/obj/item/clothing/head/beret/doppler_command/medical + name = "doppler medical beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_med" + +/obj/item/clothing/head/beret/doppler_command/science + name = "doppler science beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_sci" + +/obj/item/clothing/head/beret/doppler_command/engineering + name = "doppler engineering beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_eng" + +/obj/item/clothing/head/beret/doppler_command/cargo + name = "doppler cargo beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_cargo" + +/obj/item/clothing/head/beret/doppler_command/service + name = "doppler service beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_serv" + +/obj/item/clothing/head/beret/doppler_command/command + name = "doppler command beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_cmd" + +/obj/item/clothing/head/beret/doppler_command/performer + name = "doppler performer beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_perf" + +/obj/item/clothing/head/beret/doppler_command/security + name = "doppler security beret" + desc = "A cozy, fashionable beret used to connotate command staff on Doppler Shift-series stations." + icon_state = "doppler_sec" diff --git a/modular_doppler/modular_cosmetics/code/neck/doppler_command_mantles.dm b/modular_doppler/modular_cosmetics/code/neck/doppler_command_mantles.dm new file mode 100644 index 0000000000000..1dae6fcc99ceb --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/neck/doppler_command_mantles.dm @@ -0,0 +1,49 @@ +/obj/item/clothing/neck/doppler_mantle + name = "generic doppler mantle" + desc = "You shouldn't be seeing this. Yell at Naaka." + icon = 'modular_doppler/modular_cosmetics/icons/obj/neck/doppler_mantles.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/neck/doppler_mantles.dmi' + icon_state = "" + inhand_icon_state = null + w_class = WEIGHT_CLASS_SMALL + body_parts_covered = CHEST|ARMS + +/obj/item/clothing/neck/doppler_mantle/medical + name = "doppler medical mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_med" + +/obj/item/clothing/neck/doppler_mantle/science + name = "doppler science mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_sci" + +/obj/item/clothing/neck/doppler_mantle/engineering + name = "doppler engineering mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_eng" + +/obj/item/clothing/neck/doppler_mantle/cargo + name = "doppler cargo mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_cargo" + +/obj/item/clothing/neck/doppler_mantle/service + name = "doppler service mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_serv" + +/obj/item/clothing/neck/doppler_mantle/command + name = "doppler command mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_cmd" + +/obj/item/clothing/neck/doppler_mantle/performer + name = "doppler performer mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_perf" + +/obj/item/clothing/neck/doppler_mantle/security + name = "doppler security mantle" + desc = "A stylish command mantle from Doppler Shift-series stations." + icon_state = "doppler_sec" diff --git a/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm b/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm new file mode 100644 index 0000000000000..889b94e0f1f1d --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/shoes/baseshoes.dm @@ -0,0 +1,44 @@ +/obj/item/clothing/shoes + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/feet.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi') + + + +/obj/item/clothing/shoes/sneakers + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/sneakers/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/sneakers/worn/digi) + +/obj/item/clothing/shoes/sneakers/orange + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/sneakers_orange/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/sneakers_orange/worn/digi) + +/obj/item/clothing/shoes/sneakers/marisa + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/sneakers_marisa/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/sneakers_marisa/worn/digi) + + + +/datum/greyscale_config/sneakers/worn + icon_file = 'icons/mob/clothing/feet.dmi' + +/datum/greyscale_config/sneakers_orange/worn + icon_file = 'icons/mob/clothing/feet.dmi' + +/datum/greyscale_config/sneakers_marisa/worn + icon_file = 'icons/mob/clothing/feet.dmi' + +/datum/greyscale_config/sneakers/worn/digi + name = "Worn Digi Sneakers" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi' + +/datum/greyscale_config/sneakers_orange/worn/digi + name = "Orange Worn Digi Sneakers" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi' + +/datum/greyscale_config/sneakers_marisa/worn/digi + name = "Worn Digi Marisa Sneakers" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi' diff --git a/modular_doppler/modular_cosmetics/code/suits/basesuits.dm b/modular_doppler/modular_cosmetics/code/suits/basesuits.dm new file mode 100644 index 0000000000000..d51882beb311c --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/suits/basesuits.dm @@ -0,0 +1,75 @@ +/obj/item/clothing/suit/bio_suit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/head/bio.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/bio_digi.dmi') + +/obj/item/clothing/suit/wizrobe + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/wizard.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/wizard_digi.dmi') + + + +/obj/item/clothing/suit/toggle/labcoat + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi') + +//God damnit TG you *fuckwits*, why didn't you subtype these properly +/obj/item/clothing/suit/toggle/labcoat/genetics + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/chemist + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/virologist + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/coroner + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/science + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/roboticist + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) +/obj/item/clothing/suit/toggle/labcoat/interdyne + greyscale_config_worn_bodyshapes = list(BODYSHAPE_HUMANOID_T = /datum/greyscale_config/labcoat/worn, + BODYSHAPE_DIGITIGRADE_T = /datum/greyscale_config/labcoat/worn/digi) + + + +/obj/item/clothing/suit/space + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/spacesuit.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/spacesuit_digi.dmi') + +/obj/item/clothing/suit/chaplainsuit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/chaplain.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/chaplain_digi.dmi') + +/obj/item/clothing/suit/hooded/chaplainsuit + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/chaplain.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/chaplain_digi.dmi') + +/obj/item/clothing/suit/hooded/explorer + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/suits/utility.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/suit/suit_digi.dmi') + + + +/// TODO: migrate these into our normal file +/datum/greyscale_config/labcoat/worn/digi + name = "Labcoat (Worn, Digitigrade)" + icon_file = 'modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi' diff --git a/modular_doppler/modular_cosmetics/code/suits/modsuit.dm b/modular_doppler/modular_cosmetics/code/suits/modsuit.dm new file mode 100644 index 0000000000000..ae248230fb854 --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/suits/modsuit.dm @@ -0,0 +1,16 @@ +/obj/item/clothing/head/mod + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_SNOUTED) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/modsuit/mod_clothing.dmi', + BODYSHAPE_SNOUTED_T = 'modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi') + +/obj/item/clothing/suit/mod + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/modsuit/mod_clothing.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi') + +/obj/item/clothing/shoes/mod + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'icons/mob/clothing/modsuit/mod_clothing.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi') diff --git a/modular_doppler/modular_cosmetics/code/under/doppler_uniforms.dm b/modular_doppler/modular_cosmetics/code/under/doppler_uniforms.dm new file mode 100644 index 0000000000000..59148de8721bc --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/under/doppler_uniforms.dm @@ -0,0 +1,203 @@ +/obj/item/clothing/under/misc/doppler_uniform + name = "generic doppler uniform" + desc = "You shouldn't be seeing this. Yell at Naaka." + icon = 'modular_doppler/modular_cosmetics/icons/obj/under/doppler_uniforms.dmi' + worn_icon = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi' + digitigrade_greyscale_config_worn = null + supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + supported_bodyshapes = list(BODYSHAPE_HUMANOID, BODYSHAPE_DIGITIGRADE) + bodyshape_icon_files = list(BODYSHAPE_HUMANOID_T = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi', + BODYSHAPE_DIGITIGRADE_T = 'modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi') + icon_state = "" + can_adjust = TRUE + +/obj/item/clothing/under/misc/doppler_uniform/medical + name = "doppler medical uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_med" + worn_icon_state = "doppler_med" + +/obj/item/clothing/under/misc/doppler_uniform/science + name = "doppler science uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_sci" + worn_icon_state = "doppler_sci" + +/obj/item/clothing/under/misc/doppler_uniform/engineering + name = "doppler engineering uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_eng" + worn_icon_state = "doppler_eng" + +/obj/item/clothing/under/misc/doppler_uniform/cargo + name = "doppler cargo uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_cargo" + worn_icon_state = "doppler_cargo" + +/obj/item/clothing/under/misc/doppler_uniform/service + name = "doppler service uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_serv" + worn_icon_state = "doppler_serv" + +/obj/item/clothing/under/misc/doppler_uniform/command + name = "doppler command uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_cmd" + worn_icon_state = "doppler_cmd" + +/obj/item/clothing/under/misc/doppler_uniform/performer + name = "doppler performer's uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_perf" + worn_icon_state = "doppler_perf" + +/obj/item/clothing/under/misc/doppler_uniform/security + name = "doppler security uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_sec" + worn_icon_state = "doppler_sec" + +/// Custom uniform for assistants/from drobes +/obj/item/clothing/under/misc/doppler_uniform/standard + name = "doppler uniform" + desc = "A cozy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_uniform" + worn_icon_state = "doppler_uniform" + greyscale_config = /datum/greyscale_config/doppler_undersuit + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/worn + greyscale_colors = "#333333#AAAAAA" + flags_1 = IS_PLAYER_COLORABLE_1 + +/obj/item/clothing/under/misc/doppler_uniform/standard/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes = list() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/worn/digi + set_greyscale(colors = greyscale_colors) + +/obj/item/clothing/under/misc/doppler_uniform/standard/cozy + name = "doppler cozy uniform" + desc = "A cozier standard uniform from Doppler Shift-series stations." + icon_state = "doppler_cozy" + worn_icon_state = "doppler_cozy" + greyscale_config = /datum/greyscale_config/doppler_undersuit/cozy + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/cozy/worn + greyscale_colors = "#333333#AA0000" + +/obj/item/clothing/under/misc/doppler_uniform/standard/cozy/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/cozy/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/cozy/worn/digi + set_greyscale(colors = greyscale_colors) + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit + name = "doppler fancy uniform" + desc = "A fancy standard uniform from Doppler Shift-series stations." + icon_state = "doppler_suit" + worn_icon_state = "doppler_suit" + greyscale_config = /datum/greyscale_config/doppler_undersuit/fancysuit + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/fancysuit/worn + greyscale_colors = "#333333#AAAAAA#AA0000#FFFFFF" + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/fancysuit/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/fancysuit/worn/digi + set_greyscale(colors = greyscale_colors) + +// Overall versions +/obj/item/clothing/under/misc/doppler_uniform/standard/overalls + name = "doppler uniform w/ overalls" + desc = "A cozy standard uniform from Doppler Shift-series stations. This one has fancy overalls attached." + icon_state = "doppler_uniform_overalls" + worn_icon_state = "doppler_uniform_overalls" + greyscale_config = /datum/greyscale_config/doppler_undersuit/overalls + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/overalls/worn + +/obj/item/clothing/under/misc/doppler_uniform/standard/overalls/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/overalls/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/overalls/worn/digi + set_greyscale(colors = greyscale_colors) + +/obj/item/clothing/under/misc/doppler_uniform/standard/cozy/overalls + name = "doppler cozy uniform w/ overalls" + desc = "A cozier standard uniform from Doppler Shift-series stations. This one has fancy overalls attached." + icon_state = "doppler_cozy_overalls" + worn_icon_state = "doppler_cozy_overalls" + greyscale_config = /datum/greyscale_config/doppler_undersuit/cozy/overalls + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/cozy/overalls/worn + +/obj/item/clothing/under/misc/doppler_uniform/standard/cozy/overalls/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/cozy/overalls/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/cozy/overalls/worn/digi + set_greyscale(colors = greyscale_colors) + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls + name = "doppler fancy uniform w/ overalls" + desc = "A fancy standard uniform from Doppler Shift-series stations. This one has fancy overalls attached." + icon_state = "doppler_suit_overalls" + worn_icon_state = "doppler_suit_overalls" + greyscale_config = /datum/greyscale_config/doppler_undersuit/fancysuit/overalls + greyscale_config_worn = /datum/greyscale_config/doppler_undersuit/fancysuit/overalls/worn + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/Initialize(mapload) + . = ..() + greyscale_config_worn_bodyshapes["[BODYSHAPE_HUMANOID]"] = /datum/greyscale_config/doppler_undersuit/fancysuit/overalls/worn + greyscale_config_worn_bodyshapes["[BODYSHAPE_DIGITIGRADE]"] = /datum/greyscale_config/doppler_undersuit/fancysuit/overalls/worn/digi + set_greyscale(colors = greyscale_colors) + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/colored + var/list/suit_colors = list( + "#5D5D5D", + "#B3B3B3", + "#FFFFFF", + "#C59431", + "#A17229", + ) + var/list/tie_colors = list( + "#00AAFF", + "#AAFF00", + "#FFAA00", + "#FF66AA", + "#FF0000", + "#FFFF00", + "#005DAA", + "#00FFAA", + "#AA00FF", + "#00AA3B", + "#AA003B" + ) + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/colored/Initialize(mapload) + . = ..() + spawn(2) // TODO: Come back to this later when i'm not on a fatal lack of sleep to try and fix this + greyscale_colors = "#333333[pick(suit_colors)][pick(tie_colors)]#FFFFFF" + //to_chat(world, "Attempted to set the greyscale colors for this thing. [greyscale_colors]") + spawn(2) + var/atom/dummy_target = src + dummy_target.set_greyscale(greyscale_colors, greyscale_config) + //to_chat(world, "Attempted to set the greyscale image for this thing. If it's still fucking up, don't look at me.") + // I see you there, wondering why spawn() is bad or why its' being used here. The answer to both: I don't know!! + // Spawn is supposedly bad form per a number of different bits of documentation throughout SS13... + // and for this code, I'm using it to try and avoid some kind of scrungly race condition causing GAGS generation to fail silently. + // It's weird, it's haunted, and it's annoying the hell out of me. + // So instead of continuing to spend time on it- more at this point trying to fix this one stupid suit for assistants than it took to write the ENTIRE BODYSHAPE ICON PIPELINE... + // I'm going to use this little hack to bury the bug under a rug and go back to more important work & get some fucking sleep. + // -Naaka, aka CliffracerX + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/random + name = "greytide suit spawner" + desc = "If you see this, yell at Naaka." + +/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/random/Initialize(mapload) + ..() + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + H.equip_to_slot_or_del(new /obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/colored(H), ITEM_SLOT_ICLOTHING, initial=TRUE) //or else you end up with naked assistants running around everywhere... + else + new /obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/colored(loc) + return INITIALIZE_HINT_QDEL diff --git a/modular_doppler/modular_cosmetics/code/uniform_overrides.dm b/modular_doppler/modular_cosmetics/code/uniform_overrides.dm new file mode 100644 index 0000000000000..649621053545c --- /dev/null +++ b/modular_doppler/modular_cosmetics/code/uniform_overrides.dm @@ -0,0 +1,294 @@ +/obj/item/storage/bag/garment/captain/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/command(src) + new /obj/item/clothing/neck/doppler_mantle/command(src) + new /obj/item/clothing/head/beret/doppler_command/command(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/command(src) + +/obj/item/storage/bag/garment/hop/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/service(src) + new /obj/item/clothing/neck/doppler_mantle/service(src) + new /obj/item/clothing/head/beret/doppler_command/service(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/service(src) + +/obj/item/storage/bag/garment/hos/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/security(src) + new /obj/item/clothing/neck/doppler_mantle/security(src) + new /obj/item/clothing/head/beret/doppler_command/security(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/security(src) + +/obj/item/storage/bag/garment/warden/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/security(src) + new /obj/item/clothing/neck/doppler_mantle/performer(src) + new /obj/item/clothing/head/beret/doppler_command/performer(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/performer(src) + +/obj/item/storage/bag/garment/research_director/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/science(src) + new /obj/item/clothing/neck/doppler_mantle/science(src) + new /obj/item/clothing/head/beret/doppler_command/science(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/science(src) + +/obj/item/storage/bag/garment/chief_medical/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/medical(src) + new /obj/item/clothing/neck/doppler_mantle/medical(src) + new /obj/item/clothing/head/beret/doppler_command/medical(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/medical(src) + +/obj/item/storage/bag/garment/engineering_chief/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/engineering(src) + new /obj/item/clothing/neck/doppler_mantle/engineering(src) + new /obj/item/clothing/head/beret/doppler_command/engineering(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/engineering(src) + +/obj/item/storage/bag/garment/quartermaster/PopulateContents() + . = ..() + new /obj/item/clothing/under/misc/doppler_uniform/cargo(src) + new /obj/item/clothing/neck/doppler_mantle/cargo(src) + new /obj/item/clothing/head/beret/doppler_command/cargo(src) + new /obj/item/clothing/head/utility/hardhat/welding/doppler_command/cargo(src) + + + +/// Job loadout overrides +// HEADS +/datum/outfit/job/cmo + uniform = /obj/item/clothing/under/misc/doppler_uniform/medical + head = /obj/item/clothing/head/beret/doppler_command/medical + neck = /obj/item/clothing/neck/doppler_mantle/medical + +/datum/outfit/job/rd + uniform = /obj/item/clothing/under/misc/doppler_uniform/science + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/science + neck = /obj/item/clothing/neck/doppler_mantle/science + +/datum/outfit/job/ce + uniform = /obj/item/clothing/under/misc/doppler_uniform/engineering + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/engineering + neck = /obj/item/clothing/neck/doppler_mantle/engineering + +/datum/outfit/job/quartermaster + uniform = /obj/item/clothing/under/misc/doppler_uniform/cargo + head = /obj/item/clothing/head/beret/doppler_command/cargo + neck = /obj/item/clothing/neck/doppler_mantle/cargo + +/datum/outfit/job/hop + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + head = /obj/item/clothing/head/beret/doppler_command/service + neck = /obj/item/clothing/neck/doppler_mantle/service + +/datum/outfit/job/captain + uniform = /obj/item/clothing/under/misc/doppler_uniform/command + head = /obj/item/clothing/head/beret/doppler_command/command + neck = /obj/item/clothing/neck/doppler_mantle/command + +/datum/outfit/job/warden //not technically a head, but we make fun of them with pink drip bc lmao + uniform = /obj/item/clothing/under/misc/doppler_uniform/security + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/performer + neck = /obj/item/clothing/neck/doppler_mantle/performer + +/datum/outfit/job/hos + uniform = /obj/item/clothing/under/misc/doppler_uniform/security + head = /obj/item/clothing/head/beret/doppler_command/security + neck = /obj/item/clothing/neck/doppler_mantle/security + +// MEDICAL +/datum/outfit/job/doctor + uniform = /obj/item/clothing/under/misc/doppler_uniform/medical + +/datum/outfit/job/chemist + uniform = /obj/item/clothing/under/misc/doppler_uniform/medical + +/datum/outfit/job/coroner + uniform = /obj/item/clothing/under/misc/doppler_uniform/medical + +/datum/outfit/job/paramedic + uniform = /obj/item/clothing/under/misc/doppler_uniform/medical + +// SCIENCE +/datum/outfit/job/scientist + uniform = /obj/item/clothing/under/misc/doppler_uniform/science + +/datum/outfit/job/roboticist + uniform = /obj/item/clothing/under/misc/doppler_uniform/science + +/datum/outfit/job/geneticist + uniform = /obj/item/clothing/under/misc/doppler_uniform/science + +// ENGINEERING +/datum/outfit/job/engineer + uniform = /obj/item/clothing/under/misc/doppler_uniform/engineering + +/datum/outfit/job/atmos + uniform = /obj/item/clothing/under/misc/doppler_uniform/engineering + +// CARGO +/datum/outfit/job/cargo_tech + uniform = /obj/item/clothing/under/misc/doppler_uniform/cargo + +/datum/outfit/job/miner + uniform = /obj/item/clothing/under/misc/doppler_uniform/cargo + +/datum/outfit/job/bitrunner + uniform = /obj/item/clothing/under/misc/doppler_uniform/cargo + +// SERVICE +/datum/outfit/job/cook + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + +/datum/outfit/job/bartender + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + +/datum/outfit/job/curator + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + +/datum/outfit/job/psychologist + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + +/datum/outfit/job/chaplain + uniform = /obj/item/clothing/under/misc/doppler_uniform/service + +// COMMAND +/datum/outfit/job/lawyer + uniform = /obj/item/clothing/under/misc/doppler_uniform/command + +/datum/outfit/job/bridge_assistant + uniform = /obj/item/clothing/under/misc/doppler_uniform/command + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/performer + +/datum/outfit/job/human_ai + uniform = /obj/item/clothing/under/misc/doppler_uniform/command + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/science + +/datum/outfit/job/veteran_advisor + uniform = /obj/item/clothing/under/misc/doppler_uniform/command + head = /obj/item/clothing/head/utility/hardhat/welding/doppler_command/security + +// PERFORMERS +/datum/outfit/job/botanist + uniform = /obj/item/clothing/under/misc/doppler_uniform/performer + +/datum/outfit/job/clown + uniform = /obj/item/clothing/under/misc/doppler_uniform/performer + +/datum/outfit/job/mime + uniform = /obj/item/clothing/under/misc/doppler_uniform/performer + +/datum/outfit/job/janitor + uniform = /obj/item/clothing/under/misc/doppler_uniform/performer + +// SECURITY +/datum/outfit/job/detective + uniform = /obj/item/clothing/under/misc/doppler_uniform/security + +/datum/outfit/job/security + uniform = /obj/item/clothing/under/misc/doppler_uniform/security + +// ASSISTANTS & OTHER UNASSIGNED CREW +/datum/outfit/job + uniform = /obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls + +/datum/colored_assistant/grey + jumpsuits = list(/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls) + jumpskirts = list(/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls) // TODO: jumpskirt variants for all of these + +/datum/colored_assistant/random + jumpsuits = list(/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/random) + jumpskirts = list(/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls/random) // DITTO: see above + + + +/// BESPOKE UNIFORMS IN APPROPRIATE WARDROBE VENDORS +// Medical +/obj/machinery/vending/wardrobe/medi_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/medical] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/chem_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/medical] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/viro_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/medical] = 3 + . = ..() + +// Science +/obj/machinery/vending/wardrobe/science_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/science] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/gene_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/science] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/robo_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/science] = 3 + . = ..() + +// Engineering +/obj/machinery/vending/wardrobe/engi_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/engineering] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/atmos_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/engineering] = 3 + . = ..() + +// Cargo +/obj/machinery/vending/wardrobe/cargo_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/cargo] = 3 + . = ..() + +// Service +/obj/machinery/vending/wardrobe/bar_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/service] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/chef_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/service] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/curator_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/service] = 3 + . = ..() + +//PSYCH HAS NO DEDICATED WARDROBE + +/obj/machinery/vending/wardrobe/chap_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/service] = 3 + . = ..() + +// Command +/obj/machinery/vending/wardrobe/law_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/command] = 3 + . = ..() + +// Performers/casual crew +/obj/machinery/vending/wardrobe/hydro_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/performer] = 3 + . = ..() + +// Security +/obj/machinery/vending/wardrobe/sec_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/security] = 3 + . = ..() + +/obj/machinery/vending/wardrobe/det_wardrobe/Initialize(mapload) + products[/obj/item/clothing/under/misc/doppler_uniform/security] = 3 + . = ..() + +// Autodrobe +/obj/machinery/vending/autodrobe/Initialize(mapload) + premium[/obj/item/clothing/under/misc/doppler_uniform/standard] = 10 + premium[/obj/item/clothing/under/misc/doppler_uniform/standard/cozy] = 10 + premium[/obj/item/clothing/under/misc/doppler_uniform/standard/suit] = 10 + premium[/obj/item/clothing/under/misc/doppler_uniform/standard/overalls] = 10 + premium[/obj/item/clothing/under/misc/doppler_uniform/standard/cozy/overalls] = 10 + premium[/obj/item/clothing/under/misc/doppler_uniform/standard/suit/overalls] = 10 + . = ..() diff --git a/modular_doppler/modular_cosmetics/icons/mob/face/basemask_muzzled.dmi b/modular_doppler/modular_cosmetics/icons/mob/face/basemask_muzzled.dmi new file mode 100644 index 0000000000000..74fdcf3f39595 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/face/basemask_muzzled.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/basehead_muzzled.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/basehead_muzzled.dmi new file mode 100644 index 0000000000000..4542729ccfbef Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/head/basehead_muzzled.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hardhats.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hardhats.dmi new file mode 100644 index 0000000000000..5380331dec63c Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hardhats.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hats.dmi b/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hats.dmi new file mode 100644 index 0000000000000..1966d0ab836d6 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/head/doppler_command_hats.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi b/modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi new file mode 100644 index 0000000000000..0cae7430a56b8 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/mod_digi_snouted.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/neck/doppler_mantles.dmi b/modular_doppler/modular_cosmetics/icons/mob/neck/doppler_mantles.dmi new file mode 100644 index 0000000000000..d498a63f5b507 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/neck/doppler_mantles.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi new file mode 100644 index 0000000000000..af942b63f615b Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/shoes/basefeet_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/akula.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/akula.dmi new file mode 100644 index 0000000000000..c565785da0ca3 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/akula.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/armor_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/armor_digi.dmi new file mode 100644 index 0000000000000..a2cda95be12c1 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/armor_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/bio_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/bio_digi.dmi new file mode 100644 index 0000000000000..ea79379a34764 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/bio_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/chaplain_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/chaplain_digi.dmi new file mode 100644 index 0000000000000..6548be689cd49 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/chaplain_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi new file mode 100644 index 0000000000000..ecf0f2de15c16 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi new file mode 100644 index 0000000000000..364131dc895ac Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/labcoat_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/spacesuit_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/spacesuit_digi.dmi new file mode 100644 index 0000000000000..0a70c95584dec Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/spacesuit_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/suit_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/suit_digi.dmi new file mode 100644 index 0000000000000..02984bd532b4b Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/suit_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi new file mode 100644 index 0000000000000..2aff3f7d7074f Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/wintercoat.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/suit/wizard_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/suit/wizard_digi.dmi new file mode 100644 index 0000000000000..3867045385613 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/suit/wizard_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi b/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi new file mode 100644 index 0000000000000..d31a8890cdca4 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi b/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi new file mode 100644 index 0000000000000..7f48ff0ec4b33 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/mob/under/doppler_uniforms_digi.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hardhats.dmi b/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hardhats.dmi new file mode 100644 index 0000000000000..bf6428f794234 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hardhats.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hats.dmi b/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hats.dmi new file mode 100644 index 0000000000000..c6b94226e6d73 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/head/doppler_command_hats.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/neck/doppler_mantles.dmi b/modular_doppler/modular_cosmetics/icons/obj/neck/doppler_mantles.dmi new file mode 100644 index 0000000000000..926edbfa55329 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/neck/doppler_mantles.dmi differ diff --git a/modular_doppler/modular_cosmetics/icons/obj/under/doppler_uniforms.dmi b/modular_doppler/modular_cosmetics/icons/obj/under/doppler_uniforms.dmi new file mode 100644 index 0000000000000..2c04ba3e72881 Binary files /dev/null and b/modular_doppler/modular_cosmetics/icons/obj/under/doppler_uniforms.dmi differ diff --git a/modular_doppler/modular_customization/bodypart/bodypart_overrides.dm b/modular_doppler/modular_customization/bodypart/bodypart_overrides.dm index 1e443cc80df80..140544a203496 100644 --- a/modular_doppler/modular_customization/bodypart/bodypart_overrides.dm +++ b/modular_doppler/modular_customization/bodypart/bodypart_overrides.dm @@ -14,3 +14,12 @@ /obj/item/bodypart/head/snail head_flags = HEAD_EYESPRITES | HEAD_DEBRAIN | HEAD_FACIAL_HAIR | HEAD_HAIR + + + +/// Extending species to support alternate digilegs +/datum/species + var/list/digi_leg_overrides = list( + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade, + ) diff --git a/modular_doppler/modular_species/species_types/slugcats/slugcat.dm b/modular_doppler/modular_species/species_types/slugcats/slugcat.dm index 83fa6be922d3a..f4e5ba62f3b91 100644 --- a/modular_doppler/modular_species/species_types/slugcats/slugcat.dm +++ b/modular_doppler/modular_species/species_types/slugcats/slugcat.dm @@ -38,6 +38,10 @@ BODY_ZONE_CHEST = /obj/item/bodypart/chest/slugcat, BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/lizard/slugcat, BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/lizard/slugcat, + BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/lizard/slugcat, + BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/lizard/slugcat, + ) + digi_leg_overrides = list( BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/digitigrade/slugcat, BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/digitigrade/slugcat, ) diff --git a/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm b/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm index 34d0760a4aa31..8ad5281b3ffbb 100644 --- a/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm +++ b/modular_doppler/modular_species/species_types/slugcats/slugcat_bodyparts.dm @@ -17,20 +17,24 @@ icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' limb_id = SPECIES_SLUGCAT -/obj/item/bodypart/leg/left/digitigrade/slugcat +/obj/item/bodypart/leg/left/lizard/slugcat + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' + limb_id = SPECIES_SLUGCAT + +/obj/item/bodypart/leg/left/digitigrade/slugcat/ icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' - limb_id = BODYPART_ID_DIGITIGRADE - bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE /obj/item/bodypart/leg/left/digitigrade/slugcat/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() if(limb_id == SPECIES_LIZARD) limb_id = SPECIES_SLUGCAT -/obj/item/bodypart/leg/right/digitigrade/slugcat +/obj/item/bodypart/leg/right/lizard/slugcat + icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' + limb_id = SPECIES_SLUGCAT + +/obj/item/bodypart/leg/right/digitigrade/slugcat/ icon_greyscale = 'modular_doppler/modular_species/species_types/slugcats/icons/bodyparts.dmi' - limb_id = BODYPART_ID_DIGITIGRADE - bodyshape = BODYSHAPE_HUMANOID | BODYSHAPE_DIGITIGRADE /obj/item/bodypart/leg/right/digitigrade/slugcat/update_limb(dropping_limb = FALSE, is_creating = FALSE) . = ..() diff --git a/tgstation.dme b/tgstation.dme index ca227bbab39a3..62e3dad0ed50b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -6459,12 +6459,21 @@ #include "modular_doppler\loadout_categories\categories\weapons.dm" #include "modular_doppler\modular_antagonist\code\antag_datum.dm" #include "modular_doppler\modular_cosmetics\code\jacket_pockets.dm" +#include "modular_doppler\modular_cosmetics\code\uniform_overrides.dm" +#include "modular_doppler\modular_cosmetics\code\face\basemasks.dm" #include "modular_doppler\modular_cosmetics\code\hands\rings.dm" +#include "modular_doppler\modular_cosmetics\code\hats\doppler_command_hats.dm" #include "modular_doppler\modular_cosmetics\code\neck\collar.dm" +#include "modular_doppler\modular_cosmetics\code\neck\doppler_command_mantles.dm" +#include "modular_doppler\modular_cosmetics\code\shoes\baseshoes.dm" #include "modular_doppler\modular_cosmetics\code\storage\rings.dm" +#include "modular_doppler\modular_cosmetics\code\suits\basesuits.dm" #include "modular_doppler\modular_cosmetics\code\suits\jacket.dm" +#include "modular_doppler\modular_cosmetics\code\suits\modsuit.dm" +#include "modular_doppler\modular_cosmetics\code\under\doppler_uniforms.dm" #include "modular_doppler\modular_cosmetics\code\under\miscellania.dm" #include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_neck.dm" +#include "modular_doppler\modular_cosmetics\GAGS\greyscale_configs_under.dm" #include "modular_doppler\modular_crafting\code\crafting_extended.dm" #include "modular_doppler\modular_crafting\code\sheet_types.dm" #include "modular_doppler\modular_customization\accessories\code\lizard_accessories\lizard_body_markings.dm"