Adds bodyshape arg to a lot of missing spots, generalizes 'wear_digi_version', adds female gender shaping to digi sprites (#96633)

## About The Pull Request

Adds female gender shaping to digi species (such as lizards), for the
top half only.

<details><summary>Shown here</summary>

<img width="337" height="464" alt="dreamseeker_HhKjfrmJ1f"
src="https://github.com/user-attachments/assets/a5a57580-6798-40e4-925c-b3a63e0e540e"
/>

</details>

Also just adds a bunch of bodyshape args now that we are passing that to
the clothing rendering. This will help with anything where you want
unique digi handling for any specific items. Also fixes some missing
args and even improper args in some of these proc overrides.

## Why It's Good For The Game

Makes things more convenient for coders. Adds some more customization
options for feminine lizardfolk.

## Changelog

🆑
code: bodyshape is now accessible in build_worn_overlays() and similar
procs.
image: lizards now have support female gender shaping for their suits
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
Bloop
2026-06-30 20:02:53 +00:00
committed by GitHub
co-authored by Ghom
parent 4bea8bf1f5
commit 7f4171fd4d
68 changed files with 205 additions and 109 deletions
+1 -1
View File
@@ -222,7 +222,7 @@
#define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0)
/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, list/modifiers)
#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked"
/// Called by /obj/item/proc/worn_overlays(list/overlays, mutable_appearance/standing, isinhands, icon_file)
/// Called by /obj/item/proc/worn_overlays(list/overlays, mutable_appearance/standing, isinhands, icon_file, bodyshape)
#define COMSIG_ITEM_GET_WORN_OVERLAYS "item_get_worn_overlays"
/// Called by /obj/item/proc/separate_worn_overlays(list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
#define COMSIG_ITEM_GET_SEPARATE_WORN_OVERLAYS "item_get_separate_worn_overlays"
+1 -1
View File
@@ -89,7 +89,7 @@
dirt_overlay.color = dirt_color
overlays += dirt_overlay
/datum/component/clothing_dirt/proc/on_separate_worn_overlays(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/datum/component/clothing_dirt/proc/on_separate_worn_overlays(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
SIGNAL_HANDLER
if (isinhands || !dirtiness || !dirt_state || !(source.flags_cover & PEPPERPROOF))
+4 -4
View File
@@ -104,13 +104,13 @@
else
base_examine += span_notice("There's nothing placed on [parent]. Yet.")
/datum/component/hat_stabilizer/proc/get_worn_overlays(atom/movable/source, list/overlays, mutable_appearance/standing, isinhands, icon_file)
/datum/component/hat_stabilizer/proc/get_worn_overlays(atom/movable/source, list/overlays, mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
SIGNAL_HANDLER
if(isinhands)
return
if(!attached_hat)
return
var/mutable_appearance/worn_overlay = attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER - 0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi')
var/mutable_appearance/worn_overlay = attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER - 0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi', bodyshape = bodyshape)
worn_overlay.appearance_flags |= RESET_COLOR
// loose hats are slightly angled
if(loose_hat)
@@ -121,13 +121,13 @@
worn_overlay.pixel_z = pixel_z_offset + attached_hat.worn_y_offset
overlays += worn_overlay
/datum/component/hat_stabilizer/proc/get_separate_worn_overlays(atom/movable/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/datum/component/hat_stabilizer/proc/get_separate_worn_overlays(atom/movable/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
SIGNAL_HANDLER
if (isinhands)
return
if(!attached_hat)
return
var/mutable_appearance/worn_overlay = attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER - 0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi')
var/mutable_appearance/worn_overlay = attached_hat.build_worn_icon(default_layer = ABOVE_BODY_FRONT_HEAD_LAYER - 0.1, default_icon_file = 'icons/mob/clothing/head/default.dmi', bodyshape = bodyshape)
for (var/mutable_appearance/overlay in worn_overlay.overlays)
overlay.layer = -ABOVE_BODY_FRONT_HEAD_LAYER + 0.1
// loose hats are slightly angled
@@ -106,7 +106,7 @@
return COMPONENT_ITEM_ACTION_SLOT_INVALID
/// Apply an overlay while the item is not deployed
/datum/component/toggle_attached_clothing/proc/on_checked_overlays(obj/item/source, list/overlays, mutable_appearance/standing, isinhands, icon_file)
/datum/component/toggle_attached_clothing/proc/on_checked_overlays(obj/item/source, list/overlays, mutable_appearance/standing, isinhands, icon_file, bodyshape)
SIGNAL_HANDLER
if (isinhands || currently_deployed)
return
+3 -2
View File
@@ -39,9 +39,10 @@
result = mutable_appearance(icon(cached_icons[key]))
else if(greyscale_config || use_female || use_digi) // icon ops ahead
var/icon/created = icon(greyscale_config ? SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) : icon, icon_state_to_use)
var/icon_file_path = greyscale_config ? SSgreyscale.GetColoredIconByType(greyscale_config, greyscale_colors) : icon
var/icon/created = icon(icon_file_path, icon_state_to_use)
if(use_female)
created = wear_female_version(icon_state_to_use, icon, female_sprite_flags_to_use)
created = wear_female_version(icon_state_to_use, icon_file_path, icon, female_sprite_flags_to_use)
if(use_digi)
var/icon/replacement = icon(SSgreyscale.GetColoredIconByType(/datum/greyscale_config/digitigrade_underwear, greyscale_colors), digi_icon_state)
created = replace_icon_legs(created, replacement)
+2
View File
@@ -172,6 +172,8 @@
var/list/species_exception = null
///This is a bitfield that defines what variations exist for bodyparts like Digi legs. See: code\_DEFINES\inventory.dm
var/supports_variations_flags = NONE
/// This is a bitfield that defines which bodyshapes this item is capable of rendering, used by build_worn_icon()
var/bodyshapes_with_variations = NONE
///Items can by default thrown up to 10 tiles by TK users
tk_throw_range = 10
@@ -421,7 +421,7 @@
. += neon_overlay
. += emissive_appearance(neon_icon || icon, neon_icon_state || icon_state, src, alpha = emissive_alpha)
/obj/item/stack/tile/carpet/neon/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/stack/tile/carpet/neon/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands || !neon_inhand_icon_state)
return
@@ -1240,7 +1240,7 @@
. = ..()
. += emissive_appearance(icon, icon_state, src, alpha = alpha)
/obj/item/stack/tile/emissive_test/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/stack/tile/emissive_test/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
. += emissive_appearance(standing.icon, standing.icon_state, src, alpha = standing.alpha)
+1 -1
View File
@@ -409,7 +409,7 @@
turn_on()
//Todo : cache these.
/obj/item/reagent_containers/chemtank/worn_overlays(mutable_appearance/standing, isinhands = FALSE) //apply chemcolor and level
/obj/item/reagent_containers/chemtank/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE) //apply chemcolor and level
. = ..()
//inhands + reagent_filling
if(isinhands || !reagents.total_volume)
@@ -161,7 +161,7 @@
tip_overlay.color = tip_material.color
. += tip_overlay
/obj/item/spear/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/spear/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (icon_prefix != SPEAR_CUSTOM_TIP_PREFIX || !isinhands)
return
+1 -1
View File
@@ -345,7 +345,7 @@
if (istype(charging, /obj/item/melee/baton/security/))
. += mutable_appearance(icon, "baton")
/obj/item/portable_wind_turbine/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/portable_wind_turbine/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
+1 -1
View File
@@ -393,7 +393,7 @@ LINEN BINS
add_overlay(gondola_mouth)
add_overlay(gondola_eyes)
/obj/item/bedsheet/gondola/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/bedsheet/gondola/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += mutable_appearance(icon_file, gondola_mouth)
@@ -989,7 +989,7 @@
add_overlay(object_overlay)
hood?.add_overlay(hood_object_overlay)
/obj/item/clothing/suit/hooded/cultrobes/eldritch/rust/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/clothing/suit/hooded/cultrobes/eldritch/rust/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
// Should basically catch toggling the hood on/off while standing on rust
if(rusted)
+1 -1
View File
@@ -646,7 +646,7 @@ BLIND // can't see anything
return ..()
/// Returns a list of overlays with our blood, if we're bloodied
/obj/item/clothing/proc/get_blood_overlay(blood_state)
/obj/item/clothing/proc/get_blood_overlay(blood_state, bodyshape = NONE)
if (!GET_ATOM_BLOOD_DECAL_LENGTH(src))
return
+3 -3
View File
@@ -44,18 +44,18 @@
user.visible_message(span_suicide("\the [src] are forcing [user]'s hands around [user.p_their()] neck! It looks like the gloves are possessed!"))
return OXYLOSS
/obj/item/clothing/gloves/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/gloves/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves")
/obj/item/clothing/gloves/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/clothing/gloves/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
var/blood_overlay = get_blood_overlay("glove")
var/blood_overlay = get_blood_overlay("glove", bodyshape)
if (blood_overlay)
. += blood_overlay
+3 -3
View File
@@ -55,18 +55,18 @@
R.visible_message(span_notice("[src] lands neatly on top of [R]!"), span_notice("[src] lands perfectly on top of you."))
R.place_on_head(src) //hats aren't designed to snugly fit borg heads or w/e so they'll always manage to knock eachother off
/obj/item/clothing/head/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/head/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet")
/obj/item/clothing/head/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/clothing/head/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
var/blood_overlay = get_blood_overlay("helmet")
var/blood_overlay = get_blood_overlay("helmet", bodyshape)
if (blood_overlay)
. += blood_overlay
+1 -1
View File
@@ -22,7 +22,7 @@
. = ..()
AddElement(/datum/element/floor_placeable)
/obj/item/clothing/head/cone/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/head/cone/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
+3 -3
View File
@@ -151,7 +151,7 @@
if(.)
playsound(src, up ? SFX_VISOR_UP : SFX_VISOR_DOWN, 50, TRUE)
/obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/clothing/head/utility/hardhat/welding/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
@@ -223,7 +223,7 @@
visor_flags_inv = NONE
visor_state = "weldvisor_atmos"
/obj/item/clothing/head/utility/hardhat/welding/atmos/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/head/utility/hardhat/welding/atmos/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
@@ -270,7 +270,7 @@
if(light_on)
. += emissive_appearance(icon, "carved_pumpkin-emissive", src, alpha = src.alpha)
/obj/item/clothing/head/utility/hardhat/pumpkinhead/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/head/utility/hardhat/pumpkinhead/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(light_on && !isinhands)
. += emissive_appearance(icon_file, "carved_pumpkin-emissive", src, alpha = src.alpha)
+1 -1
View File
@@ -110,7 +110,7 @@
. = ..()
AddComponent(/datum/component/seclite_attachable, light_icon_state = "flight")
/obj/item/clothing/head/helmet/press/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/head/helmet/press/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
+1 -1
View File
@@ -32,7 +32,7 @@
icon_state = hair_style.icon_state
return ..()
/obj/item/clothing/head/wig/worn_overlays(mutable_appearance/standing, isinhands = FALSE, file2use)
/obj/item/clothing/head/wig/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
+3 -3
View File
@@ -26,18 +26,18 @@
var/status = !(clothing_flags & VOICEBOX_DISABLED)
to_chat(user, span_notice("You turn the voice box in [src] [status ? "on" : "off"]."))
/obj/item/clothing/mask/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/mask/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands || !(body_parts_covered & HEAD))
return
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
/obj/item/clothing/mask/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/clothing/mask/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (isinhands || !(body_parts_covered & HEAD))
return
var/blood_overlay = get_blood_overlay("mask")
var/blood_overlay = get_blood_overlay("mask", bodyshape)
if (blood_overlay)
. += blood_overlay
+2 -2
View File
@@ -58,10 +58,10 @@ GLOBAL_LIST_INIT(clown_mask_options, list(
LAZYADD(gas_filters, inserted_filter)
has_filter = TRUE
/obj/item/clothing/mask/gas/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/clothing/mask/gas/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands && cig)
. += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi')
. += cig.build_worn_icon(default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/clothing/mask.dmi', bodyshape = bodyshape)
/obj/item/clothing/mask/gas/Destroy()
QDEL_LAZYLIST(gas_filters)
+4 -4
View File
@@ -15,11 +15,11 @@
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedmask")
/obj/item/clothing/neck/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/clothing/neck/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (isinhands || !(body_parts_covered & HEAD))
return
var/blood_overlay = get_blood_overlay("mask")
var/blood_overlay = get_blood_overlay("mask", bodyshape)
if (blood_overlay)
. += blood_overlay
@@ -145,7 +145,7 @@
context[SCREENTIP_CONTEXT_ALT_LMB] = "Tie"
return CONTEXTUAL_SCREENTIP_SET
/obj/item/clothing/neck/tie/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/clothing/neck/tie/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
var/mob/living/carbon/human/wearer = loc
if(!ishuman(wearer) || !wearer.w_uniform)
@@ -584,7 +584,7 @@
resistance_flags = FIRE_PROOF | LAVA_PROOF
custom_materials = list(/datum/material/bone = SHEET_MATERIAL_AMOUNT * 2, /datum/material/diamond = SHEET_MATERIAL_AMOUNT * 2)
/obj/item/clothing/neck/wreath/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/neck/wreath/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "wreath_emissive", src, alpha = src.alpha)
+3 -3
View File
@@ -63,18 +63,18 @@
playsound(user, 'sound/items/weapons/genhit2.ogg', 50, TRUE)
return BRUTELOSS
/obj/item/clothing/shoes/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/shoes/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
if(damaged_clothes)
. += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe")
/obj/item/clothing/shoes/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/clothing/shoes/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
var/blood_overlay = get_blood_overlay("shoe")
var/blood_overlay = get_blood_overlay("shoe", bodyshape)
if (blood_overlay)
. += blood_overlay
+6
View File
@@ -4,6 +4,7 @@
icon_state = "jackboots"
inhand_icon_state = "jackboots"
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
body_parts_covered = FEET|LEGS
armor_type = /datum/armor/shoes_combat
strip_delay = 4 SECONDS
@@ -47,6 +48,7 @@
icon_state = "jackboots"
inhand_icon_state = "jackboots"
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
strip_delay = 3 SECONDS
equip_delay_other = 5 SECONDS
resistance_flags = NONE
@@ -74,6 +76,7 @@
icon_state = "ftc_boots"
inhand_icon_state = null
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/shoes/jackboots/floortile/Initialize(mapload)
. = ..()
@@ -85,6 +88,7 @@
icon_state = "winterboots"
inhand_icon_state = null
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
armor_type = /datum/armor/shoes_winterboots
cold_protection = FEET|LEGS
min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT
@@ -136,6 +140,7 @@
inhand_icon_state = "jackboots"
armor_type = /datum/armor/shoes_workboots
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
strip_delay = 2 SECONDS
equip_delay_other = 4 SECONDS
lace_time = 8 SECONDS
@@ -166,6 +171,7 @@
inhand_icon_state = null
lace_time = 8 SECONDS
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
/obj/item/clothing/shoes/russian/Initialize(mapload)
. = ..()
+1 -1
View File
@@ -93,7 +93,7 @@
AddElement(/datum/element/gags_recolorable)
update_icon(UPDATE_OVERLAYS)
/obj/item/clothing/shoes/glow/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/shoes/glow/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(DEFAULT_SHOES_FILE, "glow_shoes_emissive", src, alpha = src.alpha)
+2
View File
@@ -12,6 +12,8 @@
greyscale_config_inhand_right = /datum/greyscale_config/sneakers/inhand_right
greyscale_colors = "#2d2d33#ffffff"
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
flags_1 = IS_PLAYER_COLORABLE_1
interaction_flags_mouse_drop = NEED_HANDS
@@ -176,12 +176,12 @@
return ITEM_INTERACT_SUCCESS
///By the by, helmets have the update_icon_updates_onmob element, so we don't have to call mob.update_worn_head()
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/clothing/head/helmet/space/plasmaman/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands && !up)
. += mutable_appearance('icons/mob/clothing/head/plasmaman_head.dmi', visor_icon)
/obj/item/clothing/head/helmet/space/plasmaman/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/clothing/head/helmet/space/plasmaman/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands && smile)
var/mutable_appearance/smiley = mutable_appearance('icons/mob/clothing/head/plasmaman_head.dmi', smile_state)
+3 -3
View File
@@ -18,7 +18,7 @@
var/blood_overlay_type = "suit"
limb_integrity = 0 // disabled for most exo-suits
/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/suit/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
@@ -37,11 +37,11 @@
if(displayed.above_suit && undershirt.accessory_overlay)
. += undershirt.accessory_overlay
/obj/item/clothing/suit/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/clothing/suit/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
var/blood_overlay = get_blood_overlay(blood_overlay_type)
var/blood_overlay = get_blood_overlay(blood_overlay_type, bodyshape)
if (blood_overlay)
. += blood_overlay
+2 -2
View File
@@ -65,7 +65,7 @@
desc = "A blue armor vest used to distinguish <i>non-combatant</i> \"PRESS\" members, like if anyone cares."
icon_state = "armor_press"
/obj/item/clothing/suit/armor/vest/press/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/armor/vest/press/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
@@ -225,7 +225,7 @@
resistance_flags = FLAMMABLE
dog_fashion = null
/obj/item/clothing/suit/armor/vest/secjacket/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/armor/vest/secjacket/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
+4
View File
@@ -661,6 +661,7 @@
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/costume/soviet
name = "soviet armored coat"
@@ -683,6 +684,7 @@
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/costume/pg
name = "powder ganger jacket"
@@ -691,6 +693,7 @@
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/costume/irs
name = "internal revenue service jacket"
@@ -699,6 +702,7 @@
inhand_icon_state = null
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/costume/bear_suit
name = "bear suit"
+1 -1
View File
@@ -17,7 +17,7 @@
update_icon(UPDATE_OVERLAYS)
AddElement(/datum/element/adjust_fishing_difficulty, -5)
/obj/item/clothing/suit/hooded/ethereal_raincoat/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/hooded/ethereal_raincoat/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance('icons/mob/clothing/suits/ethereal.dmi', "eth_raincoat_glow_worn", offset_spokesman = src, alpha = src.alpha)
+1 -1
View File
@@ -18,7 +18,7 @@
update_icon(UPDATE_OVERLAYS)
AddElement(/datum/element/adjust_fishing_difficulty, 8)
/obj/item/clothing/suit/costume/ghost_sheet/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/costume/ghost_sheet/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands && check_holidays(HALLOWEEN))
. += emissive_appearance('icons/mob/simple/mob.dmi', "ghost", offset_spokesman = src, alpha = src.alpha)
+2 -2
View File
@@ -194,7 +194,7 @@
resistance_flags = NONE
species_exception = list(/datum/species/golem)
/obj/item/clothing/suit/hazardvest/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/hazardvest/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
@@ -442,7 +442,7 @@
fire = 100
acid = 50
/obj/item/clothing/suit/atmos_overalls/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/atmos_overalls/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
+2 -1
View File
@@ -10,6 +10,7 @@
allowed = list (/obj/item/gun/energy/laser/bluetag)
resistance_flags = NONE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/bluetag/equipped(mob/equipper, slot)
. = ..()
@@ -34,7 +35,7 @@
allowed = list (/obj/item/gun/energy/laser/redtag)
resistance_flags = NONE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/suit/redtag/equipped(mob/equipper, slot)
. = ..()
+1
View File
@@ -35,3 +35,4 @@
cold_protection = CHEST|GROIN|ARMS|LEGS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
+1 -1
View File
@@ -53,7 +53,7 @@
fire = 100
acid = 50
/obj/item/clothing/suit/utility/fire/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/utility/fire/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
+3 -3
View File
@@ -543,7 +543,7 @@
/datum/armor/wintercoat_engineering
fire = 20
/obj/item/clothing/suit/hooded/wintercoat/engineering/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/hooded/wintercoat/engineering/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
@@ -556,7 +556,7 @@
/datum/armor/winterhood_engineering
fire = 20
/obj/item/clothing/head/hooded/winterhood/engineering/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/head/hooded/winterhood/engineering/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "[icon_state]-emissive", src, alpha = src.alpha, effect_type = EMISSIVE_SPECULAR)
@@ -759,7 +759,7 @@
hood_down_overlay_suffix = ""
hood_up_affix = "_t"
/obj/item/clothing/suit/hooded/wintercoat/zipup/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/suit/hooded/wintercoat/zipup/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(isinhands || (hood && hood.loc != src))
return
+4 -3
View File
@@ -10,6 +10,7 @@
interaction_flags_click = NEED_DEXTERITY|ALLOW_RESTING
armor_type = /datum/armor/clothing_under
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
drop_sound = 'sound/items/handling/cloth/cloth_drop1.ogg'
pickup_sound = 'sound/items/handling/cloth/cloth_pickup1.ogg'
@@ -110,7 +111,7 @@
return changed ? CONTEXTUAL_SCREENTIP_SET : .
/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE)
/obj/item/clothing/under/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
return
@@ -120,11 +121,11 @@
if(accessory_overlay)
. += accessory_overlay
/obj/item/clothing/under/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/clothing/under/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if (isinhands)
return
var/blood_overlay = get_blood_overlay("uniform")
var/blood_overlay = get_blood_overlay("uniform", bodyshape)
if (blood_overlay)
. += blood_overlay
+1
View File
@@ -22,6 +22,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/// Returns a random, acceptable jumpsuit typepath
/proc/get_random_jumpsuit()
+7
View File
@@ -105,6 +105,7 @@
body_parts_covered = CHEST|GROIN|ARMS
female_sprite_flags = NO_FEMALE_UNIFORM
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
can_adjust = FALSE
resistance_flags = NONE
@@ -128,6 +129,7 @@
body_parts_covered = CHEST|GROIN
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
alternate_worn_layer = UNDER_SUIT_LAYER
can_adjust = FALSE
clothing_flags = parent_type::clothing_flags | CARP_STYLE_FACTOR //weebs are gonna love this
@@ -147,6 +149,7 @@
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
clothing_flags = parent_type::clothing_flags | CARP_STYLE_FACTOR
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -168,6 +171,7 @@
body_parts_covered = CHEST|GROIN|ARMS
can_adjust = FALSE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
clothing_flags = parent_type::clothing_flags | CARP_STYLE_FACTOR
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -385,6 +389,7 @@
flags_1 = IS_PLAYER_COLORABLE_1
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/costume/buttondown/skirt/service //preset one to be a formal white shirt and black skirt
icon_state = "/obj/item/clothing/under/costume/buttondown/skirt/service"
@@ -551,6 +556,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/costume/head_of_personnel
name = "head of personnel's suit"
@@ -568,3 +574,4 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
+1 -1
View File
@@ -15,7 +15,7 @@
. = ..()
update_icon(UPDATE_OVERLAYS)
/obj/item/clothing/under/ethereal_tunic/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/under/ethereal_tunic/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance('icons/mob/clothing/under/ethereal.dmi', "eth_tunic_emissive", offset_spokesman = src, alpha = src.alpha)
@@ -17,6 +17,7 @@
body_parts_covered = CHEST|GROIN|ARMS
dying_key = DYE_REGISTRY_JUMPSKIRT
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
/obj/item/clothing/under/rank/cargo/tech
@@ -32,6 +33,7 @@
inhand_icon_state = "lb_suit"
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/cargo/tech/skirt
name = "cargo technician's skirt"
@@ -40,6 +42,7 @@
inhand_icon_state = "lb_suit"
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
@@ -42,6 +42,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/centcom/officer_skirt/replica
name = "\improper CentCom turtleneck skirt replica"
@@ -55,6 +56,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
body_parts_covered = CHEST|GROIN|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/centcom/military
name = "tactical combat uniform"
@@ -27,6 +27,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/head_of_personnel
desc = "A slick uniform worn by those to earn the position of \"Head of Personnel\"."
@@ -43,6 +44,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/hydroponics
desc = "It's a jumpsuit designed to protect against minor plant-related hazards."
@@ -63,6 +65,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/janitor
desc = "It's the official uniform of the station's janitor. It has minor protection from biohazards."
@@ -82,6 +85,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/janitor/maid
name = "maid uniform"
@@ -122,6 +126,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/beige
name = "good lawyer's suit"
@@ -137,6 +142,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/red
name = "lawyer red suit"
@@ -150,6 +156,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/blue
name = "lawyer blue suit"
@@ -163,6 +170,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/bluesuit
name = "blue buttondown suit"
@@ -187,6 +195,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/purpsuit
name = "purple suit"
@@ -204,6 +213,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/galaxy
icon = 'icons/obj/clothing/under/lawyer_galaxy.dmi'
@@ -219,6 +229,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/lawyer/galaxy/red
name = "red galaxy suit"
@@ -231,6 +242,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/cookjorts
name = "grilling shorts"
@@ -14,6 +14,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/mime/sexy
name = "sexy mime outfit"
@@ -32,6 +33,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/civilian/clown/Initialize(mapload)
. = ..()
@@ -21,6 +21,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/captain/parade
name = "captain's parade uniform"
@@ -31,6 +31,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/engineering/chief_engineer/turtleneck
name = "chief engineer's turtleneck"
@@ -50,6 +51,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/engineering/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians. Made from fire resistant materials."
@@ -66,6 +68,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/engineering/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. Made from fire resistant materials."
@@ -89,3 +92,4 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
@@ -22,6 +22,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/chief_medical_officer
desc = "It's a jumpsuit worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection."
@@ -38,6 +39,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/chief_medical_officer/scrubs
name = "chief medical officer's scrubs"
@@ -67,6 +69,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
@@ -83,6 +86,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/scrubs
name = "medical scrubs"
@@ -118,6 +122,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/scrubs/coroner
name = "coroner scrubs"
@@ -144,6 +149,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/paramedic
desc = "It's made of a special fiber that provides minor protection against biohazards. It has a dark blue cross on the chest denoting that the wearer is a trained paramedic."
@@ -160,6 +166,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/medical/doctor/nurse
desc = "It's a jumpsuit commonly worn by nursing staff in the medical department."
+6
View File
@@ -33,6 +33,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/rnd/research_director/alt
name = "research director's tan suit"
@@ -57,6 +58,7 @@
body_parts_covered = CHEST|GROIN|ARMS
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/rnd/research_director/turtleneck
desc = "A Nanotrasen-purple turtleneck and black jeans, for a director with a superior sense of style."
@@ -74,6 +76,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/rnd/scientist
name = "scientist's jumpsuit"
@@ -89,6 +92,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/rnd/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
@@ -106,6 +110,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/rnd/geneticist
name = "geneticist's jumpsuit"
@@ -120,3 +125,4 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
@@ -45,6 +45,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/officer/blueshirt
name = "blue shirt and tie"
@@ -90,6 +91,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/warden/formal
desc = "The insignia on this uniform tells you that this uniform belongs to the Warden."
@@ -118,6 +120,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/detective/noir
name = "noir suit"
@@ -136,6 +139,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/*
* Head of Security
@@ -163,6 +167,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/head_of_security/grey
name = "head of security's grey jumpsuit"
@@ -187,6 +192,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
alt_covers_chest = TRUE
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/head_of_security/parade
name = "head of security's parade uniform"
@@ -265,6 +271,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/rank/security/officer/beatcop
name = "space police uniform"
+1
View File
@@ -11,6 +11,7 @@
body_parts_covered = GROIN
female_sprite_flags = NO_FEMALE_UNIFORM
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
can_adjust = FALSE
species_exception = list(/datum/species/golem)
flags_1 = IS_PLAYER_COLORABLE_1
@@ -3,6 +3,7 @@
can_adjust = FALSE
body_parts_covered = CHEST|GROIN
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
icon = 'icons/obj/clothing/under/dress.dmi'
worn_icon = 'icons/mob/clothing/under/dress.dmi'
+3
View File
@@ -49,6 +49,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/suit/white
name = "white suit"
@@ -64,6 +65,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/suit/tan
name = "tan suit"
@@ -92,6 +94,7 @@
dying_key = DYE_REGISTRY_JUMPSKIRT
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY|FEMALE_UNIFORM_NO_BREASTS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/suit/tuxedo
name = "tuxedo"
+11
View File
@@ -23,6 +23,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
dying_key = DYE_REGISTRY_JUMPSKIRT
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/bloodred
name = "blood-red sneaksuit"
@@ -33,6 +34,7 @@
resistance_flags = FIRE_PROOF | ACID_PROOF
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/bloodred/Initialize(mapload)
. = ..()
@@ -97,6 +99,7 @@
female_sprite_flags = FEMALE_UNIFORM_TOP_ONLY
dying_key = DYE_REGISTRY_JUMPSKIRT
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/sniper
name = "tactical turtleneck suit"
@@ -105,6 +108,7 @@
inhand_icon_state = "bl_suit"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/camo
name = "camouflage fatigues"
@@ -113,6 +117,7 @@
inhand_icon_state = "g_suit"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/cybersun
name = "\improper Cybersun businesswear"
@@ -122,6 +127,7 @@
inhand_icon_state = "bl_suit"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/floortilecamo
name = "floortile camouflage fatigues"
@@ -131,6 +137,7 @@
inhand_icon_state = "gy_suit"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/floortilecamo/Initialize(mapload)
. = ..()
@@ -142,6 +149,7 @@
icon_state = "trackpants"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
armor_type = /datum/armor/clothing_under/syndicate_soviet
resistance_flags = NONE
@@ -154,6 +162,7 @@
icon_state = "syndicate_combat"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
/obj/item/clothing/under/syndicate/rus_army
name = "advanced military tracksuit"
@@ -161,6 +170,7 @@
icon_state = "rus_under"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
armor_type = /datum/armor/clothing_under/syndicate_rus_army
resistance_flags = NONE
@@ -175,6 +185,7 @@
icon_state = "scrubswine"
can_adjust = FALSE
supports_variations_flags = NONE
bodyshapes_with_variations = NONE
armor_type = /datum/armor/clothing_under/syndicate_scrubs
/obj/item/clothing/under/syndicate/scrubs/Initialize(mapload)
+4 -4
View File
@@ -508,11 +508,11 @@
bait_state = "battery_overlay"
. += bait_state
/obj/item/fishing_rod/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/fishing_rod/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
. += get_fishing_worn_overlays(standing, isinhands, icon_file)
. += get_fishing_worn_overlays(standing, isinhands, icon_file, bodyshape)
/obj/item/fishing_rod/proc/get_fishing_worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/fishing_rod/proc/get_fishing_worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = list()
var/line_color = line?.line_color || default_line_color
var/mutable_appearance/reel_overlay = mutable_appearance(icon_file, "reel_overlay", appearance_flags = RESET_COLOR|KEEP_APART)
@@ -740,7 +740,7 @@
return list()
return ..()
/obj/item/fishing_rod/telescopic/get_fishing_worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/fishing_rod/telescopic/get_fishing_worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
if(!HAS_TRAIT(src, TRAIT_TRANSFORM_ACTIVE))
return list()
return ..()
+1 -1
View File
@@ -122,7 +122,7 @@
tag_overlay.pixel_z = box_offset
. += tag_overlay
/obj/item/pizzabox/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/pizzabox/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
var/current_offset = 2
if(!isinhands)
@@ -344,7 +344,7 @@ GLOBAL_LIST_INIT(nullrod_variants, init_nullrod_variants())
. = ..()
AddComponent(/datum/component/walking_aid)
/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/nullrod/staff/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(isinhands)
. += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_SHIELD_LAYER)
@@ -7,6 +7,7 @@
worn_icon = 'icons/mob/clothing/suits/utility.dmi'
inhand_icon_state = null
supports_variations_flags = CLOTHING_DIGITIGRADE_MASK
bodyshapes_with_variations = BODYSHAPE_DIGITIGRADE
body_parts_covered = CHEST|GROIN|LEGS|ARMS
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
@@ -115,6 +116,7 @@
alternate_worn_layer = NECK_LAYER
body_parts_covered = CHEST|GROIN|LEGS|ARMS
supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION_NO_NEW_ICON
bodyshapes_with_variations = NONE
cold_protection = CHEST|GROIN|LEGS|ARMS
min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT
heat_protection = CHEST|GROIN|LEGS|ARMS
@@ -100,7 +100,7 @@
else if(isliving(loc.loc)) // for the "worn as accessory" case
connect_kheiral_network(loc.loc)
/obj/item/clothing/accessory/kheiral_cuffs/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/clothing/accessory/kheiral_cuffs/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
. += emissive_appearance(icon_file, "strandcuff_emissive", src, alpha = src.alpha)
@@ -106,7 +106,7 @@
if (blink?.current_charges)
. += "hierophant_ready"
/obj/item/hierophant_club/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/hierophant_club/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if (blink?.current_charges)
. += "hierophant_ready"
@@ -49,7 +49,7 @@
greyscale_config = null
greyscale_colors = null
/obj/item/screwdriver/drone/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/screwdriver/drone/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
return
@@ -399,21 +399,21 @@
/// Overlays for the worn overlay so you can overlay while you overlay
/// eg: ammo counters, primed grenade flashing, etc.
/// "icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file
/obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file)
/obj/item/proc/worn_overlays(mutable_appearance/standing, isinhands = FALSE, icon_file, bodyshape = NONE)
SHOULD_CALL_PARENT(TRUE)
RETURN_TYPE(/list)
. = list()
if(blocks_emissive != EMISSIVE_BLOCK_NONE)
. += emissive_blocker(standing.icon, standing.icon_state, src)
SEND_SIGNAL(src, COMSIG_ITEM_GET_WORN_OVERLAYS, ., standing, isinhands, icon_file)
SEND_SIGNAL(src, COMSIG_ITEM_GET_WORN_OVERLAYS, ., standing, isinhands, icon_file, bodyshape)
/// worn_overlays to use when you'd want to use KEEP_APART. Don't use KEEP_APART neither there nor here, as it would break floating overlays
/obj/item/proc/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file)
/obj/item/proc/separate_worn_overlays(mutable_appearance/standing, mutable_appearance/draw_target, isinhands = FALSE, icon_file, bodyshape = NONE)
SHOULD_CALL_PARENT(TRUE)
RETURN_TYPE(/list)
. = list()
SEND_SIGNAL(src, COMSIG_ITEM_GET_SEPARATE_WORN_OVERLAYS, ., standing, draw_target, isinhands, icon_file)
SEND_SIGNAL(src, COMSIG_ITEM_GET_SEPARATE_WORN_OVERLAYS, ., standing, draw_target, isinhands, icon_file, bodyshape)
///Checks to see if any bodyparts need to be redrawn, then does so. update_limb_data = TRUE redraws the limbs to conform to the owner.
///Returns an integer representing the number of limbs that were updated.
@@ -28,7 +28,7 @@ GLOBAL_LIST_EMPTY(features_by_species)
*/
var/plural_form
///Whether or not the race has sexual characteristics (biological genders). At the moment this is only FALSE for skeletons and shadows
/// Whether or not the race has sexual characteristics (biological genders). At the moment this is only FALSE for skeletons and shadows
var/sexes = TRUE
///The maximum number of bodyparts this species can have.
@@ -93,13 +93,19 @@ There are several things that need to be remembered:
//"override_file = handled_by_bodyshape ? icon_file : null" MUST be added to the arguments of build_worn_icon()
//Friendly reminder that icon_exists_or_scream(file, state) is your friend when debugging this code.
var/handled_by_bodyshape = TRUE
var/digi = (bodyshape & BODYSHAPE_DIGITIGRADE)
var/icon_file
var/woman
var/female_sprite_flags = uniform.female_sprite_flags
//BEGIN SPECIES HANDLING
if((bodyshape & BODYSHAPE_DIGITIGRADE) && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION))
if(digi && (uniform.supports_variations_flags & CLOTHING_DIGITIGRADE_VARIATION))
icon_file = DIGITIGRADE_UNIFORM_FILE
//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
var/chest_is_dimorphic
if(dna.species.sexes)
var/obj/item/bodypart/chest/our_chest = get_bodypart(BODY_ZONE_CHEST)
chest_is_dimorphic = our_chest.is_dimorphic
if(chest_is_dimorphic && (bodyshape & BODYSHAPE_HUMANOID) && physique == FEMALE && !(female_sprite_flags & NO_FEMALE_UNIFORM)) //Agggggggghhhhh
woman = TRUE
if(!icon_exists(icon_file, RESOLVE_ICON_STATE(uniform)))
@@ -111,7 +117,7 @@ There are several things that need to be remembered:
default_layer = UNIFORM_LAYER,
default_icon_file = icon_file,
isinhands = FALSE,
female_uniform = woman ? uniform.female_sprite_flags : null,
female_uniform = woman ? female_sprite_flags : null,
override_state = target_overlay,
override_file = handled_by_bodyshape ? icon_file : null,
bodyshape = bodyshape,
@@ -301,7 +307,8 @@ There are several things that need to be remembered:
if(HAS_TRAIT(worn_item, TRAIT_NO_WORN_ICON) || (obscured_slots & HIDESUITSTORAGE))
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')
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', bodyshape = bodyshape)
apply_height(s_store_overlay, ENTIRE_BODY)
var/obj/item/bodypart/chest/my_chest = get_bodypart(BODY_ZONE_CHEST)
my_chest?.worn_suit_storage_offset?.apply_offset(s_store_overlay)
@@ -430,12 +437,12 @@ There are several things that need to be remembered:
return hands
/// 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]"
/proc/wear_female_version(icon_state, icon_file_path, icon, type, greyscale_colors, bodyshape)
var/index = "[icon_file_path]-[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/female_icon_state = "female[type == FEMALE_UNIFORM_FULL ? "_full" : ((!type || type & FEMALE_UNIFORM_TOP_ONLY) || bodyshape & BODYSHAPE_DIGITIGRADE ? "_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)
@@ -444,24 +451,24 @@ There are several things that need to be remembered:
return icon(female_clothing_icon)
/// Modifies a sprite to conform to digitigrade body shapes
/proc/wear_digi_version(icon/base_icon, obj/item/item, key, greyscale_colors)
ASSERT(istype(item), "wear_digi_version: no item passed")
ASSERT(istext(key), "wear_digi_version: no key passed")
if(isnull(greyscale_colors) || length(SSgreyscale.ParseColorString(greyscale_colors)) > 1)
greyscale_colors = item.get_general_color(base_icon)
/// Modifies a sprite to conform to custom body shapes
/obj/item/proc/get_bodyshape_icon(icon/base_icon, key, bodyshape)
ASSERT(istext(key), "get_bodyshape_icon: no key passed")
if((bodyshape & BODYSHAPE_DIGITIGRADE) && (supports_variations_flags & CLOTHING_DIGITIGRADE_MASK))
if(isnull(greyscale_colors) || length(SSgreyscale.ParseColorString(greyscale_colors)) > 1)
greyscale_colors = get_general_color(base_icon)
var/index = "[key]-[item.type]-[greyscale_colors]"
var/static/list/digitigrade_clothing_cache = list()
var/icon/resulting_icon = digitigrade_clothing_cache[index]
if(!resulting_icon)
resulting_icon = item.generate_digitigrade_icons(base_icon, greyscale_colors)
var/index = "[key]-[type]-[greyscale_colors]"
var/static/list/digitigrade_clothing_cache = list()
var/icon/resulting_icon = digitigrade_clothing_cache[index]
if(!resulting_icon)
stack_trace("[item.type] is set to generate a masked digitigrade icon, but generate_digitigrade_icons was not implemented (or error'd).")
return base_icon
digitigrade_clothing_cache[index] = fcopy_rsc(resulting_icon)
resulting_icon = generate_digitigrade_icons(base_icon, greyscale_colors)
if(!resulting_icon)
stack_trace("[type] is set to generate a masked digitigrade icon, but generate_digitigrade_icons was not implemented (or error'd).")
return base_icon
digitigrade_clothing_cache[index] = fcopy_rsc(resulting_icon)
return icon(resulting_icon)
return icon(resulting_icon)
/// Modifies a sprite to replace the legs with a new version
/proc/replace_icon_legs(icon/base_icon, icon/new_legs)
@@ -591,16 +598,17 @@ generate/load female uniform sprites matching all previously decided variables
if(female_uniform)
building_icon = wear_female_version(
icon_state = t_state,
icon_file_path = file2use,
icon = file2use,
type = female_uniform,
greyscale_colors = greyscale_colors,
bodyshape = bodyshape,
)
if(!isinhands && (bodyshape & BODYSHAPE_DIGITIGRADE) && (supports_variations_flags & CLOTHING_DIGITIGRADE_MASK))
building_icon = wear_digi_version(
if(!isinhands && (bodyshapes_with_variations & bodyshape))
building_icon = get_bodyshape_icon(
base_icon = building_icon || icon(file2use, t_state),
item = src,
key = "[t_state]-[file2use]-[female_uniform]",
greyscale_colors = greyscale_colors,
bodyshape = bodyshape,
)
if(building_icon)
draw_target = mutable_appearance(building_icon, layer = -layer2use)
@@ -609,7 +617,7 @@ generate/load female uniform sprites matching all previously decided variables
//Get the overlays for this item when it's being worn
//eg: ammo counters, primed grenade flashes, etc.
var/list/worn_overlays = worn_overlays(draw_target, isinhands, file2use)
var/list/worn_overlays = worn_overlays(draw_target, isinhands, file2use, bodyshape)
if(length(worn_overlays))
draw_target.overlays += worn_overlays
draw_target = color_atom_overlay(draw_target)
@@ -618,7 +626,7 @@ generate/load female uniform sprites matching all previously decided variables
// but KEEP_APART breaks float layering, so what we need to do is make fake KEEP_APART for us to use
var/mutable_appearance/standing = mutable_appearance(layer = -layer2use, appearance_flags = KEEP_TOGETHER)
standing.overlays += draw_target
var/list/separate_overlays = separate_worn_overlays(standing, draw_target, isinhands, file2use)
var/list/separate_overlays = separate_worn_overlays(standing, draw_target, isinhands, file2use, bodyshape)
if(length(separate_overlays))
standing.overlays += separate_overlays
else // Don't nest overlays if there's nothing to nest against
+1 -1
View File
@@ -260,7 +260,7 @@
balloon_alert(user, "frequency set")
. = ITEM_INTERACT_SUCCESS
/obj/item/clothing/neck/link_scryer/worn_overlays(mutable_appearance/standing, isinhands)
/obj/item/clothing/neck/link_scryer/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!QDELETED(mod_link.link_call))
. += mutable_appearance('icons/mob/clothing/neck.dmi', "modlink_active")
+2 -2
View File
@@ -30,7 +30,7 @@
RegisterSignal(part_item, COMSIG_ITEM_GET_SEPARATE_WORN_OVERLAYS, PROC_REF(get_separate_worn_overlays))
// If we're overslotting an item, add its visual as an underlay
/datum/mod_part/proc/get_separate_worn_overlays(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/datum/mod_part/proc/get_separate_worn_overlays(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
SIGNAL_HANDLER
if (!overslotting || sealed)
@@ -40,7 +40,7 @@
if (ismob(source.loc))
var/mob/as_mob = source.loc
checked_slot = as_mob.get_slot_by_item(source)
var/mutable_appearance/worn_overlay = overslotting.build_worn_icon(default_layer = -draw_target.layer + 0.1, default_icon_file = get_default_icon_by_slot(checked_slot))
var/mutable_appearance/worn_overlay = overslotting.build_worn_icon(default_layer = -draw_target.layer + 0.1, default_icon_file = get_default_icon_by_slot(checked_slot), bodyshape = bodyshape)
for (var/mutable_appearance/overlay in worn_overlay.overlays)
overlay.layer = draw_target.layer + 0.1
overlays += worn_overlay
+1 -1
View File
@@ -381,7 +381,7 @@
qdel(src)
/// Adds the worn overlays to the suit.
/obj/item/mod/module/proc/add_module_overlay(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file)
/obj/item/mod/module/proc/add_module_overlay(obj/item/source, list/overlays, mutable_appearance/standing, mutable_appearance/draw_target, isinhands, icon_file, bodyshape = NONE)
SIGNAL_HANDLER
if (isinhands)
@@ -85,7 +85,7 @@
if(cap_type)
. += mutable_appearance(icon, "[base_icon_state]_cap_[cap_type]")
/obj/item/reagent_containers/cup/jerrycan/worn_overlays(mutable_appearance/standing, isinhands, icon_file)
/obj/item/reagent_containers/cup/jerrycan/worn_overlays(mutable_appearance/standing, isinhands, icon_file, bodyshape = NONE)
. = ..()
if(!isinhands)
return