From 93b45d91c58756cf1626328a8da423b3f7c2ec4d Mon Sep 17 00:00:00 2001 From: Mark van Alphen Date: Sun, 5 May 2019 20:14:34 +0200 Subject: [PATCH] Species chameleon fixes --- code/game/objects/items.dm | 27 +++++++++- code/modules/clothing/under/chameleon.dm | 64 ++++++++++++++++++++---- 2 files changed, 80 insertions(+), 11 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 6d91b4c8778..37e286900f4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -605,4 +605,29 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d if(!ismob(loc)) return var/mob/owner = loc - owner.regenerate_icons() + var/flags = slot_flags + if(flags & SLOT_OCLOTHING) + owner.update_inv_wear_suit() + if(flags & SLOT_ICLOTHING) + owner.update_inv_w_uniform() + if(flags & SLOT_GLOVES) + owner.update_inv_gloves() + if(flags & SLOT_EYES) + owner.update_inv_glasses() + if(flags & SLOT_EARS) + owner.update_inv_ears() + if(flags & SLOT_MASK) + owner.update_inv_wear_mask() + if(flags & SLOT_HEAD) + owner.update_inv_head() + if(flags & SLOT_FEET) + owner.update_inv_shoes() + if(flags & SLOT_ID) + owner.update_inv_wear_id() + if(flags & SLOT_BELT) + owner.update_inv_belt() + if(flags & SLOT_BACK) + owner.update_inv_back() + if(flags & SLOT_PDA) + owner.update_inv_wear_pda() + diff --git a/code/modules/clothing/under/chameleon.dm b/code/modules/clothing/under/chameleon.dm index b08a1ce72c9..f08ff54ee75 100644 --- a/code/modules/clothing/under/chameleon.dm +++ b/code/modules/clothing/under/chameleon.dm @@ -139,18 +139,30 @@ UpdateButtonIcon() /datum/action/item_action/chameleon/change/proc/update_item(obj/item/picked_item) - target.name = initial(picked_item.name) - target.desc = initial(picked_item.desc) - target.icon_state = initial(picked_item.icon_state) + // Species-related variables are lists, which can not be retrieved using initial(). As such, we need to instantiate the picked item. + var/obj/item/P = new picked_item(null) + + target.name = P.name + target.desc = P.desc + target.icon_state = P.icon_state + if(isitem(target)) var/obj/item/I = target - I.item_state = initial(picked_item.item_state) - I.item_color = initial(picked_item.item_color) - if(istype(I, /obj/item/clothing) && istype(initial(picked_item), /obj/item/clothing)) + + I.item_state = P.item_state + I.item_color = P.item_color + + I.icon_override = P.icon_override + I.species_fit = P.species_fit + I.sprite_sheets = P.sprite_sheets + + if(istype(I, /obj/item/clothing) && istype(P, /obj/item/clothing)) var/obj/item/clothing/CL = I - var/obj/item/clothing/PCL = picked_item - CL.flags_cover = initial(PCL.flags_cover) - target.icon = initial(picked_item.icon) + var/obj/item/clothing/PCL = P + CL.flags_cover = PCL.flags_cover + + target.icon = P.icon + qdel(P) /datum/action/item_action/chameleon/change/Trigger() if(!IsAvailable()) @@ -174,7 +186,6 @@ random_look(owner) /obj/item/clothing/under/chameleon -//starts off as black name = "black jumpsuit" icon_state = "black" item_state = "bl_suit" @@ -212,6 +223,11 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) + var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/clothing/suit/chameleon/Initialize() @@ -238,6 +254,13 @@ resistance_flags = NONE armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/eyes.dmi', + "Drask" = 'icons/mob/species/drask/eyes.dmi', + "Grey" = 'icons/mob/species/grey/eyes.dmi' + ) + var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/clothing/glasses/chameleon/Initialize() @@ -292,6 +315,11 @@ resistance_flags = NONE armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/head.dmi' + ) + var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/clothing/head/chameleon/Initialize() @@ -323,6 +351,16 @@ permeability_coefficient = 0.01 flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH + species_fit = list("Vox", "Unathi", "Tajaran", "Vulpkanin", "Grey") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/mask.dmi', + "Unathi" = 'icons/mob/species/unathi/mask.dmi', + "Tajaran" = 'icons/mob/species/tajaran/mask.dmi', + "Vulpkanin" = 'icons/mob/species/vulpkanin/mask.dmi', + "Drask" = 'icons/mob/species/drask/mask.dmi', + "Grey" = 'icons/mob/species/grey/mask.dmi' + ) + var/obj/item/voice_changer/voice_changer var/datum/action/item_action/chameleon/change/chameleon_action @@ -386,6 +424,12 @@ /obj/item/storage/backpack/chameleon name = "backpack" + + species_fit = list("Vox") + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/back.dmi' + ) + var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/storage/backpack/chameleon/Initialize()