diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index bc5816dbb9..0bfbe31fb1 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -31,5 +31,6 @@
/////////////
#define STATUS_EFFECT_SIGILMARK /datum/status_effect/sigil_mark
+#define STATUS_EFFECT_BELLIGERENT /datum/status_effect/belligerent //forces the affected to walk, doing damage if they try to run
#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath.
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index 3f261c7991..7b00a17e41 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -13,6 +13,7 @@
/datum/status_effect/shadow_mend/on_apply()
owner.visible_message("Violet light wraps around [owner]'s body!", "Violet light wraps around your body!")
playsound(owner, 'sound/magic/Teleport_app.ogg', 50, 1)
+ return ..()
/datum/status_effect/shadow_mend/tick()
owner.adjustBruteLoss(-15)
@@ -77,6 +78,7 @@
progbar = new(owner, duration, owner)
progbar.bar.color = list("#FAE48C", "#FAE48C", "#FAE48C", rgb(0,0,0))
progbar.update(duration - world.time)
+ return ..()
/datum/status_effect/vanguard_shield/tick()
progbar.update(duration - world.time)
@@ -129,6 +131,7 @@
animate(owner, color = oldcolor, time = 150, easing = EASE_IN)
addtimer(CALLBACK(owner, /atom/proc/update_atom_colour), 150)
playsound(owner, 'sound/magic/Ethereal_Enter.ogg', 50, 1)
+ return ..()
/datum/status_effect/inathneqs_endowment/on_remove()
add_logs(owner, null, "lost Inath-neq's invulnerability")
@@ -180,6 +183,7 @@
/datum/status_effect/his_grace/on_apply()
add_logs(owner, null, "gained His Grace's stun immunity")
owner.add_stun_absorption("hisgrace", INFINITY, 3, null, "His Grace protects you from the stun!")
+ return ..()
/datum/status_effect/his_grace/tick()
bloodlust = 0
@@ -213,6 +217,7 @@
/datum/status_effect/wish_granters_gift/on_apply()
to_chat(owner, "Death is not your end! The Wish Granter's energy suffuses you, and you begin to rise...")
+ return ..()
/datum/status_effect/wish_granters_gift/on_remove()
owner.revive(full_heal = 1, admin_revive = 1)
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index f78a3ae522..8eec853047 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -29,3 +29,50 @@
owner.adjustBruteLoss(0.1)
owner.adjustFireLoss(0.1)
owner.adjustToxLoss(0.2, TRUE, TRUE)
+
+/datum/status_effect/belligerent
+ id = "belligerent"
+ duration = 70
+ tick_interval = 0 //tick as fast as possible
+ status_type = STATUS_EFFECT_REPLACE
+ alert_type = /obj/screen/alert/status_effect/belligerent
+ var/leg_damage_on_toggle = 2 //damage on initial application and when the owner tries to toggle to run
+ var/cultist_damage_on_toggle = 10 //damage on initial application and when the owner tries to toggle to run, but to cultists
+
+/obj/screen/alert/status_effect/belligerent
+ name = "Belligerent"
+ desc = "Kneel, her-eti'c."
+ icon_state = "belligerent"
+ alerttooltipstyle = "clockcult"
+
+/datum/status_effect/belligerent/on_apply()
+ return do_movement_toggle(TRUE)
+
+/datum/status_effect/belligerent/tick()
+ if(!do_movement_toggle())
+ qdel(src)
+
+/datum/status_effect/belligerent/proc/do_movement_toggle(force_damage)
+ var/number_legs = owner.get_num_legs()
+ if(iscarbon(owner) && !is_servant_of_ratvar(owner) && !owner.null_rod_check() && number_legs)
+ if(force_damage || owner.m_intent != MOVE_INTENT_WALK)
+ if(GLOB.ratvar_awakens)
+ owner.Weaken(1)
+ if(iscultist(owner))
+ owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "l_leg")
+ owner.apply_damage(cultist_damage_on_toggle * 0.5, BURN, "r_leg")
+ else
+ owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "l_leg")
+ owner.apply_damage(leg_damage_on_toggle * 0.5, BURN, "r_leg")
+ if(owner.m_intent != MOVE_INTENT_WALK)
+ if(!iscultist(owner))
+ to_chat(owner, "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!")
+ else //Cultists take extra burn damage
+ to_chat(owner, "Your leg[number_legs > 1 ? "s burn":" burns"] with pain!")
+ owner.toggle_move_intent()
+ return TRUE
+ return FALSE
+
+/datum/status_effect/belligerent/on_remove()
+ if(owner.m_intent == MOVE_INTENT_WALK)
+ owner.toggle_move_intent()
diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm
index c2c070dbec..ff92b67978 100644
--- a/code/datums/status_effects/gas.dm
+++ b/code/datums/status_effects/gas.dm
@@ -16,6 +16,7 @@
cube = icon('icons/effects/freeze.dmi', "ice_cube")
owner.add_overlay(cube)
owner.update_canmove()
+ return ..()
/datum/status_effect/freon/tick()
owner.update_canmove()
diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm
index ec725885a9..10dbd1a602 100644
--- a/code/datums/status_effects/status_effect.dm
+++ b/code/datums/status_effects/status_effect.dm
@@ -31,10 +31,9 @@
/datum/status_effect/proc/start_ticking()
if(!src)
return
- if(!owner)
+ if(!owner || !on_apply())
qdel(src)
return
- on_apply()
if(duration != -1)
duration = world.time + initial(duration)
tick_interval = world.time + initial(tick_interval)
@@ -55,6 +54,8 @@
qdel(src)
/datum/status_effect/proc/on_apply() //Called whenever the buff is applied.
+ return TRUE
+
/datum/status_effect/proc/tick() //Called every tick.
/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed; do note that at the point this is called, it is out of the owner's status_effects but owner is not yet null
/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself or when a status effect with on_remove_on_mob_delete = FALSE has its mob deleted
diff --git a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm
index 1b6c80af73..6d17fe4e74 100644
--- a/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm
+++ b/code/game/gamemodes/clock_cult/clock_items/wraith_spectacles.dm
@@ -129,6 +129,7 @@
if(ishuman(owner))
var/mob/living/carbon/human/H = owner
apply_eye_damage(H)
+ return ..()
/datum/status_effect/wraith_spectacles/tick()
if(!ishuman(owner))
diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm
index f246034884..b49b0c5819 100644
--- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm
+++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_drivers.dm
@@ -17,23 +17,10 @@
sort_priority = 1
quickbind = TRUE
quickbind_desc = "Forces nearby non-Servants to walk, doing minor damage with each chant.
Maximum 15 chants."
- var/noncultist_damage = 2 //damage per chant to noncultists
- var/cultist_damage = 8 //damage per chant to non-walking cultists
/datum/clockwork_scripture/channeled/belligerent/chant_effects(chant_number)
for(var/mob/living/carbon/C in hearers(7, invoker))
- var/number_legs = C.get_num_legs()
- if(!is_servant_of_ratvar(C) && !C.null_rod_check() && number_legs) //you have legs right
- C.apply_damage(noncultist_damage * 0.5, BURN, "l_leg")
- C.apply_damage(noncultist_damage * 0.5, BURN, "r_leg")
- if(C.m_intent != MOVE_INTENT_WALK)
- if(!iscultist(C))
- to_chat(C, "Your leg[number_legs > 1 ? "s shiver":" shivers"] with pain!")
- else //Cultists take extra burn damage
- to_chat(C, "Your leg[number_legs > 1 ? "s burn":" burns"] with pain!")
- C.apply_damage(cultist_damage * 0.5, BURN, "l_leg")
- C.apply_damage(cultist_damage * 0.5, BURN, "r_leg")
- C.toggle_move_intent()
+ C.apply_status_effect(STATUS_EFFECT_BELLIGERENT)
return TRUE
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 4beaf226d6..a8dfb2dd4a 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
@@ -77,7 +77,7 @@
if(!prey && LAZYLEN(meals))
prey = pick(meals)
to_chat(prey, "\"You will do, heretic.\"\n\
- ")
+ You feel something massive turn its crushing focus to you...")
prey << 'sound/effects/ratvar_reveal.ogg'
else
if((!istype(prey, /obj/singularity/narsie) && prob(10) && LAZYLEN(meals) > 1) || prey.z != z || !(prey in meals))
diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi
index 5858925d86..46666cdd5f 100644
Binary files a/icons/mob/screen_alert.dmi and b/icons/mob/screen_alert.dmi differ