diff --git a/code/modules/antagonists/blob/blob/blobs/shield.dm b/code/modules/antagonists/blob/blob/blobs/shield.dm
index 33e7e4392f..da165adef2 100644
--- a/code/modules/antagonists/blob/blob/blobs/shield.dm
+++ b/code/modules/antagonists/blob/blob/blobs/shield.dm
@@ -3,6 +3,7 @@
icon = 'icons/mob/blob.dmi'
icon_state = "blob_shield"
desc = "A solid wall of slightly twitching tendrils."
+ var/damaged_desc = "A wall of twitching tendrils."
max_integrity = 150
brute_resist = 0.25
explosion_block = 3
@@ -21,10 +22,10 @@
/obj/structure/blob/shield/update_icon()
..()
- if(obj_integrity <= 70)
- icon_state = "blob_shield_damaged"
- name = "weakened strong blob"
- desc = "A wall of twitching tendrils."
+ if(obj_integrity < max_integrity * 0.5)
+ icon_state = "[initial(icon_state)]_damaged"
+ name = "weakened [initial(name)]"
+ desc = "[damaged_desc]"
atmosblock = FALSE
if(!weakened)
armor = armor.setRating("melee" = 15, "bullet" = 15, "laser" = 5, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
@@ -37,4 +38,27 @@
if(weakened)
armor = armor.setRating("melee" = 25, "bullet" = 25, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90)
weakened = FALSE
- air_update_turf(1)
\ No newline at end of file
+ air_update_turf(1)
+
+/obj/structure/blob/shield/reflective
+ name = "reflective blob"
+ desc = "A solid wall of slightly twitching tendrils with a reflective glow."
+ damaged_desc = "A wall of twitching tendrils with a reflective glow."
+ icon_state = "blob_glow"
+ flags_1 = CHECK_RICOCHET_1
+ point_return = 8
+ max_integrity = 50
+ brute_resist = 1
+ explosion_block = 2
+
+/obj/structure/blob/shield/reflective/handle_ricochet(obj/item/projectile/P)
+ var/turf/p_turf = get_turf(P)
+ var/face_direction = get_dir(src, p_turf)
+ var/face_angle = dir2angle(face_direction)
+ var/incidence_s = GET_ANGLE_OF_INCIDENCE(face_angle, (P.Angle + 180))
+ if(abs(incidence_s) > 90 && abs(incidence_s) < 270)
+ return FALSE
+ var/new_angle_s = SIMPLIFY_DEGREES(face_angle + incidence_s)
+ P.setAngle(new_angle_s)
+ visible_message("[P] reflects off [src]!")
+ return TRUE
\ No newline at end of file
diff --git a/code/modules/antagonists/blob/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm
index e49d186362..73c0776ad7 100644
--- a/code/modules/antagonists/blob/blob/powers.dm
+++ b/code/modules/antagonists/blob/blob/powers.dm
@@ -113,12 +113,22 @@
/mob/camera/blob/verb/create_shield_power()
set category = "Blob"
- set name = "Create Shield Blob (15)"
- set desc = "Create a shield blob, which will block fire and is hard to kill."
+ set name = "Create/Upgrade Shield Blob (15)"
+ set desc = "Create a shield blob, which will block fire and is hard to kill. Using this on an existing shield blob turns it into a reflective blob, capable of reflecting most projectiles but making it much weaker than usual to brute attacks."
create_shield()
/mob/camera/blob/proc/create_shield(turf/T)
- createSpecial(15, /obj/structure/blob/shield, 0, 0, T)
+ var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T
+ if(S)
+ if(!can_buy(15))
+ return
+ if(S.obj_integrity < S.max_integrity * 0.5)
+ to_chat(src, "This shield blob is too damaged to be modified properly!")
+ return
+ to_chat(src, "You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced intregrity.")
+ S.change_to(/obj/structure/blob/shield/reflective, src)
+ else
+ createSpecial(15, /obj/structure/blob/shield, 0, 0, T)
/mob/camera/blob/verb/create_resource()
set category = "Blob"
@@ -359,7 +369,7 @@
to_chat(src, "You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.")
to_chat(src, "Normal Blobs will expand your reach and can be upgraded into special blobs that perform certain functions.")
to_chat(src, "You can upgrade normal blobs into the following types of blob:")
- to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires.")
+ to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires. Upgrading them again will result in a reflective blob, capable of reflecting most projectiles at the cost of the strong blob's extra health.")
to_chat(src, "Resource Blobs are blobs which produce more resources for you, build as many of these as possible to consume the station. This type of blob must be placed near node blobs or your core to work.")
to_chat(src, "Factory Blobs are blobs that spawn blob spores which will attack nearby enemies. This type of blob must be placed near node blobs or your core to work.")
to_chat(src, "Blobbernauts can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores.")