diff --git a/code/modules/antagonists/changeling/powers/adrenaline.dm b/code/modules/antagonists/changeling/powers/adrenaline.dm
index a9d85d0fed..f69616159d 100644
--- a/code/modules/antagonists/changeling/powers/adrenaline.dm
+++ b/code/modules/antagonists/changeling/powers/adrenaline.dm
@@ -12,5 +12,5 @@
//Recover from stuns.
/obj/effect/proc_holder/changeling/adrenaline/sting_action(mob/living/user)
- user.do_adrenaline(100, FALSE, 70, 0, TRUE, list("epinephrine" = 3, "changelingmeth" = 10, "mannitol" = 10, "omnizine" = 10, "changelingadrenaline" = 5), "Energy rushes through us.")
+ user.do_adrenaline(50, FALSE, 70, 0, TRUE, list("epinephrine" = 3, "changelingmeth" = 10, "mannitol" = 10, "omnizine" = 10, "changelingadrenaline" = 5), "Energy rushes through us.", 50, 0.5, 100)
return TRUE
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 65ed57a6f1..c10367d24e 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1190,7 +1190,10 @@
clamp_immobility_to = 0,
reset_misc = TRUE,
healing_chems = list("inaprovaline" = 3, "synaptizine" = 10, "omnizine" = 10, "stimulants" = 10),
- message = "You feel a surge of energy!"
+ message = "You feel a surge of energy!",
+ stamina_buffer_boost = 0, //restores stamina buffer rather than just health
+ scale_stamina_loss_recovery, //defaults to null. if this is set, restores loss * this stamina. make sure it's a fraction.
+ stamina_loss_recovery_bypass = 0 //amount of stamina loss to ignore during calculation
)
if(AmountSleeping() > clamp_unconscious_to)
SetSleeping(clamp_unconscious_to)
@@ -1201,6 +1204,9 @@
if(AmountKnockdown() > clamp_immobility_to)
SetKnockdown(clamp_immobility_to)
adjustStaminaLoss(max(0, -stamina_boost))
+ adjustStaminaLossBuffered(max(0, -stamina_buffer_boost))
+ if(scale_stamina_loss_recovery)
+ adjustStaminaLoss(max(-((getStaminaLoss() - stamina_loss_recovery_bypass) * scale_stamina_loss_recovery), 0))
if(put_on_feet)
resting = FALSE
lying = FALSE