diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 2e841722c8..11c59a2d28 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -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))