Files
SmArtKar 5fb3112981 Reworks bileworms into artillery-like enemies (#96159)
## About The Pull Request

Bileworms now attack by firing a barrage of arcing projectiles at their
target, one guaranteed to hit their turf and the rest spread around
them. Bileworms fire 5 shots and vileworms fire 7 at a faster rate.
The projectiles themselves deal 20/25 burn damage and scale with MELEE
armor (as ACID is mostly for atom armor and not mob) on mobs and ACID on
objects.

Bileworms now have a short jump animation before they burrow, during
which they can be stunned by getting shot or hit (only damaging
projectiles count, so you need to melee with your crusher if you want to
stop a burrow). Doing so prevents them from attacking for 2.4 seconds,
after which they burrow back underground without an animation (as to
avoid chainstunning)
They will not burrow immediatelly after firing, now only repositioning
if their target is 3 or less tiles away from them or if they have been
hit by an attack. Their health has been increased to 110/175 to
compensate for them now being able to be stunned, as those are above
important breakpoints for damage, making them require 1 more swing after
backstab/1 more shot to kill respectively.

When attacking NODE drones bileworms will have 30% less spread, making
them a priority target to take out during vent defense, but not as
dangerous as brimdemons or legions.


https://github.com/user-attachments/assets/9d11959f-c90b-4fd5-b93f-bc514237e9bf

Full video of 7 bileworm/5 vileworm fights with better visuals and no
compression can be seen here: https://streamable.com/6thbmm
(Both underground firing and dead sprite issues have been fixed after
the recording)
Worm jumping sprite/animation by ArcaneMusic, edited by me

## Why It's Good For The Game

Bileworms are not fun to fight for both PKA and PKC users, there is no
counterplay to their burrowing, and they are not engaging during vent
defense. This should address all of these issues, and make them more fun
to fight.

## Changelog
🆑 SmArtKar, ArcaneMusic
balance: Bileworms now fire arcing shots instead of cross patterns, and
can be stunned by hitting them during the burrow animation. Their health
has been slightly buffed to compensate.
/🆑
2026-05-23 14:43:48 +01:00

64 lines
2.4 KiB
Plaintext

///prototype for mining mobs
/mob/living/basic/mining
abstract_type = /mob/living/basic/mining
icon = 'icons/mob/simple/lavaland/lavaland_monsters.dmi'
combat_mode = TRUE
status_flags = NONE //don't inherit standard basicmob flags
mob_size = MOB_SIZE_LARGE
mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_MINING
faction = list(FACTION_MINING, FACTION_ASHWALKER)
unsuitable_atmos_damage = 0
minimum_survivable_temperature = 0
maximum_survivable_temperature = INFINITY
// Pale purple, should be red enough to see stuff on lavaland
lighting_cutoff_red = 25
lighting_cutoff_green = 15
lighting_cutoff_blue = 35
damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1)
/// Message to output if throwing damage is absorbed
var/throw_blocked_message = "bounces off"
/// What crusher trophy this mob drops, if any
var/crusher_loot
/// What is the chance the mob drops it if all their health was taken by crusher attacks
var/crusher_drop_chance = 25
/// Does this mob count for mining mob kills counter?
var/kill_count = TRUE
/mob/living/basic/mining/Initialize(mapload)
. = ..()
add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT)
if (kill_count)
AddElement(/datum/element/mob_killed_tally, "mobs_killed_mining")
var/static/list/vulnerable_projectiles
if(!vulnerable_projectiles)
vulnerable_projectiles = string_list(MINING_MOB_PROJECTILE_VULNERABILITY)
add_ranged_armour(vulnerable_projectiles)
if(crusher_loot)
AddElement(\
/datum/element/crusher_loot,\
trophy_type = crusher_loot,\
drop_mod = crusher_drop_chance,\
drop_immediately = basic_mob_flags & DEL_ON_DEATH,\
)
RegisterSignal(src, COMSIG_ATOM_WAS_ATTACKED, PROC_REF(on_attacked))
// We add this to ensure that mobs will actually receive the above signal, as some will lack AI
// handling for retaliation and attack special cases
AddElement(/datum/element/relay_attackers)
/mob/living/basic/mining/proc/add_ranged_armour(list/vulnerable_projectiles)
AddElement(\
/datum/element/ranged_armour,\
minimum_projectile_force = 30,\
below_projectile_multiplier = 0.3,\
vulnerable_projectile_types = vulnerable_projectiles,\
minimum_thrown_force = 20,\
throw_blocked_message = throw_blocked_message,\
)
/mob/living/basic/mining/proc/on_attacked(datum/source, atom/attacker, attack_flags)
SIGNAL_HANDLER
if(!isashwalker(attacker) || !has_faction(FACTION_ASHWALKER))
return
remove_faction(FACTION_ASHWALKER)