diff --git a/code/__defines/sprite_sheets.dm b/code/__defines/sprite_sheets.dm index c40899e3fec..603bb82d5f0 100644 --- a/code/__defines/sprite_sheets.dm +++ b/code/__defines/sprite_sheets.dm @@ -1,5 +1,6 @@ // Default species get default sprites, VR species get VR sprites #define VR_SPECIES_SPRITE_SHEETS_SUIT_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/suit/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/suit/mob_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/suit/mob_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/suit/mob_unathi.dmi',\ @@ -12,6 +13,7 @@ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/head/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/head/mob_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/head/mob_unathi.dmi',\ @@ -24,6 +26,7 @@ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_HANDS_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/hands/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/hands/mob_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/hands/mob_unathi.dmi',\ @@ -36,6 +39,7 @@ SPECIES_VULPKANIN = 'icons/inventory/hands/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/hands/mob_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_FEET_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/feet/mob.dmi',\ SPECIES_TAJ = 'icons/inventory/feet/mob_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/feet/mob_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/feet/mob_unathi.dmi',\ @@ -49,6 +53,7 @@ SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/feet/mob_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_SUIT_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/suit/item.dmi',\ SPECIES_TAJ = 'icons/inventory/suit/item_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/suit/item_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/suit/item_unathi.dmi',\ @@ -61,6 +66,7 @@ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_HEAD_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/head/item.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/head/item_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/head/item_unathi.dmi',\ @@ -73,6 +79,7 @@ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_HANDS_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/hands/item.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/hands/item_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/hands/item_unathi.dmi',\ @@ -85,6 +92,7 @@ SPECIES_VULPKANIN = 'icons/inventory/hands/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/hands/item_vr_vulpkanin.dmi') #define VR_SPECIES_SPRITE_SHEETS_FEET_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/feet/item.dmi',\ SPECIES_TAJ = 'icons/inventory/feet/item_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/feet/item_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/feet/item_unathi.dmi',\ @@ -99,6 +107,7 @@ SPECIES_FENNEC = 'icons/inventory/feet/item_vr_vulpkanin.dmi') // All species get VR sprites #define ALL_VR_SPRITE_SHEETS_SUIT_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/suit/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/suit/mob_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/suit/mob_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/suit/mob_vr_unathi.dmi',\ @@ -111,6 +120,7 @@ SPECIES_VULPKANIN = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/suit/mob_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/head/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/mob_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/head/mob_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/head/mob_vr_unathi.dmi',\ @@ -123,6 +133,7 @@ SPECIES_VULPKANIN = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/mob_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_HANDS_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/hands/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/mob_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/hands/mob_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/hands/mob_vr_unathi.dmi',\ @@ -135,6 +146,7 @@ SPECIES_VULPKANIN = 'icons/inventory/hands/mob_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/hands/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/hands/mob_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_FEET_MOB list(\ +SPECIES_HUMAN = 'icons/inventory/feet/mob_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/feet/mob_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/feet/mob_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/feet/mob_vr_unathi.dmi',\ @@ -148,6 +160,7 @@ SPECIES_ZORREN_HIGH = 'icons/inventory/feet/mob_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/feet/mob_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_SUIT_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/suit/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/suit/item_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/suit/item_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/suit/item_vr_unathi.dmi',\ @@ -160,6 +173,7 @@ SPECIES_VULPKANIN = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/suit/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/suit/item_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_HEAD_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/head/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/head/item_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/head/item_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/head/item_vr_unathi.dmi',\ @@ -172,6 +186,7 @@ SPECIES_VULPKANIN = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/head/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/head/item_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_HANDS_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/hands/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/hands/item_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/hands/item_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/hands/item_vr_unathi.dmi',\ @@ -184,6 +199,7 @@ SPECIES_VULPKANIN = 'icons/inventory/hands/item_vr_vulpkanin.dmi',\ SPECIES_ZORREN_HIGH = 'icons/inventory/hands/item_vr_vulpkanin.dmi',\ SPECIES_FENNEC = 'icons/inventory/hands/item_vr_vulpkanin.dmi') #define ALL_VR_SPRITE_SHEETS_FEET_ITEM list(\ +SPECIES_HUMAN = 'icons/inventory/feet/item_vr.dmi',\ SPECIES_TAJ = 'icons/inventory/feet/item_vr_tajaran.dmi',\ SPECIES_SKRELL = 'icons/inventory/feet/item_vr_skrell.dmi',\ SPECIES_UNATHI = 'icons/inventory/feet/item_vr_unathi.dmi',\ diff --git a/code/game/machinery/suit_cycler_datums.dm b/code/game/machinery/suit_cycler_datums.dm index 205dc99979e..e796213acf9 100644 --- a/code/game/machinery/suit_cycler_datums.dm +++ b/code/game/machinery/suit_cycler_datums.dm @@ -14,12 +14,13 @@ GLOBAL_LIST_EMPTY(suit_cycler_emagged) var/helmet_becomes /datum/suit_cycler_choice/department/proc/can_refit_helmet(obj/item/clothing/head/helmet/helmet) - return !!helmet_becomes + return helmet && !!helmet_becomes /datum/suit_cycler_choice/department/proc/do_refit_helmet(obj/item/clothing/head/helmet/helmet) var/obj/item/clothing/tmp = new helmet_becomes() helmet.name = "refitted [tmp.name]" helmet.desc = tmp.desc + helmet.icon = tmp.icon helmet.icon_state = tmp.icon_state helmet.item_state = tmp.item_state helmet.item_state_slots = tmp.item_state_slots?.Copy() @@ -28,12 +29,13 @@ GLOBAL_LIST_EMPTY(suit_cycler_emagged) helmet.default_worn_icon = tmp.default_worn_icon /datum/suit_cycler_choice/department/proc/can_refit_suit(obj/item/clothing/suit/space/suit) - return !!suit_becomes + return suit && !!suit_becomes /datum/suit_cycler_choice/department/proc/do_refit_suit(obj/item/clothing/suit/space/suit) var/obj/item/clothing/tmp = new suit_becomes() suit.name = "refitted [tmp.name]" suit.desc = tmp.desc + suit.icon = tmp.icon suit.icon_state = tmp.icon_state suit.item_state = tmp.item_state suit.item_state_slots = tmp.item_state_slots?.Copy() @@ -305,16 +307,16 @@ GLOBAL_LIST_EMPTY(suit_cycler_emagged) // Uses same logic as it used to, which is that it bases an assumption of 'we should have custom sprites' on // the presence of the species in the sprite_sheets_obj list on the helmet and suit -/datum/suit_cycler_choice/species/proc/can_refit_to(obj/item/clothing/head/helmet/helmet, obj/item/clothing/suit/space/suit) - for(var/obj/item/clothing/C in list(helmet, suit)) +/datum/suit_cycler_choice/species/proc/can_refit_to(...) + for(var/obj/item/clothing/C in args) if(LAZYACCESS(C.sprite_sheets_obj, name)) if(!(C.icon_state in cached_icon_states(C.sprite_sheets_obj[name]))) return FALSE // Species was in sprite_sheets_obj, but had no sprite for this object in particular return TRUE -/datum/suit_cycler_choice/species/proc/do_refit_to(obj/item/clothing/head/helmet/helmet, obj/item/clothing/suit/space/suit) - for(var/obj/item/clothing/C in list(helmet, suit)) +/datum/suit_cycler_choice/species/proc/do_refit_to(...) + for(var/obj/item/clothing/C in args) C.refit_for_species(name) /datum/suit_cycler_choice/species/noop diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 5f50199e110..916d158e8a4 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1114,17 +1114,20 @@ GLOBAL_LIST_EMPTY(suit_cycler_typecache) /obj/machinery/suit_cycler/proc/apply_paintjob() if(!target_species || !target_department) return - if(suit?.helmet) - visible_message("[bicon(src)]Separate the suit and helmet before applying any customizations.") - return - if(helmet && target_department.can_refit_helmet(helmet)) + // Helmet to new paint + if(target_department.can_refit_helmet(helmet)) target_department.do_refit_helmet(helmet) - if(suit && target_department.can_refit_suit(suit)) + // Suit to new paint + if(target_department.can_refit_suit(suit)) target_department.do_refit_suit(suit) - - if(target_species.can_refit_to(helmet, suit)) - target_species.do_refit_to(helmet, suit) + // Attached voidsuit helmet to new paint + if(target_department.can_refit_helmet(suit?.helmet)) + target_department.do_refit_helmet(suit.helmet) + + // Species fitting for all 3 potential changes + if(target_species.can_refit_to(helmet, suit, suit?.helmet)) + target_species.do_refit_to(helmet, suit, suit?.helmet) else visible_message("[bicon(src)]Unable to apply specified cosmetics with specified species. Please try again with a different species or cosmetic option selected.") return