Tyr Update (#12045)

This commit is contained in:
FluffMedic
2025-12-01 11:54:31 +01:00
committed by GitHub
parent 101dd347e0
commit e8ba2765ac
18 changed files with 7304 additions and 6631 deletions
@@ -97,9 +97,11 @@
special_attack_max_range = 2
special_attack_cooldown = 10 SECONDS
/mob/living/simple_mob/animal/tyr/mineral_ants/copper/do_special_attack(atom/A)
empulse(src.loc, 1, 2, 3, 4)
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
/mob/living/simple_mob/animal/tyr/mineral_ants/copper/bullet_act(obj/item/projectile/P)
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
visible_message(span_cult("[P] seems ineffective!."))
else
..()
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //rushes at you and explodes
name = "agate metal ant"
@@ -22,11 +22,10 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/do_special_attack(atom/A)
bullet_heck(A, 3, 3)
/mob/living/simple_mob/mechanical/mecha/eclipse/bullet_act(obj/item/projectile/P) //removal of E net cheese
/mob/living/simple_mob/mechanical/mecha/eclipse/hitby(obj/item/projectile/P) //removal of E net cheese
if(P == /obj/item/projectile/beam/energy_net)
return
else
..()
..()
/datum/ai_holder/simple_mob/intentional/three_phases
use_astar = TRUE
@@ -49,3 +48,9 @@
else
holder.a_intent = I_HURT
/datum/ai_holder/simple_mob/intentional/three_phases/no_movement
/datum/ai_holder/simple_mob/intentional/three_phases/no_movement/move_once()
return
@@ -0,0 +1,106 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
name = "ai control center"
desc = "A large, very important looking ai. It sparks as it moves to attacks."
icon_state = "powertower"
icon_living = "powertower"
faction = FACTION_TYR
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/gatekeeper
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/no_movement
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/tool/wirecutters/hybrid/alien = 10,
/obj/item/tool/wrench/hybrid/alien = 10,
/obj/item/tool/crowbar/hybrid/alien = 10,
/obj/item/tool/screwdriver/hybrid/alien = 10,
/obj/item/pickaxe/diamonddrill/alien = 10,
/obj/item/melee/energy/sword/dualsaber = 10,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 0.1,
/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,
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 3, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
if(3)
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower
name = "ai control center"
desc = "A large, very important looking ai."
icon_state = "bluetower"
icon_living = "bluetower"
faction = FACTION_HIVEBOT
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/structure/loot_pile/surface/alien/engineering
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/no_movement
anchored = 1
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/prop/alien/junk = 100,
/obj/item/multitool/alien = 30,
/obj/item/stack/cable_coil/alien = 30,
/obj/item/tool/crowbar/alien = 30,
/obj/item/tool/screwdriver/alien = 30,
/obj/item/weldingtool/alien = 30,
/obj/item/tool/wirecutters/alien = 30,
/obj/item/tool/wrench/alien = 30,
/obj/item/cell/device/weapon/recharge/alien = 40,
/obj/item/prop/nanoweave/terraformers = 50,
/obj/item/prop/nanoweave/cyan = 50,
/obj/item/prop/nanoweave/lime = 50,
/obj/item/perfect_tele/alien = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
switch(attackcycle)
if(1)
specialattackprojectile = /obj/item/projectile/beam/midlaser/shortrange
rng_cycle = rand(1,4)
direct_say("PROTOCOL: CROSS X.")
addtimer(CALLBACK(src, PROC_REF(star_burst), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
specialattackprojectile = /obj/item/projectile/energy/wallbreaker/boss
rng_cycle = rand(1,4)
direct_say("PROTOCOL: PRECISION. SWEEP.")
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 25), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave
rng_cycle = rand(1,4)
direct_say("PROTOCOL: DISCHARGE.")
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, rng_cycle, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
if(4)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
rng_cycle = rand(1,4)
Beam(A, icon_state = "r_beam", time = 1 SECOND, maxdistance = INFINITY)
direct_say("PROTOCOL: MISSILE.")
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
@@ -32,7 +32,7 @@
icon_state = "drop_marker"
mouse_opacity = 0 //no touching the attack
spread_range = 3
var/fuse_time = 2 SECONDS
var/fuse_time = 3.5 SECONDS
/obj/item/grenade/shooter/auto_explode/Initialize(mapload)
..()
@@ -21,17 +21,15 @@
unacidable = TRUE
special_attack_min_range = 0
special_attack_max_range = 7
wreckage = /obj/item/prop/tyrlore/drones
wreckage = /obj/item/prop/tyrlore/gatekeeper
loot_list = list(/obj/item/gun/energy/curse_tyrshotgun = 30,
/obj/item/gun/energy/energyballchain = 30,
loot_list = list(/obj/item/gun/energy/tyr_rifle = 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/tyrbarrier = 1,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 0.1,
/obj/item/stock_parts/scanning_module/omni = 80,
/obj/item/stock_parts/micro_laser/omni = 80,
/obj/item/stock_parts/capacitor/omni = 80,
@@ -51,7 +49,7 @@
desc = "A strange furball fused with plant life."
icon_state = "poison_boss"
icon_living = "poison_boss"
wreckage = /obj/item/prop/tyrlore/basicflora
wreckage = /obj/item/prop/tyrlore/acid_boss
projectiletype = /obj/item/projectile/bullet/astral_blade
specialattackprojectile = /obj/item/projectile/energy/neurotoxin/toxic/tyr_flora
var/regeneration_strength = -30
@@ -100,7 +98,7 @@
icon_state = "sonic_boss"
icon_living = "sonic_boss"
projectiletype = /obj/item/projectile/knockback/slow
wreckage = /obj/item/prop/tyrlore/basicsonic
wreckage = /obj/item/prop/tyrlore/sonic_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/load_default_bellies()
. = ..()
@@ -141,7 +139,7 @@
icon_state = "UPshield_boss"
icon_living = "UPshield_boss"
projectiletype = /obj/item/projectile/energy/eclipse/tyrjavelin
wreckage = /obj/item/prop/tyrlore/basicshield
wreckage = /obj/item/prop/tyrlore/shield_boss
var/fullshield = 200
var/shieldrage = 200
@@ -198,6 +196,7 @@
icon_state = "crystalized"
icon_living = "crystalized"
specialattackprojectile = /obj/item/projectile/arc/fragmentation/tyr_mortar
wreckage = /obj/item/prop/tyrlore/crystal_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/crystal_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
@@ -216,6 +215,7 @@
name = "experiment 25"
icon_state = "naga_boss"
icon_living = "naga_boss"
wreckage = /obj/item/prop/tyrlore/gravity_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
@@ -239,7 +239,7 @@
icon_living = "cyan"
size_multiplier = 3
projectiletype = /obj/item/projectile/bullet/tyr_bladeburst
wreckage = /obj/item/prop/tyrlore/ants
wreckage = /obj/item/prop/tyrlore/shotgun
specialattackprojectile = /obj/item/projectile/bullet/astral_blade
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/defense_ai/do_special_attack(atom/A)
@@ -265,7 +265,7 @@
icon_state = "yellow"
icon_living = "yellow"
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/basicpower
wreckage = /obj/item/prop/tyrlore/engi_boss
specialattackprojectile = /obj/item/projectile/energy/agate_lighting
projectiletype = /obj/item/projectile/energy/agate_lighting
@@ -293,7 +293,7 @@
icon_living = "bright_green"
icon = 'modular_chomp/icons/mob/hivebot.dmi'
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/drones
wreckage = /obj/item/prop/tyrlore/swarm_boss
special_attack_cooldown = 8 SECONDS
melee_damage_lower = 20
melee_damage_upper = 20
@@ -323,8 +323,66 @@
size_multiplier = 3
specialattackprojectile = /obj/item/projectile/arc/blue_energy/precusor
projectiletype = /obj/item/projectile/arc/blue_energy/precusor
wreckage = /obj/item/prop/tyrlore/meteor_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/meteor_ai/do_special_attack(atom/A, var/strike_downx, var/strikedowny)
strike_downx = rand(-7,7)
strikedowny = rand(-7,7)
bullet_heck(A, strike_downx, strikedowny)
wreckage = bullet_heck(A, strike_downx, strikedowny)
//the add tutortial
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot
name = "medical robot"
desc = "A massive hivebot with medical equipment."
health = 600
maxHealth = 600
icon_state = "white"
icon_living = "wite"
icon = 'icons/mob/hivebot.dmi'
size_multiplier = 3
wreckage = /obj/item/prop/tyrlore/medical_boss
special_attack_cooldown = 8 SECONDS
melee_damage_lower = 20
melee_damage_upper = 20
attack_armor_pen = 50
movement_cooldown = 4
special_attack_cooldown = 10 SECONDS
var/datum/disease/base_disease = /datum/disease/advance/agate_rot
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/medical_bot/apply_melee_effects(atom/A)
if(ishuman(A) && prob(25))
var/mob/living/carbon/human/H = A
H.ContractDisease(base_disease)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/swarm_ai/do_special_attack(atom/A)
for(var/i =1 to 3)
new /mob/living/simple_mob/mechanical/hivebot/tyr/heart(src.loc)
/mob/living/simple_mob/mechanical/hivebot/tyr/heart
name = "barrier unit"
icon = 'modular_chomp/icons/mob/tyr.dmi'
icon_state = "guardian"
icon_living = "guardian"
maxHealth = 2.5 LASERS_TO_KILL // 100 hp
health = 2.5 LASERS_TO_KILL
melee_damage_lower = 10
melee_damage_upper = 10
attack_armor_pen = 80
/mob/living/simple_mob/mechanical/hivebot/tyr/heart/handle_special()
if(stat != DEAD)
untouchable_aura()
..()
/mob/living/simple_mob/mechanical/hivebot/tyr/heart/proc/untouchable_aura()
for(var/mob/living/L in orange(src, 3))
if(L.stat == DEAD || !IIsAlly(L))
continue
L.add_modifier(/datum/modifier/aura/heart_barrier, null, src)
/datum/modifier/aura/heart_barrier
mob_overlay_state = "deflect"
incoming_damage_percent = 0
aura_max_distance = 3
@@ -629,7 +629,7 @@
special_attack_min_range = 1
special_attack_max_range = 7
projectiletype = /obj/item/projectile/energy/wp_shotgun //using the weapon found upon tyr
projectiletype = /obj/item/projectile/energy/tyr_rifle //using the weapon found upon tyr
specialattackprojectile = /obj/item/projectile/arc/microsingulo
loot_list = list(/obj/item/slime_extract/sepia = 1,
@@ -22,7 +22,7 @@
icon = 'modular_chomp/icons/mob/hivebot.dmi'
pass_flags = PASSTABLE
hovering = TRUE
movement_cooldown = -3
movement_cooldown = 1
faction = FACTION_TYR
melee_damage_lower = 12
melee_damage_upper = 12
@@ -30,8 +30,8 @@
icon_living = "orange"
/mob/living/simple_mob/mechanical/hivebot/tyr/swarm
maxHealth = 1
health = 1
maxHealth = 3
health = 3
icon_state = "bright_green"
icon_living = "bright_green"
@@ -41,122 +41,12 @@
ai_holder_type = /datum/ai_holder/hostile/ranged/robust
projectiletype = /obj/item/projectile/energy/agate_lighting/fast
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr
name = "ai control center"
desc = "A large, very important looking ai. It sparks as it moves to attacks."
icon_state = "powertower"
icon_living = "powertower"
faction = FACTION_TYR
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/item/prop/tyrlore/reddisc
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/tool/wirecutters/hybrid/alien = 10,
/obj/item/tool/wrench/hybrid/alien = 10,
/obj/item/tool/crowbar/hybrid/alien = 10,
/obj/item/tool/screwdriver/hybrid/alien = 10,
/obj/item/pickaxe/diamonddrill/alien = 10,
/obj/item/melee/energy/sword/dualsaber = 10,
/obj/item/shield_projector/rectangle/automatic/tyrbarrier = 1,
/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,
)
/datum/ai_holder/simple_mob/intentional/three_phases/nomove/walk_to_destination()
return
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/tyr/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
if(attackcycle == 1)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, 2), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 3, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/eclipse/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
/obj/item/projectile/energy/spikeenergy_ball/boss
damage = 40
armor_penetration = 60
speed = 10
crawl_destroy = TRUE
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower
name = "ai control center"
desc = "A large, very important looking ai."
icon_state = "bluetower"
icon_living = "bluetower"
faction = FACTION_HIVEBOT
movement_cooldown = 10
size_multiplier = 2
maxHealth = 500
health = 500
wreckage = /obj/structure/loot_pile/surface/alien/engineering
ai_holder_type = /datum/ai_holder/simple_mob/intentional/three_phases/nomove
anchored = 1
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 50, bio = 100, rad = 100)
loot_list = list(/obj/item/prop/alien/junk = 100,
/obj/item/multitool/alien = 30,
/obj/item/stack/cable_coil/alien = 30,
/obj/item/tool/crowbar/alien = 30,
/obj/item/tool/screwdriver/alien = 30,
/obj/item/weldingtool/alien = 30,
/obj/item/tool/wirecutters/alien = 30,
/obj/item/tool/wrench/alien = 30,
/obj/item/cell/device/weapon/recharge/alien = 40,
/obj/item/prop/nanoweave/terraformers = 50,
/obj/item/prop/nanoweave/cyan = 50,
/obj/item/prop/nanoweave/lime = 50,
/obj/item/perfect_tele/alien = 100
)
/mob/living/simple_mob/mechanical/mecha/eclipse/hivebot/nanoweavetower/do_special_attack(atom/A)
. = TRUE // So we don't fire a bolt as well.
var/rng_cycle
if(attackcycle == 1)
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)
attackcycle = 0
else if(attackcycle == 2)
specialattackprojectile = /obj/item/projectile/energy/wallbreaker/boss
rng_cycle = rand(1,4)
say("PROTOCOL: PRECISION. SWEEP.")
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 25), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/lightingspark/nanoweave
rng_cycle = rand(1,4)
say("PROTOCOL: DISCHARGE.")
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, rng_cycle, 15), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/arc/explosive_rocket/big
rng_cycle = rand(1,4)
Beam(A, icon_state = "r_beam", time = 1 SECOND, maxdistance = INFINITY)
say("PROTOCOL: MISSILE.")
addtimer(CALLBACK(src, PROC_REF(singleproj), A, rng_cycle), 2 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/hivebot/eclipse
name = "repurposed hivebot"
@@ -80,19 +80,8 @@
icon_living = "rex"
/mob/living/simple_mob/vore/fossiltank/do_special_attack(atom/A)
if(health < maxHealth*0.25)
visible_message(span_bolddanger(span_orange("The fossil tank begins self repairs!.")))
addtimer(CALLBACK(src, PROC_REF(cycle_heal), 8), 1 SECOND, TIMER_DELETE_ME)
else
Beam(A, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(sniper_shot), A), 4 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/vore/fossiltank/proc/cycle_heal(var/healamount)
adjustBruteLoss(-100)
adjustFireLoss(-100)
if(healamount > 0)
healamount -= 1
addtimer(CALLBACK(src, PROC_REF(cycle_heal), 8), 1 SECOND, TIMER_DELETE_ME)
Beam(A, icon_state = "sat_beam", time = 3.5 SECONDS, maxdistance = INFINITY)
addtimer(CALLBACK(src, PROC_REF(sniper_shot), A), 4 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/vore/fossiltank/proc/sniper_shot(atom/target)
if(!target)
@@ -126,7 +115,7 @@
icon = 'modular_chomp/icons/mob/tyr.dmi'
icon_state = "jellyfish"
icon_living = "jellyfish"
icon_dead = "jelltdish_dead"
icon_dead = "jellyfish_dead"
movement_cooldown = 1
damage_fatigue_mult = 0 //It's a mutant jellyfish boss mob.
melee_attack_delay = 1.5 SECOND