diff --git a/code/game/objects/items/stacks/marker_beacons.dm b/code/game/objects/items/stacks/marker_beacons.dm
index 5c7ed3aa040..f5de239b9a9 100644
--- a/code/game/objects/items/stacks/marker_beacons.dm
+++ b/code/game/objects/items/stacks/marker_beacons.dm
@@ -86,23 +86,31 @@ var/list/marker_beacon_colors = list(
light_power = 0.8
var/remove_speed = 15
var/picked_color
+ var/perma = FALSE
+ var/mapped_in_color
/obj/structure/marker_beacon/New(newloc, set_color)
. = ..()
- picked_color = set_color
+ if(set_color)
+ picked_color = set_color
+ else if(mapped_in_color)
+ picked_color = mapped_in_color
update_icon()
/obj/structure/marker_beacon/examine(mob/user)
. = ..()
- . += "Alt-click to select a color. Current color is [picked_color]."
+ if(!perma)
+ . += "Alt-click to select a color. Current color is [picked_color]."
/obj/structure/marker_beacon/update_icon()
- while(!picked_color || !marker_beacon_colors[picked_color])
+ if(!picked_color || !marker_beacon_colors[picked_color])
picked_color = pick(marker_beacon_colors)
icon_state = "[initial(icon_state)][lowertext(picked_color)]-on"
set_light(light_range, light_power, marker_beacon_colors[picked_color])
/obj/structure/marker_beacon/attack_hand(mob/living/user)
+ if(perma)
+ return
to_chat(user, "You start picking [src] up...")
if(do_after(user, remove_speed, target = src))
var/obj/item/stack/marker_beacon/M = new(loc)
@@ -114,6 +122,8 @@ var/list/marker_beacon_colors = list(
qdel(src) //otherwise delete us
/obj/structure/marker_beacon/attackby(obj/item/I, mob/user, params)
+ if(perma)
+ return
if(istype(I, /obj/item/stack/marker_beacon))
var/obj/item/stack/marker_beacon/M = I
to_chat(user, "You start picking [src] up...")
@@ -126,6 +136,8 @@ var/list/marker_beacon_colors = list(
/obj/structure/marker_beacon/AltClick(mob/living/user)
..()
+ if(perma)
+ return
if(user.incapacitated() || !istype(user))
to_chat(user, "You can't do that right now!")
return