MODSuit clothing icon files can be overridden by its skin (#29598)

* support downstream's modsuits

* why would i do that

* fix runtime

* use existing helper

* fix that one existing helper that is unused cos it's broken

* update
This commit is contained in:
kyunkyunkyun
2025-11-05 16:44:08 +00:00
committed by GitHub
parent 1d27d77a22
commit 5b7b94a5c1
3 changed files with 46 additions and 12 deletions
+36 -10
View File
@@ -1,3 +1,7 @@
#define PART_FLAGS "part_flags"
#define SPRITE_SHEETS_OVERRIDE "sprite_sheets_override"
#define SPRITE_SHEETS_DEFAULT "sprite_sheets_default"
/// MODsuits, trade-off between armor and utility
/obj/item/mod
name = "Base MOD"
@@ -92,6 +96,8 @@
var/datum/mod_link/mod_link
/// The starting MODlink frequency, by default NT to make it easier for everyone to use.
var/starting_frequency = MODLINK_FREQ_NANOTRASEN
/// Used when we set up new skins for a modsuit
var/list/part_data = list()
/obj/item/mod/control/serialize()
var/list/data = ..()
@@ -128,13 +134,33 @@
new_core?.install(src)
helmet = new /obj/item/clothing/head/mod(src)
mod_parts += helmet
part_data[helmet] = list(
PART_FLAGS = HELMET_FLAGS,
SPRITE_SHEETS_OVERRIDE = HELMET_SPRITE_SHEETS,
SPRITE_SHEETS_DEFAULT = /obj/item/clothing/head/mod::sprite_sheets,
)
chestplate = new /obj/item/clothing/suit/mod(src)
chestplate.allowed += theme.allowed_suit_storage
mod_parts += chestplate
part_data[chestplate] = list(
PART_FLAGS = CHESTPLATE_FLAGS,
SPRITE_SHEETS_OVERRIDE = CHESTPLATE_SPRITE_SHEETS,
SPRITE_SHEETS_DEFAULT = /obj/item/clothing/suit/mod::sprite_sheets,
)
gauntlets = new /obj/item/clothing/gloves/mod(src)
mod_parts += gauntlets
part_data[gauntlets] = list(
PART_FLAGS = GAUNTLETS_FLAGS,
SPRITE_SHEETS_OVERRIDE = GAUNTLETS_SPRITE_SHEETS,
SPRITE_SHEETS_DEFAULT = /obj/item/clothing/gloves/mod::sprite_sheets,
)
boots = new /obj/item/clothing/shoes/mod(src)
mod_parts += boots
part_data[boots] = list(
PART_FLAGS = BOOTS_FLAGS,
SPRITE_SHEETS_OVERRIDE = BOOTS_SPRITE_SHEETS,
SPRITE_SHEETS_DEFAULT = /obj/item/clothing/shoes/mod::sprite_sheets,
)
var/list/all_parts = mod_parts + src
for(var/obj/item/part as anything in all_parts)
part.name = "[theme.name] [part.name]"
@@ -191,6 +217,7 @@
QDEL_NULL(core)
QDEL_NULL(mod_link)
QDEL_NULL(wires)
part_data = null
wearer = null
selected_module = null
bag = null
@@ -754,18 +781,13 @@
var/list/used_skin = theme.skins[new_skin]
var/list/skin_updating = mod_parts + src
for(var/obj/item/part as anything in skin_updating)
part.icon = used_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi'
part.icon = used_skin[MOD_ICON_OVERRIDE] || initial(part.icon)
part.worn_icon = used_skin[MOD_WORN_ICON_OVERRIDE] || initial(part.worn_icon)
part.icon_state = "[skin]-[part.base_icon_state]"
for(var/obj/item/clothing/part as anything in mod_parts)
var/used_category
if(part == helmet)
used_category = HELMET_FLAGS
if(part == chestplate)
used_category = CHESTPLATE_FLAGS
if(part == gauntlets)
used_category = GAUNTLETS_FLAGS
if(part == boots)
used_category = BOOTS_FLAGS
part.sprite_sheets = LAZYACCESSASSOC(used_skin, MOD_SPRITE_SHEETS_OVERRIDE, LAZYACCESSASSOC(part_data, part, SPRITE_SHEETS_OVERRIDE)) \
|| LAZYACCESSASSOC(part_data, part, SPRITE_SHEETS_DEFAULT)
var/used_category = LAZYACCESSASSOC(part_data, part, PART_FLAGS)
var/list/category = used_skin[used_category]
part.flags = category[UNSEALED_CLOTHING] || NONE
part.visor_flags = category[SEALED_CLOTHING] || NONE
@@ -858,3 +880,7 @@
if(bag)
for(var/obj/object in bag)
object.hear_message(user, msg)
#undef PART_FLAGS
#undef SPRITE_SHEETS_OVERRIDE
#undef SPRITE_SHEETS_DEFAULT