The Hierophant will now release a burst when melee attacking instead of actually hitting its target (#2101)
This commit is contained in:
committed by
kevinz000
parent
6a53670890
commit
c3b3462322
@@ -24,7 +24,7 @@ The Hierophant's attacks are as follows;
|
||||
If below half health, the created Cross Blast may fire in all directions.
|
||||
- Creates an expanding AoE burst.
|
||||
|
||||
- IF TARGET WAS STRUCK IN MELEE: Creates a 3x3 square of blasts under the target.
|
||||
- IF ATTACKING IN MELEE: Creates an expanding AoE burst.
|
||||
|
||||
Cross Blasts and the AoE burst gain additional range as Hierophant loses health, while Chasers gain additional speed.
|
||||
|
||||
@@ -148,8 +148,19 @@ Difficulty: Hard
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/AttackingTarget()
|
||||
if(!blinking)
|
||||
if(target && isliving(target))
|
||||
INVOKE_ASYNC(src, .proc/melee_blast, get_turf(target)) //melee attacks on living mobs produce a 3x3 blast
|
||||
return ..()
|
||||
var/mob/living/L = target
|
||||
if(L.stat != DEAD)
|
||||
if(ranged_cooldown <= world.time)
|
||||
calculate_rage()
|
||||
ranged_cooldown = world.time + max(5, ranged_cooldown_time - anger_modifier * 0.75)
|
||||
INVOKE_ASYNC(src, .proc/burst, get_turf(src))
|
||||
else
|
||||
burst_range = 3
|
||||
INVOKE_ASYNC(src, .proc/burst, get_turf(src), 0.25) //melee attacks on living mobs cause it to release a fast burst if on cooldown
|
||||
else
|
||||
devour(L)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/DestroySurroundings()
|
||||
if(!blinking)
|
||||
@@ -157,14 +168,16 @@ Difficulty: Hard
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/Move()
|
||||
if(!blinking)
|
||||
var/prevloc = loc
|
||||
. = ..()
|
||||
if(!stat && .)
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new /obj/effect/temp_visual/hierophant/squares(prevloc)
|
||||
HS.dir = dir
|
||||
playsound(loc, 'sound/mecha/mechmove04.ogg', 150, 1, -4)
|
||||
if(target)
|
||||
arena_trap(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/Moved(oldLoc, movement_dir)
|
||||
. = ..()
|
||||
if(!stat && .)
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new(oldLoc)
|
||||
HS.setDir(movement_dir)
|
||||
playsound(src, 'sound/mecha/mechmove04.ogg', 150, 1, -4)
|
||||
if(target)
|
||||
arena_trap(target)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/Goto(target, delay, minimum_distance)
|
||||
wander = TRUE
|
||||
@@ -264,7 +277,7 @@ Difficulty: Hard
|
||||
pickedtarget = target
|
||||
if(QDELETED(pickedtarget) || (istype(pickedtarget) && pickedtarget.stat == DEAD))
|
||||
break //main target is dead and we're out of living targets, cancel out
|
||||
var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, pickedtarget, chaser_speed, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/C = new(loc, src, pickedtarget, chaser_speed, FALSE)
|
||||
C.moving = 3
|
||||
C.moving_dir = pick_n_take(cardinal_copy)
|
||||
sleep(8 + target_slowness)
|
||||
@@ -279,7 +292,7 @@ Difficulty: Hard
|
||||
var/obj/effect/temp_visual/hierophant/chaser/C = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed, FALSE)
|
||||
chaser_cooldown = world.time + initial(chaser_cooldown)
|
||||
if((prob(anger_modifier) || target.Adjacent(src)) && target != src)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/OC = new /obj/effect/temp_visual/hierophant/chaser(loc, src, target, chaser_speed * 1.5, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/chaser/OC = new(loc, src, target, chaser_speed * 1.5, FALSE)
|
||||
OC.moving = 4
|
||||
OC.moving_dir = pick(GLOB.cardinals - C.moving_dir)
|
||||
|
||||
@@ -358,8 +371,8 @@ Difficulty: Hard
|
||||
var/turf/previousturf = T
|
||||
var/turf/J = get_step(previousturf, set_dir)
|
||||
for(var/i in 1 to 10)
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new /obj/effect/temp_visual/hierophant/squares(J)
|
||||
HS.dir = set_dir
|
||||
var/obj/effect/temp_visual/hierophant/squares/HS = new(J)
|
||||
HS.setDir(set_dir)
|
||||
previousturf = J
|
||||
J = get_step(previousturf, set_dir)
|
||||
sleep(0.5)
|
||||
@@ -378,10 +391,10 @@ Difficulty: Hard
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(T, src)
|
||||
new /obj/effect/temp_visual/hierophant/telegraph/teleport(source, src)
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new(t, src, FALSE)
|
||||
B.damage = 30
|
||||
for(var/t in RANGE_TURFS(1, source))
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
var/obj/effect/temp_visual/hierophant/blast/B = new(t, src, FALSE)
|
||||
B.damage = 30
|
||||
animate(src, alpha = 0, time = 2, easing = EASE_OUT) //fade out
|
||||
sleep(1)
|
||||
@@ -409,7 +422,7 @@ Difficulty: Hard
|
||||
for(var/t in RANGE_TURFS(1, T))
|
||||
new /obj/effect/temp_visual/hierophant/blast(t, src, FALSE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original) //release a wave of blasts
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/proc/burst(turf/original, spread_speed = 0.5) //release a wave of blasts
|
||||
playsound(original,'sound/machines/airlockopen.ogg', 200, 1)
|
||||
var/last_dist = 0
|
||||
for(var/t in spiral_range_turfs(burst_range, original))
|
||||
@@ -419,7 +432,7 @@ Difficulty: Hard
|
||||
var/dist = get_dist(original, T)
|
||||
if(dist > last_dist)
|
||||
last_dist = dist
|
||||
sleep(1 + min(burst_range - last_dist, 12) * 0.5) //gets faster as it gets further out
|
||||
sleep(1 + min(burst_range - last_dist, 12) * spread_speed) //gets faster as it gets further out
|
||||
new /obj/effect/temp_visual/hierophant/blast(T, src, FALSE)
|
||||
|
||||
/mob/living/simple_animal/hostile/megafauna/hierophant/AltClickOn(atom/A) //player control handler(don't give this to a player holy fuck)
|
||||
@@ -567,7 +580,8 @@ Difficulty: Hard
|
||||
/obj/effect/temp_visual/hierophant/blast
|
||||
icon_state = "hierophant_blast"
|
||||
name = "vortex blast"
|
||||
light_range = 1
|
||||
light_range = 2
|
||||
light_power = 2
|
||||
desc = "Get out of the way!"
|
||||
duration = 9
|
||||
var/damage = 10 //how much damage do we do?
|
||||
@@ -616,10 +630,18 @@ Difficulty: Hard
|
||||
var/limb_to_hit = L.get_bodypart(pick("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg"))
|
||||
var/armor = L.run_armor_check(limb_to_hit, "melee", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!")
|
||||
L.apply_damage(damage, BURN, limb_to_hit, armor)
|
||||
if(ishostile(L))
|
||||
var/mob/living/simple_animal/hostile/H = L //mobs find and damage you...
|
||||
if(H.stat == CONSCIOUS && !H.target && H.AIStatus != AI_OFF && !H.client)
|
||||
if(!QDELETED(caster))
|
||||
if(get_dist(H, caster) <= H.aggro_vision_range)
|
||||
H.FindTarget(list(caster), 1)
|
||||
else
|
||||
H.Goto(get_turf(caster), H.move_to_delay, 3)
|
||||
if(monster_damage_boost && (ismegafauna(L) || istype(L, /mob/living/simple_animal/hostile/asteroid)))
|
||||
L.adjustBruteLoss(damage)
|
||||
add_logs(caster, L, "struck with a [name]")
|
||||
for(var/obj/mecha/M in T.contents - hit_things) //and mechs.
|
||||
for(var/obj/mecha/M in T.contents - hit_things) //also damage mechs.
|
||||
hit_things += M
|
||||
if(M.occupant)
|
||||
if(friendly_fire_check && caster && caster.faction_check_mob(M.occupant))
|
||||
|
||||
Reference in New Issue
Block a user