Tyr Update Again (#9531)

Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com>
This commit is contained in:
FluffMedic
2024-12-08 19:40:12 -05:00
committed by GitHub
parent b84c098e8d
commit a8d4d10c63
8 changed files with 1307 additions and 1697 deletions

View File

@@ -26,7 +26,7 @@
..()
/mob/living/simple_mob/animal/tyr/rainbow_fly/proc/painbow_aura()
for(var/mob/living/L in view(src, 4))
for(var/mob/living/L in view(src, 5))
L.druggy = max(L.druggy, 10)
/mob/living/simple_mob/animal/tyr/groundpitcher
@@ -145,9 +145,6 @@
var/mob/living/L = A
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
L.Weaken(4)
L.Stun(4)
L.stuttering = max(L.stuttering, 4)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L)
s.start()

View File

@@ -56,7 +56,7 @@
needs_reload = TRUE
reload_max = 7 // Not the best default, but it fits the pistol
ai_holder_type = /datum/ai_holder/simple_mob/merc/eclipse/ranged
ai_holder_type = /datum/ai_holder/hostile/ranged/robust/eclipse
loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100
@@ -66,6 +66,7 @@
special_attack_min_range = 2
special_attack_max_range = 7
var/has_heal_droid = FALSE
var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt
//Want a self heal for a spefic dude, and to increase diffculty of some POIs
/mob/living/simple_mob/humanoid/eclipse/handle_special()
@@ -85,9 +86,12 @@
////////////////////////////////
// Stealing Merc AI Types
////////////////////////////////
/datum/ai_holder/simple_mob/merc/eclipse
threaten = FALSE
/datum/ai_holder/hostile/ranged/robust/eclipse
vision_range = 7
conserve_ammo = TRUE
intelligence_level = AI_SMART
use_astar = TRUE
pointblank = TRUE
/datum/ai_holder/simple_mob/merc/eclipse/hunter
vision_range = 7
@@ -802,35 +806,12 @@
special_attack_max_range = 7
projectiletype = /obj/item/projectile/energy/electrode
specialattackprojectile = /obj/item/projectile/energy/flash
/mob/living/simple_mob/humanoid/eclipse/solar/disablernoodle/do_special_attack(atom/A)
visible_message(span_critical("\The [src] pulls out a flash!"))
if(isliving(A))
var/mob/living/L = A
if(iscarbon(L))
var/mob/living/carbon/C = L
if(C.stat != DEAD)
var/safety = C.eyecheck()
if(safety <= 0)
var/flash_strength = 8
if(ishuman(C))
var/mob/living/carbon/human/H = C
flash_strength *= H.species.flash_mod
if(flash_strength > 0)
to_chat(H, span_critical("You are disoriented by \the [src]!"))
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
H.flash_eyes()
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns")
else if(issilicon(L))
if(isrobot(L))
var/flashfail = FALSE
var/mob/living/silicon/robot/R = L
if(!flashfail)
to_chat(R, span_critical("Your optics are scrambled by \the [src]!"))
R.Confuse(10)
R.flash_eyes()
visible_message(span_warning("\The [src] begins to aim a flare gun!"))
Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle //Bouncing bullet extreme
name = "Lunar Eclipse Silver Serpent"
@@ -847,13 +828,12 @@
special_attack_cooldown = 30 SECONDS
special_attack_min_range = 1
special_attack_max_range = 7
specialattackprojectile = /obj/item/projectile/beam/energy_net
/mob/living/simple_mob/humanoid/eclipse/solar/disablernoodle/do_special_attack(atom/A) //I am bringing back the netgun attack. 4 seconds
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle/do_special_attack(atom/A) //I am bringing back the netgun attack. 4 seconds
visible_message(span_warning("\The [src] begins to create an energy net!"))
Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
sleep(40)
var/obj/item/projectile/P = new /obj/item/projectile/beam/energy_net(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/solar/plant
@@ -873,12 +853,20 @@
special_attack_max_range = 7
/mob/living/simple_mob/humanoid/eclipse/solar/plant/do_special_attack(atom/A)
var/mob/living/carbon/human/H = A
visible_message(span_warning("\The [src]'s vines spread out!"))
Beam(A, icon_state = "vine", time = 3 SECONDS, maxdistance = INFINITY)
if(ishuman(A))
addtimer(CALLBACK(src, PROC_REF(itemyoink), A), 3 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/proc/itemyoink(mob/living/carbon/human/H)
if(!H)
return
var/obj/item/I = H.get_active_hand()
H.drop_item()
if(I)
I.throw_at(src, 2, 4) // Just yoinked.
src.visible_message(span_danger("The [name] heaves, pulling \the [A]'s weapon from their hands!"))
src.visible_message(span_danger("The [name] heaves, pulling \the [H]'s weapon from their hands!"))
/mob/living/simple_mob/humanoid/eclipse/lunar/experimenter
name = "Lunar Eclipse Experimenter"
@@ -894,16 +882,17 @@
special_attack_min_range = 1
special_attack_max_range = 7
projectiletype = /obj/item/projectile/energy/spikeenergy_ball //using the weapon found upon tyr
projectiletype = /obj/item/projectile/energy/wp_shotgun //using the weapon found upon tyr
/mob/living/simple_mob/humanoid/eclipse/lunar/experimenter/do_special_attack(atom/A)
visible_message(span_danger("The [src]'s gauntlet glows silver!"))
addtimer(CALLBACK(src, PROC_REF(gravity_pull), A), 1 SECOND, TIMER_DELETE_ME)
if(isliving(A))
addtimer(CALLBACK(src, PROC_REF(gravity_pull), A), 3 SECOND, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/proc/gravity_pull(atom/A)
var/D = src
var/mob/living/carbon/human/H = A
H.throw_at(D, 2, 4) // Just yoinked.
/mob/living/simple_mob/humanoid/eclipse/proc/gravity_pull(mob/living/L)
if(!L)
return
L.throw_at(src, 2, 4) // Just yoinked.
//The Precursor intative big folks
/mob/living/simple_mob/humanoid/eclipse/lunar/titanhunter //lunar melee unit
@@ -945,6 +934,7 @@
special_attack_cooldown = 15 SECONDS
special_attack_min_range = 1
special_attack_max_range = 9
specialattackprojectile = /obj/item/projectile/arc/radioactive/weak
/obj/item/projectile/arc/radioactive/weak
@@ -953,9 +943,8 @@
/mob/living/simple_mob/humanoid/eclipse/solar/nuclear/do_special_attack(atom/A)
visible_message(span_warning("\The [src] begins to glow green!"))
Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
sleep(30)
var/obj/item/projectile/P = new /obj/item/projectile/beam/energy_net(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
//Vistors of the other
//One is a familiar shape from Sif, the other is new and anomalous based.
@@ -978,47 +967,7 @@
melee_attack_delay = 1.5
/mob/living/simple_mob/humanoid/eclipse/solar/froststalker/do_special_attack(atom/A)
// Teleport attack.
if(!A)
to_chat(src, span_warning("There's nothing to teleport to."))
return FALSE
var/list/nearby_things = range(4, A)
var/list/valid_turfs = list()
// All this work to just go to a non-dense tile.
for(var/turf/potential_turf in nearby_things)
var/valid_turf = TRUE
if(potential_turf.density)
continue
for(var/atom/movable/AM in potential_turf)
if(AM.density)
valid_turf = FALSE
if(valid_turf)
valid_turfs.Add(potential_turf)
if(!(valid_turfs.len))
to_chat(src, span_warning("There wasn't an unoccupied spot to teleport to."))
return FALSE
var/turf/target_turf = pick(valid_turfs)
var/turf/T = get_turf(src)
var/datum/effect/effect/system/spark_spread/s1 = new /datum/effect/effect/system/smoke_spread/frost
s1.set_up(5, 1, T)
var/datum/effect/effect/system/spark_spread/s2 = new /datum/effect/effect/system/smoke_spread
s2.set_up(5, 1, target_turf)
T.visible_message(span_warning("\The [src] vanishes!"))
s1.start()
forceMove(target_turf)
playsound(target_turf, 'sound/effects/phasein.ogg', 50, 1)
to_chat(src, span_notice("You teleport to \the [target_turf]."))
target_turf.visible_message(span_warning("\The [src] appears!"))
s2.start()
teleport(A)
/mob/living/simple_mob/humanoid/eclipse/lunar/abyssdiver
name = "Lunar Eclipse Abyss Diver"
@@ -1027,19 +976,31 @@
desc = "A strange being wearing a blunt resistaint coat."
projectiletype = /obj/item/projectile/scatter/shotgun
icon_state = "eclipse_diver" //note to self try to redo this sprite sometime
reload_count = 1
reload_max = 1
reload_time = 2 SECONDS
/mob/living/simple_mob/humanoid/eclipse/lunar/abyssdiver/do_special_attack(atom/A)
var/mob/living/L = A
visible_message(span_danger("\The [src] begins to mess with a wrist mounted device."))
sleep(30)
if(isliving(A))
if(iscarbon(L))
return
else if(issilicon(L))
if(isrobot(L))
L.Weaken(10)
if(isrobot(A))
addtimer(CALLBACK(src, PROC_REF(remote_shutdown), A), 3 SECONDS, TIMER_DELETE_ME)
else if(istype(A, /obj/mecha))
var/obj/mecha/M = A
visible_message(span_critical("\The [M] is remotly hacked and ejects [M.occupant]!"))
M.go_out()
addtimer(CALLBACK(src, PROC_REF(remote_eject), A), 3 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/proc/remote_shutdown(var/mob/living/silicon/robot/L)
if(!L)
return
L.Weaken(10)
/mob/living/simple_mob/humanoid/eclipse/proc/remote_eject(obj/mecha/M)
if(!M)
return
visible_message(span_critical("\The [M] is remotly hacked and ejects [M.occupant]!"))
M.go_out()
/mob/living/simple_mob/humanoid/eclipse/proc/special_projectile(atom/A)
if(!A)
return
var/obj/item/projectile/P = new specialattackprojectile(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)

View File

@@ -6,6 +6,7 @@
projectile_dispersion = 8
projectile_accuracy = 0
ranged_cooldown = 5
grab_resist = 100
damage_fatigue_mult = 0
@@ -124,7 +125,8 @@
/mob/living/simple_mob/humanoid/eclipse/head/scientist
name = "Eclipse Lead Researcher"
icon_state = "fleetsci"
health = 30
maxHealth = 60
health = 60
special_attack_cooldown = 5 SECONDS
special_attack_min_range = 1
special_attack_max_range = 10
@@ -168,31 +170,6 @@
size_x = 3
size_y = 3
/mob/living/simple_mob/humanoid/eclipse/head/scientist/updatehealth()
. = ..()
if(vore_fullness == 1)
special_attack_cooldown = 10 SECONDS
else if(vore_fullness > 1)
special_attack_cooldown = 20 SECONDS
else
special_attack_cooldown = 5 SECONDS
/mob/living/simple_mob/humanoid/eclipse/head/scientist/do_special_attack(atom/A)
visible_message(span_warning("\The [src] begins to fabricate drones!"))
sleep(3)
if(vore_fullness == 1)
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
else if(vore_fullness > 1)
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
else
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
/mob/living/simple_mob/mechanical/hivebot/swarm/eclipse
faction = FACTION_ECLIPSE
@@ -374,15 +351,21 @@
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead
name = "Eclipse Precursor Overseer"
icon_state = "overseer_shield"
health = 300
maxHealth = 300
grab_resist = 100
var/fullshield = 6
var/shieldrage = 6
special_attack_cooldown = 4 SECONDS
special_attack_min_range = 1
special_attack_max_range = 8
projectiletype = /obj/item/projectile/energy/homing_bolt
ai_holder_type = /datum/ai_holder/simple_mob/intentional/adv_dark_gygax
var/fullshield = 4
var/shieldrage = 4
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/bullet_act(obj/item/projectile/P) //Projectiles will be absorbed by the shield. Note to self do funky sprite. 10 hits to remove
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/bullet_act(obj/item/projectile/P) //Projectiles will be absorbed by the shield. Note to self do funky sprite. 4 hits to remove
if(fullshield > 0)
fullshield--
if(P == /obj/item/projectile/ion)
fullshield = 0
visible_message(span_boldwarning(span_orange("[P] breaks the shield!!.")))
icon_state = "overseer"
if(fullshield > 0)
visible_message(span_boldwarning(span_orange("[P] is absorbed by the shield!.")))
else
@@ -392,109 +375,133 @@
..()
shieldrage--
if(shieldrage == 0)
shieldrage = 6
fullshield = 6
shieldrage = 4
fullshield = 4
visible_message(span_boldwarning(span_orange("The shield reactivates!!.")))
icon_state = "overseer_shield"
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/do_special_attack(atom/A)
if(vore_fullness > 2) //If they nompf someone already
fullsummon(A)
var/mob/living/L = A
var/deathdir = rand(1,3)
switch(deathdir)
if(1)
teleport(A)
if(2)
bomb_chaos(A)
if(3)
bomb_lines(A)
if(istype(A, /obj/mecha))//if target is a mecha
switch(a_intent)
if(I_DISARM) // Phase 3
mech_three(A)
if(I_HURT) // Phase 1
mech_one(A)
if(I_GRAB) // Phase 2
mech_two(A)
/mob/living/simple_mob/humanoid/eclipse/head/engineer //teshari
name = "Eclipse Chief Engineer"
health = 50
maxHealth = 50
melee_damage_lower = 60 //Durasteel fireaxe
melee_damage_upper = 60
projectiletype = null
if(!L.devourable || !L.allowmobvore || !L.can_be_drop_prey || !L.throw_vore) //if they aren't edible
if(fullshield > 0)
switch(a_intent)
if(I_DISARM) // Phase 3
shield_three(A)
if(I_HURT) // Phase 1
shield_one(A)
if(I_GRAB) // Phase 2
shield_two(A)
else
switch(a_intent)
if(I_DISARM) // Phase 3
phase_three(A)
if(I_HURT) // Phase 1
phase_one(A)
if(I_GRAB) // Phase 2
phase_two(A)
else
visible_message(span_danger("The [src]'s gauntlet glows silver!"))
addtimer(CALLBACK(src, PROC_REF(gravity_pull), A), 1 SECOND, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/head/engineer/Initialize()
add_modifier(/datum/modifier/technomancer/haste, null, src) // tesh goes nyooooom
return ..()
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/fullsummon(atom/target) //Summons a wall whilst the boss tries to enjoy their meal
visible_message(span_warning("\The [src] calls in drone support!"))
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc)
sleep(30)
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc)
sleep(30)
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc)
/mob/living/simple_mob/humanoid/eclipse/head/medical //noodl
name = "Eclipse Chief Medical Officer"
health = 150
maxHealth = 150
special_attack_cooldown = 5 SECONDS
special_attack_min_range = 0
special_attack_max_range = 7
melee_damage_lower = 15 //Durasteel fireaxe
melee_damage_upper = 15
attack_armor_pen = 60
projectiletype = null
var/cloaked_alpha = 45 // Lower = Harder to see.
var/cloak_cooldown = 5 SECONDS // Amount of time needed to re-cloak after losing it.
var/last_uncloak = 0 // world.time
var/poison_type = "stoxin"
var/poison_per_bite = 8
var/poison_chance = 80
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/mech_two(atom/target) //Forces the mecha user in a strange dance, being forced out, likly dodging one projectile and getting back in
var/obj/mecha/M = target
visible_message(span_critical("\The [M] is remotly hacked and ejects [M.occupant]!"))
M.go_out()
/mob/living/simple_mob/humanoid/eclipse/head/medical/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(L.reagents)
var/target_zone = pick(BP_TORSO,BP_TORSO,BP_TORSO,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_HEAD)
if(L.can_inject(src, null, target_zone))
inject_poison(L, target_zone)
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/mech_one(atom/target) //might alter this one to a machine gun esque ion fire
var/obj/item/projectile/P = new /obj/item/projectile/ion(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
sleep(5)
P.launch_projectile(target, BP_TORSO, src)
sleep(5)
P.launch_projectile(target, BP_TORSO, src)
sleep(5)
P.launch_projectile(target, BP_TORSO, src)
sleep(5)
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/head/medical/proc/inject_poison(mob/living/L, target_zone)
if(prob(poison_chance))
to_chat(L, span_warning("You feel a tiny prick."))
L.reagents.add_reagent(poison_type, poison_per_bite)
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/mech_three(atom/target) //did we ever fix fire bypassing mechas?
var/obj/item/projectile/P = new /obj/item/projectile/scatter/flamethrower(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/head/medical/cloak()
if(cloaked)
return
animate(src, alpha = cloaked_alpha, time = 1 SECOND)
cloaked = TRUE
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/phase_one(atom/target) //Simply tries to disable you
visible_message(span_alien("\The [src] pulls out a flash!"))
if(isliving(target))
var/mob/living/L = target
if(iscarbon(L))
var/mob/living/carbon/C = L
if(C.stat != DEAD)
var/safety = C.eyecheck()
if(safety <= 0)
var/flash_strength = 8
if(ishuman(C))
var/mob/living/carbon/human/H = C
flash_strength *= H.species.flash_mod
if(flash_strength > 0)
to_chat(H, span_alien("You are disoriented by \the [src]!"))
H.eye_blurry = max(H.eye_blurry, flash_strength + 5)
H.flash_eyes()
H.apply_damage(flash_strength * H.species.flash_burn/5, BURN, BP_HEAD, 0, 0, "Photon burns")
else if(issilicon(L))
if(isrobot(L))
var/flashfail = FALSE
var/mob/living/silicon/robot/R = L
if(!flashfail)
to_chat(R, span_alien("Your optics are scrambled by \the [src]!"))
R.Confuse(10)
R.flash_eyes()
/mob/living/simple_mob/humanoid/eclipse/head/medical/uncloak()
last_uncloak = world.time // This is assigned even if it isn't cloaked already, to 'reset' the timer if the spider is continously getting attacked.
if(!cloaked)
return
animate(src, alpha = initial(alpha), time = 1 SECOND)
cloaked = FALSE
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/phase_two(atom/target)
// Check if cloaking if possible.
/mob/living/simple_mob/humanoid/eclipse/head/medical/proc/can_cloak()
if(stat)
return FALSE
if(last_uncloak + cloak_cooldown > world.time)
return FALSE
return TRUE
// Called by things that break cloaks, like Technomancer wards.
/mob/living/simple_mob/humanoid/eclipse/head/medical/break_cloak()
uncloak()
/mob/living/simple_mob/humanoid/eclipse/head/medical/is_cloaked()
return cloaked
// Cloaks the spider automatically, if possible.
/mob/living/simple_mob/humanoid/eclipse/head/medical/handle_special()
if(!cloaked && can_cloak())
cloak()
//special attack things
/mob/living/simple_mob/humanoid/eclipse/head/scientist/do_special_attack(atom/A)
addtimer(CALLBACK(src, PROC_REF(summon_drones), A, 3, 0.5 SECONDS), 0.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/proc/summon_drones(atom/target, var/amount, var/fire_delay)
if(!target)
return
var/deathdir = rand(1,3)
switch(deathdir)
if(1)
new /mob/living/simple_mob/mechanical/mining_drone/scavenger/eclipse (src.loc)
if(2)
new /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse (src.loc)
if(3)
new /mob/living/simple_mob/mechanical/combat_drone/artillery
amount--
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(summon_drones), target, amount, fire_delay), fire_delay, TIMER_DELETE_ME)
/mob/living/simple_mob/humanoid/eclipse/head/medical/do_special_attack(atom/A)
if(!cloaked)
teleport(A)
/mob/living/simple_mob/humanoid/eclipse/proc/teleport(atom/A)
// Teleport attack.
if(!A)
to_chat(src, span_warning("There's nothing to teleport to."))
return FALSE
var/list/nearby_things = range(1, target)
var/list/nearby_things = range(4, A)
var/list/valid_turfs = list()
// All this work to just go to a non-dense tile.
@@ -521,7 +528,7 @@
s2.set_up(5, 1, target_turf)
T.visible_message(span_notice("\The [src] vanishes!"))
T.visible_message(span_warning("\The [src] vanishes!"))
s1.start()
forceMove(target_turf)
@@ -531,31 +538,151 @@
target_turf.visible_message(span_warning("\The [src] appears!"))
s2.start()
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/phase_three(atom/target) //This might friendly fire itself, but funny and final phase
Beam(target, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
sleep(30)
var/obj/item/projectile/P = new /obj/item/projectile/beam/chain_lightning(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/head/cargomaster //Naga
name = "Eclipse Cargo Master"
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/shield_one(atom/target)
var/obj/item/projectile/P = new /obj/item/projectile/temp/hot(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/proc/bomb_lines(atom/A)
if(!A)
return
var/list/potential_targets = ai_holder.list_targets()
for(var/atom/entry in potential_targets)
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
potential_targets -= entry
if(potential_targets.len)
var/iteration = clamp(potential_targets.len, 1, 3)
for(var/i = 0, i < iteration, i++)
if(!(potential_targets.len))
break
var/mob/target = pick(potential_targets)
potential_targets -= target
spawn_lines(target)
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/shield_two(atom/target)
if(prob(50))
visible_message(span_alien("\The [src] begins to bandage their wounds."))
sleep(30)
adjustBruteLoss(-25.0)
visible_message(span_alien("\The [src] begins to salve their burns."))
sleep(30)
adjustFireLoss(-25.0)
else
visible_message(span_alien("\The [src] consumes an odd pill."))
add_modifier(/datum/modifier/aura/slime_heal, 15, src)
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/proc/shield_three(atom/target)
Beam(target, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
sleep(30)
var/obj/item/projectile/P = new /obj/item/projectile/beam/lightning(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/proc/spawn_lines(atom/target)
var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
var/list/line_range = list()
var/turf/T = get_turf(target)
line_range += T
for(var/i = 1, i <= 7, i++)
switch(alignment)
if(1)
if(T.x-i > 0)
line_range += locate(T.x-i, T.y-i, T.z)
if(T.x+i <= world.maxx)
line_range += locate(T.x+i, T.y+i, T.z)
if(T.y-i > 0)
line_range += locate(T.x+i, T.y-i, T.z)
if(T.y+i <= world.maxy)
line_range += locate(T.x-i, T.y+i, T.z)
if(2)
if(T.x-i > 0)
line_range += locate(T.x-i, T.y, T.z)
if(T.x+i <= world.maxx)
line_range += locate(T.x+i, T.y, T.z)
if(T.y-i > 0)
line_range += locate(T.x, T.y-i, T.z)
if(T.y+i <= world.maxy)
line_range += locate(T.x, T.y+i, T.z)
for(var/turf/dropspot in line_range)
new /obj/effect/artillery_attack(dropspot)
/mob/living/simple_mob/humanoid/eclipse/proc/bomb_chaos(atom/A)
if(!A)
return
var/list/potential_targets = ai_holder.list_targets()
for(var/atom/entry in potential_targets)
if(istype(entry, /mob/living/simple_mob/humanoid/eclipse))
potential_targets -= entry
if(potential_targets.len)
var/iteration = clamp(potential_targets.len, 1, 3)
for(var/i = 0, i < iteration, i++)
if(!(potential_targets.len))
break
var/mob/target = pick(potential_targets)
potential_targets -= target
chaos_lines(target)
/mob/living/simple_mob/humanoid/eclipse/proc/chaos_lines(atom/target)
var/alignment = rand(1,2)
var/list/line_range = list()
var/turf/T = get_turf(target)
line_range += T
for(var/i = 1, i <= 7, i++)
switch(alignment)
if(1)
if(T.x-i > 0)
var/zed = rand(1,3)
line_range += locate(T.x+zed, T.y-i, T.z)
if(T.x+i <= world.maxx)
var/zed = rand(1,3)
line_range += locate(T.x+zed, T.y+i, T.z)
if(T.y-i > 0)
var/zed = rand(1,3)
line_range += locate(T.x+i, T.y+zed, T.z)
if(T.y+i <= world.maxy)
var/zed = rand(1,3)
line_range += locate(T.x-i, T.y+zed, T.z)
if(2)
if(T.x-i > 0)
var/zed = rand(1,3)
line_range += locate(T.x-i, T.y-zed, T.z)
if(T.x+i <= world.maxx)
var/zed = rand(1,3)
line_range += locate(T.x+i, T.y-zed, T.z)
if(T.y-i > 0)
var/zed = rand(1,3)
line_range += locate(T.x-zed, T.y-i, T.z)
if(T.y+i <= world.maxy)
var/zed = rand(1,3)
line_range += locate(T.x-zed, T.y+i, T.z)
for(var/turf/dropspot in line_range)
new /obj/effect/artillery_attack(dropspot)
/obj/effect/artillery_attack
anchored = TRUE
density = FALSE
unacidable = TRUE
mouse_opacity = 0
icon = 'icons/effects/effects.dmi'
icon_state = "drop_marker"
/obj/effect/artillery_attack/Initialize(mapload)
..()
return INITIALIZE_HINT_LATELOAD
/obj/effect/artillery_attack/LateInitialize()
var/delay = rand(25, 30)
addtimer(CALLBACK(src, PROC_REF(spawner)), delay, TIMER_DELETE_ME)
/obj/effect/artillery_attack/proc/spawner()
new /obj/effect/falling_effect/callstrike_bomb(src.loc)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.7 SECONDS, TIMER_DELETE_ME)
/obj/effect/falling_effect/callstrike_bomb
falling_type = /obj/effect/callstrike
crushing = FALSE
/obj/effect/callstrike
anchored = TRUE
density = FALSE
mouse_opacity = 0
icon ='modular_chomp/icons/obj/guns/precursor/tyr.dmi'
/obj/effect/callstrike/Initialize(mapload)
.=..()
icon_state = "arti"
/obj/effect/callstrike/end_fall(var/crushing = FALSE)
for(var/mob/living/L in loc)
var/target_zone = ran_zone()
var/blocked = L.run_armor_check(target_zone, "laser")
var/soaked = L.get_armor_soak(target_zone, "laser")
if(!L.apply_damage(70, BURN, target_zone, blocked, soaked))
break
playsound(src, 'sound/effects/clang2.ogg', 50, 1)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.25 SECONDS, TIMER_DELETE_ME)