From b1d6b6a277232159d7525fd2338bbf6cda4bfadb Mon Sep 17 00:00:00 2001 From: CitadelStationBot Date: Wed, 26 Apr 2017 10:11:33 -0500 Subject: [PATCH] [MIRROR] Drake swooping is smoother and more dangerous (#571) * Drake swooping is smoother and more dangerous * Update dragon.dm * Delete dragon.dm.rej --- code/game/objects/effects/overlays.dm | 3 +- .../hostile/megafauna/bubblegum.dm | 5 +- .../simple_animal/hostile/megafauna/dragon.dm | 287 ++++++++++++------ icons/mob/lavaland/dragon.dmi | Bin 41255 -> 42396 bytes 4 files changed, 203 insertions(+), 92 deletions(-) diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 3d62e850e8..bc9251d9fc 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -35,7 +35,6 @@ ..() if(randomdir) setDir(pick(GLOB.cardinal)) - flick("[icon_state]", src) //Because we might be pulling it from a pool, flick whatever icon it uses so it starts at the start of the icon's animation. timerid = QDEL_IN(src, duration) @@ -214,7 +213,7 @@ icon = 'icons/effects/fire.dmi' icon_state = "3" duration = 20 - + /obj/effect/overlay/temp/cult randomdir = 0 duration = 10 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 2e64ee526e..fa61a16e51 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -150,7 +150,7 @@ Difficulty: Hard var/turf/T = get_turf(target) if(!T || T == loc) return - new /obj/effect/overlay/temp/dragon_swoop(T) + new /obj/effect/overlay/temp/dragon_swoop/bubblegum(T) charging = TRUE DestroySurroundings() walk(src, 0) @@ -276,6 +276,9 @@ Difficulty: Hard addtimer(CALLBACK(src, .proc/devour, L), 2) sleep(1) +/obj/effect/overlay/temp/dragon_swoop/bubblegum + duration = 10 + /obj/effect/overlay/temp/bubblegum_hands icon = 'icons/effects/bubblegum.dmi' duration = 9 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index c56e963aef..3425d08e23 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -1,4 +1,10 @@ #define MEDAL_PREFIX "Drake" + +#define DRAKE_SWOOP_HEIGHT 270 //how high up drakes go, in pixels +#define DRAKE_SWOOP_DIRECTION_CHANGE_RANGE 5 //the range our x has to be within to not change the direction we slam from + +#define SWOOP_DAMAGEABLE 1 +#define SWOOP_INVULNERABLE 2 /* ASH DRAKE @@ -9,8 +15,9 @@ It acts as a melee creature, chasing down and attacking its target while also us Whenever possible, the drake will breathe fire in the four cardinal directions, igniting and heavily damaging anything caught in the blast. It also often causes fire to rain from the sky - many nearby turfs will flash red as a fireball crashes into them, dealing damage to anything on the turfs. -The drake also utilizes its wings to fly into the sky and crash down onto a specified point. Anything on this point takes tremendous damage. +The drake also utilizes its wings to fly into the sky, flying after its target and attempting to slam down on them. Anything near when it slams down takes huge damage. - Sometimes it will chain these swooping attacks over and over, making swiftness a necessity. + - Sometimes, it will spew fire while flying at its target. When an ash drake dies, it leaves behind a chest that can contain four things: 1. A spectral blade that allows its wielder to call ghosts to it, enhancing its power @@ -46,7 +53,7 @@ Difficulty: Medium pixel_x = -16 loot = list(/obj/structure/closet/crate/necropolis/dragon) butcher_results = list(/obj/item/weapon/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/animalhide/ashdrake = 10, /obj/item/stack/sheet/bone = 30) - var/swooping = 0 + var/swooping = NONE var/swoop_cooldown = 0 medal_type = MEDAL_PREFIX score_type = DRAKE_SCORE @@ -63,10 +70,15 @@ Difficulty: Medium ..() /mob/living/simple_animal/hostile/megafauna/dragon/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - if(!forced && swooping) + if(!forced && (swooping & SWOOP_INVULNERABLE)) return FALSE return ..() +/mob/living/simple_animal/hostile/megafauna/dragon/visible_message() + if(swooping & SWOOP_INVULNERABLE) //to suppress attack messages without overriding every single proc that could send a message saying we got hit + return + return ..() + /mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget() if(!swooping) return ..() @@ -86,62 +98,15 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0) return 1 -/obj/effect/overlay/temp/fireball - icon = 'icons/obj/wizard.dmi' - icon_state = "fireball" - name = "fireball" - desc = "Get out of the way!" - layer = FLY_LAYER - randomdir = 0 - duration = 12 - pixel_z = 500 - -/obj/effect/overlay/temp/fireball/Initialize(loc) - . = ..() - animate(src, pixel_z = 0, time = 12) - -/obj/effect/overlay/temp/target - icon = 'icons/mob/actions.dmi' - icon_state = "sniper_zoom" - layer = BELOW_MOB_LAYER - light_range = 2 - duration = 12 - -/obj/effect/overlay/temp/dragon_swoop - name = "certain death" - desc = "Don't just stand there, move!" - icon = 'icons/effects/96x96.dmi' - icon_state = "landing" - layer = BELOW_MOB_LAYER - pixel_x = -32 - pixel_y = -32 - color = "#FF0000" - duration = 10 - -/obj/effect/overlay/temp/target/ex_act() - return - -/obj/effect/overlay/temp/target/Initialize(loc) - . = ..() - INVOKE_ASYNC(src, .proc/fall) - -/obj/effect/overlay/temp/target/proc/fall() - var/turf/T = get_turf(src) - playsound(T,'sound/magic/Fireball.ogg', 200, 1) - new /obj/effect/overlay/temp/fireball(T) - sleep(12) - explosion(T, 0, 0, 1, 0, 0, 0, 1) - /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() + if(swooping) + return anger_modifier = Clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + ranged_cooldown_time - if(swooping) - fire_rain() - return if(prob(15 + anger_modifier) && !client) if(health < maxHealth/2) - INVOKE_ASYNC(src, .proc/swoop_attack, 1) + INVOKE_ASYNC(src, .proc/swoop_attack, TRUE, null, 50) else fire_rain() @@ -154,9 +119,11 @@ Difficulty: Medium fire_walls() /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_rain() - visible_message("Fire rains from the sky!") - for(var/turf/turf in range(12,get_turf(src))) - if(prob(10)) + if(!target) + return + target.visible_message("Fire rains from the sky!") + for(var/turf/turf in range(9,get_turf(target))) + if(prob(11)) new /obj/effect/overlay/temp/target(turf) /mob/living/simple_animal/hostile/megafauna/dragon/proc/fire_walls() @@ -177,6 +144,8 @@ Difficulty: Medium new /obj/effect/hotspot(J) J.hotspot_expose(700,50,1) for(var/mob/living/L in J.contents - hit_things) + if(istype(L, /mob/living/simple_animal/hostile/megafauna/dragon)) + continue L.adjustFireLoss(20) to_chat(L, "You're hit by the drake's fire breath!") hit_things += L @@ -184,43 +153,86 @@ Difficulty: Medium sleep(1) /mob/living/simple_animal/hostile/megafauna/dragon/proc/triple_swoop() - swoop_attack() - swoop_attack() - swoop_attack() + swoop_attack(swoop_duration = 30) + swoop_attack(swoop_duration = 30) + swoop_attack(swoop_duration = 30) -/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain = 0, atom/movable/manual_target) +/mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain, atom/movable/manual_target, swoop_duration = 40) if(stat || swooping) return - swoop_cooldown = world.time + 200 - var/atom/swoop_target if(manual_target) - swoop_target = manual_target - else - swoop_target = target + target = manual_target + if(!target) + return + swoop_cooldown = world.time + 200 stop_automated_movement = TRUE - swooping = 1 - density = 0 - icon_state = "swoop" + swooping |= SWOOP_DAMAGEABLE + density = FALSE + icon_state = "shadow" visible_message("[src] swoops up high!") - if(prob(50)) - animate(src, pixel_x = 500, pixel_z = 500, time = 10) + + var/negative + var/initial_x = x + if(target.x < initial_x) //if the target's x is lower than ours, swoop to the left + negative = TRUE + else if(target.x > initial_x) + negative = FALSE + else if(target.x == initial_x) //if their x is the same, pick a direction + negative = prob(50) + var/obj/effect/overlay/temp/dragon_flight/F = new /obj/effect/overlay/temp/dragon_flight(loc, negative) + + negative = !negative //invert it for the swoop down later + + var/oldtransform = transform + animate(src, transform = matrix()*0.9, time = 3, easing = BOUNCE_EASING) + for(var/i in 1 to 3) + sleep(1) + if(QDELETED(src)) //we got hit and died, rip us + qdel(F) + return + animate(src, transform = matrix()*0.7, time = 7) + swooping |= SWOOP_INVULNERABLE + sleep(7) + var/list/flame_hit = list() + while(swoop_duration > 0) + if(!target && !FindTarget()) + break //we lost our target while chasing it down and couldn't get a new one + if(swoop_duration < 7) + fire_rain = FALSE //stop raining fire near the end of the swoop + if(loc == get_turf(target)) + if(!fire_rain) + break //we're not spewing fire at our target, slam they + if(isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + break //target is dead and we're on em, slam they + if(fire_rain) + new /obj/effect/overlay/temp/target(loc, flame_hit) + forceMove(get_step(src, get_dir(src, target))) + if(loc == get_turf(target)) + if(!fire_rain) + break + if(isliving(target)) + var/mob/living/L = target + if(L.stat == DEAD) + break + var/swoop_speed = 1.5 + swoop_duration -= swoop_speed + sleep(swoop_speed) + + //ensure swoop direction continuity. + if(negative) + if(IsInRange(x, initial_x + 1, initial_x + DRAKE_SWOOP_DIRECTION_CHANGE_RANGE)) + negative = FALSE else - animate(src, pixel_x = -500, pixel_z = 500, time = 10) - sleep(30) - - var/turf/tturf - if(fire_rain) - fire_rain() - + if(IsInRange(x, initial_x - DRAKE_SWOOP_DIRECTION_CHANGE_RANGE, initial_x - 1)) + negative = TRUE + new /obj/effect/overlay/temp/dragon_flight/end(loc, negative) + new /obj/effect/overlay/temp/dragon_swoop(loc) + animate(src, transform = oldtransform, time = 5) + sleep(5) + swooping &= ~SWOOP_INVULNERABLE icon_state = "dragon" - if(swoop_target && !QDELETED(swoop_target) && swoop_target.z == src.z) - tturf = get_turf(swoop_target) - else - tturf = get_turf(src) - forceMove(tturf) - new /obj/effect/overlay/temp/dragon_swoop(tturf) - animate(src, pixel_x = initial(pixel_x), pixel_z = 0, time = 10) - sleep(10) playsound(src.loc, 'sound/effects/meteorimpact.ogg', 200, 1) for(var/mob/living/L in orange(1, src)) if(L.stat) @@ -239,9 +251,9 @@ Difficulty: Medium for(var/mob/M in range(7, src)) shake_camera(M, 15, 1) - stop_automated_movement = FALSE - swooping = 0 - density = 1 + density = TRUE + sleep(1) + swooping &= ~SWOOP_DAMAGEABLE /mob/living/simple_animal/hostile/megafauna/dragon/AltClickOn(atom/movable/A) if(!istype(A)) @@ -249,7 +261,7 @@ Difficulty: Medium if(swoop_cooldown >= world.time) to_chat(src, "You need to wait 20 seconds between swoop attacks!") return - swoop_attack(1, A) + swoop_attack(TRUE, A, 25) /obj/item/device/gps/internal/dragon icon_state = null @@ -257,6 +269,103 @@ Difficulty: Medium desc = "Here there be dragons." invisibility = 100 + +/obj/effect/overlay/temp/fireball + icon = 'icons/obj/wizard.dmi' + icon_state = "fireball" + name = "fireball" + desc = "Get out of the way!" + layer = FLY_LAYER + randomdir = FALSE + duration = 9 + pixel_z = DRAKE_SWOOP_HEIGHT + +/obj/effect/overlay/temp/fireball/Initialize() + . = ..() + animate(src, pixel_z = 0, time = duration) + +/obj/effect/overlay/temp/target + icon = 'icons/mob/actions.dmi' + icon_state = "sniper_zoom" + layer = BELOW_MOB_LAYER + light_range = 2 + duration = 9 + +/obj/effect/overlay/temp/target/ex_act() + return + +/obj/effect/overlay/temp/target/Initialize(mapload, list/flame_hit) + . = ..() + INVOKE_ASYNC(src, .proc/fall, flame_hit) + +/obj/effect/overlay/temp/target/proc/fall(list/flame_hit) + var/turf/T = get_turf(src) + playsound(T,'sound/magic/Fireball.ogg', 80, 1) + new /obj/effect/overlay/temp/fireball(T) + sleep(duration) + if(ismineralturf(T)) + var/turf/closed/mineral/M = T + M.gets_drilled() + playsound(T, "explosion", 80, 1) + new /obj/effect/hotspot(T) + T.hotspot_expose(700, 50, 1) + for(var/mob/living/L in T.contents) + if(istype(L, /mob/living/simple_animal/hostile/megafauna/dragon)) + continue + if(!islist(flame_hit) || !flame_hit[L]) + L.adjustFireLoss(40) + to_chat(L, "You're hit by the drake's fire breath!") + flame_hit[L] = TRUE + else + L.adjustFireLoss(10) //if we've already hit them, do way less damage + +/obj/effect/overlay/temp/dragon_swoop + name = "certain death" + desc = "Don't just stand there, move!" + icon = 'icons/effects/96x96.dmi' + icon_state = "landing" + layer = BELOW_MOB_LAYER + pixel_x = -32 + pixel_y = -32 + color = "#FF0000" + duration = 5 + +/obj/effect/overlay/temp/dragon_flight + icon = 'icons/mob/lavaland/dragon.dmi' + icon_state = "dragon" + layer = ABOVE_ALL_MOB_LAYER + pixel_x = -16 + duration = 10 + randomdir = FALSE + +/obj/effect/overlay/temp/dragon_flight/Initialize(mapload, negative) + . = ..() + INVOKE_ASYNC(src, .proc/flight, negative) + +/obj/effect/overlay/temp/dragon_flight/proc/flight(negative) + if(negative) + animate(src, pixel_x = -DRAKE_SWOOP_HEIGHT*0.10, pixel_z = DRAKE_SWOOP_HEIGHT*0.15, time = 3, easing = BOUNCE_EASING) + else + animate(src, pixel_x = DRAKE_SWOOP_HEIGHT*0.10, pixel_z = DRAKE_SWOOP_HEIGHT*0.15, time = 3, easing = BOUNCE_EASING) + sleep(3) + icon_state = "swoop" + if(negative) + animate(src, pixel_x = -DRAKE_SWOOP_HEIGHT, pixel_z = DRAKE_SWOOP_HEIGHT, time = 7) + else + animate(src, pixel_x = DRAKE_SWOOP_HEIGHT, pixel_z = DRAKE_SWOOP_HEIGHT, time = 7) + +/obj/effect/overlay/temp/dragon_flight/end + pixel_x = DRAKE_SWOOP_HEIGHT + pixel_z = DRAKE_SWOOP_HEIGHT + duration = 5 + +/obj/effect/overlay/temp/dragon_flight/end/flight(negative) + if(negative) + pixel_x = -DRAKE_SWOOP_HEIGHT + animate(src, pixel_x = -16, pixel_z = 0, time = 5) + else + animate(src, pixel_x = -16, pixel_z = 0, time = 5) + /mob/living/simple_animal/hostile/megafauna/dragon/lesser name = "lesser ash drake" maxHealth = 200 diff --git a/icons/mob/lavaland/dragon.dmi b/icons/mob/lavaland/dragon.dmi index 7e44b775de8c48a8d25788af45339c727c221b6f..911d7288d122f08e721231810d02b48fc91f4777 100644 GIT binary patch delta 13511 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 delta 12361 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