mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-23 21:18:37 +01:00
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:
@@ -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++
|
||||
|
||||
Reference in New Issue
Block a user