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"