From c137b2f270fa844cdf05243cecc6ce8c3b5001b0 Mon Sep 17 00:00:00 2001 From: ShizCalev Date: Tue, 11 Oct 2022 21:39:59 -0400 Subject: [PATCH] Fixes shields inhands (#70395) Fixes #70377 Stobe shield has been broken for.... hell I don't even know how long lmao cl ShizCalev fix: Fixed some missing shield inhand icons. fix: The strobe shield's inhand icon now plays the flashing animation when triggered again. fix: The strobe shield will no longer blind the person holding it when it deflects a blow. fix: The light from the strobe shield's flash no longer appears in your held inventory slot. fix: Fixed the east facing left-handed strobe shield sprite being misaligned by two pixels. /cl --- code/datums/components/crafting/recipes.dm | 2 +- code/game/objects/items/shields.dm | 74 +++++++++++++----- .../antagonists/clown_ops/clown_weapons.dm | 1 + code/modules/antagonists/cult/cult_items.dm | 1 + code/modules/assembly/flash.dm | 3 +- .../inhands/equipment/shields_lefthand.dmi | Bin 10259 -> 10352 bytes 6 files changed, 60 insertions(+), 21 deletions(-) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index f7cc24f2cef..a0efc74ae73 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -97,7 +97,7 @@ /datum/crafting_recipe/strobeshield/New() ..() - blacklist |= subtypesof(/obj/item/shield/riot/) + blacklist |= subtypesof(/obj/item/shield/riot) /datum/crafting_recipe/molotov name = "Molotov" diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index d0b400c4138..44d81c5aa58 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -12,6 +12,7 @@ name = "riot shield" desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder." icon_state = "riot" + inhand_icon_state = "riot" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' slot_flags = ITEM_SLOT_BACK @@ -124,27 +125,61 @@ desc = "A shield with a built in, high intensity light capable of blinding and disorienting suspects. Takes regular handheld flashes as bulbs." icon_state = "flashshield" inhand_icon_state = "flashshield" - var/obj/item/assembly/flash/handheld/embedded_flash + var/obj/item/assembly/flash/handheld/embedded_flash = /obj/item/assembly/flash/handheld /obj/item/shield/riot/flash/Initialize(mapload) . = ..() - embedded_flash = new(src) - AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_HANDS) + AddElement(/datum/element/update_icon_updates_onmob) + if(embedded_flash) + embedded_flash = new(src) + embedded_flash.set_light_flags(embedded_flash.light_flags | LIGHT_ATTACHED) + update_appearance(UPDATE_ICON) -/obj/item/shield/riot/flash/attack(mob/living/M, mob/user) - . = embedded_flash.attack(M, user) - update_appearance() +/obj/item/shield/riot/flash/Entered(atom/movable/arrived, atom/old_loc, list/atom/old_locs) + if(istype(arrived, /obj/item/assembly/flash/handheld)) + embedded_flash = arrived + embedded_flash.set_light_flags(embedded_flash.light_flags | LIGHT_ATTACHED) + update_appearance(UPDATE_ICON) + return ..() + +/obj/item/shield/riot/flash/Exited(atom/movable/gone, direction) + if(gone == embedded_flash) + embedded_flash.set_light_flags(embedded_flash.light_flags & ~LIGHT_ATTACHED) + embedded_flash = null + update_appearance(UPDATE_ICON) + return ..() + +/obj/item/shield/riot/flash/vv_edit_var(vname, vval) + . = ..() + if(vname == NAMEOF(src, embedded_flash)) + update_appearance(UPDATE_ICON) + +/obj/item/shield/riot/flash/Destroy(force) + QDEL_NULL(embedded_flash) + return ..() + +/obj/item/shield/riot/flash/attack(mob/living/target_mob, mob/user) + flash_away(user, target_mob) /obj/item/shield/riot/flash/attack_self(mob/living/carbon/user) - . = embedded_flash.attack_self(user) - update_appearance() + flash_away(user) /obj/item/shield/riot/flash/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) . = ..() - if (. && !embedded_flash.burnt_out) - embedded_flash.activate() - update_appearance() + if(.) + flash_away(owner) +///Handles calls for the actual flash object + plays the flashing animations. +/obj/item/shield/riot/flash/proc/flash_away(mob/owner, mob/target, animation_only) + if(QDELETED(embedded_flash) || (embedded_flash.burnt_out && !animation_only)) + return + var/flick = animation_only ? TRUE : (target ? embedded_flash.attack(target, owner) : embedded_flash.AOE_flash(user = owner)) + if(!flick && !embedded_flash.burnt_out) + return + flick("flashshield_flash", src) + inhand_icon_state = "flashshield_flash" + owner?.update_held_items() + addtimer(CALLBACK(src, /atom.proc/update_appearance), 0.5 SECONDS, (TIMER_UNIQUE|TIMER_OVERRIDE)) //.5 second delay so the inhands sprite finishes its anim since inhands don't support flick(). /obj/item/shield/riot/flash/attackby(obj/item/W, mob/user) if(istype(W, /obj/item/assembly/flash/handheld)) @@ -155,23 +190,24 @@ else to_chat(user, span_notice("You begin to replace the bulb...")) if(do_after(user, 20, target = user)) - if(flash.burnt_out || !flash || QDELETED(flash)) + if(QDELETED(flash) || flash.burnt_out) return playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) qdel(embedded_flash) - embedded_flash = flash flash.forceMove(src) - update_appearance() return - ..() + return ..() /obj/item/shield/riot/flash/emp_act(severity) . = ..() + if(QDELETED(embedded_flash) || embedded_flash.burnt_out) + return embedded_flash.emp_act(severity) - update_appearance() + if(embedded_flash.burnt_out) // a little hacky but no good way to check otherwise. + flash_away((ismob(loc) ? loc : null), animation_only = TRUE) /obj/item/shield/riot/flash/update_icon_state() - if(!embedded_flash || embedded_flash.burnt_out) + if(QDELETED(embedded_flash) || embedded_flash.burnt_out) icon_state = "riot" inhand_icon_state = "riot" else @@ -182,12 +218,13 @@ /obj/item/shield/riot/flash/examine(mob/user) . = ..() if (embedded_flash?.burnt_out) - . += span_info("The mounted bulb has burnt out. You can try replacing it with a new one.") + . += span_info("The mounted bulb has burnt out. You can try replacing it with a new flash.") /obj/item/shield/energy name = "energy combat shield" desc = "A shield that reflects almost all energy projectiles, but is useless against physical attacks. It can be retracted, expanded, and stored anywhere." icon_state = "eshield" + inhand_icon_state = "eshield" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' w_class = WEIGHT_CLASS_TINY @@ -241,6 +278,7 @@ name = "telescopic shield" desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." icon_state = "teleriot" + inhand_icon_state = "teleriot" worn_icon_state = "teleriot" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' diff --git a/code/modules/antagonists/clown_ops/clown_weapons.dm b/code/modules/antagonists/clown_ops/clown_weapons.dm index 27ebf75aeb8..229e350baf8 100644 --- a/code/modules/antagonists/clown_ops/clown_weapons.dm +++ b/code/modules/antagonists/clown_ops/clown_weapons.dm @@ -133,6 +133,7 @@ name = "bananium energy shield" desc = "A shield that stops most melee attacks, protects user from almost all energy projectiles, and can be thrown to slip opponents." icon_state = "bananaeshield" + inhand_icon_state = "bananaeshield" throw_speed = 1 force = 0 throwforce = 0 diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index a21860f1941..4587c3c8241 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -848,6 +848,7 @@ Striking a noncultist, however, will tear their flesh."} name = "mirror shield" desc = "An infamous shield used by Nar'Sien sects to confuse and disorient their enemies. Its edges are weighted for use as a throwing weapon - capable of disabling multiple foes with preternatural accuracy." icon_state = "mirror_shield" // eshield1 for expanded + inhand_icon_state = "mirror_shield" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' force = 5 diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 1b590a6ba37..20a42234c2f 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -268,9 +268,8 @@ . = ..() if(. & EMP_PROTECT_SELF) return - if(!try_use_flash()) + if(!AOE_flash()) return - AOE_flash() burn_out() /obj/item/assembly/flash/activate()//AOE flash on signal received diff --git a/icons/mob/inhands/equipment/shields_lefthand.dmi b/icons/mob/inhands/equipment/shields_lefthand.dmi index 5edcaef02612c3d83be7048f05c28cda25f09d6d..47d6be3f8c767a28dcb951c050725cf8d062b714 100644 GIT binary patch literal 10352 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 literal 10259 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