A generic, extensible HUD framework for displaying status effects, timers, alerts, and player-specific indicators.
Providing the player with new tools or adjusting the game interface, without fundamentally changing gameplay.
Version: 0.3.2
Date: 2026-09-09
Features:
- Added is_element_visible for other mods to query the same expiry-aware visibility state used by the HUD renderer
Version: 0.3.1
Date: 2026-09-09
Features:
- HUD callbacks may provide expires_at; the framework now hides expired elements centrally
Version: 0.3.0
Date: 2026-09-09
Features:
- Added configurable row sizing, icon sizing, value alignment, and spacing for registered elements
- Added update_element for changing registered HUD metadata at runtime without unregistering the element
- Added per-player visibility overrides with set_element_visibility and clear_element_visibility
- Callbacks may now return dynamic label, icon, and tooltip fields alongside caption and visible
Version: 0.2.18
Date: 2026-09-09
Bugfixes:
- Shifted right-aligned status timers left by one character width so their final digits remain visible
Version: 0.2.17
Date: 2026-09-09
Bugfixes:
- Widened status rows and reserved caption space so long hour-format timers are not cut off
Version: 0.2.16
Date: 2026-09-09
Changes:
- Moved status-effect timer values slightly left within their bubbles
Version: 0.2.15
Date: 2026-09-08
Bugfixes:
- Fixed row order drifting out of the registered stack order (e.g. Cooldown appearing above Effects): GUI children keep their creation position forever, and rows built during an earlier, partially-registered refresh carried stale defs; refresh_player now detects child-order drift and rebuilds all rows in sorted order
Changes:
- Rows slightly narrower: fixed width 210px -> 190px
Version: 0.2.14
Date: 2026-09-08
Features:
- Compact, both-side-aligned rows: fixed row width (210px), values flush right, tight 2px padding/spacing, icons scaled down from their 64px native size to 28px
- Row stacking order is now data-driven: register_element accepts an optional "order" number (lower = higher on the stack), replacing the framework's hardcoded knowledge of specific element names
Version: 0.2.13
Date: 2026-09-08
Features:
- Rows stack vertically with 4px spacing; each row gets inner padding and an aligned fixed-width title column so values line up
Changes:
- Root flow rebuilt once per save when its layout version changes (old horizontal roots are replaced)
Version: 0.2.12
Date: 2026-09-08
Features:
- Labelled multi-element rows: each registered element renders as its own frame with icon, static title label (def.label) and value caption; rows sort deterministically (status, cooldown, ready, then alphabetical)
- Data callbacks are now queried per player AND element: (player_index, element_name), so one callback can serve several rows (old single-arg callbacks still work)
Bugfixes:
- Fixed "Arguments count error for '?'" log spam: pcall(root.add, root, spec) double-passes self because add is a colon method; all GUI builds now wrap the full method call in a closure
Version: 0.2.11
Date: 2026-09-08
Bugfixes:
- Harden refresh_player: frame/label construction wrapped in pcall with destroy-and-retry, so a GUI error can never again cascade into "Invalid name caption" failing every registration
- Stale-frame sweep now requires both seh_icon and seh_caption children (catches empties left by 0.2.9/0.2.10 crashes); sprite assignment falls back to utility/warning_icon on invalid icon paths
- Documented that child names must never be caption/icon/tooltip (LuaGuiElement property collision)
Version: 0.2.10
Date: 2026-09-08
Bugfixes:
- Fixed "Invalid name caption" crash: child elements named "icon"/"caption" collide with built-in LuaGuiElement properties, so registration always failed and no HUD was ever drawn; children are now "seh_icon"/"seh_caption"
- Broken frames left behind by 0.2.9 (empty, no label child) are detected and rebuilt on next refresh
Version: 0.2.9
Date: 2026-09-08
Bugfixes:
- Fixed invisible HUD: control.lua had collapsed to one line so the header comment swallowed the whole file and the remote interface never registered ("status-effect-hud not available")
- Registry now lives in storage so registrations survive save/load
- register_element no longer reads game.player (nil outside events, wrong player in multiplayer); rendering happens per player instead
- HUD now actually creates GUI (icon + label per element in player.gui.top), refreshes every 30 ticks and on player join
Version: 0.2.7
Date: 2026-09-08
Improvements:
- Added element type-specific styling (status/cooldown/ready have distinct labels and colors)
- Reduced element spacing (ELEMENT_SPACING = 4)
- Elements now hidden when no data is available (window.visible = false when no data)
- Added icon only to status element, not cooldown/ready
- Each element type shows its own label (STATUS, COOLDOWN, READY)
Version: 0.2.6
Date: 2026-09-08
Bugfixes:
- Fixed corrupted control.lua (incomplete functions and duplicate code from failed edits)
- Added log message when remote interface is registered
- This fixes "status-effect-hud not available" error in estrogen-mod
Version: 0.2.5
Date: 2026-09-08
Bugfixes:
- Fixed corrupted control.lua file (literal \n characters from failed regex replacement)
- Recreated file cleanly
Version: 0.2.4
Date: 2026-09-08
Bugfixes:
- Added debug logging for anchor creation and data callback results
- Fixed anchor check to also verify defines.relative_anchor_position exists
Version: 0.2.3
Date: 2026-09-08
Bugfixes:
- Fixed remote function call to use remote.call() instead of direct access
- Timer should now display correctly instead of staying at 0s
Version: 0.2.2
Date: 2026-09-08
Bugfixes:
- Fixed GUI style error by removing incompatible button style from sprite element
- Removed invisible_frame style to avoid parent style conflicts
Version: 0.2.1
Date: 2026-09-08
Changes:
- Changed API: mods now provide data via remote interface function instead of callback
- Register with data_callback_name (string) pointing to a remote function
- Remote function signature: remote.call(mod_name, data_callback_name, player_index) -> { caption, visible }
Version: 0.2.0
Date: 2026-09-08
Changes:
- Redesigned as a generic HUD framework for any mod to use
- Added remote interface: status-effect-hud.register_element() and unregister_element()
- Added support for custom anchors (e.g., positioning under the minimap)
- Elements are grouped by anchor type for proper positioning
Version: 0.2.8
Date: 2026-09-08
Bugfixes:
- Fixed crash on configuration changed: replaced non-existent create_hud() call with refresh_hud()
Version: 0.1.0
Date: 2026-09-08
Features:
- Initial release: displays a status HUD for HRT dose effects