SANDBOX — this is a test environment. No servers are actually deployed and no real payments are charged.
Back to NxLabs

NxLabs / Vintage Story

Player Status HUD

TBy Teotale

Animated player status icon HUD with tooltips and mod API for custom effects.

Player Status HUD

Description

<p>&nbsp;</p> <div style="width: 100%; background: #01241E; color: #f8fbde;"> <div style="max-width: 720px; margin: 0 auto; padding: 24px clamp(14px,4vw,18px) 32px;"><header style="padding-bottom: 14px; border-bottom: 1px solid rgba(228,242,101,.2); margin-bottom: 16px;"> <h1 style="margin: 0; font-size: clamp(1.2rem,4vw,1.45rem); font-weight: bold; color: #e4f265; line-height: 1.25;">Player Status HUD</h1> <p style="margin: 6px 0 0; font-size: 13px; color: #f8fbde; opacity: .88;">Developer-focused status HUD library for Vintage Story</p> <p style="margin: 8px 0 0; font-size: 12px; color: #e4f265; opacity: .95; font-weight: bold;">Current public release: 1.2.0</p> </header> <p style="margin: 0 0 16px;">Player Status HUD is a reusable HUD layer and API for mods that need player-facing status icons with tooltips and animation semantics. It is designed for integration first: provider-based data model, stable ids, deterministic merge behavior, and production-safe defaults.</p> <section style="margin: 0 0 16px;"> <h2 style="margin: 0 0 8px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: #e4f265; font-weight: 600;">Mods using this library</h2> <p style="margin: 0 0 8px; font-size: 14px;">Integrators can treat these mods as live demos of the Player Status HUD API in production gameplay.</p> <ul style="margin: 0; padding-left: 18px;"> <li style="margin: 0;"><a style="color: #e4f265; text-decoration: none;" href="https://mods.vintagestory.at/hydrateordiedratevisualizer">Hydrate or Diedrate Visualized</a> &mdash; reference integration for different debufst wchich mod provide.</li> <li style="margin: 0;"><a style="color: #e4f265; text-decoration: none;" href="https://mods.vintagestory.at/slowtoxvisualizer">SlowTox Visualized</a> &mdash; reference integration for intoxication and effect statuses.</li> </ul> </section> <div style="background: rgba(228,242,101,.09); border-radius: 12px; padding: 14px 16px; margin-bottom: 16px; border: 1px solid rgba(228,242,101,.46); border-left: 4px solid #E4F265;"> <div style="font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: #e4f265; margin-bottom: 8px; font-weight: bold;">Production contract</div> <ul style="margin: 0; padding-left: 18px;"> <li><code style="background: rgba(1,36,30,.35); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">UseMockStatuses=false</code> by default.</li> <li>Mock tooling exists for development, but no placeholder statuses appear unless explicitly enabled/run.</li> <li>Integration mods can ship without exposing test-only states to players.</li> </ul> </div> <section style="background: #03332B; border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; border: 1px solid rgba(228,242,101,.18);"> <h2 style="margin: 0 0 10px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: #e4f265; font-weight: 600;">Why use this library</h2> <table style="font-size: 14px; border-collapse: collapse; width: 100%;" role="presentation"> <tbody> <tr> <td style="padding: 6px 0; vertical-align: top; width: 38%; color: #e4f265; font-weight: 600;">Stable runtime API</td> <td style="padding: 6px 0;">Register providers once and stream statuses per frame via <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">IStatusStripProvider</code>.</td> </tr> <tr> <td style="padding: 6px 0; vertical-align: top; width: 38%; color: #e4f265; font-weight: 600;">Deterministic merge</td> <td style="padding: 6px 0;">Sorted by <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">SortOrder</code> + <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">StableId</code>; duplicate id policy is predictable (last provider wins).</td> </tr> <tr> <td style="padding: 6px 0; vertical-align: top; width: 38%; color: #e4f265; font-weight: 600;">Semantic motion</td> <td style="padding: 6px 0;">Built-in <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">Neutral / Positive / Negative</code> affect kinds for meaningful animation feedback.</td> </tr> <tr> <td style="padding: 6px 0; vertical-align: top; width: 38%; color: #e4f265; font-weight: 600;">Config-first layout</td> <td style="padding: 6px 0;">HUD alignment and icon geometry are user-configurable without changing code.</td> </tr> </tbody> </table> </section> <section style="background: #03332B; border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; border: 1px solid rgba(228,242,101,.18);"> <h2 style="margin: 0 0 10px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: #e4f265; font-weight: 600;">Quick integration</h2> <p style="margin: 0 0 10px; font-size: 14px;">Minimal client-side bootstrap:</p> <pre style="margin: 0; background: rgba(1,36,30,.38); border: 1px solid rgba(228,242,101,.2); border-radius: 8px; padding: 10px 12px; font-size: 12px; line-height: 1.5; color: #f8fbde; overflow-wrap: anywhere; word-break: break-word;">var baseSys = api.ModLoader.GetModSystem&lt;PlayerStatusStrip.PlayerStatusStripModSystem&gt;(); IStatusStripHudApi? stripApi = baseSys?.StatusApi; if (stripApi == null) return; stripApi.RegisterProvider(myProvider);</pre> <p style="margin: 10px 0 0; font-size: 13px; opacity: .92;">Provider contract: append <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">StatusDescriptor</code> entries in <code style="background: rgba(248,251,222,.12); padding: 1px 6px; border-radius: 4px; color: #f8fbde;">Collect()</code>, keep ids stable across frames, unregister on unload.</p> </section> <section style="background: #03332B; border-radius: 12px; padding: 16px 18px; margin-bottom: 14px; border: 1px solid rgba(228,242,101,.18);"> <h2 style="margin: 0 0 10px; font-size: 12px; text-transform: uppercase; letter-spacing: .06em; color: #e4f265; font-weight: 600;">Configuration surf

Ratings & reviews

No ratings yet

Sign in to leave a rating or comment.