From 975d3d47ae99d06d832096421104ea9e8b3e4649 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Tue, 7 Oct 2025 18:42:17 +0200 Subject: [PATCH] Fixes certain broken icons in the outfit editor, stripping menu and multiple others (#93319) ## About The Pull Request ``icon2base64`` does not like animated icons and will display an atlas in TGUI when one is passed into it JKneqDL9NH Additionally added some padding between the icon and the slot name in the outfit editor because it annoyed me ## Changelog :cl: fix: Fixed certain broken icons in the outfit editor, stripping menu and multiple others /:cl: --- code/__HELPERS/icons.dm | 4 ++-- code/datums/elements/strippable.dm | 2 +- code/modules/admin/outfit_editor.dm | 6 ++++-- code/modules/admin/verbs/selectequipment.dm | 4 +++- code/modules/fishing/fishing_rod.dm | 6 +++--- code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm | 4 ++-- code/modules/mob/living/basic/minebots/minebot.dm | 2 +- code/modules/mob/living/basic/pets/pet_designer.dm | 2 +- tgui/packages/tgui/interfaces/OutfitEditor.jsx | 2 +- 9 files changed, 18 insertions(+), 14 deletions(-) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 7f08afd0704..ac67848447a 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -753,7 +753,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) /// # If you already have a human and need to get its flat icon, call `get_flat_existing_human_icon()` instead. /// For creating consistent icons for human looking simple animals. -/proc/get_flat_human_icon(icon_id, datum/job/job, datum/preferences/prefs, dummy_key, showDirs = GLOB.cardinals, outfit_override = null) +/proc/get_flat_human_icon(icon_id, datum/job/job, datum/preferences/prefs, dummy_key, showDirs = GLOB.cardinals, outfit_override = null, no_anim = FALSE) var/static/list/humanoid_icon_cache = list() if(icon_id && humanoid_icon_cache[icon_id]) return humanoid_icon_cache[icon_id] @@ -771,7 +771,7 @@ GLOBAL_LIST_EMPTY(friendly_animal_types) var/icon/out_icon = icon('icons/effects/effects.dmi', "nothing") for(var/direction in showDirs) - var/icon/partial = getFlatIcon(body, defdir = direction) + var/icon/partial = getFlatIcon(body, defdir = direction, no_anim = no_anim) out_icon.Insert(partial, dir = direction) humanoid_icon_cache[icon_id] = out_icon diff --git a/code/datums/elements/strippable.dm b/code/datums/elements/strippable.dm index 55c0fa2d7c7..c6212b4936f 100644 --- a/code/datums/elements/strippable.dm +++ b/code/datums/elements/strippable.dm @@ -378,7 +378,7 @@ LAZYINITLIST(result) - result["icon"] = icon2base64(icon(item.icon, item.icon_state)) + result["icon"] = icon2base64(icon(item.icon, item.icon_state, frame = 1)) result["name"] = item.name var/list/alt_actions = item_data.get_alternate_actions(owner, user, item) result["alternate"] = length(alt_actions) ? alt_actions : null diff --git a/code/modules/admin/outfit_editor.dm b/code/modules/admin/outfit_editor.dm index 765fbb9999d..7a8b4f60cca 100644 --- a/code/modules/admin/outfit_editor.dm +++ b/code/modules/admin/outfit_editor.dm @@ -55,7 +55,7 @@ "name" = initial(item.name), "desc" = initial(item.desc), // at this point initializing the item is probably faster tbh - "sprite" = icon2base64(icon(initial(item.icon), initial(item.icon_state))), + "sprite" = icon2base64(icon(initial(item.icon), initial(item.icon_state), frame = 1)), ) return data @@ -78,7 +78,9 @@ var/icon/dummysprite = get_flat_human_icon(null, dummy_key = dummy_key, showDirs = list(SOUTH), - outfit_override = drip) + outfit_override = drip, + no_anim = TRUE, + ) data["dummy64"] = icon2base64(dummysprite) return data diff --git a/code/modules/admin/verbs/selectequipment.dm b/code/modules/admin/verbs/selectequipment.dm index 7586726c48e..5731702e6ca 100644 --- a/code/modules/admin/verbs/selectequipment.dm +++ b/code/modules/admin/verbs/selectequipment.dm @@ -107,7 +107,9 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(select_equipment, R_FUN, "Select Equipment", mob/ta var/icon/dummysprite = get_flat_human_icon(null, dummy_key = dummy_key, - outfit_override = selected_outfit) + outfit_override = selected_outfit, + no_anim = TRUE, + ) data["icon64"] = icon2base64(dummysprite) data["name"] = target_mob diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index ce71a616831..907cf0f5908 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -543,13 +543,13 @@ var/list/data = list() data["bait_name"] = format_text(bait?.name) - data["bait_icon"] = bait != null ? icon2base64(icon(bait.icon, bait.icon_state)) : null + data["bait_icon"] = bait != null ? icon2base64(icon(bait.icon, bait.icon_state, frame = 1)) : null data["line_name"] = format_text(line?.name) - data["line_icon"] = line != null ? icon2base64(icon(line.icon, line.icon_state)) : null + data["line_icon"] = line != null ? icon2base64(icon(line.icon, line.icon_state, frame = 1)) : null data["hook_name"] = format_text(hook?.name) - data["hook_icon"] = hook != null ? icon2base64(icon(hook.icon, hook.icon_state)) : null + data["hook_icon"] = hook != null ? icon2base64(icon(hook.icon, hook.icon_state, frame = 1)) : null data["busy"] = fishing_line diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm index cd1439b3c5f..e7224e29d87 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm @@ -21,7 +21,7 @@ var/list/data = list() var/mob/living/basic/raptor/my_raptor = raptor.resolve() - data["raptor_image"] = icon2base64(getFlatIcon(image(icon = my_raptor.icon, icon_state = my_raptor.icon_state))) + data["raptor_image"] = icon2base64(icon(icon = my_raptor.icon, icon_state = my_raptor.icon_state, frame = 1)) data["raptor_attack"] = my_raptor.melee_damage_lower data["raptor_health"] = my_raptor.maxHealth data["raptor_speed"] = my_raptor.speed @@ -33,7 +33,7 @@ var/obj/effect/overlay/happiness_overlay/display = new display.set_hearts(happiness_percentage) display.pixel_y = ICON_SIZE_Y * 0.5 - data["raptor_happiness"] = icon2base64(getFlatIcon(display)) + data["raptor_happiness"] = icon2base64(getFlatIcon(display, no_anim = TRUE)) qdel(display) var/datum/raptor_inheritance/inherit = my_raptor.inherited_stats diff --git a/code/modules/mob/living/basic/minebots/minebot.dm b/code/modules/mob/living/basic/minebots/minebot.dm index 33271e7dec8..4501d83caae 100644 --- a/code/modules/mob/living/basic/minebots/minebot.dm +++ b/code/modules/mob/living/basic/minebots/minebot.dm @@ -165,7 +165,7 @@ /mob/living/basic/mining_drone/ui_static_data(mob/user) var/list/data = list() - data["bot_icon"] = icon2base64(getFlatIcon(src)) + data["bot_icon"] = icon2base64(getFlatIcon(src, no_anim = TRUE)) data["possible_colors"] = list() for(var/color in possible_colors) data["possible_colors"] += list(list( diff --git a/code/modules/mob/living/basic/pets/pet_designer.dm b/code/modules/mob/living/basic/pets/pet_designer.dm index 988fee66038..dd2096ec36b 100644 --- a/code/modules/mob/living/basic/pets/pet_designer.dm +++ b/code/modules/mob/living/basic/pets/pet_designer.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(pet_options, list( for(var/color in possible_colors) demo_carrier.set_greyscale(possible_colors[color]) - list_to_return[color] = icon2base64(getFlatIcon(demo_carrier)) + list_to_return[color] = icon2base64(getFlatIcon(demo_carrier, no_anim = TRUE)) qdel(demo_carrier) return list_to_return diff --git a/tgui/packages/tgui/interfaces/OutfitEditor.jsx b/tgui/packages/tgui/interfaces/OutfitEditor.jsx index 5bacf9e4adc..003c623b69c 100644 --- a/tgui/packages/tgui/interfaces/OutfitEditor.jsx +++ b/tgui/packages/tgui/interfaces/OutfitEditor.jsx @@ -131,7 +131,7 @@ const OutfitSlot = (props) => { // todo: intuitive way to clear items onClick={(e) => act(e.ctrlKey ? 'ctrlClick' : 'click', { slot })} > - + {name}