Small Tyr Update (#11491)

This commit is contained in:
FluffMedic
2025-08-23 16:24:25 -04:00
committed by GitHub
parent 8fa48e2a3e
commit 701ff91482
6 changed files with 1275 additions and 906 deletions

View File

@@ -521,5 +521,20 @@
anchored = 1
icon_state = "barbedwire-out"
/obj/item/prop/tyrlore/expirmentvenom
name = "data disc"
desc = "An alien disc for storing data."
catalogue_data = list(/datum/category_item/catalogue/technology/tyr_expirment_poison)
icon_state = "old_sci_disc"
/datum/category_item/catalogue/technology/tyr_expirment_poison
name = "Precursor Object - Tyr Data Disc Venom"
desc = "The following data has been corrupted. \
<br><br>\
Tseitgn rPeodi ahs ccnocuddle.\
nUti vporse to eb xetayodrriarn nuop rocagni boantcamts. \
Sirliam bio-erpeisxmnet fall to it's porses.\
Hoverew reyverco tdsen to be wfits, and otseh muenim or tihw a ucer rovep to be sunursabspale.\
Ntxe pets is to gntritea retfurh henenac the sosrpe, and deruce teh sethynict koovleor. \
Recommendation for integration with the Astral Sea protocols."
value = CATALOGUER_REWARD_HARD

View File

@@ -996,3 +996,105 @@
addtimer(CALLBACK(src, PROC_REF(gattlingfire), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/death_wall(atom/target, var/next_cycle, var/fire_delay)
bullet_heck(target, 7, 0)
bullet_heck(target, 7, 1)
bullet_heck(target, 7, 2)
bullet_heck(target, 7, 3)
bullet_heck(target, 7, 4)
bullet_heck(target, 7, 5)
bullet_heck(target, 7, 6)
bullet_heck(target, 7, 7)
bullet_heck(target, 7, -1)
bullet_heck(target, 7, -2)
bullet_heck(target, 7, -3)
bullet_heck(target, 7, -4)
bullet_heck(target, 7, -5)
bullet_heck(target, 7, -6)
bullet_heck(target, 7, -7)
addtimer(CALLBACK(src, PROC_REF(death_wallA), target, next_cycle, fire_delay), fire_delay, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/death_wallA(atom/target, var/next_cycle, var/fire_delay)
bullet_heck(target, -7, 0)
bullet_heck(target, -7, 1)
bullet_heck(target, -7, 2)
bullet_heck(target, -7, 3)
bullet_heck(target, -7, 4)
bullet_heck(target, -7, 5)
bullet_heck(target, -7, 6)
bullet_heck(target, -7, 7)
bullet_heck(target, -7, -1)
bullet_heck(target, -7, -2)
bullet_heck(target, -7, -3)
bullet_heck(target, -7, -4)
bullet_heck(target, -7, -5)
bullet_heck(target, -7, -6)
bullet_heck(target, -7, -7)
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/death_wallR(atom/target, var/next_cycle, var/fire_delay)
bullet_heck(target, -7, 0)
bullet_heck(target, -7, 1)
bullet_heck(target, -7, 2)
bullet_heck(target, -7, 3)
bullet_heck(target, -7, 4)
bullet_heck(target, -7, 5)
bullet_heck(target, -7, 6)
bullet_heck(target, -7, 7)
bullet_heck(target, -7, -1)
bullet_heck(target, -7, -2)
bullet_heck(target, -7, -3)
bullet_heck(target, -7, -4)
bullet_heck(target, -7, -5)
bullet_heck(target, -7, -6)
bullet_heck(target, -7, -7)
addtimer(CALLBACK(src, PROC_REF(death_wallRA), target, next_cycle, fire_delay), fire_delay, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/death_wallRA(atom/target, var/next_cycle, var/fire_delay)
bullet_heck(target, 7, 0)
bullet_heck(target, 7, 1)
bullet_heck(target, 7, 2)
bullet_heck(target, 7, 3)
bullet_heck(target, 7, 4)
bullet_heck(target, 7, 5)
bullet_heck(target, 7, 6)
bullet_heck(target, 7, 7)
bullet_heck(target, 7, -1)
bullet_heck(target, 7, -2)
bullet_heck(target, 7, -3)
bullet_heck(target, 7, -4)
bullet_heck(target, 7, -5)
bullet_heck(target, 7, -6)
bullet_heck(target, 7, -7)
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/cutoff(atom/target, var/next_cycle, var/fire_delay, var/amount)
if(!target)
return
bullet_heck(target, 7, 0)
bullet_heck(target, -7, 0)
bullet_heck(target, 0, 7)
bullet_heck(target, 0, -7)
amount--
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(cutoff), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/cutoff_ulti(atom/target, var/next_cycle, var/fire_delay, var/amount)
if(!target)
return
bullet_heck(target, 7, 0)
bullet_heck(target, -7, 0)
bullet_heck(target, 0, 7)
bullet_heck(target, 0, -7)
bullet_heck(target, 7, 7)
bullet_heck(target, -7, -7)
bullet_heck(target, -7, 7)
bullet_heck(target, 7, -7)
amount--
if(amount > 0)
addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), target, next_cycle, fire_delay, amount), fire_delay, TIMER_DELETE_ME)
else
attackcycle = next_cycle

View File

@@ -14,16 +14,11 @@
shock_resist = -0.2
deflect_chance = 0
movement_cooldown = 10
status_flags = null
var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt
var/attackcycle = 1
var/artidrop = /obj/effect/artillery_attack
/mob/living/simple_mob/mechanical/mecha/eclipse/handle_special()
if(stat != DEAD)
src.SetStunned(0)
src.SetWeakened(0)
src.SetParalysis(0)
..()
var/rng_cycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/do_special_attack(atom/A)
bullet_heck(A, 3, 3)
@@ -61,7 +56,6 @@
wreckage = /obj/structure/loot_pile/mecha/odd_gygax
/mob/living/simple_mob/mechanical/mecha/eclipse/antipersonal_unit/do_special_attack(atom/A)
var/rng_cycle
switch(a_intent)
if(I_DISARM) //phase3
if(attackcycle == 1)
@@ -306,7 +300,6 @@
visible_message(span_cult("[P] has been adapted too!."))
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/armored/do_special_attack(atom/A)
var/rng_cycle
switch(a_intent)
if(I_DISARM) //phase3
if(attackcycle == 1)
@@ -383,7 +376,6 @@
icon_state = "eclipse_janus"
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/phasetwo/do_special_attack(atom/A)
var/rng_cycle
if(attackcycle == 1)
attackcycle = rand(4,6)
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 14, attackcycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
@@ -618,7 +610,7 @@
B.escapechance = 25
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambera //poison boss
name = "expirement 20"
name = "experiment 20"
specialattackprojectile = /obj/item/projectile/energy/eclipse/poisonwind
icon_state = "poison_boss"
icon_living = "poison_boss"
@@ -650,7 +642,7 @@
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberb //knock back boss
name = "expirement 3"
name = "experiment 3"
specialattackprojectile = /obj/item/projectile/knockback/slow
icon_state = "sonic_boss"
icon_living = "sonic_boss"
@@ -660,7 +652,7 @@
speed = 10
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberb/do_special_attack(atom/A)
var/rng_cycle = rand(1,6)
rng_cycle = rand(1,6)
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
@@ -681,7 +673,7 @@
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc //wierd shields
name = "expirement 7"
name = "experiment 7"
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
health = 400
maxHealth = 400 //shield mechanic
@@ -691,7 +683,7 @@
var/fullshield = 300
var/shieldrage = 3
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/bullet_act(obj/item/projectile/P) //Projectiles will be absorbed by the shield. Note to self do funky sprite. 4 hits to remove
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/bullet_act(obj/item/projectile/P)
if(fullshield > 0)
fullshield -= P.damage
if(P == /obj/item/projectile/ion)
@@ -713,7 +705,7 @@
icon_state = "UPshield_boss"
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberc/do_special_attack(atom/A)
var/rng_cycle = rand(1,5)
rng_cycle = rand(1,5)
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
@@ -731,33 +723,200 @@
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberd //the wall
name = "expirement 12"
name = "security master control"
health = 600 //summoner boss so reduced health
maxHealth = 600 //summoner boss so reduced health
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
artidrop = /mob/living/simple_mob/mechanical/hivebot/tyr
specialattackprojectile = /obj/item/projectile/spawnball
icon_state = "spawn_boss"
icon_living = "spawn_boss"
/obj/item/projectile/spawnball
name = "nano sphere"
icon_state = "bolter"
speed = 10
damage = 10
embed_chance = 0
damage_type = BRUTE
muzzle_type = null
combustion = FALSE
/obj/item/projectile/metalball/on_hit(var/atom/target, var/blocked = 0)
if(isturf(target.loc))
visible_message(span_danger("\The [src] creates a hivebot!"))
new /mob/living/simple_mob/mechanical/hivebot/tyr(target.loc)
..()
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberd/do_special_attack(atom/A)
var/rng_cycle = rand(1,5)
rng_cycle = rand(1,4)
if(attackcycle == 1)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 1 SECOND, TIMER_DELETE_ME)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
artidrop = /mob/living/simple_mob/mechanical/hivebot/tyr
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
artidrop = /obj/item/material/barbedwire/plastic/active
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 1.5 SECONDS, TIMER_DELETE_ME)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambere
name = "defense automaton"
desc = "A large, very important looking ai. Plating appears similiar to albative plating."
icon = 'modular_chomp/icons/mob/hivebot.dmi'
icon_state = "cyan"
icon_living = "cyan"
size_multiplier = 3
projectiletype = /obj/item/projectile/arc/explosive_rocket
loot_list = list(/obj/item/projectile/energy/wp_shotgun = 30,
/obj/item/gun/energy/energyballchain = 30,
/obj/item/tool/wirecutters/hybrid/alien = 30,
/obj/item/tool/wrench/hybrid/alien = 30,
/obj/item/tool/crowbar/hybrid/alien = 30,
/obj/item/tool/screwdriver/hybrid/alien = 30,
/obj/item/pickaxe/diamonddrill/alien = 30,
/obj/item/melee/energy/sword/dualsaber = 30,
/obj/item/shield_projector/rectangle/automatic/tyrvault = 0.01,
/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/item/cell/slime/jellyfish = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chambere/do_special_attack(atom/A)
rng_cycle = rand(1,6)
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 5)
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 6)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberf
name = "engineering automaton"
desc = "A large, very important looking ai. Plating appears similiar to albative plating."
icon = 'modular_chomp/icons/mob/hivebot.dmi'
icon_state = "yellow"
icon_living = "yellow"
size_multiplier = 3
specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave
projectiletype = /obj/item/projectile/energy/lightingspark/nanoweave
loot_list = list(/obj/item/projectile/energy/wp_shotgun = 30,
/obj/item/gun/energy/energyballchain = 30,
/obj/item/tool/wirecutters/hybrid/alien = 30,
/obj/item/tool/wrench/hybrid/alien = 30,
/obj/item/tool/crowbar/hybrid/alien = 30,
/obj/item/tool/screwdriver/hybrid/alien = 30,
/obj/item/pickaxe/diamonddrill/alien = 30,
/obj/item/melee/energy/sword/dualsaber = 30,
/obj/item/shield_projector/rectangle/automatic/tyrvault = 0.01,
/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/item/melee/midnightblade = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberf/do_special_attack(atom/A)
rng_cycle = rand(1,6)
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 5)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 6)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg //wierd shields
name = "expirement 28"
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
resistance = 15
health = 1000
maxHealth = 1000
icon_state = "UPshield_boss"
icon_living = "UPshield_boss"
color = "#FF0000"
projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg/do_special_attack(atom/A)
rng_cycle = rand(1,6)
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(gattlingfire), A, rng_cycle, 8, 7), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 5)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 6)
attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(cutoff_ulti), A, rng_cycle, 5, 15), 0.5 SECONDS, TIMER_DELETE_ME)
else if(attackcycle == 7)
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 8)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/chamberg/bullet_act(obj/item/projectile/P)
if((P == /obj/item/projectile/ion) && (resistance > 0))
resistance = 0
say("Shields destroyed, rerouting power")
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin/speed
projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin/speed
icon_state = "shield_boss"
icon_living = "shield_boss"

View File

@@ -114,7 +114,7 @@
. = TRUE // So we don't fire a bolt as well.
var/rng_cycle
if(attackcycle == 1)
specialattackprojectile = /obj/item/projectile/beam/burstlaser
specialattackprojectile = /obj/item/projectile/beam/midlaser/shortrange
rng_cycle = rand(1,4)
say("PROTOCOL: CROSS X.")
addtimer(CALLBACK(src, PROC_REF(star_burst), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)

View File

@@ -309,14 +309,17 @@
modifier_type_to_apply = /datum/modifier/poisoned //main threat right here, Will two tap most players if untreated
modifier_duration = 1 MINUTE
/obj/item/projectile/energy/eclipse/tyrjavelin //Four hits ought to end you
/obj/item/projectile/energy/eclipse/tyrjavelin //Five hits ought to end you
name = "energy javelin"
icon_state = "javelin"
damage_type = SEARING
check_armour = "bullet"
damage = 20
armor_penetration = 60
check_armour = "melee"
damage = 23
armor_penetration = 30
speed = 10
color = "#FF6600"
modifier_type_to_apply = /datum/modifier/deep_wounds //reduced healing
modifier_duration = 1 MINUTE
/obj/item/projectile/energy/eclipse/tyrjavelin/speed
speed = 7