Adds a blood level hud for vamp & soulscythe (#90578)

## About The Pull Request

Replaces the stat panel entries for soulscythes & vampires to show their
blood level, with a HUD instead.
The sprite was taken from Bloodsuckers which they use to also show their
own blood level, which is what gave me the idea.

Also makes soulscythe use the living level ``blood_volume`` instead of
their own snowflake var meant to do the same thing.

Vampire

![image](https://github.com/user-attachments/assets/4ec75929-ad58-44ec-a817-1fd1ec5a4f11)

Soulscythe

![image](https://github.com/user-attachments/assets/5d04a8d5-0cfc-46a8-ab2c-c0a08f4e6d00)

## Why It's Good For The Game

Helps move away reliance on the stat panel & makes this information more
obvious to the player. The stat panel in general isn't a good place to
put this stuff as it obfuscates it as a feature for players who either
are on a different tab or simply don't know to look there.

## Changelog

🆑 TheSwain, JohnFulpWillard
qol: Soulscythes and Vampires now have a blood hud on the left side of
their screen rather than a stat panel entry stating how much blood they
have.
/🆑
This commit is contained in:
John Willard
2025-04-13 16:19:27 -04:00
committed by Shadow-Quill
parent 3c7573f714
commit fcad08160e
7 changed files with 57 additions and 22 deletions
@@ -268,15 +268,15 @@
return TRUE
/obj/item/soulscythe/proc/use_blood(amount = 0, message = TRUE)
if(amount > soul.blood_level)
if(amount > soul.blood_volume)
if(message)
to_chat(soul, span_warning("Not enough blood!"))
return FALSE
soul.blood_level -= amount
soul.blood_volume -= amount
return TRUE
/obj/item/soulscythe/proc/give_blood(amount)
soul.blood_level = min(MAX_BLOOD_LEVEL, soul.blood_level + amount)
soul.blood_volume = min(MAX_BLOOD_LEVEL, soul.blood_volume + amount)
/obj/item/soulscythe/proc/on_resist(mob/living/user)
SIGNAL_HANDLER
@@ -386,17 +386,13 @@
mob_biotypes = MOB_SPIRIT
faction = list()
weather_immunities = list(TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE)
/// Blood level, used for movement and abilities in a soulscythe
var/blood_level = MAX_BLOOD_LEVEL
/mob/living/simple_animal/soulscythe/get_status_tab_items()
. = ..()
. += "Blood: [blood_level]/[MAX_BLOOD_LEVEL]"
blood_volume = MAX_BLOOD_LEVEL
hud_type = /datum/hud/soulscythe
/mob/living/simple_animal/soulscythe/Life(seconds_per_tick, times_fired)
. = ..()
if(!stat)
blood_level = min(MAX_BLOOD_LEVEL, blood_level + round(1 * seconds_per_tick))
blood_volume = min(MAX_BLOOD_LEVEL, blood_volume + round(1 * seconds_per_tick))
/obj/projectile/soulscythe
name = "soulslash"