diff --git a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
index 4a610709b3b..a8bf4651385 100644
--- a/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
+++ b/_maps/map_files/RandomRuins/SpaceRuins/oldstation.dmm
@@ -521,7 +521,7 @@
"ka" = (/obj/structure/window/reinforced,/turf/simulated/floor/engine/vacuum,/area/ruin/space/ancientstation/atmo)
"kb" = (/obj/machinery/atmospherics/unary/tank/air{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ruin/space/ancientstation)
"kc" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ruin/space/ancientstation)
-"kd" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/item/crowbar,/obj/item/flashlight/flare,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
+"kd" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/obj/item/crowbar,/obj/item/flashlight/glowstick/random,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
"ke" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/deadcockroach,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
"kf" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/computer{desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; name = "Broken Computer"},/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation/powered)
"kg" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/dirt,/obj/item/reagent_containers/spray/weedspray,/obj/item/reagent_containers/spray/pestspray,/obj/item/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/ruin/space/ancientstation)
@@ -531,7 +531,7 @@
"kk" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating/airless,/area/ruin/space/ancientstation/atmo)
"kl" = (/turf/simulated/floor/plating/airless,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless/catwalk,/area/template_noop)
"km" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/solar_assembly,/obj/item/stack/sheet/glass{amount = 30},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ruin/space/ancientstation)
-"kn" = (/obj/structure/table,/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/item/crowbar,/obj/item/flashlight/flare,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
+"kn" = (/obj/structure/table,/obj/machinery/light/small{dir = 8},/obj/effect/decal/cleanable/dirt,/obj/item/crowbar,/obj/item/flashlight/glowstick/random,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
"ko" = (/obj/structure/table,/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/item/paper/fluff/ruins/oldstation,/turf/simulated/floor/plasteel,/area/ruin/space/ancientstation)
"kp" = (/obj/structure/closet/crate/engineering/electrical,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/item/solar_assembly,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ruin/space/ancientstation)
"kq" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 8},/obj/item/paper/fluff/ruins/oldstation/protohealth,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plasteel{icon_state = "white"},/area/ruin/space/ancientstation/proto)
diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm
index 1f0768ba9b0..f05ada14f99 100644
--- a/code/__DEFINES/misc.dm
+++ b/code/__DEFINES/misc.dm
@@ -128,6 +128,7 @@
#define LIGHT_COLOR_DARKGREEN "#50AB00"
#define LIGHT_COLOR_PURE_GREEN "#00FF00"
+#define LIGHT_COLOR_BLUE "#6496FA" //Cold, diluted blue. rgb(100, 150, 250)
#define LIGHT_COLOR_LIGHTBLUE "#0099FF"
#define LIGHT_COLOR_DARKBLUE "#315AB4"
#define LIGHT_COLOR_PURE_BLUE "#0000FF"
@@ -136,6 +137,8 @@
#define LIGHT_COLOR_PURPLE "#CD00CD"
#define LIGHT_COLOR_PINK "#FF33CC"
+#define LIGHT_COLOR_YELLOW "#E1E17D" //Dimmed yellow, leaning kaki. rgb(225, 225, 125)
+
#define LIGHT_COLOR_WHITE "#FFFFFF"
#define RESIZE_DEFAULT_SIZE 1
diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm
index 01d65eb5f93..b9d7d68f14e 100644
--- a/code/datums/spawners_menu.dm
+++ b/code/datums/spawners_menu.dm
@@ -38,7 +38,7 @@
to_chat(src,"FUCKKK")
if(..())
return
- to_chat(src,"FUCKKKssss")
+ to_chat(src, GLOB.mob_spawners.len)
var/spawner_ref = pick(GLOB.mob_spawners[href_list["name"]])
var/obj/effect/mob_spawn/MS = locate(spawner_ref) in GLOB.poi_list
if(!MS)
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index fb1956a56e9..967354605eb 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -9,11 +9,11 @@
slot_flags = SLOT_BELT
materials = list(MAT_METAL=50, MAT_GLASS=20)
actions_types = list(/datum/action/item_action/toggle_light)
- var/on = 0
+ var/on = FALSE
var/brightness_on = 4 //luminosity when on
/obj/item/flashlight/Initialize()
- ..()
+ . = ..()
if(on)
icon_state = "[initial(icon_state)]-on"
set_light(brightness_on)
@@ -198,9 +198,10 @@ obj/item/flashlight/lamp/bananalamp
// Usual checks
if(!fuel)
- to_chat(user, "It's out of fuel.")
+ to_chat(user, "[src] is out of fuel.")
return
if(on)
+ to_chat(user, "[src] is already on.")
return
. = ..()
@@ -260,10 +261,11 @@ obj/item/flashlight/lamp/bananalamp
/obj/item/flashlight/emp/process()
charge_tick++
- if(charge_tick < 10) return 0
+ if(charge_tick < 10)
+ return FALSE
charge_tick = 0
emp_cur_charges = min(emp_cur_charges+1, emp_max_charges)
- return 1
+ return TRUE
/obj/item/flashlight/emp/attack(mob/living/M as mob, mob/living/user as mob)
if(on && user.zone_sel.selecting == "eyes") // call original attack proc only if aiming at the eyes
@@ -299,4 +301,100 @@ obj/item/flashlight/lamp/bananalamp
anchored = TRUE
var/range = null
unacidable = TRUE
- burn_state = LAVA_PROOF
\ No newline at end of file
+ burn_state = LAVA_PROOF
+
+/obj/item/flashlight/glowstick
+ name = "green glowstick"
+ desc = "A military-grade glowstick."
+ w_class = WEIGHT_CLASS_SMALL
+ brightness_on = 4
+ color = LIGHT_COLOR_GREEN
+ icon_state = "glowstick"
+ item_state = "glowstick"
+ var/fuel = 0
+
+/obj/item/flashlight/glowstick/Initialize()
+ fuel = rand(1600, 2000)
+ light_color = color
+ . = ..()
+
+/obj/item/flashlight/glowstick/Destroy()
+ processing_objects.Remove(src)
+ . = ..()
+
+/obj/item/flashlight/glowstick/process()
+ fuel = max(fuel - 1, 0)
+ if(!fuel)
+ turn_off()
+ processing_objects.Remove(src)
+ update_icon()
+
+/obj/item/flashlight/glowstick/proc/turn_off()
+ on = FALSE
+ update_icon()
+
+/obj/item/flashlight/glowstick/update_icon()
+ item_state = "glowstick"
+ cut_overlays()
+ if(!fuel)
+ icon_state = "glowstick-empty"
+ cut_overlays()
+ update_brightness(0)
+ else if(on)
+ var/mutable_appearance/glowstick_overlay = mutable_appearance(icon, "glowstick-glow")
+ glowstick_overlay.color = color
+ add_overlay(glowstick_overlay)
+ item_state = "glowstick-on"
+ update_brightness(brightness_on)
+ else
+ icon_state = "glowstick"
+ cut_overlays()
+
+/obj/item/flashlight/glowstick/attack_self(mob/user)
+ if(!fuel)
+ to_chat(user, "[src] is spent.")
+ return
+ if(on)
+ to_chat(user, "[src] is already lit.")
+ return
+
+ . = ..()
+ user.visible_message("[user] cracks and shakes [src].", "You crack and shake [src], turning it on!")
+ activate()
+
+/obj/item/flashlight/glowstick/proc/activate()
+ if(!on)
+ on = TRUE
+ processing_objects.Add(src)
+ update_icon()
+
+/obj/item/flashlight/glowstick/red
+ name = "red glowstick"
+ color = LIGHT_COLOR_RED
+
+/obj/item/flashlight/glowstick/blue
+ name = "blue glowstick"
+ color = LIGHT_COLOR_BLUE
+
+/obj/item/flashlight/glowstick/orange
+ name = "orange glowstick"
+ color = LIGHT_COLOR_ORANGE
+
+/obj/item/flashlight/glowstick/yellow
+ name = "yellow glowstick"
+ color = LIGHT_COLOR_YELLOW
+
+/obj/item/flashlight/glowstick/pink
+ name = "pink glowstick"
+ color = LIGHT_COLOR_PINK
+
+/obj/item/flashlight/glowstick/random
+ name = "random colored glowstick"
+ icon_state = "random_glowstick"
+ color = null
+
+/obj/item/flashlight/glowstick/random/Initialize()
+ ..()
+ var/T = pick(typesof(/obj/item/flashlight/glowstick) - /obj/item/flashlight/glowstick/random)
+ new T(loc)
+ return INITIALIZE_HINT_QDEL
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index bf788f62bc5..8934666fddb 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ