diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm
index 2cd4d0758e3..aa9a4dbb9d7 100644
--- a/code/__DEFINES/combat.dm
+++ b/code/__DEFINES/combat.dm
@@ -56,7 +56,6 @@
#define EFFECT_IMMOBILIZE "immobilize"
#define EFFECT_EYE_BLUR "eye_blur"
#define EFFECT_DROWSY "drowsy"
-#define EFFECT_JITTER "jitter"
//Bitflags defining which status effects could be or are inflicted on a mob
#define CANSTUN (1<<0)
diff --git a/code/__HELPERS/honkerblast.dm b/code/__HELPERS/honkerblast.dm
index b1bdd1cb9dc..c8b9ab17ef5 100644
--- a/code/__HELPERS/honkerblast.dm
+++ b/code/__HELPERS/honkerblast.dm
@@ -22,7 +22,7 @@
victim.Unconscious(40)
victim.Stun(100)
victim.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/stutter)
- victim.Jitter(500)
+ victim.set_timed_status_effect(1000 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(10, 15)
to_chat(victim, "HONK")
@@ -34,14 +34,14 @@
for(var/mob/living/carbon/victim in properly_honked)
victim.Paralyze(20)
victim.Stun(50)
- victim.Jitter(250)
+ victim.set_timed_status_effect(500 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(7, 10)
to_chat(victim, "HONK")
for(var/mob/living/carbon/victim in lightly_honked)
victim.Knockdown(20)
- victim.Jitter(100)
+ victim.set_timed_status_effect(200 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
var/obj/item/organ/ears/ears = victim.getorganslot(ORGAN_SLOT_EARS)
ears?.adjustEarDamage(4, 5)
to_chat(victim, "HONK")
diff --git a/code/datums/brain_damage/phobia.dm b/code/datums/brain_damage/phobia.dm
index 2cbd3c0dd32..ac7e9f363ae 100644
--- a/code/datums/brain_damage/phobia.dm
+++ b/code/datums/brain_damage/phobia.dm
@@ -111,21 +111,21 @@
if(1)
to_chat(owner, span_warning("You are paralyzed with fear!"))
owner.Stun(70)
- owner.Jitter(8)
+ owner.set_timed_status_effect(16 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(2)
owner.emote("scream")
- owner.Jitter(5)
+ owner.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.say("AAAAH!!", forced = "phobia")
if(reason)
owner.pointed(reason)
if(3)
to_chat(owner, span_warning("You shut your eyes in terror!"))
- owner.Jitter(5)
+ owner.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.blind_eyes(10)
if(4)
owner.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/dizziness)
owner.adjust_timed_status_effect(10 SECONDS, /datum/status_effect/confusion)
- owner.Jitter(10)
+ owner.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/speech/stutter)
// Defined phobia types for badminry, not included in the RNG trauma pool to avoid diluting.
diff --git a/code/datums/brain_damage/severe.dm b/code/datums/brain_damage/severe.dm
index c0192fe33ce..d68bb85732d 100644
--- a/code/datums/brain_damage/severe.dm
+++ b/code/datums/brain_damage/severe.dm
@@ -179,36 +179,33 @@
return
var/high_stress = (stress > 60) //things get psychosomatic from here on
- switch(rand(1,6))
+ switch(rand(1, 6))
if(1)
- if(!high_stress)
- to_chat(owner, span_warning("You feel sick..."))
- else
+ if(high_stress)
to_chat(owner, span_warning("You feel really sick at the thought of being alone!"))
+ else
+ to_chat(owner, span_warning("You feel sick..."))
addtimer(CALLBACK(owner, /mob/living/carbon.proc/vomit, high_stress), 50) //blood vomit if high stress
if(2)
- if(!high_stress)
- to_chat(owner, span_warning("You can't stop shaking..."))
- else
+ if(high_stress)
to_chat(owner, span_warning("You feel weak and scared! If only you weren't alone..."))
owner.adjustStaminaLoss(50)
+ else
+ to_chat(owner, span_warning("You can't stop shaking..."))
owner.adjust_timed_status_effect(40 SECONDS, /datum/status_effect/dizziness)
owner.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/confusion)
- owner.Jitter(20)
+ owner.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(3, 4)
- if(!high_stress)
- to_chat(owner, span_warning("You feel really lonely..."))
- else
+ if(high_stress)
to_chat(owner, span_warning("You're going mad with loneliness!"))
owner.hallucination += 30
+ else
+ to_chat(owner, span_warning("You feel really lonely..."))
if(5)
- if(!high_stress)
- to_chat(owner, span_warning("Your heart skips a beat."))
- owner.adjustOxyLoss(8)
- else
+ if(high_stress)
if(prob(15) && ishuman(owner))
var/mob/living/carbon/human/H = owner
H.set_heartattack(TRUE)
@@ -216,6 +213,10 @@
else
to_chat(owner, span_userdanger("You feel your heart lurching in your chest..."))
owner.adjustOxyLoss(8)
+ else
+ to_chat(owner, span_warning("Your heart skips a beat."))
+ owner.adjustOxyLoss(8)
+
else
//No effect
return
diff --git a/code/datums/diseases/anxiety.dm b/code/datums/diseases/anxiety.dm
index 8c0b98382b9..37235d9f2e1 100644
--- a/code/datums/diseases/anxiety.dm
+++ b/code/datums/diseases/anxiety.dm
@@ -36,7 +36,7 @@
affected_mob.visible_message(span_danger("[affected_mob] stumbles around in a panic."), \
span_userdanger("You have a panic attack!"))
affected_mob.adjust_timed_status_effect(rand(6 SECONDS, 8 SECONDS), /datum/status_effect/confusion)
- affected_mob.jitteriness += (rand(6,8))
+ affected_mob.adjust_timed_status_effect(rand(12 SECONDS, 16 SECONDS), /datum/status_effect/jitter)
if(DT_PROB(1, delta_time))
affected_mob.visible_message(span_danger("[affected_mob] coughs up butterflies!"), \
span_userdanger("You cough up butterflies!"))
diff --git a/code/datums/elements/spooky.dm b/code/datums/elements/spooky.dm
index f1b68c6760a..40c30de1c66 100644
--- a/code/datums/elements/spooky.dm
+++ b/code/datums/elements/spooky.dm
@@ -21,7 +21,7 @@
var/mob/living/carbon/human/U = user
if(!istype(U.dna.species, /datum/species/skeleton))
U.adjustStaminaLoss(35) //Extra Damage
- U.Jitter(35)
+ U.set_timed_status_effect(70 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
U.set_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter)
if(U.getStaminaLoss() > 95)
to_chat(U, "Your ears weren't meant for this spectral sound.")
@@ -35,7 +35,7 @@
if(istype(H.dna.species, /datum/species/zombie))
H.adjustStaminaLoss(25)
H.Paralyze(15) //zombies can't resist the doot
- C.Jitter(35)
+ C.set_timed_status_effect(70 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
C.set_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter)
if((!istype(H.dna.species, /datum/species/skeleton)) && (!istype(H.dna.species, /datum/species/golem)) && (!istype(H.dna.species, /datum/species/android)) && (!istype(H.dna.species, /datum/species/jelly)))
C.adjustStaminaLoss(25) //boneless humanoids don't lose the will to live
@@ -43,7 +43,7 @@
INVOKE_ASYNC(src, .proc/spectral_change, H)
else //the sound will spook monkeys.
- C.Jitter(15)
+ C.set_timed_status_effect(30 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
C.set_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter)
/datum/element/spooky/proc/spectral_change(mob/living/carbon/human/H, mob/user)
diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm
index 3a1ae848281..8441405d9cb 100644
--- a/code/datums/martial/cqc.dm
+++ b/code/datums/martial/cqc.dm
@@ -183,7 +183,7 @@
playsound(get_turf(D), 'sound/weapons/cqchit1.ogg', 50, TRUE, -1)
if(I && D.temporarilyRemoveItemFromInventory(I))
A.put_in_hands(I)
- D.Jitter(2)
+ D.set_timed_status_effect(4 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
D.apply_damage(5, A.get_attack_type())
else
D.visible_message(span_danger("[A] fails to disarm [D]!"), \
diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm
index 4ffe596c295..4836b61b732 100644
--- a/code/datums/mutations/body.dm
+++ b/code/datums/mutations/body.dm
@@ -13,14 +13,15 @@
if(DT_PROB(0.5 * GET_MUTATION_SYNCHRONIZER(src), delta_time) && owner.stat == CONSCIOUS)
owner.visible_message(span_danger("[owner] starts having a seizure!"), span_userdanger("You have a seizure!"))
owner.Unconscious(200 * GET_MUTATION_POWER(src))
- owner.Jitter(1000 * GET_MUTATION_POWER(src))
+ owner.set_timed_status_effect(2000 SECONDS * GET_MUTATION_POWER(src), /datum/status_effect/jitter)
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "epilepsy", /datum/mood_event/epilepsy)
addtimer(CALLBACK(src, .proc/jitter_less), 90)
/datum/mutation/human/epilepsy/proc/jitter_less()
- if(owner)
- owner.jitteriness = 10
+ if(QDELETED(owner))
+ return
+ owner.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter)
//Unstable DNA induces random mutations!
/datum/mutation/human/bad_dna
diff --git a/code/datums/quirks/negative.dm b/code/datums/quirks/negative.dm
index 57f34be5f89..8670a025b9d 100644
--- a/code/datums/quirks/negative.dm
+++ b/code/datums/quirks/negative.dm
@@ -589,7 +589,7 @@
switch(rand(1,3))
if(1)
- quirk_holder.Jitter(10)
+ quirk_holder.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
msg += "causing you to start fidgeting!"
if(2)
quirk_holder.set_timed_status_effect(6 SECONDS, /datum/status_effect/speech/stutter, only_if_higher = TRUE)
diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm
index f68328f9aea..134305c10f9 100644
--- a/code/datums/status_effects/buffs.dm
+++ b/code/datums/status_effects/buffs.dm
@@ -319,7 +319,7 @@
/datum/status_effect/good_music/tick()
if(owner.can_hear())
owner.adjust_timed_status_effect(-4 SECONDS, /datum/status_effect/dizziness)
- owner.jitteriness = max(0, owner.jitteriness - 2)
+ owner.adjust_timed_status_effect(-4 SECONDS, /datum/status_effect/jitter)
owner.adjust_timed_status_effect(-1 SECONDS, /datum/status_effect/confusion)
SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, "goodmusic", /datum/mood_event/goodmusic)
diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm
index 649bf723f6a..b0f7bb0d2ec 100644
--- a/code/datums/status_effects/debuffs/debuffs.dm
+++ b/code/datums/status_effects/debuffs/debuffs.dm
@@ -848,8 +848,11 @@
if(prob(40))
var/obj/item/I = H.get_active_held_item()
if(I && H.dropItemToGround(I))
- H.visible_message(span_notice("[H]'s hand convulses, and they drop their [I.name]!"),span_userdanger("Your hand convulses violently, and you drop what you were holding!"))
- H.jitteriness += 5
+ H.visible_message(
+ span_notice("[H]'s hand convulses, and they drop their [I.name]!"),
+ span_userdanger("Your hand convulses violently, and you drop what you were holding!"),
+ )
+ H.adjust_timed_status_effect(10 SECONDS, /datum/status_effect/jitter)
/atom/movable/screen/alert/status_effect/convulsing
name = "Shaky Hands"
@@ -969,7 +972,7 @@
human_owner.vomit()
if(20 to 30)
human_owner.set_timed_status_effect(100 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
- human_owner.Jitter(50)
+ human_owner.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(30 to 40)
human_owner.adjustOrganLoss(ORGAN_SLOT_LIVER, 5)
if(40 to 50)
diff --git a/code/datums/status_effects/debuffs/drunk.dm b/code/datums/status_effects/debuffs/drunk.dm
index 532dce10b84..b6e4f058a09 100644
--- a/code/datums/status_effects/debuffs/drunk.dm
+++ b/code/datums/status_effects/debuffs/drunk.dm
@@ -160,7 +160,7 @@
owner.adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/slurring/drunk)
// And drunk people will always lose jitteriness
- owner.jitteriness = max(owner.jitteriness - 3, 0)
+ owner.adjust_timed_status_effect(-6 SECONDS, /datum/status_effect/jitter)
// Over 11, we will constantly gain slurring up to 10 seconds of slurring.
if(drunk_value >= 11)
diff --git a/code/datums/status_effects/debuffs/jitteriness.dm b/code/datums/status_effects/debuffs/jitteriness.dm
new file mode 100644
index 00000000000..d97748b43fc
--- /dev/null
+++ b/code/datums/status_effects/debuffs/jitteriness.dm
@@ -0,0 +1,55 @@
+/datum/status_effect/jitter
+ id = "jitter"
+ tick_interval = 2 SECONDS
+ alert_type = null
+
+/datum/status_effect/jitter/on_creation(mob/living/new_owner, duration = 10 SECONDS)
+ src.duration = duration
+ return ..()
+
+/datum/status_effect/jitter/on_apply()
+ RegisterSignal(owner, list(COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_LIVING_DEATH), .proc/remove_jitter)
+ SEND_SIGNAL(owner, COMSIG_ADD_MOOD_EVENT, id, /datum/mood_event/jittery)
+ return TRUE
+
+/datum/status_effect/jitter/on_remove()
+ UnregisterSignal(owner, list(COMSIG_LIVING_POST_FULLY_HEAL, COMSIG_LIVING_DEATH))
+ SEND_SIGNAL(owner, COMSIG_CLEAR_MOOD_EVENT, id)
+ // juuust in case, reset our x and y's from our jittering
+ owner.pixel_x = 0
+ owner.pixel_y = 0
+
+/datum/status_effect/jitter/get_examine_text()
+ switch(duration - world.time)
+ if(5 MINUTES to INFINITY)
+ return span_boldwarning("[owner.p_they(TRUE)] [owner.p_are()] convulsing violently!")
+ if(3 MINUTES to 5 MINUTES)
+ return span_warning("[owner.p_they(TRUE)] [owner.p_are()] extremely jittery.")
+ if(1 MINUTES to 3 MINUTES)
+ return span_warning("[owner.p_they(TRUE)] [owner.p_are()] twitching ever so slightly.")
+
+ return null
+
+/// Removes all of our jitteriness on a signal
+/datum/status_effect/jitter/proc/remove_jitter(datum/source)
+ SIGNAL_HANDLER
+
+ qdel(src)
+
+/datum/status_effect/jitter/tick()
+
+ var/time_left_in_seconds = (duration - world.time) / 10
+ owner.do_jitter_animation(time_left_in_seconds)
+
+ // Decrease the duration by our resting_modifier, effectively skipping resting_modifier ticks per tick
+ var/resting_modifier = owner.resting ? 5 : 1
+ duration -= ((resting_modifier - 1) * initial(tick_interval))
+
+/// Helper proc that causes the mob to do a jittering animation by jitter_amount.
+/// jitter_amount will only apply up to 300 (maximum jitter effect).
+/mob/living/proc/do_jitter_animation(jitter_amount = 100)
+ var/amplitude = min(4, (jitter_amount / 100) + 1)
+ var/pixel_x_diff = rand(-amplitude, amplitude)
+ var/pixel_y_diff = rand(-amplitude / 3, amplitude / 3)
+ animate(src, pixel_x = pixel_x_diff, pixel_y = pixel_y_diff , time = 0.2 SECONDS, loop = 6, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
+ animate(pixel_x = -pixel_x_diff , pixel_y = -pixel_y_diff , time = 0.2 SECONDS, flags = ANIMATION_RELATIVE)
diff --git a/code/datums/status_effects/drug_effects.dm b/code/datums/status_effects/drug_effects.dm
index b4325f21e07..b797c8e995b 100644
--- a/code/datums/status_effects/drug_effects.dm
+++ b/code/datums/status_effects/drug_effects.dm
@@ -48,7 +48,7 @@
return FALSE
var/amplitude = rand(1 SECONDS, 3 SECONDS)
duration = amplitude
- owner.Jitter(50)
+ owner.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.Paralyze(duration)
owner.visible_message(span_warning("[owner] drops to the ground as [owner.p_they()] start seizing up."), \
span_warning("[pick("You can't collect your thoughts...", "You suddenly feel extremely dizzy...", "You cant think straight...","You can't move your face properly anymore...")]"))
diff --git a/code/datums/status_effects/neutral.dm b/code/datums/status_effects/neutral.dm
index 867c59149ed..7c60346b175 100644
--- a/code/datums/status_effects/neutral.dm
+++ b/code/datums/status_effects/neutral.dm
@@ -343,14 +343,14 @@
//phase 1
if(1 to EIGENSTASIUM_PHASE_1_END)
- owner.Jitter(2)
+ owner.set_timed_status_effect(4 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.adjust_nutrition(-4)
//phase 2
if(EIGENSTASIUM_PHASE_1_END to EIGENSTASIUM_PHASE_2_END)
if(current_cycle == 51)
to_chat(owner, span_userdanger("You start to convlse violently as you feel your consciousness merges across realities, your possessions flying wildy off your body!"))
- owner.Jitter(200)
+ owner.set_timed_status_effect(400 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.Knockdown(10)
var/list/items = list()
@@ -378,7 +378,7 @@
//Clone function - spawns a clone then deletes it - simulates multiple copies of the player teleporting in
switch(phase_3_cycle) //Loops 0 -> 1 -> 2 -> 1 -> 2 -> 1 ...ect.
if(0)
- owner.Jitter(100)
+ owner.set_timed_status_effect(200 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
to_chat(owner, span_userdanger("Your eigenstate starts to rip apart, drawing in alternative reality versions of yourself!"))
if(1)
var/typepath = owner.type
@@ -407,7 +407,7 @@
do_teleport(owner, get_turf(owner), 2, no_effects=TRUE) //teleports clone so it's hard to find the real one!
do_sparks(5, FALSE, owner)
owner.Sleeping(100)
- owner.Jitter(50)
+ owner.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
to_chat(owner, span_userdanger("You feel your eigenstate settle, as \"you\" become an alternative version of yourself!"))
owner.emote("me",1,"flashes into reality suddenly, gasping as they gaze around in a bewildered and highly confused fashion!",TRUE)
log_game("FERMICHEM: [owner] ckey: [owner.key] has become an alternative universe version of themselves.")
diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm
index 1ed21542f90..b3dcf263b20 100644
--- a/code/game/objects/items/defib.dm
+++ b/code/game/objects/items/defib.dm
@@ -513,7 +513,7 @@
span_userdanger("[user] touches [M] with [src]!"))
M.adjustStaminaLoss(60)
M.Knockdown(75)
- M.Jitter(50)
+ M.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
M.apply_status_effect(/datum/status_effect/convulsing)
playsound(src, 'sound/machines/defib_zap.ogg', 50, TRUE, -1)
if(HAS_TRAIT(M,MOB_ORGANIC))
@@ -559,7 +559,7 @@
H.apply_damage(50, BURN, BODY_ZONE_CHEST)
log_combat(user, H, "overloaded the heart of", defib)
H.Paralyze(100)
- H.Jitter(100)
+ H.set_timed_status_effect(200 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
do_success()
return
do_cancel()
@@ -634,7 +634,7 @@
H.grab_ghost()
H.revive(full_heal = FALSE, admin_revive = FALSE)
H.emote("gasp")
- H.Jitter(100)
+ H.set_timed_status_effect(200 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK)
SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "saved_life", /datum/mood_event/saved_life)
log_combat(user, H, "revived", defib)
diff --git a/code/game/objects/items/melee/baton.dm b/code/game/objects/items/melee/baton.dm
index aba615fa59d..3886d40d78d 100644
--- a/code/game/objects/items/melee/baton.dm
+++ b/code/game/objects/items/melee/baton.dm
@@ -370,7 +370,7 @@
return span_danger("The baton is still charging!")
/obj/item/melee/baton/telescopic/contractor_baton/additional_effects_non_cyborg(mob/living/target, mob/living/user)
- target.Jitter(20)
+ target.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
target.adjust_timed_status_effect(40 SECONDS, /datum/status_effect/speech/stutter)
/obj/item/melee/baton/security
@@ -562,7 +562,7 @@
* After a period of time, we then check to see what stun duration we give.
*/
/obj/item/melee/baton/security/additional_effects_non_cyborg(mob/living/target, mob/living/user)
- target.Jitter(20)
+ target.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
target.set_timed_status_effect(10 SECONDS, /datum/status_effect/confusion, only_if_higher = TRUE)
target.set_timed_status_effect(16 SECONDS, /datum/status_effect/speech/stutter, only_if_higher = TRUE)
diff --git a/code/game/objects/items/robot/items/generic.dm b/code/game/objects/items/robot/items/generic.dm
index b7b08a2b514..6f0dac4a52c 100644
--- a/code/game/objects/items/robot/items/generic.dm
+++ b/code/game/objects/items/robot/items/generic.dm
@@ -343,12 +343,12 @@
if(1)
carbon.adjust_timed_status_effect(5 SECONDS, /datum/status_effect/confusion)
carbon.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/speech/stutter)
- carbon.Jitter(10)
+ carbon.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/jitter)
if(2)
carbon.Paralyze(40)
carbon.adjust_timed_status_effect(10 SECONDS, /datum/status_effect/confusion)
carbon.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/stutter)
- carbon.Jitter(25)
+ carbon.adjust_timed_status_effect(50 SECONDS, /datum/status_effect/jitter)
playsound(get_turf(src), 'sound/machines/warning-buzzer.ogg', 130, 3)
COOLDOWN_START(src, alarm_cooldown, HARM_ALARM_NO_SAFETY_COOLDOWN)
user.log_message("used an emagged Cyborg Harm Alarm in [AREACOORD(user)]", LOG_ATTACK)
diff --git a/code/modules/antagonists/abductor/equipment/abduction_gear.dm b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
index 7e766c1d058..57d9229be43 100644
--- a/code/modules/antagonists/abductor/equipment/abduction_gear.dm
+++ b/code/modules/antagonists/abductor/equipment/abduction_gear.dm
@@ -512,7 +512,7 @@ Congratulations! You are now trained for invasive xenobiology research!"}
if(BATON_STUN)
target.visible_message(span_danger("[user] stuns [target] with [src]!"),
span_userdanger("[user] stuns you with [src]!"))
- target.Jitter(20)
+ target.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
target.set_timed_status_effect(10 SECONDS, /datum/status_effect/confusion, only_if_higher = TRUE)
target.set_timed_status_effect(16 SECONDS, /datum/status_effect/speech/stutter, only_if_higher = TRUE)
SEND_SIGNAL(target, COMSIG_LIVING_MINOR_SHOCK)
diff --git a/code/modules/antagonists/changeling/powers/shriek.dm b/code/modules/antagonists/changeling/powers/shriek.dm
index a816ee62f09..9d2dfc3858b 100644
--- a/code/modules/antagonists/changeling/powers/shriek.dm
+++ b/code/modules/antagonists/changeling/powers/shriek.dm
@@ -18,7 +18,7 @@
if(ears)
ears.adjustEarDamage(0, 30)
C.adjust_timed_status_effect(25 SECONDS, /datum/status_effect/confusion)
- C.Jitter(50)
+ C.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
else
SEND_SOUND(C, sound('sound/effects/screech.ogg'))
diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm
index 8ead6c508f2..5ce3207b30c 100644
--- a/code/modules/antagonists/cult/blood_magic.dm
+++ b/code/modules/antagonists/cult/blood_magic.dm
@@ -444,7 +444,7 @@
carbon_target.silent += 6
carbon_target.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/stutter)
carbon_target.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/speech/slurring/cult)
- carbon_target.Jitter(1.5 SECONDS)
+ carbon_target.set_timed_status_effect(30 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
uses--
..()
diff --git a/code/modules/antagonists/heretic/items/madness_mask.dm b/code/modules/antagonists/heretic/items/madness_mask.dm
index 215a5014e8c..035bb3e9cd2 100644
--- a/code/modules/antagonists/heretic/items/madness_mask.dm
+++ b/code/modules/antagonists/heretic/items/madness_mask.dm
@@ -64,7 +64,7 @@
human_in_range.hallucination = min(human_in_range.hallucination + 5, 120)
if(DT_PROB(40, delta_time))
- human_in_range.Jitter(5)
+ human_in_range.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(human_in_range.getStaminaLoss() <= 85 && DT_PROB(30, delta_time))
human_in_range.emote(pick("giggle", "laugh"))
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm
index 68a85ab1d99..55115e0c2f4 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_buff.dm
@@ -45,7 +45,7 @@
healing_amount *= -0.5
if(owner.health > owner.crit_threshold && prob(4))
- owner.Jitter(10)
+ owner.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.set_timed_status_effect(10 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
owner.hallucination = min(owner.hallucination + 3, 24)
diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
index 62bcf2880e7..8a9491bb08a 100644
--- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
+++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm
@@ -226,11 +226,11 @@
sac_target.set_handcuffed(new /obj/item/restraints/handcuffs/energy/cult(sac_target))
sac_target.update_handcuffed()
sac_target.adjustOrganLoss(ORGAN_SLOT_BRAIN, 85, 150)
- sac_target.do_jitter_animation(100)
+ sac_target.do_jitter_animation()
log_combat(heretic_mind.current, sac_target, "sacrificed")
- addtimer(CALLBACK(sac_target, /mob/living/carbon.proc/do_jitter_animation, 100), SACRIFICE_SLEEP_DURATION * (1/3))
- addtimer(CALLBACK(sac_target, /mob/living/carbon.proc/do_jitter_animation, 100), SACRIFICE_SLEEP_DURATION * (2/3))
+ addtimer(CALLBACK(sac_target, /mob/living/carbon.proc/do_jitter_animation), SACRIFICE_SLEEP_DURATION * (1/3))
+ addtimer(CALLBACK(sac_target, /mob/living/carbon.proc/do_jitter_animation), SACRIFICE_SLEEP_DURATION * (2/3))
// If our target is dead, try to revive them
// and if we fail to revive them, don't proceede the chain
@@ -311,7 +311,7 @@
sac_target.flash_act()
sac_target.blur_eyes(15)
- sac_target.Jitter(10)
+ sac_target.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
sac_target.set_timed_status_effect(20 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
sac_target.hallucination += 12
sac_target.emote("scream")
@@ -432,7 +432,7 @@
// Oh god where are we?
sac_target.flash_act()
sac_target.adjust_timed_status_effect(60 SECONDS, /datum/status_effect/confusion)
- sac_target.Jitter(60)
+ sac_target.set_timed_status_effect(120 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
sac_target.blur_eyes(50)
sac_target.set_timed_status_effect(1 MINUTES, /datum/status_effect/dizziness, only_if_higher = TRUE)
sac_target.AdjustKnockdown(80)
diff --git a/code/modules/antagonists/heretic/structures/carving_knife.dm b/code/modules/antagonists/heretic/structures/carving_knife.dm
index 11407affb76..4884558ab34 100644
--- a/code/modules/antagonists/heretic/structures/carving_knife.dm
+++ b/code/modules/antagonists/heretic/structures/carving_knife.dm
@@ -241,7 +241,7 @@
carbon_victim.silent += 10
carbon_victim.adjust_timed_status_effect(1 MINUTES, /datum/status_effect/speech/stutter)
carbon_victim.adjust_timed_status_effect(5 SECONDS, /datum/status_effect/confusion)
- carbon_victim.Jitter(10)
+ carbon_victim.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
carbon_victim.set_timed_status_effect(40 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
carbon_victim.blind_eyes(2)
SEND_SIGNAL(carbon_victim, COMSIG_ADD_MOOD_EVENT, "gates_of_mansus", /datum/mood_event/gates_of_mansus)
diff --git a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
index 7f43464b01f..510db9e2cbc 100644
--- a/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
+++ b/code/modules/antagonists/traitor/equipment/Malf_Modules.dm
@@ -607,7 +607,7 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module))
if(isspaceturf(victim_turf) && !victim_turf.Adjacent(found_intercom)) //Prevents getting honked in space
continue
if(honk_victim.soundbang_act(intensity = 1, stun_pwr = 20, damage_pwr = 30, deafen_pwr = 60)) //Ear protection will prevent these effects
- honk_victim.Jitter(60)
+ honk_victim.set_timed_status_effect(120 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
to_chat(honk_victim, span_clown("HOOOOONK!"))
/// Robotic Factory: Places a large machine that converts humans that go through it into cyborgs. Unlocking this ability removes shunting.
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index d9ce824703c..4480ea50cae 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -1567,19 +1567,17 @@ GLOBAL_LIST_INIT(hallucination_list, list(
addtimer(CALLBACK(src, .proc/reset_shock_animation), 40)
target.playsound_local(get_turf(src), SFX_SPARKS, 100, 1)
target.staminaloss += 50
- target.Stun(40)
- target.jitteriness += 1000
- target.do_jitter_animation(target.jitteriness)
- addtimer(CALLBACK(src, .proc/shock_drop), 20)
+ target.Stun(4 SECONDS)
+ target.do_jitter_animation(300) // Maximum jitter
+ target.adjust_timed_status_effect(20 SECONDS, /datum/status_effect/jitter)
+ addtimer(CALLBACK(src, .proc/shock_drop), 2 SECONDS)
/datum/hallucination/shock/proc/reset_shock_animation()
- if(target.client)
- target.client.images.Remove(shock_image)
- target.client.images.Remove(electrocution_skeleton_anim)
+ target.client?.images.Remove(shock_image)
+ target.client?.images.Remove(electrocution_skeleton_anim)
/datum/hallucination/shock/proc/shock_drop()
- target.jitteriness = max(target.jitteriness - 990, 10) //Still jittery, but vastly less
- target.Paralyze(60)
+ target.Paralyze(6 SECONDS)
/datum/hallucination/husks
var/image/halbody
diff --git a/code/modules/mining/lavaland/tendril_loot.dm b/code/modules/mining/lavaland/tendril_loot.dm
index ab0595b85df..4efa7754564 100644
--- a/code/modules/mining/lavaland/tendril_loot.dm
+++ b/code/modules/mining/lavaland/tendril_loot.dm
@@ -784,7 +784,7 @@
living_target.apply_status_effect(/datum/status_effect/stagger)
var/datum/status_effect/agent_pinpointer/scan_pinpointer = ranged_ability_user.apply_status_effect(/datum/status_effect/agent_pinpointer/scan)
scan_pinpointer.scan_target = living_target
- living_target.Jitter(5 SECONDS)
+ living_target.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
to_chat(living_target, span_warning("You've been staggered!"))
living_target.add_filter("scan", 2, list("type" = "outline", "color" = COLOR_YELLOW, "size" = 1))
addtimer(CALLBACK(living_target, /atom/.proc/remove_filter, "scan"), 30 SECONDS)
diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm
index 73e179ad73e..7479f983612 100644
--- a/code/modules/mob/living/carbon/alien/organs.dm
+++ b/code/modules/mob/living/carbon/alien/organs.dm
@@ -137,7 +137,7 @@
owner.emote("scream")
owner.Paralyze(100)
- owner.jitteriness += 30
+ owner.adjust_timed_status_effect(1 MINUTES, /datum/status_effect/jitter)
owner.adjust_timed_status_effect(30 SECONDS, /datum/status_effect/confusion)
owner.adjust_timed_status_effect(1 MINUTES, /datum/status_effect/speech/stutter)
diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm
index e220c26d4e6..201da5c4dbe 100644
--- a/code/modules/mob/living/carbon/carbon_defense.dm
+++ b/code/modules/mob/living/carbon/carbon_defense.dm
@@ -385,15 +385,14 @@
if(should_stun)
Paralyze(40)
//Jitter and other fluff.
- jitteriness += 1000
- do_jitter_animation(jitteriness)
+ do_jitter_animation(300)
+ adjust_timed_status_effect(20 SECONDS, /datum/status_effect/jitter)
adjust_timed_status_effect(4 SECONDS, /datum/status_effect/speech/stutter)
- addtimer(CALLBACK(src, .proc/secondary_shock, should_stun), 20)
+ addtimer(CALLBACK(src, .proc/secondary_shock, should_stun), 2 SECONDS)
return shock_damage
-///Called slightly after electrocute act to reduce jittering and apply a secondary stun.
+///Called slightly after electrocute act to apply a secondary stun.
/mob/living/carbon/proc/secondary_shock(should_stun)
- jitteriness = max(jitteriness - 990, 10)
if(should_stun)
Paralyze(60)
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index bb1e1a3a7f8..08ec454c611 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -27,7 +27,6 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift)
. = ..()
- jitteriness = 0
if(client && !suiciding && !(client in GLOB.dead_players_during_shift))
GLOB.dead_players_during_shift += client
GLOB.deaths_during_shift++
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 431981a40f3..c8bbffe620d 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -100,15 +100,6 @@
if (length(status_examines))
. += status_examines
- //Jitters
- switch(jitteriness)
- if(300 to INFINITY)
- . += span_warning("[t_He] [t_is] convulsing violently!")
- if(200 to 300)
- . += span_warning("[t_He] [t_is] extremely jittery.")
- if(100 to 200)
- . += span_warning("[t_He] [t_is] twitching ever so slightly.")
-
var/appears_dead = FALSE
var/just_sleeping = FALSE
diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm
index e12868d9712..211b8c00084 100644
--- a/code/modules/mob/living/carbon/human/species_types/golems.dm
+++ b/code/modules/mob/living/carbon/human/species_types/golems.dm
@@ -1017,7 +1017,7 @@
H.show_message(span_narsiesmall("You cringe with pain as your body rings around you!"), MSG_AUDIBLE)
H.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE)
H.soundbang_act(2, 0, 100, 1)
- H.jitteriness += 7
+ H.adjust_timed_status_effect(14 SECONDS, /datum/status_effect/jitter)
var/distance = max(0,get_dist(get_turf(H),get_turf(M)))
switch(distance)
if(0 to 1)
@@ -1025,13 +1025,13 @@
M.playsound_local(H, 'sound/effects/gong.ogg', 100, TRUE)
M.soundbang_act(1, 0, 30, 3)
M.adjust_timed_status_effect(10 SECONDS, /datum/status_effect/confusion)
- M.jitteriness += 4
+ M.adjust_timed_status_effect(8 SECONDS, /datum/status_effect/jitter)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong)
if(2 to 3)
M.show_message(span_cult("GONG!"), MSG_AUDIBLE)
M.playsound_local(H, 'sound/effects/gong.ogg', 75, TRUE)
M.soundbang_act(1, 0, 15, 2)
- M.jitteriness += 3
+ M.adjust_timed_status_effect(6 SECONDS, /datum/status_effect/jitter)
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "gonged", /datum/mood_event/loud_gong)
else
M.show_message(span_warning("GONG!"), MSG_AUDIBLE)
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index 8ee5c50f848..8ab9e936756 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -434,14 +434,6 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(DT_PROB(2.5, delta_time))
AdjustSleeping(10 SECONDS)
- //Jitteriness
- if(jitteriness)
- do_jitter_animation(jitteriness)
- jitteriness = max(jitteriness - (restingpwr * delta_time), 0)
- SEND_SIGNAL(src, COMSIG_ADD_MOOD_EVENT, "jittery", /datum/mood_event/jittery)
- else
- SEND_SIGNAL(src, COMSIG_CLEAR_MOOD_EVENT, "jittery")
-
if(silent)
silent = max(silent - (0.5 * delta_time), 0)
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 8da222ca487..46e5ef01598 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -108,9 +108,6 @@
blur_eyes(effect * hit_percent)
if(EFFECT_DROWSY)
adjust_drowsyness(effect * hit_percent)
- if(EFFECT_JITTER)
- if((status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE))
- jitteriness = max(jitteriness,(effect * hit_percent))
return TRUE
/**
@@ -129,7 +126,7 @@
drowsy = 0,
blocked = 0, // This one's not an effect, don't be confused - it's block chance
stamina = 0, // This one's a damage type, and not an effect
- jitter = 0,
+ jitter = 0 SECONDS,
paralyze = 0,
immobilize = 0,
)
@@ -151,12 +148,12 @@
apply_effect(eyeblur, EFFECT_EYE_BLUR, blocked)
if(drowsy)
apply_effect(drowsy, EFFECT_DROWSY, blocked)
- if(jitter)
- apply_effect(jitter, EFFECT_JITTER, blocked)
if(stamina)
apply_damage(stamina, STAMINA, null, blocked)
+ if(jitter && (status_flags & CANSTUN) && !HAS_TRAIT(src, TRAIT_STUNIMMUNE))
+ adjust_timed_status_effect(jitter, /datum/status_effect/jitter)
if(slur)
adjust_timed_status_effect(slur, /datum/status_effect/speech/slurring/drunk)
if(stutter)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index e092764fe5f..17547597943 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -840,7 +840,6 @@
heal_overall_damage(INFINITY, INFINITY, INFINITY, null, TRUE) //heal brute and burn dmg on both organic and robotic limbs, and update health right away.
extinguish_mob()
set_drowsyness(0)
- jitteriness = 0
stop_sound_channel(CHANNEL_HEARTBEAT)
SEND_SIGNAL(src, COMSIG_LIVING_POST_FULLY_HEAL, admin_revive)
@@ -1110,13 +1109,6 @@
else if(!src.mob_negates_gravity())
step_towards(src,S)
-/mob/living/proc/do_jitter_animation(jitteriness)
- var/amplitude = min(4, (jitteriness/100) + 1)
- var/pixel_x_diff = rand(-amplitude, amplitude)
- var/pixel_y_diff = rand(-amplitude/3, amplitude/3)
- animate(src, pixel_x = pixel_x_diff, pixel_y = pixel_y_diff , time = 2, loop = 6, flags = ANIMATION_RELATIVE|ANIMATION_PARALLEL)
- animate(pixel_x = -pixel_x_diff , pixel_y = -pixel_y_diff , time = 2, flags = ANIMATION_RELATIVE)
-
/mob/living/proc/get_temperature(datum/gas_mixture/environment)
var/loc_temp = environment ? environment.temperature : T0C
if(isobj(loc))
diff --git a/code/modules/mob/living/simple_animal/bot/honkbot.dm b/code/modules/mob/living/simple_animal/bot/honkbot.dm
index b07e09c43c7..1bd0bfe3bb3 100644
--- a/code/modules/mob/living/simple_animal/bot/honkbot.dm
+++ b/code/modules/mob/living/simple_animal/bot/honkbot.dm
@@ -70,7 +70,7 @@
var/obj/item/organ/ears/target_ears = current_target.getorganslot(ORGAN_SLOT_EARS)
if(target_ears && !HAS_TRAIT_FROM(current_target, TRAIT_DEAF, CLOTHING_TRAIT))
target_ears.adjustEarDamage(0, 5) //far less damage than the H.O.N.K.
- current_target.Jitter(5 SECONDS)
+ current_target.set_timed_status_effect(100 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
current_target.Paralyze(6 SECONDS)
if(client) //prevent spam from players
limiting_spam = TRUE
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 6e46ded5e06..1672ff86d61 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -108,8 +108,6 @@
var/old_bodytemperature = 0
/// Drowsyness level of the mob
var/drowsyness = 0//Carbon
- /// Jitteryness level of the mob
- var/jitteriness = 0//Carbon
/// Hunger level of the mob
var/nutrition = NUTRITION_LEVEL_START_MIN // randomised in Initialize
/// Satiation level of the mob
diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm
index 36de97a319b..aa617e5face 100644
--- a/code/modules/mob/status_procs.dm
+++ b/code/modules/mob/status_procs.dm
@@ -1,11 +1,4 @@
-
//Here are the procs used to modify status effects of a mob.
-//The effects include: stun, knockdown, unconscious, sleeping, resting, jitteriness, dizziness, drowsyness, ear damage,
-// eye damage, eye_blind, eye_blurry, druggy, TRAIT_BLIND trait, and TRAIT_NEARSIGHT trait.
-
-///Set the jitter of a mob
-/mob/proc/Jitter(amount)
- jitteriness = max(jitteriness,amount,0)
/**
* Set drowsyness of a mob to passed value
diff --git a/code/modules/projectiles/guns/energy/beam_rifle.dm b/code/modules/projectiles/guns/energy/beam_rifle.dm
index 01a2e87700d..b1a5219f2c9 100644
--- a/code/modules/projectiles/guns/energy/beam_rifle.dm
+++ b/code/modules/projectiles/guns/energy/beam_rifle.dm
@@ -420,7 +420,7 @@
damage_type = BURN
armor_flag = ENERGY
range = 150
- jitter = 10
+ jitter = 20 SECONDS
var/obj/item/gun/energy/beam_rifle/gun
var/structure_pierce_amount = 0 //All set to 0 so the gun can manually set them during firing.
var/structure_bleed_coeff = 0
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index f7ff43701d8..ba2b2bd4691 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -153,7 +153,8 @@
var/unconscious = 0
var/eyeblur = 0
var/drowsy = 0
- var/jitter = 0
+ /// Jittering applied on projectile hit
+ var/jitter = 0 SECONDS
/// Extra stamina damage applied on projectile hit (in addition to the main damage)
var/stamina = 0
/// Stuttering applied on projectile hit
diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm
index fa7060cced9..3420667024c 100644
--- a/code/modules/projectiles/projectile/bullets/shotgun.dm
+++ b/code/modules/projectiles/projectile/bullets/shotgun.dm
@@ -40,7 +40,7 @@
damage = 5
paralyze = 100
stutter = 10 SECONDS
- jitter = 20
+ jitter = 40 SECONDS
range = 7
icon_state = "spark"
color = "#FFFF00"
diff --git a/code/modules/projectiles/projectile/energy/stun.dm b/code/modules/projectiles/projectile/energy/stun.dm
index 600c6aeae2f..662c08d748c 100644
--- a/code/modules/projectiles/projectile/energy/stun.dm
+++ b/code/modules/projectiles/projectile/energy/stun.dm
@@ -5,7 +5,7 @@
nodamage = FALSE
paralyze = 100
stutter = 10 SECONDS
- jitter = 20
+ jitter = 40 SECONDS
hitsound = 'sound/weapons/taserhit.ogg'
range = 7
tracer_type = /obj/effect/projectile/tracer/stun
@@ -23,7 +23,7 @@
if(C.dna && C.dna.check_mutation(/datum/mutation/human/hulk))
C.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk")
else if((C.status_flags & CANKNOCKDOWN) && !HAS_TRAIT(C, TRAIT_STUNIMMUNE))
- addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, jitter), 5)
+ addtimer(CALLBACK(C, /mob/living/carbon.proc/do_jitter_animation, 20), 5)
/obj/projectile/energy/electrode/on_range() //to ensure the bolt sparks when it reaches the end of its range if it didn't hit a target yet
do_sparks(1, TRUE, src)
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 9600b8579fd..176b59857e7 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -168,7 +168,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
drinker.adjust_drowsyness(-3 * REM * delta_time)
drinker.AdjustSleeping(-40 * REM * delta_time)
if(!HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE))
- drinker.Jitter(0.5 SECONDS)
+ drinker.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
. = TRUE
@@ -230,13 +230,13 @@ All effects don't start immediately, but rather get worse over time; the rate is
drinker.AdjustSleeping(-40 * REM * delta_time)
drinker.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, drinker.get_body_temp_normal())
if(!HAS_TRAIT(drinker, TRAIT_ALCOHOL_TOLERANCE))
- drinker.Jitter(0.5 SECONDS)
+ drinker.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
return TRUE
/datum/reagent/consumable/ethanol/thirteenloko/overdose_start(mob/living/drinker)
to_chat(drinker, span_userdanger("Your entire body violently jitters as you start to feel queasy. You really shouldn't have drank all of that [name]!"))
- drinker.Jitter(2 SECONDS)
+ drinker.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
drinker.Stun(1.5 SECONDS)
/datum/reagent/consumable/ethanol/thirteenloko/overdose_process(mob/living/drinker, delta_time, times_fired)
@@ -245,7 +245,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(held_item)
drinker.dropItemToGround(held_item)
to_chat(drinker, span_notice("Your hands jitter and you drop what you were holding!"))
- drinker.Jitter(1 SECONDS)
+ drinker.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(3.5, delta_time))
to_chat(drinker, span_notice("[pick("You have a really bad headache.", "Your eyes hurt.", "You find it hard to stay still.", "You feel your heart practically beating out of your chest.")]"))
@@ -267,7 +267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(DT_PROB(1.5, delta_time) && iscarbon(drinker))
drinker.visible_message(span_danger("[drinker] starts having a seizure!"), span_userdanger("You have a seizure!"))
drinker.Unconscious(10 SECONDS)
- drinker.Jitter(35 SECONDS)
+ drinker.set_timed_status_effect(700 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(0.5, delta_time) && iscarbon(drinker))
var/datum/disease/heart_attack = new /datum/disease/heart_failure
@@ -797,7 +797,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
..()
/datum/reagent/consumable/ethanol/beepsky_smash/on_mob_life(mob/living/carbon/drinker, delta_time, times_fired)
- drinker.Jitter(2)
+ drinker.set_timed_status_effect(4 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
var/obj/item/organ/liver/liver = drinker.getorganslot(ORGAN_SLOT_LIVER)
// if you have a liver and that liver is an officer's liver
if(liver && HAS_TRAIT(liver, TRAIT_LAW_ENFORCEMENT_METABOLISM))
@@ -1581,19 +1581,19 @@ All effects don't start immediately, but rather get worse over time; the rate is
if(DT_PROB(5, delta_time))
drinker.emote(pick("twitch","giggle"))
if(5 to 10)
- drinker.Jitter(20 * REM * delta_time)
+ drinker.set_timed_status_effect(40 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
drinker.set_timed_status_effect(40 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
drinker.set_timed_status_effect(1.5 MINUTES * REM * delta_time, /datum/status_effect/drugginess)
if(DT_PROB(10, delta_time))
drinker.emote(pick("twitch","giggle"))
if (10 to 200)
- drinker.Jitter(40 * REM * delta_time)
+ drinker.set_timed_status_effect(80 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
drinker.set_timed_status_effect(80 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
drinker.set_timed_status_effect(2 MINUTES * REM * delta_time, /datum/status_effect/drugginess)
if(DT_PROB(16, delta_time))
drinker.emote(pick("twitch","giggle"))
if(200 to INFINITY)
- drinker.Jitter(60 * REM * delta_time)
+ drinker.set_timed_status_effect(120 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
drinker.set_timed_status_effect(120 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
drinker.set_timed_status_effect(2.5 MINUTES * REM * delta_time, /datum/status_effect/drugginess)
if(DT_PROB(23, delta_time))
@@ -2386,7 +2386,7 @@ All effects don't start immediately, but rather get worse over time; the rate is
/datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/drinker, delta_time, times_fired)
if(drinker.mind?.holy_role)
drinker.adjustFireLoss(-2.5 * REM * delta_time, 0)
- drinker.jitteriness = max(drinker.jitteriness - (1 * REM * delta_time), 0)
+ drinker.adjust_timed_status_effect(-2 SECONDS * REM * delta_time, /datum/status_effect/jitter)
drinker.adjust_timed_status_effect(-2 SECONDS * REM * delta_time, /datum/status_effect/speech/stutter)
return ..()
diff --git a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
index c32f59995e0..e5dbd0e033f 100644
--- a/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
@@ -535,7 +535,7 @@
H.adjustOrganLoss(ORGAN_SLOT_HEART, max(volume/10, 1) * REM * delta_time) // your heart is barely keeping up!
- H.Jitter(rand(0, 2) * REM * delta_time)
+ H.set_timed_status_effect(rand(0 SECONDS, 4 SECONDS) * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
H.set_timed_status_effect(rand(0 SECONDS, 4 SECONDS) * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
if(DT_PROB(18, delta_time))
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index d493ee8ab42..5e27a43de19 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -284,7 +284,7 @@
glass_price = DRINK_PRICE_STOCK
/datum/reagent/consumable/coffee/overdose_process(mob/living/M, delta_time, times_fired)
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
/datum/reagent/consumable/coffee/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
@@ -313,7 +313,7 @@
/datum/reagent/consumable/tea/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
M.adjust_timed_status_effect(-4 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
M.adjust_drowsyness(-1 * REM * delta_time)
- M.jitteriness = max(M.jitteriness - (3 * REM * delta_time), 0)
+ M.adjust_timed_status_effect(-6 SECONDS * REM * delta_time, /datum/status_effect/jitter)
M.AdjustSleeping(-20 * REM * delta_time)
if(M.getToxLoss() && DT_PROB(10, delta_time))
M.adjustToxLoss(-1, 0)
@@ -367,7 +367,7 @@
M.adjust_drowsyness(-3 * REM * delta_time)
M.AdjustSleeping(-40 * REM * delta_time)
M.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, M.get_body_temp_normal())
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
. = TRUE
@@ -387,7 +387,7 @@
M.adjust_drowsyness(-3 * REM * delta_time)
M.AdjustSleeping(-60 * REM * delta_time)
M.adjust_bodytemperature(-7 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, M.get_body_temp_normal())
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.adjustToxLoss(1 * REM * delta_time, 0)
..()
. = TRUE
@@ -440,7 +440,7 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/consumable/roy_rogers/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.Jitter(6 * REM * delta_time) //not as strong as coffe, still this is a lot of sugar
+ M.set_timed_status_effect(12 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.adjust_drowsyness(-5 * REM * delta_time)
M.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, M.get_body_temp_normal())
return ..()
@@ -465,7 +465,7 @@
..()
/datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.Jitter(20 * REM * delta_time)
+ M.set_timed_status_effect(40 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.set_timed_status_effect(1 MINUTES * REM * delta_time, /datum/status_effect/drugginess)
M.adjust_timed_status_effect(3 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
M.set_drowsyness(0)
@@ -504,7 +504,7 @@
ADD_TRAIT(M, TRAIT_DOUBLE_TAP, type)
effect_enabled = TRUE
- M.Jitter(2 * REM * delta_time)
+ M.set_timed_status_effect(4 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(prob(50))
M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
if(current_cycle > 10)
@@ -533,7 +533,7 @@
..()
/datum/reagent/consumable/grey_bull/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.Jitter(20 * REM * delta_time)
+ M.set_timed_status_effect(40 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
M.set_drowsyness(0)
M.AdjustSleeping(-40 * REM * delta_time)
@@ -554,7 +554,7 @@
M.adjust_drowsyness(-7 * REM * delta_time)
M.AdjustSleeping(-20 * REM * delta_time)
M.adjust_bodytemperature(-5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, M.get_body_temp_normal())
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
. = TRUE
@@ -696,7 +696,7 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.Jitter(40 * REM * delta_time)
+ M.set_timed_status_effect(80 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
M.set_drowsyness(0)
M.AdjustSleeping(-40 * REM * delta_time)
@@ -749,7 +749,7 @@
M.adjust_drowsyness(-3 *REM * delta_time)
M.SetSleeping(0)
M.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, 0, M.get_body_temp_normal())
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(M.getBruteLoss() && DT_PROB(10, delta_time))
M.heal_bodypart_damage(1,0, 0)
..()
@@ -772,7 +772,7 @@
M.adjust_drowsyness(-6 * REM * delta_time)
M.SetSleeping(0)
M.adjust_bodytemperature(5 * REM * TEMPERATURE_DAMAGE_COEFFICIENT * delta_time, 0, M.get_body_temp_normal())
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(M.getBruteLoss() && DT_PROB(10, delta_time))
M.heal_bodypart_damage(1, 0, 0)
..()
diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
index b47e42f0cb7..4d90c0b9de5 100644
--- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm
@@ -84,7 +84,7 @@
var/smoke_message = pick("You feel relaxed.", "You feel calmed.","You feel alert.","You feel rugged.")
to_chat(M, span_notice("[smoke_message]"))
SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "smoked", /datum/mood_event/smoked, name)
- M.Jitter(0) //calms down any withdrawal jitters
+ M.remove_status_effect(/datum/status_effect/jitter)
M.AdjustStun(-50 * REM * delta_time)
M.AdjustKnockdown(-50 * REM * delta_time)
M.AdjustUnconscious(-50 * REM * delta_time)
@@ -164,7 +164,7 @@
M.AdjustParalyzed(-40 * REM * delta_time)
M.AdjustImmobilized(-40 * REM * delta_time)
M.adjustStaminaLoss(-2 * REM * delta_time, 0)
- M.Jitter(2 * REM * delta_time)
+ M.set_timed_status_effect(4 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, rand(1, 4) * REM * delta_time)
if(DT_PROB(2.5, delta_time))
M.emote(pick("twitch", "shiver"))
@@ -279,7 +279,7 @@
..()
/datum/reagent/drug/happiness/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.jitteriness = 0
+ M.remove_status_effect(/datum/status_effect/jitter)
M.remove_status_effect(/datum/status_effect/confusion)
M.disgust = 0
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.2 * REM * delta_time)
@@ -322,7 +322,7 @@
..()
/datum/reagent/drug/pumpup/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(2.5, delta_time))
to_chat(M, span_notice("[pick("Go! Go! GO!", "You feel ready...", "You feel invincible...")]"))
@@ -336,7 +336,7 @@
to_chat(M, span_userdanger("You can't stop shaking, your heart beats faster and faster..."))
/datum/reagent/drug/pumpup/overdose_process(mob/living/M, delta_time, times_fired)
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(2.5, delta_time))
M.drop_all_held_items()
if(DT_PROB(7.5, delta_time))
@@ -456,11 +456,11 @@
if(DT_PROB(5, delta_time))
psychonaut.emote(pick("twitch","giggle"))
if(5 to 10)
- psychonaut.Jitter(10 * REM * delta_time)
+ psychonaut.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(10, delta_time))
psychonaut.emote(pick("twitch","giggle"))
if (10 to INFINITY)
- psychonaut.Jitter(20 * REM * delta_time)
+ psychonaut.set_timed_status_effect(40 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(16, delta_time))
psychonaut.emote(pick("twitch","giggle"))
..()
@@ -761,7 +761,7 @@
. = ..()
SEND_SIGNAL(kronkaine_fiend, COMSIG_ADD_MOOD_EVENT, "tweaking", /datum/mood_event/stimulant_medium, name)
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 0.4 * REM * delta_time)
- kronkaine_fiend.Jitter(10 * REM * delta_time)
+ kronkaine_fiend.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
kronkaine_fiend.AdjustSleeping(-20 * REM * delta_time)
kronkaine_fiend.adjust_drowsyness(-5 * REM * delta_time)
if(volume < 10)
@@ -774,6 +774,6 @@
/datum/reagent/drug/kronkaine/overdose_process(mob/living/kronkaine_fiend, delta_time, times_fired)
. = ..()
kronkaine_fiend.adjustOrganLoss(ORGAN_SLOT_HEART, 1 * REM * delta_time)
- kronkaine_fiend.Jitter(10 * REM * delta_time)
+ kronkaine_fiend.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(10, delta_time))
to_chat(kronkaine_fiend, span_danger(pick("You feel like your heart is going to explode!", "Your ears are ringing!", "You sweat like a pig!", "You clench your jaw and grind your teeth.", "You feel prickles of pain in your chest.")))
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index 70c03cd9645..a86384d346d 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -440,7 +440,7 @@
if(DT_PROB(min(current_cycle/2, 12.5), delta_time))
to_chat(M, span_danger("You can't get the scent of garlic out of your nose! You can barely think..."))
M.Paralyze(10)
- M.Jitter(10)
+ M.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
else
var/obj/item/organ/liver/liver = M.getorganslot(ORGAN_SLOT_LIVER)
if(liver && HAS_TRAIT(liver, TRAIT_CULINARY_METABOLISM))
diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
index 06724bc0b69..bd544b8919d 100644
--- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm
@@ -86,7 +86,7 @@
// Remove all speech related status effects
for(var/effect in typesof(/datum/status_effect/speech))
M.remove_status_effect(effect)
- M.jitteriness = 0
+ M.remove_status_effect(/datum/status_effect/jitter)
M.hallucination = 0
REMOVE_TRAITS_NOT_IN(M, list(SPECIES_TRAIT, ROUNDSTART_TRAIT, ORGAN_TRAIT))
M.reagents.remove_all_type(/datum/reagent/toxin, 5 * REM * delta_time, FALSE, TRUE)
@@ -253,7 +253,7 @@
/datum/reagent/medicine/rezadone/overdose_process(mob/living/M, delta_time, times_fired)
M.adjustToxLoss(1 * REM * delta_time, 0)
M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
- M.Jitter(5 * REM * delta_time)
+ M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
. = TRUE
@@ -555,7 +555,7 @@
var/obj/item/I = M.get_active_held_item()
if(I && M.dropItemToGround(I))
to_chat(M, span_notice("Your hands spaz out and you drop what you were holding!"))
- M.Jitter(10)
+ M.set_timed_status_effect(20 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
M.AdjustAllImmobility(-20 * REM * delta_time * normalise_creation_purity())
M.adjustStaminaLoss(-1 * REM * delta_time * normalise_creation_purity(), FALSE)
@@ -590,7 +590,7 @@
/datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
if(DT_PROB(5, delta_time))
M.adjust_drowsyness(1)
- M.jitteriness -= 1 * REM * delta_time
+ M.adjust_timed_status_effect(-2 SECONDS * REM * delta_time, /datum/status_effect/jitter)
holder.remove_reagent(/datum/reagent/toxin/histamine, 3 * REM * delta_time)
..()
@@ -630,7 +630,7 @@
if(DT_PROB(18, delta_time))
M.drop_all_held_items()
M.set_timed_status_effect(4 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
- M.Jitter(2)
+ M.set_timed_status_effect(4 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
@@ -774,14 +774,14 @@
M.losebreath = 0
if(DT_PROB(10, delta_time))
M.set_timed_status_effect(10 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
- M.Jitter(5)
+ M.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
/datum/reagent/medicine/atropine/overdose_process(mob/living/M, delta_time, times_fired)
M.adjustToxLoss(0.5 * REM * delta_time, 0)
. = TRUE
M.set_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
- M.Jitter(1 * REM * delta_time)
+ M.set_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
..()
/datum/reagent/medicine/epinephrine
@@ -973,7 +973,7 @@
chemical_flags = REAGENT_CAN_BE_SYNTHESIZED
/datum/reagent/medicine/mutadone/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.jitteriness = 0
+ M.remove_status_effect(/datum/status_effect/jitter)
if(M.has_dna())
M.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA), TRUE)
if(!QDELETED(M)) //We were a monkey, now a human
@@ -1148,7 +1148,7 @@
M.adjustToxLoss(-3 * REM * delta_time, 0)
M.adjustCloneLoss(-1 * REM * delta_time, 0)
M.adjustStaminaLoss(-3 * REM * delta_time, 0)
- M.jitteriness = clamp(M.jitteriness + (3 * REM * delta_time), 0, 30)
+ M.adjust_timed_status_effect(6 SECONDS * REM * delta_time, /datum/status_effect/jitter, max_duration = 1 MINUTES)
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2 * REM * delta_time, 150)
if(DT_PROB(5, delta_time))
M.say(pick("Yeah, well, you know, that's just, like, uh, your opinion, man.", "Am I glad he's frozen in there and that we're out here, and that he's the sheriff and that we're frozen out here, and that we're in there, and I just remembered, we're out here. What I wanna know is: Where's the caveman?", "It ain't me, it ain't me...", "Make love, not war!", "Stop, hey, what's that sound? Everybody look what's going down...", "Do you believe in magic in a young girl's heart?"), forced = /datum/reagent/medicine/earthsblood)
@@ -1190,8 +1190,10 @@
for(var/datum/reagent/drug/R in M.reagents.reagent_list)
M.reagents.remove_reagent(R.type, 5 * REM * delta_time)
M.adjust_drowsyness(2 * REM * delta_time)
- if(M.jitteriness >= 3)
- M.jitteriness -= 3 * REM * delta_time
+
+ if(M.get_timed_status_effect_duration(/datum/status_effect/jitter) >= 6 SECONDS)
+ M.adjust_timed_status_effect(-6 SECONDS * REM * delta_time, /datum/status_effect/jitter)
+
if (M.hallucination >= 5)
M.hallucination -= 5 * REM * delta_time
if(DT_PROB(10, delta_time))
@@ -1212,7 +1214,7 @@
..()
metabolizer.AdjustAllImmobility(-20 * REM * delta_time)
metabolizer.adjustStaminaLoss(-10 * REM * delta_time, 0)
- metabolizer.Jitter(10 * REM * delta_time)
+ metabolizer.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
metabolizer.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
return TRUE
@@ -1228,7 +1230,7 @@
REMOVE_TRAIT(L, TRAIT_BATON_RESISTANCE, type)
L.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/damage_slowdown)
L.remove_status_effect(/datum/status_effect/dizziness)
- L.Jitter(0)
+ L.remove_status_effect(/datum/status_effect/jitter)
/datum/reagent/medicine/changelingadrenaline/overdose_process(mob/living/metabolizer, delta_time, times_fired)
metabolizer.adjustToxLoss(1 * REM * delta_time, 0)
@@ -1325,7 +1327,7 @@
overdose_threshold = overdose_threshold + ((rand(-10, 10) / 10) * REM * delta_time) // for extra fun
metabolizer.AdjustAllImmobility(-5 * REM * delta_time)
metabolizer.adjustStaminaLoss(-0.5 * REM * delta_time, 0)
- metabolizer.Jitter(1)
+ metabolizer.set_timed_status_effect(1 SECONDS * REM * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
metabolization_rate = 0.005 * REAGENTS_METABOLISM * rand(5, 20) // randomizes metabolism between 0.02 and 0.08 per second
. = TRUE
..()
@@ -1338,7 +1340,7 @@
overdose_progress++
switch(overdose_progress)
if(1 to 40)
- M.jitteriness = min(M.jitteriness + (1 * REM * delta_time), 10)
+ M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/jitter, max_duration = 20 SECONDS)
M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/speech/stutter, max_duration = 20 SECONDS)
M.set_timed_status_effect(10 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
if(DT_PROB(30, delta_time))
@@ -1346,7 +1348,7 @@
if(41 to 80)
M.adjustOxyLoss(0.1 * REM * delta_time, 0)
M.adjustStaminaLoss(0.1 * REM * delta_time, 0)
- M.jitteriness = min(M.jitteriness + (1 * REM * delta_time), 20)
+ M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/jitter, max_duration = 40 SECONDS)
M.adjust_timed_status_effect(2 SECONDS * REM * delta_time, /datum/status_effect/speech/stutter, max_duration = 40 SECONDS)
M.set_timed_status_effect(20 SECONDS * REM * delta_time, /datum/status_effect/dizziness, only_if_higher = TRUE)
if(DT_PROB(30, delta_time))
@@ -1385,7 +1387,7 @@
..()
/datum/reagent/medicine/psicodine/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.jitteriness = max(M.jitteriness - (6 * REM * delta_time), 0)
+ M.adjust_timed_status_effect(-12 SECONDS * REM * delta_time, /datum/status_effect/jitter)
M.adjust_timed_status_effect(-12 SECONDS * REM * delta_time, /datum/status_effect/dizziness)
M.adjust_timed_status_effect(-6 SECONDS * REM * delta_time, /datum/status_effect/confusion)
M.disgust = max(M.disgust - (6 * REM * delta_time), 0)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index e27c247c28b..dfbce20f15f 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -284,7 +284,7 @@
data = list("misc" = 0)
data["misc"] += delta_time SECONDS * REM
- M.jitteriness = min(M.jitteriness + (2 * delta_time), 10)
+ M.adjust_timed_status_effect(4 SECONDS * delta_time, /datum/status_effect/jitter, max_duration = 20 SECONDS)
if(IS_CULTIST(M))
for(var/datum/action/innate/cult/blood_magic/BM in M.actions)
to_chat(M, span_cultlarge("Your blood rites falter as holy water scours your body!"))
@@ -304,7 +304,7 @@
if(IS_CULTIST(M))
M.mind.remove_antag_datum(/datum/antagonist/cult)
M.Unconscious(100)
- M.jitteriness = 0
+ M.remove_status_effect(/datum/status_effect/jitter)
M.remove_status_effect(/datum/status_effect/speech/stutter)
holder.remove_reagent(type, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better??
return
@@ -1112,7 +1112,7 @@
/datum/reagent/bluespace/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
if(current_cycle > 10 && DT_PROB(7.5, delta_time))
to_chat(M, span_warning("You feel unstable..."))
- M.Jitter(2)
+ M.set_timed_status_effect(2 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
current_cycle = 1
addtimer(CALLBACK(M, /mob/living/proc/bluespace_shuffle), 30)
..()
@@ -1252,7 +1252,7 @@
addiction_types = list(/datum/addiction/opiods = 10)
/datum/reagent/impedrezene/on_mob_life(mob/living/carbon/M, delta_time, times_fired)
- M.jitteriness = max(M.jitteriness - (2.5*delta_time),0)
+ M.adjust_timed_status_effect(-5 SECONDS * delta_time, /datum/status_effect/jitter)
if(DT_PROB(55, delta_time))
M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 2)
if(DT_PROB(30, delta_time))
diff --git a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
index f65ab66ade2..375963966bf 100644
--- a/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
+++ b/code/modules/reagents/chemistry/reagents/unique/eigenstasium.dm
@@ -95,7 +95,7 @@
/datum/reagent/eigenstate/overdose_start(mob/living/living_mob) //Overdose, makes you teleport randomly
to_chat(living_mob, span_userdanger("You feel like your perspective is being ripped apart as you begin flitting in and out of reality!"))
- living_mob.Jitter(20)
+ living_mob.set_timed_status_effect(40 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
metabolization_rate += 0.5 //So you're not stuck forever teleporting.
if(iscarbon(living_mob))
var/mob/living/carbon/carbon_mob = living_mob
diff --git a/code/modules/reagents/withdrawal/generic_addictions.dm b/code/modules/reagents/withdrawal/generic_addictions.dm
index 321b5cea4d5..9a9dd2e1c59 100644
--- a/code/modules/reagents/withdrawal/generic_addictions.dm
+++ b/code/modules/reagents/withdrawal/generic_addictions.dm
@@ -54,16 +54,16 @@
/datum/addiction/alcohol/withdrawal_stage_1_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(5 * delta_time)
+ affected_carbon.set_timed_status_effect(10 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
/datum/addiction/alcohol/withdrawal_stage_2_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(10 * delta_time)
+ affected_carbon.set_timed_status_effect(20 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
affected_carbon.hallucination = max(5 SECONDS, affected_carbon.hallucination)
/datum/addiction/alcohol/withdrawal_stage_3_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(15 * delta_time)
+ affected_carbon.set_timed_status_effect(30 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
affected_carbon.hallucination = max(5 SECONDS, affected_carbon.hallucination)
if(DT_PROB(4, delta_time))
if(!HAS_TRAIT(affected_carbon, TRAIT_ANTICONVULSANT))
@@ -241,16 +241,16 @@
/datum/addiction/nicotine/withdrawal_enters_stage_1(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(5 * delta_time)
+ affected_carbon.set_timed_status_effect(10 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
/datum/addiction/nicotine/withdrawal_stage_2_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(10 * delta_time)
+ affected_carbon.set_timed_status_effect(20 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(10, delta_time))
affected_carbon.emote("cough")
/datum/addiction/nicotine/withdrawal_stage_3_process(mob/living/carbon/affected_carbon, delta_time)
. = ..()
- affected_carbon.Jitter(15 * delta_time)
+ affected_carbon.set_timed_status_effect(30 SECONDS * delta_time, /datum/status_effect/jitter, only_if_higher = TRUE)
if(DT_PROB(15, delta_time))
affected_carbon.emote("cough")
diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
index efc557c93c5..ad1002148bb 100644
--- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
+++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm
@@ -212,7 +212,7 @@
/datum/status_effect/bonechill/tick()
if(prob(50))
owner.adjustFireLoss(1)
- owner.Jitter(3)
+ owner.set_timed_status_effect(6 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
owner.adjust_bodytemperature(-10)
if(ishuman(owner))
var/mob/living/carbon/human/humi = owner
diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm
index 2b00fc069e4..d5ea55db256 100644
--- a/code/modules/surgery/organs/heart.dm
+++ b/code/modules/surgery/organs/heart.dm
@@ -79,10 +79,11 @@
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
- if(owner.jitteriness)
+ if(owner.has_status_effect(/datum/status_effect/jitter))
if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW))
owner.playsound_local(get_turf(owner), fastbeat, 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
beat = BEAT_FAST
+
else if(beat == BEAT_FAST)
owner.stop_sound_channel(CHANNEL_HEARTBEAT)
beat = BEAT_NONE
diff --git a/code/modules/surgery/organs/stomach/_stomach.dm b/code/modules/surgery/organs/stomach/_stomach.dm
index 5805f674ee1..0cab043c404 100644
--- a/code/modules/surgery/organs/stomach/_stomach.dm
+++ b/code/modules/surgery/organs/stomach/_stomach.dm
@@ -152,7 +152,7 @@
else if(human.satiety < 0)
human.satiety++
if(DT_PROB(round(-human.satiety/77), delta_time))
- human.Jitter(5)
+ human.set_timed_status_effect(10 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
hunger_rate = 3 * HUNGER_FACTOR
hunger_rate *= human.physiology.hunger_mod
human.adjust_nutrition(-hunger_rate * delta_time)
@@ -220,12 +220,12 @@
disgusted.adjust_timed_status_effect(2 SECONDS, /datum/status_effect/confusion)
if(DT_PROB(5, delta_time) && !disgusted.stat)
to_chat(disgusted, span_warning("You feel kind of iffy..."))
- disgusted.jitteriness = max(disgusted.jitteriness - 3, 0)
+ disgusted.adjust_timed_status_effect(-6 SECONDS, /datum/status_effect/jitter)
if(disgust >= DISGUST_LEVEL_VERYGROSS)
if(DT_PROB(pukeprob, delta_time)) //iT hAndLeS mOrE ThaN PukInG
disgusted.adjust_timed_status_effect(2.5 SECONDS, /datum/status_effect/confusion)
disgusted.adjust_timed_status_effect(2 SECONDS, /datum/status_effect/speech/stutter)
- disgusted.vomit(10, 0, 1, 0, 1, 0)
+ disgusted.vomit(10, distance = 0, vomit_type = NONE)
disgusted.set_timed_status_effect(10 SECONDS, /datum/status_effect/dizziness, only_if_higher = TRUE)
if(disgust >= DISGUST_LEVEL_DISGUSTED)
if(DT_PROB(13, delta_time))
diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm
index 5c0d1aae353..e8d1557f1d7 100644
--- a/code/modules/surgery/tools.dm
+++ b/code/modules/surgery/tools.dm
@@ -399,7 +399,7 @@
playsound(get_turf(patient), 'sound/items/ratchet.ogg', 20, TRUE)
if(patient.stat >= UNCONSCIOUS || HAS_TRAIT(patient, TRAIT_INCAPACITATED)) //if you're incapacitated (due to paralysis, a stun, being in staminacrit, etc.), critted, unconscious, or dead, it's much easier to properly line up a snip
amputation_speed_mod *= 0.5
- if(patient.stat != DEAD && patient.jitteriness) //jittering will make it harder to secure the shears, even if you can't otherwise move
+ if(patient.stat != DEAD && patient.has_status_effect(/datum/status_effect/jitter)) //jittering will make it harder to secure the shears, even if you can't otherwise move
amputation_speed_mod *= 1.5 //15*0.5*1.5=11.25, so staminacritting someone who's jittering (from, say, a stun baton) won't give you enough time to snip their head off, but staminacritting someone who isn't jittering will
if(do_after(user, toolspeed * 15 SECONDS * amputation_speed_mod, target = patient))
diff --git a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
index e1e1e0d20ee..407c699a574 100644
--- a/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
+++ b/code/modules/vehicles/mecha/equipment/weapons/weapons.dm
@@ -203,7 +203,7 @@
M.Stun(200)
M.Unconscious(80)
else
- M.Jitter(500)
+ M.set_timed_status_effect(1000 SECONDS, /datum/status_effect/jitter, only_if_higher = TRUE)
log_message("Honked from [src.name]. HONK!", LOG_MECHA)
var/turf/T = get_turf(src)
diff --git a/tgstation.dme b/tgstation.dme
index 2816ec3f8d6..e69f1055cff 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -1134,6 +1134,7 @@
#include "code\datums\status_effects\debuffs\drugginess.dm"
#include "code\datums\status_effects\debuffs\drunk.dm"
#include "code\datums\status_effects\debuffs\fire_stacks.dm"
+#include "code\datums\status_effects\debuffs\jitteriness.dm"
#include "code\datums\status_effects\debuffs\speech_debuffs.dm"
#include "code\datums\status_effects\debuffs\strandling.dm"
#include "code\datums\votes\_vote_datum.dm"