diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm
index 953eb1d02c..1405551c84 100644
--- a/code/modules/mining/lavaland/necropolis_chests.dm
+++ b/code/modules/mining/lavaland/necropolis_chests.dm
@@ -266,26 +266,29 @@
/obj/item/wisp_lantern/attack_self(mob/user)
if(!wisp)
to_chat(user, "The wisp has gone missing!")
+ icon_state = "lantern"
return
+
if(wisp.loc == src)
to_chat(user, "You release the wisp. It begins to bob around your head.")
- user.sight |= SEE_MOBS
icon_state = "lantern"
wisp.orbit(user, 20)
+ user.update_sight()
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Freed")
else
to_chat(user, "You return the wisp to the lantern.")
+ var/mob/target
if(wisp.orbiting)
- var/atom/A = wisp.orbiting.orbiting
- if(isliving(A))
- var/mob/living/M = A
- M.sight &= ~SEE_MOBS
- to_chat(M, "Your vision returns to normal.")
-
+ target = wisp.orbiting.orbiting
wisp.stop_orbit()
wisp.forceMove(src)
+
+ if (istype(target))
+ target.update_sight()
+ to_chat(target, "Your vision returns to normal.")
+
icon_state = "lantern-blue"
SSblackbox.record_feedback("tally", "wisp_lantern", 1, "Returned")
@@ -308,6 +311,8 @@
icon_state = "orb"
light_range = 7
layer = ABOVE_ALL_MOB_LAYER
+ var/sight_flags = SEE_MOBS
+ var/lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE
//Red/Blue Cubes
/obj/item/warp_cube
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 97823c9c71..931eb68f13 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -842,6 +842,14 @@
return
/mob/proc/update_sight()
+ for(var/O in orbiters)
+ var/datum/orbit/orbit = O
+ var/obj/effect/wisp/wisp = orbit.orbiter
+ if (istype(wisp))
+ sight |= wisp.sight_flags
+ if(!isnull(wisp.lighting_alpha))
+ lighting_alpha = min(lighting_alpha, wisp.lighting_alpha)
+
sync_lighting_plane_alpha()
/mob/proc/sync_lighting_plane_alpha()