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