From fde859bca0f49e8ad7865fc7fea5f16b547e1e60 Mon Sep 17 00:00:00 2001 From: Ghommie <42542238+Ghommie@users.noreply.github.com> Date: Thu, 20 Aug 2020 18:33:23 +0200 Subject: [PATCH] Removing priority overlays, update_icon() splitup for guns. --- code/__DEFINES/subsystems.dm | 7 -- code/_onclick/hud/screen_objects/storage.dm | 6 +- code/controllers/subsystem/acid.dm | 2 +- code/controllers/subsystem/overlays.dm | 36 +++------- code/datums/action.dm | 2 +- code/datums/components/embedded.dm | 7 +- code/datums/components/shielded.dm | 38 +++++------ code/datums/elements/decal.dm | 37 +++++----- code/game/atoms.dm | 4 +- code/game/objects/items/grenades/plastic.dm | 9 ++- code/game/objects/obj_defense.dm | 6 +- code/game/objects/objs.dm | 7 ++ code/modules/clothing/clothing.dm | 25 ++++--- code/modules/mob/living/carbon/human/dummy.dm | 2 +- .../living/simple_animal/friendly/gondola.dm | 2 +- code/modules/projectiles/gun.dm | 50 ++++++++------ .../projectiles/guns/ballistic/automatic.dm | 58 +++++++++------- .../projectiles/guns/ballistic/launchers.dm | 11 +-- .../projectiles/guns/ballistic/magweapon.dm | 13 ++-- .../projectiles/guns/ballistic/pistol.dm | 43 ++++++------ .../projectiles/guns/ballistic/revolver.dm | 6 +- .../projectiles/guns/ballistic/shotgun.dm | 8 +-- .../modules/projectiles/guns/ballistic/toy.dm | 4 +- code/modules/projectiles/guns/energy.dm | 64 ++++++++++-------- .../projectiles/guns/energy/dueling.dm | 8 +-- .../projectiles/guns/energy/energy_gun.dm | 18 ++--- .../guns/energy/kinetic_accelerator.dm | 13 +--- .../projectiles/guns/energy/special.dm | 26 +++---- .../projectiles/guns/misc/beam_rifle.dm | 9 +-- .../projectiles/guns/misc/blastcannon.dm | 10 +-- icons/obj/guns/projectile.dmi | Bin 46285 -> 46042 bytes .../projectiles/guns/ballistic/handguns.dm | 11 ++- .../projectiles/guns/ballistic/rifles.dm | 33 ++++----- .../projectiles/guns/ballistic/spinfusor.dm | 3 +- .../projectiles/guns/energy/energy_gun.dm | 14 ++-- .../modules/projectiles/guns/pumpenergy.dm | 6 +- 36 files changed, 295 insertions(+), 303 deletions(-) diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 7a188281d0..9ee7f5db7e 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -150,7 +150,6 @@ if (TRUE) {\ var/list/ad = A.add_overlays;\ var/list/rm = A.remove_overlays;\ - var/list/po = A.priority_overlays;\ if(LAZYLEN(rm)){\ A.overlays -= rm;\ A.remove_overlays = null;\ @@ -159,11 +158,5 @@ A.overlays |= ad;\ A.add_overlays = null;\ }\ - if(LAZYLEN(po)){\ - A.overlays |= po;\ - }\ - else{\ - A.priority_overlays = null;\ - }\ A.flags_1 &= ~OVERLAY_QUEUED_1;\ } diff --git a/code/_onclick/hud/screen_objects/storage.dm b/code/_onclick/hud/screen_objects/storage.dm index ce7bc96c96..72b2d035a3 100644 --- a/code/_onclick/hud/screen_objects/storage.dm +++ b/code/_onclick/hud/screen_objects/storage.dm @@ -122,13 +122,13 @@ if(pixel_size == pixels) return pixel_size = pixels - cut_overlays(TRUE) + cut_overlays() //our icon size is 32 pixels. transform = matrix((pixels - (VOLUMETRIC_STORAGE_BOX_BORDER_SIZE * 2)) / VOLUMETRIC_STORAGE_BOX_ICON_SIZE, 0, 0, 0, 1, 0) left.pixel_x = -((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) - VOLUMETRIC_STORAGE_BOX_BORDER_SIZE right.pixel_x = ((pixels - VOLUMETRIC_STORAGE_BOX_ICON_SIZE) * 0.5) + VOLUMETRIC_STORAGE_BOX_BORDER_SIZE - add_overlay(left, TRUE) - add_overlay(right, TRUE) + add_overlay(left) + add_overlay(right) /obj/screen/storage/volumetric_edge layer = VOLUMETRIC_STORAGE_BOX_LAYER diff --git a/code/controllers/subsystem/acid.dm b/code/controllers/subsystem/acid.dm index e3c415960b..7c9e7634ab 100644 --- a/code/controllers/subsystem/acid.dm +++ b/code/controllers/subsystem/acid.dm @@ -29,7 +29,7 @@ SUBSYSTEM_DEF(acid) if(O.acid_level && O.acid_processing()) else - O.cut_overlay(GLOB.acid_overlay, TRUE) + O.update_icon() processing -= O if (MC_TICK_CHECK) diff --git a/code/controllers/subsystem/overlays.dm b/code/controllers/subsystem/overlays.dm index 20eb2af001..ea0f82436c 100644 --- a/code/controllers/subsystem/overlays.dm +++ b/code/controllers/subsystem/overlays.dm @@ -114,67 +114,47 @@ SUBSYSTEM_DEF(overlays) #define NOT_QUEUED_ALREADY (!(flags_1 & OVERLAY_QUEUED_1)) #define QUEUE_FOR_COMPILE flags_1 |= OVERLAY_QUEUED_1; SSoverlays.queue += src; -/atom/proc/cut_overlays(priority = FALSE) - LAZYINITLIST(priority_overlays) +/atom/proc/cut_overlays() LAZYINITLIST(remove_overlays) LAZYINITLIST(add_overlays) remove_overlays = overlays.Copy() add_overlays.Cut() - if(priority) - priority_overlays.Cut() - //If not already queued for work and there are overlays to remove if(NOT_QUEUED_ALREADY && remove_overlays.len) QUEUE_FOR_COMPILE -/atom/proc/cut_overlay(list/overlays, priority) +/atom/proc/cut_overlay(list/overlays) if(!overlays) return overlays = build_appearance_list(overlays) LAZYINITLIST(add_overlays) //always initialized after this point - LAZYINITLIST(priority_overlays) LAZYINITLIST(remove_overlays) var/a_len = add_overlays.len var/r_len = remove_overlays.len - var/p_len = priority_overlays.len remove_overlays += overlays add_overlays -= overlays - - if(priority) - var/list/cached_priority = priority_overlays - LAZYREMOVE(cached_priority, overlays) - var/fa_len = add_overlays.len var/fr_len = remove_overlays.len - var/fp_len = priority_overlays.len //If not already queued and there is work to be done - if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len || fp_len != p_len)) + if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len)) QUEUE_FOR_COMPILE -/atom/proc/add_overlay(list/overlays, priority = FALSE) +/atom/proc/add_overlay(list/overlays) if(!overlays) return overlays = build_appearance_list(overlays) LAZYINITLIST(add_overlays) //always initialized after this point - LAZYINITLIST(priority_overlays) var/a_len = add_overlays.len - var/p_len = priority_overlays.len - if(priority) - priority_overlays += overlays //or in the image. Can we use [image] = image? - var/fp_len = priority_overlays.len - if(NOT_QUEUED_ALREADY && fp_len != p_len) - QUEUE_FOR_COMPILE - else - add_overlays += overlays - var/fa_len = add_overlays.len - if(NOT_QUEUED_ALREADY && fa_len != a_len) - QUEUE_FOR_COMPILE + add_overlays += overlays + var/fa_len = add_overlays.len + if(NOT_QUEUED_ALREADY && fa_len != a_len) + QUEUE_FOR_COMPILE /atom/proc/copy_overlays(atom/other, cut_old) //copys our_overlays from another atom if(!other) diff --git a/code/datums/action.dm b/code/datums/action.dm index 0033df09d7..fbf7487e4d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -157,7 +157,7 @@ /datum/action/proc/ApplyIcon(obj/screen/movable/action_button/current_button, force = FALSE) if(icon_icon && button_icon_state && ((current_button.button_icon_state != button_icon_state) || force)) - current_button.cut_overlays(TRUE) + current_button.cut_overlays() current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state diff --git a/code/datums/components/embedded.dm b/code/datums/components/embedded.dm index 51098756d3..8c4e62979b 100644 --- a/code/datums/components/embedded.dm +++ b/code/datums/components/embedded.dm @@ -119,7 +119,7 @@ UnregisterSignal(weapon, list(COMSIG_MOVABLE_MOVED, COMSIG_PARENT_QDELETING)) if(overlay) var/atom/A = parent - A.cut_overlay(overlay, TRUE) + UnregisterSignal(A,COMSIG_ATOM_UPDATE_OVERLAYS) qdel(overlay) return ..() @@ -326,7 +326,8 @@ var/matrix/M = matrix() M.Translate(pixelX, pixelY) overlay.transform = M - hit.add_overlay(overlay, TRUE) + RegisterSignal(hit,COMSIG_ATOM_UPDATE_OVERLAYS,.proc/apply_overlay) + hit.update_icon() if(harmful) hit.visible_message("[weapon] embeds itself in [hit]!") @@ -339,6 +340,8 @@ else hit.visible_message("[weapon] sticks itself to [hit]!") +/datum/component/embedded/proc/apply_overlay(atom/source, list/overlay_list) + overlay_list += overlay /datum/component/embedded/proc/examineTurf(datum/source, mob/user, list/examine_list) if(harmful) diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index 2052e57f49..3cf70e80ef 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -14,6 +14,7 @@ var/mob/living/holder //who is currently benefiting from the shield. var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging. var/del_on_overload = FALSE //will delete itself once it has no charges left. + var/cached_vis_overlay //text identifier of the visual overlay. /datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \ sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE) @@ -47,9 +48,8 @@ holder = L var/to_add = charges >= 1 ? shield_state : broken_state if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 - holder.add_overlay(M, TRUE) + var/layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 + SSvis_overlays.add_vis_overlay(L, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, L.dir) /datum/component/shielded/UnregisterFromParent() . = ..() @@ -57,9 +57,9 @@ UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) if(holder) UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS)) - var/to_remove = charges >= 1 ? shield_state : broken_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null holder = null /datum/component/shielded/process() @@ -80,7 +80,7 @@ holder.visible_message("[holder]'s shield overloads!") qdel(src) return - if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))) update_shield_overlay(charges < 1) /datum/component/shielded/proc/adjust_charges(amount) @@ -93,20 +93,19 @@ holder.visible_message("[holder]'s shield overloads!") qdel(src) return - if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + if(holder && ((old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1))) update_shield_overlay(charges < 1) /datum/component/shielded/proc/update_shield_overlay(broken) if(!holder) return - var/to_remove = broken ? shield_state : broken_state var/to_add = broken ? broken_state : shield_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 - holder.add_overlay(M, TRUE) + var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir) /datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot) if(!(accepted_slots & slotdefine2slotbit(slot))) @@ -117,17 +116,16 @@ RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield) var/to_add = charges >= 1 ? shield_state : broken_state if(to_add) - var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) - M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 - equipper.add_overlay(M, TRUE) + var/layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + cached_vis_overlay = SSvis_overlays.add_vis_overlay(holder, 'icons/effects/effects.dmi', to_add, layer, GAME_PLANE, holder.dir) /datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper) if(holder == dropper) UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS) UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK)) - var/to_remove = charges >= 1 ? shield_state : broken_state - if(to_remove) - holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(cached_vis_overlay) + SSvis_overlays.remove_vis_overlay(holder, cached_vis_overlay) + cached_vis_overlay = null holder = null /datum/component/shielded/proc/include_shield(mob/source, list/items) diff --git a/code/datums/elements/decal.dm b/code/datums/elements/decal.dm index 4bd482915a..50519b08e7 100644 --- a/code/datums/elements/decal.dm +++ b/code/datums/elements/decal.dm @@ -33,39 +33,34 @@ if(description) RegisterSignal(A, COMSIG_PARENT_EXAMINE, .proc/examine) - apply(A, TRUE) - num_decals_per_atom[A]++ + apply(A) /datum/element/decal/Detach(datum/target) var/atom/A = target - remove(A, A.dir) - UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE)) - LAZYREMOVE(num_decals_per_atom, A) + num_decals_per_atom[A]-- + apply(A, TRUE) + if(!num_decals_per_atom[A]) + UnregisterSignal(A, list(COMSIG_ATOM_DIR_CHANGE, COMSIG_COMPONENT_CLEAN_ACT, COMSIG_PARENT_EXAMINE, COMSIG_ATOM_UPDATE_OVERLAYS)) + LAZYREMOVE(num_decals_per_atom, A) return ..() -/datum/element/decal/proc/remove(atom/target, old_dir) - pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(old_dir)) - for(var/i in 1 to num_decals_per_atom[target]) - target.cut_overlay(pic, TRUE) +/datum/element/decal/proc/apply(atom/target, removing = FALSE) + if(num_decals_per_atom[target] == 1 && !removing) + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/apply_overlay, TRUE) + target.update_icon() if(isitem(target)) addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) -/datum/element/decal/proc/apply(atom/target, init = FALSE) - pic.dir = first_dir == NORTH ? target.dir : turn(first_dir, dir2angle(target.dir)) - if(init) - target.add_overlay(pic, TRUE) - else - for(var/i in 1 to num_decals_per_atom[target]) - target.add_overlay(pic, TRUE) - if(isitem(target)) - addtimer(CALLBACK(target, /obj/item/.proc/update_slot_icon), 0, TIMER_UNIQUE) +/datum/element/decal/proc/apply_overlay(atom/source, list/overlay_list) + pic.dir = first_dir == NORTH ? source.dir : turn(first_dir, dir2angle(source.dir)) + for(var/i in 1 to num_decals_per_atom[source]) + overlay_list += pic -/datum/element/decal/proc/rotate_react(datum/source, old_dir, new_dir) +/datum/element/decal/proc/rotate_react(atom/source, old_dir, new_dir) if(old_dir == new_dir) return - remove(source, old_dir) - apply(source) + source.update_icon() /datum/element/decal/proc/clean_react(datum/source, strength) if(strength >= cleanable) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6e1692c17e..8a66394ecc 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -26,7 +26,6 @@ var/list/atom_colours //used to store the different colors on an atom //its inherent color, the colored paint applied on it, special color effect etc... - var/list/priority_overlays //overlays that should remain on top and not normally removed when using cut_overlay functions, like c4. var/list/remove_overlays // a very temporary list of overlays to remove var/list/add_overlays // a very temporary list of overlays to add @@ -145,7 +144,6 @@ qdel(reagents) LAZYCLEARLIST(overlays) - LAZYCLEARLIST(priority_overlays) for(var/i in targeted_by) var/mob/M = i @@ -1128,4 +1126,4 @@ * Override this if you want custom behaviour in whatever gets hit by the rust */ /atom/proc/rust_heretic_act() - return + return diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index a2b0e3edd4..014487332c 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -60,7 +60,8 @@ if(target) if(!QDELETED(target)) location = get_turf(target) - target.cut_overlay(plastic_overlay, TRUE) + target.cut_overlay(plastic_overlay) + UnregisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/add_plastic_overlay) if(!ismob(target) || full_damage_on_mobs) target.ex_act(EXPLODE_HEAVY, target) else @@ -126,13 +127,17 @@ I.embedding["embed_chance"] = 0 I.updateEmbedding() - target.add_overlay(plastic_overlay, TRUE) + RegisterSignal(target, COMSIG_ATOM_UPDATE_OVERLAYS, .proc/add_plastic_overlay) + target.update_icon() if(!nadeassembly) to_chat(user, "You plant the bomb. Timer counting down from [det_time].") addtimer(CALLBACK(src, .proc/prime), det_time*10) else qdel(src) //How? +/obj/item/grenade/plastic/proc/add_plastic_overlay(atom/source, list/overlay_list) + overlay_list += plastic_overlay + /obj/item/grenade/plastic/proc/shout_syndicate_crap(mob/M) if(!M) return diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 14017ffb2d..f5003e035b 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -186,7 +186,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!acid_level) SSacid.processing[src] = src - add_overlay(GLOB.acid_overlay, TRUE) + update_icon() var/acid_cap = acidpwr * 300 //so we cannot use huge amounts of weak acids to do as well as strong acids. if(acid_level < acid_cap) acid_level = min(acid_level + acidpwr * acid_volume, acid_cap) @@ -224,7 +224,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) resistance_flags |= ON_FIRE SSfire_burning.processing[src] = src - add_overlay(GLOB.fire_overlay, TRUE) + update_icon() return 1 //called when the obj is destroyed by fire @@ -236,7 +236,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/proc/extinguish() if(resistance_flags & ON_FIRE) resistance_flags &= ~ON_FIRE - cut_overlay(GLOB.fire_overlay, TRUE) + update_icon() SSfire_burning.processing -= src /obj/zap_act(power, zap_flags, shocked_targets) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 79dd13b0ae..8286df6797 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -317,6 +317,13 @@ icon_state = unique_reskin[choice] to_chat(M, "[src] is now skinned as '[choice]'.") +/obj/update_overlays() + . = ..() + if(acid_level) + . += GLOB.acid_overlay + if(resistance_flags & ON_FIRE) + . += GLOB.fire_overlay + //Called when the object is constructed by an autolathe //Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes /obj/proc/autolathe_crafted(obj/machinery/autolathe/A) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index d540336b86..2fbe738acb 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -118,8 +118,7 @@ // Set the clothing's integrity back to 100%, remove all damage to bodyparts, and generally fix it up /obj/item/clothing/proc/repair(mob/user, params) - damaged_clothes = CLOTHING_PRISTINE - update_clothes_damaged_state(FALSE) + update_clothes_damaged_state(CLOTHING_PRISTINE) obj_integrity = max_integrity name = initial(name) // remove "tattered" or "shredded" if there's a prefix body_parts_covered = initial(body_parts_covered) @@ -196,7 +195,7 @@ if(3 to INFINITY) // take better care of your shit, dude name = "tattered [initial(name)]" - update_clothes_damaged_state() + update_clothes_damaged_state(CLOTHING_DAMAGED) /obj/item/clothing/Destroy() user_vars_remembered = null //Oh god somebody put REFERENCES in here? not to worry, we'll clean it up @@ -257,7 +256,7 @@ how_cool_are_your_threads += "Adding or removing items from [src] makes no noise.\n" how_cool_are_your_threads += "" . += how_cool_are_your_threads.Join() - + if(LAZYLEN(armor_list)) armor_list.Cut() if(armor.bio) @@ -346,10 +345,16 @@ var/mob/M = loc to_chat(M, "Your [name] starts to fall apart!") -/obj/item/clothing/proc/update_clothes_damaged_state(damaging = TRUE) - var/index = "[REF(initial(icon))]-[initial(icon_state)]" - var/static/list/damaged_clothes_icons = list() - if(damaging) +//This mostly exists so subtypes can call appriopriate update icon calls on the wearer. +/obj/item/clothing/proc/update_clothes_damaged_state(damaged_state = CLOTHING_DAMAGED) + damaged_clothes = damaged_state + update_icon() + +/obj/item/clothing/update_overlays() + . = ..() + if(damaged_clothes) + var/index = "[REF(initial(icon))]-[initial(icon_state)]" + var/static/list/damaged_clothes_icons = list() var/icon/damaged_clothes_icon = damaged_clothes_icons[index] if(!damaged_clothes_icon) damaged_clothes_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply damaged effect to the initial icon_state for each object @@ -357,9 +362,7 @@ damaged_clothes_icon.Blend(icon('icons/effects/item_damage.dmi', "itemdamaged"), ICON_MULTIPLY) //adds damage effect and the remaining white areas become transparant damaged_clothes_icon = fcopy_rsc(damaged_clothes_icon) damaged_clothes_icons[index] = damaged_clothes_icon - add_overlay(damaged_clothes_icon, TRUE) - else - cut_overlay(damaged_clothes_icons[index], TRUE) + . += damaged_clothes_icon /* SEE_SELF // can see self, no matter what diff --git a/code/modules/mob/living/carbon/human/dummy.dm b/code/modules/mob/living/carbon/human/dummy.dm index 1e2a375b39..2f5c94b784 100644 --- a/code/modules/mob/living/carbon/human/dummy.dm +++ b/code/modules/mob/living/carbon/human/dummy.dm @@ -21,7 +21,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy) /mob/living/carbon/human/dummy/proc/wipe_state() delete_equipment() icon_render_key = null - cut_overlays(TRUE) + cut_overlays() //Inefficient pooling/caching way. GLOBAL_LIST_EMPTY(human_dummy_list) diff --git a/code/modules/mob/living/simple_animal/friendly/gondola.dm b/code/modules/mob/living/simple_animal/friendly/gondola.dm index 0cfea3548b..e29cbb8062 100644 --- a/code/modules/mob/living/simple_animal/friendly/gondola.dm +++ b/code/modules/mob/living/simple_animal/friendly/gondola.dm @@ -58,7 +58,7 @@ eyes_overlay.pixel_y = -8 moustache_overlay.pixel_y = -8 - cut_overlays(TRUE) + cut_overlays() add_overlay(body_overlay) add_overlay(eyes_overlay) add_overlay(moustache_overlay) diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index ee073dbfcd..8cddd5d02f 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -62,7 +62,8 @@ var/no_pin_required = FALSE //whether the gun can be fired without a pin var/obj/item/flashlight/gun_light - var/can_flashlight = 0 + var/can_flashlight = FALSE + var/gunlight_state = "flight" var/obj/item/kitchen/knife/bayonet var/mutable_appearance/knife_overlay var/can_bayonet = FALSE @@ -417,14 +418,7 @@ return to_chat(user, "You attach \the [K] to the front of \the [src].") bayonet = K - var/state = "bayonet" //Generic state. - if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? - state = bayonet.icon_state - var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' - knife_overlay = mutable_appearance(bayonet_icons, state) - knife_overlay.pixel_x = knife_x_offset - knife_overlay.pixel_y = knife_y_offset - add_overlay(knife_overlay, TRUE) + update_icon() else if(istype(I, /obj/item/screwdriver)) if(gun_light) var/obj/item/flashlight/seclite/S = gun_light @@ -439,8 +433,7 @@ var/obj/item/kitchen/knife/K = bayonet K.forceMove(get_turf(user)) bayonet = null - cut_overlay(knife_overlay, TRUE) - knife_overlay = null + update_icon() else return ..() @@ -468,22 +461,35 @@ set_light(gun_light.brightness_on, gun_light.flashlight_power, gun_light.light_color) else set_light(0) - cut_overlays(flashlight_overlay, TRUE) - var/state = "flight[gun_light.on? "_on":""]" //Generic state. + else + set_light(0) + update_icon() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + +/obj/item/gun/update_overlays() + . = ..() + if(gun_light) + var/mutable_appearance/flashlight_overlay + var/state = "[gunlight_state][gun_light.on? "_on":""]" //Generic state. if(gun_light.icon_state in icon_states('icons/obj/guns/flashlights.dmi')) //Snowflake state? state = gun_light.icon_state flashlight_overlay = mutable_appearance('icons/obj/guns/flashlights.dmi', state) flashlight_overlay.pixel_x = flight_x_offset flashlight_overlay.pixel_y = flight_y_offset - add_overlay(flashlight_overlay, TRUE) - else - set_light(0) - cut_overlays(flashlight_overlay, TRUE) - flashlight_overlay = null - update_icon(TRUE) - for(var/X in actions) - var/datum/action/A = X - A.UpdateButtonIcon() + . += flashlight_overlay + + if(bayonet) + var/mutable_appearance/knife_overlay + var/state = "bayonet" //Generic state. + if(bayonet.icon_state in icon_states('icons/obj/guns/bayonets.dmi')) //Snowflake state? + state = bayonet.icon_state + var/icon/bayonet_icons = 'icons/obj/guns/bayonets.dmi' + knife_overlay = mutable_appearance(bayonet_icons, state) + knife_overlay.pixel_x = knife_x_offset + knife_overlay.pixel_y = knife_y_offset + . += knife_overlay /obj/item/gun/item_action_slot_check(slot, mob/user, datum/action/A) if(istype(A, /datum/action/item_action/toggle_scope_zoom) && slot != SLOT_HANDS) diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index b31fd2d1e0..9210e66f22 100644 --- a/code/modules/projectiles/guns/ballistic/automatic.dm +++ b/code/modules/projectiles/guns/ballistic/automatic.dm @@ -18,13 +18,15 @@ /obj/item/gun/ballistic/automatic/proto/unrestricted pin = /obj/item/firing_pin -/obj/item/gun/ballistic/automatic/update_icon() - ..() +/obj/item/gun/ballistic/automatic/update_overlays() + . = ..() if(automatic_burst_overlay) if(!select) - add_overlay("[initial(icon_state)]semi") + . += ("[initial(icon_state)]semi") if(select == 1) - add_overlay("[initial(icon_state)]burst") + . += "[initial(icon_state)]burst" + +/obj/item/gun/ballistic/automatic/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "-[magazine.max_ammo]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/attackby(obj/item/A, mob/user, params) @@ -115,8 +117,7 @@ . = ..() empty_alarm() -/obj/item/gun/ballistic/automatic/c20r/update_icon() - ..() +/obj/item/gun/ballistic/automatic/c20r/update_icon_state() icon_state = "c20r[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/wt550 @@ -141,9 +142,8 @@ . = ..() spread = 0 -/obj/item/gun/ballistic/automatic/wt550/update_icon() - ..() - icon_state = "wt550[magazine ? "-[CEILING(( (get_ammo(FALSE) / magazine.max_ammo) * 20) /4, 1)*4]" : "-0"]" //Sprites only support up to 20. +/obj/item/gun/ballistic/automatic/wt550/update_icon_state() + icon_state = "wt550[magazine ? "-[CEILING(((get_ammo(FALSE) / magazine.max_ammo) * 20) /4, 1)*4]" : "-0"]" //Sprites only support up to 20. /obj/item/gun/ballistic/automatic/mini_uzi name = "\improper Type U3 Uzi" @@ -160,6 +160,7 @@ mag_type = /obj/item/ammo_box/magazine/m556 fire_sound = 'sound/weapons/gunshot_smg.ogg' can_suppress = FALSE + automatic_burst_overlay = FALSE var/obj/item/gun/ballistic/revolver/grenadelauncher/underbarrel burst_size = 3 burst_shot_delay = 2 @@ -191,18 +192,19 @@ underbarrel.attackby(A, user, params) else ..() -/obj/item/gun/ballistic/automatic/m90/update_icon() - ..() - cut_overlays() +/obj/item/gun/ballistic/automatic/m90/update_overlays() + . = ..() switch(select) if(0) - add_overlay("[initial(icon_state)]semi") + . += "[initial(icon_state)]semi" if(1) - add_overlay("[initial(icon_state)]burst") + . += "[initial(icon_state)]burst" if(2) - add_overlay("[initial(icon_state)]gren") + . += "[initial(icon_state)]gren" + +/obj/item/gun/ballistic/automatic/m90/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "" : "-e"]" - return + /obj/item/gun/ballistic/automatic/m90/burst_select() var/mob/living/carbon/human/user = usr switch(select) @@ -257,6 +259,7 @@ weapon_weight = WEAPON_MEDIUM mag_type = /obj/item/ammo_box/magazine/m12g fire_sound = 'sound/weapons/gunshot.ogg' + automatic_burst_overlay = FALSE can_suppress = FALSE burst_size = 1 pin = /obj/item/firing_pin/implant/pindicate @@ -269,10 +272,13 @@ . = ..() update_icon() -/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_icon() - cut_overlays() +/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_icon_state() + return + +/obj/item/gun/ballistic/automatic/shotgun/bulldog/update_overlays() + . = ..() if(magazine) - add_overlay("[magazine.icon_state]") + . += "[magazine.icon_state]" icon_state = "bulldog[chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/shotgun/bulldog/afterattack() @@ -298,6 +304,7 @@ burst_shot_delay = 1 spread = 7 pin = /obj/item/firing_pin/implant/pindicate + automatic_burst_overlay = FALSE /obj/item/gun/ballistic/automatic/l6_saw/unrestricted pin = /obj/item/firing_pin @@ -316,7 +323,7 @@ playsound(user, 'sound/weapons/sawclose.ogg', 60, 1) update_icon() -/obj/item/gun/ballistic/automatic/l6_saw/update_icon() +/obj/item/gun/ballistic/automatic/l6_saw/update_icon_state() icon_state = "l6[cover_open ? "open" : "closed"][magazine ? CEILING(get_ammo(0)/12.5, 1)*25 : "-empty"][suppressed ? "-suppressed" : ""]" item_state = "l6[cover_open ? "openmag" : "closedmag"]" @@ -369,9 +376,10 @@ zoom_amt = 10 //Long range, enough to see in front of you, but no tiles behind you. zoom_out_amt = 13 slot_flags = ITEM_SLOT_BACK + automatic_burst_overlay = FALSE actions_types = list() -/obj/item/gun/ballistic/automatic/sniper_rifle/update_icon() +/obj/item/gun/ballistic/automatic/sniper_rifle/update_icon_state() if(magazine) icon_state = "sniper-mag" else @@ -397,9 +405,10 @@ can_suppress = TRUE w_class = WEIGHT_CLASS_HUGE slot_flags = ITEM_SLOT_BACK + automatic_burst_overlay = FALSE actions_types = list() -/obj/item/gun/ballistic/automatic/surplus/update_icon() +/obj/item/gun/ballistic/automatic/surplus/update_icon_state() if(magazine) icon_state = "surplus" else @@ -413,6 +422,7 @@ icon_state = "oldrifle" item_state = "arg" mag_type = /obj/item/ammo_box/magazine/recharge + automatic_burst_overlay = FALSE fire_delay = 2 can_suppress = FALSE burst_size = 1 @@ -420,7 +430,5 @@ fire_sound = 'sound/weapons/laser.ogg' casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/laser/update_icon() - ..() +/obj/item/gun/ballistic/automatic/laser/update_icon_state() icon_state = "oldrifle[magazine ? "-[CEILING(get_ammo(0)/4, 1)*4]" : ""]" - return diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index 004f78235a..9e03207888 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -42,8 +42,7 @@ actions_types = list() casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/gyropistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/gyropistol/update_icon_state() icon_state = "[initial(icon_state)][magazine ? "loaded" : ""]" /obj/item/gun/ballistic/automatic/speargun @@ -54,6 +53,7 @@ w_class = WEIGHT_CLASS_BULKY force = 10 can_suppress = FALSE + automatic_burst_overlay = FALSE mag_type = /obj/item/ammo_box/magazine/internal/speargun fire_sound = 'sound/weapons/grenadelaunch.ogg' burst_size = 1 @@ -62,8 +62,9 @@ actions_types = list() casing_ejector = FALSE -/obj/item/gun/ballistic/automatic/speargun/update_icon() - return +/obj/item/gun/ballistic/automatic/speargun/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/ballistic/automatic/speargun/attack_self() return @@ -137,7 +138,7 @@ chamber_round() update_icon() -/obj/item/gun/ballistic/rocketlauncher/update_icon() +/obj/item/gun/ballistic/rocketlauncher/update_icon_state() icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]" /obj/item/gun/ballistic/rocketlauncher/suicide_act(mob/living/user) diff --git a/code/modules/projectiles/guns/ballistic/magweapon.dm b/code/modules/projectiles/guns/ballistic/magweapon.dm index 74b8b210a7..4e27a73300 100644 --- a/code/modules/projectiles/guns/ballistic/magweapon.dm +++ b/code/modules/projectiles/guns/ballistic/magweapon.dm @@ -75,8 +75,7 @@ recoil = 2 weapon_weight = WEAPON_HEAVY -/obj/item/gun/ballistic/automatic/magrifle/hyperburst/update_icon() - ..() +/obj/item/gun/ballistic/automatic/magrifle/hyperburst/update_icon_state() icon_state = "hyperburst[magazine ? "-[get_ammo()]" : ""][chambered ? "" : "-e"]" ///magpistol/// @@ -92,12 +91,14 @@ fire_delay = 2 inaccuracy_modifier = 0.25 cell_type = /obj/item/stock_parts/cell/magnetic/pistol + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/magrifle/pistol/update_icon() - ..() - cut_overlays() +/obj/item/gun/ballistic/automatic/magrifle/pistol/update_overlays() + . = ..() if(magazine) - add_overlay("magpistol-magazine") + . += "magpistol-magazine" + +/obj/item/gun/ballistic/automatic/magrifle/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/magrifle/pistol/nopin diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index cdaadb5c3b..e775fdc05a 100644 --- a/code/modules/projectiles/guns/ballistic/pistol.dm +++ b/code/modules/projectiles/guns/ballistic/pistol.dm @@ -8,12 +8,12 @@ burst_size = 1 fire_delay = 0 actions_types = list() + automatic_burst_overlay = FALSE /obj/item/gun/ballistic/automatic/pistol/no_mag spawnwithmagazine = FALSE -/obj/item/gun/ballistic/automatic/pistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/pistol/suppressed/Initialize(mapload) @@ -28,6 +28,7 @@ icon = 'modular_citadel/icons/obj/guns/cit_guns.dmi' icon_state = "cde" can_unsuppress = TRUE + automatic_burst_overlay = FALSE obj_flags = UNIQUE_RENAME unique_reskin = list("Default" = "cde", "N-99" = "n99", @@ -38,20 +39,18 @@ "PX4 Storm" = "px4" ) -/obj/item/gun/ballistic/automatic/pistol/modular/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/modular/update_icon_state() if(current_skin) icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" else icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" + +/obj/item/gun/ballistic/automatic/pistol/modular/update_overlays() + . = ..() if(magazine && suppressed) - cut_overlays() - add_overlay("[unique_reskin[current_skin]]-magazine-sup") //Yes, this means the default iconstate can't have a magazine overlay + . += "[unique_reskin[current_skin]]-magazine-sup" //Yes, this means the default iconstate can't have a magazine overlay else if (magazine) - cut_overlays() - add_overlay("[unique_reskin[current_skin]]-magazine") - else - cut_overlays() + . += "[unique_reskin[current_skin]]-magazine" /obj/item/gun/ballistic/automatic/pistol/m1911 name = "\improper M1911" @@ -77,14 +76,14 @@ force = 14 mag_type = /obj/item/ammo_box/magazine/m50 can_suppress = FALSE + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/pistol/deagle/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/deagle/update_overlays() + . = ..() if(magazine) - cut_overlays() - add_overlay("deagle_magazine") - else - cut_overlays() + . += "deagle_magazine" + +/obj/item/gun/ballistic/automatic/pistol/deagle/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/deagle/gold @@ -142,14 +141,14 @@ actions_types = list() fire_sound = 'sound/weapons/blastcannon.ogg' spread = 20 //damn thing has no rifling. + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon() - ..() +/obj/item/gun/ballistic/automatic/pistol/antitank/update_overlays() + . = ..() if(magazine) - cut_overlays() - add_overlay("atp-mag") - else - cut_overlays() + . += "atp-mag" + +/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /obj/item/gun/ballistic/automatic/pistol/antitank/syndicate diff --git a/code/modules/projectiles/guns/ballistic/revolver.dm b/code/modules/projectiles/guns/ballistic/revolver.dm index a5ed45dd48..6f1fb96af5 100644 --- a/code/modules/projectiles/guns/ballistic/revolver.dm +++ b/code/modules/projectiles/guns/ballistic/revolver.dm @@ -348,10 +348,10 @@ else to_chat(user, "You need at least ten lengths of cable if you want to make a sling!") -/obj/item/gun/ballistic/revolver/doublebarrel/improvised/update_icon() - ..() +/obj/item/gun/ballistic/revolver/doublebarrel/improvised/update_overlays() + . = ..() if(slung) - icon_state += "sling" + . += "[icon_state]sling" /obj/item/gun/ballistic/revolver/doublebarrel/improvised/sawoff(mob/user) . = ..() diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 873b129c8f..ecf6e538b8 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -164,10 +164,10 @@ else to_chat(user, "You need at least ten lengths of cable if you want to make a sling!") -/obj/item/gun/ballistic/shotgun/boltaction/improvised/update_icon() - ..() +/obj/item/gun/ballistic/shotgun/boltaction/improvised/update_overlays() + . = ..() if(slung) - icon_state += "sling" + . += "[icon_state]sling" /obj/item/gun/ballistic/shotgun/boltaction/enchanted name = "enchanted bolt action rifle" @@ -272,7 +272,7 @@ spread = 2 update_icon() -/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon() +/obj/item/gun/ballistic/shotgun/automatic/combat/compact/update_icon_state() icon_state = "[current_skin ? unique_reskin[current_skin] : "cshotgun"][stock ? "" : "c"]" //Dual Feed Shotgun diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 1f66cfdf8a..e7f26670d4 100644 --- a/code/modules/projectiles/guns/ballistic/toy.dm +++ b/code/modules/projectiles/guns/ballistic/toy.dm @@ -27,9 +27,9 @@ burst_size = 1 fire_delay = 0 actions_types = list() + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/toy/pistol/update_icon() - ..() +/obj/item/gun/ballistic/automatic/toy/pistol/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]" /obj/item/gun/ballistic/automatic/toy/pistol/riot diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c2b821dfcf..0c074ca87c 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -29,7 +29,6 @@ var/charge_sections = 4 ammo_x_offset = 2 var/shaded_charge = FALSE //if this gun uses a stateful charge bar for more detail - var/old_ratio = 0 // stores the gun's previous ammo "ratio" to see if it needs an updated icon var/selfcharge = EGUN_NO_SELFCHARGE // EGUN_SELFCHARGE if true, EGUN_SELFCHARGE_BORG drains the cyborg's cell to recharge its own var/charge_tick = 0 var/charge_delay = 4 @@ -64,10 +63,20 @@ START_PROCESSING(SSobj, src) update_icon() +/obj/item/gun/energy/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + /obj/item/gun/energy/Destroy() STOP_PROCESSING(SSobj, src) return ..() +/obj/item/gun/energy/handle_atom_del(atom/A) + if(A == cell) + cell = null + update_icon() + return ..() + /obj/item/gun/energy/examine(mob/user) . = ..() if(!right_click_overridden) @@ -226,46 +235,47 @@ #undef DECREMENT_OR_WRAP #undef IS_VALID_INDEX -/obj/item/gun/energy/update_icon(force_update) +/obj/item/gun/energy/update_icon_state() + if(initial(item_state)) + return + ..() + var/ratio = get_charge_ratio() + var/new_item_state = "" + new_item_state = initial(icon_state) + if(modifystate) + var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] + new_item_state += "[shot.select_name]" + new_item_state += "[ratio]" + item_state = new_item_state + +/obj/item/gun/energy/update_overlays() if(QDELETED(src)) return ..() if(!automatic_charge_overlays) return - var/ratio = can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 - // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if it's power cell is removed. - // TG issues #5361 & #47908 - if(ratio == old_ratio && !force_update) - return - old_ratio = ratio - cut_overlays() - var/iconState = "[icon_state]_charge" - var/itemState = null - if(!initial(item_state)) - itemState = icon_state + var/overlay_icon_state = "[icon_state]_charge" + var/ratio = get_charge_ratio() if (modifystate) var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] - add_overlay("[icon_state]_[shot.select_name]") - iconState += "_[shot.select_name]" - if(itemState) - itemState += "[shot.select_name]" + . += "[icon_state]_[shot.select_name]" + overlay_icon_state += "_[shot.select_name]" if(ratio == 0) - add_overlay("[icon_state]_empty") + . += "[icon_state]_empty" else if(!shaded_charge) - var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, overlay_icon_state) for(var/i = ratio, i >= 1, i--) charge_overlay.pixel_x = ammo_x_offset * (i - 1) charge_overlay.pixel_y = ammo_y_offset * (i - 1) - add_overlay(charge_overlay) + . += charge_overlay else - add_overlay("[icon_state]_charge[ratio]") - if(itemState) - itemState += "[ratio]" - item_state = itemState - if(ismob(loc)) //forces inhands to update - var/mob/M = loc - M.update_inv_hands() + . += "[icon_state]_charge[ratio]" + +///Used by update_icon_state() and update_overlays() +/obj/item/gun/energy/proc/get_charge_ratio() + return can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 + // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if its power cell is removed. /obj/item/gun/energy/suicide_act(mob/living/user) if (istype(user) && can_shoot() && can_trigger_gun(user) && user.get_bodypart(BODY_ZONE_HEAD)) diff --git a/code/modules/projectiles/guns/energy/dueling.dm b/code/modules/projectiles/guns/energy/dueling.dm index 80bb269b21..04eff5afa9 100644 --- a/code/modules/projectiles/guns/energy/dueling.dm +++ b/code/modules/projectiles/guns/energy/dueling.dm @@ -207,12 +207,11 @@ to_chat(user,"You switch [src] setting to [setting] mode.") update_icon() -/obj/item/gun/energy/dueling/update_icon(force_update) +/obj/item/gun/energy/dueling/update_overlays(force_update) . = ..() if(setting_overlay) - cut_overlay(setting_overlay) setting_overlay.icon_state = setting_iconstate() - add_overlay(setting_overlay) + . += setting_overlay /obj/item/gun/energy/dueling/Destroy() if(duel) @@ -363,8 +362,7 @@ STR.max_items = 2 STR.can_hold = typecacheof(/obj/item/gun/energy/dueling) -/obj/item/storage/lockbox/dueling/update_icon() - cut_overlays() +/obj/item/storage/lockbox/dueling/update_icon_state() var/locked = SEND_SIGNAL(src, COMSIG_IS_STORAGE_LOCKED) if(locked) icon_state = "medalbox+l" diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index 1b835d35a4..2c9794f391 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -19,17 +19,13 @@ cell_type = /obj/item/stock_parts/cell{charge = 600; maxcharge = 600} ammo_x_offset = 2 charge_sections = 3 + gunlight_state = "mini-light" can_flashlight = 0 // Can't attach or detach the flashlight, and override it's icon update /obj/item/gun/energy/e_gun/mini/Initialize() gun_light = new /obj/item/flashlight/seclite(src) return ..() -/obj/item/gun/energy/e_gun/mini/update_icon() - ..() - if(gun_light && gun_light.on) - add_overlay("mini-light") - /obj/item/gun/energy/e_gun/stun name = "tactical energy gun" desc = "Military issue energy gun, is able to fire stun rounds." @@ -138,15 +134,15 @@ return fail_chance = min(fail_chance + round(15/severity), 100) -/obj/item/gun/energy/e_gun/nuclear/update_icon() - ..() +/obj/item/gun/energy/e_gun/nuclear/update_overlays() + . = ..() if(crit_fail) - add_overlay("[icon_state]_fail_3") + . += "[icon_state]_fail_3" else switch(fail_tick) if(0) - add_overlay("[icon_state]_fail_0") + . += "[icon_state]_fail_0" if(1 to 150) - add_overlay("[icon_state]_fail_1") + . += "[icon_state]_fail_1" if(151 to INFINITY) - add_overlay("[icon_state]_fail_2") + . += "[icon_state]_fail_2" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 0c723199a1..84d29b186c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -46,13 +46,6 @@ range = 4 log_override = TRUE -/obj/item/gun/energy/kinetic_accelerator/premiumka/update_icon() - ..() - if(!can_shoot()) - add_overlay("[icon_state]_empty") - else - cut_overlays() - /obj/item/gun/energy/kinetic_accelerator/getinaccuracy(mob/living/user, bonus_spread, stamloss) var/old_fire_delay = fire_delay //It's pretty irrelevant tbh but whatever. fire_delay = overheat_time @@ -187,11 +180,9 @@ overheat = FALSE /obj/item/gun/energy/kinetic_accelerator/update_icon() - ..() + . += ..() if(!can_shoot()) - add_overlay("[icon_state]_empty") - else - cut_overlays() + . += "[icon_state]_empty" //Casing /obj/item/ammo_casing/energy/kinetic diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 20e847326e..19ca42022d 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -34,11 +34,11 @@ pin = null ammo_x_offset = 1 -/obj/item/gun/energy/decloner/update_icon() +/obj/item/gun/energy/decloner/update_overlays() ..() var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - add_overlay("decloner_spin") + . += "decloner_spin" /obj/item/gun/energy/floragun name = "floral somatoray" @@ -134,9 +134,10 @@ tool_behaviour = TOOL_WELDER toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders -/obj/item/gun/energy/plasmacutter/Initialize() +/obj/item/gun/energy/plasmacutter/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 25, 105, 0, 'sound/weapons/plasma_cutter.ogg') + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/energy/plasmacutter/examine(mob/user) . = ..() @@ -166,9 +167,6 @@ /obj/item/gun/energy/plasmacutter/use(amount) return cell.use(amount * 100) -/obj/item/gun/energy/plasmacutter/update_icon() - return - /obj/item/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" @@ -183,11 +181,12 @@ icon_state = "wormhole_projector" pin = null inaccuracy_modifier = 0.25 + automatic_charge_overlays = FALSE var/obj/effect/portal/p_blue var/obj/effect/portal/p_orange var/atmos_link = FALSE -/obj/item/gun/energy/wormhole_projector/update_icon() +/obj/item/gun/energy/wormhole_projector/update_icon_state() icon_state = "[initial(icon_state)][current_firemode_index]" item_state = icon_state @@ -256,8 +255,9 @@ can_charge = 0 use_cyborg_cell = 1 -/obj/item/gun/energy/printer/update_icon() - return +/obj/item/gun/energy/printer/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_blocker) /obj/item/gun/energy/printer/emp_act() return @@ -321,14 +321,14 @@ inaccuracy_modifier = 0.25 cell_type = /obj/item/stock_parts/cell/super ammo_type = list(/obj/item/ammo_casing/energy/emitter) + automatic_charge_overlays = FALSE -/obj/item/gun/energy/emitter/update_icon() - ..() +/obj/item/gun/energy/emitter/update_icon_state() var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] if(!QDELETED(cell) && (cell.charge > shot.e_cost)) - add_overlay("emitter_carbine_empty") + icon_state = "emitter_carbine_empty" else - add_overlay("emitter_carbine") + icon_state = "emitter_carbine" //the pickle ray /obj/item/gun/energy/pickle_gun diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index fd09aa7f9d..5e250d44e2 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -35,6 +35,7 @@ slowdown = 1 item_flags = NO_MAT_REDEMPTION | SLOWS_WHILE_IN_HAND | NEEDS_PERMIT pin = null + automatic_charge_overlays = FALSE var/aiming = FALSE var/aiming_time = 14 var/aiming_time_fire_threshold = 5 @@ -152,13 +153,13 @@ current_zoom_x = 0 current_zoom_y = 0 -/obj/item/gun/energy/beam_rifle/update_icon() - cut_overlays() +/obj/item/gun/energy/beam_rifle/update_overlays() + . = ..() var/obj/item/ammo_casing/energy/primary_ammo = ammo_type[1] if(!QDELETED(cell) && (cell.charge > primary_ammo.e_cost)) - add_overlay(charged_overlay) + . += charged_overlay else - add_overlay(drained_overlay) + . += drained_overlay /obj/item/gun/energy/beam_rifle/attack_self(mob/user) if(!structure_piercing) diff --git a/code/modules/projectiles/guns/misc/blastcannon.dm b/code/modules/projectiles/guns/misc/blastcannon.dm index 1c8d519ba8..60b7565333 100644 --- a/code/modules/projectiles/guns/misc/blastcannon.dm +++ b/code/modules/projectiles/guns/misc/blastcannon.dm @@ -41,18 +41,16 @@ user.put_in_hands(bomb) user.visible_message("[user] detaches [bomb] from [src].") bomb = null + name = initial(name) + desc = initial(desc) update_icon() return ..() -/obj/item/gun/blastcannon/update_icon() +/obj/item/gun/blastcannon/update_icon_state() if(bomb) icon_state = icon_state_loaded - name = "blast cannon" - desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." else icon_state = initial(icon_state) - name = initial(name) - desc = initial(desc) /obj/item/gun/blastcannon/attackby(obj/O, mob/user) if(istype(O, /obj/item/transfer_valve)) @@ -65,6 +63,8 @@ return FALSE user.visible_message("[user] attaches [T] to [src]!") bomb = T + name = "blast cannon" + desc = "A makeshift device used to concentrate a bomb's blast energy to a narrow wave." update_icon() return TRUE return ..() diff --git a/icons/obj/guns/projectile.dmi b/icons/obj/guns/projectile.dmi index 9c6df36f495a2ee922ddda251e1003a4656b73e8..00670916db18721be8bf4ca97770e9fd72e252f3 100644 GIT binary patch literal 46042 zcmce;1yof3`!2eNMp}?=qy!|SYfxHBMY=(d4(T2mX#@%BMrjb~20>{-x&|Z%>4stM z=KKBs?mFwPbMF6~weGrWjW96my+8Z?yz#ux`)uF8P*)_lM|}?f00LztxmN&y2EIiD zaInB{Ctj0R0D$4`^IF$U&eGN5osF}bjgun)cx7g#568_5lZ8#Ml@Nb$c&+p<^Lz9x z87WzvlJV1Aj!(?tfsCI?GE4TKeW)P(a%8w~zakNl8mN={XLGfRA+Y22k#Rsf{gQm- z&)Lq#U_|PNa4jL#>#6rIHYmo2goNap4D~}L?mMF=tEnH6rXPw?jZ!EAJsCVL2Oi)lTZKOM#7dWY!`D%Xz%JVE1&)iOFd)D6SF9tBfvNgNHEGql-0d9(Fi zk9TVarhUs5i3xXG{)IOCNQqDMk!i7}^Oq;5O(Qw-s{WPm5G67Nvo|8)X&tI7YGK|- z#b`X!Z?I-7`K;O=3JrLh@mshq4R5xjAL0KAcE#+o9eF@og3sJ>6|2cV`|^3>d5m#2 z%>J_%!O!OqBVN8LAGE+0LBP>c`y{yFayU@-_&SjIhG0YwFQ#E1*FwIfiIZ2(_`bK= zAF1zk)dqcjxp9|tVisv80jZp2KMxz8Nn_$g`O?z_J9rP7xNvh<#I*|@L~hJT&demb zEqOMha;R;11FIg{E_H05h0_vCFKjFg>uNW8YNb#}&kbhX6D^x>G8){8WU2GZ)UV#k z_+_*2)i~XqtX>i&X;Bv?ZWJ9Qs#6yw`m!!kRHZIbTwdGzk4xtx-e)$t(q<|pz87Nl zcr2sxDauyI>r*i=k7$lb%o2S6a81jM@_u^ywtPhGuXUGi?}!=?q^%T2J0~tukB--- z{Z8qt>0WJwoGFak*-C!ChB$3#^o8?{+QVUm!9dU7IylFmNh2#}xACTJQ z-u;&M8!OZJO@E9qzUUmK-5p4G!5|aMiSI)2cW6-%I+J}bv75IcCw)8Bd=r6TMW8#QJ#{zejK{PWK;*q;Z4ECAH(HW#^0g$I%Ns)W?CeUzbL}hTX5m{Ni(eQ zd(7<74>0K+M7aB?yxJG5)1K&#EDqdPxA#=ermLiHgS8ZNwj5zezgoG0JELzxnQ25# zehHbVqdphLtlqL*8q0DMc7NDO$_V}$5(d*TPC(Pgl%vJ(SH0x@m~K9ZO%7}BQ>{_c zi4UT~d%ElRYqT%kgtu>Sbh-!X8s&)D@#~Qr05Af|a!+4-W$w25deQc!@1qQ?lgDI2vtF2YN4rxdk#6JzSYRz&CaPa!xdw1=?GmR z&Rh(|95P>J4Kn5Rh*_hYt*v3TpZ!oV?(ndH%ErpAL)ZP5Qmf3jcr$-|;ZFc`w4kJ= ztnAw0_k_{Dfs{z8vO50^;C|q zgAVqkUd#S?V>s&C$Hxa&f1E>hKh)dTL{AU5Ty~5$=+h2?{rb;Wt+(G1c;Y&_{Y@W= z1}*!-2FKlYdV@zuw_NT{L~;+Kh!;ZNT$z2U8rOBSC3VqP6-WSZJbDz|1Mgf}$u+ng z8d5DcZksC`tFh=udj}MTUw2{CYiS<wLKApiVjA&=0BKVK}^+eqZ-bFXc;(-mWwS#CoEg-)em*Vq^_En$QX(|5GGEVUAKoKmc^&r6-v_h&BuI$5BuJ6s2K z+RZ=qyCzp~$a@z}JiXk}$Wh-%$??0-xV2rlhak%xLNxrOa=LXttaQ4 zDe3#3jsV|?=lts08j|8sngMyRyZcpp2TPGkC{Z5{0NiY0qk035e?nQ>Zm$;hF6%rC+ZP$X4G2B9m0q9qJx5LQ& z`ZZMQG}g&<6E)Mcf;c%XX&+hg-Iv0+O7K6dX>8jSYw%t<| z26+?P&KC!8Op)*L(q|lNn@8^UcXs^o=7_6`cdGoeDUeWSPxaW-t?{phnpz)dq*t1n zi)XXg5xu7|<*G4paou_mVJLE^_UbH%jBg9UXq(#t;!rWb1&UyByZAV5!t8=wI498;HRUTa>;E}cLNHE3PIn$xDfr`-wzjuu1tQ`9Qg4Ava*ZZ+}y+##CN`S z$g#Ly^2V#+*?bc&ZIH^dK~)XzgaRbs*yMVA%Hzk{B{_9K73iz z;WC9%0XCo9or&qP7U@SttpA?d-q_jNNzwb>T(~p{M)W{p6va{@q%lJ_+<_WVG)&(4EjLVm$9ma zm8iQ5()*vh>^R<^ty3Hqv$nSGEQptm%FkyWr{YUjHI5B@YW7qH{v##^KmIzIP2Ts} z4!~h1JsD9i@x|H0scydZ;0%r5L`Nr8qaqkhIe>vs=AoO^VSRr``324C$;soB*UbBY z2YJ))LS>(f`D)-Edg{Vhc3ke8BA?Th7if+>?CTmI$5C^k1JXSR)#Wzow8{T+z`({p}wHgXqH|Dd?xb zK`*JsN@ox{XeGRRh$97m#8idjwV%+{>X~8Hq+PrQBV!|9qW%;< zjL}eK^xpGqJeqx5I`5OTD`_Wvjjuz;qT5t?j{~g*9~A=y%60SP9aFHX{z?QXW?vX^ z^P;yOY<7+YUX5NvV+%8a`&STabg_rJK#LRhFjFyt7<--i`)!Xp5|6t4p*XJtKZVF+ z_!*)4ooHQEI=0K4epaG#&QLM#CJPbQsQ&8!#J;zC{EL$|<_;QJ#~Gt6EaSZ}N|cOm z?Tz=#H#{@XGJ)HLMnZJT7_2jWG1w!S=C2epS@W3ciiJ&0R9GPpFq=}+)1Ni&?(96% z(t5D#(K0F!rqb~3%%`g3+TBhk_iNz*&!SabK}iV(VoLj2*)VL_%4F<*Lx}e~wDz-$ zR6S9_HnBt?!PN1rx#Nd;hq0Dc*v5v{f*#J9V@aSoEFazZB40~}N*DP&D{W)TIuxrj zw^~(o@aNB0yAYRO6BAke;y5gh zs4c~T4=0`8IMOrU0~e3vxK*P2(u;cePFKfTz>psK*<*w&3~Kv*ogeYhoqTW z%fT@_;g-J|&!0d0W=!P&?a7tPe%rbE{!-hPGp-K8P5k8Sj2X&1>a<2AO2c%UvF#@Q zT1Urs7?tC#1y-2EA~4WxamTXQou_1FAQO6{;-L*B`4LT5c><`5QBmh zjRJy z*e#2Dp1hKi&Gq%uPqG}-1#vA3_Qr)XhCjP+*hi;*b95*&pa$Gdb>XqWep%B<_~glY zq$N6EA=-DcPDwTsVKMaO(k~wrd15(_&$C6A{)Vo&5CSW-_f`@C#Fn7XUs6%O@kjsE z+;$}Dw&F$owC^EVQJcj;3Mx+k>)4+VDl>UJ|h1iXd!lL3uuP0U8hY zX+DumjGV+-aIlf4Q&CaAx)}GmGN%Pt_X1Y}*a(m<>fg#sOJ#h0C4flT$CCFFl0>5h zr&fkrksA}sZ#s~t9RqC0L;6InQORTcCGh&Rz?i@acXy47Cf?&{#0;M&TA|V=xG@a;R18;uz=j!vX?q74;7Q>^H*1c}N^NS#f9zXn18Tf4Z`e{b| z3T}W&Bej=};J~ssu9jU{+M=VPf&vz}cg8deoCS3?>z87`-onl|s&YKU1FX(-abe#5 zoglnvGbW1eV~z%tBCxK8{DVbDJA3@lXA7l>21eF`61E?8(gB~x8wmB^cstH~om%tu z_3=r}$zgY7kO&}e=9c=-{yiZxIlqyXhNg!gV=BL-M8}2F^mNCad*Ku8I9uDc!S=*7 z{B^F=#O1-H+Z<7mm$CV@;DwF#t{+H zpNY0JaIcLfQU?OMsi`qf+GHt@R;t6gFVH(PoLV^#T$m$z;N%dm>%R?_mvn^KcX(&Z zO+5Lb8l>5VoSS{cB;bY@EdbvSzWwN%!@O`S@@(E~BmM0g%avou?Y7e%I%BRtMxHSPqP(7)8#^v!#4{6;KE8p0pit@`R~plyr3RBej;4Icc2_QsF#~H;@%` z1m;#WUa~rzVj-dZvfE>7$&s|@_SFS(rxVn=>&pkfn`@F~xKW_<+3GSj9|Z|tI@xK? z^=!uDY1Hc%C;l~WN9h~#?oBhn?$ha33U`$qf1cPL^ZTa9!NF}h>nxnz+Lg?M{YOez z17QbuOBiz9{E)2?p8A4Eq#G*h%0ra_wz zU5oR0%p}>UbT}f-@44-#>GheJG#y!dAaQJ=?k&;57hj*GKE><5tGTD!U00c|2_N?* zl$%XRfWa-Yau!WK2{tn|fvD>chZD&9QpfNHF@b%`<5U+}1I@M|%i1b(64BOtoH8!1(Pmh~53KBfHWX#=x6Iqp9W*Z!#J6q~V}>r_K-AxM zzS+5dM9@@TQf1OubZf=-_ww!Ax7dBSGpCbm-$Ob57AAvu7duEge2y*rwr^vB%qo2P zoe48jQvfktMf9Gux;}twt;)aITp+!7Kt;4F5Nr-+z_ww0Yz!72j@2Lr0k6g;jcuF- z>+{#=W{BK)p&mM5ubl~{|7PeH(L1A zNo2$|=h)gMA6f*FgSQ_+0!<)b<_aYHpkS^yCUc0*ZTJ=vedG|OBAaAhl~WQic%j0{ z!((<=p9>L1MXdNh@ms3|hH2hGll0+ddjN2>M9JX04%e~K^E>OknY6ud3>kt004oop zpE|G-gQZ)pJ*2A6BqU;RmDOUaL!E_x2&IBWlY>cN1s^-7&`|F@8Ny#xXkNf)BEI5)u_tH3NEas{iV)Gt*xL?dBLr4UN=%3? z^WIPPvC8l;`En59)C+(S1rP&Z;*qc-T_ekanQk>5l^~%O6DcSx-k#BO@dC}JIgEv- z3hI8S6uUSivH2Eub9;QPhf{d|z!beT*Y#R6rSFWk0H`Nn58!=^&iX+j5k|0K{=;ayZ&E zGqP5BH0Es#FjMxL!7TdY;N9CRqgfDG)b9r|5)he#aQYj0A7m40f`kJb-sFj8weHph!U`?q?QcGX0*Nl=jUWVYmBc0lWp zSHH<^yEgaD4J0zwpu^$zyv4z?bw)<49!rwWfrfiOLyMY}yy82S?vpBc?!^$x4rc=81O zmNB8@zzpcTM4o1U8)TYJz8^bn!g=&yTYyAPP=>HmDCR3%Q!}Jw%E$GQwoc?JQOV(E zDe{W6_f^n;I462`$o)G`$mQ>U&rkgU?)a+Edra7{J4)*{&i|9*%D)(e<$ru29~QOD zV=v+!zV2F3$PnN!G?jjW8;pakvZ2|@6?IQ9MZ2ugY0L`GJ4EgZKCNSsrJTbU>0I-M z86ZtcswNslRcvp~P`=W9HRiGCPCTZ3HJ#Q@jZnS9cp4hbx&{E9lapk{Z#Pgm&HU`x z8(ccoH*4|ADC*z;IaBqUZ~)juX~oB9oa=$H-`P;|)@p2Gn)eUQyL30@D-{EiSa&vm zPmfFM&)F7<*9|>F^+Nc-Cv{=@Li|FFtDqgldh``>h>iKXSKo5Z6#zy~{_!<$G`g~f z$OA-K%}C+?$hY~1_v@ulXCN>FW&;l??8L0N*msY(xaVxG)wF86VyAGS#L3 zqEWO)WR<{4>OtVC5ly!DBJB2z$r0JwL|CQ}$6lkoP zd_+|5SCCfBl=i0vkqLP;CNLJyDH5_DHPu6d_uSj?c&F}kH`{lQq~Y9hpOj{_yZf2j zh}e@~?!cB@iG53by_O*_FK?>NSE~jA4FX@j6X+x&hzJ^!7Ep-LxWb!G6$3ECF!AV# zw{~{kRbp`7uw{8mg3I2%STi378+$1nKPv1Cz7Dw{PA6z#Wd(n0%9EQuXD_GgsFqd)yel4Ntr*oLebABqXf3FaU+c zg&cdS#m7IM7cwkfbxmQwHa0GO#e~H4zNuX$PIovW-OC9a62eiC6}|UCCLNwt(_#Q{ zu(P*FIoC8{u_y|b8v!~_baeDuhX6XSNUdf^;fzfQsOuXmD|2h>0mL_jf-cn!{5pc! zg=}ol?VJ&Vv_Q)uAuxbts)QNC3G-HMxBtXdAovwq^n6io%lCO6R6Y1>jf;b>LjU)F z!sHEN_9G;^(>LW67=&*&bveK&MkZJ{%N51-Sl*BFRddr4iYyLIxZEbo8;`v#fv& z1&q3FBJDg@{QQu$|98?RVKABOm*D((rJz?DHI1fXgCjpb_$U8~dKd%uQEg{REh;W# zWRddkGT~#()PmP{p#+>oE}m~5DUL3;TGi?CFV-Kr|Fvu?ZuXh%!ud_?_V&jAu5Hm0jgh`?T`^+v$h|44b(rP383bePBD{sl?<^yz~G5fRZK zo31h^2M4fXALHGR3%tP5e(?g9m&YVZOITC0_->7S3N(tlhsbtPK;tQT&flI`D1c+C z_Q9DUp5EDz1s$)ep1r##aVhSH$R7aOdzpMs2>Z;7u(xcxSnhx*j1*+BxxZLXyqm7IW4nAmrI zPSK_nyO352+(z&^HdjTYqa=M^6ktCo6pz5}j`jDVq}twwQ?MZ;x54Z<9VMMpeUch@ znOa&^)t@ID0RVJ#bgMoN4m_%Cq}r8+xBy6ifzyWWZ~~fMcay>0U3){%MfaID-v$FJ zFQ>u!)Q1G=NABq)*%{Xl|9;fc)GO--~O^+@@A$i^hF~0sNxQh`*76hVhi!!NWh0B8fUMx(_Ys2L{L-N6`By z2`(()f{VD%e(&fK(%07qzCZF!Pfy34Pf$w`j!Xdq0CmID;xNGW_3PK%+*}!ZKLdUJ zH!AIWWry)rNTja`1t4P^`h{!IWx`?pDOgpYe;Ck?#8Nx)fk=F4oIqxsJQ%*ZK5u{Qg?RrV!0S|_{%d}7t>5?+Q|w(u_9_6IsTR+D1%H1jkKGvv zFw^A94q6&~A9Qu)v%A!0K-)4pGD4mO+^TmBTN#Wk@1=TT|7JY44z`mmOD4b9U9?}p z{zbtbAeq?w9$0hr5;+Qs!b^Dqq-AH5Pu%>C1q-L%EA!QSE4ieAi__n_Z-o&1eje;~ zv-XZ8Fz_DkZV6248Y69xYVZzeMV;?j1MHQ|hmBxMEqU3SBv?+Vus3(eh@Sa<^R-Hu zbsFeP+hCc^^?0ORX?m%^qM)G2FDMu~rIOm?Qy{Nz5-WH0DZ(Idvrd8vb%r_~h4P9+ z*wr%=r~+kf<9#Csx?^87#xiVU>*UbFI4mtreLQ-?3AQq>`?>zo(TRF**v~kAQ$my_ zDw!NBZQm_+Z5iTqxt`kB0Dy*P4gdS&f>iDxPYh6jDbXzd*IzpC93LVPl`Vv$(%0Oe z3A6oiJTU_VlVGUu<8KsxYZCWrAE z?tgHRHO~J6DE)tcwf^fAa!en!K1Sa{O9ryB_{Q+KR8uS3U+ix`GZe1z1 z6%|Y>PTBl_vHO2Sa3N{h^7Aj5CTAQN(x&2QS|*0 zhVT=Xf~qN>B_U2QQj%_ww1}_y;L2(u4KxnsbICVYfk61 zrlw|Ma`Ho03?R4gYiO*6p(GpF9)TUdc{VuTx)8X9MWg4APDNvTaTO+inxod%*T47J zR*<^SKWjFt7VScueVbPu^;S*I>-P4Vq8z+BwhHvuDZBqKow{4|98_3J0f?%E@^FC_ zXHl}_tra)oLUq{5%~AsOUV1teztrQ$gj7^i04y_;*0AZF{KBSPh6M3K(@JCzzW=xE zMb}ZO)j0p_v-gOwu&}M&T{nYsd2jEgJ8bd0jD-2Fq|`5g_z!&H@nH9x*R1Rd+js8r zG;n0|ZuAgAfMuu)nkli@=&}w5;4BV+JOxOzxVX4P#>V#j`SZ}++?<${ltmmfm=UV> z{CU*srGlbj*XZUBFu)90SXk61Y5mVZ#35Qjz?+kvV!Ij;uKoTE_p&H(Ey+Gn&N)$r zKD+ur+y-4=X+0j1NUPQ7my)h5rE;o|LV)JKzS)GvC;BSRC|(R8_<((+!Dd`edO8Wg z?d~qO)!Vn=ZiI%0Vl-HM%qMYiQ747+^XKWRr=#=n@iET-koPK;zXK2Bzkjn1f``2a zYgE-dbu8AC^e02YZ(Lh|LIx_N^R_-W`D-mLGc~OT3Y+wq?d{T_BZ0Uga!aH@Z)mfO z_W2yR@h_O^JBfHrzBjug#^&dv&(1swOG*lwo2g6GvtCJt7mQnjrU{vy)zk9FJ2u z+kl)o{|#w~!X1&>xovuojcjt=%>8W(@gh9eP*;y?yZ!M)dHm%I&`aYRfFY|o^JYZ+ z%8mnw9r7oyS&>`gL?0gmf+8X;LSj_I!|J0M%Ul2Y3ViB3{3~tc9402Fbp55r^XK~v<<}|;eCB#1Qkpd_BgT~u5baba)s;^$%znDk={Q2`pt3sn1fMG}rOgn!+ zIH>M_PjQ3h=I)+XR%dtH8)gcgk&>Dk9Lf{N4yVvG@R=m>D?tUW;8Rj@-!Dn6LK4B? zl-^d9GYPg61FNH?tqL7%YD&BBxamF(4Z>9*zsow|^cJ!iDm$%nC3(6`0- zUwO^#5iu#7SuPIT0(YqW5P7&lDTTm_^B&KL-I?ec#Y-V@_MyrrXV#Ga?6e zTDnIW92cDtzE7SNG8p>{NqZJDNd3*0HWj01~ zRSRMUBAchmQ1O%BQS2;~@0X>1UD1NkRKMlg4F{AO3PvEnf>f4vJ-hA z``=1V{@a%RuFP=1%nrCR7_uIUo@tN-LyqOM1~)yZVljVjUN@VVQp^M<=pyMFFHq?c z$r?3m)jtr4USID{vKOzZVYC@3Pp88#rJu1;8K*u=bXT<=h?4*|e5 z(w9+GULFilj~C!kTXX*bpSNUqlfBj98B! zOB);R@9ZA6*uy99rME|GEx*=@Sc{E43ZcXRB3-5Qa+);wK&L60=(4R}1sf1bDk=yt zG&0id*nke~dPtaCSoE#2v9Z0`+}_qTzf71(lhoR;H$5d zU1LNiROF`u3uPdKR)KOv5C5)9dUi=y7~UpD(P+JrN!C@S={9eQQhe73uz%fI7<`w) zZxl!G?(S}FZ=cKqSy}CiuD!9ev~=7Qec=VWv`F)}X*>GKReNKC+|hYZe-97Oa@}iv zv+Ba#KUiDGE$_>h=c)#pT4CddE_&@&g6Ib?;ykB_)Lb z6G=&Y=jYeE>DZcsX&GF_U@E&@2Qca@jox9yB<{Zgb267A0LT=KGqSN^)z#J2p4{B{ zot&I>!krmi)F(fJ6~SfsuCQBJ@IQG{V0|O@Yf0PKIJ+?b-tA2pJK|8+L;*T_Ej=Zm z_i5Nl(c4=L;CS2==XNs{WY%#)7iU&jWV7OoUoatgk5NlCX)5HT%E4d8@r0tRVZRjF(P8RU{aY7}*2HU4GmM;-QYKDH5#^AT+8?1G^7Aq6=ulqmjtp>? zj?)mmX>juGB6Y_Z@bvMZ0ip!}h`s?nAtB5Ni+}}9kPxz}V-gb5Y9cNuSZyC4f62d? zbZD~GQ0Ua+kTH{BTTdnGbpUJRO&ERkyx*-2jNz`G>ng?3YaVCOaENG6+vPl$%ib`Q z^NbLTcmJ*eh#z71vwU<7D3a%F%D}11e(%A>VS6~^(a{m8$nkFQ#``z4dTTQ+xj8wN zQ@(HJapwKD?K|E6p=>CeelYuS6wSi}ZM9NWa-)jG^u~k(K_58Ayc_*GYFtE*Q zWU8hMF74|~`KT#9fmTp+)SCb`(XY^!XYaHgvQV(do+*8lH(uCdzZW*1#vbm++TR1G zJS$_`6v-M->n}vyZb{JgaLjzeYGS>lr22$_SlNyRHenlKOS6I|R$@pPeL80S3j&ns zR4I6R#(V7^tzU|I?q#n2k>B&f5XY!_;s3dY(f@QC`}+1cY~0#Zyp297DG7jebv;c^ zPVRgo(6qjel{~6!5Oa852x6(Ag$2VCH_w*!b-`7rxY}oT{&=mw?XbICz&fHq`cW zUrDfu=sO)699#|Pp|>^W=sXSy{@cYxHZQ6j2*Q2;kWx(?yKjjfaDohi%vD!rNVUy` zLVOYhlM;S9u`GB956DCJfuyPD1#xt={wot@T5-#oK5q$Ky_)phh1IGQ#ysV#ZrMwdiK}I-5$Kc$;mqoo;JGu_yB`>%)EoDFO&cowdPBG z&K$<{?Ci=?8g75i#Hql;X<rnlOk6}>VO@5#pjzc|3HYYvGXvycuJs{jh$ai2s6vLKNmgM)8lys zx!qW7py(;fOPwkbK;x@m15W8X@;~t)4Ge5bL{ab>8&)6cbkCNJT2MGI?Ppk`ZvD}K z-F|5fo{-O@QU}gEsUL0RN)Y=dpN?}`#~Yn@N=hWc`uUd8wUgTKM~|Bf&{9r+|HOb8 zB@Pw*05`|D`Gn3d@JHrSR-|z_2*@o}xhmX`Z|_j@?akvm8!u#d%mb2fZ}&(|F(z#5 z%`cWoyZBCEzWdS3WO!|2-FeUj3;FZ+(Hwq_ghe0gwxnH1248NRs~+`j#m9)s`SWx8 z<)xmm#Mqnov>!i#gLxu| zFvvSNkg~sCk#>l$MMUy+KsJv-org0Dg+E|bX9jiv$;~RC=$0MjPQN9QOyoSlC}d!I zY$(bwS#^20nfjlw%Cxm2M}|Si;{&f~Q?UIR;z=lUz=X42RK+A1cp|nuM;%YWF!l47 z64dXCGfvlq{%3ve{(I3MsaF265fPu9cOo=Z4uv|MdrVkyb*i8*{59(OC=47yFf}cP z16FfUY^DTfo9fddr>CtK)#TvKU({{Vt{MP;>al9;aQd|FRTAU&=KKP{0Cv;MEMVGy+tc^drymBi*xcP~5& z_Eni4&Y;v1Pf}B)NhI^l?~bJUgf4q!JH^h7{U7>)%mn@6oz!@BF8n{^p8qYp2XadP zFDm8#@f74r4i0o>6%}|F9oF0%y1&?Qn03dX=**FrFSND0fJhYjqV-V7cv=J;ZU**) z=&)(`X;ce+WWc+5Z+yxl=3<5)SELvuk_)sz!FVSCCX?e!7}$YsXh;V)lCOMsnkbGH z4Y;uYj>Cz8U%v#+Kb5!xy7gbs+S=M0y$)}Jv*{dfOt23+fJ|LI5)XgIccRgY0+K*}uU$19-R7?r% z0*Vy=xk0Z3K)d1#anDpHXePr(=Osi_%y-GzZ?g+{rtNQcqrQ5UYx`5*V~iXi>5mPx zeJ3F8;27QmPvC*P9W}bA5wD?&0f4nMYA~9D7Y#N<66ta89$uybBl-Zx&;cE;%MTr2 zJ06gna6aA9Qq|B{vxn;yQ<5+tOD9MFfm^)IExrjU#ZP^F#J|qrH~4`?s0Q0_Gs_dc z=y~4417T!hQa0RcL>U(r7c(<4K@JZO2L=X!j4bFTQQ!rO79x;NR-b@9>gJ!--7VF@ z`_F(PU;1NQ+i4xi1jfi};*#VG5E5a4Uhn23#kSdftsRYdIhYDQS1`}hvFMoUfIWP1 zefWVn$6{<@cWIyn&N7!EHHR6ZQc~nJ*<@cUQ#!BP5BB^o^z`0?QBueLsoB< z=wSBg2?-A!T_-Cwh~?fKSeqNsfd=CQyASc68#GFhV)3>(RIkT0v;|bPk=KjxKD`F)6H=>(LZn%OV?f`zY2`SZ(dS z@BJeVva+?thyLe_5e-W|Dztby!RG-+zALs9=W<{I^3DGtX4u$LOvtVw94@5K_#292 z>Xa7o$j%NiL*sOd4XgxRGejvNn{Jm=QWOerQMX*1r>LV;=HqKuh~mrF7S{TI%ku*iOKkE}H@F(bDoHl<7*Zw$o( zZ#BC>=;m@*lW#U@{VOp$n=qD*j)jGgGS+)l_A2F&2kS!kUEw}egaswkP>;WXpLWXz zO`(_wIJm`<<2ZqKAV;cgeI`xxf|MpvqkF5 z|FS>oqN0}*ScvuFc7Q;Gi>u6ZeSKX3og+()VGG-FvXZy&v_KAiYfTKY(bOl4;eh1n zZI4iy32g~Qry)DVqb}dG+drqNY z#u^a`0YFTQXfDDvd%||$I8ow4>2wfc7z4XaG6_Tj4vt1WBJ_+ZQ8u!&ayuR7MaNeS z4e}f3n^$6rpu0HHdhP^f(l%dl-SWbePH+8FN3u-YF<0NhcKb2(spH3Pg#f2TqEx~D=;uy-r0m&oM zlJz80e;flTVG6E_`O8e>=QuHY;a>KKjI2VKKsC1k5irw%@(i{MU|o}v6u1X~A{vT` z;u3a#VS%{DP%pt8+pWP*g}@_l{6m;)f5r9_@vN4-1QIa|eGuv-J`Gkd$;tv~1ToTgMX&)gMJJ zf^xRqtJ}v|Ap5=7fH(Ei#25gSl$2ziJwpRCI9O()bpmdm%h93#W5fJp9uY?~(6=aQ zXwZSe!a_z?R{508t?>d-#~ppAPVbhuUcyZ`!&|C(3ADA1vd#n_4ggD7=(O=Q(WZxae%k)-Y)Z9_ z3pS7-0RiQs|B`Y{ZwF%ybd{BHfxFHSNXW?G+5!5Kvx=5m~0&+D_NN;rx=vLk;6#Z+LDzAEFo3#V;Nc z(S9bl>p_EsRZj0-SLY7EV(@tYMkynZ`60XcgF@kgB9&no^Zbc122p3xT}uv5qabiF z0o+M+sUDoO-%a7>p`H>5(EiiyXF@~k1*T5%nYQKV&J;w&Rj65!F#5KB% z2)x0r@+^9V&QhUcXJjz-4yKGrw3o@o*Q4l z@pg-&UT>X$pdy?-7Smz31x zf5rK>r_$)y1j(7TSBi=5FUiU=V>5~#uX*{9U84TO=CdPx2T)G)oep4QFX0ywicK7U zsj9A?|JS@_v{p`*3Jr#mhGb=cgU!6=;^sM_3U${!<>m?v%>cV6d5-J?BON#ZC1v}g zVl|=LCjg_w;%vekS9aIyHE55303P7AJ!bt{$Ro1@WiF1sF~}1(UFEXl1IU20E(3aS z2Ht5CN?{9Yv%%KKDssJeL?Lno7rcc{KuXKY<)(fUj&GrLn%eW<%|3y5iZ=H4_~%-2 zYlm69xqER=+>Mz~uUl;U#b$7q)6yt=dwapB7-#-^fUyMQ$9hWqOrM_ZVKtj7(_Bmk zmqsAMMo)CfefDziyvhlc~};E!<&FE4!DsmEIr6E1VY?`!P|ntg_pM!AB9 z9sB$699EmS%BHH_?WW;FvrnvTjBix0tvO^xnXnn}l~#VP^bk6Oy$vB6Ab9P%;~!~< zB67KoLOya6GKu;^e;eWC7t!W17Q zcvpY}uF(|iaC44C6bwz*qkgiOm;ndVM25W73#qrq7=-ka9Ee4b12r=@M+3=*i$z`( ziMT(ZxP)|91}~BrIJg+0SooD3)2%~)d2h|4#4r8Bhv4mPo7qNtjzQN~K-p6?4B-d0 zn_;-Ps-~LJaRQRaijvuQ)M$L)+921@*$EA3Y@O4dTv(TP+sL_E#84AaQ2>~1qT}Ng z!}%Z%rgvH{m(2;`8UvhZjAU7f(hc_CtrNF*9DAntM;a8BF0(Q;estprWC% z`;v`Um@ImWH@jUUx-3HXioH{Z$`Brx(XoDSs{XkD!dEt@;(X?n-_3mL`0OFB^v&=1 z-mfj~hppDm8G*+ZK$nne*JF*wOqi)0btB2+Dvq}mn+9Q09Sc2i`6Xq}K0w_CB z91mo+nEmo5OA57kW71*jooU)E2UFMpQJ)iQ0)VX6RSg*9EGHbSKhh4*#4j1&B*_XB zXJcqTq{9M&j1?VkC=eKp`J+=$q?c~tG|OhFqma$SBoZ!!gDcArg7&9bNngt5A45CJ zs61fL6vM9cDRmq+>~md}Ob&U-?ujm0c{Ti;p(y-BKjL|y?BzR;#dqk;A zE#hzsDafKP@84fdOrs=f@yCdbWe?FG1--j5^7t!AXnt2Kb#^SrfE~j*6Xj65sO*XU z>giUdX(Cx9c6e1Ym4ByACnIouyXmQZxWq;kC|2@GJ?k04pQJt8FX-8!6uSbQ0V57x zZ?&{egxQyOP*wP-i6{JHN?wmY!-cK znj{?u=Hbc(be{DeMalt<0UPmjOcl_0G^Gjgu-|4vrj>qw-&fW2#Y{)|9_b7A(1~n2 zwWbYVcwzvSZ%vmwq#y0+Tp_y;=M8QBGL-x0Pi^?CV}=y$S8W*A#W-!~DAw>BdtkI)>6oywpTl1bx5rpo*fLB_xzq_b|ist@148* z%O_OLV>bgFH2xa>5mCRIeZz<(+IzenBES@Lmh~xeMv6qqyHG)5th7@(>@j&fM(Dft zuFLlA7g^#DujaowSPH}Mr`XhQ)y^iS5#t&8+$#r1H))$9?}C*DlbII0VgRr&uwV1y z1sF%jZ*gECcdfneOnvL>J7Fe#uAmB?B!O9f*KxXku*kw1X@~h1Cy-u;WzQ~)U|#vEH!J#UiohRDR$Bqfr@3lH^H@fA=RScYj>x}|lEm`& zk?J>_Q`?i#u%)85eP^oWyOaMb{f!iT;H_sbtl*gN*o`Rc_kn^eRrmibdXWsYOZgYJ zlK=k)TmKa!yG+DOfCHU>|6c$CO;7}5Yiq}RrqOW+w8vEq3-M%#^N-0Xp{*3VUve@t%OCj%>)PVv_6IYjNM6~uttMrH zIliWbACy~y^*Tf53WH>wjDp`St=HE*3=r0OvBK}G^ETDw+#T$#U58a<0SppMko@p+ z??ZYIXuf(ycD!A8YHw|g!!@WaprODwcUo1}(p7fGPb&v%M$FqSB8a+ErJu@S_Q~%~ zU1c0B_nBhW)d8?t3E@>P7Mxe&W3 z?~6@u3vTY4-N%e~t6~XMu+iieZcE(Zn#)zsOR2*Hkp3yDIriWh;mfwyRL?0$&30b%;TJfPR4w2jA@18%MFzRu zzfF3s<%L5Q1UU$0>%mA0 z7?lYbL32;GtE~AZ%MkJzT4%Kr*jB!a{C>Z1_Q9s!;m^bd3!DdgfTC&2!3*fDksEx0 z&dWboX#^<~?v9_Ad*^7tlNyM0Ti1$is0<=$u8yeELlx_tEjL;pm>tZ!%9qjpjAyQQ zbUb8Dl5=Z*%B57$a5c4iLfx}AE2}GirM=QH5_&9gj-Nr{YM0sFFBj&HvWIf)7FAVP zwpztZe-z%mEftV_->tG`R@D)6)O$br)ko>}ee}UI3f%r0b9r=hwC7R}-&FM%J+X`X zDzCddMrC@?R7-xDm+y)$u2m?D=E>1t3Q`;hlMBd)Lji$QPb}WSpf+Du+pq3zdzPv% zJe8mB9p+ne#(q@hxuMDMV9*G^pHme zcP$R2ji2r}ycHsmK_al->G{a@)}te%tzMd1>)%4A_iw*XponbZ&)hrtBA`Z`nR#}m z$|8*cDliU!u-sLjwNTBa)J;s!ZyvIf_BHM71R?v4!TYHIZ}j5j%LXYc&uVd}AtCV`VUgN`z4CL)t9uFR`RD_N_1p13ntuLfISgf0__x^!QLpl8mnqGY#~;U$c+ZevlvwA}(@bf$OI8>%8*Hc-!9;1wT0tR&g{0B8EL|y>Uk^QQ}BJl?(C4IJKO1iz^+DV z9+QZn`;-)xtvry0>#xsX8JU>+UsDKNnvOIE|5s0M$)MDykie4#zM=iKl_4^^FxPa; zf|I*S2ThIx1cHHx9@vIF4!vkO>5soZU@XJMncs5*5uwx zi#;E&O0v@Zn|*(0p>JG&V!@7}$Vor^)a8?%pC1DVzH=w)223;j={r#6=5QjHp`p7h z#(6dJ`dPmGoiU(3AZV(=So#*pCD#49~ z4({ZJ$tw9xX!T;){7b|&`$WxC%)?}udV+{d-$k@xci|Bpfp24r^=BE5IZ|#nycIRl zx3rXSEAM`JiJfl8W(4FO)joRn#BiV!63+Hww^Cg}>{?Tk^M;;;k=g5zU9XF*NNB2c z;?eT+>;|f-vvrtGX(?LDX(v33GZvP0De>u=KgP^y%9V`pDdwe~DzyN8Bn1*bJaZXy z3<0bV|8k$EobN7+?JJP4{jiJ=lLW>tHd_W2>+Uy;#_3ib3D z`ohaKd$!+7AlSO&>QjW*zl1QibtMCdob2$wN>rHt^mNGi|8mIi!1<3eI{zDFGXI}P zhW@8|AG|MQNNpu7eg}V_4;4`qcU%>uXi^+-Ph+jKG$-GsDmt1~@g{uIj1NV~PjYKK zLf{|d_i5=)2JOV45nkkLbYU{J=>=-a$C`2~@P?q{ zGUEmZtGYp!Pg%afepKldQRAjaW+JZV)ajqyaEPg@s-6pVU|!@N*$;zI_O}G(8h{pr zPzG5subGdzb)oN1xN?awTop$lmN5DWSKCWRWqT5LHx;-)2@b z`O^CWZr$*WAMdw3AvKfV0C*%I(8Ntk0Vz}}sMERw6lzQ54AZksP1}36J-YxuejKk) zSU8K`D^9eP&_-HW)vI{I_AE`xq=fg}ot7Uv-~}_9T?@0HDv24tqE^CvsRT0xVGwXaA?TZD z^3@&(X(motC5TsnkB=LY8KIMR@pX`r(l7hOioms?rzfh{>ql`&A#pSjYqVKxiRY*T zzZ8&a$-Xc!oI*(i&1&KIvm~NVp}IKa8ixm-2uYaVc>&d!nF7sCd~<(wpUgWTVC1v_ zbS7IgXu{{v+?@M>i2n*b(Wq~&LN8M*%B_)6;;$fs4n*C|Zo2GkdmeFO=uBxS1Z<8XHhTOjH zeNVGx+X}!_Wg3>3j7I<1Qop_u#_@2unDqycD&B-{PkNDtDE9Q|{Z8|h^%g5-@4U^x zOUVbxVE(n*{$?#v>fvMar9^$=Uu5)h(k{BsFvtOpzkByVa^%Znv&n*g=AQCa|)dFuXz2SFV1@efkop~Np}nT05` z_<#NSHEw?6f^hxdx*PAsUn^vftRCK7T3Olop7N1Gd)r&TWQ^LN+@uV@sh7p4GGQf| zo{>ROZib$C@A3JdzNJKU`r~yn_neu*{CRE=N%>u%y{M_D6 z3yKiRBHvGNKqPT?x5F-f58WU+UFy3Z8eSh1M-6Oo#vh ze0Nct>Upr<&quBW85nEfGzC2z*8S8U`|f_#e`IY)@=*Pcq)Vv8A~?{mXROWEmp0$& zJ$v>|D=2^ncN)yS*8jfvD|%V8{QR<#XEb!2NPPWT+gOYMp}s%AvwQM|wL|+KKbZX0 zt2+$e5woOYj-t_>KiuU(qkVUNpHNp*vhgt24iw;=kSA2?eAP`$xj0I6HA>7;zte}_ zXuY$@@G5OK)4Ou<#DrpiR)Qf|p-Li`g-zYwWF+PpFZ<%xkw}9n= zu5l0ZR5vGICBXAB4ub${uRCBzvm=6lK1|6`_xgpLTbQTwkQIj(I9Q=b)#YZ1SRc{U z0~|x1ZzlsJsxx=$Q{trRY9V;5Vc&+z2(6Nhe8ZevVK(u{YwH^P{sV}(7gOO|vG+EF zG#cGmEBjr$wooX~ySuvg{CQFC&pH?g;&gD{8g`}~lFrhQ2aGfe^qVNq+Z0!t24S zOw2Pa-di2sPJ>24v}%fhmY;j0bs@hK_?GDcF_)P%C{re(q)R7%roR0vFSlIzn*~cg zdA%&14+qKqpXUZy{d*3o$GmlhD1VkdfG59jV-oSBp5pxcet5wjs^x>llaD_R zj#F!KEEy2SEw~^(FZJLB_&llTU}4L3z>i3Bo*PYIIDCFysBBeUceR<(hPm;SY(~kO zb3K{!H>h=(tK^gChcZegZT+0H2;$=x+lcAp9>RVNiVJPI zb~Y!>W8X*w*CE@}ww6?t``QO_hmV&o^*Pw3ruAOhI9PngR!Q`hIwTM=m1-TNWTW=o zr2A$yaV?r{>9awJUA*#5Lz;k|%E!+SAVWT7R9>6%yl{z+p7HLx`1i{t4#B|&UGrL6 zgCD%F+6a93z-e>40%xAuu<`wT`p0R}MN#>N{M)1&jXG}Xj6i;qM4oraTyJ9N7?ikQ zJlw7R-mw|pPt=Q10Dny&ab(O^xfuXdp@d-VSoOR2dAiivgkG~x>IS`bH$F=-C;X1> z-jC(Pt)0Zdxi3_9A!@#f5O#$ekHvH>9jqXPKJ#qOB7}+&4kQJ(5bqjF7jCXoxXSmo z@Ml^b`q{rE*`bD%8krR0{+^JZelO>YMBn*Fk2hGq{6R%Zi zT%wNrV%drz1t&927UzG|!ub+fuT?ff8*4~iO$5Wb+^raj%|FMtRoumJ9Ek|@Vg zKuTst%Txs7lHw^5S0mMp^(#1mjau7;ivy_zNM%_>3u__QHid5a;9 zhudUjrOf%x{8EQ&Ntem)(E5cB@VFe5;H5%Hee5G8P9%$&1Ej7Xo`~s)vLq?I*FQo~ zJtlTJJ~C~^p;;uvt*cfmtv6@8CPT&25X5GU%l!_oJwLib-cleml+@eTw{E2HcDI_7 z%!&tp7^F6xeN?G!@=%^30WV$8v);3)_tUzlNb0>|;z?flhDl4L*B$<(__xp2*SSy6 zE%#11s%dCEnbbnv3CXX5uAInV@R`d}`+RQqkh%CBkiiunx16?qnz#FH&8_tV{n7Xu zv!HQTjp;CWvf`tF*27?@f0zv6?e7!22AnS6tgVfD{v1xeQo9#+Mq++b$ra|{=yocO zc0LJroWkTMzZCnzdU)(*1(y6pY>bsl5a-$Gm6ff?Piby*I>*`0khu4+TKV|}9!Lh| z-niyp6`~CtTetjlw=eulqZr0;{x6N1)GI(-z^4Pd47F5Wq)QskgbiazB4Of{IC#El>j*7qL_HHq?>xFEKE*@ix zo@l_Qa>_hBCt9M0nrG)a;w%1q&u%`{{CrACFIB_MFt6X0P`kB3zoX3cMES5FfoI=|U{IZG3^CL%67McWT^B`2q z`SYxt+-DbuK6Zb$j3K1OAUO9Y@B37_P=dP6wGbhCMRVC5zu@h7r0ij>HguLn;$fR! zGQDx;`ggmE5}ym+zXq1*^e&$@;@-xDAk9-Q_nd2Pd4}oWVF!yEjlGkQqt`mTB%DsB z)89n}XL?yoss#|~HIy(~!V`6-b8E(eVB`G!^e8FUF*e^#n zhg*4hNhv1jKHpi*0%xC@oq?c7mm|r+Ma&3chS|1>mZs13RFx>r?I@X;a)VKAdIJKN zZi77Br7xN1LWN+3y|=}rq`bs{-*+Mm_3G8Dt)-bKe%@M3wO@n?>b2i}~^kB4xk zH@xkOAM2Z#R=qh4MD0)>k1KSCijvqjaFJlS}h<+ufAO{pjfKxq1suZhIlXCJ_*GMQpHniUFhfyj*oaA9TNjb zeR=b6ch5rYj+fL4+HHM8UpAKbGJA7h3D>;5ptPa3r;~5Jlj1j(f(V8zpA9ufcfClZ zOrU@t-^MnM<)Z164t~=^Hy&s7q+W)$+inQ7fA{|S;>L=Z<+0s>;&uhzy0m1ZS zs3%zYNcI{fpZ9E%u`#@|ij*iz|T3pF%LTBL?WKA^V~ZT`AuRoJoXNF{~QA+sIHd}u3}iMI~tfR zY7$h->eRg6Hoz<5DE+5iEp50)3v3vZDz8*(g9q7h?NLohG&D3zE5(C&e_AysZ6@o_ zHa!C)PnBz3C#`G@q>G9ctUNpzkH$Dz0|P%|y3}pFrFSb8sJncbAP9=N1Zx>dyTdhJ&2v&i^huVHWgi&&)Da z#+cT{Jo95=?*?k4lR^s)JM7RS);Bn-k&z9~J}vPjQ%iOyaTajTF%`!*??X-DGP#BmKLRK8LT!I#QPZcI$#F%f~)P8E3>swK9UB^2*{g)~D%JScom(A?X~JHvk1`0;F@0%BUc!XM_zNB}Sk$cyP_-D6AI5rkb%+6)pYJS~ z`6Ig3`w{)1<(JW?(u^}u&%i(!nCQIdnh+RW&!3VPau|TbZhqX4fD&n-Q)X}Knm+Uq zJ+3cfEFBTo0}9>@zQe0vUn6$$5fRsZ)=~a+E}lyq;-ML)Z3|=99vE!G`<1H=FO|_7s5{9<7vXIXs{uoj-WSs9F<2cC~0cM{Ox<3haI~TB_ zyhkxnS%4k4413S(%#**7p!a0wA?c`z>4}2(CIMZM*>9`2BG}k(0#=a_;;@4!HROr~f3V48;*5?-kt&WqD4Q%*1b)&u7Q zTPh6t<3vyMcSL%`&D~MlF5H+oTpq0kaddTfn#w}JV(}c-)ODlxmYw7PS8*{F4hRf{ zK^HDuSXx_)_}DbH<68<8kZ-NkQA8t!L6O3dHB>)UPXVdf_iK&$^xs-qtCciCJ*?Rq zyzd}qTwGq%nSVyE89hbIBF?KSPA?E_9;Nle;~o7;2C@R8!@qm_|Gbr>jxB?I#4zzk z$E;rIl{TJ?SY)vyNl9_UHSDzoglm;Uza&HY^CWbnqaSwIR@h8Azaj4B7uXyWBC(N4 zL#2S7;2TZfx#`zBd5w!{JiZ?|hi!N~s3hvu+PMbD`NL#bZ=RIG?=Mruln*%8^ z|IW6U5Zu8od{`yhz1cf(^3;7OuVz)MeAL-(0|u3prg%Qa7|^0r^)Te>#}vU*Qc^vG zgHOR+15jibpwqjCL|=Y&x9q)fGYYDt(s+Y{K;`4moobHPJ=*%b>e@ZaE;g=H> z#6X1N;^LtAj&pS}QBlVT?Wa$l_Kc0uLBRIE^6*RPO;F!|4Eb9m8x-6JfWCKKcFnD= zRVgvCv7c9h5{-3(Q&TT213k>jxy3Ynt%D~Wi7GU1LX z@IB{r&r?4V3VqGLviuYb$Tkks(Y3WQ0`EJE%F7c6HH9-b32a$0HF)I&K-^J3LXMD> zgmMj|G0q4UXvM0!^{FPG1VT?NS_TU*psD*fRnA71ZYcEZcdE<^S*8@CPRy!{6%_vU zP9pZ2Udd7^bP`uz?W@1~XA^5`+jyQl#+i_YCLbRkY;dmm>!ttJ!}TvN|88z3hpa#r zx7F=)C#38?q0CB0338TJ0HF&Gd1(DUzq&Jmi745XX&w6Yr{rd?Az8tGbu~w6{ufKA zxK_%*|4=HY;z&ElXUW~zbMLK#t0M&@bGbAfC|oSXPA0#ur6mGPkTE;Iy#GF_Nwz+6 zHN~^gX8yNHF1Gh<;Hp1p*li?jFc_G}nrR-pl&ZO7s@8WzU zpg=JDD2M`a(l~*CFP3kq$g022j#k+xo1JSUCgb#XmDb?L3XZxF%`VULBoPn+#COc? zGSz>aN;9PW%bEX#Ea?G_Ls*ey}eF zohQ6GCPiV?I3G{f{~s&>>!&+af8Vc8&hsB1^CS7+D(ObX|K|fy>2cYZd%HE#8HA6N ze|=7k`i@_VMUgxq#)Z5&C5Y4ioPb(b8JjBa2?w#@l?r^0sB@uC^~41 z<+<){;N9bH@#XkKqJR0;U;;*Ioo6L1Ud*<|lBxBC=l2oypSn?MfRU4vJ8s_N-xOJ6 zc=VO_c!+Ua8ON``hyIS@NscgA(A#~?>3_8Q!>h|v*(FFpb(&*I@zH8iO{(FB6737x z&}oZ1J^sicS{aKJiZ}!!4W`yqNr^`Ee463+-EP)G5B@s=L}w2uLo90VG$8bed-H5L zV%J}$)r||cpQ%S4`P#IXXv?e6rhlzyx4Rw~8Q5|NN^bz)6BNB?D&->kvAld}W&U^? z9s6Tgl~>sq+dfFNw!M3zHjs=PAHF zq&%;+gJvImpb#PZ%y#uC(w%02*g1bdG0{w~V(e{DTpzw6nqL#9BT?(4m_%=aG>Kt{ zJT^9br#F!k5!u{TWKFk48Rhm*LFp@Fx08vp7ZO*}S}#B`TH(@VV@a6xVXR*J{rxD+ zq`_?O_21c}$jBe|weA;~fW`nk;X6IQenq@~%``ADV6{G0>EP_#G*;=|d%T&pcXgdH zV*k5{(X*}OuonttufP6sIwvUD_)v-uIH7x4D=l!lhp+$Hnci*&lI44j9^~sdPe5=( zoKYVMd$2QHiyn=rD2#1ZL(aJ%#6@qMPMpqX32{GV5sa4}D5I+wo9O-^o;W|-FnK25 zjg&GpZ}I5SS#k3NKs%DQRu#6jxUV62?i?s|g#jZ~30A+*_V&YvKLxLWnSXTE`BcLb^Sw`QA3ydvAv8QhuLD)mn)3erGGmZ`mr`7VuvI)|NIf-B=kkuvSdszC2Hmm znuDSB?F>bYVqJ#L9LEHZP!uO8Cpkt<0T6oybt9GcD?V&I14x{twb&vm!z<@Hj@SY1&2$l%P#ekXbT=v2@@6svGeGkzX+X zZi}MR2O4>*iCa_7mOI_;?bO)4y|;fSovEFMIKW_afbrmfYG@Fv9ri_a~^xRd?b zP;vuq&%6*w?Gnrwhzg3zg=mnHGg(h**O{SZRtP#~4k;X6^2q=@WM;1eWSsPkl9CcI zo^1KAEy5v(N2Yd5lGOf(gZ<|pXLcZiAgd+GVVC?MTh)yr z^(om?9Ku0+J1fvl77JWrpR9xCEj@(l^4gj8TFvN`%jR%~eY}5q7y`OMMd^DG^I-C$ z?yAzjGox}+_s4xqnq^5_z{uh~&phU{R@+z9{x5aux~~BAwI{g*ZR4ft_2f(-k~qoboBkvG{q zqLO>Fph(}k|4p{-fA>yvzLQ_^caB(iW;F?O<(E|eJR@Ak{c2>yQ6$y6Gz{`u$ z$}v-5DGaW_#fp8YHh1uc-plps7CTf>Q^mELaI;f15Xdg-Vnol(>lW$xAynxRq&Ezv zo)rHWR+emNC9l0om%Tr~u&c$G=G$1@{yOvipMxSbN~Am9ixL?lgVk{+1s(4c4}_|c z^El`p*XIY7smG}Zmz zX^;~TAOo!#+Uja?l*M}^v1#6$~hg|p#R4(G+&glcQA0I7^ncFhRfoxTWlPt0B> zc-t_~C{LWQLgxS{y7Ee{pB(c8*#2?wn?F1TUcf5L@Ov7f$3MP4ynf);qc10 z)#3L1`xcC?86w~kLSnh7Qbi6)Zc*-hDi_zhJ1)LcqEJK_gE4{FXK;JUP5#S!tn% zkKSyyy7S<_sAJ5#4E0;29T~}?GHG||6V{={c8@v8!>13Vp)5%0ve_96OwH`R6O@$0SF+Kg~&l3)jRc6?P zcKye}Fns~?yz4g^0)8e?74r`x#8b)2d`}IBC-S8aNhNmioM~|)mmg0+Fc=X*uZYa& zW!Sy<)K`>80plO@lgF*BHfVBV)%pTw&xrETDdLINi8rH`4aR%0R$~gAUk&?4l7?M8 zUZhr$O^>}hIS<9A83Q?Ei!+Qn60FZ>*Ejv@PKZ}sP5c;H#GpuvqBgfPraF`Fk9myr zIi3BUwW*U964A(MMRKizpRpL{fh<8Xar%0xl@xvjqGkBk?$Zw3?c?%57c-Pg!u1=5Tvc3jO zE2{k|<3@>;yuj0G_r~a*<$BhP!$tL9e8%Q9h6FzG(uYr-?-ak^nqXe`a|JcmS)^Tc zg`M(2<~dlgAXe{=Y{OmWq|kD&(C60EvXy1d7@z9}JG_s_!zkq8H!0L5ka9nz&bfqp zbgEmKYM};5nF@; z#^?& ztM5GE$V)$qm^F#uu;U3O%TQN+%M|CXM&{PWzFN;6^n%&=sZM#XJgTR`6<*-kuSp5r zx^+wb@l^UK;?A!Gk->q1xnD*7eD7>ceSb@p0St#(;9BY9wbG%22ThcoC!m)vU&?ka z&d)21>(1N0{b^v8(0>L{x&fMA&xvSsU~hIX#zcQcvF9vw(SBufZKbY@j*<)%p#`PX z#U9jNczQ9uA?^1`4Hoi-2dPcpuS`)11~La7LKSMsFh&Pb8T0BM5KzAs99~Jf!_G>c z@fw0E5(-^cLZ4@qyN3Jj*rgHruhFA}Hy1BsJ9sTFRld-h9|=_fca=M&N^QL{Z}z2OIaYOn=&OJ48-$W`C9oR#Z9guGy2g|NA;_*= z{-|X(Xus<8xHIu$Q`Ys^5wSaC#O!tT!t5Og>$V1L?FV^!6v zsR=-d43O+Il#_hFC{kbsAIs#e4o=BwIP*s%crmy|;f(p4yh~ zkhspoDE3Ah{w0`*oUEz*)S`z*x34WWkZh6}7q^Ib@IV{L6t9n*&{xFLW{uKmY)YU@ z%#?*UdD~8jUyRfQJg=GG=4G}ir}g(OO)cn8j^VhNAZ{_xG;H}!RWQysOTF~__Y)j) zZo8EW=6CK`?*w>i(NIQ4whRFR19b^zD2T8(G_!L?)G!?YumBehr4`5H3_v>fo19P^ zco6VQjMRIb=XcFSwO_tiUhL+prhs);&I$<9zy9+14rS{n04`$#=sb#@JDzjxr?v<( zM2kRbgign&&s4@*s8VC}sPUJ0P9gDDXt+Cz}>D63Rr`?OZQUU#y( zx;l)=1++tb4VU|rGt-phRP2KtAAB8u7Lp^-#XDlNzn`(_jGg`b|4DL{_(bwBG~(8N)aV)@UF zwtRg@KKJu>^-1DLiSaohq1na=TKfL=5FV;G_w}w8r)2o#@@y(%wO^GUDk(ny^&A6E#8)F0V`@*>G-u z8S$pz<|?WDIy?53q(Y5*Y{}V`iyX2pYRkzCn61 z8j0>Y4Y9McdyohRWQk$Fz&a6LTO6&)o)HIJv6rC1k(z3+j(I-?N|X?sbK;=8cV%z5 zF1Wh?QLvj=xpV5#>F%W3a8p6!@I{TI+nKlGe%2iMKD4!+2Iyh&p)Hfs{6vs9r8~(m z3rC$<_M8do=Y@>J@s)$z=Q0*Yas*neWSXpGqA?i;y1;)lL{?3#cx`_`^HLk2&mbvJ z{|M!2uyjKpuH_>P3vy(N(-R_uU;-Vd_{O>F#jZBGe&@Lq@;tdkiu$ccD2y>pPl#r! zeD~4i5lecs&{&F-JQtb}g2;bFr74&GCN5Y30^TX~%l*{0) z^>?kTGlp(ne&1U;cE4HbA-Cppu`i@YIBZG(E&MfjNxExR~`Cenl7j|uEGKLF1 z$tPCr!lo23_f5$d6DwS>wrFeo~bR;$}u2QtX%j(oQgQ z>a!+}MZ~KmA0xrR>~VX7x6b9JM^&;<_2HpG7T=$}fFwcB41A4*#gPJe|3<$fs)nr& z#K1<&-Tjv07xOb<{_}E%MQVbu1~G%kl|XOu2(_d8-2*iH_ORyj_OJrV9peX}Ns_Y^ zpOi?W+uGf%Q8HALd*%DJ5btt*W8>zTna`kMByDpu)=af<+4AF*go;Wx$6$_$4QTm6 z(flGfKZn?1u&e!9NdNwAG5K>aFWlPnMHq8$SbqXa4Obg6^yF}5d)q6m{J{`YPZjq& zj+_Ub|2t37ysJkP|!_ zuU=FfNUjDaViWTp#L5i&UvWf0&iwjTxiLBfROtnTeh9j|U?F&G|MU9V;>)riItYs$ zbEsz+4i%0MUaPio_~YMNGd^&qM-;_%>>>>7u;&Dr ziLHU3U|byV($e;zRpJ)BJ4Iv72TwG+>#(gIssxRNte^93uOxXjZq#IfC`SWTB%$gA zpB|hZ?mEi*GbwK}k=#nLVe&0cL9I(Z;TsatC%-7uQ%@fMj&8FU)_e}~peAy5v^?>k zcwWoSF?GUGe@>mrgD!J_XU@9pFzeBIHEydlOgVCIS>$1c#%#7YOh<}U67hjTlqN3w z=6+<7dSblyT5)f7pRy53@}_<;Lt`xFBN%s`tnEmwZu z@X}a=-)vtvI6J{*^{hGOP)p6i(t}V}1X^&OK5MZ$R5h6HehZGTG>$_PmyaFvn%3_8 z;kL#58+iLsrg}1baQMmLqom}sFqimB4z0XVF?SJ>IqK^KJx8Dh(%T#7V#9DI%h)Y8^C9tB+yWwal z;`IEfs7lG(`;9a~+;sT^Y4POLJNKew?zPeYzakpH(gjhKiKh)cn&dbTt4|18$>pNhBWsxl?0)lfgwU zooStvxS2$0Y~ZXP%bUZN(3qLx6ZYz<0)7QTa2@@1O6)zO8(d`2V39O3wLkGp1_N29Z#w8~Au!xvxdadY!2}_T}G;(!SwabfJPMVuOWB*87p_Vq<`QmKFc^~(pA2C(cgI0 zQ9P{ng+ur$IFh_?miD8uAis=pU68^j%vwvISc5gGeF*BizFYYXWn^mlTqW?}W_7D* zIVpk}YX<$Wx&;@f*&{HV?dO7)Ubr&4DNwIk(2Oawwb$_N`Cmfc?dvuTdPY(b!X zsZ}^cW1YD*UHkDhm#l9SG(d$a5J;cq5LYK_kI zfOOw7_>s63tmjv{s$WQ|WDdF8{sI5hRFE=YmZk-vlq-$lo#rHgFi#bn+Tn&s>-pKj z?;|&gTWpvZsnM@*g!7EyEOaY!&KnI{5LDISrcD;7jU|| zb-GsVb?U3`FfRNTt@=?mHaRdY63E*_%R~6_=^zu;NUb`8xGRp~@E~v1))t2|;-`#Y z`wOx#IWUO?VP0>hWnubGq-Q;m0Np_?jYZY|PKAWWH`eke`+2Xp`>Vh8klw>FuOFWa zB-0w>P^pwR{^r3PuKZ06sXyWSH!;Tg|8{_W3`w%vAGSd!5Hz-sgmR?ku$`oN^JzYB zF4STwG6q(!;x{RPX%Qip#CpW~{wCyk+|G*(VQhn@o{`uLAChbjsvEnA<+4IET_1Ly zuc327jIhSy{Ow}M-u)=-a%|91-UM1@$NjSl{I}L^2(@2#DaXI-aYhgY9sL2qgU8uf zp7xRUi97wEu4iYVn*vhCZ=&Uc1iQohHX>9Zkm*d5$GEJw9hT*vN_+ie$a3@|`RKJ_ z0DP>k4xBjYaKX*kJA70E7>3f3S!>&mh?~fJuyIl;$Rn)gPJXa6`X}2 zd}A`TqwZ}S*=AbZwfg2}VSePn{ENf9d|Y?w>T*`Obx;r|Xv)BPDXHaPf|ypmxwc^z z+uW=H%5I}}EQ20!h?@pn0=yzzWh~6hFDr)0L8_;@xfSH<+0n#UOY1ggcj}3XJi~@0 zikOFh2A#rUVj6&!4m1XG%?#XMZ2+|jozT?pTuc?dC~KvBaRRq)Tfyztd44|7FK2&g zBM-+6O>JI^?%GBMJ(9>1xyM&K7vM8Q=&(C#Gdi$dt~pH!S(fZqjggj*)=U&7A|80B zje7mYNnduYn4xrDAZ=9}U=H!B{U&Dj0w^P6P2#>)8V8X!3mH7`eLL~~!!_Z7q2p85 z91WO^ZCQo>5fBdhuSYB=j{W z;I1S)=5rnKoTjEG46-X`yLz<=LWMP6QQn!e(a-tv)XV((Ctv)wj3b<>%(%L8QdG7&03 z&T8Cxb;}S2L8`%wR)F8R!o<>4N%)0FM4n6atUzF8DmLxGbi(${{i#eBsQ!%H z&z9Ut1b-evqMRqU>lwEtqT&LFJ;%?A*#`KrXiv|zJN)Og5j5!^@U&IXQ-K@Lvu3ve)jx8q z4{ZI`!lT9FW(GAUm*Ro}7%}R)pV9oh^6pfy%k=ALD+l-1>cHGKbVmrKabHJx-1|0*?P+S`4XlKm%aCOaFYXN` ztNQ^$yt^*rec{147OP*ERUqt+G=vJq^%wm4Anm)6#i!-XKK{sl)7Id$p}F+a@`LLi ztJmpJcM}`ZY*zg0KqG4ELomPTDl04H2hfzHxDu8wz+i~l`bwwvi{Y#FX4b_W55hK! ziB4y1^VA2`-}d9<Ec(dEZb7JG% zG@ayYQ5tNrj(DY$*CKuOO;fNBXO*2eleA&g)x`yxnL2?E#4{fwLr#F!H-Ib<4_fY8 zS*7!+s0b$7-njJ(f(8Ih0w)Vg?7Mdk$~(KHScXX?!*B0Je${T%XU7W(LVduvRBJwF zD|0z~yK4J*8=dyBx3?EU;Wnz%Uc;W;poO5jhW98l&fWiBCQq0NpD&M0Tuj*hnT|F8 zCI9!Y>woe|0jDFpKec>Q>Gww};&`IG4*THxUbktoaYed?WQl!5wNC(i0!WpEUhjIp zC>tUx;MJ~%#AGREyO7rhW|BOXQqP)&ObV&3g^QOP_?6SwP^dAYqK*`>+P3wdWSDh* z&P~lER*fS=`~zA)e9$DXRTXTrZUDHm=|r4wEL0yTZVKh;u(<7(ASW>$&pZ>MvASu) zL0g$d2jy4}!~BLkITDJ3_H4a_%<*0fBA&t)#;D*8z%i6hpoDlu`%RrOshkCE;YtwQ z$ylq$?Jx4HyPF(VTO)ZmH?h?;5mFUbM$yox{2fM7~ldtMqSHc(BJxEKpxUWB;ZtH){RCsoDC!yjDu=3cJ3HYCp&6kBDHb* zrXgu>>2CRRX2etlDRsZ|%z2i#lFN6WBh-HnS>=@=dSto|{Yo4Y$)Hbt*`{cIhaGqD@hi+gKgW#F(N*FjY~e2sQ*DrYZ%dVO2D_xzCw3CJ@@x5yCFt9- zZ7azxp_XyyV^$UwC|T`U_5q#2+B?%?SMtava66GR2fiy+NhTpg_$p$PrKZq1Kw$0a zN4mV8FHXjQZ-UjPy%S>t@lw}iv)VAuZUpZv?Ez|5q^ID^!{Zl zDU+nJU(cK(Lk{J9*Uko@ZLIrH%3N=R$@2Mhrb}&!sp6JYAcbBxIWqDbNjgAY2VA2g zqoZ4Zn&83X$E-kq0ohI(}k$x=#EvoY8elsXU1xFc~Kkk#5qDPWI9?Fpq{(Ri|!srSAQ_IUNj z^_UiZO8l2E#|T6!Q&R|9j=x1Hh5Ax*aH}neEe_}MZwZoB36Y_*)KREX1abdlc~O}x z8DO~U0l09`)$65ZIDnzyhmb0Ke@!M?lor*%yq&%On1nlxFB>Q#>0kDVabLsZPL;BS8UeBjSywZyLB=a;2d-8(e2c5f>2&Rw(Svtq_5 zPynED?HVA^rW1^(X=-Y!@a!7+h6co>pmSrx;f|(DaGB}ghQd4BV~Bg&58(*RY(p`a z@!4w%)v~ZQ7ulu(n{8uV$4!Qkz}9l;@s+H8iVQ*BkZrv-34;B0eYNl3&1x?@@xhn}W7M5! z7V@K69uhV5H8;g6JwG?M#XK9;a+XW+j#AIK^u21+H+>ORmo~bOj?2iryu6J=h)kf8 z^3(d9g0l`()YG&1cBp#Vd2{m49(AC>9vT!i$%gs?WUP_pBZXAr+8_#f&>$WT&?Ld| zdNK)QcX*cIy`~zPss2!*b2YzJd)7^U!69SZECM@4R(N)>w>K1Y%Xt^srLN#{VXZtr z;x(d#@IPAn@@S~P|Nqz6*N80HL)jyHDWhn&R&NwFNMzTB7&Eq#Boz|UXhR{pQI;_k zvMV%}GGpHv>&%$#d*}W6{+9Fm^Y{C8&YY8R%-nllcX>Xa_p#s@J|b@E*Q1U~_?1M3 z6Z+>04^!K-AnJq|FPKA7q*#7OkgDcdgpbFIS(5!OR6DpcrN4a_AY(uWrHM|9jE;GGk6r6}!cszApj~)A9c_ ziH4D|`sd5sD@|c#rS|~7XKYd<{q4x549sl*smjG^!qu6?ZRXuE=7I<8 znfrMmtPqb6jIXx%8eiXT6c>G7i$Dv0&*0Z?yj=EL~hDD;S-~u*Q)c-?-E37 zMP=nG6@EB2K8fG)^5vA#(JLU6_aJm%hV|3~{MKG(Ld63jJD~LFRZ}$`9bupoW02DY z+T09m-ecx4DD6Zz*FUkETt_vz*{h}cNUjhHLmEJuP6GYc$I5V}{&;|nE=|BVO0$@m zM^<@Q+Y5-dH8s+JR0=-ps3>c6+fM`n0|I9O=SqQ)`U5il)tjFZ!0GQ=7p7OHRE)*S zpjmww?(G?XD9j*BwtvO3|JH?HT}HFb`pbW>09KhGNRB|Pz#~p2tt4YwpajDXtdTC! zKG*n)$`NWKkevkyp$)hjQyQ+5UumT8pYFk=f@52C?_R)7!rVa}yZ8=IiRD+a0&@qo zS%mPkz9noLG@JnRc{eDOiFTb*5iR&$=ym(rk_aYv7kTbP>@$c$R%Qob|L#*l0?W&r zhpWQPoG*Dj&CKM7%x{eI(AwY&jD!kv;l|V>Te7CcSd}jyB|xnL<`LENz;U%t#Y!;T zf@b{6mqq+_-jwZa7}}wHX{dE&aVN2Eyu~Eq)>3_0u>B;QrJ;mAR>-V>{$ao$v}HsA znW=j*4%A^~3LG%c8 zYTVuLoxlc4eCN*C!54#CIOx7gP2l!d+aWZa6xDNt;sL5pE{p)KD;-@hvLQrzsPjqS z44Fc35R6g8UHvT=vDAa!*R3Po)cu8ypPbt*mvb0}2LWQ>*#T*6$HDch_EHdu)A`1g zmbxQ;`BRy>UC(|e8A4KhaI(1t6@XeNwiilUmt|1NU%ngyY1K+Y;$@3)!BUp+;HSAW zfK>?5&l_tk0(?2JYMd`BJpn>|z^VcnV=R%)qRck*ib2%Pw`>_&>&!%EYfavoOvX6- z!}@}~Ggw~yN)eE?te4tVHIUYybaL9+Xn+xJZK>s#F*rP7Ye*K%^6S%E>YVNHRAXXFr@fG7E?62*usb3T79i03k z2G~5>XsUJU2*;@zfIZxKJzZFYnm~N=L?E_EI!5`pkXcA!an;aoBlJQG(U?q7RiR98|Z_a4e zmO<6kRzqg7@g@9a-fa@#3;<=3kr3QpA39){0a{?hg|aV7#aw2%6bh+wcVnpMwdbV)#;?m;bBiCJL6HVSyV`plv)D z;b}rCi8TS?U|z_5Ya-2j?e^1eU*HkTw+_1>dI(_eIPT(KsDi-(vJTY$<-^!jw~{V; z_112yYBrwzI#KB>NR-Qcy5tszD)~WaArbG<1n7Mn`6hlw&q>r8|1jpwY0m({r{lM8 z8v~+U-Ady^Sto$c0OIeGfy4WANq@y&&6;f959AW}r|XM0idj-sI6{>Gn+8DsM}=9- zjKfs+biWoO@TV&DDh=|qh7GoNOb>T3q4};RB*&o-kLHKg(YfwTrZOLxHqgO0T{waX}>T@DBhhL_er0 zzEp!7GL=@Wx~Okv=7O}$1tc70s9ha~lWruCJNyIo1nnVfkj_3;LelAUU~c+=g<9~) z17!wK>c8OZ%s0h3KKQ?Jx?JR3@)g0}b_x7byA#mQBc?K3o&Y!2aN=E;AFpz{hDU}K zkwiE8kuWj|pT|St<`*lwTvu!@PbhH%TGtcuPZm1k9EZ`qCLvLuYR3U4myt`mOLoz- z0QSj!4}TTwa>gT7&`KSu%Jr|z8VdU;s-vHiT>QtYzuwo52lU={Us}g8kPZ}|F&ZQ7 zloWavM6`&4xn}Soz1k=r#n|^oW-5x^;#Q{dl@b|?c)~gabz~|_aq9y$wUn=0Q0|F| zRP;oCN=3@z44x?0*Wu_i=KcE8NL~oyTWPLO6ZT{z`AGP(0!OrKB)HD*FtrhcIM=Tm zwtsl}lm%k3K(|fPA#|Eiv$AH~lEcq;Wf~Zygffb{2juraK1)oQ52~kk*9F6g9^hI% zf<>DF5{&AWnaPeLXg_i^_?d%6t7oirjMH;WgT7)$>8|$g5hy=0dct?TY<(6flJ(XA zuCF*(fl62KRSeO?9Z0~r3ZkECdJ=lZH%@m(Lejtu|JovlR#R-&leB7 z$v2io;*SARtvgrh*B>wXVu3W+HQ>nirOscXf+ z@fI)w_4H;7t59tAsxmtkL^d#iMK;k5oCVlZad3FX8dyl7&v^!4@`nB%o_}=ynR#S8 zkFl$9@4K%-;B4$#=#!l+sU1=Gohg!E=rX86~D5M z`z(3-R>6+Ofq?;_OlEDJc0dzvmd-p(o!96QzlcRCroBCQGoR*wu{?75{Wu6{grdOC zw+iBg31EVb??G)DdG~aM$;!ODP3HFyrKVkQap{m|SYKnm$5TpvIxS}K5Lb{h7Ut30 zx2@Rh(e1k!c6ofRDISi%@U^@!w|aHp{y*R$F26dEV^{UE}Qd?)$6-Q5EWAq?41Yy;Kp|t9UlS@nP$2`20cT9p>v}f>eoWM$eU3OGS7v2T% zFhC@KtkF_$5p=`U#H0#kXLVjVlXg>*fApA6jQO$)`);- zxBIGb!mWvx6mvAIUNsisht}jcc6a(10mDp=C$VdQT&$3((Eu)(d8j6I?ATC;Q5qwb zs`Q`5VX;y#$vGqM5H2T{xMA-vo?=>Yw#1UyTOc0aRmH|(S=Tbr$)_FYIhjYKChxAp z3#uD>UN;}(b>)WhqE#;xekkz-$pa_Dp2@Y0mIHGSSVsT_P?%VwQ8O-JX8#^>eE2@v z)SC7bX9z5oYq>e!2wbngpC!!&-#oF?pT43?_3`%RSz@mwvu8Dw1+1qv4^Y<^rZ|x5 zFY+ook13c(#H=>DKoP)8su#F0_Z2uy$m`&Crk~I8d4u>A|I>D};rDSw^7+3)>O%H=6R4?X8KNl&E zQ-9veVPkrH6>9_)!|^7a?!B4raUiEW;4$Bd1_txVGIpG=_<|$!>zGIVsAf8zoMVRn zp6nKEq39Q|NwM)?dwZX_;Fa_0U=n*E*9=A6d8oP;B`pye1EEh zw|P0%_u*ejytw4G_@BcTd&1?l0Un9hV079rUbyzY;3SObP50^7S6U8S^mM4(%W_8;Xx%$`h_Uzjq?d@NGm$<Ol_2ai%h;Hx)nZwjJfVutiG{#N&AkJ|(Lb%2#l9It-%LcVI+t z<|G-jy2}-c=zE&vna^=-0Y0^sQ%fs6rnmi7lyH~(C*kDkY>}TsLs^cc-O5+odw znqO?}Ev0g%)Te}~wG&G{`1jrj_9?YxEy#qrSU7_Jgh57A2deNh;216hfLQb!r+N)L zz)3?#P^$}%px+YpF1o%cJZ<1)P4e%7$01A?z^Jee@9HNC{JFKmb+G9BqNbmucx&&w zYt11tL2HDG&B%;j=fql4ds?|E@F%BmV_$EU66B2+W=M>xALD-PJu{@uNbZ_aMAtKg zRjfQW;(#aDR(QAtAOuJd1Y#_y#R!~|)qI>XXI#cI8L)&zoa6xaotW? z4?{Bf!t3GATjsSM>EP`W2|b!d{Pi|s%fg^PJ9ft6majawm@?!a5WvswT!tk)V;kVZ zuFl2x3|9y26ybBKxvRTn*QjJQdsVcfz5SU4gR{CcdP=AKu-~!APqU!jU%$9gTjOzN z%cs-fUTfHK1el$f@hBL?`rxutu0UuY%WyO@;$sYv`Hx>OeDwP4K_#4Gr#k!Bxzvd( zxp4pe<>M}i%#s>()nv%r_HJqxfU2^?0B+eea^--+!L@=yhl^!-3Q*|WFG~KdrKOFoOQcYaA_c3T zR^2Hr3xBWq)dzca=(n#s&tml4&Z)nx)=8yWnii2tU@BLR>f4TJ=_vu2!ckO5ii5E==Ynz(VPc@)*P(_7pnAjUTf~mvvWH=OvWUSgy_wwx% zL&7JII3}{Yr~}8*!YX(O$8zix13n? zw+$q7D9D(@IB63ax7E8zF=)lIkzcaNM+6x@><89DsyUa(Z^RxU1-{a?I-Itsn1d8B zQf|ui<38Bf{qQ|)9986q`+D{;e30WeLtGqS@hu+yx5>P|wqJI1KH^jnE`5*zK ziF-c8HKDBa682Lu3K3}oi|K@;lGrp>6iIJ}p>ge^!B}S3c50iDPPc*5FM`JFBZ`Ck zHVzDDrZb83GPc|`2{A$sm#8l2mQ9Xi4v(S_&yFZ_FQv+!R~{b4`I*bgMnpx)gBkpD zuoliJisu)TvwUA)uK>^)n)>>w)Cyi+UML1IV=h@Ji<*swzJ1FsuycT24>376)EI36 zwBpS*sSHXc(c_Ut)yQCmrHp;9`TP$-u-W=BlCl?+v^aeLqnk5#$MQL*6tZIf;%arq z^+?MS1s|W=8&?Q&*?SjyUO#2DFFk9~kt)-Q=UF<$S|;KnQ7S zNs)&&8Bn1nV5)sCv@RU3NVs=lrJRY$bj`W)*KCdhY zsp=NXr`GLRdfmLz*Mc6Ureqmh5?ukjyYiX$v!9`g@0nM*7%KcRDYIl-Ed`pLp%eaS zJJZ>*4Ou@sRz~ieP^vie_Y+*sIb`$J7fNaFI=V-XCubiwvN&q1sKiBNgy_G5xFZYx za+-0k+Q_ho?!G3!923Fru0egB>$)FJysx0=0WBRY#i($YNW4?b z3$*PpX&o52z0S|~>0Jr%_vhQomeRj{^u@Xv^qLfI?P-asS@f+bQY=F0wQVh&Hp68j zo$EtQXzCpp&0h`7e~S09o8J`vQ9V#krz&me>pgIRYl4TA8~sqz_l#0Ge6XTM{c3(J zqGkc1diu<}5qkeY_GRD6`;V@m5RT&^aw$CDCsIk(>5OPg%sF@WmruaL4&Ty}P+oY| zg<7Ov|66>(dYCw~&b!2Ux|&!QA*igf1cz4?U!kax@Bcg%(=#LNx)tyYts)-NYV_}e z+9ovXHdE~vjsAUcydbg!%9Jn!V1HEnnUgPm<=xqGpnN(+)lH^ zy7irIhG60= z$bPQz&4u!8hD?TwrZN^42f~E}b##V{TPZT|0*|hCslcHz0v3nDPj%O@?u*nei*57E zz>?c_xSlh=OtQW2_|ytG3d0iY<6`4KG_ZJu+YdxwQG`*}r@cG*aU^_v<|!NR}kHA-$J};3sL)T6}hd*tD=Z+wzTxbNcqKtmFy(O;pYWB@o*u=rI^&VeW z5QWI39!`0-w`VvK!^d!vp_k~jz0lg?cbl|r`*!o8+XXi5W!o%})push?~1XUJL$HB zn|3bG)?wJ~E2Dp}*9vKwAY9d;`TF`^?Hsf{ncv(QxK`b0LOtuRB{g$hRTIHoJ{!wuwcMAG>RI7Xq;|owTci#`7kvahi**U3i zDsJ*-XKy90NI0gk^2R+9JmsEqAELG%l+9F6P9KdVp271J1!tM37O>fjw=Ylj zn+^{BCgwS?!Wfq?&p-(hxNL^oB}rRkWAD(Gz$BOY0@{rw}E%EZ_v3d`vcVM@t zu65{t8%gfY!oCOyvBq4yC z5O&MgELg#2*-e6Tdbs zrb^Slhq_oXPa!tnBCoC{TjXm^?7A;3Qj>;@g)^MK>|<2S_tdLrZp}O>aB;xv)}bot zba~ok_>Us4i{ow`&-E)C$mi-BO0!xuv}r{n^lUQ!KR84}2{=TmnVW6!(JlUCZ(;Gz z;0AA^wx7ygfYKw+d^V+CcTvCuC)Fo4e~>&m#Ce$!k?{bn0N_GDilp@00-_Tmj=O61R@iKbPf8lqY*e0r-<4p+RnvTPMF zz4x=R!S72F=a@|c4x2`ObON1n+k@B~km)tunPq;P`eaW1JDw&@ln%ZVMf~zbvAtr7 ztq{IOpxK42xVd1}3O7fB&;uZ>f2XvM0V^Q}(-)%H7ccHu##%fQWXBf8o)oq0IlL~i zw!ZGc=|hd{Z%HjqwJ6NDKk-Mo-x5+MDt z{vU-}IplO#4giexy%jwc=6o0gA*<9SgX~Yl$I4LfQ`s;keW&|$OV<}~&!mc>rE|}9 zb)A$tdR$PS+u#2Aha%o6ef)NbuF2a61pSb(y2-u5XD3_N)~67k)_(kCfEld4eOHU$ zcJH17CLl`tf)_SDz2S@e#P z`-xjX{gn`_sOxFCr^IvgTV>Cmi#^RS3GQ{e(ikzgIGCxauCh`7x+7EnWOQ`HSp37} zWT&Z;aZV_%9U_%l4e1zb_*qgxj%>eOVmSPX_)!_M=iODdA3j~nqYKif3og%Jzn^S!D4T*D|5)z^h&^nS|W*-7+B(y&hDvKC1ezl2E1POQT?Vj6E z)68WQXzN&?ub2l2x&Cd~n;EtVgW1>`)_MmMWymNh@OZ8|Rwe%ERl>PwrW?{N0_@)3 zy$f3BCP6egwB@k5S)dlrXWp-}0ZOZhXj3$c@s3BClj48aba}vq_RIlth*|E3!LRPF># zf*%+b7wNh+KI(aSP!eb(-Wxa`X~S@&i|O007#|0)j$cU>=>w{kh0H`5V=gNbO(0wL z^nS0vztD|$doKJ(yiM*H@BjN7s_(aXUXI6R^P2@APqdn@`6);{FR-mXaX= literal 46285 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 diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm index 20917c4ba5..4829fd921c 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm @@ -16,13 +16,12 @@ spread = 20 actions_types = list() -/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon() - ..() +/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_overlays() + . = ..() if(magazine) - cut_overlays() - add_overlay("foamsp-magazine") - else - cut_overlays() + . += "foamsp-magazine" + +/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" /////////RAYGUN MEMES///////// diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm index 8a1310d2f1..c2bf251de9 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm @@ -155,11 +155,15 @@ casing_ejector = 0 spread = 10 recoil = 0.05 + automatic_burst_overlay = FALSE + var/magtype = "flechettegun" -/obj/item/gun/ballistic/automatic/flechette/update_icon() - cut_overlays() +/obj/item/gun/ballistic/automatic/flechette/update_overlays() + . = ..() if(magazine) - add_overlay("flechettegun-magazine") + . += "[magtype]-magazine" + +/obj/item/gun/ballistic/automatic/flechette/update_icon_state() icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" ///unique variant/// @@ -185,12 +189,7 @@ w_class = WEIGHT_CLASS_SMALL spread = 15 recoil = 0.1 - -/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon() - cut_overlays() - if(magazine) - add_overlay("shreddergun-magazine") - icon_state = "[initial(icon_state)][chambered ? "" : "-e"]" + magtype = "shreddergun" /*///////////////////////////////////////////////////////////// //////////////////////// Zero's Meme ////////////////////////// @@ -218,17 +217,19 @@ burst_size = 4 //Shh. fire_delay = 1 var/body_color = "#3333aa" + automatic_burst_overlay = FALSE -/obj/item/gun/ballistic/automatic/AM4B/update_icon() - ..() +/obj/item/gun/ballistic/automatic/AM4B/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/gun/ballistic/automatic/AM4B/update_overlays() + . = ..() var/mutable_appearance/body_overlay = mutable_appearance('modular_citadel/icons/obj/guns/cit_guns.dmi', "AM4-Body") if(body_color) body_overlay.color = body_color - cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other - add_overlay(body_overlay) - if(ismob(loc)) - var/mob/M = loc - M.update_inv_hands() + . += body_overlay + /obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user) . = ..() if(!in_range(src, user)) //Basic checks to prevent abuse diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm index 3c0a47bfd7..c4cf8fc00f 100644 --- a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm +++ b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm @@ -55,8 +55,7 @@ /obj/item/gun/ballistic/automatic/spinfusor/attack_self(mob/living/user) return //caseless rounds are too glitchy to unload properly. Best to make it so that you cannot remove disks from the spinfusor -/obj/item/gun/ballistic/automatic/spinfusor/update_icon() - ..() +/obj/item/gun/ballistic/automatic/spinfusor/update_icon_state() icon_state = "spinfusor[magazine ? "-[get_ammo(1)]" : ""]" /obj/item/ammo_box/aspinfusor diff --git a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm index 49d48e0000..65609f5830 100644 --- a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm @@ -14,16 +14,16 @@ obj/item/gun/energy/e_gun/cx flight_y_offset = 10 var/body_color = "#252528" -obj/item/gun/energy/e_gun/cx/update_icon() - ..() +obj/item/gun/energy/e_gun/cx/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + +obj/item/gun/energy/e_gun/cx/update_overlays() + . = ..() var/mutable_appearance/body_overlay = mutable_appearance('modular_citadel/icons/obj/guns/cit_guns.dmi', "cxegun_body") if(body_color) body_overlay.color = body_color - add_overlay(body_overlay) - - if(ismob(loc)) - var/mob/M = loc - M.update_inv_hands() + . += body_overlay obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user) . = ..() diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index b864a9fe25..e81c7c18d3 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -52,13 +52,13 @@ if(has_shot) recharge_newshot(TRUE) -/obj/item/gun/energy/pumpaction/update_icon() //adds racked indicators +/obj/item/gun/energy/pumpaction/update_overlays() //adds racked indicators ..() var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index] if(chambered) - add_overlay("[icon_state]_rack_[shot.select_name]") + . += "[icon_state]_rack_[shot.select_name]" else - add_overlay("[icon_state]_rack_empty") + . += "[icon_state]_rack_empty" /obj/item/gun/energy/pumpaction/proc/pump(mob/M) //pumping proc. Checks if the gun is empty and plays a different sound if it is. var/obj/item/ammo_casing/energy/shot = ammo_type[current_firemode_index]