Small Explo Update (#12950)

This commit is contained in:
FluffMedic
2026-08-12 14:53:29 -04:00
committed by GitHub
parent 45dd2f7580
commit 2d505f0d22
9 changed files with 3098 additions and 7 deletions
@@ -180,3 +180,100 @@
if(3)
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 3), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/walker
name = "astral collective walker"
icon_state = "engi_spider"
icon_living = "engi_spider"
desc = "A robotic spider like creation.."
health = 1500
maxHealth = 1500
artidrop = /obj/effect/artillery_attack/spear
projectiletype = /obj/item/projectile/arc/blue_energy
wreckage = /obj/item/prop/deconstructable/gigacell
pilot_type = /mob/living/simple_mob/humanoid/astral_collective/purity
loot_list = list(/obj/effect/anomaly/flux = 100,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
/obj/item/stock_parts/manipulator/omni = 80,
/obj/item/stock_parts/matter_bin/omni = 80,
/obj/item/stock_parts/scanning_module/hyper = 80,
/obj/item/stock_parts/micro_laser/hyper = 80,
/obj/item/stock_parts/capacitor/hyper = 80,
/obj/item/stock_parts/manipulator/hyper = 80,
/obj/item/stock_parts/matter_bin/hyper = 80,
/obj/random/tool/power = 50,
/obj/random/tool/alien = 15,
/obj/random/bluespace = 100,
/obj/random/anomaly_core = 50
)
/mob/living/simple_mob/mechanical/mecha/eclipse/walker/do_special_attack(atom/A)
rng_cycle = rand(1,5)
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(circle_sniper), A, 2, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
addtimer(CALLBACK(src, PROC_REF(block_sniper), A, 3, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
addtimer(CALLBACK(src, PROC_REF(web_sniper), A, 1, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/sphere
name = "astral collective sphere"
icon_state = "orb"
icon_living = "orb"
desc = "A floating metallic sphere."
health = 1500
maxHealth = 1500
artidrop = /obj/effect/artillery_attack/spear
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/energyjavelin
projectiletype = /obj/item/projectile/arc/blue_energy
wreckage = /obj/item/prop/deconstructable/gigacell
pilot_type = /mob/living/simple_mob/humanoid/astral_collective/purity
loot_list = list(/obj/effect/anomaly/flux = 100,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
/obj/item/stock_parts/manipulator/omni = 80,
/obj/item/stock_parts/matter_bin/omni = 80,
/obj/item/stock_parts/scanning_module/hyper = 80,
/obj/item/stock_parts/micro_laser/hyper = 80,
/obj/item/stock_parts/capacitor/hyper = 80,
/obj/item/stock_parts/manipulator/hyper = 80,
/obj/item/stock_parts/matter_bin/hyper = 80,
/obj/random/tool/power = 50,
/obj/random/tool/alien = 15,
/obj/random/bluespace = 100,
/obj/random/anomaly_core = 50,
)
/mob/living/simple_mob/mechanical/mecha/eclipse/sphere/do_special_attack(atom/A)
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(circle_sniper), A, 2, 1, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
addtimer(CALLBACK(src, PROC_REF(bullet_blossom), A, 3, 7), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
addtimer(CALLBACK(src, PROC_REF(block_sniper), A, 4, 1, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(4)
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, 5, 4, 7), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(5)
addtimer(CALLBACK(src, PROC_REF(web_sniper), A, 6, 1, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(6)
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, 1, 5), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
@@ -67,25 +67,106 @@
falling_type = /obj/effect/callstrike
crushing = FALSE
/obj/effect/artillery_attack/spear
ammmotype = /obj/effect/callstrike/spear
/obj/effect/callstrike
anchored = TRUE
density = FALSE
mouse_opacity = 0
icon ='modular_chomp/icons/obj/guns/precursor/tyr.dmi'
var/meteor_type = BURN
var/meteor_vaule = 40
var/meteor_defense = "laser"
var/meteor_icon = "arti"
/obj/effect/callstrike/Initialize(mapload)
.=..()
icon_state = "arti"
icon_state = meteor_icon
/obj/effect/callstrike/end_fall(crushing = FALSE)
for(var/mob/living/L in loc)
var/target_zone = ran_zone()
var/blocked = L.run_armor_check(target_zone, "laser")
var/blocked = L.run_armor_check(target_zone, meteor_defense)
if(!L.apply_damage(70, BURN, target_zone, blocked))
if(!L.apply_damage(meteor_vaule, meteor_type, target_zone, blocked))
break
playsound(src, 'sound/effects/clang2.ogg', 50, 1)
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), src), 0.25 SECONDS, TIMER_DELETE_ME)
QDEL_IN(0.25, SECONDS)
/obj/effect/callstrike/spear
meteor_type = BRUTE
meteor_vaule = 40
meteor_defense = "melee"
meteor_icon = "spear"
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/line_encase(atom/target, next_cycle)
var/turf/T = get_turf(target)
new artidrop(locate(T.x-3, T.y-1, T.z))
new artidrop(locate(T.x-3, T.y, T.z))
new artidrop(locate(T.x-3, T.y+1, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x-1, T.y-3, T.z))
new artidrop(locate(T.x+1, T.y-3, T.z))
new artidrop(locate(T.x, T.y-3, T.z))
new artidrop(locate(T.x-1, T.y+3, T.z))
new artidrop(locate(T.x+1, T.y+3, T.z))
new artidrop(locate(T.x, T.y+3, T.z))
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/circle_sniper(atom/target, next_cycle, amount, fire_delay)
var/turf/T = get_turf(target)
new artidrop(locate(T.x-3, T.y-1, T.z))
new artidrop(locate(T.x-3, T.y, T.z))
new artidrop(locate(T.x-3, T.y+1, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x+3, T.y, T.z))
new artidrop(locate(T.x-1, T.y-3, T.z))
new artidrop(locate(T.x+1, T.y-3, T.z))
new artidrop(locate(T.x, T.y-3, T.z))
new artidrop(locate(T.x-1, T.y+3, T.z))
new artidrop(locate(T.x+1, T.y+3, T.z))
new artidrop(locate(T.x, T.y+3, T.z))
new artidrop(locate(T.x, T.y, T.z))
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(circle_sniper), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/block_sniper(atom/target, next_cycle, amount, fire_delay)
var/turf/T = get_turf(target)
new artidrop(locate(T.x-1, T.y, T.z))
new artidrop(locate(T.x, T.y, T.z))
new artidrop(locate(T.x+1, T.y, T.z))
new artidrop(locate(T.x+1, T.y+1, T.z))
new artidrop(locate(T.x-1, T.y+1, T.z))
new artidrop(locate(T.x, T.y+1, T.z))
new artidrop(locate(T.x+1, T.y-1, T.z))
new artidrop(locate(T.x-1, T.y-1, T.z))
new artidrop(locate(T.x, T.y-1, T.z))
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(block_sniper), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/web_sniper(atom/target, next_cycle, amount, fire_delay)
var/turf/T = get_turf(target)
new artidrop(locate(T.x, T.y, T.z))
new artidrop(locate(T.x-2, T.y, T.z))
new artidrop(locate(T.x+2, T.y, T.z))
new artidrop(locate(T.x, T.y-2, T.z))
new artidrop(locate(T.x, T.y+2, T.z))
new artidrop(locate(T.x-1, T.y-1, T.z))
new artidrop(locate(T.x+1, T.y+1, T.z))
new artidrop(locate(T.x-1, T.y+1, T.z))
new artidrop(locate(T.x+1, T.y-1, T.z))
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(web_sniper), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/gravity_surge(atom/target, next_cycle, pull_radius, pull_strength)
if(!target)