Small Tyr Update (#12526)

This commit is contained in:
FluffMedic
2026-03-14 22:30:38 +01:00
committed by GitHub
parent b82e958637
commit 7b9fe593ec
11 changed files with 505 additions and 428 deletions
@@ -90,94 +90,79 @@
//ant meats
/obj/item/reagent_containers/food/snacks/tyrant
name = "Bronze Ant Slice"
/obj/item/reagent_containers/food/snacks/tyrant_shock
name = "Shocking 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)
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_SHOCKCHEM = 5)
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)
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
reagents.add_reagent(REAGENT_ID_SHOCKCHEM, 5)
/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/tyrant_neoburn
name = "Painite 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_NEOLIQUIDFIRE = 3)
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_NEOLIQUIDFIRE = 5)
bitesize = 1
/obj/item/reagent_containers/food/snacks/painiteant/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_NEOLIQUIDFIRE, 3)
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
reagents.add_reagent(REAGENT_ID_NEOLIQUIDFIRE, 5)
/obj/item/reagent_containers/food/snacks/bronzeant
/obj/item/reagent_containers/food/snacks/tyrant_burn
name = "Bronze 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_LIQUIDFIRE = 3)
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_LIQUIDFIRE = 5)
bitesize = 1
/obj/item/reagent_containers/food/snacks/bronzeant/Initialize(mapload)
/obj/item/reagent_containers/food/snacks/tyrant_burn/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 3)
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
reagents.add_reagent(REAGENT_ID_LIQUIDFIRE, 5)
/obj/item/reagent_containers/food/snacks/quartzant
/obj/item/reagent_containers/food/snacks/tyrant_radiation
name = "Quartz 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_DEATHBLOOD = 3)
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_DEATHBLOOD = 5)
bitesize = 1
/obj/item/reagent_containers/food/snacks/quartzant/Initialize(mapload)
/obj/item/reagent_containers/food/snacks/tyrant_radiation/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 3)
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
reagents.add_reagent(REAGENT_ID_DEATHBLOOD, 5)
/obj/item/reagent_containers/food/snacks/agateant
/obj/item/reagent_containers/food/snacks/tyrant_bonus
name = "Agate 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_LIQUIDLIFE = 3)
nutriment_desc = list(REAGENT_ID_PROTEIN = 5, REAGENT_ID_LIQUIDLIFE = 5)
bitesize = 1
/obj/item/reagent_containers/food/snacks/agateant/Initialize(mapload)
/obj/item/reagent_containers/food/snacks/tyrant_bonus/Initialize(mapload)
. = ..()
reagents.add_reagent(REAGENT_ID_PROTEIN, 3)
reagents.add_reagent(REAGENT_ID_LIQUIDLIFE, 3)
reagents.add_reagent(REAGENT_ID_PROTEIN, 5)
reagents.add_reagent(REAGENT_ID_LIQUIDLIFE, 5)
@@ -19,9 +19,7 @@
attack_edge = 1
meat_amount = 7
meat_type = /obj/item/reagent_containers/food/snacks/tyrant
tame_items = list(/obj/item/reagent_containers/food/snacks/crabmeat = 20)
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_shock
faction = FACTION_TYR_ANT
@@ -33,6 +31,10 @@
/obj/item/reagent_containers/food/snacks/jellyfishcore = 70
)
harvest_tool = /obj/item/weldingtool
harvest_cooldown = 10 MINUTES
harvest_delay = 30 SECONDS
//I know very little of this
swallowTime = 3 SECONDS
vore_active = 1
@@ -82,8 +84,11 @@
butchery_loot = list(\
/obj/item/stack/material/copper = 18\
)
harvest_results = list(
/obj/item/stack/material/copper = 10
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/copperant
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_burn
/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))
@@ -99,8 +104,11 @@
butchery_loot = list(\
/obj/item/stack/material/weathered_agate = 18\
)
harvest_results = list(
/obj/item/stack/material/weathered_agate = 10
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/agateant
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_bonus
special_attack_min_range = 0
special_attack_max_range = 2
@@ -122,8 +130,11 @@
butchery_loot = list(\
/obj/item/stack/material/quartz = 18\
)
harvest_results = list(
/obj/item/stack/material/quartz = 10
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/quartzant
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
/mob/living/simple_mob/animal/tyr/mineral_ants/diamond //slower, tankier, more damage
name = "diamond metal ant"
@@ -134,27 +145,38 @@
melee_damage_lower = 24
melee_damage_upper = 24
movement_cooldown = 3
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
butchery_loot = list(\
/obj/item/stack/material/diamond = 18\
)
harvest_results = list(
/obj/item/stack/material/diamond = 10
)
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium
name = "green metal ant"
evasion = 50
icon_state = "verdantium_ant"
icon_living = "verdantium_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
butchery_loot = list(\
/obj/item/stack/material/verdantium = 18\
)
harvest_results = list(
/obj/item/stack/material/verdantium = 10
)
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium //if it melees, it unleashes rads
name = "glowing metal ant"
icon_state = "rad_ant"
icon_living = "rad_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
butchery_loot = list(\
/obj/item/stack/material/uranium = 18\
)
harvest_results = list(
/obj/item/stack/material/uranium = 10
)
special_attack_min_range = 1
special_attack_max_range = 2
special_attack_cooldown = 5 SECONDS
@@ -172,9 +194,13 @@
name = "mhydro ant"
icon_state = "mhydro_ant"
icon_living = "mhydro_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_radiation
butchery_loot = list(\
/obj/item/stack/material/mhydrogen = 12\
)
harvest_results = list(
/obj/item/stack/material/mhydrogen = 4
)
size_multiplier = 0.5
movement_cooldown = -1
@@ -186,8 +212,11 @@
butchery_loot = list(\
/obj/item/stack/material/painite = 18\
)
harvest_results = list(
/obj/item/stack/material/painite = 10
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/painiteant
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
/mob/living/simple_mob/animal/tyr/mineral_ants/painite/apply_melee_effects(atom/A)
..()
@@ -203,8 +232,10 @@
butchery_loot = list(\
/obj/item/stack/material/bronze = 18\
)
harvest_results = list(
/obj/item/stack/material/bronze = 10
)
meat_amount = 3
meat_type = /obj/item/reagent_containers/food/snacks/bronzeant
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze/death()
visible_message(span_warning("\The [src]'s abdomen splits as it rolls over, spiderlings crawling from the wound.") )
@@ -216,9 +247,13 @@
name = "graphite ant"
icon_state = "graphite_ant"
icon_living = "graphite_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
butchery_loot = list(\
/obj/item/stack/material/graphite = 18\
)
harvest_results = list(
/obj/item/stack/material/graphite = 10
)
/mob/living/simple_mob/animal/tyr/mineral_ants/builder
name = "tritium ant"
@@ -227,6 +262,9 @@
butchery_loot = list(\
/obj/item/stack/material/tritium = 18\
)
harvest_results = list(
/obj/item/stack/material/tritium = 10
)
nutrition = 150
var/build_type = /obj/random/ant_building
@@ -263,6 +301,62 @@
new build_type(T)
return TRUE
/mob/living/simple_mob/animal/tyr/mineral_ants/silver
name = "silver ant"
icon_state = "silver_ant"
icon_living = "silver_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_neoburn
butchery_loot = list(\
/obj/item/stack/material/silver = 18\
)
harvest_results = list(
/obj/item/stack/material/silver = 10
)
/mob/living/simple_mob/animal/tyr/mineral_ants/silver/bullet_act(obj/item/projectile/P)
if(prob(45))
visible_message(span_danger("The [P.name] gets reflected by [src]'s armor!"), \
span_userdanger("The [P.name] gets reflected by [src]'s armor!"))
// Find a turf near or on the original location to bounce to
if(P.starting)
var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3)
var/turf/curloc = get_turf(src)
// redirect the projectile
P.redirect(new_x, new_y, curloc, src)
P.reflected = 1
return -1 // complete projectile permutation
return (..(P))
/mob/living/simple_mob/animal/tyr/mineral_ants/gold
name = "gold ant"
icon_state = "gold_ant"
icon_living = "gold_ant"
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_burn
butchery_loot = list(\
/obj/item/stack/material/gold = 18\
)
harvest_results = list(
/obj/item/stack/material/gold = 10
)
/mob/living/simple_mob/animal/tyr/mineral_ants/gold/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
if(prob(33))
A.emp_act(4) //The weakest strength of EMP
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
s.set_up(5, 1, L)
s.start()
visible_message(span_danger("The grub releases a powerful shock!"))
/mob/living/simple_mob/animal/tyr/mineral_ants/queen //the nurses of the ants
name = "queen ant"
@@ -334,6 +428,8 @@ ANT STRUCTURES
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/silver = 1,
/mob/living/simple_mob/animal/tyr/mineral_ants/gold = 1,
)
simultaneous_spawns = 5
@@ -341,6 +437,8 @@ ANT STRUCTURES
destructible = 1
health = 50 //Unsure why you would want to break it but you can
/obj/structure/mob_spawner/ant_hill/creatable
simultaneous_spawns = 2
/obj/effect/ant_structure
name = "organic structure"
@@ -419,6 +517,29 @@ ANT STRUCTURES
icon_state = "slow_trap"
modifiertype = /datum/modifier/chilled
/obj/effect/ant_structure/trap/confusion
icon_state = "confusion_trap"
//No modifier.
/obj/effect/ant_structure/trap/confusion/attack_mob(mob/living/L)
playsound(src, 'sound/effects/ghost2.ogg', 20, 1)
if(L.get_ear_protection() == 0)
L.Confuse(10)
/obj/effect/ant_structure/trap/poison
icon_state = "knock_trap"
/obj/effect/ant_structure/trap/poison/attack_mob(mob/living/L)
to_chat(L, span_warning("You feel a sharp stabbing in your foot."))
L.reagents.add_reagent(REAGENT_ID_STOXIN, 12)
/obj/effect/ant_structure/trap/trip
icon_state = "trip_trap"
/obj/effect/ant_structure/trap/poison/attack_mob(mob/living/L)
L.Weaken(3)
/obj/effect/ant_structure/wall
name = "Metant wall"
icon_state = "wall"
@@ -431,9 +552,12 @@ ANT STRUCTURES
icon_state = "tool"
/obj/random/ant_building/item_to_spawn()
return pick(/obj/effect/ant_structure/wall,
return pick(/obj/effect/ant_structure/trap/poison,
/obj/effect/ant_structure/trap/burn,
/obj/effect/ant_structure/trap/slowdown)
/obj/effect/ant_structure/trap/slowdown,
/obj/effect/ant_structure/trap/confusion,
/obj/effect/ant_structure/trap/trip,
/obj/structure/mob_spawner/ant_hill/creatable)
/obj/effect/spider/spiderling/antling
@@ -454,20 +578,7 @@ ANT STRUCTURES
/mob/living/simple_mob/animal/tyr/mineral_ants/verdantium,
/mob/living/simple_mob/animal/tyr/mineral_ants/uranium,
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro,
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite)
/mob/living/simple_mob/animal/tyr/mineral_ants/graphite,
/mob/living/simple_mob/animal/tyr/mineral_ants/silver,
/mob/living/simple_mob/animal/tyr/mineral_ants/gold)
faction = FACTION_TYR_ANT
/obj/effect/ant_structure/webbarrier
name = "weblike barrier"
icon_state = "web"
/obj/effect/ant_structure/webbarrier/CanPass(atom/movable/mover, turf/target)
if(istype(mover, /mob/living/simple_mob/animal/tyr/mineral_ants))
return TRUE
else if(istype(mover, /mob/living))
if(prob(80))
to_chat(mover, span_warning("You get stuck in \the [src] for a moment."))
return FALSE
else if(istype(mover, /obj/item/projectile))
return prob(30)
return TRUE
@@ -92,45 +92,6 @@
addtimer(CALLBACK(src, PROC_REF(bullet_blossom), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss
name = "experiment 10"
desc = "A strange furball, the air vibrating around it."
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
icon_state = "sonic_boss"
icon_living = "sonic_boss"
projectiletype = /obj/item/projectile/knockback/slow
wreckage = /obj/item/prop/tyrlore/sonic_boss
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/load_default_bellies()
. = ..()
var/obj/belly/B = vore_selected
B.name = "alien gut"
B.desc = "Your ears ring as the stomach groans to life around you. The constant ringing mixing with acidic gurgling, and gutteral groans. Silver flesh kneading at your figure, whilst the beast ignores you stewing in it's gut."
B.digest_brute = 1.5
B.digest_burn = 0.5
B.digestchance = 0
B.absorbchance = 0
B.escapechance = 15
/obj/item/projectile/knockback/slow
speed = 10
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/sonic_boss/do_special_attack(atom/A)
rng_cycle = rand(1,4)
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 20, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(4)
addtimer(CALLBACK(src, PROC_REF(hole_in_wall), A, rng_cycle, 10), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/shield_boss
name = "experiment 15"
desc = "A strange furball gaurded by a transparent barrier."
@@ -229,26 +190,6 @@
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/crystal_boss/do_special_attack(atom/A)
addtimer(CALLBACK(src, PROC_REF(bomb_chaos), A, 4), 1.5 SECONDS, TIMER_DELETE_ME)
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss
name = "experiment 25"
icon_state = "naga_boss"
icon_living = "naga_boss"
wreckage = /obj/item/prop/tyrlore/gravity_boss
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/naga_boss/do_special_attack(atom/A)
rng_cycle = rand(1,3)
switch(attackcycle)
if(1)
addtimer(CALLBACK(src, PROC_REF(dual_spin), A, rng_cycle, 5), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(2)
addtimer(CALLBACK(src, PROC_REF(gravity_surge), A, rng_cycle, 7, 1), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
if(3)
addtimer(CALLBACK(src, PROC_REF(rising_star), A, rng_cycle, 15), 0.5 SECONDS, TIMER_DELETE_ME)
attackcycle = 0
//The Ai control units of Tyr
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/defense_ai
name = "defense automaton"
@@ -86,7 +86,9 @@
/obj/random/material/refined = 50,
/obj/random/material/precious = 40,
/obj/random/janusmodule = 3,
/obj/item/dnainjector/random_verybad = 10,
/obj/item/slime_extract/bluespace = 10,
/obj/item/slime_extract/ruby = 10,
/obj/item/slime_extract/sapphire = 10,
/obj/item/stock_parts/scanning_module/omni = 10,
/obj/item/stock_parts/micro_laser/omni = 10,
/obj/item/stock_parts/capacitor/omni = 10,
@@ -120,7 +122,7 @@
evasion = 20
/datum/modifier/astralcollect_regen
mob_overlay_state = "poisoned"
mob_overlay_state = "pink_sparkles"
/datum/modifier/astralcollect_regen/tick()
holder.adjustBruteLoss(-8)
@@ -226,16 +228,16 @@
health = 200
maxHealth = 200
special_attack_cooldown = 3 SECONDS
special_attack_cooldown = 7 SECONDS
special_attack_min_range = 0
special_attack_max_range = 14
special_attack_max_range = 4
/mob/living/simple_mob/humanoid/astral_collective/purity/do_special_attack(atom/A)
adjustBruteLoss(-3)
adjustFireLoss(-3)
adjustToxLoss(-3)
adjustOxyLoss(-3)
adjustCloneLoss(-3)
playsound(src, 'sound/effects/ghost2.ogg', 20, 1)
for(var/mob/living/M in orange(src, 4))
if(M.get_ear_protection() == 0)
M.Confuse(10)
//the ranged mobs
/mob/living/simple_mob/humanoid/astral_collective/ranged
@@ -255,7 +257,7 @@
projectiletype = /obj/item/projectile/energy/astral_collective/anti_mecha
/mob/living/simple_mob/humanoid/astral_collective/ranged/noodle/do_special_attack(atom/A)
if((health / maxHealth) <= 0.5)
if((health / maxHealth) <= 0.3)
alpha = 180
teleport_self(A)
@@ -304,8 +306,9 @@
movement_cooldown = -1
/mob/living/simple_mob/humanoid/astral_collective/ranged/tesh/do_special_attack(atom/A)
if((health / maxHealth) <= 0.5)
selfexplode_attack(A)
if((health / maxHealth) <= 0.3)
visible_message(span_boldwarning(span_orange("The teshari holds up a grenade.")))
addtimer(CALLBACK(src, PROC_REF(selfexplode_attack), A), 1.5 SECONDS, TIMER_DELETE_ME)
else
teleport_attack(A)
@@ -338,7 +341,7 @@
movement_cooldown = 3
/mob/living/simple_mob/humanoid/astral_collective/ranged/lizard/do_special_attack(atom/A)
if((health / maxHealth) <= 0.5)
if((health / maxHealth) <= 0.3)
repair_self(A)
air_strike(A)
@@ -358,7 +361,7 @@
if(!Proj)
return
if(prob(60))
visible_message(span_bolddanger("[Proj] is blocked by the shield."))
visible_message(span_boldwarning(span_orange("[Proj] is blocked by the shield.")))
if(Proj.firer)
ai_holder.react_to_attack(Proj.firer)
return
@@ -396,7 +399,7 @@
/mob/living/simple_mob/humanoid/astral_collective/proc/selfexplode_attack(atom/target)
if(!target)
return FALSE
explosion(src.loc, 2, 3, 4, 5)
explosion(src.loc, 1, 1, 1, 1)
/mob/living/simple_mob/humanoid/astral_collective/proc/gravity_surge(atom/target)
if(!target)
@@ -410,7 +413,7 @@
return FALSE
for(var/mob/living/L in orange(src, 14))
if(IIsAlly(L))
Beam(L, icon_state = "purple_lightning", time = 2.5 SECONDS, maxdistance = INFINITY)
Beam(L, icon_state = "g_beam", time = 2.5 SECONDS, maxdistance = INFINITY)
L.adjustBruteLoss(-30)
L.adjustFireLoss(-30)
@@ -15,10 +15,7 @@
/mob/living/simple_mob/mechanical/hivebot/ranged_damage/siege
projectiletype = /obj/item/projectile/arc //Polaris, don't make the same mob twice.
/mob/living/simple_mob/mechanical/hivebot/tyr
name = "tyrian hivebot"
maxHealth = 0.5 LASERS_TO_KILL // 20 hp
health = 0.5 LASERS_TO_KILL
/mob/living/simple_mob/mechanical/hivebot/tyr //not a hivebot but stealing the 'oil puddle on death' thing
icon = 'modular_chomp/icons/mob/hivebot.dmi'
pass_flags = PASSTABLE
hovering = TRUE
@@ -30,17 +27,28 @@
icon_living = "orange"
/mob/living/simple_mob/mechanical/hivebot/tyr/swarm
name = "replicating swarmer"
maxHealth = 3
health = 3
icon_state = "bright_green"
icon_living = "bright_green"
/mob/living/simple_mob/mechanical/hivebot/tyr/meteor
maxHealth = 2 LASERS_TO_KILL // 80 hp
health = 2 LASERS_TO_KILL
name = "repair drone"
icon = 'modular_chomp/icons/mob/tyr.dmi'
maxHealth = 6 LASERS_TO_KILL // 240 hp
health = 6 LASERS_TO_KILL // 240 hp
icon_state = "guardian"
icon_living = "guardian"
ai_holder_type = /datum/ai_holder/simple_mob/ranged/kiting/dodge
projectiletype = /obj/item/projectile/energy/agate_lighting/fast
/mob/living/simple_mob/mechanical/hivebot/tyr/meteor/bullet_act(var/obj/item/projectile/Proj)
if(!Proj)
return
projectiletype = Proj
..()
/datum/ai_holder/simple_mob/ranged/kiting/dodge
/datum/ai_holder/simple_mob/ranged/kiting/dodge/post_ranged_attack(atom/A)
@@ -1,14 +1,14 @@
/mob/living/simple_mob/vore/fossiltank //slow but endless hunter
name = "rolling crematorium"
desc = "A large metal tank."
health = 500
maxHealth = 500
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100) //No thematics but I like boss critters to take a bit
health = 200
maxHealth = 200
armor = list(melee = 60, bullet = 60, laser = 60, energy = 60, bomb = 80, bio = 100, rad = 100) //High armor, relativly low HP
icon_state = "rex"
melee_attack_delay = 2 SECONDS
melee_damage_lower = 40
melee_damage_upper = 40
attack_armor_pen = 40
melee_attack_delay = 2.5 SECONDS
melee_damage_lower = 50
melee_damage_upper = 50
attack_armor_pen = 50
damage_fatigue_mult = 1 //Does slowly pick up speed.
injury_enrages = TRUE
movement_cooldown = 7 //Kind of slow.
@@ -20,7 +20,7 @@
icon = 'modular_chomp/icons/mob/tyr.dmi'
special_attack_min_range = 1
special_attack_max_range = 20 //The special attacks are more meant to pin you down or provide a healing to this tank.
special_attack_cooldown = 10 SECONDS
special_attack_cooldown = 8 SECONDS //1 fire ticks a second
swallowTime = 1.5 SECONDS
vore_active = 1
vore_capacity = 1
@@ -36,11 +36,24 @@
devourable = FALSE
faction = FACTION_ECLIPSE
size_multiplier = 2
var/regenration_rate = -15
loot_list = list(/obj/item/personal_shield_generator/belt/fossiltank = 100,
/obj/item/prop/tyrlore/fossiltank = 100,
)
/mob/living/simple_mob/vore/fossiltank/emp_act
regenration_rate = 0
/mob/living/simple_mob/vore/fossiltank/handle_special()
if(stat != DEAD)
regenration()
..()
/mob/living/simple_mob/vore/fossiltank/proc/regenration()
adjustBruteLoss(regenration_rate)
adjustFireLoss(regenration_rate)
/mob/living/simple_mob/vore/fossiltank/load_default_bellies()
. = ..()
var/obj/belly/B = vore_selected
@@ -79,31 +92,10 @@
icon_living = "rex"
/mob/living/simple_mob/vore/fossiltank/do_special_attack(atom/A)
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)
return
var/obj/item/projectile/P = new /obj/item/projectile/bullet/srmrocket(get_turf(src))
P.launch_projectile(target, BP_TORSO, src)
/obj/item/projectile/bullet/fossilrockect
name ="Fossil Rocket"
desc = "Boom"
icon = 'icons/obj/grenade.dmi'
icon_state = "missile"
damage = 5 //damage is focused on the explosion
does_spin = 0
/obj/item/projectile/bullet/fossilrockect/on_hit(atom/target, blocked=0)
explosion(target, 2, 3, 4, 5)
return 1
/obj/item/projectile/bullet/fossilrockect/throw_impact(atom/target)
explosion(target, 2, 3, 4, 5)
qdel(src)
for(var/mob/living/L in orange(src, 14))
if(L.stat != DEAD && !IIsAlly(L))
L.adjust_fire_stacks(9)
L.ignite_mob()
/mob/living/simple_mob/vore/boss_jellyfish
name = "expirmental jellyfish"