diff --git a/code/modules/antagonists/clockcult/clock_structures/stargazer.dm b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
new file mode 100644
index 0000000000..4f04fcb82b
--- /dev/null
+++ b/code/modules/antagonists/clockcult/clock_structures/stargazer.dm
@@ -0,0 +1,70 @@
+#define STARGAZER_RANGE 3 //How many tiles the stargazer can see out to
+#define STARGAZER_POWER 20 //How many watts will be produced per second when the stargazer sees starlight
+
+//Stargazer: A very fragile but cheap generator that creates power from starlight.
+/obj/structure/destructible/clockwork/stargazer
+ name = "stargazer"
+ desc = "A large lantern-shaped machine made of thin brass. It looks fragile."
+ clockwork_desc = "A lantern-shaped generator that produces power when near starlight."
+ icon_state = "stargazer"
+ unanchored_icon = "stargazer_unwrenched"
+ max_integrity = 40
+ construction_value = 5
+ layer = WALL_OBJ_LAYER
+ break_message = "The stargazer's fragile body shatters into pieces!"
+ resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ light_color = "#DAAA18"
+ var/star_light_star_bright = FALSE //If this stargazer can see starlight
+
+/obj/structure/destructible/clockwork/stargazer/Initialize()
+ . = ..()
+ START_PROCESSING(SSprocessing, src)
+
+/obj/structure/destructible/clockwork/stargazer/Destroy()
+ STOP_PROCESSING(SSprocessing, src)
+ . = ..()
+
+/obj/structure/destructible/clockwork/stargazer/examine(mob/user)
+ ..()
+ if(is_servant_of_ratvar(user))
+ to_chat(user, "Generates [DisplayPower(STARGAZER_POWER)] per second while viewing starlight within [STARGAZER_RANGE] tiles.")
+ if(star_light_star_bright)
+ to_chat(user, "[is_servant_of_ratvar(user) ? "It can see starlight!" : "It's shining brilliantly!"]")
+
+/obj/structure/destructible/clockwork/stargazer/process()
+ star_light_star_bright = check_starlight()
+ if(star_light_star_bright)
+ adjust_clockwork_power(STARGAZER_POWER)
+
+/obj/structure/destructible/clockwork/stargazer/update_anchored(mob/living/user, damage)
+ . = ..()
+ star_light_star_bright = check_starlight()
+
+/obj/structure/destructible/clockwork/stargazer/proc/check_starlight()
+ var/old_status = star_light_star_bright
+ var/has_starlight
+ if(!anchored)
+ has_starlight = FALSE
+ else
+ for(var/turf/T in view(3, src))
+ if(isspaceturf(T))
+ has_starlight = TRUE
+ break
+ if(has_starlight && anchored)
+ var/area/A = get_area(src)
+ if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
+ has_starlight = FALSE
+ if(old_status != has_starlight)
+ if(has_starlight)
+ visible_message("[src] hums and shines brilliantly!")
+ playsound(src, 'sound/machines/clockcult/stargazer_activate.ogg', 50, TRUE)
+ add_overlay("stargazer_light")
+ set_light(1.5, 5)
+ else
+ if(anchored) //We lost visibility somehow
+ visible_message("[src] flickers, and falls dark.")
+ else
+ visible_message("[src] whooshes quietly as it slides into a less bulky form.")
+ cut_overlays()
+ set_light(0)
+ return has_starlight