Anomalous Weather Update 2.0 (#8602)

This commit is contained in:
FluffMedic
2024-07-18 01:49:31 -04:00
committed by GitHub
parent 395f7696b8
commit 4a4fa5aa0f
7 changed files with 1030 additions and 4 deletions

View File

@@ -0,0 +1,173 @@
/mob/living/simple_mob/vore/weatherbeast/acidrain/death()
new /obj/item/weapon/melee/jellyfishwhip (src.loc)
new /obj/item/weapon/cell/slime/jellyfish (src.loc)
.=..()
/mob/living/simple_mob/vore/weatherbeast/starsky/death()
new /obj/item/weapon/gun/energy/astarrail (src.loc)
new /obj/item/weapon/weldingtool/silver (src.loc)
.=..()
/mob/living/simple_mob/vore/weatherbeast/darkmist/death()
new /obj/item/weapon/melee/midnightblade (src.loc)
new /obj/item/weapon/reagent_containers/glass/beaker/gilded (src.loc)
.=..()
/mob/living/simple_mob/vore/weatherbeast/sandstorm/death()
new /obj/item/weapon/gun/magnetic/matfed/phoronbore/modified (src.loc)
new /obj/item/device/personal_shield_generator/belt/magnetbelt (src.loc)
.=..()
//Acid Rain Boss
/obj/item/weapon/melee/jellyfishwhip
name = "dettached jellyfish tendril"
desc = "The detatched limb of a titan jellyfish."
sharp = FALSE
edge = FALSE
force = 28
armor_penetration = 50
flags = NOCONDUCT | NOBLOODY
slot_flags = SLOT_BELT
w_class = ITEMSIZE_SMALL
icon = 'icons/obj/weapons.dmi'
icon_state = "whip"
item_state = "chain"
/obj/item/weapon/melee/jellyfishwhip/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(user.a_intent == I_HURT) //Healy mode
. = ..()
target.adjustFireLoss(10)
user.adjustFireLoss(-7)
user.adjustBruteLoss(-7)
else if(user.a_intent == I_DISARM) //DoT mode
. = ..()
target.add_modifier(/datum/modifier/poisoned/weak/acid, 20)
else if(user.a_intent == I_GRAB) //weaken mode
. = ..()
target.add_modifier(/datum/modifier/hivebot_weaken, 20)
/obj/item/weapon/cell/slime/jellyfish //Less max charge then slime but faster recharge
name = "Jellyfish Cell Core"
desc = "An energezied core of a toxic jellyfish titan."
description_info = "This 'cell' holds a max charge of 10k and self recharges over time."
maxcharge = 10000
charge_amount = 1000
//Starry Nights
/obj/item/weapon/gun/energy/astarrail
name = "Astral Slicer"
desc = "A strange gun pulsing with energy, it feeling oddly lightweight."
icon = 'modular_chomp/icons/obj/guns/precursor/eclipse.dmi'
icon_state = "star_revolver"
item_state = "star_revolver"
wielded_item_state = "cryogun-wielded"
w_class = ITEMSIZE_SMALL
origin_tech = list(TECH_COMBAT = 6, TECH_POWER = 5, TECH_PRECURSOR = 3)
charge_cost = 600 //How much energy is needed to fire.
accept_cell_type = /obj/item/weapon/cell/device
cell_type = /obj/item/weapon/cell/device/weapon
projectile_type = /obj/item/projectile/energy/astralrail
recoil_mode = 0
charge_meter = 1
reload_time = 1 //Stupidly low recharge. Revolvery weapon.
move_delay = 0
/obj/item/projectile/energy/astralrail
name = "odd mist"
icon = 'modular_chomp/icons/mob/starbeast.dmi'
icon_state = "mist"
fire_sound='sound/weapons/gauss_shoot.ogg'
damage = 0
nodamage = 1
modifier_type_to_apply = /datum/modifier/astralkarma
modifier_duration = 0.1 MINUTE
/datum/modifier/astralkarma
name = "starfall"
desc = "You feel dead."
mob_overlay_state = "red_electricity_constant"
stacks = MODIFIER_STACK_EXTEND
/datum/modifier/astralkarma/tick()
holder.adjustBruteLoss(2.5)
holder.adjustFireLoss(2.5)
/obj/item/weapon/weldingtool/silver
name = "strange welding tool"
desc = "A strange welding tool. Whilst slower then advanced gear of RnD and precursor technolgy, has benefits from both courses."
icon_state = "hybwelder"
toolspeed = 0.5
flame_color = "#C2C2C2" // Light bluish.
color = "#C2C2C2"
eye_safety_modifier = 1
always_process = TRUE
reach = 2
/obj/item/weapon/weldingtool/silver/process()
if(get_fuel() <= get_max_fuel())
reagents.add_reagent("fuel", 1)
..()
//Midnightfog
//funny melee weapon
/obj/item/weapon/melee/midnightblade
name = "midnight blade"
icon_state = "katana"
slot_flags = SLOT_BELT | SLOT_BACK //should make a proper sprite some time but spriting energy is hard
desc = "A sword where the blade appears to be wreathed in rippling shadows."
force = 32 //I don't think weakning melee/speed, or weaking healing is quite the same vaule as 50% block/deflect chance.
armor_penetration = 50
/obj/item/weapon/melee/midnightblade/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(user.a_intent == I_HURT) //Anti-Heal mode
. = ..()
target.add_modifier(/datum/modifier/grievous_wounds, 20)
else if(user.a_intent == I_DISARM) //weaken mode
. = ..()
target.add_modifier(/datum/modifier/berserk_exhaustion, 3)
else if(user.a_intent == I_GRAB) //The meme mode. 1/1000000 to apply an instant kill debuff....that takes 2 mins to kill.
. = ..()
if(prob(0.0001))
target.add_modifier(/datum/modifier/doomed, 120)
//A wierd beaker
/obj/item/weapon/reagent_containers/glass/beaker/gilded //Soo technically a good item but cumbersome to use.
name = "golden beaker"
desc = "An odd gold beaker, light seeming to bend around it, it's shadow dancing.."
icon_state = "beakergold_unused"
center_of_mass_x = 16
center_of_mass_y= 13
matter = list(MAT_GLASS = 500)
volume = 400
amount_per_transfer_from_this = 10
flags = OPENCONTAINER | NOREACT
//Sandstorm
//Sticking with the mining theme
/obj/item/weapon/gun/magnetic/matfed/phoronbore/modified
name = "modified portable phoron bore"
mat_cost = 100 //more unwieldy ammo better effiency
ammo_material = MAT_TRITIUM
//Mining tool
/obj/item/device/personal_shield_generator/belt/magnetbelt
name = "magnet generator belt"
desc = "A belt that will pull in minerals torwards you."
generator_hit_cost = 0
generator_active_cost = 0
damage_cost = 0
modifier_type = /datum/modifier/magnet
/datum/modifier/magnet //you are now a magnet
name = "Magnet Pull"
/datum/modifier/magnet/tick()
for(var/obj/item/weapon/ore/O in orange(4, holder))
step_towards(O, get_turf(holder))

View File

@@ -0,0 +1,797 @@
/mob/living/simple_mob/vore/weatherbeast //Mostly so mappers don't have to scroll through even more things
icon = 'modular_chomp/icons/mob/starbeast.dmi'
melee_damage_lower = 25
melee_damage_upper = 25
attack_armor_pen = 30
heat_resist = 1
cold_resist = 1
melee_attack_delay = 1 SECOND
grab_resist = 100
devourable = 0
faction = "Weather_Boss"
//Sup, trying to be better with commenting of my code and explain the oddities behind myself. Several may seem off
//A bit ago I added rare anomalous weather with the intent to add some creatures to summon during them, and well here they are.
//The device to summon them, and a potential anomalous weather summoner is a diffrent file/pr.
//Now the design goals.
//The dark mist boss, a strange cloaked furball. Bullet hellish with a fair bit of tell.
//The star sky boss, a mechanical worm. Trying to alter the work on the old worm code to make it function. May need it's own file.
//The sandstorm boss. Dinosaur.
//The acidrain boss. Either summoner, or ranged.
/mob/living/simple_mob/vore/weatherbeast/sandstorm //slow but endless hunter
name = "fossil tank"
desc = "A large metal tank."
health = 300 //15 laser shots
maxHealth = 300 //15 laser shots, assuming no armor
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100) //No thematics but I like boss critters to take a bit
icon_state = "rex"
melee_attack_delay = 0.5 SECOND
melee_damage_lower = 40 //Will murder you if you get within melee.
melee_damage_upper = 40
attack_armor_pen = 40
damage_fatigue_mult = 1 //Does slowly pick up speed.
injury_enrages = TRUE
movement_cooldown = 3 //Kind of slow.
ai_holder_type = /datum/ai_holder/simple_mob/fossiltank
movement_shake_radius = 8
taser_kill = FALSE
poison_resist = 1.0
shock_resist = -0.2
special_attack_min_range = 1
special_attack_max_range = 14 //The special attacks are more meant to pin you down or provide a healing to this tank.
special_attack_cooldown = 10 SECONDS
/datum/ai_holder/simple_mob/fossiltank
use_astar = TRUE
hostile = TRUE
retaliate = TRUE
mauling = TRUE
unconscious_vore = TRUE
vision_range = 100 //The entire gimmick of this thing is a slow moving, endless hunter. You shall not escape.
respect_alpha = FALSE
destructive = TRUE
forgive_resting = FALSE
/mob/living/simple_mob/vore/weatherbeast/sandstorm/updatehealth()
. = ..()
if(health < maxHealth*0.25)
icon_state = "rex_25"
icon_living = "rex_25"
else if(health < maxHealth*0.5)
icon_state = "rex_50"
icon_living = "rex_50"
else if (health < maxHealth*0.75)
icon_state = "rex_75"
icon_living = "rex_75"
else if (health > maxHealth*0.75)
icon_state = "rex"
icon_living = "rex"
/mob/living/simple_mob/vore/weatherbeast/sandstorm/do_special_attack(atom/A)
if(health < maxHealth*0.25)
visible_message(span_orange("<B>The fossil tank begins self repairs!.</B>"))
sleep(3)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
sleep(1)
adjustBruteLoss(-40)
adjustFireLoss(-40)
adjustToxLoss(-40)
adjustOxyLoss(-40)
adjustCloneLoss(-40)
else
Beam(A, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
sleep(30)
var/obj/item/projectile/P = new /obj/item/projectile/beam/stun(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/acidrain //acidrain
name = "toxic jellyfish"
desc = "A glowing green jellyfish"
health = 300 //15 laser shots
maxHealth = 300 //15 laser shots, assuming no armor
armor = list(melee = 60, bullet = 60, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 100) //So, it's made of jelly. Bullets and melee bounces off of it. The 20 laser and energy are for a smidge extra tankny because I savour endurance fights
icon_state = "jellyfish"
movement_cooldown = -2
damage_fatigue_mult = 0 //It's a mutant jellyfish boss mob.
glow_color = "#14ff20"
light_color = "#14ff20"
glow_range = 7
glow_intensity = 3
special_attack_min_range = 1
special_attack_max_range = 7
special_attack_cooldown = 30 SECONDS
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive/jellyfish
//So this guy is gonna be funky. Their special attacks depend on their nutrition.
nutrition = 250
/mob/living/simple_mob/vore/weatherbeast/acidrain/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.nutrition)
L.adjust_nutrition(-250)
adjust_nutrition(250)
if(prob(25))
L.adjustHalLoss(20)
/mob/living/simple_mob/vore/weatherbeast/acidrain/do_special_attack(atom/A)
if(nutrition > 400)
visible_message(span_orange("<B>The giant jellyfish begins to regenerate!.</B>"))
adjustBruteLoss(-300)
adjustFireLoss(-300)
else
return
/mob/living/simple_mob/vore/weatherbeast/acidrain/bullet_act(obj/item/projectile/P)
..()
if(istype(P, /obj/item/projectile/energy))
projectiletype = /obj/item/projectile/energy/declone
if(istype(P, /obj/item/projectile/bullet))
projectiletype = /obj/item/projectile/energy/bolt
if(istype(P, /obj/item/projectile/beam))
projectiletype = /obj/item/projectile/beam/gamma
/mob/living/simple_mob/vore/weatherbeast/acidrain/handle_special()
if(stat != DEAD)
acid_aura()
..()
/mob/living/simple_mob/vore/weatherbeast/acidrain/proc/acid_aura()
for(var/mob/living/L in view(7, src))
if(L.stat == DEAD)
continue
if(IIsAlly(L))
continue
if(ishuman(L))
var/mob/living/carbon/human/H = L
if(H.isSynthetic())
continue
L.add_modifier(/datum/modifier/poisoned/weak/acid, 12, src)
/datum/modifier/poisoned/weak/acid //Getting multiple of this will destroy you swiftly.
incoming_tox_damage_percent = 1.2
/datum/ai_holder/simple_mob/intentional/dark_stranger
use_astar = TRUE
var/closest_desired_distance = 4
var/close_range_radius = 3
/datum/ai_holder/simple_mob/intentional/dark_stranger/on_engagement(atom/A)
if(get_dist(holder, A) > closest_desired_distance)
holder.IMove(get_step_towards(holder, A))
/datum/ai_holder/simple_mob/intentional/dark_stranger/pre_special_attack(atom/A)
if(isliving(A))
var/mob/living/target = A
if(flee_when_dying && (holder.health / holder.getMaxHealth()) <= 0.4) //Phase two baby lets ago
holder.a_intent = I_GRAB
if(get_dist(target, holder) <= close_range_radius) //So doing a BH tradditonally when they're super close would feel a smidge unfair so get away attacks
holder.a_intent = I_DISARM
else
holder.a_intent = I_HURT
/mob/living/simple_mob/vore/weatherbeast/darkmist //the dark mist
name = "strange figure"
desc = "A figure cloaked in purple."
health = 300 //15 laser shots
maxHealth = 300 //15 laser shots, assuming no armor
armor = list(melee = 20, bullet = 20, laser = 60, energy = 60, bomb = 50, bio = 100, rad = 100) //Is use to manpulation of strange energies
icon_state = "stranger"
ai_holder_type = /datum/ai_holder/simple_mob/intentional/dark_stranger
damage_fatigue_mult = 0
movement_cooldown = -1
special_attack_min_range = 1
special_attack_max_range = 7
special_attack_cooldown = 10 SECONDS
projectiletype = /obj/item/projectile/energy/mob/precursor
var/attack_cycle = 1
/obj/item/projectile/bullet/precursorburst
use_submunitions = 1
only_submunitions = 1
range = 0
embed_chance = 0
submunition_spread_max = 1200
submunition_spread_min = 500
submunitions = list(/obj/item/projectile/energy/mob/precursor = 4)
/obj/item/projectile/bullet/precursorburst/on_range()
qdel(src)
/obj/item/projectile/bullet/precursorburst/shotgun
submunition_spread_max = 600
submunition_spread_min = 100
/mob/living/simple_mob/vore/weatherbeast/darkmist/do_special_attack(atom/A)
. = TRUE
switch(a_intent)
if(I_DISARM)
close_range(A)
if(I_HURT) //
bullet_wave(A)
if(I_GRAB)
phase_two(A)
//The way too many special attacks for one boss
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/close_range(atom/target)
if(attack_cycle == 1)
fake_pulse(target)
else if(attack_cycle == 2)
cross_beam(target)
else if(attack_cycle == 3)
x_beam(target)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/bullet_wave(atom/target)
if(attack_cycle == 1)
bullet_storm(target)
else if(attack_cycle == 2)
laser_grenade(target)
else if(attack_cycle == 3)
laser_shotgun(target)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/phase_two(atom/target)
if(attack_cycle == 1)
dodge_this(target)
else if(attack_cycle == 2)
pulse_spam(target)
else if(attack_cycle == 3)
influx_wave(target)
//close range attacks.
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/fake_pulse(atom/target)
Beam(target, icon_state = "sat_beam", time = 1.5 SECONDS, maxdistance = INFINITY)
sleep(20)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
attack_cycle = 2
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/cross_beam(atom/target) //Lasers in a cross
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow red!"))
sleep(15)
down_left_laser(target)
down_right_laser(target)
up_left_laser(target)
up_right_laser(target)
attack_cycle = 3
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/down_left_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x-1, src.y-1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/down_right_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x+1, src.y-1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/up_left_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x-1, src.y+1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/up_right_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x+1, src.y+1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/x_beam(atom/target) //Lasers in an X
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow blue!"))
sleep(15)
south_laser(target)
north_laser(target)
east_laser(target)
west_laser(target)
attack_cycle = 1
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/south_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x, src.y-1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/north_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x, src.y+1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/east_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x+1, src.y, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/west_laser(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/beam/precursor(get_turf(src))
var/turf = locate(src.x-1, src.y, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
//BH based attacks
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/bullet_storm(atom/target) //Storm of lasers
var/obj/item/projectile/P = new /obj/item/projectile/bullet/precursorburst(get_turf(src))
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to widly spin!"))
sleep(20)
P.launch_projectile(target, BP_TORSO, src)
sleep(30)
P.launch_projectile(target, BP_TORSO, src)
sleep(30)
P.launch_projectile(target, BP_TORSO, src)
attack_cycle = 2
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/laser_grenade(atom/target)
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow green!"))
sleep(20)
if(prob(50))
north_laser(target)
sleep(10)
up_right_laser(target)
sleep(10)
east_laser(target)
sleep(10)
down_right_laser(target)
sleep(10)
south_laser(target)
sleep(10)
down_left_laser(target)
sleep(10)
west_laser(target)
sleep(10)
up_left_laser(target)
attack_cycle = 2
else
north_laser(target)
sleep(10)
up_left_laser(target)
sleep(10)
west_laser(target)
sleep(10)
down_left_laser(target)
sleep(10)
south_laser(target)
sleep(10)
down_right_laser(target)
sleep(10)
east_laser(target)
sleep(10)
up_right_laser(target)
attack_cycle = 3
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/laser_shotgun(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/bullet/precursorburst/shotgun(get_turf(src))
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow bright purple!"))
sleep(20) //A build up before the BH.
P.launch_projectile(target, BP_TORSO, src)
sleep(10)
P.launch_projectile(target, BP_TORSO, src)
sleep(10)
P.launch_projectile(target, BP_TORSO, src)
attack_cycle = 1
//Phase two attacks. This names are from a previous draft and I laugh at them so they're staying.
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/dodge_this(atom/target) //two spinny laser wheels of death
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow orange!"))
sleep(20)
north_laser(target)
south_laser(target)
sleep(10)
down_right_laser(target)
up_left_laser(target)
sleep(10)
west_laser(target)
east_laser(target)
sleep(10)
up_right_laser(target)
down_left_laser(target)
sleep(10)
north_laser(target)
south_laser(target)
sleep(10)
down_right_laser(target)
up_left_laser(target)
sleep(10)
west_laser(target)
east_laser(target)
sleep(10)
up_right_laser(target)
down_left_laser(target)
attack_cycle = 2
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/pulse_spam(atom/target) //x laser, and cross laser followed by a flower.
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow silver!"))
sleep(20)
south_laser(target)
north_laser(target)
east_laser(target)
west_laser(target)
sleep(20)
down_left_laser(target)
down_right_laser(target)
up_left_laser(target)
up_right_laser(target)
sleep(20)
south_laser(target)
north_laser(target)
east_laser(target)
west_laser(target)
down_left_laser(target)
down_right_laser(target)
up_left_laser(target)
up_right_laser(target)
attack_cycle = 3
/mob/living/simple_mob/vore/weatherbeast/darkmist/proc/influx_wave(atom/target) //X and cross laser patterns paired with shotgun blasts
var/obj/item/projectile/P = new /obj/item/projectile/bullet/precursorburst/shotgun(get_turf(src))
visible_message(span("warning", "\The [src] pulls out a strange cube. It begins to glow pink!"))
sleep(20)
down_left_laser(target)
down_right_laser(target)
up_left_laser(target)
up_right_laser(target)
P.launch_projectile(target, BP_TORSO, src)
sleep(20)
south_laser(target)
north_laser(target)
east_laser(target)
west_laser(target)
P.launch_projectile(target, BP_TORSO, src)
attack_cycle = 1
//Note to future self, alter this one later to match the one up above when energy returns.
/mob/living/simple_mob/vore/weatherbeast/starsky //starry skies
name = "guardian unit"
desc = "A strange robotic being."
health = 300
maxHealth = 300
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
icon_state = "astral_sniper"
ai_holder_type = /datum/ai_holder/simple_mob/intentional/dark_stranger
damage_fatigue_mult = 0
movement_cooldown = -1
special_attack_min_range = 1
special_attack_max_range = 7
special_attack_cooldown = 10 SECONDS
projectiletype = /obj/item/projectile/energy/astralrail
/mob/living/simple_mob/vore/weatherbeast/starsky/do_special_attack(atom/A)
. = TRUE
switch(a_intent)
if(I_DISARM)
close_wave(A)
if(I_HURT) //
far_wave(A)
if(I_GRAB)
phase_two(A)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_up(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x, src.y+2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_up_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-1, src.y+2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_up_left_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-2, src.y+2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_up_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+1, src.y+2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_up_right_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+2, src.y+2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_right_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+2, src.y+1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/up_left_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-2, src.y+1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/left_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-2, src.y, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/right_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+2, src.y, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_down(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x, src.y-2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_down_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-1, src.y-2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_down_left_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-2, src.y-2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_down_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+1, src.y-2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_down_right_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+2, src.y-2, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_right_right(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x+2, src.y-1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/down_left_left(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/energy/astralrail(get_turf(src))
var/turf = locate(src.x-2, src.y-1, src.z)
target = turf
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/close_wave(atom/target) //bullet pattern when folks up close
down_down_right_right(target)
down_down_left_left(target)
up_up_left_left(target)
up_up_left_left(target)
sleep(20)
right_right(target)
left_left(target)
up_up(target)
down_down(target)
sleep(20)
down_down_left(target)
down_down_right(target)
down_left_left(target)
down_right_right(target)
up_up_right(target)
up_up_left(target)
up_left_left(target)
up_right_right(target)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/far_wave(atom/target) //Bullet pattern when folks are far away
down_down_left_left(target)
down_down_left(target)
down_down(target)
down_down_right(target)
down_down_right_right(target)
up_up_left_left(target)
up_up_left(target)
up_up(target)
up_up_right(target)
up_up_right_right(target)
sleep(20)
up_up_right_right(target)
up_right_right(target)
right_right(target)
down_right_right(target)
down_down_right_right(target)
up_up_left_left(target)
up_left_left(target)
left_left(target)
down_left_left(target)
down_down_left_left(target)
sleep(20)
down_down_left_left(target)
down_down_left(target)
down_down(target)
down_down_right(target)
down_down_right_right(target)
up_up_left_left(target)
up_up_left(target)
up_up(target)
up_up_right(target)
up_up_right_right(target)
sleep(20)
up_up_right_right(target)
up_right_right(target)
right_right(target)
down_right_right(target)
down_down_right_right(target)
up_up_left_left(target)
up_left_left(target)
left_left(target)
down_left_left(target)
down_down_left_left(target)
/mob/living/simple_mob/vore/weatherbeast/starsky/proc/phase_two(atom/target) //Phase two bullet pattern
up_up_left_left(target)
down_down_right_right(target)
sleep(10)
up_up_left(target)
down_down_right(target)
sleep(10)
up_up(target)
down_down(target)
sleep(10)
up_up_right(target)
down_down_left(target)
sleep(10)
up_up_right_right(target)
down_down_left_left(target)
sleep(10)
up_right_right(target)
down_left_left(target)
sleep(10)
right_right(target)
left_left(target)
sleep(10)
down_right_right(target)
up_left_left(target)
sleep(10)
down_down_right_right(target)
up_up_left_left(target)
sleep(30)
up_up_right(target)
up_up(target)
up_up_left(target)
down_down_right(target)
down_down(target)
down_down_left(target)
left_left(target)
up_left_left(target)
down_left_left(target)
right_right(target)
up_right_right(target)
down_right_right(target)
sleep(30)
up_up_left_left(target)
up_up_left(target)
up_up(target)
up_up_right(target)
up_up_right_right(target)
down_down_left_left(target)
down_down_left(target)
down_down(target)
down_down_right(target)
down_down_right_right(target)
sleep(30)
up_up_left_left(target)
up_up_right_right(target)
down_down_right_right(target)
down_down_left_left(target)
sleep(10)
up_left_left(target)
up_up_right(target)
down_down_left(target)
down_right_right(target)
sleep(10)
left_left(target)
up_up(target)
down_down(target)
right_right(target)
sleep(10)
down_left_left(target)
up_up_left(target)
down_down_right(target)
up_right_right(target)
sleep(10)
up_up_left_left(target)
up_up_right_right(target)
down_down_right_right(target)
down_down_left_left(target)
sleep(50) //False sense of security for the finale
up_up_left_left(target)
up_up_left(target)
up_up(target)
up_up_right(target)
up_up_right_right(target)
up_right_right(target)
up_left_left(target)
right_right(target)
left_left(target)
down_right_right(target)
down_left_left(target)
down_down_left_left(target)
down_down_left(target)
down_down(target)
down_down_right(target)
down_down_right_right(target)