You are viewing a potentially older version of this package. View all versions.
Mentalize-RotVitals-1.0.4 icon

RotVitals

Floating enemy health bars - live health, a damage-lag ghost bar, hit punch, and no reading enemies through walls.

Date uploaded 2 weeks ago
Version 1.0.4
Download link Mentalize-RotVitals-1.0.4.zip
Downloads 715
Dependency string Mentalize-RotVitals-1.0.4

This mod requires the following mods to function

Thunderstore-GrainRot_UE4SS-1.0.1 icon
Thunderstore-GrainRot_UE4SS

Grain Rot UE4SS community overlay for unreal-shimloader.

Preferred version: 1.0.1

README

RotVitals

Floating health bars over every enemy's head in Grain Rot.

What it does

  • Tracks at frame rate. The bar reads the enemy's live health every frame, so it never lags a hit, and it stays locked to the enemy while you move.
  • Damage-lag ghost bar. A pale red bar drains behind the fill after a hit, so you can see exactly how much that swing took off.
  • Hit punch. The bar pops the instant health drops.
  • Reads at a glance. Fill ramps green → amber → red over a segmented track, framed with a drop shadow and a bone rim.
  • Not a wallhack. A bar only goes up once line of sight is confirmed, and comes straight down the moment cover breaks it, so nothing shows through geometry — not even a flicker as you move past a wall. Range is capped at 18 m too, so you cannot read a room before you enter it.
  • Enchanted enemies get a gold rim.
  • HP numbers above the bar (42 / 118), switchable off.
  • Flying drones too. Drones have no health of their own — they live and die by the character flying them — so their bar shows that character's health, which is what actually decides whether the drone goes down.

Only enemies get bars. Players, soul vessels and friendly NPCs are ignored.

Multiplayer

Purely local and visual. It reads replicated health, so it works whether you are hosting or joining, and lobby mates without the mod see nothing different.

The game only replicates an enemy's current health; its maximum is worked out on each machine separately and is not meaningful on a machine that does not own the enemy. So when you are joining someone else's game, the bar takes its maximum from the highest health it has seen that enemy at. Enemies are at full when they spawn, so this is normally exact — and it is the only approach that stays correct when the host runs a mod that changes enemy health. The one case it cannot know about is an enemy that was already damaged before you ever laid eyes on it, which will read as full until you damage it further.

Performance

Bars are pooled and each one is its own canvas, so a moving enemy costs a single position write per frame. Enemy intake is event-driven — no polling loops — and only the nearest 16 on-screen enemies are ever drawn.

Tuning

Everything is in the CFG block at the top of mod/Scripts/main.lua:

Setting Default What it does
MAX_DIST 1800 Range in uu (100 uu = 1 m) — no bars past this
FADE_DIST 1300 Bars start fading out here
MAX_BARS 16 Most bars on screen at once (nearest enemies win)
WALL_CHECK true Hide bars for enemies behind geometry
LOS_HITS 2 Clear line-of-sight traces in a row before a bar appears
SHOW_NUMBERS true 42 / 118 above the bar
HIDE_FULL_HP false Set true to only show enemies you have hurt
SEGMENTS 4 Divider ticks across the track (0 = plain bar)
DRONES "host" Drone bars: "host" health, "state" 3-step, "off" none
BAR_W / BAR_H 128 / 14 Bar size at reference distance
HEAD_OFFSET 40 Height above the head
CAMERA_LEAD 1.0 One-frame camera correction (see below)

No hotkeys, no config file, no external processes, nothing written to disk.

Notes

Bar placement uses the mod's own world-to-screen maths against a camera extrapolated one frame forward, because the per-frame hook it runs from fires before the camera manager updates — without that, bars visibly swim whenever the camera moves. On startup it cross-checks its maths against the engine's own projection and only switches over if they agree, so on any build where that assumption does not hold it quietly falls back instead of misplacing bars. If bars ever appear to overshoot when you spin, set CAMERA_LEAD = 0.

Status lines land in UE4SS.log every 60 seconds.

Credits

Made by Mentalize.