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