Files
CHOMPStation2/code/game/objects/items/stacks/marker_beacons.dm
CHOMPStation2StaffMirrorBot f7de0bb70b [MIRROR] Start of TG Click Code Port (#12071)
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
2025-12-06 03:18:32 -05:00

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()