Files
Bubberstation/code/datums/elements/tear_wall.dm
Comxy 8957eb763c Spider Evolution - Young Spiders [Ready] (#76692)
## About The Pull Request
This pr adds a young spiders that appear between spiderlings and adult
spiders. Now spiders have a stage where they are squishy but can also
spin webs and do some other things early depending on the spider type.
Spiderling stage takes 40 seconds and young spider stage take 1 minute,
ealier for spiderling this was 1 minute. Also adds a new wizard spider
sprite and makes the spider form usable.

Gives Wizard Spider version has better immunity against fire since it
can kill a wizard very fast it they are not paying attention.

Makes tangle spider get more health but makes the self-healing worse.
This is done because spider is a team antag except for the flesh
(changeling spider), making it so solo-playing as tangle is less
encouraged.

Scout spiderling gets thermal vision also. It cannot communicate, but it
can already start scouting now.

Viper deals bonus damage when an enemy is on low health. Toxins don't
kill humans anymore, and since the viper spider only deals 5 damage now
it deals more so it can actually take down enemies at low health. They
also have a little more health since they always die very fast. Viper
can also change between a defensive/slow mode with more armor or a
offensive/speed mode with less armor.

Nurse spider heals for 25 instead of 20, since 25 is one laser shot, it
makes more sense for the nurse spider to be able to heal that amount.

Flesh spider grows faster since they are a solo antag and spawn killing
isn't cool.

Tarantula spider can now tear down walls by clicking them instead of
needing to use their charge attack. They can also build wall webs and
passage webs. Their damage coeffs also got the regular burn factor for
spider so their health also increased a bit.

![promo](https://github.com/tgstation/tgstation/assets/25363960/19b9a97f-db08-4c7d-b470-46ae0bb18556)

![promo2](https://github.com/tgstation/tgstation/assets/25363960/783ced04-a97d-4849-8ec3-04c72a418284)
## Why It's Good For The Game
Now there is a smooth transition between the tiny spiderling and the
bigger spider stage. This will promote people to help the hive at an
earlier stage while not being too powerful yet. It is also realistic and
adds extra flavor to the spider antag. The other balance changes are
improvements to the game.
## Changelog
🆑
add: Young Spiders that appear between spiderlings and adult spiders.
balance: Wizard Spider version has better immunity against temp damage
and can lay webs faster.
balance: Tangle Spider sucks more with self-healing but has more health.
balance: Scout spiderling gets thermal vision.
balance: Viper deals bonus damage when an enemy is below 20% health.
/🆑
2023-08-09 22:38:57 +02:00

49 lines
1.8 KiB
Plaintext

/**
* Attached to a basic mob that will then be able to tear down a wall after some time.
*/
/datum/element/tear_wall
element_flags = ELEMENT_BESPOKE
argument_hash_start_idx = 3
/// The rate at which we can break regular walls
var/regular_tear_time
/// The rate at which we can break reinforced walls
var/reinforced_tear_time
/datum/element/tear_wall/Attach(datum/target, regular_tear_time = 2 SECONDS, reinforced_tear_time = 4 SECONDS)
. = ..()
if(!isbasicmob(target))
return ELEMENT_INCOMPATIBLE
src.regular_tear_time = regular_tear_time
src.reinforced_tear_time = reinforced_tear_time
RegisterSignal(target, COMSIG_HOSTILE_POST_ATTACKINGTARGET, PROC_REF(attack_wall))
/datum/element/bonus_damage/Detach(datum/source)
UnregisterSignal(source, COMSIG_HOSTILE_POST_ATTACKINGTARGET)
return ..()
/// Checks if we are attacking a wall
/datum/element/tear_wall/proc/attack_wall(mob/living/basic/attacker, atom/target, success)
SIGNAL_HANDLER
if(!iswallturf(target))
return
var/turf/closed/wall/thewall = target
var/prying_time = regular_tear_time
if(istype(thewall, /turf/closed/wall/r_wall))
prying_time = reinforced_tear_time
INVOKE_ASYNC(src, PROC_REF(async_attack_wall), attacker, thewall, prying_time)
/// Performs taking down the wall
/datum/element/tear_wall/proc/async_attack_wall(mob/living/basic/attacker, turf/closed/wall/thewall, prying_time)
if(DOING_INTERACTION_WITH_TARGET(attacker, thewall))
attacker.balloon_alert(attacker, "busy!")
return
to_chat(attacker, span_warning("You begin tearing through the wall..."))
playsound(attacker, 'sound/machines/airlock_alien_prying.ogg', 100, TRUE)
if(do_after(attacker, prying_time, target = thewall))
if(isopenturf(thewall))
return
thewall.dismantle_wall(1)
playsound(attacker, 'sound/effects/meteorimpact.ogg', 100, TRUE)