diff --git a/code/modules/projectiles/projectile/homing_projectiles.dm b/code/modules/projectiles/projectile/homing_projectiles.dm
index f3c0d87c971..b5bcee7ddc6 100644
--- a/code/modules/projectiles/projectile/homing_projectiles.dm
+++ b/code/modules/projectiles/projectile/homing_projectiles.dm
@@ -30,6 +30,8 @@
nodamage = 1
armour_penetration_percentage = 100
flag = MAGIC
+ antimagic_flags = MAGIC_RESISTANCE
+ antimagic_charge_cost = 1
/obj/item/projectile/homing/magic/toolbox
name = "magic toolbox"
@@ -68,6 +70,9 @@
/obj/item/projectile/homing/magic/homing_fireball/on_hit(mob/living/target)
. = ..()
+ if(ismob(target))
+ if(!.)
+ return .
explosion(get_turf(target), explosion_devastate, explosion_heavy, explosion_light, explosion_flash, 0, flame_range = explosion_fire, cause = "Homing Fireball")
if(istype(target)) //multiple flavors of pain
target.adjustFireLoss(10) // does 20 brute, and 10 burn + explosion. Pretty brutal.
diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm
index 2f9989eb0b5..ddfc2c4e417 100644
--- a/code/modules/projectiles/projectile/magic_projectiles.dm
+++ b/code/modules/projectiles/projectile/magic_projectiles.dm
@@ -6,28 +6,8 @@
nodamage = 1
armour_penetration_percentage = 100
flag = MAGIC
- /// determines what type of antimagic can block the spell projectile
- var/antimagic_flags = MAGIC_RESISTANCE
- /// determines the drain cost on the antimagic item
- var/antimagic_charge_cost = 1
-
-/obj/item/projectile/magic/prehit(atom/target)
- if(isliving(target))
- var/mob/living/victim = target
- if(victim.can_block_magic(antimagic_flags, antimagic_charge_cost))
- visible_message("[src] fizzles on contact with [victim]!")
- damage = 0
- nodamage = 1
- return FALSE
- return ..()
-
-/obj/item/projectile/magic/on_hit(atom/target, blocked, hit_zone)
- if(isliving(target))
- var/mob/living/victim = target
- if(victim.can_block_magic(antimagic_flags, antimagic_charge_cost)) // Yes we have to check this twice welcome to bullet hell code
- return FALSE
- return ..()
-
+ antimagic_flags = MAGIC_RESISTANCE
+ antimagic_charge_cost = 1
/obj/item/projectile/magic/death
name = "bolt of death"
@@ -46,21 +26,6 @@
impact_light_range = 2.5
impact_light_color_override = LIGHT_COLOR_PURPLE
-/obj/item/projectile/magic/fireball
- name = "bolt of fireball"
- icon_state = "fireball"
- damage = 10
- damage_type = BRUTE
- nodamage = 0
- immolate = 6
-
- //explosion values
- var/exp_devastate = -1
- var/exp_heavy = 0
- var/exp_light = 2
- var/exp_flash = 3
- var/exp_fire = 2
-
/obj/item/projectile/magic/death/on_hit(mob/living/carbon/target)
. = ..()
if(!.)
@@ -79,6 +44,21 @@
target.visible_message("[target] topples backwards as the death bolt impacts [target.p_them()]!")
+/obj/item/projectile/magic/fireball
+ name = "bolt of fireball"
+ icon_state = "fireball"
+ damage = 10
+ damage_type = BRUTE
+ nodamage = 0
+ immolate = 6
+
+ // explosion values
+ var/exp_devastate = -1
+ var/exp_heavy = 0
+ var/exp_light = 2
+ var/exp_flash = 3
+ var/exp_fire = 2
+
/obj/item/projectile/magic/fireball/Range()
var/turf/T1 = get_step(src,turn(dir, -45))
var/turf/T2 = get_step(src,turn(dir, 45))
@@ -99,13 +79,13 @@
/obj/item/projectile/magic/fireball/on_hit(target)
. = ..()
- if(!.)
- return .
- var/turf/T = get_turf(target)
- explosion(T, exp_devastate, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire, cause = name)
+ if(ismob(target))
+ if(!.)
+ return .
+ explosion(get_turf(target), exp_devastate, exp_heavy, exp_light, exp_flash, 0, flame_range = exp_fire, cause = name)
if(ismob(target)) //multiple flavors of pain
var/mob/living/M = target
- M.take_overall_damage(0,10) //between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
+ M.adjustFireLoss(10) // between this 10 burn, the 10 brute, the explosion brute, and the onfire burn, your at about 65 damage if you stop drop and roll immediately
/obj/item/projectile/magic/fireball/infernal
diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm
index 81be0ad0f38..538383ac87e 100644
--- a/code/modules/projectiles/projectile_base.dm
+++ b/code/modules/projectiles/projectile_base.dm
@@ -135,6 +135,11 @@
/// Can our ricochet autoaim hit our firer?
var/ricochet_shoots_firer = TRUE
+ /// determines what type of antimagic can block the spell projectile
+ var/antimagic_flags
+ /// determines the drain cost on the antimagic item
+ var/antimagic_charge_cost
+
/obj/item/projectile/New()
return ..()
@@ -160,12 +165,23 @@
qdel(src)
/obj/item/projectile/proc/prehit(atom/target)
+ if(isliving(target))
+ var/mob/living/victim = target
+ if(victim.can_block_magic(antimagic_flags, antimagic_charge_cost))
+ visible_message("[src] fizzles on contact with [victim]!")
+ damage = 0
+ nodamage = 1
+ return FALSE
return TRUE
/obj/item/projectile/proc/on_hit(atom/target, blocked = 0, hit_zone)
var/turf/target_loca = get_turf(target)
var/hitx
var/hity
+ if(isliving(target))
+ var/mob/living/victim = target
+ if(victim.can_block_magic(antimagic_flags, antimagic_charge_cost)) // Yes we have to check this twice welcome to bullet hell code
+ return FALSE
if(target == original)
hitx = target.pixel_x + p_x - 16
hity = target.pixel_y + p_y - 16