mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-09 07:57:00 +00:00
159 lines
5.1 KiB
Plaintext
159 lines
5.1 KiB
Plaintext
/*****************Marker Beacons**************************/
|
|
var/list/marker_beacon_colors = list(
|
|
"Burgundy" = LIGHT_COLOR_FLARE,
|
|
"Bronze" = LIGHT_COLOR_ORANGE,
|
|
"Yellow" = LIGHT_COLOR_YELLOW,
|
|
"Lime" = LIGHT_COLOR_SLIME_LAMP,
|
|
"Olive" = LIGHT_COLOR_GREEN,
|
|
"Jade" = LIGHT_COLOR_BLUEGREEN,
|
|
"Teal" = LIGHT_COLOR_LIGHT_CYAN,
|
|
"Cerulean" = LIGHT_COLOR_BLUE,
|
|
"Indigo" = LIGHT_COLOR_DARK_BLUE,
|
|
"Purple" = LIGHT_COLOR_PURPLE,
|
|
"Violet" = LIGHT_COLOR_LAVENDER,
|
|
"Fuchsia" = LIGHT_COLOR_PINK
|
|
)
|
|
|
|
/obj/item/stack/marker_beacon
|
|
name = "marker beacons"
|
|
singular_name = "marker beacon"
|
|
desc = "Prismatic path illumination devices. Used by explorers and miners to mark paths and warn of danger."
|
|
description_info = "Use inhand to drop one marker beacon. You can pick them up again with an empty hand or \
|
|
hitting them with this marker stack. Alt-click to select a specific color."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "markerrandom"
|
|
max_amount = 100
|
|
no_variants = TRUE
|
|
w_class = ITEMSIZE_SMALL
|
|
var/icon_base = "marker"
|
|
var/picked_color = "random"
|
|
|
|
/obj/item/stack/marker_beacon/ten
|
|
amount = 10
|
|
|
|
/obj/item/stack/marker_beacon/thirty
|
|
amount = 30
|
|
|
|
/obj/item/stack/marker_beacon/hundred
|
|
amount = 100
|
|
|
|
/obj/item/stack/marker_beacon/Initialize(mapload)
|
|
. = ..()
|
|
update_icon()
|
|
|
|
/obj/item/stack/marker_beacon/examine(mob/user)
|
|
. = ..()
|
|
. += span_notice("Use in-hand to place a [singular_name].")
|
|
. += span_notice("Alt-click to select a color. Current color is [picked_color].")
|
|
|
|
/obj/item/stack/marker_beacon/update_icon()
|
|
icon_state = "[icon_base][lowertext(picked_color)]"
|
|
|
|
/obj/item/stack/marker_beacon/attack_self(mob/user)
|
|
if(!isturf(user.loc))
|
|
to_chat(user, span_warning("You need more space to place a [singular_name] here."))
|
|
return
|
|
if(locate(/obj/structure/marker_beacon) in user.loc)
|
|
to_chat(user, span_warning("There is already a [singular_name] here."))
|
|
return
|
|
if(use(1))
|
|
to_chat(user, span_notice("You activate and anchor [amount ? "a":"the"] [singular_name] in place."))
|
|
playsound(src, 'sound/machines/click.ogg', 50, 1)
|
|
var/obj/structure/marker_beacon/M = new(user.loc, picked_color)
|
|
transfer_fingerprints_to(M)
|
|
|
|
/obj/item/stack/marker_beacon/click_alt(mob/living/user)
|
|
if(user.incapacitated() || !istype(user))
|
|
to_chat(user, span_warning("You can't do that right now!"))
|
|
return
|
|
if(!in_range(src, user))
|
|
return
|
|
|
|
var/options = marker_beacon_colors.Copy()
|
|
options += list("Random" = FALSE) //not a true color, will pick a random color
|
|
var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", options)
|
|
if(user.incapacitated() || !istype(user) || !in_range(src, user))
|
|
return
|
|
if(input_color)
|
|
picked_color = input_color
|
|
update_icon()
|
|
|
|
/obj/structure/marker_beacon
|
|
name = "marker beacon"
|
|
desc = "A prismatic path illumination device. It is anchored in place and glowing steadily."
|
|
icon = 'icons/obj/lighting.dmi'
|
|
icon_state = "markerrandom"
|
|
// layer = BELOW_OPEN_DOOR_LAYER
|
|
anchored = TRUE
|
|
light_range = 2
|
|
light_power = 0.8
|
|
var/icon_base = "marker"
|
|
var/remove_speed = 15
|
|
var/picked_color
|
|
var/perma = FALSE
|
|
var/mapped_in_color
|
|
|
|
/obj/structure/marker_beacon/Initialize(mapload, 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)
|
|
. = ..()
|
|
if(!perma)
|
|
. += span_notice("Alt-click to select a color. Current color is [picked_color].")
|
|
|
|
/obj/structure/marker_beacon/update_icon()
|
|
if(!picked_color || !marker_beacon_colors[picked_color])
|
|
picked_color = pick(marker_beacon_colors)
|
|
icon_state = "[icon_base][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, span_notice("You start picking [src] up..."))
|
|
if(do_after(user, remove_speed, target = src))
|
|
var/obj/item/stack/marker_beacon/M = new(loc)
|
|
M.picked_color = picked_color
|
|
M.update_icon()
|
|
transfer_fingerprints_to(M)
|
|
if(user.put_in_hands(M, TRUE)) //delete the beacon if it fails
|
|
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
|
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, span_notice("You start picking [src] up..."))
|
|
if(do_after(user, remove_speed, target = src) && M.get_amount() + 1 <= M.max_amount)
|
|
M.add(1)
|
|
playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
|
|
qdel(src)
|
|
else
|
|
return ..()
|
|
|
|
/obj/structure/marker_beacon/click_alt(mob/living/user)
|
|
..()
|
|
if(perma)
|
|
return
|
|
if(user.incapacitated() || !istype(user))
|
|
to_chat(user, span_warning("You can't do that right now!"))
|
|
return
|
|
if(!in_range(src, user))
|
|
return
|
|
|
|
var/options = marker_beacon_colors.Copy()
|
|
options += list("Random" = FALSE) //not a true color, will pick a random color
|
|
var/input_color = tgui_input_list(user, "Choose a color.", "Beacon Color", options)
|
|
if(user.incapacitated() || !istype(user) || !in_range(src, user))
|
|
return
|
|
if(input_color)
|
|
picked_color = input_color
|
|
update_icon()
|