diff --git a/code/datums/spell.dm b/code/datums/spell.dm
index 813604a1431..33c84d2eba3 100644
--- a/code/datums/spell.dm
+++ b/code/datums/spell.dm
@@ -62,6 +62,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
var/charge_type = "recharge" //can be recharge or charges, see charge_max and charge_counter descriptions; can also be based on the holder's vars now, use "holder_var" for that
var/charge_max = 100 //recharge time in deciseconds if charge_type = "recharge" or starting charges if charge_type = "charges"
+ var/starts_charged = TRUE //Does this spell start ready to go?
var/charge_counter = 0 //can only cast spells if it equals recharge, ++ each decisecond if charge_type = "recharge" or -- each cast if charge_type = "charges"
var/still_recharging_msg = "The spell is still recharging."
@@ -193,9 +194,11 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/New()
..()
action = new(src)
-
still_recharging_msg = "[name] is still recharging."
- charge_counter = charge_max
+ if(starts_charged)
+ charge_counter = charge_max
+ else
+ start_recharge()
/obj/effect/proc_holder/spell/Destroy()
QDEL_NULL(action)
@@ -212,10 +215,14 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
/obj/effect/proc_holder/spell/proc/start_recharge()
if(action)
action.UpdateButtonIcon()
- while(charge_counter < charge_max)
- sleep(1)
- charge_counter++
- if(action)
+ addtimer(CALLBACK(src, .add_charge), 10)
+
+/obj/effect/proc_holder/spell/proc/add_charge()
+ charge_counter += 10
+ if(charge_counter < charge_max) //Needs to charge some more
+ addtimer(CALLBACK(src, .add_charge), 10)
+ return
+ if(action) //We got this far, it's charged
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/proc/perform(list/targets, recharge = 1, mob/user = usr) //if recharge is started is important for the trigger spells
diff --git a/code/modules/mob/dead/observer/spells.dm b/code/modules/mob/dead/observer/spells.dm
index 523e27c0621..916ff9aa9b8 100644
--- a/code/modules/mob/dead/observer/spells.dm
+++ b/code/modules/mob/dead/observer/spells.dm
@@ -17,6 +17,7 @@ GLOBAL_LIST_INIT(boo_phrases, list(
school = "transmutation"
charge_max = 600
+ starts_charged = FALSE
clothes_req = 0
stat_allowed = 1
invocation = ""