diff --git a/code/__DEFINES/_flags/shields.dm b/code/__DEFINES/_flags/shields.dm index f6de4226e8..72c2f996e2 100644 --- a/code/__DEFINES/_flags/shields.dm +++ b/code/__DEFINES/_flags/shields.dm @@ -1,18 +1,35 @@ /// Transparent, let beams pass #define SHIELD_TRANSPARENT (1<<0) + +/// Flammable, takes more damage from fire +#define SHIELD_ENERGY_WEAK (1<<1) +/// Fragile, takes more damage from brute +#define SHIELD_KINETIC_WEAK (1<<2) +/// Strong against kinetic, weak against energy +#define SHIELD_KINETIC_STRONG (1<<3) +/// Strong against energy, weak against kinetic +#define SHIELD_ENERGY_STRONG (1<<4) +/// Disabler and other stamina based energy weapons boost the damage done to the sheld +#define SHIELD_DISABLER_DISRUPTED (1<<5) + +/// Doesn't block ranged attacks whatsoever +#define SHIELD_NO_RANGED (1<<6) +/// Doesn't block melee attacks whatsoever +#define SHIELD_NO_MELEE (1<<7) + /// Can shield bash -#define SHIELD_CAN_BASH (1<<1) +#define SHIELD_CAN_BASH (1<<8) /// Shield bash knockdown on wall hit -#define SHIELD_BASH_WALL_KNOCKDOWN (1<<2) +#define SHIELD_BASH_WALL_KNOCKDOWN (1<<9) /// Shield bash always knockdown -#define SHIELD_BASH_ALWAYS_KNOCKDOWN (1<<3) +#define SHIELD_BASH_ALWAYS_KNOCKDOWN (1<<10) /// Shield bash disarm on wall hit -#define SHIELD_BASH_WALL_DISARM (1<<4) +#define SHIELD_BASH_WALL_DISARM (1<<11) /// Shield bash always disarm -#define SHIELD_BASH_ALWAYS_DISARM (1<<5) +#define SHIELD_BASH_ALWAYS_DISARM (1<<12) /// You can shieldbash target someone on the ground for ground slam -#define SHIELD_BASH_GROUND_SLAM (1<<6) +#define SHIELD_BASH_GROUND_SLAM (1<<13) /// Shield bashing someone on the ground will disarm -#define SHIELD_BASH_GROUND_SLAM_DISARM (1<<7) +#define SHIELD_BASH_GROUND_SLAM_DISARM (1<<14) #define SHIELD_FLAGS_DEFAULT (SHIELD_CAN_BASH | SHIELD_BASH_WALL_KNOCKDOWN | SHIELD_BASH_WALL_DISARM | SHIELD_BASH_GROUND_SLAM) diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index 3fc275d436..b9cbfb7e35 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -259,6 +259,13 @@ GLOBAL_LIST_INIT(bitfields, list( ), "shield_flags" = list( "SHIELD_TRANSPARENT" = SHIELD_TRANSPARENT, + "SHIELD_ENERGY_WEAK" = SHIELD_ENERGY_WEAK, + "SHIELD_KINETIC_WEAK" = SHIELD_KINETIC_WEAK, + "SHIELD_KINETIC_STRONG" = SHIELD_KINETIC_STRONG, + "SHIELD_ENERGY_STRONG" = SHIELD_ENERGY_STRONG, + "SHIELD_DISABLER_DISRUPTED" = SHIELD_DISABLER_DISRUPTED, + "SHIELD_NO_RANGED" = SHIELD_NO_RANGED, + "SHIELD_NO_MELEE" = SHIELD_NO_MELEE, "SHIELD_CAN_BASH" = SHIELD_CAN_BASH, "SHIELD_BASH_WALL_KNOCKDOWN" = SHIELD_BASH_WALL_KNOCKDOWN, "SHIELD_BASH_ALWAYS_KNOCKDOWN" = SHIELD_BASH_ALWAYS_KNOCKDOWN, diff --git a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm index 0135cab77f..95361c3da2 100644 --- a/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm +++ b/code/datums/components/crafting/recipes/recipes_weapon_and_ammo.dm @@ -16,7 +16,7 @@ /datum/crafting_recipe/strobeshield name = "Strobe Shield" - result = /obj/item/assembly/flash/shield + result = /obj/item/shield/riot/flash reqs = list(/obj/item/wallframe/flasher = 1, /obj/item/assembly/flash/handheld = 1, /obj/item/shield/riot = 1) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 5c3e4fd612..84faf27242 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -174,6 +174,10 @@ var/atom/movable/AM = object if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS)) return BLOCK_NONE + if(CHECK_BITFIELD(shield_flags, SHIELD_NO_RANGED) && (attack_type & ATTACK_TYPE_PROJECTILE)) + return BLOCK_NONE + if(CHECK_BITFIELD(shield_flags, SHIELD_NO_MELEE) && (attack_type & ATTACK_TYPE_MELEE)) + return BLOCK_NONE if(attack_type & ATTACK_TYPE_THROWN) final_block_chance += 30 if(attack_type & ATTACK_TYPE_TACKLE) @@ -238,30 +242,75 @@ new /obj/item/shard((get_turf(src))) /obj/item/shield/riot/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + var/final_damage = damage + + if(attack_type & ATTACK_TYPE_MELEE) + var/obj/hittingthing = object + if(hittingthing.damtype == BURN) + if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_WEAK)) + final_damage *= 2 + else if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_STRONG)) + final_damage *= 0.5 + + if(hittingthing.damtype == BRUTE) + if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_WEAK)) + final_damage *= 2 + else if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_STRONG)) + final_damage *= 0.5 + + if(hittingthing.damtype == STAMINA || hittingthing.damtype == TOX || hittingthing.damtype == CLONE || hittingthing.damtype == BRAIN || hittingthing.damtype == OXY) + final_damage = 0 + + if(attack_type & ATTACK_TYPE_PROJECTILE) + var/obj/item/projectile/shootingthing = object + if(is_energy_reflectable_projectile(shootingthing)) + if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_WEAK)) + final_damage *= 2 + else if(CHECK_BITFIELD(shield_flags, SHIELD_ENERGY_STRONG)) + final_damage *= 0.5 + + if(!is_energy_reflectable_projectile(object)) + if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_WEAK)) + final_damage *= 2 + else if(CHECK_BITFIELD(shield_flags, SHIELD_KINETIC_STRONG)) + final_damage *= 0.5 + + if(shootingthing.damage_type == STAMINA) + if(CHECK_BITFIELD(shield_flags, SHIELD_DISABLER_DISRUPTED)) + final_damage *= 3 //disablers melt these kinds of shields. Really meant more for holoshields. + else + final_damage = 0 + + if(shootingthing.damage_type == TOX || shootingthing.damage_type == CLONE || shootingthing.damage_type == BRAIN || shootingthing.damage_type == OXY) + final_damage = 0 + if(can_shatter && (obj_integrity <= damage)) var/turf/T = get_turf(owner) T.visible_message("[attack_text] destroys [src]!") shatter(owner) qdel(src) return FALSE - take_damage(damage) + take_damage(final_damage) return ..() -/obj/item/shield/riot/laser_proof - name = "laser resistant shield" - desc = "A far more frail shield made of dark glass meant to block lasers but suffers from being being weak to ballistic projectiles." +/obj/item/shield/riot/energy_proof + name = "energy resistant shield" + desc = "An ablative shield designed to absorb and disperse energy attacks. This comes at significant cost to its ability to withstand ballistics and kinetics, breaking apart easily." armor = list("melee" = 30, "bullet" = -10, "laser" = 80, "energy" = 80, "bomb" = -40, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) icon_state = "riot_laser" item_state = "riot_laser" lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - shield_flags = SHIELD_FLAGS_DEFAULT + shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_ENERGY_STRONG | SHIELD_KINETIC_WEAK max_integrity = 300 -/obj/item/shield/riot/bullet_proof - name = "bullet resistant shield" - desc = "A far more frail shield made of resistant plastics and kevlar meant to block ballistics." +/obj/item/shield/riot/kinetic_proof + name = "kinetic resistant shield" + desc = "A polymer and ceramic shield designed to absorb ballistic projectiles and kinetic force. It doesn't do very well into energy attacks, especially from weapons that inflict burns." armor = list("melee" = 30, "bullet" = 80, "laser" = 0, "energy" = 0, "bomb" = -40, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) + icon_state = "riot_bullet" + item_state = "riot_bullet" + shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_KINETIC_STRONG | SHIELD_ENERGY_WEAK max_integrity = 300 /obj/item/shield/riot/roman @@ -277,8 +326,8 @@ /obj/item/shield/riot/roman/fake desc = "Bears an inscription on the inside: \"Romanes venio domus\". It appears to be a bit flimsy." - block_chance = 0 armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + shield_flags = SHIELD_ENERGY_WEAK | SHIELD_KINETIC_WEAK | SHIELD_NO_RANGED max_integrity = 40 /obj/item/shield/riot/roman/shatter(mob/living/carbon/human/owner) @@ -295,14 +344,80 @@ custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 10) resistance_flags = FLAMMABLE repair_material = /obj/item/stack/sheet/mineral/wood - block_chance = 30 - shield_flags = SHIELD_FLAGS_DEFAULT + shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_ENERGY_WEAK max_integrity = 150 /obj/item/shield/riot/buckler/shatter(mob/living/carbon/human/owner) playsound(owner, 'sound/effects/bang.ogg', 50) new /obj/item/stack/sheet/mineral/wood(get_turf(src)) +/obj/item/shield/riot/flash + name = "strobe shield" + 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" + item_state = "flashshield" + var/obj/item/assembly/flash/handheld/embedded_flash + +/obj/item/shield/riot/flash/Initialize() + . = ..() + embedded_flash = new(src) + +/obj/item/shield/riot/flash/ComponentInitialize() + . = .. () + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/shield/riot/flash/attack(mob/living/M, mob/user) + . = embedded_flash.attack(M, user) + update_icon() + +/obj/item/shield/riot/flash/attack_self(mob/living/carbon/user) + . = embedded_flash.attack_self(user) + update_icon() + +/obj/item/shield/riot/flash/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + . = ..() + if (. && !embedded_flash.crit_fail) + embedded_flash.activate() + update_icon() + + +/obj/item/shield/riot/flash/attackby(obj/item/W, mob/user) + if(istype(W, /obj/item/assembly/flash/handheld)) + var/obj/item/assembly/flash/handheld/flash = W + if(flash.crit_fail) + to_chat(user, "No sense replacing it with a broken bulb!") + return + else + to_chat(user, "You begin to replace the bulb...") + if(do_after(user, 20, target = user)) + if(flash.crit_fail || !flash || QDELETED(flash)) + return + playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) + qdel(embedded_flash) + embedded_flash = flash + flash.forceMove(src) + update_icon() + return + ..() + +/obj/item/shield/riot/flash/emp_act(severity) + . = ..() + embedded_flash.emp_act(severity) + update_icon() + +/obj/item/shield/riot/flash/update_icon_state() + if(!embedded_flash || embedded_flash.crit_fail) + icon_state = "riot" + item_state = "riot" + else + icon_state = "flashshield" + item_state = "flashshield" + +/obj/item/shield/riot/flash/examine(mob/user) + . = ..() + if (embedded_flash?.crit_fail) + . += "The mounted bulb has burnt out. You can try replacing it with a new one." + /obj/item/shield/riot/tele name = "telescopic shield" desc = "An advanced riot shield made of lightweight materials that collapses for easy storage." @@ -348,7 +463,7 @@ /obj/item/shield/makeshift name = "metal shield" - desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather making it unwieldy." + desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather, making it unwieldy." armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80) lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' @@ -362,33 +477,34 @@ /obj/item/shield/riot/tower name = "tower shield" - desc = "A massive shield that can block a lot of attacks, can take a lot of abuse before braking." + desc = "An immense tower shield. Designed to ensure maximum protection to the user, at the expense of mobility." armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user item_state = "metal" icon_state = "metal" force = 16 slowdown = 2 - throwforce = 15 //Massive pice of metal + throwforce = 15 //Massive piece of metal + max_integrity = 600 w_class = WEIGHT_CLASS_HUGE - item_flags = SLOWS_WHILE_IN_HAND + item_flags = SLOWS_WHILE_IN_HAND | ITEM_CAN_BLOCK shield_flags = SHIELD_FLAGS_DEFAULT /obj/item/shield/riot/tower/swat name = "swat shield" - desc = "A massive, heavy shield that can block a lot of attacks, can take a lot of abuse before breaking." max_integrity = 250 /obj/item/shield/riot/implant - name = "telescoping shield implant" - desc = "A compact, arm-mounted telescopic shield. While nigh-indestructible when powered by a host user, it will eventually overload from damage. Recharges while inside its implant." - item_state = "metal" - icon_state = "metal" + name = "hardlight shield implant" + desc = "A hardlight plane of force projected from the implant. While it is capable of withstanding immense amounts of abuse, it will eventually overload from sustained impacts, especially against energy attacks. Recharges while retracted." + item_state = "holoshield" + icon_state = "holoshield" slowdown = 1 shield_flags = SHIELD_FLAGS_DEFAULT max_integrity = 100 obj_integrity = 100 can_shatter = FALSE - item_flags = SLOWS_WHILE_IN_HAND | ITEM_CAN_BLOCK + item_flags = ITEM_CAN_BLOCK + shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_KINETIC_STRONG | SHIELD_DISABLER_DISRUPTED var/recharge_timerid var/recharge_delay = 15 SECONDS @@ -400,7 +516,7 @@ if(obj_integrity == 0) if(ismob(loc)) var/mob/living/L = loc - playsound(src, 'sound/effects/glassbr3.ogg', 100) + playsound(src, "sparks", 100, TRUE) L.visible_message("[src] overloads from the damage sustained!") L.dropItemToGround(src) //implant component catch hook will grab it. diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm index fb7b4f8a94..1b6979300f 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_shield.dm @@ -8,7 +8,7 @@ desc = "A resilient shield made out of brass.. It feels warm to the touch." var/clockwork_desc = "A powerful shield of ratvarian making. It absorbs blocked attacks to charge devastating bashes." armor = list("melee" = 80, "bullet" = 70, "laser" = -10, "energy" = -20, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - shield_flags = SHIELD_FLAGS_DEFAULT + shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_KINETIC_STRONG | SHIELD_ENERGY_WEAK max_integrity = 300 //High integrity, extremely strong against melee / bullets, but still quite easy to destroy with lasers and energy repair_material = /obj/item/stack/tile/brass var/dam_absorbed = 0 diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 07a9f499f8..5eb1f77fd7 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -262,70 +262,6 @@ /obj/item/assembly/flash/armimplant/proc/cooldown() overheat = FALSE -/obj/item/assembly/flash/shield - name = "strobe shield" - desc = "A shield with a built in, high intensity light capable of blinding and disorienting suspects. Takes regular handheld flashes as bulbs." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "flashshield" - item_state = "flashshield" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - slot_flags = ITEM_SLOT_BACK - force = 10 - throwforce = 5 - throw_speed = 2 - throw_range = 3 - w_class = WEIGHT_CLASS_BULKY - custom_materials = list(/datum/material/glass=7500, /datum/material/iron=1000) - attack_verb = list("shoved", "bashed") - block_chance = 50 - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - -/obj/item/assembly/flash/shield/flash_recharge(interval=10) - if(times_used >= 4) - burn_out() - return FALSE - return TRUE - -/obj/item/assembly/flash/shield/attackby(obj/item/W, mob/user) - if(istype(W, /obj/item/assembly/flash/handheld)) - var/obj/item/assembly/flash/handheld/flash = W - if(flash.crit_fail) - to_chat(user, "No sense replacing it with a broken bulb.") - return - else - to_chat(user, "You begin to replace the bulb.") - if(do_after(user, 20, target = src)) - if(flash.crit_fail || !flash || QDELETED(flash)) - return - crit_fail = FALSE - times_used = 0 - playsound(src, 'sound/items/deconstruct.ogg', 50, TRUE) - update_icon() - flash.crit_fail = TRUE - flash.update_icon() - return - ..() - -/obj/item/assembly/flash/shield/update_icon(flash = FALSE) - icon_state = "flashshield" - item_state = "flashshield" - - if(crit_fail) - icon_state = "riot" - item_state = "riot" - else if(flash) - icon_state = "flashshield_flash" - item_state = "flashshield_flash" - addtimer(CALLBACK(src, /atom/.proc/update_icon), 5) - - if(holder) - holder.update_icon() - -/obj/item/assembly/flash/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - activate() - return ..() - //ported from tg - check to make sure it can't appear where it's not supposed to. /obj/item/assembly/flash/hypnotic desc = "A modified flash device, programmed to emit a sequence of subliminal flashes that can send a vulnerable target into a hypnotic trance." diff --git a/code/modules/cargo/bounties/security.dm b/code/modules/cargo/bounties/security.dm index 6ed86cd4b7..5ddf456573 100644 --- a/code/modules/cargo/bounties/security.dm +++ b/code/modules/cargo/bounties/security.dm @@ -23,7 +23,7 @@ name = "Strobe Shield" description = "One of our Emergency Response Agents thinks there's vampires in a local station. Send him something to help with his fear of the dark and protect him, too." reward = 3000 - wanted_types = list(/obj/item/assembly/flash/shield) + wanted_types = list(/obj/item/shield/riot/flash) /datum/bounty/item/security/sechuds name = "Sec HUDs" diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index dc2703c146..c973ceed26 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -16,7 +16,7 @@ /datum/export/weapon/riot_shield cost = 70 unit_name = "flash shield" - export_types = list(/obj/item/assembly/flash/shield) + export_types = list(/obj/item/shield/riot/flash) /datum/export/weapon/tele_shield cost = 100 @@ -138,7 +138,7 @@ export_types = list(/obj/item/gun/energy/xray) /datum/export/weapon/ioncarbine - cost = 200 + cost = 200 unit_name = "ion carbine" export_types = list(/obj/item/gun/energy/ionrifle/carbine) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 11dd29a416..f7ba9e7e63 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -457,23 +457,23 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/laser_shield - name = "Laser Resistant Riot Shield" - desc = "An advanced riot shield made of darker glasses to prevent laser fire from passing through." +/datum/design/energy_shield + name = "Energy Resistant Shield" + desc = "An ablative shield designed to stop energy-based attacks dead in their tracks, but shatter easily against kinetic blows." id = "laser_shield" build_type = PROTOLATHE materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/plastic = 4000, /datum/material/silver = 800, /datum/material/titanium = 600, /datum/material/plasma = 5000) - build_path = /obj/item/shield/riot/laser_proof + build_path = /obj/item/shield/riot/energy_proof category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/bullet_shield - name = "Bullet Resistant Riot Shield" - desc = "An advanced riot shield made bullet resistant plastics and heavy metals to protect against projectile harm." +/datum/design/kinetic_shield + name = "Kinetic Resistant Shield" + desc = "An advanced polymer shield designed to stop kinetic-based attacks with ease, but splinter apart against energy-based attacks." id = "bullet_shield" build_type = PROTOLATHE materials = list(/datum/material/iron = 4000, /datum/material/glass = 1000, /datum/material/silver = 2000, /datum/material/titanium = 1200, /datum/material/plastic = 2500) - build_path = /obj/item/shield/riot/bullet_proof + build_path = /obj/item/shield/riot/kinetic_proof category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/icons/mob/inhands/equipment/shields_lefthand.dmi b/icons/mob/inhands/equipment/shields_lefthand.dmi index 850bbaa043..26658559d4 100644 Binary files a/icons/mob/inhands/equipment/shields_lefthand.dmi and b/icons/mob/inhands/equipment/shields_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/shields_righthand.dmi b/icons/mob/inhands/equipment/shields_righthand.dmi index d4db35b9b2..2bf98e4aa4 100644 Binary files a/icons/mob/inhands/equipment/shields_righthand.dmi and b/icons/mob/inhands/equipment/shields_righthand.dmi differ diff --git a/icons/obj/shields.dmi b/icons/obj/shields.dmi index c8b1110e1a..23033c505a 100644 Binary files a/icons/obj/shields.dmi and b/icons/obj/shields.dmi differ