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() /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) L.druggy = max(L.druggy, 10)
/mob/living/simple_mob/animal/tyr/groundpitcher /mob/living/simple_mob/animal/tyr/groundpitcher
@@ -145,9 +145,6 @@
var/mob/living/L = A var/mob/living/L = A
A.emp_act(4) //The weakest strength of EMP A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1) 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 var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L) s.set_up(5, 1, L)
s.start() s.start()

View File

@@ -56,7 +56,7 @@
needs_reload = TRUE needs_reload = TRUE
reload_max = 7 // Not the best default, but it fits the pistol 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, loot_list = list(/obj/item/slime_extract/sepia = 1,
/obj/item/bone/skull = 100 /obj/item/bone/skull = 100
@@ -66,6 +66,7 @@
special_attack_min_range = 2 special_attack_min_range = 2
special_attack_max_range = 7 special_attack_max_range = 7
var/has_heal_droid = FALSE 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 //Want a self heal for a spefic dude, and to increase diffculty of some POIs
/mob/living/simple_mob/humanoid/eclipse/handle_special() /mob/living/simple_mob/humanoid/eclipse/handle_special()
@@ -85,9 +86,12 @@
//////////////////////////////// ////////////////////////////////
// Stealing Merc AI Types // Stealing Merc AI Types
//////////////////////////////// ////////////////////////////////
/datum/ai_holder/simple_mob/merc/eclipse /datum/ai_holder/hostile/ranged/robust/eclipse
threaten = FALSE
vision_range = 7 vision_range = 7
conserve_ammo = TRUE
intelligence_level = AI_SMART
use_astar = TRUE
pointblank = TRUE
/datum/ai_holder/simple_mob/merc/eclipse/hunter /datum/ai_holder/simple_mob/merc/eclipse/hunter
vision_range = 7 vision_range = 7
@@ -802,35 +806,12 @@
special_attack_max_range = 7 special_attack_max_range = 7
projectiletype = /obj/item/projectile/energy/electrode 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) /mob/living/simple_mob/humanoid/eclipse/solar/disablernoodle/do_special_attack(atom/A)
visible_message(span_critical("\The [src] pulls out a flash!")) visible_message(span_warning("\The [src] begins to aim a flare gun!"))
if(isliving(A)) Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
var/mob/living/L = A addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
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()
/mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle //Bouncing bullet extreme /mob/living/simple_mob/humanoid/eclipse/lunar/silvernoodle //Bouncing bullet extreme
name = "Lunar Eclipse Silver Serpent" name = "Lunar Eclipse Silver Serpent"
@@ -847,13 +828,12 @@
special_attack_cooldown = 30 SECONDS special_attack_cooldown = 30 SECONDS
special_attack_min_range = 1 special_attack_min_range = 1
special_attack_max_range = 7 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!")) visible_message(span_warning("\The [src] begins to create an energy net!"))
Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY) Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
sleep(40) addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
var/obj/item/projectile/P = new /obj/item/projectile/beam/energy_net(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
/mob/living/simple_mob/humanoid/eclipse/solar/plant /mob/living/simple_mob/humanoid/eclipse/solar/plant
@@ -873,12 +853,20 @@
special_attack_max_range = 7 special_attack_max_range = 7
/mob/living/simple_mob/humanoid/eclipse/solar/plant/do_special_attack(atom/A) /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() var/obj/item/I = H.get_active_hand()
H.drop_item() H.drop_item()
if(I) if(I)
I.throw_at(src, 2, 4) // Just yoinked. 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 /mob/living/simple_mob/humanoid/eclipse/lunar/experimenter
name = "Lunar Eclipse Experimenter" name = "Lunar Eclipse Experimenter"
@@ -894,16 +882,17 @@
special_attack_min_range = 1 special_attack_min_range = 1
special_attack_max_range = 7 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) /mob/living/simple_mob/humanoid/eclipse/lunar/experimenter/do_special_attack(atom/A)
visible_message(span_danger("The [src]'s gauntlet glows silver!")) 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) /mob/living/simple_mob/humanoid/eclipse/proc/gravity_pull(mob/living/L)
var/D = src if(!L)
var/mob/living/carbon/human/H = A return
H.throw_at(D, 2, 4) // Just yoinked. L.throw_at(src, 2, 4) // Just yoinked.
//The Precursor intative big folks //The Precursor intative big folks
/mob/living/simple_mob/humanoid/eclipse/lunar/titanhunter //lunar melee unit /mob/living/simple_mob/humanoid/eclipse/lunar/titanhunter //lunar melee unit
@@ -945,6 +934,7 @@
special_attack_cooldown = 15 SECONDS special_attack_cooldown = 15 SECONDS
special_attack_min_range = 1 special_attack_min_range = 1
special_attack_max_range = 9 special_attack_max_range = 9
specialattackprojectile = /obj/item/projectile/arc/radioactive/weak
/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) /mob/living/simple_mob/humanoid/eclipse/solar/nuclear/do_special_attack(atom/A)
visible_message(span_warning("\The [src] begins to glow green!")) visible_message(span_warning("\The [src] begins to glow green!"))
Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY) Beam(A, icon_state = "sat_beam", time = 3 SECONDS, maxdistance = INFINITY)
sleep(30) addtimer(CALLBACK(src, PROC_REF(special_projectile), A), 3 SECONDS, TIMER_DELETE_ME)
var/obj/item/projectile/P = new /obj/item/projectile/beam/energy_net(get_turf(src))
P.launch_projectile(A, BP_TORSO, src)
//Vistors of the other //Vistors of the other
//One is a familiar shape from Sif, the other is new and anomalous based. //One is a familiar shape from Sif, the other is new and anomalous based.
@@ -978,47 +967,7 @@
melee_attack_delay = 1.5 melee_attack_delay = 1.5
/mob/living/simple_mob/humanoid/eclipse/solar/froststalker/do_special_attack(atom/A) /mob/living/simple_mob/humanoid/eclipse/solar/froststalker/do_special_attack(atom/A)
// Teleport attack. teleport(A)
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()
/mob/living/simple_mob/humanoid/eclipse/lunar/abyssdiver /mob/living/simple_mob/humanoid/eclipse/lunar/abyssdiver
name = "Lunar Eclipse Abyss Diver" name = "Lunar Eclipse Abyss Diver"
@@ -1027,19 +976,31 @@
desc = "A strange being wearing a blunt resistaint coat." desc = "A strange being wearing a blunt resistaint coat."
projectiletype = /obj/item/projectile/scatter/shotgun projectiletype = /obj/item/projectile/scatter/shotgun
icon_state = "eclipse_diver" //note to self try to redo this sprite sometime 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) /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.")) visible_message(span_danger("\The [src] begins to mess with a wrist mounted device."))
sleep(30) if(isrobot(A))
if(isliving(A)) addtimer(CALLBACK(src, PROC_REF(remote_shutdown), A), 3 SECONDS, TIMER_DELETE_ME)
if(iscarbon(L))
return
else if(issilicon(L))
if(isrobot(L))
L.Weaken(10)
else if(istype(A, /obj/mecha)) else if(istype(A, /obj/mecha))
var/obj/mecha/M = A addtimer(CALLBACK(src, PROC_REF(remote_eject), A), 3 SECONDS, TIMER_DELETE_ME)
visible_message(span_critical("\The [M] is remotly hacked and ejects [M.occupant]!"))
M.go_out() /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_dispersion = 8
projectile_accuracy = 0 projectile_accuracy = 0
ranged_cooldown = 5 ranged_cooldown = 5
grab_resist = 100
damage_fatigue_mult = 0 damage_fatigue_mult = 0
@@ -124,7 +125,8 @@
/mob/living/simple_mob/humanoid/eclipse/head/scientist /mob/living/simple_mob/humanoid/eclipse/head/scientist
name = "Eclipse Lead Researcher" name = "Eclipse Lead Researcher"
icon_state = "fleetsci" icon_state = "fleetsci"
health = 30 maxHealth = 60
health = 60
special_attack_cooldown = 5 SECONDS special_attack_cooldown = 5 SECONDS
special_attack_min_range = 1 special_attack_min_range = 1
special_attack_max_range = 10 special_attack_max_range = 10
@@ -168,31 +170,6 @@
size_x = 3 size_x = 3
size_y = 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 /mob/living/simple_mob/mechanical/hivebot/swarm/eclipse
faction = FACTION_ECLIPSE faction = FACTION_ECLIPSE
@@ -374,15 +351,21 @@
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead /mob/living/simple_mob/humanoid/eclipse/head/tyrlead
name = "Eclipse Precursor Overseer" name = "Eclipse Precursor Overseer"
icon_state = "overseer_shield" icon_state = "overseer_shield"
health = 300 special_attack_cooldown = 4 SECONDS
maxHealth = 300 special_attack_min_range = 1
grab_resist = 100 special_attack_max_range = 8
var/fullshield = 6 projectiletype = /obj/item/projectile/energy/homing_bolt
var/shieldrage = 6 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) if(fullshield > 0)
fullshield-- 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) if(fullshield > 0)
visible_message(span_boldwarning(span_orange("[P] is absorbed by the shield!."))) visible_message(span_boldwarning(span_orange("[P] is absorbed by the shield!.")))
else else
@@ -392,109 +375,133 @@
..() ..()
shieldrage-- shieldrage--
if(shieldrage == 0) if(shieldrage == 0)
shieldrage = 6 shieldrage = 4
fullshield = 6 fullshield = 4
visible_message(span_boldwarning(span_orange("The shield reactivates!!."))) visible_message(span_boldwarning(span_orange("The shield reactivates!!.")))
icon_state = "overseer_shield" icon_state = "overseer_shield"
/mob/living/simple_mob/humanoid/eclipse/head/tyrlead/do_special_attack(atom/A) /mob/living/simple_mob/humanoid/eclipse/head/tyrlead/do_special_attack(atom/A)
if(vore_fullness > 2) //If they nompf someone already var/deathdir = rand(1,3)
fullsummon(A) switch(deathdir)
var/mob/living/L = A if(1)
teleport(A)
if(2)
bomb_chaos(A)
if(3)
bomb_lines(A)
if(istype(A, /obj/mecha))//if target is a mecha /mob/living/simple_mob/humanoid/eclipse/head/engineer //teshari
switch(a_intent) name = "Eclipse Chief Engineer"
if(I_DISARM) // Phase 3 health = 50
mech_three(A) maxHealth = 50
if(I_HURT) // Phase 1 melee_damage_lower = 60 //Durasteel fireaxe
mech_one(A) melee_damage_upper = 60
if(I_GRAB) // Phase 2 projectiletype = null
mech_two(A)
if(!L.devourable || !L.allowmobvore || !L.can_be_drop_prey || !L.throw_vore) //if they aren't edible /mob/living/simple_mob/humanoid/eclipse/head/engineer/Initialize()
if(fullshield > 0) add_modifier(/datum/modifier/technomancer/haste, null, src) // tesh goes nyooooom
switch(a_intent) return ..()
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/tyrlead/proc/fullsummon(atom/target) //Summons a wall whilst the boss tries to enjoy their meal /mob/living/simple_mob/humanoid/eclipse/head/medical //noodl
visible_message(span_warning("\The [src] calls in drone support!")) name = "Eclipse Chief Medical Officer"
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc) health = 150
sleep(30) maxHealth = 150
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc) special_attack_cooldown = 5 SECONDS
sleep(30) special_attack_min_range = 0
new /mob/living/simple_mob/mechanical/combat_drone/artillery (src.loc) 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 /mob/living/simple_mob/humanoid/eclipse/head/medical/apply_melee_effects(var/atom/A)
var/obj/mecha/M = target if(isliving(A))
visible_message(span_critical("\The [M] is remotly hacked and ejects [M.occupant]!")) var/mob/living/L = A
M.go_out() 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 /mob/living/simple_mob/humanoid/eclipse/head/medical/proc/inject_poison(mob/living/L, target_zone)
var/obj/item/projectile/P = new /obj/item/projectile/ion(get_turf(src)) if(prob(poison_chance))
P.launch_projectile(target, BP_TORSO, src) to_chat(L, span_warning("You feel a tiny prick."))
sleep(5) L.reagents.add_reagent(poison_type, poison_per_bite)
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/tyrlead/proc/mech_three(atom/target) //did we ever fix fire bypassing mechas? /mob/living/simple_mob/humanoid/eclipse/head/medical/cloak()
var/obj/item/projectile/P = new /obj/item/projectile/scatter/flamethrower(get_turf(src)) if(cloaked)
P.launch_projectile(target, BP_TORSO, src) 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)) /mob/living/simple_mob/humanoid/eclipse/head/medical/uncloak()
if(isrobot(L)) 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.
var/flashfail = FALSE if(!cloaked)
var/mob/living/silicon/robot/R = L return
if(!flashfail) animate(src, alpha = initial(alpha), time = 1 SECOND)
to_chat(R, span_alien("Your optics are scrambled by \the [src]!")) cloaked = FALSE
R.Confuse(10)
R.flash_eyes()
/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) 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.")) to_chat(src, span_warning("There's nothing to teleport to."))
return FALSE return FALSE
var/list/nearby_things = range(1, target) var/list/nearby_things = range(4, A)
var/list/valid_turfs = list() var/list/valid_turfs = list()
// All this work to just go to a non-dense tile. // All this work to just go to a non-dense tile.
@@ -521,7 +528,7 @@
s2.set_up(5, 1, target_turf) 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() s1.start()
forceMove(target_turf) forceMove(target_turf)
@@ -531,31 +538,151 @@
target_turf.visible_message(span_warning("\The [src] appears!")) target_turf.visible_message(span_warning("\The [src] appears!"))
s2.start() 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 /mob/living/simple_mob/humanoid/eclipse/head/cargomaster //Naga
Beam(target, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY) name = "Eclipse Cargo Master"
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/tyrlead/proc/shield_one(atom/target) /mob/living/simple_mob/humanoid/eclipse/proc/bomb_lines(atom/A)
var/obj/item/projectile/P = new /obj/item/projectile/temp/hot(get_turf(src)) if(!A)
P.launch_projectile(target, BP_TORSO, src) 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) /mob/living/simple_mob/humanoid/eclipse/proc/spawn_lines(atom/target)
Beam(target, icon_state = "sat_beam", time = 2.5 SECONDS, maxdistance = INFINITY) var/alignment = rand(1,2) // 1 for vertical, 2 for horizontal
sleep(30) var/list/line_range = list()
var/obj/item/projectile/P = new /obj/item/projectile/beam/lightning(get_turf(src)) var/turf/T = get_turf(target)
P.launch_projectile(target, BP_TORSO, src) 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)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 112 KiB

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -59,7 +59,7 @@
/area/surface/tyr/town /area/surface/tyr/town
name = "Lost Town" name = "Lost Town"
icon_state = "green" icon_state = "green"
outdoors = OUTDOORS_NO outdoors = OUTDOORS_YES
/area/surface/tyr/medical_center /area/surface/tyr/medical_center
name = "Lost Toww Medical Center" name = "Lost Toww Medical Center"
@@ -84,10 +84,13 @@
/area/surface/tyr/northern_wilderness /area/surface/tyr/northern_wilderness
name = "Tyr Wilderness" name = "Tyr Wilderness"
icon_state = "green" icon_state = "green"
outdoors = OUTDOORS_YES
/area/surface/tyr/southern_wilderness /area/surface/tyr/southern_wilderness
name = "Tyr Wilderness" name = "Tyr Wilderness"
icon_state = "green" icon_state = "green"
outdoors = OUTDOORS_YES
/area/surface/tyr/tar_lake /area/surface/tyr/tar_lake
name = "Tar Lake" name = "Tar Lake"

File diff suppressed because it is too large Load Diff