Tyr Misc Changes (#11245)

This commit is contained in:
FluffMedic
2025-07-26 06:48:20 -04:00
committed by GitHub
parent 95c64b8f02
commit e2e77aa5bd
7 changed files with 240 additions and 29 deletions

View File

@@ -507,3 +507,19 @@
scavanging is to be done at that site." scavanging is to be done at that site."
value = CATALOGUER_REWARD_HARD value = CATALOGUER_REWARD_HARD
/obj/item/material/barbedwire/plastic/active
anchored = 1
icon_state = "barbedwire-out"
/obj/item/material/barbedwire/vopal
name = "crystal shards"
default_material = MAT_VOPAL
/obj/item/material/barbedwire/vopal/active
anchored = 1
icon_state = "barbedwire-out"

View File

@@ -90,7 +90,7 @@
//ant meats //ant meats
/obj/item/reagent_containers/food/snacks/copperant /obj/item/reagent_containers/food/snacks/tyrant
name = "Bronze Ant Slice" name = "Bronze Ant Slice"
desc = "A slice from a ant" desc = "A slice from a ant"
icon_state = "meat" icon_state = "meat"
@@ -105,6 +105,21 @@
reagents.add_reagent(REAGENT_ID_PROTEIN, 3) reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 3) reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 3)
/obj/item/reagent_containers/food/snacks/copperant
name = "Copper Ant Slice"
desc = "A slice from a ant"
icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit
center_of_mass_y= 16 //CHOMPEdit
nutriment_amt = 3
nutriment_desc = list(REAGENT_ID_PROTEIN = 3, REAGENT_ID_SHOCKCHEM = 3)
bitesize = 1
/obj/item/reagent_containers/food/snacks/copperant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 3)
/obj/item/reagent_containers/food/snacks/painiteant /obj/item/reagent_containers/food/snacks/painiteant
name = "Painite Ant Slice" name = "Painite Ant Slice"
desc = "A slice from a ant" desc = "A slice from a ant"
@@ -137,7 +152,7 @@
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3) reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3)
/obj/item/reagent_containers/food/snacks/quartzant /obj/item/reagent_containers/food/snacks/quartzant
name = "Bronze Ant Slice" name = "Quartz Ant Slice"
desc = "A slice from a ant" desc = "A slice from a ant"
icon_state = "meat" icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit center_of_mass_x = 17 //CHOMPEdit
@@ -152,7 +167,7 @@
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3) reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3)
/obj/item/reagent_containers/food/snacks/agateant /obj/item/reagent_containers/food/snacks/agateant
name = "Bronze Ant Slice" name = "Agate Ant Slice"
desc = "A slice from a ant" desc = "A slice from a ant"
icon_state = "meat" icon_state = "meat"
center_of_mass_x = 17 //CHOMPEdit center_of_mass_x = 17 //CHOMPEdit

View File

@@ -17,7 +17,7 @@
attack_edge = 1 attack_edge = 1
meat_amount = 3 meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/ant meat_type = /obj/item/reagent_containers/food/snacks/tyrant
tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20) tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20)
@@ -53,7 +53,8 @@
B.absorbchance = 0 B.absorbchance = 0
B.escapechance = 25 B.escapechance = 25
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze //shockers /mob/living/simple_mob/animal/tyr/mineral_ants/bronze //knock back ant
name = "bronze metal ant"
icon_state = "bronze_ant" icon_state = "bronze_ant"
icon_living = "bronze_ant" icon_living = "bronze_ant"
butchery_loot = list(\ butchery_loot = list(\
@@ -62,7 +63,24 @@
meat_amount = 3 meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/bronzeant meat_type = /obj/item/reagent_containers/food/snacks/bronzeant
/mob/living/simple_mob/animal/tyr/mineral_ants/copper /mob/living/simple_mob/animal/tyr/mineral_ants/bronze/apply_melee_effects(atom/A)
..()
if(isliving(A) && a_intent == I_HURT)
var/mob/living/L = A
if(L.mob_size <= MOB_MEDIUM)
visible_message(span_danger("\The [src] sends \the [L] flying with the impact!"))
playsound(src, "punch", 50, 1)
L.Weaken(1)
var/throwdir = get_dir(src, L)
L.throw_at(get_edge_target_turf(L, throwdir), 3, 1, src)
else
to_chat(L, span_warning("\The [src] hits you with incredible force, but you remain in place."))
visible_message(span_danger("\The [src] hits \the [L] with incredible force, to no visible effect!")) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
playsound(src, "punch", 50, 1) // CHOMPEdit: Visible/audible feedback for *resisting* the slam.
/mob/living/simple_mob/animal/tyr/mineral_ants/copper //emp ants
name = "copper metal ant"
icon_state = "copper_ant" icon_state = "copper_ant"
icon_living = "copper_ant" icon_living = "copper_ant"
butchery_loot = list(\ butchery_loot = list(\
@@ -71,18 +89,34 @@
meat_amount = 3 meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/copperant meat_type = /obj/item/reagent_containers/food/snacks/copperant
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //shockers /mob/living/simple_mob/animal/tyr/mineral_ants/copper/apply_melee_effects(var/atom/A)
if(isliving(A))
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
/mob/living/simple_mob/animal/tyr/mineral_ants/agate //rushes at you and explodes
name = "agate metal ant"
icon_state = "agate_ant" icon_state = "agate_ant"
icon_living = "agate_ant" icon_living = "agate_ant"
movement_cooldown = -3
butchery_loot = list(\ butchery_loot = list(\
/obj/item/stack/material/weathered_agate = 18\ /obj/item/stack/material/weathered_agate = 18\
) )
meat_amount = 3 meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/agateant meat_type = /obj/item/reagent_containers/food/snacks/agateant
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz special_attack_min_range = 1
special_attack_max_range = 2
special_attack_cooldown = 10 SECONDS
/mob/living/simple_mob/animal/tyr/mineral_ants/agate/do_special_attack(atom/A)
explosion(src.loc, 2, 1, 1, 1)
/mob/living/simple_mob/animal/tyr/mineral_ants/quartz //irl quartz is apparently tough?
name = "quartz metal ant"
icon_state = "quartz_ant" icon_state = "quartz_ant"
icon_living = "quartz_ant" icon_living = "quartz_ant"
armor = list(melee = 60, bullet = 50, laser = 0, energy = 0, bomb = 0, bio = 100, rad = 100)
butchery_loot = list(\ butchery_loot = list(\
/obj/item/stack/material/quartz = 18\ /obj/item/stack/material/quartz = 18\
) )
@@ -90,6 +124,8 @@
meat_type = /obj/item/reagent_containers/food/snacks/quartzant meat_type = /obj/item/reagent_containers/food/snacks/quartzant
/mob/living/simple_mob/animal/tyr/mineral_ants/painite /mob/living/simple_mob/animal/tyr/mineral_ants/painite
name = "painite metal ant"
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
icon_state = "painite_ant" icon_state = "painite_ant"
icon_living = "painite_ant" icon_living = "painite_ant"
butchery_loot = list(\ butchery_loot = list(\
@@ -99,7 +135,7 @@
meat_type = /obj/item/reagent_containers/food/snacks/painiteant meat_type = /obj/item/reagent_containers/food/snacks/painiteant
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond /mob/living/simple_mob/animal/tyr/mineral_ants/diamond
name = " cyan metal ant" name = "diamond metal ant"
icon_state = "diamond_ant" icon_state = "diamond_ant"
icon_living = "diamond_ant" icon_living = "diamond_ant"
butchery_loot = list(\ butchery_loot = list(\
@@ -115,14 +151,17 @@
) )
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium /mob/living/simple_mob/animal/tyr/mineral_ants/uranium
name = "lime metal ant" name = "glowing metal ant"
icon_state = "rad_ant" icon_state = "rad_ant"
icon_living = "rad_ant" icon_living = "rad_ant"
butchery_loot = list(\ butchery_loot = list(\
/obj/item/stack/material/uranium = 18\ /obj/item/stack/material/uranium = 18\
) )
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium/do_special_attack(atom/A)
SSradiation.radiate(src, 15)
/mob/living/simple_mob/animal/tyr/mineral_ants/tritium /mob/living/simple_mob/animal/tyr/mineral_ants/tritium
name = "ritium ant"
icon_state = "tritium_ant" icon_state = "tritium_ant"
icon_living = "tritium_ant" icon_living = "tritium_ant"
butchery_loot = list(\ butchery_loot = list(\
@@ -130,6 +169,7 @@
) )
/mob/living/simple_mob/animal/tyr/mineral_ants/builder /mob/living/simple_mob/animal/tyr/mineral_ants/builder
name = "concrete ant"
icon_state = "builder_ant" icon_state = "builder_ant"
icon_living = "builder_ant" icon_living = "builder_ant"
butchery_loot = list(\ butchery_loot = list(\

View File

@@ -843,4 +843,107 @@
bullet_heck(target, -4, 7) bullet_heck(target, -4, 7)
attackcycle = next_cycle attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/bomb_lines(atom/A, var/next_cycle)
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, next_cycle)
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/spawn_lines(atom/target, var/next_cycle)
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 artidrop(dropspot)
attackcycle = next_cycle
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/bomb_chaos(atom/A, var/next_cycle)
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, next_cycle)
/mob/living/simple_mob/mechanical/mecha/eclipse/proc/chaos_lines(atom/target, var/next_cycle)
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 artidrop(dropspot)
attackcycle = next_cycle

View File

@@ -147,12 +147,12 @@
/obj/item/hand_tele = 10, /obj/item/hand_tele = 10,
/obj/item/bone/skull = 100 /obj/item/bone/skull = 100
) )
var/fullshield = 4 var/fullshield = 140
var/shieldrage = 4 var/shieldrage = 3
/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 /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 -= P.damage
if(P == /obj/item/projectile/ion) if(P == /obj/item/projectile/ion)
fullshield = 0 fullshield = 0
visible_message(span_boldwarning(span_orange("[P] breaks the shield!!."))) visible_message(span_boldwarning(span_orange("[P] breaks the shield!!.")))
@@ -166,8 +166,8 @@
..() ..()
shieldrage-- shieldrage--
if(shieldrage == 0) if(shieldrage == 0)
shieldrage = 4 shieldrage = 3
fullshield = 4 fullshield = 140
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"

View File

@@ -1,6 +1,6 @@
/mob/living/simple_mob/mechanical/mecha/eclipse /mob/living/simple_mob/mechanical/mecha/eclipse
health = 875 health = 600
maxHealth = 875 maxHealth = 600
faction = FACTION_ECLIPSE faction = FACTION_ECLIPSE
icon = 'modular_chomp/icons/mob/eclipse.dmi' icon = 'modular_chomp/icons/mob/eclipse.dmi'
has_repair_droid = TRUE has_repair_droid = TRUE
@@ -16,6 +16,7 @@
movement_cooldown = 10 movement_cooldown = 10
var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt var/specialattackprojectile = /obj/item/projectile/energy/phase/bolt
var/attackcycle = 1 var/attackcycle = 1
var/artidrop = /obj/effect/artillery_attack
/mob/living/simple_mob/mechanical/mecha/eclipse/handle_special() /mob/living/simple_mob/mechanical/mecha/eclipse/handle_special()
if(stat != DEAD) if(stat != DEAD)
@@ -370,8 +371,8 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/phasetwo //we ain't done yet /mob/living/simple_mob/mechanical/mecha/eclipse/darkmatter_assualt/phasetwo //we ain't done yet
name = "Collapsing Janus" name = "Collapsing Janus"
armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 80, bio = 100, rad = 100) //our shielding is gone armor = list(melee = 30, bullet = 30, laser = 30, energy = 30, bomb = 80, bio = 100, rad = 100) //our shielding is gone
health = 425 health = 400
maxHealth = 425 maxHealth = 400
desc = "The mecha is smoking, it's drone and shield is broken, but it's pilot is pushing it further." desc = "The mecha is smoking, it's drone and shield is broken, but it's pilot is pushing it further."
specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin specialattackprojectile = /obj/item/projectile/energy/eclipse/janusjavelin
wreckage = /obj/item/prop/tyrlore/neonjanus wreckage = /obj/item/prop/tyrlore/neonjanus
@@ -431,21 +432,57 @@
name = "eclipse cryo top" name = "eclipse cryo top"
icon_state = "mecha_top" icon_state = "mecha_top"
icon_living = "mecha_top" icon_living = "mecha_top"
armor = list(melee = 20, bullet = 20, laser = 20, energy = 20, bomb = 80, bio = 100, rad = 100) //Smol armor to compensate for the gimmick
wreckage = /obj/item/melee/energy/sword/top_shield wreckage = /obj/item/melee/energy/sword/top_shield
specialattackprojectile = /obj/item/projectile/energy/eclipse/chillingwind specialattackprojectile = /obj/item/projectile/energy/eclipse/chillingwind
desc = "It appears to be spinning at rapid speeds; enough to deflect projectiles. The air around it feels frigid.." desc = "It appears to be spinning at rapid speeds; enough to deflect projectiles. The air around it feels frigid.."
artidrop = /obj/item/material/barbedwire/vopal/active
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/do_special_attack(atom/A) /mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/do_special_attack(atom/A)
var/rng_cycle var/rng_cycle
if(attackcycle == 1) switch(a_intent)
rng_cycle = rand(1,2) if(I_DISARM) //phase3
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME) if(attackcycle == 1)
attackcycle = 0 rng_cycle = rand(1,3)
else if(attackcycle == 2) addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
rng_cycle = rand(1,2) attackcycle = 0
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME) else if(attackcycle == 2)
attackcycle = 0 rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(I_HURT) //phase1
if(attackcycle == 1)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(random_firing), A, 20, rng_cycle, 20), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(I_GRAB) // Phase 2
if(attackcycle == 1)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 25), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 2)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(bomb_lines), A, rng_cycle), 2.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
else if(attackcycle == 3)
rng_cycle = rand(1,3)
addtimer(CALLBACK(src, PROC_REF(cross_spin), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/handle_special() /mob/living/simple_mob/mechanical/mecha/eclipse/battle_top/handle_special()
if(stat != DEAD) if(stat != DEAD)

View File

@@ -59,7 +59,7 @@
attackcycle = 0 attackcycle = 0
else if(attackcycle == 3) else if(attackcycle == 3)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 4, 25), 1 SECOND, TIMER_DELETE_ME) addtimer(CALLBACK(src, PROC_REF(dual_spin), A, 4, 20), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0 attackcycle = 0
else if(attackcycle == 4) else if(attackcycle == 4)
specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss specialattackprojectile = /obj/item/projectile/energy/spikeenergy_ball/boss