diff --git a/code/game/gamemodes/clock_cult/clock_item.dm b/code/game/gamemodes/clock_cult/clock_item.dm
index 535cef3b318..66500d4ee53 100644
--- a/code/game/gamemodes/clock_cult/clock_item.dm
+++ b/code/game/gamemodes/clock_cult/clock_item.dm
@@ -10,6 +10,7 @@
/obj/item/clockwork/New()
..()
+ ratvar_act()
all_clockwork_objects += src
/obj/item/clockwork/Destroy()
diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm
index d1ca6b9a6cb..fcf0f44c3b4 100644
--- a/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm
+++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_armor.dm
@@ -10,12 +10,25 @@
/obj/item/clothing/head/helmet/clockwork/New()
..()
+ ratvar_act()
all_clockwork_objects += src
/obj/item/clothing/head/helmet/clockwork/Destroy()
all_clockwork_objects -= src
return ..()
+/obj/item/clothing/head/helmet/clockwork/ratvar_act()
+ if(ratvar_awakens)
+ armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
+ flags |= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
+ else
+ armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
+ flags &= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = initial(max_heat_protection_temperature)
+ min_cold_protection_temperature = initial(min_cold_protection_temperature)
+
/obj/item/clothing/head/helmet/clockwork/equipped(mob/living/user, slot)
..()
if(slot == slot_head && !is_servant_of_ratvar(user))
@@ -45,18 +58,33 @@
icon_state = "clockwork_cuirass"
w_class = WEIGHT_CLASS_BULKY
body_parts_covered = CHEST|GROIN|LEGS
+ cold_protection = CHEST|GROIN|LEGS
+ heat_protection = CHEST|GROIN|LEGS
resistance_flags = FIRE_PROOF | ACID_PROOF
armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
allowed = list(/obj/item/clockwork, /obj/item/clothing/glasses/wraith_spectacles, /obj/item/clothing/glasses/judicial_visor, /obj/item/device/mmi/posibrain/soul_vessel)
/obj/item/clothing/suit/armor/clockwork/New()
..()
+ ratvar_act()
all_clockwork_objects += src
/obj/item/clothing/suit/armor/clockwork/Destroy()
all_clockwork_objects -= src
return ..()
+/obj/item/clothing/suit/armor/clockwork/ratvar_act()
+ if(ratvar_awakens)
+ armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
+ flags |= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
+ else
+ armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
+ flags &= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = initial(max_heat_protection_temperature)
+ min_cold_protection_temperature = initial(min_cold_protection_temperature)
+
/obj/item/clothing/suit/armor/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(equipper && !is_servant_of_ratvar(equipper))
return 0
@@ -90,6 +118,8 @@
strip_delay = 50
put_on_delay = 30
body_parts_covered = ARMS
+ cold_protection = ARMS
+ heat_protection = ARMS
siemens_coefficient = 0
permeability_coefficient = 0.05
resistance_flags = FIRE_PROOF | ACID_PROOF
@@ -97,12 +127,25 @@
/obj/item/clothing/gloves/clockwork/New()
..()
+ ratvar_act()
all_clockwork_objects += src
/obj/item/clothing/gloves/clockwork/Destroy()
all_clockwork_objects -= src
return ..()
+/obj/item/clothing/gloves/clockwork/ratvar_act()
+ if(ratvar_awakens)
+ armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 100, bio = 100, rad = 100, fire = 100, acid = 100)
+ flags |= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT
+ else
+ armor = list(melee = 80, bullet = 70, laser = -25, energy = 0, bomb = 60, bio = 0, rad = 0, fire = 100, acid = 100)
+ flags &= STOPSPRESSUREDMAGE
+ max_heat_protection_temperature = initial(max_heat_protection_temperature)
+ min_cold_protection_temperature = initial(min_cold_protection_temperature)
+
/obj/item/clothing/gloves/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(equipper && !is_servant_of_ratvar(equipper))
return 0
@@ -137,12 +180,19 @@
/obj/item/clothing/shoes/clockwork/New()
..()
+ ratvar_act()
all_clockwork_objects += src
/obj/item/clothing/shoes/clockwork/Destroy()
all_clockwork_objects -= src
return ..()
+/obj/item/clothing/shoes/clockwork/ratvar_act()
+ if(ratvar_awakens)
+ flags |= NOSLIP
+ else
+ flags &= NOSLIP
+
/obj/item/clothing/shoes/clockwork/mob_can_equip(mob/M, mob/equipper, slot, disable_warning = 0)
if(equipper && !is_servant_of_ratvar(equipper))
return 0
diff --git a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm
index 9d32a092aab..08177b2fa31 100644
--- a/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm
+++ b/code/game/gamemodes/clock_cult/clock_items/clockwork_slab.dm
@@ -93,6 +93,12 @@
slab_ability.remove_ranged_ability()
return ..()
+/obj/item/clockwork/slab/ratvar_act()
+ if(ratvar_awakens)
+ nonhuman_usable = TRUE
+ else
+ nonhuman_usable = initial(nonhuman_usable)
+
/obj/item/clockwork/slab/dropped(mob/user)
. = ..()
addtimer(src, "check_on_mob", 1, TIMER_NORMAL, user) //dropped is called before the item is out of the slot, so we need to check slightly later
diff --git a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm
index a187f4c9cf6..52d3446eca9 100644
--- a/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm
+++ b/code/game/gamemodes/clock_cult/clock_items/ratvarian_spear.dm
@@ -14,21 +14,29 @@
w_class = WEIGHT_CLASS_BULKY
var/impale_cooldown = 50 //delay, in deciseconds, where you can't impale again
var/attack_cooldown = 10 //delay, in deciseconds, where you can't attack with the spear
+ var/timerid
/obj/item/clockwork/ratvarian_spear/New()
..()
impale_cooldown = 0
- update_force()
-/obj/item/clockwork/ratvarian_spear/proc/update_force()
+/obj/item/clockwork/ratvarian_spear/Destroy()
+ deltimer(timerid)
+ return ..()
+
+/obj/item/clockwork/ratvarian_spear/ratvar_act()
if(ratvar_awakens) //If Ratvar is alive, the spear is extremely powerful
force = 25
throwforce = 50
armour_penetration = 10
+ clockwork_desc = initial(clockwork_desc)
+ deltimer(timerid)
else
force = initial(force)
throwforce = initial(throwforce)
armour_penetration = 0
+ clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last for long."
+ timerid = addtimer(src, "break_spear", 600, TIMER_NORMAL)
/obj/item/clockwork/ratvarian_spear/examine(mob/user)
..()
@@ -74,7 +82,7 @@
add_fingerprint(user)
attack_verb = list("stabbed", "poked", "slashed")
- update_force()
+ ratvar_act()
if(impaling)
impale_cooldown = world.time + initial(impale_cooldown)
attack_cooldown = world.time + initial(attack_cooldown)
diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm
index f350c1a553c..0f7ff9036f6 100644
--- a/code/game/gamemodes/clock_cult/clock_scripture.dm
+++ b/code/game/gamemodes/clock_cult/clock_scripture.dm
@@ -244,6 +244,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or
else if(creator_message)
invoker << creator_message
var/obj/O = new object_path (get_turf(invoker))
+ O.ratvar_act() //update the new object so it gets buffed if ratvar is alive
if(istype(O, /obj/item))
invoker.put_in_hands(O)
return TRUE
diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm
index e55d9d5392b..e31295bb4a7 100644
--- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm
+++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_revenant.dm
@@ -143,8 +143,8 @@
clockwork_generals_invoked["nezbere"] = world.time + CLOCKWORK_GENERAL_COOLDOWN
playsound(invoker, 'sound/magic/clockwork/invoke_general.ogg', 50, 0)
for(var/obj/structure/destructible/clockwork/ocular_warden/W in all_clockwork_objects) //Ocular wardens have increased damage and radius
- W.damage_per_tick *= 1.5
- W.sight_range *= 2
+ W.damage_per_tick = 5
+ W.sight_range = 5
for(var/obj/item/clockwork/clockwork_proselytizer/P in all_clockwork_objects) //Proselytizers no longer require alloy
P.uses_alloy = FALSE
for(var/obj/structure/destructible/clockwork/powered/M in all_clockwork_objects) //Powered clockwork structures no longer need power
@@ -155,8 +155,10 @@
D.production_cooldown *= 0.5
spawn(600)
for(var/obj/structure/destructible/clockwork/ocular_warden/W in all_clockwork_objects)
- W.damage_per_tick = initial(W.damage_per_tick)
- W.sight_range = initial(W.sight_range)
+ if(W.damage_per_tick == 5)
+ W.damage_per_tick = initial(W.damage_per_tick)
+ if(W.sight_range == 5)
+ W.sight_range = initial(W.sight_range)
for(var/obj/item/clockwork/clockwork_proselytizer/P in all_clockwork_objects)
P.uses_alloy = initial(P.uses_alloy)
for(var/obj/structure/destructible/clockwork/powered/M in all_clockwork_objects)
diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
index 6358ba2dd73..6016292851b 100644
--- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
+++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
@@ -210,7 +210,7 @@
if(!ratvar_awakens)
R.clockwork_desc = "A powerful spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last for long."
owner << "Your spear begins to break down in this plane of existence. You can't use it for long!"
- addtimer(R, "break_spear", base_cooldown, TIMER_NORMAL)
+ R.timerid = addtimer(R, "break_spear", base_cooldown, TIMER_NORMAL)
cooldown = base_cooldown + world.time
owner.update_action_buttons_icon()
addtimer(src, "update_actions", base_cooldown, TIMER_NORMAL)
diff --git a/code/game/gamemodes/clock_cult/clock_structure.dm b/code/game/gamemodes/clock_cult/clock_structure.dm
index 69eb5165167..960a508a64c 100644
--- a/code/game/gamemodes/clock_cult/clock_structure.dm
+++ b/code/game/gamemodes/clock_cult/clock_structure.dm
@@ -62,7 +62,9 @@
/obj/structure/destructible/clockwork/proc/get_efficiency_mod(increasing)
if(ratvar_awakens)
- return 1
+ if(increasing)
+ return 0.5
+ return 2
. = max(sqrt(obj_integrity/max(max_integrity, 1)), 0.5)
if(increasing)
. *= min(max_integrity/max(obj_integrity, 1), 4)
diff --git a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm
index 6f9fde906f3..de0ec115e70 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/ocular_warden.dm
@@ -43,14 +43,20 @@
return FAILED_UNFASTEN
return SUCCESSFUL_UNFASTEN
+/obj/structure/destructible/clockwork/ocular_warden/ratvar_act()
+ ..()
+ if(ratvar_awakens)
+ damage_per_tick = 10
+ sight_range = 6
+ else
+ damage_per_tick = initial(damage_per_tick)
+ sight_range = initial(sight_range)
+
/obj/structure/destructible/clockwork/ocular_warden/process()
if(!anchored)
lose_target()
return
var/list/validtargets = acquire_nearby_targets()
- if(ratvar_awakens && (damage_per_tick == initial(damage_per_tick) || sight_range == initial(sight_range))) //Massive buff if Ratvar has returned
- damage_per_tick = 10
- sight_range = 5
if(target)
if(!(target in validtargets))
lose_target()
diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
index fe32214cda1..ee17e60db94 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
@@ -16,8 +16,8 @@
/obj/structure/destructible/clockwork/massive/ratvar/New()
..()
ratvar_awakens++
- for(var/obj/item/clockwork/ratvarian_spear/R in all_clockwork_objects)
- R.update_force()
+ for(var/obj/O in all_clockwork_objects)
+ O.ratvar_act()
START_PROCESSING(SSobj, src)
send_to_playing_players("\"[text2ratvar("ONCE AGAIN MY LIGHT SHALL SHINE ACROSS THIS PATHETIC REALM")]!!\"")
send_to_playing_players('sound/effects/ratvar_reveal.ogg')
@@ -28,8 +28,8 @@
/obj/structure/destructible/clockwork/massive/ratvar/Destroy()
ratvar_awakens--
- for(var/obj/item/clockwork/ratvarian_spear/R in all_clockwork_objects)
- R.update_force()
+ for(var/obj/O in all_clockwork_objects)
+ O.ratvar_act()
STOP_PROCESSING(SSobj, src)
send_to_playing_players("\"NO! I will not... be... banished... again...\"")
return ..()