diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index fdddbda344..21d9d4e093 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -379,3 +379,10 @@ /datum/config_entry/number/auto_transfer_delay config_entry_value = 72000 min_val = 0 + +/datum/config_entry/number/marauder_delay_non_reebe + config_entry_value = 1800 + min_val = 0 + +/datum/config_entry/flag/allow_clockwork_marauder_on_station + config_entry_value = TRUE diff --git a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm index 42ca9e07e2..311f552467 100644 --- a/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm +++ b/code/modules/antagonists/clockcult/clock_mobs/clockwork_marauder.dm @@ -1,5 +1,7 @@ #define MARAUDER_SLOWDOWN_PERCENTAGE 0.40 //Below this percentage of health, marauders will become slower #define MARAUDER_SHIELD_REGEN_TIME 200 //In deciseconds, how long it takes for shields to regenerate after breaking +#define MARAUDER_SPACE_FULL_DAMAGE 6 //amount of damage per life tick while inside space +#define MARAUDER_SPACE_NEAR_DAMAGE 4 //amount of damage taking per Life() tick from being next to space. //Clockwork marauder: A well-rounded frontline construct. Only one can exist for every two human servants. /mob/living/simple_animal/hostile/clockwork/marauder @@ -20,12 +22,14 @@ movement_type = FLYING a_intent = INTENT_HARM loot = list(/obj/item/clockwork/component/geis_capacitor/fallen_armor) - light_range = 2 - light_power = 1.1 + light_range = 3 + light_power = 1.7 playstyle_string = "You are a clockwork marauder, a well-rounded frontline construct of Ratvar. Although you have no \ unique abilities, you're a fearsome fighter in one-on-one combat, and your shield protects from projectiles!

Obey the Servants and do as they \ - tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm.
" + tell you. Your primary goal is to defend the Ark from destruction; they are your allies in this, and should be protected from harm. \ + Be warned, however, that you will rapidly decay near the void of space." empower_string = "The Anima Bulwark's power flows through you! Your weapon will strike harder, your armor is sturdier, and your shield is more durable." + var/default_speed = 0 var/max_shield_health = 3 var/shield_health = 3 //Amount of projectiles that can be deflected within var/shield_health_regen = 0 //When world.time equals this, shield health will regenerate @@ -36,10 +40,21 @@ /mob/living/simple_animal/hostile/clockwork/marauder/Life() ..() + var/turf/T = get_turf(src) + var/turf/open/space/S = isspaceturf(T)? T : null + var/less_space_damage + if(!istype(S)) + var/turf/open/space/nearS = locate() in oview(1) + if(nearS) + S = nearS + less_space_damage = TRUE + if(S) + to_chat(src, "The void of space drains Ratvar's Light from you! You feel yourself rapidly decaying. It would be wise to get back inside!") + adjustBruteLoss(less_space_damage? MARAUDER_SPACE_NEAR_DAMAGE : MARAUDER_SPACE_FULL_DAMAGE) if(!GLOB.ratvar_awakens && health / maxHealth <= MARAUDER_SLOWDOWN_PERCENTAGE) - speed = initial(speed) + 1 //Yes, this slows them down + speed = default_speed + 1 //Yes, this slows them down else - speed = initial(speed) + speed = default_speed if(shield_health < max_shield_health && world.time >= shield_health_regen) shield_health_regen = world.time + MARAUDER_SHIELD_REGEN_TIME to_chat(src, "Your shield has recovered, [shield_health] blocks remaining!") diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index 755b324d71..0fd6c8a8dc 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -87,9 +87,22 @@ object_path = /obj/item/clockwork/construct_chassis/clockwork_marauder construct_type = /mob/living/simple_animal/hostile/clockwork/marauder combat_construct = TRUE - var/static/recent_marauders = 0 - var/static/time_since_last_marauder = 0 - var/static/scaled_recital_time = 0 + var/static/last_marauder = 0 + +/datum/clockwork_scripture/create_object/construct/clockwork_marauder/post_recital() + last_marauder = world.time + return ..() + +/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital() + if(!is_reebe(invoker.z)) + if(!CONFIG_GET(flag/allow_clockwork_marauder_on_station)) + to_chat(invoker, "This particular station is too far from the influence of the Hierophant Network. You can not summon a marauder here.") + return FALSE + if(world.time < (last_marauder + CONFIG_GET(number/marauder_delay_non_reebe))) + to_chat(invoker, "The hierophant network is still strained from the last summoning of a marauder on a plane without the strong energy connection of Reebe to support it. \ + You must wait another [DisplayTimeText((last_marauder + CONFIG_GET(number/marauder_delay_non_reebe)) - world.time, TRUE)]!") + return FALSE + return ..() /datum/clockwork_scripture/create_object/construct/clockwork_marauder/update_construct_limit() var/human_servants = 0 @@ -98,27 +111,7 @@ var/mob/living/L = M.current if(ishuman(L) && L.stat != DEAD) human_servants++ - construct_limit = round(CLAMP((human_servants / 4), 1, 3)) - recent_marauders //1 per 4 human servants, maximum of 3, reduced by recent marauder creation - if(recent_marauders) - to_chat(invoker, "The Hierophant Network is depleted by a summoning in the last [DisplayTimeText(MARAUDER_SCRIPTURE_SCALING_THRESHOLD, TRUE)] - limiting the number of available marauders by [recent_marauders]!") - -/datum/clockwork_scripture/create_object/construct/clockwork_marauder/pre_recital() - channel_time = initial(channel_time) - if(recent_marauders) - scaled_recital_time = min(recent_marauders * MARAUDER_SCRIPTURE_SCALING_TIME, MARAUDER_SCRIPTURE_SCALING_MAX) - to_chat(invoker, "The Hierophant Network is under strain from repeated summoning, making this scripture [DisplayTimeText(scaled_recital_time)] slower!") - channel_time += scaled_recital_time - return TRUE - -/datum/clockwork_scripture/create_object/construct/clockwork_marauder/scripture_effects() - . = ..() - recent_marauders++ - addtimer(CALLBACK(GLOBAL_PROC, .proc/marauder_reset),MARAUDER_SCRIPTURE_SCALING_THRESHOLD) - -/proc/marauder_reset() - var/datum/clockwork_scripture/create_object/construct/clockwork_marauder/CM = new() - CM.recent_marauders-- - qdel(CM) + construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 //Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage. /datum/clockwork_scripture/create_object/summon_arbiter