Small Tyr Changes (#12624)

This commit is contained in:
FluffMedic
2026-04-01 23:13:16 +02:00
committed by GitHub
parent e97bb2eb71
commit c111c229cd
8 changed files with 1014 additions and 1183 deletions
@@ -196,7 +196,7 @@
strength = 15
)
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro //secondary spawner
/mob/living/simple_mob/animal/tyr/mineral_ants/mhydro //smol
name = "mhydro ant"
icon_state = "mhydro_ant"
icon_living = "mhydro_ant"
@@ -208,9 +208,14 @@
/obj/item/stack/material/mhydrogen = 4
)
size_multiplier = 0.5
movement_cooldown = -1
mob_size = MOB_MINISCULE
pass_flags = PASSTABLE
layer = MOB_LAYER
density = 0
melee_damage_lower = 6
melee_damage_upper = 6
/mob/living/simple_mob/animal/tyr/mineral_ants/painite
/mob/living/simple_mob/animal/tyr/mineral_ants/painite //flames
name = "painite metal ant"
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
icon_state = "painite_ant"
@@ -231,7 +236,7 @@
to_chat(L, span_danger("You've been burned by \the [src]!"))
L.ignite_mob()
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze
/mob/living/simple_mob/animal/tyr/mineral_ants/bronze //spawns a legion
name = "bronze metal ant"
icon_state = "bronze_ant"
icon_living = "bronze_ant"
@@ -307,7 +312,7 @@
new build_type(T)
return TRUE
/mob/living/simple_mob/animal/tyr/mineral_ants/silver
/mob/living/simple_mob/animal/tyr/mineral_ants/silver //transparent
name = "silver ant"
icon_state = "silver_ant"
icon_living = "silver_ant"
@@ -319,29 +324,11 @@
/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
/mob/living/simple_mob/animal/tyr/mineral_ants/gold //emp on death
name = "gold ant"
icon_state = "gold_ant"
icon_living = "gold_ant"
desc = "A large ant with a metallic golden rear end. Is crackling with lightning."
meat_type = /obj/item/reagent_containers/food/snacks/tyrant_burn
butchery_loot = list(\
/obj/item/stack/material/gold = 18\
@@ -349,20 +336,24 @@
harvest_results = list(
/obj/item/stack/material/gold = 10
)
var/exploded = FALSE
var/explosion_delay_lower = 5 SECOND // Lower bound for explosion delay.
var/explosion_delay_upper = 8 SECONDS // Upper bound.
/mob/living/simple_mob/animal/tyr/mineral_ants/gold/proc/explode()
if(src && !exploded)
visible_message(span_danger("\The [src]'s body detonates!"))
exploded = TRUE
empulse(src, 1, 2, 0, 0)
/mob/living/simple_mob/animal/tyr/mineral_ants/gold/death()
visible_message(span_critical("\The [src]'s body begins to rupture!"))
var/delay = rand(explosion_delay_lower, explosion_delay_upper)
animate(src, color = "#000000", time = 0.1 SECONDS, loop = ceil(delay/2))
animate(color = "#FF0000", time = 0.1 SECONDS)
addtimer(CALLBACK(src, PROC_REF(explode)), delay, TIMER_DELETE_ME)
return ..()
/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"
@@ -3,207 +3,41 @@
desc = "A strange insect."
icon_state = "firefly"
icon_dead = "firefly_dead"
maxHealth = 10 //Not sure why you're fighting this, but any agate weapon one shots it. Except bow.
maxHealth = 10 //One shotable by pratically anyweapon
health = 10
pass_flags = PASSTABLE
movement_cooldown = 1
ai_holder_type = /datum/ai_holder/simple_mob/passive
ai_holder_type = /datum/ai_holder/simple_mob/ranged/guard_limit/pointblank
mob_size = MOB_MINISCULE //need to click the tiny sprite
projectiletype = /obj/item/projectile/energy/blob/rainbowfly
projectile_dispersion = 8
projectile_accuracy = -15
base_attack_cooldown = 5
glow_color = "#FF3300"
light_color = "#FF3300"
glow_range = 4
glow_intensity = 4
melee_damage_lower = 5 //I guess it could theortically kill you dirrectly
melee_damage_lower = 5
melee_damage_upper = 5
hovering = TRUE
/obj/item/projectile/energy/blob/rainbowfly
damage = 10
check_armour = "melee"
splatter = TRUE
my_chems = list(REAGENT_ID_CRYPTOBIOLIN)
/mob/living/simple_mob/animal/tyr/rainbow_fly/handle_special()
if(stat != DEAD)
painbow_aura()
..()
/mob/living/simple_mob/animal/tyr/rainbow_fly/proc/painbow_aura()
for(var/mob/living/L in view(src, 5))
for(var/mob/living/L in view(src, 7))
L.druggy = max(L.druggy, 10)
/mob/living/simple_mob/animal/tyr/groundpitcher
name = "underground pitcher"
desc = "A large insect."
icon_state = "groundpitcher"
icon_dead = "groundpitcher"
maxHealth = 20 //two hits with sword and spear..
health = 20
pass_flags = PASSTABLE //This was from me copy and pasting but...it's an unmoving plant. Kind of want to keep it here.
movement_cooldown = 1
ai_holder_type = /datum/ai_holder/simple_mob/passive/pitcher
melee_damage_lower = 0 //This cannot kill you unless you fall into it
melee_damage_upper = 0
meat_type = /obj/item/stack/material/fiber
butchery_loot = list(\
/obj/item/stack/material/cloth = 1\
)
vore_bump_chance = 100
vore_bump_emote = "slurps up" //Not really a good way to make the grammar work with a passive vore plant.
vore_active = 1
vore_capacity = 1
vore_pounce_chance = 100
swallowTime = 3
vore_ignores_undigestable = 0
vore_default_mode = DM_DIGEST
//This is legit pitcher plant bellies with slightly altered bits.
/mob/living/simple_mob/animal/tyr/groundpitcher/load_default_bellies()
. = ..()
var/obj/belly/B = vore_selected
B.desc = "You leaned a little too close to the pitcher plant, stumbling over the lip and splashing into a puddle of liquid filling the bottom of the cramped pitcher. You squirm madly, righting yourself and scrabbling at the walls in vain as the slick surface offers no purchase. The dim light grows dark as the pitcher's cap lowers, silently sealing the exit. With a sinking feeling you realize you won't be able to push the exit open even if you could somehow climb that high, leaving you helplessly trapped in the slick, tingling fluid."
B.digest_burn = 0.5
B.digest_brute = 0
B.vore_verb = "trip"
B.name = "pitcher"
B.mode_flags = DM_FLAG_THICKBELLY
B.wet_loop = 0 //As nice as the fancy internal sounds are this is a plant.
B.digestchance = 20
B.escapechance = 20
B.fancy_vore = 1
B.vore_sound = "Squish2"
B.release_sound = "Pred Escape"
B.contamination_color = "purple"
B.contamination_flavor = "Wet"
//Why is it we have all these customizeable belly options which nobody ever alters for mobs?
B.emote_lists[DM_HOLD] = list(
"Slick fluid trickles over you, carrying threads of sweetness.",
"Everything is still, dark, and quiet. Your breaths echo quietly.",
"The surrounding air feels thick and humid.")
B.emote_lists[DM_DIGEST] = list(
"The slimy puddle stings faintly. It seems the plant has no need to quickly break down victims.",
"The humid air settles in your lungs, keeping each breath more labored than the last.",
"Fluid drips onto you, burning faintly as your body heat warms it."
)
B.emote_lists[DM_DRAIN] = list(
"Each bead of slick fluid running down your body leaves you feeling weaker.",
"It's cramped and dark, the air thick and heavy. Your limbs feel like lead.",
"Strength drains from your frame. The cramped chamber feels easier to settle into with each passing moment.")
//Preadtory Things
/obj/structure/mob_spawner/beetle_hill
name = "beetle tunnel"
desc = "An entrance to the nest of metallic ants."
icon = 'modular_chomp/icons/obj/tribal_gear.dmi'
icon_state = "hole"
anchored = TRUE
spawn_delay = 10 MINUTES
spawn_types = list(
/mob/living/simple_mob/animal/tyr/electronic_beetle = 1,
/mob/living/simple_mob/animal/tyr/explode_beetle = 1,
/mob/living/simple_mob/animal/tyr/glowing_beetle = 1,
)
simultaneous_spawns = 2
destructible = 1
health = 50
/mob/living/simple_mob/animal/tyr/electronic_beetle
name = "charged beetle"
desc = "A large insect."
icon_state = "lighting_beetle"
icon_dead = "beetle_dead"
maxHealth = 18
health = 18
pass_flags = PASSTABLE //flying bug
movement_cooldown = 1
meat_type = /obj/item/reagent_containers/food/snacks/meat/grubmeat
meat_amount = 2
butchery_loot = list(\
/obj/item/stack/material/chitin = 1\
)
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
see_in_dark = 3
melee_damage_lower = 12 //Kills you 8ish if unarmored, or 10ish if wearing the tribal armor
melee_damage_upper = 12 //Rng numbers are wierd
/mob/living/simple_mob/animal/tyr/electronic_beetle/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
A.emp_act(4) //The weakest strength of EMP
playsound(src, 'sound/weapons/Egloves.ogg', 75, 1)
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(5, 1, L)
s.start()
/mob/living/simple_mob/animal/tyr/explode_beetle
name = "fiery beetle"
desc = "A large insect."
icon_state = "fire_beetle"
icon_dead = "beetle_dead"
maxHealth = 18
health = 18
pass_flags = PASSTABLE //flying bug
movement_cooldown = 1
ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive
meat_type = /obj/item/reagent_containers/food/snacks/carpmeat
meat_amount = 2
butchery_loot = list(\
/obj/item/stack/material/chitin = 1\
)
see_in_dark = 3
melee_damage_lower = 6 //Kills you 8ish if unarmored, or 10ish if wearing the tribal armor
melee_damage_upper = 6 //Rng numbers are wierd
/mob/living/simple_mob/animal/tyr/explode_beetle/apply_melee_effects(var/atom/A)
if(isliving(A))
var/mob/living/L = A
L.adjust_fire_stacks(3)
L.ignite_mob()
/mob/living/simple_mob/animal/tyr/glowing_beetle
name = "glowing beetle"
desc = "A large insect."
icon_state = "green_beetle"
icon_dead = "beetle_dead"
maxHealth = 18
health = 18
pass_flags = PASSTABLE
movement_cooldown = 1
needs_reload = TRUE
reload_max = 1
reload_time = 2 SECONDS
ai_holder_type = /datum/ai_holder/hostile/ranged/robust
projectiletype = /obj/item/projectile/arc/spore
meat_type = /obj/item/reagent_containers/food/snacks/deathclawmeat
meat_amount = 2
butchery_loot = list(\
/obj/item/stack/material/chitin = 1\
)
see_in_dark = 3
melee_damage_lower = 16
melee_damage_upper = 16
ranged_cooldown = 30
@@ -13,6 +13,7 @@
anchored = 1
armor = list(melee = 40, bullet = 40, laser = 40, energy = 40, bomb = 50, bio = 100, rad = 100)
projectiletype = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
loot_list = list(/obj/item/tool/wirecutters/hybrid/alien = 10,
/obj/item/tool/wrench/hybrid/alien = 10,
/obj/item/tool/crowbar/hybrid/alien = 10,
@@ -40,11 +41,9 @@
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, 7), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
if(3)
specialattackprojectile = /obj/item/projectile/energy/eclipse_boss/tyrjavelin
addtimer(CALLBACK(src, PROC_REF(quad_random_firing), A, 12, 1, 0.5 SECONDS), 1 SECOND, TIMER_DELETE_ME)
attackcycle = 0
@@ -51,8 +51,8 @@
icon_state = "poison_boss"
icon_living = "poison_boss"
wreckage = /obj/item/prop/tyrlore/acid_boss
specialattackprojectile = /obj/item/projectile/energy/neurotoxin/toxic/tyr_flora
projectiletype = /obj/item/projectile/energy/neurotoxin/toxic/tyr_flora
specialattackprojectile = /obj/item/projectile/energy/blob/tyrflora
projectiletype = /obj/item/projectile/energy/blob/tyrflora
var/regeneration_strength = -20
/mob/living/simple_mob/mechanical/mecha/eclipse/tankyboss/acid_boss/load_default_bellies()
@@ -13,17 +13,6 @@
//So if you miss, you're stuck with a middling melee weapon for a bit.
//Whilst the shot gun has more shots, but you need to get up closih.
//Chain gets AP whilst shotgun gets knockback
/obj/item/projectile/energy/spikeenergy_ball
name = "energy ball"
icon = 'modular_chomp/icons/obj/guns/precursor/tyr.dmi'
icon_state = "spikeenergyball"
damage = 45 //after remebering throwing things into walls deals bonus damage. Will that wall thwacking out damage this 5 bonus...yes. But shotgun likly wins most DPS tests anyway
armor_penetration = 60 //damage and AP matching makes brain happy for some reason. No real logic here, just brain saying yes, this is right
range = 8
speed = 5
penetrating = 2
check_armour = "melee"
damage_type = BRUTE
/obj/item/projectile/energy/tyr_rifle
name = "laser blast"
@@ -149,14 +138,13 @@
armor_penetration = 50
penetrating = 5
/obj/item/projectile/arc/fragmentation/tyr_mortar
icon_state = "mortar"
fragment_amount = 10
spread_range = 3
fragment_types = list(
/obj/item/projectile/bullet/astral_blade/artillery, /obj/item/projectile/bullet/astral_blade/artillery, \
/obj/item/projectile/bullet/astral_blade/artillery, /obj/item/projectile/bullet/astral_blade/artillery/secondary
)
/obj/item/projectile/energy/blob/tyrflora
damage = 20 //10 with intended armor
speed = 12
armor_penetration = 50
check_armour = "bio"
damage_type = BURN
my_chems = list(REAGENT_ID_NEUROTOXIC_PROTEIN)
/obj/item/projectile/energy/agate_lighting
damage = 15
@@ -169,4 +157,4 @@
/obj/item/projectile/energy/agate_lighting/fast
damage = 20
speed = 3
speed = 4