Simplify T5 and T6 HUD overlays and service displays

This commit is contained in:
2026-10-15 21:07:10 -04:00
parent 929bf0354b
commit 2b5b1955bc
15 changed files with 1934 additions and 643 deletions
+92 -44
View File
@@ -361,39 +361,69 @@ settles legacy and public journals without duplicate ledger entries or lost poin
## Core HUD and service window (T5 and T6)
The HUD uses a fixed upper-right panel below the top edge, leaving room above
for performance overlays and below for stock player scores, ammo and equipment.
The header contains `TWS ZOMBIES` and `discord.tws.lol`; match and round timers
share the next row. Zombie count and current/maximum HP sit above a full-width
health bar. HP numbers remain visible at full health. A reserved footer holds
the AFK indicator; the former co-op player-name row is removed.
The core uses a light, unboxed layout: match time above round time at the upper
left, `TWS ZOMBIES · discord.tws.lol` centered along the top, and the zombie
count centered near the bottom above a slim health bar. Current/maximum HP
appears to the right of the bar only while injured, then disappears at full
health. The AFK indicator sits above the zombie count. Text uses an outline for
contrast; there are no panel backgrounds or timer labels.
Fullscreen X/Y anchors bypass safe-area insets. Overlay positions and shader
widths use the normalized `640 × 480` viewport directly. Text uses a minimum
font scale of `1.0`. Check the upper-left timers
against stock map inventory/objectives and performance overlays, and keep the
upper-right service area below the Plutonium tag. Physical proportions vary
with aspect ratio, so verify text fit and screen-edge clearance in-game.
The core is created once per connection and stays in place when services open,
across death and respawn, and while newcomers spectate. Unavailable values use
placeholders until the first-spawn callback binds the data displays. Creating the
panel does not start the match clock. Each engine retains its timer behavior;
clocks, health and zombie-count displays freeze at game over. Health display
fallbacks never modify gameplay max health.
placeholders until the first-spawn callback binds the data displays. Creation
does not start the match clock. Each engine retains its timer behavior; clocks,
health and zombie-count displays freeze at game over. Health display fallbacks
never modify gameplay max health.
Common owns one fixed-height service window directly below the core. `.help`
and its `.commands` alias show four commands per page, with command and
description columns plus a page count. Pages advance automatically every
12 seconds and close after the last page. Repeating either command restarts
page one. The order is `.help`, `.afk`, `.back`, `.join`, `.leaders`, `.b`, `.d`,
`.w`, omitting commands whose modules are not registered. The `.join` description
continues to identify its newcomer restriction.
Type `.hud` in chat to hide or show your core, including its branding, timers,
zombie count, health bar, damage-only HP and AFK indicator. The exact command
is case-insensitive. Visibility defaults on and persists across death/respawn
within the current connection/map; reconnecting or restarting the map restores
the visible default. Data and timers continue updating while hidden, so showing
the HUD restores current values or the frozen game-over values. Help, records
and the stock HUD remain unaffected.
Records use the same service window. Help pauses a visible record and resumes
its remaining page time when help ends. `.leaders` during help replaces the
pending record with a fresh replay from page one. One service is visible at a
time, and neither changes the core's position or height. Services are private
to the requesting player and work when the HUD module is omitted.
Common owns one unboxed service area at the upper right. `.help` and its
`.commands` alias show all nine installed commands in one list with command
and description columns: `.help`, `.hud`, `.afk`, `.back`, `.join`, `.leaders`,
`.b`, `.d`, `.w`. Missing modules' commands are omitted. Bank syntax remains
`.d <amount|all>` and `.w <amount|all>`, and `.join` identifies its newcomer
restriction. Additional registered commands use pages of nine rows; a page
count appears only when more than one page is needed. Each page lasts
12 seconds and the list closes after the final page. Repeating either help
command restarts page one. Both engines position rows explicitly, avoiding
T5's newline-rendering problem.
Install HUD `1.2.0`, leaderboard `1.1.0` and AFK `1.0.1` with the matching
game's common `1.2.0+`; update the installed scripts together and restart the map.
There is no new native-plugin or backend requirement, and this change does not
require a full server-process restart. Existing leaderboard plugin requirements
still apply. Unchanged modules retain their existing common helper interfaces.
Records use the same service area, right aligned: `Map record · Round N`
followed by up to three bounded holder lines. Single-page records have no
counter or footer; ties spanning multiple pages retain a page count and
12 seconds per page. Help pauses a visible record and resumes its remaining
page time when help ends. `.leaders` during help replaces the pending record
with a fresh replay from page one. One service is visible at a time. Services
remain private and work when the HUD module is omitted.
Both games allocate only the active service view and release it when idle or
before switching between help and records. Pages reuse the active view's
elements. The core uses 11 archived elements, plus one for AFK. The standard
nine-command help view uses 19 nonarchived elements, or 20 with a multi-page
counter; records use four, or five with a multi-page counter. Hidden elements
still occupy slots. The controller and pending requests are separate from
display lifetime, so an idle service holds no HUD elements.
HUD `1.4.0` and AFK `1.2.0` require matching common `1.4.0+` on both games.
Update common, HUD and AFK together where installed, then restart the map.
Leaderboard `1.1.0` remains compatible. There is no new Plutonium, native-plugin
or backend requirement, and this change does not require a full server-process
restart. Existing leaderboard plugin requirements still apply. Common retains
its older panel helpers for unchanged consumers; the new layout uses fullscreen
overlay helpers with the same integer shader-width handling.
### HUD validation
@@ -410,16 +440,23 @@ Before rollout, validate both engines in Plutonium:
1. Check 16:9 and narrower/wider resolutions, safe-area settings, long match
timers, stock map inventory/objectives, performance overlays, player scores,
ammo and interaction prompts. The core and service panels must stay clear of
these areas and retain their geometry for every page.
ammo and interaction prompts. Check upper-left timers, top-center branding,
bottom-center zombies/health and the upper-right service area. Text must stay
legible without panel backgrounds; services must clear the Plutonium tag.
Verify the health-bar fill stays within its track and damage-only HP clears
stock scores/ammo. Check text fit at other aspect ratios because horizontal
geometry scales with viewport width.
2. Join before spawning, join mid-match, die/respawn and reconnect. Verify one
core per player, spectator placeholders, no early match-clock start, correct
health/Juggernog changes, and frozen timers at game over. Toggle AFK and back
without overlapping the health bar or changing existing protection behavior.
3. Open `.help`, `.HELP` and `.commands` with all modules installed. Verify two
pages of four commands, 12 seconds per page and automatic dismissal. Repeat
on page two to return to page one. Remove optional modules and restart the
map to confirm filtered pages, then restore them.
health/Juggernog changes, and frozen timers at game over. HP numbers must
appear only while injured and disappear on full healing. Toggle AFK and back
without overlapping zombies/health or changing existing protection behavior.
3. Open `.help`, `.HELP` and `.commands` with all modules installed. Verify
one list of nine commands, full bank syntax, no single-page counter and
automatic dismissal after 12 seconds. Add custom registered commands to
exercise the nine-row page limit, page counter and repeat-to-restart behavior.
Remove optional modules and restart the map to confirm filtering, including
`.hud` disappearing without HUD, then restore them.
4. Interrupt records with help and check that the interrupted page resumes for
its remaining time. Repeat `.leaders` while help is open; only the latest
replay should start, at page one. Check long holder names, ties spanning
@@ -428,6 +465,16 @@ Before rollout, validate both engines in Plutonium:
request them again. Verify no duplicate elements, stale timeout closures or
surviving service windows. Confirm `.join`, bank commands and lobby lock
retain their existing behavior with their required modules installed.
6. Toggle `.hud` and `.HUD` before spawning, during play, while AFK and after
game over. Check private visibility, all core elements and the AFK indicator,
continued updates while hidden, and unchanged help/records/stock HUD. Verify
death/respawn preserves the choice and reconnect/map restart restores visibility.
7. On T5, watch the first automatic record announcement and its dismissal, then
repeat `.leaders`, help and interrupted/resumed records. Verify the core
health bar, damage-only HP, zombie count and timers remain intact while a
service is visible and after it closes. Include stock round/connection
notifications and other installed HUD mods; portable allocation checks do
not establish live T5 SP rendering capacity.
## Map record announcements
@@ -438,8 +485,8 @@ round and every tied holder once per connection, including spectator newcomers.
Type `.leaders` to replay the record privately from the latest usable cache.
Repeating the command restarts the announcement from its first page. It appears
in `.help` when the leaderboard module is enabled. If no usable record is
available, the service window identifies the record as unavailable and keeps
the `.leaders` retry reminder; this differs from a valid empty record history.
available, the service identifies the record as unavailable; this differs from
a valid empty record history. Neither state adds a replay footer.
It reads Electric Cherry's public `/api/leaderboard` endpoint without a token;
only completed matches contribute. Ties may come from the same run or separate
runs. Names are the API's latest player names, with players identified by GUID.
@@ -461,17 +508,18 @@ exist in the API's map list and match the current game and engine map. Clear it
when changing variants; restart the map after changing these settings.
The announcement starts five seconds after player readiness and waits for the
initial record fetch if necessary. It appears in the common-owned service
window beneath the core, with a `MAP RECORD` heading, prominent round value,
holder names, page count and `.leaders` replay hint. Each page shows up to three
holder lines for 12 seconds. Opening `.help` pauses the record's remaining
initial record fetch if necessary. It appears as right-aligned text in the
common-owned upper-right service area: `Map record · Round N`, followed by up
to three holder lines. There is no background or replay footer, and a page
count appears only for multi-page records. Each page lasts 12 seconds. Opening `.help` pauses the record's remaining
page time until help closes. A `.leaders` request during help replaces any
pending replay and starts from page one after help closes.
All holders are included; colour/control codes are removed, and overlong
individual names are abbreviated without splitting UTF-8 characters. Bounded
lines and additional pages preserve every tied holder. The window hides when the
announcement finishes and its elements are reused for subsequent services.
Disconnect or game end cleans up service elements.
lines and additional pages preserve every tied holder. The window closes when
the announcement finishes. Both games release their view elements when idle or
changing service kinds. Disconnect or game end cleans up any remaining service
elements.
One level worker fetches the map list and pages of three players, stopping when
the highest-round tie ends. Successful snapshots refresh every five minutes.