diff --git a/code/_onclick/hud/clockwork_marauder.dm b/code/_onclick/hud/clockwork_marauder.dm new file mode 100644 index 0000000000..09f85db574 --- /dev/null +++ b/code/_onclick/hud/clockwork_marauder.dm @@ -0,0 +1,45 @@ +/datum/hud/marauder + var/obj/screen/hosthealth + var/obj/screen/blockchance + var/obj/screen/counterchance + +/datum/hud/marauder/New(mob/living/simple_animal/hostile/clockwork/marauder/guardian/owner) + ..() + var/obj/screen/using + + healths = new /obj/screen/healths/clock() + infodisplay += healths + + hosthealth = new /obj/screen/healths/clock() + hosthealth.screen_loc = ui_internal + infodisplay += hosthealth + + using = new /obj/screen/marauder/emerge() + using.screen_loc = ui_zonesel + static_inventory += using + +/datum/hud/marauder/Destroy() + blockchance = null + counterchance = null + hosthealth = null + return ..() + +/mob/living/simple_animal/hostile/clockwork/marauder/guardian/create_mob_hud() + if(client && !hud_used) + hud_used = new /datum/hud/marauder(src, ui_style2icon(client.prefs.UI_style)) + +/obj/screen/marauder + icon = 'icons/mob/clockwork_mobs.dmi' + +/obj/screen/marauder/emerge + icon_state = "clockguard_emerge" + name = "Emerge/Return" + desc = "Emerge or Return." + +/obj/screen/marauder/emerge/Click() + if(istype(usr, /mob/living/simple_animal/hostile/clockwork/marauder/guardian)) + var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/G = usr + if(G.is_in_host()) + G.try_emerge() + else + G.return_to_host() diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 0112553ac5..fc8a3d61db 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -125,7 +125,7 @@ #undef MARAUDER_SLOWDOWN_PERCENTAGE #undef MARAUDER_SHIELD_REGEN_TIME -/*//Clockwork guardian: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture. +//Clockwork guardian: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture. /mob/living/simple_animal/hostile/clockwork/marauder/guardian name = "clockwork guardian" desc = "A stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield and stands ready by its master." @@ -136,10 +136,12 @@ obj_damage = 40 melee_damage_lower = 12 melee_damage_upper = 12 - attacktext = "slashes" + attack_verb_continuous = "slashes" + attack_verb_simple = "slash" attack_sound = 'sound/weapons/bladeslice.ogg' weather_immunities = list("lava") movement_type = FLYING + AIStatus = AI_OFF //this has to be manually set so that the guardian doesn't start bashing the host, how annoying -_- loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) var/true_name = "Meme Master 69" //Required to call forth the guardian var/global/list/possible_true_names = list("Servant", "Warden", "Serf", "Page", "Usher", "Knave", "Vassal", "Escort") @@ -152,7 +154,7 @@ light_power = 1.1 playstyle_string = "You are a clockwork guardian, a living extension of Sevtug's will. As a guardian, you are somewhat slow, but may block attacks, \ and have a chance to also counter blocked melee attacks for extra damage, in addition to being immune to extreme temperatures and pressures. \ - Your primary goal is to serve the creature that you are now a part of. You can use :b to communicate silently with your master, \ + Your primary goal is to serve the creature that you are now a part of, as well as The Clockwork Justiciar, Ratvar. You can use The Hierophant Network to communicate silently with your master and their allies, \ but can only exit if your master calls your true name or if they are exceptionally damaged. \ \n\n\ Stay near your host to protect and heal them; being too far from your host will rapidly cause you massive damage. Recall to your host if you are too weak and believe you cannot continue \ @@ -162,7 +164,7 @@ . = ..() true_name = pick(possible_true_names) -/mob/living/simple_animal/hostile/clockwork/marauder/guardianLife() +/mob/living/simple_animal/hostile/clockwork/marauder/guardian/BiologicalLife(seconds, times_fired) ..() if(is_in_host()) if(!is_servant_of_ratvar(host)) @@ -251,9 +253,9 @@ if(!new_host) return FALSE host = new_host - var/datum/action/innate/summon_marauder/guardian/SM = new() - SM.linked_guardian = src - SM.Grant(host) + var/datum/action/innate/summon_guardian/SG = new() + SG.linked_guardian = src + SG.Grant(host) var/datum/action/innate/linked_minds/LM = new() LM.linked_guardian = src LM.Grant(host) @@ -261,8 +263,8 @@ /mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/unbind_from_host() if(host) - for(var/datum/action/innate/summon_marauder/guardian/SM in host.actions) - qdel(SM) + for(var/datum/action/innate/summon_guardian/SG in host.actions) + qdel(SG) for(var/datum/action/innate/linked_minds/LM in host.actions) qdel(LM) host = null @@ -294,8 +296,8 @@ /mob/living/simple_animal/hostile/clockwork/marauder/guardian/update_health_hud() if(hud_used && hud_used.healths) - if(istype(hud_used, /datum/hud/guardian)) - var/datum/hud/guardian/M = hud_used + if(istype(hud_used, /datum/hud/marauder)) + var/datum/hud/marauder/G = hud_used var/resulthealth if(host) if(iscarbon(host)) @@ -304,7 +306,7 @@ resulthealth = "[round((host.health / host.maxHealth) * 100, 0.5)]%" else resulthealth = "NONE" - M.hosthealth.maptext = "
HOST
[resulthealth]
" + G.hosthealth.maptext = "
HOST
[resulthealth]
" hud_used.healths.maptext = "
[round((health / maxHealth) * 100, 0.5)]%" /mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/update_stats() @@ -312,7 +314,7 @@ speed = 0 melee_damage_lower = 20 melee_damage_upper = 20 - attacktext = "devastates" + attack_verb_continuous = "devastates" else var/healthpercent = (health/maxHealth) * 100 switch(healthpercent) @@ -320,32 +322,32 @@ speed = 0 melee_damage_lower = 16 melee_damage_upper = 16 - attacktext = "viciously slashes" + attack_verb_continuous = "viciously slashes" if(70 to 40) speed = initial(speed) melee_damage_lower = initial(melee_damage_lower) melee_damage_upper = initial(melee_damage_upper) - attacktext = initial(attacktext) + attack_verb_continuous = initial(attack_verb_continuous) if(40 to 30) //Damage decrease, but not speed speed = initial(speed) melee_damage_lower = 10 melee_damage_upper = 10 - attacktext = "lightly slashes" + attack_verb_continuous = "lightly slashes" if(30 to 20) //Speed decrease speed = 2 melee_damage_lower = 8 melee_damage_upper = 8 - attacktext = "lightly slashes" + attack_verb_continuous = "lightly slashes" if(20 to 10) //Massive speed decrease and weak melee attacks speed = 3 melee_damage_lower = 6 melee_damage_upper = 6 - attacktext = "weakly slashes" + attack_verb_continuous = "weakly slashes" if(10 to 0) //We are super weak and going to die speed = 4 melee_damage_lower = 4 melee_damage_upper = 4 - attacktext = "taps" + attack_verb_continuous = "taps" //ATTACKING, BLOCKING, and COUNTERING @@ -404,10 +406,10 @@ if(target && Adjacent(target)) if(prob(counterchance)) counterchance = initial(counterchance) - var/previousattacktext = attacktext - attacktext = "counters" + var/previousattack_verb_continuous = attack_verb_continuous + attack_verb_continuous = "counters" UnarmedAttack(target) - attacktext = previousattacktext + attack_verb_continuous = previousattack_verb_continuous else counterchance = min(counterchance + initial(counterchance), 100) else @@ -417,13 +419,13 @@ counterchance = 90 //COMMUNICATION and EMERGENCE - +/* /mob/living/simple_animal/hostile/clockwork/marauder/guardian/handle_inherent_channels(message, message_mode) if(host && (is_in_host() || message_mode == MODE_BINARY)) guardian_comms(message) return TRUE return ..() - +*/ /mob/living/simple_animal/hostile/clockwork/marauder/guardian/proc/guardian_comms(message) var/name_part = "[src] ([true_name])" message = "\"[message]\"" //Processed output @@ -494,7 +496,7 @@ //HOST ACTIONS //Summon guardian action: Calls forth or recalls your guardian -/datum/action/innate/summon_marauder +/datum/action/innate/summon_guardian name = "Force Guardian to Emerge/Recall" desc = "Allows you to force your clockwork guardian to emerge or recall as required." button_icon_state = "clockwork_marauder" @@ -502,10 +504,10 @@ check_flags = AB_CHECK_CONSCIOUS buttontooltipstyle = "clockcult" var/mob/living/simple_animal/hostile/clockwork/marauder/guardian/linked_guardian - var/static/list/defend_phrases = list("Defend me", "Come forth", "Assist me", "Protect me", "Give aid", "Help me") - var/static/list/return_phrases = list("Return", "Return to me", "Your job is done", "You have served", "Come back", "Retreat") + var/list/defend_phrases = list("Defend me", "Come forth", "Assist me", "Protect me", "Give aid", "Help me") + var/list/return_phrases = list("Return", "Return to me", "Your job is done", "You have served", "Come back", "Retreat") -/datum/action/innate/summon_marauder/IsAvailable() +/datum/action/innate/summon_guardian/IsAvailable() if(!linked_guardian) return FALSE if(isliving(owner)) @@ -554,4 +556,3 @@ var/link = FOLLOW_LINK(M, src) to_chat(M, "[link] [name_part] (to [linked_guardian] ([linked_guardian.true_name])): [message]") return TRUE -*/ \ No newline at end of file diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index d796502e68..18ef51f4a3 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -23,7 +23,7 @@ quickbind = TRUE quickbind_desc = "Creates a Sigil of Transmission, which can drain and will store power for clockwork structures." -//Prolonging Prism: Creates a prism that will delay the shuttle at a power cost +/*//Prolonging Prism: Creates a prism that will delay the shuttle at a power cost /datum/clockwork_scripture/create_object/prolonging_prism descname = "Powered Structure, Delay Emergency Shuttles" name = "Prolonging Prism" @@ -54,7 +54,7 @@ to_chat(invoker, "\"You must be on the station to construct one of these, champion.\"") return FALSE return ..() - +*/ //Mania Motor: Creates a malevolent transmitter that will broadcast the whispers of Sevtug into the minds of nearby nonservants, causing a variety of mental effects at a power cost. /datum/clockwork_scripture/create_object/mania_motor @@ -99,31 +99,9 @@ quickbind = TRUE quickbind_desc = "Creates a Clockwork Obelisk, which can send messages or open Spatial Gateways with power." -/*//Tinkerer's Cache: Creates a tinkerer's cache, allowing global component storage. -/datum/clockwork_scripture/create_object/tinkerers_cache - descname = "Necessary Structure, Shares Components" - name = "Tinkerer's Cache" - desc = "Forms a cache that can store an infinite amount of components. All caches are linked and will provide components to slabs. \ - Striking a cache with a slab will transfer that slab's components to the global cache." - invocations = list("Constructing...", "...a cache!") - channel_time = 50 - consumed_components = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 1, HIEROPHANT_ANSIBLE = 0) - object_path = /obj/structure/destructible/clockwork/cache - creator_message = "You form a tinkerer's cache, which is capable of storing components, which will automatically be used by slabs." - observer_message = "A hollow brass spire rises and begins to blaze!" - usage_tip = "Slabs will draw components from the global cache after the slab's own repositories, making caches extremely useful." - tier = SCRIPTURE_DRIVER - one_per_tile = TRUE - primary_component = REPLICANT_ALLOY - sort_priority = 8 - quickbind = TRUE - quickbind_desc = "Creates a Tinkerer's Cache, which stores components globally for slab access." - var/static/prev_cost = 0 - */ - -/*//Memory Allocation: Finds a willing ghost and makes them into a clockwork guardian for the invoker. +//Memory Allocation: Finds a willing ghost and makes them into a clockwork guardian for the invoker. /datum/clockwork_scripture/memory_allocation - descname = "Guardian" + descname = "Personal Guardian, A Peice Of Your Mind." name = "Memory Allocation" desc = "Allocates part of your consciousness to a Clockwork Guardian, a variant of Marauder that lives within you, able to be \ called forth by Speaking its True Name or if you become exceptionally low on health.
\ @@ -154,9 +132,8 @@ if(!do_after(invoker, 50, target = invoker)) invoker.visible_message("The tendril, covered in blood, retracts from [invoker]'s head and back into the [slab.name]!", \ "Total agony overcomes you as the tendril is forced out early!") - //invoker.notransform = FALSE invoker.Knockdown(100) - invoker.apply_damage(20, BRUTE, "head")//Sevtug leaves a gaping hole in your face if interrupted. + invoker.apply_damage(50, BRUTE, "head")//Sevtug leaves a gaping hole in your face if interrupted. slab.busy = null return FALSE clockwork_say(invoker, text2ratvar("...the mind made...")) @@ -180,7 +157,7 @@ invoker.visible_message("The tendril retracts from [invoker]'s head, sealing the entry wound as it does so!", \ "[M.true_name], a clockwork guardian, has taken up residence in your mind. Communicate with it via the \"Linked Minds\" action button.") return TRUE -*/ + //Clockwork Marauder: Creates a construct shell for a clockwork marauder, a well-rounded frontline fighter. /datum/clockwork_scripture/create_object/construct/clockwork_marauder descname = "Well-Rounded Combat Construct" @@ -230,14 +207,13 @@ /datum/clockwork_scripture/create_object/summon_arbiter descname = "Powerful Assault Mech" name = "Summon Neovgre, the Anima Bulwark" - desc = "Calls forth the mighty Anima Bulwark, a weapon of unmatched power,\ - mech with superior defensive and offensive capabilities. It will \ + desc = "Calls forth the mighty Anima Bulwark, a mech with superior defensive and offensive capabilities. It will \ steadily regenerate HP and triple its regeneration speed while standing \ on a clockwork tile. It will automatically draw power from nearby sigils of \ transmission should the need arise. Its Arbiter laser cannon can decimate foes \ from a range and is capable of smashing through any barrier presented to it. \ - Be warned, choosing to pilot Neovgre is a lifetime commitment, once you are \ - in you cannot leave and when it is destroyed it will explode catastrophically with you inside." + Be warned however, choosing to pilot Neovgre is a lifetime commitment, once you are \ + in you cannot leave and when it is destroyed it will explode catastrophically, with you inside." invocations = list("By the strength of the alloy...!!", "...call forth the Arbiter!!") channel_time = 200 // This is a strong fucking weapon, 20 seconds channel time is getting off light I tell ya. power_cost = 75000 //75 KW @@ -247,7 +223,7 @@ object_path = /obj/mecha/combat/neovgre tier = SCRIPTURE_APPLICATION primary_component = BELLIGERENT_EYE - sort_priority = 2 + sort_priority = 5 creator_message = "Neovgre, the Anima Bulwark towers over you... your enemies reckoning has come." /datum/clockwork_scripture/create_object/summon_arbiter/check_special_requirements()