Removes Projectile Megafauna Cheesing (#60758)

Dead mobs are now dusted by colossus typed projectiles.

Colossus typed projectiles are always considered a direct target projectile now so you cannot lay down and ignore them anymore.

Wendigo and frost miner projectiles are now subtypes of this projectile type as well.
This commit is contained in:
Whoneedspacee
2021-08-11 10:42:40 -03:00
committed by GitHub
parent e708a69a90
commit 9e4c0fe742
3 changed files with 34 additions and 27 deletions
@@ -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
@@ -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
@@ -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++