diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 75b921678dd..68bb23e8198 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -255,17 +255,30 @@ return ..() /obj/projectile/colossus - name ="death bolt" - icon_state= "chronobolt" + name = "death bolt" + icon_state = "chronobolt" damage = 25 armour_penetration = 100 speed = 2 eyeblur = 0 damage_type = BRUTE pass_flags = PASSTABLE + var/explode_hit_objects = TRUE + +/obj/projectile/colossus/can_hit_target(atom/target, direct_target = FALSE, ignore_loc = FALSE, cross_failed = FALSE) + if(isliving(target)) + direct_target = TRUE + return ..(target, direct_target, ignore_loc, cross_failed) /obj/projectile/colossus/on_hit(atom/target, blocked = FALSE) . = ..() + if(isliving(target)) + var/mob/living/dust_mob = target + if(dust_mob.stat == DEAD) + dust_mob.dust() + return + if(!explode_hit_objects) + return if(isturf(target) || isobj(target)) if(isobj(target)) SSexplosions.med_mov_atom += target diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm index 4d52a82ad3d..af26b42de55 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/demonic_frost_miner.dm @@ -115,7 +115,7 @@ Difficulty: Extremely Hard else ice_shotgun(5, list(list(0, 30, 60, 90, 120, 150, 180, 210, 240, 270, 300, 330), list(-30, -15, 0, 15, 30))) -/obj/projectile/frost_orb +/obj/projectile/colossus/frost_orb name = "frost orb" icon_state = "ice_1" damage = 20 @@ -124,20 +124,21 @@ Difficulty: Extremely Hard homing_turn_speed = 30 damage_type = BURN -/obj/projectile/frost_orb/on_hit(atom/target, blocked = FALSE) +/obj/projectile/colossus/frost_orb/on_hit(atom/target, blocked = FALSE) . = ..() if(isturf(target) || isobj(target)) target.ex_act(EXPLODE_HEAVY) -/obj/projectile/snowball +/obj/projectile/colossus/snowball name = "machine-gun snowball" icon_state = "nuclear_particle" damage = 5 armour_penetration = 100 speed = 3 damage_type = BRUTE + explode_hit_objects = FALSE -/obj/projectile/ice_blast +/obj/projectile/colossus/ice_blast name = "ice blast" icon_state = "ice_2" damage = 15 @@ -145,7 +146,7 @@ Difficulty: Extremely Hard speed = 3 damage_type = BRUTE -/obj/projectile/ice_blast/on_hit(atom/target, blocked = FALSE) +/obj/projectile/colossus/ice_blast/on_hit(atom/target, blocked = FALSE) . = ..() if(isturf(target) || isobj(target)) target.ex_act(EXPLODE_HEAVY) @@ -176,26 +177,26 @@ Difficulty: Extremely Hard var/turf/endloc = get_turf(target) if(!endloc) break - var/obj/projectile/frost_orb/P = new(startloc) + var/obj/projectile/colossus/frost_orb/P = new(startloc) P.preparePixelProjectile(endloc, startloc) P.firer = src if(target) P.original = target P.set_homing_target(target) P.fire(rand(0, 360)) - addtimer(CALLBACK(P, /obj/projectile/frost_orb/proc/orb_explosion, projectile_speed_multiplier), 20) // make the orbs home in after a second + addtimer(CALLBACK(P, /obj/projectile/colossus/frost_orb/proc/orb_explosion, projectile_speed_multiplier), 20) // make the orbs home in after a second SLEEP_CHECK_DEATH(added_delay) update_cooldowns(list(COOLDOWN_UPDATE_SET_MELEE = 4 SECONDS, COOLDOWN_UPDATE_SET_RANGED = 6 SECONDS)) /// Called when the orb is exploding, shoots out projectiles -/obj/projectile/frost_orb/proc/orb_explosion(projectile_speed_multiplier) +/obj/projectile/colossus/frost_orb/proc/orb_explosion(projectile_speed_multiplier) for(var/i in 0 to 5) var/angle = i * 60 var/turf/startloc = get_turf(src) var/turf/endloc = get_turf(original) if(!startloc || !endloc) break - var/obj/projectile/ice_blast/P = new(startloc) + var/obj/projectile/colossus/ice_blast/P = new(startloc) P.speed *= projectile_speed_multiplier P.preparePixelProjectile(endloc, startloc, null, angle + rand(-10, 10)) P.firer = firer @@ -211,7 +212,7 @@ Difficulty: Extremely Hard var/turf/endloc = get_turf(target) if(!endloc) break - var/obj/projectile/P = new /obj/projectile/snowball(startloc) + var/obj/projectile/P = new /obj/projectile/colossus/snowball(startloc) P.speed *= projectile_speed_multiplier P.preparePixelProjectile(endloc, startloc, null, rand(-spread, spread)) P.firer = src @@ -230,7 +231,7 @@ Difficulty: Extremely Hard var/turf/endloc = get_turf(target) if(!endloc) break - var/obj/projectile/P = new /obj/projectile/ice_blast(startloc) + var/obj/projectile/P = new /obj/projectile/colossus/ice_blast(startloc) P.speed *= projectile_speed_multiplier P.preparePixelProjectile(endloc, startloc, null, spread) P.firer = src diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm index 0223f1e4dfd..2c672c0b360 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/wendigo.dm @@ -178,7 +178,7 @@ Difficulty: Hard var/turf/endloc = get_turf(target) if(!endloc) break - var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc) + var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) shockwave.speed = 8 shockwave.preparePixelProjectile(endloc, startloc, null, spread) shockwave.firer = src @@ -226,7 +226,7 @@ Difficulty: Hard var/offset = shoot_times % 2 for(var/shot in 1 to shots_per) var/angle = shot * 360 / shots_per + (offset * 360 / shots_per) * 0.5 - var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc) + var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) shockwave.firer = src shockwave.speed = 3 - WENDIGO_ENRAGED shockwave.fire(angle) @@ -240,7 +240,7 @@ Difficulty: Hard var/angle_change = (5 + WENDIGO_ENRAGED * shot / 6) * spiral_direction for(var/count in 1 to shots_per_tick) var/angle = angle_to_target + shot * angle_change + count * 360 / shots_per_tick - var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc) + var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) shockwave.firer = src shockwave.damage = 15 shockwave.fire(angle) @@ -252,7 +252,7 @@ Difficulty: Hard for(var/shoot_times in 1 to WENDIGO_WAVE_REPEATCOUNT) for(var/shot in 1 to shots_per) var/angle = shot * difference + shoot_times * 5 * wave_direction * -1 - var/obj/projectile/wendigo_shockwave/shockwave = new /obj/projectile/wendigo_shockwave(loc) + var/obj/projectile/colossus/wendigo_shockwave/shockwave = new /obj/projectile/colossus/wendigo_shockwave(loc) shockwave.firer = src shockwave.wave_movement = TRUE shockwave.speed = 8 @@ -269,15 +269,8 @@ Difficulty: Hard exit.set_light(20, 1, COLOR_SOFT_RED) return ..() -/obj/projectile/wendigo_shockwave - name ="wendigo shockwave" - icon_state= "chronobolt" - damage = 25 - armour_penetration = 100 - speed = 2 - eyeblur = 5 - damage_type = BRUTE - pass_flags = PASSTABLE +/obj/projectile/colossus/wendigo_shockwave + name = "wendigo shockwave" /// If wave movement is enabled var/wave_movement = FALSE /// Amount the angle changes every pixel move @@ -285,7 +278,7 @@ Difficulty: Hard /// Amount of movements this projectile has made var/pixel_moves = 0 -/obj/projectile/wendigo_shockwave/pixel_move(trajectory_multiplier, hitscanning = FALSE) +/obj/projectile/colossus/wendigo_shockwave/pixel_move(trajectory_multiplier, hitscanning = FALSE) . = ..() if(wave_movement) pixel_moves++