diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index 739a03d92c5..6bcba4cd83b 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -383,18 +383,18 @@ name = "Repulse" desc = "This spell throws everything around the user away." charge_max = 400 - clothes_req = 1 + clothes_req = TRUE invocation = "GITTAH WEIGH" invocation_type = "shout" range = 5 cooldown_min = 150 selection_type = "view" + sound = 'sound/magic/repulse.ogg' var/maxthrow = 5 var/sparkle_path = /obj/effect/temp_visual/gravpush action_icon_state = "repulse" - sound = 'sound/magic/repulse.ogg' -/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/repulse/cast(list/targets, mob/user = usr, stun_amt = 2) var/list/thrownatoms = list() var/atom/throwtarget var/distfromcaster @@ -411,16 +411,16 @@ throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) distfromcaster = get_dist(user, AM) if(distfromcaster == 0) - if(istype(AM, /mob/living)) + if(isliving(AM)) var/mob/living/M = AM M.Weaken(5) M.adjustBruteLoss(5) to_chat(M, "You're slammed into the floor by a mystical force!") else new sparkle_path(get_turf(AM), get_dir(user, AM)) //created sparkles will disappear on their own - if(istype(AM, /mob/living)) + if(isliving(AM)) var/mob/living/M = AM - M.Weaken(2) + M.Weaken(stun_amt) to_chat(M, "You're thrown back by a mystical force!") spawn(0) AM.throw_at(throwtarget, ((Clamp((maxthrow - (Clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1)//So stuff gets tossed around at the same time. diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index d6dbf1dddbb..f7a0962269d 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -90,6 +90,10 @@ /obj/effect/temp_visual/dir_setting/wraith/out icon_state = "phase_shift" +/obj/effect/temp_visual/dir_setting/tailsweep + icon_state = "tailsweep" + duration = 4 + /obj/effect/temp_visual/wizard name = "water" icon = 'icons/mob/mob.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index cade1489c63..8eed750804f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -231,6 +231,16 @@ Difficulty: Very Hard target = new_target INVOKE_ASYNC(src, /atom/movable/proc/orbit, target, 0, FALSE, 0, 0, FALSE, TRUE) +/mob/living/simple_animal/hostile/megafauna/colossus/bullet_act(obj/item/projectile/P) + if(!stat) + var/obj/effect/temp_visual/at_shield/AT = new /obj/effect/temp_visual/at_shield(loc, src) + var/random_x = rand(-32, 32) + AT.pixel_x += random_x + + var/random_y = rand(0, 72) + AT.pixel_y += random_y + return ..() + /obj/item/projectile/colossus name ="death bolt" icon_state= "chronobolt" diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index ccd00514daa..8b6d6fed947 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -599,4 +599,74 @@ obj/effect/temp_visual/fireball player_cooldown = world.time + 200 // needs seperate cooldown or cant use fire attacks /mob/living/simple_animal/hostile/megafauna/dragon/lesser/grant_achievement(medaltype,scoretype) + return + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon + name = "space dragon" + maxHealth = 250 + health = 250 + faction = list("neutral") + desc = "A space carp turned dragon by vile magic. Has the same ferocity of a space carp, but also a much more enabling body." + icon = 'icons/mob/spacedragon.dmi' + icon_state = "spacedragon" + icon_living = "spacedragon" + icon_dead = "spacedragon_dead" + obj_damage = 80 + melee_damage_upper = 35 + melee_damage_lower = 35 + speed = 0 + mouse_opacity = MOUSE_OPACITY_ICON + loot = list() + crusher_loot = list() + butcher_results = list(/obj/item/stack/ore/diamond = 5, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 30) + move_force = MOVE_FORCE_NORMAL + move_resist = MOVE_FORCE_NORMAL + pull_force = MOVE_FORCE_NORMAL + deathmessage = "screeches as its wings turn to dust and it collapses on the floor, life estinguished." + attack_action_types = list() + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/grant_achievement(medaltype, scoretype) + return + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/Initialize(mapload) + var/obj/effect/proc_holder/spell/aoe_turf/repulse/spacedragon/repulse_action = new /obj/effect/proc_holder/spell/aoe_turf/repulse/spacedragon(src) + repulse_action.action.Grant(src) + mob_spell_list += repulse_action + . = ..() + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/proc/fire_stream(var/atom/at = target) + playsound(get_turf(src),'sound/magic/fireball.ogg', 200, TRUE) + SLEEP_CHECK_DEATH(0) + var/range = 20 + var/list/turfs = list() + turfs = line_target(0, range, at) + INVOKE_ASYNC(src, .proc/fire_line, turfs) + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/OpenFire() + if(swooping) + return + ranged_cooldown = world.time + ranged_cooldown_time + fire_stream() + +/obj/effect/proc_holder/spell/aoe_turf/repulse/spacedragon + name = "Tail Sweep" + desc = "Throw back attackers with a sweep of your tail." + sound = 'sound/magic/tail_swing.ogg' + charge_max = 150 + clothes_req = FALSE + range = 1 + cooldown_min = 150 + invocation_type = "none" + sparkle_path = /obj/effect/temp_visual/dir_setting/tailsweep + action_icon_state = "tailsweep" + action_background_icon_state = "bg_alien" + +/obj/effect/proc_holder/spell/aoe_turf/repulse/spacedragon/cast(list/targets, mob/user = usr) + if(iscarbon(user)) + var/mob/living/carbon/C = user + playsound(C.loc, 'sound/effects/hit_punch.ogg', 80, TRUE, TRUE) + C.spin(6, 1) + ..(targets, user, 3) + +/mob/living/simple_animal/hostile/megafauna/dragon/space_dragon/AltClickOn(atom/movable/A) return \ No newline at end of file diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index bea6f281f7a..89f57b2517d 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/mob/actions/actions.dmi b/icons/mob/actions/actions.dmi index 66795e14830..4ea648dea13 100644 Binary files a/icons/mob/actions/actions.dmi and b/icons/mob/actions/actions.dmi differ diff --git a/icons/mob/spacedragon.dmi b/icons/mob/spacedragon.dmi new file mode 100644 index 00000000000..98f20ea8851 Binary files /dev/null and b/icons/mob/spacedragon.dmi differ