diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 6b1baa2574d..c94596263b3 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -54,24 +54,6 @@ var/list/holder_mob_icon_cache = list() for(var/mob/M in contents) M.show_inv(usr) -/obj/item/weapon/holder/proc/sync(var/mob/living/M) - dir = 2 - overlays.Cut() - icon = M.icon - icon_state = M.icon_state - item_state = M.item_state - color = M.color - name = M.name - desc = M.desc - overlays |= M.overlays - var/mob/living/carbon/human/H = loc - if(istype(H)) - if(H.l_hand == src) - H.update_inv_l_hand() - else if(H.r_hand == src) - H.update_inv_r_hand() - else - H.regenerate_icons() //Mob specific holders. /obj/item/weapon/holder/diona @@ -263,6 +245,10 @@ var/list/holder_mob_icon_cache = list() grabber << "You scoop up [src]." src << "[grabber] scoops you up." + if (istype(H, /obj/item/weapon/holder/human)) + var/obj/item/weapon/holder/human/HU = H + HU.sync(src) + else user << "Failed, try again!" //If the scooping up failed something must have gone wrong @@ -285,15 +271,17 @@ var/list/holder_mob_icon_cache = list() H.report_onmob_location(0, H.get_equip_slot(), src) /obj/item/weapon/holder/human - icon = 'icons/mob/holder_complex.dmi' + icon = null + var/holder_icon = 'icons/mob/holder_complex.dmi' var/list/generate_for_slots = list(slot_l_hand_str, slot_r_hand_str, slot_back_str) slot_flags = SLOT_BACK -/obj/item/weapon/holder/human/sync(var/mob/living/M) +/obj/item/weapon/holder/human/proc/sync(var/mob/living/M) // Generate appropriate on-mob icons. var/mob/living/carbon/human/owner = M - if(istype(owner) && owner.species) + if(!icon && istype(owner) && owner.species) + var/icon/I = new /icon() var/skin_colour = rgb(owner.r_skin, owner.g_skin, owner.b_skin) var/hair_colour = rgb(owner.r_hair, owner.g_hair, owner.b_hair) @@ -305,11 +293,11 @@ var/list/holder_mob_icon_cache = list() if(!holder_mob_icon_cache[cache_key]) // Generate individual icons. - var/icon/mob_icon = icon(icon, "[species_name]_holder_[cache_entry]_base") + var/icon/mob_icon = icon(holder_icon, "[species_name]_holder_[cache_entry]_base") mob_icon.Blend(skin_colour, ICON_ADD) - var/icon/hair_icon = icon(icon, "[species_name]_holder_[cache_entry]_hair") + var/icon/hair_icon = icon(holder_icon, "[species_name]_holder_[cache_entry]_hair") hair_icon.Blend(hair_colour, ICON_ADD) - var/icon/eyes_icon = icon(icon, "[species_name]_holder_[cache_entry]_eyes") + var/icon/eyes_icon = icon(holder_icon, "[species_name]_holder_[cache_entry]_eyes") eyes_icon.Blend(eye_colour, ICON_ADD) // Blend them together. @@ -318,10 +306,40 @@ var/list/holder_mob_icon_cache = list() // Add to the cache. holder_mob_icon_cache[cache_key] = mob_icon - item_icons[cache_entry] = holder_mob_icon_cache[cache_key] - // Handle the rest of sync(). - ..(M) + var/newstate + switch (cache_entry) + if (slot_l_hand_str) + newstate = "[species_name]_lh" + if (slot_r_hand_str) + newstate = "[species_name]_rh" + if (slot_back_str) + newstate = "[species_name]_ba" + + I.Insert(holder_mob_icon_cache[cache_key], newstate) + + + dir = 2 + var/icon/mob_icon = icon(owner.icon, owner.icon_state) + I.Insert(mob_icon, species_name) + icon = I + icon_state = species_name + item_state = species_name + src.overlays = owner.overlays + contained_sprite = 1 + + color = M.color + name = M.name + desc = M.desc + overlays |= M.overlays + var/mob/living/carbon/human/H = loc + if(istype(H)) + if(H.l_hand == src) + H.update_inv_l_hand() + else if(H.r_hand == src) + H.update_inv_r_hand() + else + H.regenerate_icons() //#TODO-MERGE //Port the reduced-duplication holder method from baystation upstream: