diff --git a/code/__DEFINES/clockcult.dm b/code/__DEFINES/clockcult.dm
index 070b92acc7..47b00e67f7 100644
--- a/code/__DEFINES/clockcult.dm
+++ b/code/__DEFINES/clockcult.dm
@@ -28,9 +28,9 @@ GLOBAL_LIST_EMPTY(all_scripture) //a list containing scripture instances; not us
#define SCRIPTURE_APPLICATION "Application"
//Various costs related to power.
-#define MAX_CLOCKWORK_POWER 50000 //The max power in W that the cult can stockpile
-#define SCRIPT_UNLOCK_THRESHOLD 25000 //Scripts will unlock if the total power reaches this amount
-#define APPLICATION_UNLOCK_THRESHOLD 40000 //Applications will unlock if the total powre reaches this amount
+#define MAX_CLOCKWORK_POWER 80000 //The max power in W that the cult can stockpile
+#define SCRIPT_UNLOCK_THRESHOLD 35000 //Scripts will unlock if the total power reaches this amount
+#define APPLICATION_UNLOCK_THRESHOLD 50000 //Applications will unlock if the total powre reaches this amount
#define ABSCOND_ABDUCTION_COST 95
diff --git a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
index d7ae0c7fc6..ec712f2eec 100644
--- a/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
+++ b/code/modules/antagonists/clockcult/clock_items/clockwork_slab.dm
@@ -44,12 +44,13 @@
/obj/item/clockwork/slab/cyborg //three scriptures, plus a spear and fabricator
clockwork_desc = "A divine link to the Celestial Derelict, allowing for limited recital of scripture."
- quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard)
+ quickbound = list(/datum/clockwork_scripture/ranged_ability/judicial_marker, /datum/clockwork_scripture/ranged_ability/linked_vanguard, \
+ /datum/clockwork_scripture/create_object/stargazer)
maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more
actions_types = list()
-/obj/item/clockwork/slab/cyborg/engineer //two scriptures, plus a fabricator
- quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission)
+/obj/item/clockwork/slab/cyborg/engineer //three scriptures, plus a fabricator
+ quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transmission, /datum/clockwork_scripture/create_object/stargazer)
/obj/item/clockwork/slab/cyborg/medical //five scriptures, plus a spear
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, \
@@ -61,12 +62,12 @@
/obj/item/clockwork/slab/cyborg/peacekeeper //two scriptures, plus a spear
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/ranged_ability/hateful_manacles, /datum/clockwork_scripture/ranged_ability/judicial_marker)
-/obj/item/clockwork/slab/cyborg/janitor //five scriptures, plus a fabricator
+/obj/item/clockwork/slab/cyborg/janitor //six scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/sigil_of_transgression, \
- /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
+ /datum/clockwork_scripture/create_object/stargazer, /datum/clockwork_scripture/create_object/ocular_warden, /datum/clockwork_scripture/create_object/mania_motor)
-/obj/item/clockwork/slab/cyborg/service //five scriptures, plus xray vision
- quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant, \
+/obj/item/clockwork/slab/cyborg/service //six scriptures, plus xray vision
+ quickbound = list(/datum/clockwork_scripture/abscond, /datum/clockwork_scripture/create_object/replicant,/datum/clockwork_scripture/create_object/stargazer, \
/datum/clockwork_scripture/spatial_gateway, /datum/clockwork_scripture/create_object/clockwork_obelisk)
/obj/item/clockwork/slab/cyborg/miner //two scriptures, plus a spear and xray vision
diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
index 6415d9f91a..552a747651 100644
--- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
+++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_drivers.dm
@@ -2,6 +2,32 @@
// DRIVERS //
/////////////
+//Stargazer: Creates a stargazer, a cheap power generator that utilizes starlight.
+/datum/clockwork_scripture/create_object/stargazer
+ descname = "Generates Power From Starlight"
+ name = "Stargazer"
+ desc = "Forms a weak structure that generates power every second while within three tiles of starlight."
+ invocations = list("Capture their inferior light for us!")
+ channel_time = 50
+ power_cost = 200
+ object_path = /obj/structure/destructible/clockwork/stargazer
+ creator_message = "You form a stargazer, which will generate power near starlight."
+ observer_message = "A large lantern-shaped machine forms!"
+ usage_tip = "For obvious reasons, make sure to place this near a window or somewhere else that can see space!"
+ tier = SCRIPTURE_DRIVER
+ one_per_tile = TRUE
+ primary_component = HIEROPHANT_ANSIBLE
+ sort_priority = 1
+ quickbind = TRUE
+ quickbind_desc = "Creates a stargazer, which generates power when near starlight."
+
+/datum/clockwork_scripture/create_object/stargazer/check_special_requirements()
+ var/area/A = get_area(invoker)
+ if(A.outdoors || A.map_name == "Space" || !A.blob_allowed)
+ to_chat(invoker, "Stargazers can't be built off-station.")
+ return
+ return ..()
+
//Integration Cog: Creates an integration cog that can be inserted into APCs to passively siphon power.
/datum/clockwork_scripture/create_object/integration_cog
@@ -18,7 +44,7 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = HIEROPHANT_ANSIBLE
- sort_priority = 1
+ sort_priority = 2
important = TRUE
quickbind = TRUE
quickbind_desc = "Creates an integration cog, which can be used to siphon power from an open APC."
@@ -39,7 +65,7 @@
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
- sort_priority = 2
+ sort_priority = 3
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Transgression, which will briefly stun and slow the next non-Servant to cross it."
@@ -59,7 +85,7 @@
tier = SCRIPTURE_DRIVER
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
- sort_priority = 3
+ sort_priority = 4
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Submission, which will convert non-Servants that remain on it."
@@ -76,7 +102,7 @@
usage_tip = "The light can be used from up to two tiles away. Damage taken will GREATLY REDUCE the stun's duration."
tier = SCRIPTURE_DRIVER
primary_component = BELLIGERENT_EYE
- sort_priority = 4
+ sort_priority = 5
slab_overlay = "volt"
ranged_type = /obj/effect/proc_holder/slab/kindle
ranged_message = "You charge the clockwork slab with divine energy.\n\
@@ -100,7 +126,7 @@
usage_tip = "The manacles are about as strong as zipties, and break when removed."
tier = SCRIPTURE_DRIVER
primary_component = BELLIGERENT_EYE
- sort_priority = 5
+ sort_priority = 6
ranged_type = /obj/effect/proc_holder/slab/hateful_manacles
slab_overlay = "hateful_manacles"
ranged_message = "You charge the clockwork slab with divine energy.\n\
@@ -124,7 +150,7 @@
usage_tip = "You cannot reactivate Vanguard while still shielded by it."
tier = SCRIPTURE_DRIVER
primary_component = VANGUARD_COGWHEEL
- sort_priority = 6
+ sort_priority = 7
quickbind = TRUE
quickbind_desc = "Allows you to temporarily have quickly regenerating stamina and absorb stuns. All stuns absorbed will affect you when disabled."
@@ -156,7 +182,7 @@
usage_tip = "The Compromise is very fast to invoke, and will remove holy water from the target Servant."
tier = SCRIPTURE_DRIVER
primary_component = VANGUARD_COGWHEEL
- sort_priority = 7
+ sort_priority = 8
quickbind = TRUE
quickbind_desc = "Allows you to convert a Servant's brute, burn, and oxygen damage to half toxin damage.
Click your slab to disable."
slab_overlay = "compromise"
@@ -180,7 +206,7 @@
usage_tip = "This can't be used while on Reebe, for obvious reasons."
tier = SCRIPTURE_DRIVER
primary_component = GEIS_CAPACITOR
- sort_priority = 8
+ sort_priority = 9
important = TRUE
quickbind = TRUE
quickbind_desc = "Returns you to Reebe."
@@ -238,7 +264,7 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = GEIS_CAPACITOR
- sort_priority = 9
+ sort_priority = 10
important = TRUE
quickbind = TRUE
quickbind_desc = "Creates a new Clockwork Slab."
@@ -259,6 +285,6 @@
tier = SCRIPTURE_DRIVER
space_allowed = TRUE
primary_component = GEIS_CAPACITOR
- sort_priority = 10
+ sort_priority = 11
quickbind = TRUE
quickbind_desc = "Creates a pair of Wraith Spectacles, which grant true sight but cause gradual vision loss."
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..57f83c55aa
--- /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 7 //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
diff --git a/tgstation.dme b/tgstation.dme
index 12a91dfaa9..fe0f881eed 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1226,6 +1226,7 @@
#include "code\modules\antagonists\clockcult\clock_scriptures\scripture_scripts.dm"
#include "code\modules\antagonists\clockcult\clock_structures\_trap_object.dm"
#include "code\modules\antagonists\clockcult\clock_structures\ark_of_the_clockwork_justicar.dm"
+#include "code\modules\antagonists\clockcult\clock_structures\stargazer.dm"
#include "code\modules\antagonists\clockcult\clock_structures\clockwork_obelisk.dm"
#include "code\modules\antagonists\clockcult\clock_structures\eminence_spire.dm"
#include "code\modules\antagonists\clockcult\clock_structures\heralds_beacon.dm"