Simplify T5 and T6 HUD overlays and service displays
This commit is contained in:
+64
-31
@@ -9,7 +9,7 @@ telemetry, leaderboard and bank modules; neither includes direct-database module
|
||||
| --- | --- | --- |
|
||||
| Paths | `maps/mp/_utility`, `scripts/zm/tws_t6_common` | T6 namespaces and requested filenames |
|
||||
| Loading | No T5 `zombiemode` dvar gate; each module has `main()` and `init()` | Zombies-only folder loading; avoid r5346 missing-main warnings |
|
||||
| HUD positioning | Fullscreen upper-right anchors, fixed core and service-window geometry | Keep clear of top-edge overlays and stock scores/ammo without moving the core for services |
|
||||
| HUD positioning | Fullscreen X/Y anchors, direct normalized `640 × 480` coordinates, unboxed core and service area | Bypass safe-area insets; validate Plutonium tag clearance and font fit at each aspect ratio |
|
||||
| HUD rendering | Precached white shader, local max-health fallback, floating-point ratio, `getPlayers()` | T6 rendering/state handling without changing player max health |
|
||||
| Enemy count | Stock `_zm_utility::get_current_zombie_count()` plus queued zombies | Uses the map's zombie team and enemy filters |
|
||||
| Timers | Seed elapsed time for late joiners; stop round watcher/reset on game over | T6 timer behavior; keep frozen timers frozen |
|
||||
@@ -26,30 +26,56 @@ Common also listens for `.help` through the native `say` notification, independe
|
||||
of first-spawn initialization so newcomers can view commands while spectating.
|
||||
Each loaded command module registers its command and description with
|
||||
`register_help_command()` during `init()`. Lazy registry initialization preserves
|
||||
registrations regardless of module initialization order. Common owns one reusable
|
||||
service window beneath the fixed core. Help uses four commands per page in stable
|
||||
order, with 12 seconds per page and automatic dismissal after the final page.
|
||||
`.help` / `.commands` restart at page one. Help pauses record page time, and a
|
||||
`.leaders` request during help replaces the pending replay from page one. Service
|
||||
state prevents old requests from closing newer displays. Disconnect and game-end
|
||||
cleanup are independent of page timing. The command handlers retain their
|
||||
existing listeners, and help/records work without the HUD module.
|
||||
registrations regardless of module initialization order. Common owns one
|
||||
unboxed upper-right service area. Help shows all nine installed commands in
|
||||
explicit command/description rows; extra registered commands use pages of nine
|
||||
rows. Pages last 12 seconds, with automatic dismissal after the final page and
|
||||
a counter only for multi-page lists. `.help` / `.commands` restart at page one.
|
||||
Help pauses record page time, and a `.leaders` request during help replaces
|
||||
the pending replay from page one. Service state prevents old requests from
|
||||
closing newer displays. Disconnect and game-end cleanup are independent of
|
||||
page timing. Command handlers retain their existing listeners, and help/records
|
||||
work without the HUD module.
|
||||
|
||||
Help reuses two multiline text columns and a muted command-column backdrop.
|
||||
The service has 19 nonarchived elements independent of command/page count;
|
||||
core + AFK use 15 + 1 archived elements. Hidden elements still occupy slots.
|
||||
Both engines use explicit help rows; T5 no longer relies on newline rendering,
|
||||
and T6 has the same row geometry. Common allocates only the active service
|
||||
view: 19 nonarchived elements for nine-command help (20 with a multi-page
|
||||
counter), or four for records (five with a multi-page counter). Closing the
|
||||
service or switching kinds destroys the view; idle holds no elements. Pages
|
||||
reuse the active elements, separately from controller and pending-request state.
|
||||
Core + AFK use 11 + 1 archived elements. Hidden elements still occupy slots.
|
||||
The [T6 player HUD structure](https://github.com/skiff/t6-gsc-helper/blob/50ff6cb7397c9376894a195f48118d1743812d1d/src/game/structs.hpp#L184)
|
||||
has 31 slots in each bucket; it does not establish current Plutonium stock HUD
|
||||
usage. Keep the live overlap/element-budget checks alongside the portable checks.
|
||||
|
||||
The core is created on connection for waiting spectators with placeholders, while
|
||||
timer updates retain the existing spawn/round lifecycle. Connection-time creation
|
||||
must not seed the match clock. Current/maximum HP remains visible at full health;
|
||||
the former co-op name row is removed and AFK uses a reserved footer. Opening a
|
||||
service never changes core position or height. HUD `1.2.0`, leaderboard `1.1.0`
|
||||
and AFK `1.0.1` require matching common `1.2.0+`; deploy the changed scripts
|
||||
together and restart the map. This introduces no native-plugin/backend dependency
|
||||
or full server-process restart requirement.
|
||||
The core is created on connection for waiting spectators with placeholders,
|
||||
while timer updates retain the existing spawn/round lifecycle. Connection-time
|
||||
creation must not seed the match clock. The unboxed layout has timers at the
|
||||
upper left, branding at top center and zombies/health at bottom center. HP
|
||||
numbers appear to the right of the bar only while injured; AFK sits above the
|
||||
zombie count. Services never reposition the core. Records are right aligned,
|
||||
with `Map record · Round N` followed by up to three bounded holder lines, no
|
||||
footer and no single-page counter. Their 12-second page timing is unchanged.
|
||||
|
||||
HUD `1.4.0` and AFK `1.2.0` require matching common `1.4.0+`; update all three
|
||||
where installed and restart the map. Leaderboard `1.1.0` remains compatible.
|
||||
Overlay helpers use direct normalized `640 × 480` coordinates. Dynamic health
|
||||
fills use `make_overlay_width()` like their tracks. Apply `int()` after `max()`
|
||||
in that helper: native `max()` returns a float, but `SetShader` requires an
|
||||
integer width. Legacy panel helpers retain their `0.75` horizontal conversion
|
||||
for existing consumers. Font scale is at least `1.0`. This introduces no
|
||||
Plutonium/native-plugin/backend dependency or full server-process restart
|
||||
requirement.
|
||||
|
||||
HUD owns the exact, case-insensitive `.hud` chat command and registers it in
|
||||
help only while installed. Common's core wrappers preserve each element's
|
||||
intended alpha behind a per-player visibility mask; health and AFK changes use
|
||||
`set_core_alpha()`. Data/timers keep updating while hidden and freeze at game
|
||||
over. Help, records, stock HUD and AFK protection are unaffected. Visibility
|
||||
defaults on, survives death/respawn during the connection/map, and resets on
|
||||
reconnect or map restart. All nine installed commands use one help page,
|
||||
ordered `.help`, `.hud`, `.afk`, `.back`, `.join`, `.leaders`, `.b`, `.d`, `.w`.
|
||||
Bank commands display the full `<amount|all>` syntax.
|
||||
|
||||
AFK again listens to the native `say` notification, so it no longer needs plugin
|
||||
chat registration. The additional T6 controls are only held while AFK; `.back`
|
||||
@@ -164,10 +190,11 @@ command regressions. Compiler success does not certify runtime linking.
|
||||
|
||||
Live checks after deploying:
|
||||
|
||||
1. Join, late-join, die/respawn, and reconnect: one core per player, fixed
|
||||
upper-right position, spectator placeholders without an early clock start,
|
||||
visible full/damaged HP, health/Juggernog changes, zombies remaining, and
|
||||
timers frozen at game over. Test safe-area settings and different resolutions.
|
||||
1. Join, late-join, die/respawn, and reconnect: one unboxed core per player,
|
||||
upper-left timers, top-center branding, bottom-center zombies/health and
|
||||
spectator placeholders without an early clock start. Check damage-only HP,
|
||||
health/Juggernog changes, AFK placement and timers frozen at game over.
|
||||
Test safe-area settings and different resolutions against stock HUD elements.
|
||||
2. `.afk` blocks movement, shooting and grenades; `.back` restores them. Try rapid
|
||||
toggles, a round transition, death/respawn and game over.
|
||||
3. Lock fires at the threshold and clears on game over/restart. HUD must be installed.
|
||||
@@ -176,20 +203,26 @@ Live checks after deploying:
|
||||
endpoint. Check server ID/player count, same-round joins and an unreachable API.
|
||||
5. Repeat on the actual server maps, especially afterlife and special-enemy rounds.
|
||||
6. Type `.help`, `.HELP` and `.commands` before first spawn, during play and
|
||||
while AFK: four commands per page, only on the requesting player's screen,
|
||||
without moving or resizing the core. Verify 12 seconds per page and dismissal
|
||||
after the final page; repeat on page two to restart page one. Remove optional
|
||||
modules and restart the map to confirm their commands are absent. Restore
|
||||
the modules and confirm their command behavior is unchanged.
|
||||
while AFK: one page of nine commands with all modules installed, full bank
|
||||
syntax and no page counter, only on the requesting player's screen. Verify
|
||||
dismissal after 12 seconds and repeat-to-restart behavior. Add custom
|
||||
registered commands to exercise the nine-row page limit and page counter.
|
||||
Remove optional modules and restart the map to confirm their commands are
|
||||
absent. Restore them and confirm command behavior is unchanged.
|
||||
7. Interrupt a record with help and check that its remaining page time resumes.
|
||||
Repeat `.leaders` during help; only the latest replay should start from page
|
||||
one after help closes. Check long names across pages, no records and
|
||||
unavailable records. Reopen after expiry, disconnect/reconnect and end the
|
||||
game during a service; verify no duplicates or leftovers. Repeat without HUD.
|
||||
8. Toggle `.hud` before spawning, while playing/AFK and after game over. Verify
|
||||
the core and AFK indicator hide privately while help/records remain visible.
|
||||
Show it after taking damage or changing AFK state while hidden: current
|
||||
values and intended alpha should return. Confirm updates continue hidden,
|
||||
death/respawn keeps the choice, and reconnect/map restart restores visibility.
|
||||
|
||||
The stock T6 [HUD initialization](https://raw.githubusercontent.com/plutoniummod/t6-scripts/main/ZM/Core/maps/mp/gametypes_zm/_hud.gsc)
|
||||
sets a nominal font height of 12; the corresponding
|
||||
[font helper](https://raw.githubusercontent.com/plutoniummod/t6-scripts/main/ZM/Core/maps/mp/gametypes_zm/_hud_util.gsc)
|
||||
uses `int(level.fontheight * fontscale)` for its height. The portable HUD checks
|
||||
use that nominal box to prevent holder-row and AFK-footer overlaps. Exact glyph
|
||||
extents and multiline spacing still need live validation, especially on T5.
|
||||
use that nominal box to prevent holder-row, help-row and AFK overlaps. Exact
|
||||
glyph extents still need live validation, especially on T5.
|
||||
|
||||
Reference in New Issue
Block a user