diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
index 5f4d11a7112..e3675ce0c24 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm
@@ -215,6 +215,7 @@ Doesn't work on other aliens/AI.*/
if(user.getPlasma() < p_cost)
user << "You need at least [p_cost] plasma to spit."
+ remove_ranged_ability(user)
return
var/turf/T = user.loc
diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm
index ce77ac1c1ef..d1e79c9cde5 100644
--- a/code/modules/spells/spell.dm
+++ b/code/modules/spells/spell.dm
@@ -9,7 +9,7 @@
var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin verb for now
/obj/effect/proc_holder/proc/InterceptClickOn(mob/living/user, params, atom/A)
- if(user.ranged_ability && user.ranged_ability != src)
+ if(user.ranged_ability != src)
user << "[user.ranged_ability.name] has been disabled."
user.ranged_ability.remove_ranged_ability(user)
return TRUE //TRUE for failed, FALSE for passed.
@@ -31,7 +31,7 @@ var/list/spells = typesof(/obj/effect/proc_holder/spell) //needed for the badmin
update_icon()
/obj/effect/proc_holder/proc/remove_ranged_ability(mob/living/user, var/msg)
- if(!user || !user.client ||user.ranged_ability != src) //To avoid removing the wrong ability
+ if(!user || !user.client || (user.ranged_ability && user.ranged_ability != src)) //To avoid removing the wrong ability
return
user.ranged_ability = null
user.client.click_intercept = null
diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm
index ad4ffe90678..2a57323aabf 100644
--- a/code/modules/spells/spell_types/wizard.dm
+++ b/code/modules/spells/spell_types/wizard.dm
@@ -270,10 +270,16 @@
/obj/effect/proc_holder/spell/fireball/Click()
var/mob/living/user = usr
- if(!istype(user) || !can_cast(user))
+ if(!istype(user))
return
var/msg
+
+ if(!can_cast(user))
+ msg = "You can no longer cast Fireball."
+ remove_ranged_ability(user, msg)
+ return
+
if(active)
msg = "You extinguish your fireball...for now."
remove_ranged_ability(user, msg)
@@ -282,20 +288,24 @@
add_ranged_ability(user, msg)
/obj/effect/proc_holder/spell/fireball/update_icon()
+ if(!action)
+ return
action.button_icon_state = "fireball[active]"
action.UpdateButtonIcon()
/obj/effect/proc_holder/spell/fireball/InterceptClickOn(mob/living/user, params, atom/target)
if(..())
- return
+ return FALSE
if(!cast_check(0, user))
remove_ranged_ability(user)
- return
+ return FALSE
var/list/targets = list(target)
perform(targets,user = user)
+ return TRUE
+
/obj/effect/proc_holder/spell/fireball/cast(list/targets, mob/living/user)
var/target = targets[1] //There is only ever one target for fireball
var/turf/T = user.loc