diff --git a/code/game/machinery/biogenerator.dm b/code/game/machinery/biogenerator.dm
index 8da62c0c313..85c808afaa3 100644
--- a/code/game/machinery/biogenerator.dm
+++ b/code/game/machinery/biogenerator.dm
@@ -336,6 +336,12 @@
cost = 500
result = /obj/item/clothing/suit/mino
+/datum/biogen_recipe/misc/rvest
+ name = "Reticulated Vest"
+ id = "rvest"
+ cost = 500
+ result = /obj/item/clothing/suit/reticulatedvest
+
/datum/biogen_recipe/flooring
category="Flooring"
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 29cb8dc5d0b..75e19f4db0e 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -1108,3 +1108,18 @@ var/list/tag_suits_list = list()
body_parts_covered = FULL_TORSO
icon_state = "syndiefootball"
flags = FPRINT
+
+/obj/item/clothing/suit/reticulatedvest
+ name = "reticulated vest"
+ desc = "A vest that makes use of reticulation to increase surface area and help disperse emitter particles. It was later discovered this also makes it effective against blobs organisms."
+ icon_state = "reticulated2"
+ item_state = "labgreen"
+ blood_overlay_type = "armor"
+ allowed = list(/obj/item/weapon/tank,
+ /obj/item/weapon/gun/energy/laser/liberator)
+ starting_materials = list(MAT_WOOD = 1*CC_PER_SHEET_MISC)
+ w_type = RECYK_WOOD
+ var/hits = 2
+
+/obj/item/clothing/suit/reticulatedvest/update_icon()
+ icon_state = "reticulated[hits]"
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index e4d9fab359d..b9d4b751be3 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -563,6 +563,16 @@ emp_act
/mob/living/carbon/human/blob_act()
if(flags & INVULNERABLE)
return
+ var/obj/item/clothing/suit/reticulatedvest/RV = wear_suit
+ if(istype(RV) && RV.hits>0) //will fail if not wearing a suit or wearing one not of this type
+ RV.hits--
+ if(RV.hits)
+ to_chat(src, "Your reticulated vest groans as it resists the blob!")
+ else
+ to_chat(src, "Your reticulated vest rips apart as it resists the blob one last time!")
+ RV.update_icon()
+ update_inv_wear_suit()
+ return
if(cloneloss < 120)
playsound(loc, 'sound/effects/blobattack.ogg',50,1)
if(isDead(src))
@@ -580,4 +590,7 @@ emp_act
if(species && species.anatomy_flags & ACID4WATER)
return WATER
else
- return PACID
\ No newline at end of file
+ return PACID
+
+/mob/living/carbon/human/beam_defense(var/obj/effect/beam/B)
+ return is_wearing_item(/obj/item/clothing/suit/reticulatedvest) ? 0.4 : 1
\ No newline at end of file
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index e21e7fa1542..b85b749e105 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -140,7 +140,7 @@
var/lastcheck=last_beamchecks["\ref[B]"]
// Figure out how much damage to deal.
// Formula: (deciseconds_since_connect/10 deciseconds)*B.get_damage()
- var/damage = ((world.time - lastcheck)/10) * B.get_damage()
+ var/damage = ((world.time - lastcheck)/10) * B.get_damage() * beam_defense(B)
// Actually apply damage
apply_damage(damage, B.damage_type, B.def_zone)
@@ -148,6 +148,10 @@
// Update check time.
last_beamchecks["\ref[B]"]=world.time
+//Return multiplier for damage
+/mob/living/proc/beam_defense(var/obj/effect/beam/B)
+ return 1
+
/mob/living/verb/succumb()
set hidden = 1
succumb_proc(0)
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index c25271627de..c279defcedd 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index cc54cf8b138..11881bd5b00 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ