Files
tws-zombies-scripts/CHANGELOG.md
T

53 KiB
Raw Blame History

Changelog

Changes are listed newest first, with an independent version for every individual T5/T6 script and each native plugin. Current versions are recorded in versions.json; see the version policy.

2026-10-18

Add majority votes to lock and unlock the lobby

Component Version Affected source
tws_t5_lock.gsc 1.1.0 t5/scripts/tws_t5_lock.gsc
tws_t6_lock.gsc 1.1.0 t6/scripts/tws_t6_lock.gsc
  • Add exact, case-insensitive .lock (round 6 onward) and .unlock commands with help registration. Both need a strict majority of all connected players: 1/1, 2/2, 2/3, 3/4, or floor(players / 2) + 1 in larger lobbies. Solo requests apply immediately; dead, spectating and AFK connections count.
  • Use a 60-second ballot with one vote per connection, no extension on repeats, and fresh votes after expiry or state changes. Recount joins/disconnects; disconnected votes do not count, and reconnects do not inherit votes.
  • Retain the configurable automatic lock at round 20, consumed once per match. A successful unlock overrides it for the rest of the match, including after an early manual lock. Players can still vote to relock. Automatic locking clears any incomplete manual lock ballot. Generate a fresh password for each lock and clear it and pending votes at startup and HUD/stock game over.
  • Keep early locking optional: no round-6 prompt. Use ordinary message text for vote progress, expiry and state changes, with private duplicate/unavailable replies. Update help pagination coverage and both games' documentation.
  • Compatibility: no new dependency requirement. Keep the matching common 1.0.0+ and HUD 1.0.0+ modules installed; HUD still supplies round events. T5 and T6 receive matching behavior using their existing namespaces and initialization conventions. No common, HUD, native-plugin or upstream-pin source changes are needed.
  • Validation: 76 lock vote/lifecycle checks, 74 service HUD checks and 14 core HUD checks passed with engine shims. The T6 lock script compiled and assembled with upstream gsc-tool 8f1d6bd libraries. T5 has no gsc-tool backend; live Windows/Plutonium loading, message rendering and connection blocking still need validation on both engines. No native-plugin build or deployment was performed. See lock voting and live checks.
  • Deployment: copy the updated lock script for each installed game to its existing script directory and restart the map. No full server-process restart or additional deployment action is required for this script-only update.

2026-10-17

Allow solo and last-active-player AFK

Component Version Affected source
tws_t5_afk.gsc 2.1.0 t5/scripts/tws_t5_afk.gsc
tws_t6_afk.gsc 2.1.0 t6/scripts/tws_t6_afk.gsc
  • Remove the teammate requirement before reservation and after start authorization on both engines. Solo players, the last active player and players whose teammates are already AFK or awaiting authorization can enter.
  • Remove the AFK team watcher that ended matches when no non-AFK survivor remained. All players may be AFK together, and teammate death/disconnect does not cancel protection. Keep reserve accounting, the local deadline, cooldown, player-state checks and normal stock match-end settlement.
  • Compatibility: no new dependency requirement. Existing common 1.4.0+, telemetry 1.0.0+, matching plugin 1.4.0+, Plutonium r5334+, EC #151 and host agent 1.12.0+ requirements remain unchanged. T5 and T6 receive the same policy change using their existing engine-specific state checks.
  • Validation: 47 AFK script behavior checks passed, including solo entry, unavailable/pending teammates, teammate loss during authorization, all-AFK play, solo return/expiration and stock match-end cleanup. The changed T6 script compiled and assembled with upstream gsc-tool 8f1d6bd libraries. Portable checks use engine shims; live T5/T6 validation remains required. No Windows plugin build, live server test or deployment was performed.
  • Deployment: copy the updated AFK script for each installed game and restart the map. No full server-process restart or additional deployment action is required for this script-only update. See the AFK guide for the updated live validation cases.

Increase map-record reminders as players approach the target

Component Version Affected source
tws_t5_leaderboard.gsc 1.2.0 t5/scripts/tws_t5_leaderboard.gsc
tws_t6_leaderboard.gsc 1.2.0 t6/scripts/tws_t6_leaderboard.gsc
tws_t5_common.gsc 1.5.0 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.5.0 t6/scripts/tws_t6_common.gsc
  • Add matching T5/T6 round-start reminders using the latest usable cached map record. Show at gaps of 20, 15, 10, 8 and 6 rounds, then every round for the final five. Show matching/overtake milestones, then stop reminders after the first overtake for the rest of the match. Milestones distinguish reaching a round from saving the result after match completion; .leaders remains available. Listen to the stock start_of_round event so reminders follow the actual start, including on T6 where the counter advances during the round break. Ignore duplicate starts and counter rewinds within the match.
  • Common renders a compact record header and one proximity/milestone line for six seconds, using two nonarchived elements in the existing service area. Keep full join/.leaders announcements, all tied holders and 12-second pages. Skip pending or active help/records, unready players and recent welcome/manual record requests; opening help discards a reminder. Release elements on idle, interruption, disconnect and game end. Both games work without optional HUD.
  • Reuse the cache without round-triggered HTTP requests. Empty, unavailable or expired records suppress reminders; skipped reminders are not queued.
  • Compatibility: leaderboard 1.2.0 requires matching common 1.5.0+. There is no new native-plugin, backend or upstream dependency requirement. Unchanged HUD, AFK and other scripts retain their individual versions.
  • Validation: 169 leaderboard, 14 core HUD, 72 service HUD, 42 bank, 17 join, 23 telemetry and 39 AFK portable checks passed, as did both moderation script checks. All nine T6 scripts compiled/assembled with upstream gsc-tool 8f1d6bd libraries; the final changed common/leaderboard sources were rechecked after the event-timing fix. JSON uniqueness, all 18 script manifest entries, version/changelog consistency, local documentation links and git diff --check passed. Portable checks use engine shims; no live Plutonium validation or backend integration was performed. T5 has no gsc-tool compiler backend.
  • Deployment: copy the updated leaderboard and common scripts together for each installed game, then restart the map. No full server-process restart is required for this script-only update. No deployment performed. Live T5/T6 rendering, readiness and round-transition validation remain required; see record validation.

Persistent AFK reserve and immediate expiration (Refs #12)

Component Version Affected source
tws_t5_afk.gsc 2.0.0 t5/scripts/tws_t5_afk.gsc
tws_t6_afk.gsc 2.0.0 t6/scripts/tws_t6_afk.gsc
t5-plugin 1.4.0 src/component/afk.cpp, src/utils/afk.*
t6-plugin 1.4.0 src/component/afk.cpp, src/utils/afk.*
  • Replace unlimited AFK with shared GUID reserves, authenticated authorization, explicit bank purchase confirmation, real contribution rewards and durable request/session journals. Both engines use matching contracts and behavior.
  • Show an independent central countdown, final-minute urgency and audible warnings. Zero immediately releases AFK protection and owned controls/weapons. Manual .back retains its separate two-second grace; it cannot renew an AFK session. Reject downed activation (including T5), stock restrictions and last-active-player entry. End the match when only AFK players remain, respecting stock recovery.
  • Award each successful revive, including repeated revives of one teammate. Count kill/headshot events, round participation and active engagement without using score changes. EC owns configurable rates, caps, persistent progress and atomic bank conversion; no second points bank is introduced.
  • Compatibility: AFK 2.0.0 requires matching TWS plugin 1.4.0+ (native AFK API 1.0.0), common 1.4.0+, telemetry 1.0.0+, Plutonium r5334+ and the EC #151 endpoints. EC host agent 1.12.0+ must be deployed before activation. Existing private tws_bank_token and tws_server_id authenticate requests. There is no new upstream dependency pin or native loader plugin_version() requirement.
  • Deployment: deploy EC and upgraded host agents first; build/install both plugin DLLs and matching scripts, retain persistent tws-afk storage, then fully restart each game-server process. No deployment, Windows DLL build or live Plutonium validation is claimed. See AFK operation and validation.
  • Validation: both engines pass native AFK journal/adapter tests with ASan/UBSan, 39 AFK behavior checks, 14 core HUD and 56 service HUD checks. All nine T6 scripts compiled/assembled with upstream gsc-tool 8f1d6bd T6 PC compiler/assembler libraries. Script and integration checks are documented in the AFK guide; final in-game T5/T6 validation remains required. Unchanged common/HUD/bank/telemetry scripts retain their individual versions.

Center the complete zombie count above the health bar

Component Version Affected source
tws_t5_hud.gsc 1.4.2 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.4.2 t6/scripts/tws_t6_hud.gsc
  • Replace the separately positioned number and label with one center-aligned N ZOMBIES readout at the health track's midpoint in both engines. Use a uniform font scale of 1.25 and the existing count color; digit changes and the initial -- ZOMBIES placeholder share the same center.
  • Update text only when the count changes using SetTextUnlimited, avoiding a new config string for each distinct count. Keep counting, .hud visibility, game-over termination and disconnect cleanup behavior. Core HUD allocation decreases from 11 to 10 archived elements; AFK still adds one.
  • Compatibility: HUD 1.4.2 requires matching common 1.4.0+ and Plutonium r5334+, which provides SetTextUnlimited for T5 and T6. No new plugin or backend requirement. Common and AFK need no source change for this fix; both HUD scripts change.
  • Validation: 73 HUD checks passed, including digit transitions, a non-default track midpoint, unchanged-count polling, hidden updates and service cleanup. Leaderboard (143), bank (42), join (17) and telemetry (23) portable checks passed. These use engine shims; actual EC integration and live Plutonium validation were not run. GSC compilation was unavailable because gsc-tool and PowerShell are not installed. Verify rendering on Windows/Plutonium.
  • Deployment: copy each updated HUD script and restart the map on r5334+. Older installations must first update Plutonium on clients and servers and fully restart those processes. No full server-process restart is required for the script update alone. No deployment performed.

Use ASCII separators in HUD branding and map records

Component Version Affected source
tws_t5_common.gsc 1.4.1 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.4.1 t6/scripts/tws_t6_common.gsc
tws_t5_hud.gsc 1.4.1 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.4.1 t6/scripts/tws_t6_hud.gsc
  • Replace the middle dot with an ASCII vertical bar in the top-center branding and map-record heading after the separator displayed as two dots on T5. Apply the same text change to T6 for a consistent appearance. Keep existing spacing, positioning and HUD/service behavior.
  • Compatibility: no new dependency requirement. No native-plugin, backend or other script changes are required.
  • Validation: 71 HUD, 143 leaderboard, 42 bank, 17 join and 23 telemetry portable checks passed. These use engine shims; actual EC bank integration, GSC compilation and live Windows/Plutonium validation were not performed.
  • Deployment: copy the updated common and HUD scripts for each installed game, then restart the map. No full server-process restart is required. No deployment performed; live Windows/Plutonium rendering validation remains outstanding.

2026-10-15 — Player moderation runtime

  • tws_t5_moderation.gsc 1.0.0 / tws_t6_moderation.gsc 1.0.0: new optional paired scripts register current GUIDs and use the existing shared connection dispatcher. Require common 1.2.0, the matching native plugin 1.3.0, and Electric Cherry's instance-authenticated moderation endpoint/private configuration.
  • t5-plugin 1.3.0 / t6-plugin 1.3.0: add the native moderation component and policy/journal utilities, connection-bound synchronous actions, durable cached bans/mutes and expiry/revocation, and an opt-in bounded HTTP response limit. Existing HTTP callers keep their previous limit behavior. Sources are each plugin's component/moderation.cpp, utils/moderation., and utils/http.. Both games change for matching functionality; their chat opcodes remain distinct.
  • Deploy the receiver first; build and install both matching DLL/script pairs, supply separate instance credentials, and fully restart game-server processes. Persistent tws-moderation directories must survive restart. No deployment or live Windows/Plutonium verification is claimed. See runtime contract and validation.
  • Validation: paired native moderation policy/adapter checks passed with ASan and UBSan, including separate-process journal and session-sequence recovery. The GSC identity and retry/disable/resume checks, native HTTP cap/error checks, existing HTTP component, bank and telemetry checks, metadata/link validation, and git diff --check passed. Native adapter tests use engine shims; no DLL build, GSC compilation or live game validation was performed.

2026-10-15

Replace the dashboard panels with unboxed HUD overlays

Component Version Affected source
tws_t5_common.gsc 1.4.0 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.4.0 t6/scripts/tws_t6_common.gsc
tws_t5_hud.gsc 1.4.0 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.4.0 t6/scripts/tws_t6_hud.gsc
tws_t5_afk.gsc 1.2.0 t5/scripts/tws_t5_afk.gsc
tws_t6_afk.gsc 1.2.0 t6/scripts/tws_t6_afk.gsc
  • Both games use the supplied minimal layout: unlabeled match/round timers at upper left, combined branding at top center, zombies above a slim health bar at bottom center, and numeric current/maximum HP to its right only while injured. Center the AFK indicator above the zombie count. Remove dashboard backgrounds while retaining outlined text and health colors.
  • Keep .hud as a private visibility toggle for the entire core and AFK indicator. Hidden data updates, frozen game-over values, connection/spawn lifecycle, AFK protection and stock HUD behavior are unchanged.
  • Move services into an unboxed upper-right area below the Plutonium tag. Records use a compact right-aligned Map record · Round N header and up to three existing bounded holder lines, with no footer or single-page counter. Record data, cache behavior, all tied holders and 12-second paging remain unchanged; leaderboard source and versions are unchanged.
  • Show all nine installed commands, including .hud, in one help list with full .d <amount|all> / .w <amount|all> syntax. Both engines use explicit command/description rows; extra registrations use pages of nine, with a counter only for multi-page lists. Preserve private requests, help priority, record pause/resume, replay replacement and 12-second page timing.
  • Allocate only the active service view in both engines and destroy it when idle or before switching kinds. Core + AFK use 11 + 1 archived elements; nine-command help uses 19 nonarchived elements (20 with a multi-page counter), and records use four (five with a multi-page counter). Idle holds none. These counts do not establish live Plutonium rendering capacity.
  • Common adds fullscreen overlay helpers using direct normalized 640 × 480 positions and integer shader dimensions. Retain legacy panel helpers for compatibility. Both HUD and AFK implementations use the new helpers.
  • Validation: node tools/check_hud.mjs passed 15 core HUD/AFK and 56 service/ static checks (71 total). Leaderboard passed 143 checks, bank 42, join 17 and telemetry 23 through their portable check scripts. JSON uniqueness, the 16-script manifest, all six version/changelog matches, 66 local documentation links/anchors and git diff --check passed. Checks use engine shims; actual EC bank integration was not run. GSC compilation was not run because gsc-tool/PowerShell are unavailable; live Windows/Plutonium validation remains outstanding.
  • Compatibility: HUD 1.4.0 and AFK 1.2.0 require matching common 1.4.0+. Both engines receive companion changes; leaderboard 1.1.0 remains compatible. No new Plutonium, native-plugin or backend requirement.
  • Deployment: copy each game's common, HUD and AFK scripts together where installed, then restart the map. No full server-process restart or plugin update is required. No deployment performed. Windows/Plutonium layout, element capacity, stock HUD overlap and lifecycle validation remain required.

2026-10-14

Release T5 service elements when records or help close

Component Version Affected source
tws_t5_common.gsc 1.3.1 t5/scripts/tws_t5_common.gsc
  • Address core HUD elements disappearing when the first record announcement opens and remaining absent after it closes. The previous T5 service allocated all 24 help/record elements at once and retained them while idle. That pattern is consistent with HUD allocation pressure; the live T5 SP capacity has not been established.
  • Allocate only the active service view, with at most 12 elements for help or 11 for records. Release the elements when the service becomes idle and before switching between help and records. Reuse them for pages within the same view, and render the page indicator as one cached text element. The single controller, help priority, paused record timing and request replacement remain intact. Core elements and their visibility setting are unchanged.
  • T6 needs no source change: the reported failure is on T5, whose explicit help rows expanded its former allocation to 24 elements. T6 retains its smaller 18-element multiline renderer; validate its existing behavior separately.
  • Validation: node tools/check_hud.mjs passed 15 core HUD/AFK and 53 service/ static checks (68 total), including active-view allocation, idle release, repeated service cycles and core preservation. Leaderboard passed 143 checks, bank 42, join 17 and telemetry 23 through their portable check scripts. These use engine shims; actual EC bank integration was not run. Live Windows/ Plutonium rendering validation was not performed.
  • Compatibility: HUD 1.3.0, AFK 1.1.0 and leaderboard 1.1.0 remain compatible. No new dependency requirement. Deployment: copy only tws_t5_common.gsc and restart the map. No plugin update or full server-process restart is required. No deployment performed; live T5 validation must confirm core integrity during automatic records, help, view switches and dismissal.

Add a per-player HUD visibility command

Component Version Affected source
tws_t5_common.gsc 1.3.0 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.3.0 t6/scripts/tws_t6_common.gsc
tws_t5_hud.gsc 1.3.0 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.3.0 t6/scripts/tws_t6_hud.gsc
tws_t5_afk.gsc 1.1.0 t5/scripts/tws_t5_afk.gsc
tws_t6_afk.gsc 1.1.0 t6/scripts/tws_t6_afk.gsc
  • Both HUD modules handle the exact, case-insensitive .hud chat command to toggle that player's core branding, timers, zombie count, HP/bar and AFK indicator. Visibility defaults on, persists across death/respawn on the current connection/map, and resets on reconnect or map restart.
  • Common tracks core elements and their intended alpha values so changing visibility preserves each element's state. Data and timers continue updating while hidden, and game-over values remain frozen. AFK routes only its indicator visibility through these helpers; protection behavior is unchanged. Help, records and stock HUD elements are unaffected.
  • Register .hud in help only when the HUD module is installed. The full command order is .help, .hud, .afk, .back, .join, .leaders, .b, .d, .w: nine commands across pages of four, four and one. T5 retains explicit help rows; T6 retains multiline columns.
  • Compatibility: HUD 1.3.0 and AFK 1.1.0 require their matching common 1.3.0+. Both engines receive companion implementations. No new Plutonium, native-plugin or backend dependency requirement.
  • Deployment: update each game's common, HUD and AFK scripts together where installed, then restart the map. No plugin update or full server-process restart is required. No deployment performed; GSC compilation and live T5/T6 validation remain required.
  • Validation: node tools/check_hud.mjs passed 15 core HUD/AFK and 48 service/ static checks (63 total), covering private visibility, intended opacity, late-created elements, hidden updates/frozen clocks, AFK transitions, service independence, conditional help and three-page ordering. Leaderboard passed 143 checks, bank 42, join 17 and telemetry 23 through their existing portable check scripts. These use engine shims; actual EC bank integration was not run. GSC compiler and PowerShell were unavailable, and live Windows/Plutonium validation was not performed.

Render T5 help as separate rows

Component Version Affected source
tws_t5_common.gsc 1.2.6 t5/scripts/tws_t5_common.gsc
  • Replace T5's newline-separated help columns with four preallocated command/description pairs, positioned on separate rows. This addresses BO1 rendering the newline text as one concatenated line. Reuse the row elements across pages and hide unused rows on short pages.
  • Preserve panel dimensions, four commands per page, 12-second timing and the removed help footer. T5's service now uses 24 nonarchived HUD elements. T6 needs no source change: its existing multiline renderer remains in place with 18 service elements; the reported rendering issue was observed in T5.
  • Validation: node tools/check_hud.mjs passed 8 core and 42 service checks (50 total), covering both engines' pagination and T5's distinct row elements, partial-page hiding, reuse, record transitions and disconnect cleanup. GSC compilation and live T5 display/notification validation were not run.
  • Compatibility: existing HUD 1.2.1 remains compatible; no new dependency requirement. Deployment: copy only the updated T5 common script and restart the map. No plugin update or full server-process restart is required. No deployment performed; live T5 display validation remains required.
Component Version Affected source
tws_t5_common.gsc 1.2.5 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.5 t6/scripts/tws_t6_common.gsc
  • Both games remove the Four commands per page footer and its HUD element. Help still displays four commands per page with its page indicator and existing timing. The shared service now uses 18 nonarchived elements.
  • Validation: node tools/check_hud.mjs passed 8 core and 41 service checks (49 total), including the 18-element allocation and removed help footer. GSC compilation and live Plutonium validation were not run.
  • Compatibility: existing HUD 1.2.1 remains compatible; no new dependency requirement. Deployment: copy only each game's updated common script and restart the map. No plugin update or full server-process restart is required. No deployment performed; live T5/T6 display validation remains required.

Hide the page indicator for single-page records

Component Version Affected source
tws_t5_common.gsc 1.2.4 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.4 t6/scripts/tws_t6_common.gsc
  • Both games hide 1 / 1 when the record service has only one page. Records spanning multiple pages and all help pages retain their page indicators.
  • Validation: node tools/check_hud.mjs passed 8 core and 41 service checks (49 total), including empty/unavailable records, multi-page indicators, replacement by a single-page record, resuming after help, and single-page help indicators. GSC compilation and live Plutonium validation were not run.
  • Compatibility: existing HUD 1.2.1 remains compatible; no new dependency requirement. Deployment: copy only each game's updated common script and restart the map. No plugin update or full server-process restart is required. No deployment performed; live T5/T6 display validation remains required.

Restore panel backgrounds and health bars

Component Version Affected source
tws_t5_common.gsc 1.2.3 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.3 t6/scripts/tws_t6_common.gsc
  • Both engines apply the final integer conversion after max() in make_panel_width(). Native max() returns a float, which SetShader rejects for its integer width argument; converting before max() left backgrounds and health-bar shaders missing. The corrected helper supplies integer widths to both panel creation and health-bar updates.
  • Retain panel color (0.07, 0.10, 0.08), opacity 0.72, and the corrected text positions/font sizes. HUD source is unchanged and remains 1.2.1.
  • Validation: node tools/check_hud.mjs passed 8 core and 41 service checks (49 total). The new regression models native float typing and strict integer shader widths, and checks the existing panel color/opacity. GSC compiler and PowerShell were unavailable; GSC compilation and live Windows/Plutonium display validation were not performed.
  • Compatibility: use matching common 1.2.3+ with HUD 1.2.1; no new Plutonium, native-plugin or backend dependency requirement. Deployment: if HUD 1.2.1 is already installed, copy only each game's updated common script and restart the map. No plugin update or full server-process restart is required. No deployment performed; verify restored shaders in T5 and T6.
Component Version Affected source
tws_t5_common.gsc 1.2.2 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.2 t6/scripts/tws_t6_common.gsc
tws_t5_hud.gsc 1.2.1 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.2.1 t6/scripts/tws_t6_hud.gsc
  • Both engines enforce a minimum text font scale of 1.0, with both service footers explicitly at 1.0, addressing the oversized .leaders footer.
  • Use fullscreen horizontal and vertical anchors so panels follow the actual upper-right screen edge instead of safe-area insets. Convert horizontal design offsets and shader widths by 0.75 into the normalized 640-wide viewport; use a top offset of 20. The 1920×1080 reference yields a 495-pixel panel, 22.5-pixel right margin and 45-pixel top margin, leaving space for the Plutonium tag. Other aspect ratios retain normalized horizontal geometry, so physical proportions vary; live font fit and tag clearance need validation.
  • Both HUD scripts use common's new make_panel_width(width) for health-bar updates so the fill uses the same width conversion as its track. T5 and T6 receive the same fix with their matching namespaces.
  • Compatibility: HUD 1.2.1 requires matching common 1.2.2+; upgrade common and HUD together. No new Plutonium, native-plugin or backend dependency is required.
  • Deployment: copy each game's updated common and HUD scripts and restart the map. No full server-process restart is required. No deployment performed; GSC compilation and live Windows/Plutonium display validation remain required.
  • Validation: node tools/check_hud.mjs passed 8 core and 39 service/static geometry checks (47 total); node tools/check_leaderboard.mjs passed 143 checks. The geometry shims cover 4:3, 16:9 and ultrawide bounds in a normalized 640×480 frame, not live glyph fit or tag clearance. GSC compiler and PowerShell were unavailable; no GSC compilation or live display validation was performed.
Component Version Affected source
tws_t5_common.gsc 1.2.1 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.1 t6/scripts/tws_t6_common.gsc
  • Both games remove Briefly shown and its separator from the map-record footer, retaining .leaders to view again. Record timing and replay behavior are unchanged.
  • Validation: node tools/check_hud.mjs passed 8 core and 35 service checks using engine shims. GSC compilation and live Plutonium display validation were not run.
  • Compatibility: no new dependency requirement. Deployment: copy each game's updated common script and restart the map. No plugin update or full server-process restart is required. No deployment performed; GSC compilation and live T5/T6 display validation remain required.

Fixed upper-right core HUD and shared service window

Component Version Affected source
tws_t5_common.gsc 1.2.0 t5/scripts/tws_t5_common.gsc
tws_t6_common.gsc 1.2.0 t6/scripts/tws_t6_common.gsc
tws_t5_hud.gsc 1.2.0 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.2.0 t6/scripts/tws_t6_hud.gsc
tws_t5_leaderboard.gsc 1.1.0 t5/scripts/tws_t5_leaderboard.gsc
tws_t6_leaderboard.gsc 1.1.0 t6/scripts/tws_t6_leaderboard.gsc
tws_t5_afk.gsc 1.0.1 t5/scripts/tws_t5_afk.gsc
tws_t6_afk.gsc 1.0.1 t6/scripts/tws_t6_afk.gsc
  • Both engines use a fixed upper-right core panel below the top edge, with TWS ZOMBIES, discord.tws.lol, side-by-side match/round timers, zombie count, current/maximum HP even at full health, and a full-width health bar. Replace the co-op name row with reserved footer space for the AFK indicator. Core creation on connection supports spectator placeholders without seeding the match clock early. Preserve each engine's timer behavior and frozen clocks at game end; health and zombie-count workers now freeze on both engines as well. Missing max-health values use a display fallback without modifying gameplay health.
  • Common owns one fixed-height service window below the core. Help shows four commands per page for 12 seconds each, in stable order and filtered by loaded modules. .help / .commands restart at page one. The final page dismisses automatically; opening a service never shifts or resizes the core.
  • Render help with two fixed multiline text columns and a muted command-column backdrop. The service uses 19 nonarchived HUD elements regardless of command or page count; the core and AFK use 15 + 1 archived elements. Reuse text and numeric displays instead of allocating elements for every command/page.
  • Records use the same window, with a prominent round, page count, replay hint, and up to three holder lines per page. Abbreviate overlong individual names without splitting UTF-8 characters; retain every tied holder across bounded lines and pages. Help pauses records and resumes their remaining page time; .leaders during help replaces the pending record from page one. Unavailable records are distinct from an empty recorded history. Help and records remain private and work without the HUD module. Reused elements and request state protect newer displays from stale timers and clean up on disconnect/game end.
  • Compatibility: HUD 1.2.0, leaderboard 1.1.0, and AFK 1.0.1 require the matching game's common 1.2.0+. Existing common helper signatures remain available for unchanged consumers. No new native-plugin, backend or external dependency requirement; existing leaderboard HTTP/JSON requirements still apply. Both T5 and T6 receive companion implementations adapted to their engines.
  • Deployment: copy each game's matching common, HUD, leaderboard and AFK scripts that are installed, then restart the map. No plugin update or full server-process restart is required for this change. No deployment performed.
  • Validation: node tools/check_hud.mjs passed 8 core and 35 service checks; node tools/check_leaderboard.mjs passed 143 checks, node tools/check_bank.mjs passed 42 fixture groups, node tools/check_join.mjs passed 17 checks, and node tools/check_telemetry.mjs passed 23 checks. These use engine shims. No local GSC compiler or PowerShell was available; GSC compilation and live Windows/Plutonium validation remain required. Follow the HUD validation guide before rollout.

2026-10-13

Shorter Discord URL

Component Version Affected source
tws_t5_hud.gsc 1.1.2 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.1.2 t6/scripts/tws_t6_hud.gsc
  • Both games replace the displayed Discord URL with https://discord.tws.lol. Keep the smaller font and muted gray introduced in the already-uploaded 1.1.1 release.
  • Compatibility: no new dependency requirement; matching common 1.1.0+ remains required. Deployment: copy each updated HUD script and restart the map. No plugin update or full server-process restart is required. No deployment of 1.1.2 performed here; GSC compilation and live T5/T6 display verification remain required.

More subtle Discord label

Component Version Affected source
tws_t5_hud.gsc 1.1.1 t5/scripts/tws_t5_hud.gsc
tws_t6_hud.gsc 1.1.1 t6/scripts/tws_t6_hud.gsc
  • Both games reduce the top-left Discord URL font scale from 1.4 to 1.2 and darken its neutral gray from (0.85, 0.85, 0.85) to (0.65, 0.65, 0.65). The label keeps its position and connection lifetime; other HUD text is unaffected.
  • Compatibility: no new dependency requirement; matching common 1.1.0+ remains required. Deployment: copy each updated HUD script and restart the map. No plugin update or full server-process restart is required. The user reports 1.1.1 has been uploaded; GSC compilation and live T5/T6 appearance verification have not been performed here.

Simplified bank balance message

Component Version Affected source
tws_t5_bank.gsc 2.0.3 t5/scripts/tws_t5_bank.gsc
tws_t6_bank.gsc 2.0.3 t6/scripts/tws_t6_bank.gsc
  • Both games now display .b as Bank: {balance} points, retaining the existing colors and omitting the available amount. Update startup version reporting and the existing balance-message fixtures. API data and point accounting are unchanged.
  • Validation: all 42 portable bank script fixture groups passed with node tools/check_bank.mjs, including exact balance text for both games.
  • Compatibility: no new dependency requirement; matching TWS plugins 1.2.0+ remain required. Deployment: copy each updated bank script and restart the map. No plugin update or full server-process restart is required for this change. No deployment performed; GSC compilation and live T5/T6 display verification remain required.

Bank failure diagnostics — TWS #14

Component Version Affected source
tws_t5_bank.gsc 2.0.2 t5/scripts/tws_t5_bank.gsc
tws_t6_bank.gsc 2.0.2 t6/scripts/tws_t6_bank.gsc
t5-plugin 1.2.0 t5/plugins/tws-t5-gsc-utils/src/component/bank.cpp, src/utils/bank.cpp, src/utils/bank.hpp
t6-plugin 1.2.0 t6/plugins/tws-t6-gsc-utils/src/component/bank.cpp, src/utils/bank.cpp, src/utils/bank.hpp
  • Both engines log startup script/loaded TWS plugin versions, effective endpoint, safe server identity, credential format validation and pending journal count. Add diagnostic correlation for every HTTP attempt without changing API IDs; balance requests keep their empty acknowledgment ID contract.
  • Distinguish creation, transport, HTTP, missing diagnostics, JSON/schema, response-ID and application failures, with safe HTTP/curl/timing fields. Native acknowledgment parsing adds fixed failure reasons without changing existing validity rules. Only known bounded response codes reach logs; never log credentials, headers, bodies or native exception contents.
  • Log journal load/write/removal failures and settlement decision, attempts, pending duration, next retry delay and resolution. Suppress identical failures for 30 seconds, report suppression counts, and log reason changes and recovery immediately. Recovered pending duration starts at this map's journal load. Preserve points, durable decisions, retry behavior and player-facing messages.
  • Compatibility: both scripts require matching plugin 1.2.0+ for the additive bankVersion() native and parser reason field. No new EC/agent or third-party dependency requirement; existing common/telemetry and migration requirements remain. Upstream pins and native loader plugin_version() are unchanged.
  • Deployment: build/install both DLLs and restart the full server processes; install matching scripts, restarting the map if copied after process startup. Verify installed DLL/GSC hashes against the release artifacts and startup version logs, particularly Ascension's reported stale GSC artifact. No deployment performed. Windows DLL builds, GSC compilation and live T5/T6 checks remain required; see bank diagnostics.
  • Validation: 44 portable script fixture groups passed, including actual EC bank service/SQLite integration at checkout d614707. Fixtures assert safe startup/outcome logs, missing diagnostics, HTTP 401, timeout, malformed/schema acknowledgments, ID mismatch, storage failures, rate limiting and recovery, alongside existing accounting/replay tests. Native parser/storage/process-restart and registration-adapter checks run with address/undefined-behavior sanitizers.

2026-10-12

String bank identities — TWS #15

Component Version Affected source
tws_t5_bank.gsc 2.0.1 t5/scripts/tws_t5_bank.gsc
tws_t6_bank.gsc 2.0.1 t6/scripts/tws_t6_bank.gsc
  • Normalize T5's player getGuid() and T6's persistent player.guid to strings before balance/prepare requests or durable cancel/commit decisions. Preserve large and zero-prefixed string GUIDs without numeric conversion. Reject missing, unsupported or invalid identities privately before HTTP, journaling or score changes, using EC's 1–64 character token contract.
  • Both engines receive the fix. T6 uses the same field as telemetry, populated by stock connection initialization; fixtures no longer give T6 a getter shim. Other scripts and native plugins are unchanged.
  • Checks: node tools/check_bank.mjs covers numeric/string/missing identities, balance, prepare, both decisions and exact-body replay after restart. Its optional --ec-root mode executes the actual EC bank service and bank migrations against isolated SQLite, covering the original numeric rejection, deposits, withdrawals, zero-balance .w all, cancellation and idempotent commit recovery. All 34 fixture groups passed with EC checkout d614707; python3 tools/test_plugin_bank.py also passed both engines' native storage/response, process-restart and component checks with sanitizers.
  • Compatibility: no new dependency requirement or EC source change. Existing plugins 1.1.0, common/telemetry 1.0.0+, and EC agent 1.9.1+ remain sufficient. Deployment: copy each updated bank script to its game's script directory and restart the map; no full server-process restart is required for this fix. Continue following the endpoint migration procedure if also upgrading from a legacy URL.
  • This fix prevents new invalid journals; it does not rewrite old pending decisions. No production recovery or deployment was performed as part of this change. GSC compilation, deployed-artifact verification and live T5/T6 command checks remain required; see bank identity validation.

Public game-bank endpoint — TWS #13

Component Version Affected source
tws_t5_bank.gsc 2.0.0 t5/scripts/tws_t5_bank.gsc
tws_t6_bank.gsc 2.0.0 t6/scripts/tws_t6_bank.gsc
  • Use https://ec.thewrightserver.net/api/bank for all balance, transfer and settlement requests on both engines. Remove the tws_bank_url override; stale settings are ignored. This configuration removal requires a major bump. Keep EC's tws_server_id and private per-instance tws_bank_token authentication.
  • Both T5 and T6 receive the same behavior with their existing namespaces and startup guards. Native plugins and other scripts need no source changes.
  • Compatibility: requires companion EC agent 1.9.1+ to recognize public and legacy controller-derived journals during authenticated teardown settlement. Existing plugin 1.1.0, common 1.0.0+ and telemetry 1.0.0+ remain sufficient; no new native API or third-party dependency requirement.
  • Deployment: update agents first. When changing endpoints, rebuild through EC so the old process stops and its pending decisions settle before a new process starts. Do not switch scripts with just a map restart in that case; journals are endpoint-scoped. If the old URL already matches exactly, copy the scripts and restart the map; no full server-process restart is required. See endpoint upgrade and recovery. No deployment was performed; agent release signing, Windows/GSC compilation and live T5/T6 validation remain required.
  • Checks: portable script fixtures exercise real initialization with stale overrides, every request type, authentication, empty balances and retries. Native fixtures cover zero-balance and insufficient-balance replies alongside existing durable storage and process-restart checks.

Persistent cross-game player bank — TWS #3 / Electric Cherry #146

Component Version Affected source
tws_t5_bank.gsc 1.0.0 New t5/scripts/tws_t5_bank.gsc
tws_t6_bank.gsc 1.0.0 New t6/scripts/tws_t6_bank.gsc
t5-plugin 1.1.0 t5/plugins/tws-t5-gsc-utils/src/component/bank.cpp, src/utils/bank.cpp, src/utils/bank.hpp
t6-plugin 1.1.0 t6/plugins/tws-t6-gsc-utils/src/component/bank.cpp, src/utils/bank.cpp, src/utils/bank.hpp
  • Add .b, .d <amount|all> and .w <amount|all> plus help registration on both engines. Store shared GUID balances and ledger history through Electric Cherry's authenticated bank API. EC generates and injects a private token per immutable server instance, preserving it on rebuild/move and revoking it on retirement. No manual token map is required; the shared telemetry token does not authorize bank operations.
  • Add native bankLoad, bankStore, bankRemove and bankResponse helpers. Save cancellation before preparing a transfer, replace it with a commit decision before applying points without yielding, and replay settlement after map/process restarts. Invalid replies, insufficient funds, changed player state, and failed journal writes leave spendable points unchanged. Preserve earned score_total; applied withdrawals belong to the current match.
  • T5 and T6 receive equivalent behavior with their own namespaces, last-stand APIs, entry points and journal directories. Other scripts are unchanged; existing common help registration and telemetry match keys already suffice.
  • Compatibility: deploy Electric Cherry #146 first, then each game's plugin 1.1.0 and bank script 1.0.0, with common and telemetry 1.0.0 or newer. EC host agents 1.9.0+ settle pending journals before destructive teardown. No new third-party dependency, upstream pin, or loader version requirement. Keep tws-bank/<game>/ on persistent writable storage; preserve pending journals when rotating credentials or restarting servers.
  • Deployment: build/install both Windows x86 DLLs and restart the full server processes, then install the new bank scripts and create/rebuild through EC to inject private credentials. Restart maps after script changes. See bank setup and recovery. No deployment was performed. Windows DLL linking, GSC compilation and live Plutonium checks remain required.
  • Checks: node tools/check_bank.mjs exercises the actual transfer functions; python3 tools/test_plugin_bank.py checks native journals, response validation, failed writes and process recovery with sanitizers. The T6 compiler check now includes all eight modules.

T6 newcomer join eligibility — tws_t6_join.gsc 1.0.1

  • Fix t6/scripts/tws_t6_join.gsc treating the initial T6 setup spawn as gameplay, which rejected a new spectator's .join on Farm Survival round 3. Wait for the stock delayed spectator transition, then record actual play. Continue observing later spawns so waiting for the next round cannot grant an extra life after death. Reject requests while a spawn is settling; a real death during that window also permanently closes eligibility.
  • T5 is unchanged: its separate SP spawn flow and self.initialized guard do not use T6's delayed game-mode spectator transition.
  • Compatibility: existing T6 common 1.0.0 or later; no new dependency requirement. Deploy the updated join script to storage/t6/scripts/zm/ and restart the map. No full server-process restart is required.
  • Portable regression fixtures: node tools/check_join.mjs. Compilation and live Plutonium validation remain required; no deployment was performed.

Persistent top-left Discord URL

Script Version Affected source
tws_t5_hud.gsc 1.1.0 t5/scripts/tws_t5_hud.gsc
tws_t5_common.gsc 1.1.0 t5/scripts/tws_t5_common.gsc
tws_t6_hud.gsc 1.1.0 t6/scripts/tws_t6_hud.gsc
tws_t6_common.gsc 1.1.0 t6/scripts/tws_t6_common.gsc
  • Add https://discord.thewrightserver.net as a small, light-gray top-left HUD label, created once per connection, including spectator newcomers. It has no expiry or death/respawn reset and is cleaned up on disconnect. Move the gameplay stack down 20 HUD units to leave room above the timers; help and record positioning follow the shared layout automatically.
  • Both engines receive the feature using their existing HUD anchors: T5 left/top safe-area alignment and T6 fullscreen alignment.
  • Compatibility: deploy each game's HUD and common 1.1.0 together for the reserved top line. No new native plugin or external dependency requirement. Other scripts and both plugins retain their existing versions.
  • Deployment: copy the updated HUD and common scripts to storage/t5/scripts/sp/ or storage/t6/scripts/zm/, respectively, and restart the map. No full server-process restart is required. No deployment has been performed here.
  • Live validation remains required on both Plutonium games: check placement and readability, join as a spectator, die/respawn, reconnect, and open help and records to verify spacing and that only one URL label appears.

Initial versioning baseline

Established independent version 1.0.0 entries for each of the 14 scripts and both plugins from source commit b508b6739b185d5048e8a8f96ccb16e429f1d37a. This records the existing source state; earlier changes remain in Git history without retroactively assigned versions. The baseline introduces versions.json, this changelog, the README links and version policy, and the maintenance rules in AGENTS.md. It changes no game script or plugin behavior and requires no deployment by itself.

The component entries below summarize the existing functionality and deployment requirements for servers adopting this baseline. Version assignment does not indicate that a Windows build, live-game validation, or deployment was performed.

T5 script baselines

Each row is a separately versioned script under t5/scripts/.

Script Version Existing functionality
tws_t5_afk.gsc 1.0.0 AFK toggle, protection, and indicator
tws_t5_common.gsc 1.0.0 Shared configuration, helpers, commands, and player dispatchers
tws_t5_hud.gsc 1.0.0 Timers, zombie count, and health display
tws_t5_join.gsc 1.0.0 Immediate join for newcomers
tws_t5_leaderboard.gsc 1.0.0 Map record announcements and .leaders command
tws_t5_lock.gsc 1.0.0 Lobby lock at the configured round milestone
tws_t5_telemetry.gsc 1.0.0 Game reports, durable boundary retries, balance and cumulative score
  • Compatibility: these initial script versions use tws_t5_common.gsc 1.0.0; lobby lock also needs tws_t5_hud.gsc 1.0.0. Telemetry and leaderboard use TWS T5 plugin 1.0.0. Telemetry additionally requires Electric Cherry's match/sequence deduplication and score_total support; follow the receiver and plugin rollout order. Disabling telemetry by dvar does not remove its native linking requirements.
  • Deployment: follow the T5 installation/upgrade instructions, copy the desired scripts and their required dependencies to storage/t5/scripts/sp/, and restart the map. Installing or updating the required plugin needs a full server-process restart.

T6 script baselines

Each row is a separately versioned script under t6/scripts/, adapted to T6 APIs and map variants.

Script Version Existing functionality
tws_t6_afk.gsc 1.0.0 AFK toggle, protection, and indicator
tws_t6_common.gsc 1.0.0 Shared configuration, helpers, commands, and player dispatchers
tws_t6_hud.gsc 1.0.0 Timers, zombie count, and health display
tws_t6_join.gsc 1.0.0 Immediate join for newcomers
tws_t6_leaderboard.gsc 1.0.0 Map record announcements and .leaders command
tws_t6_lock.gsc 1.0.0 Lobby lock at the configured round milestone
tws_t6_telemetry.gsc 1.0.0 Game reports, durable boundary retries, balance and cumulative score
  • Compatibility: these initial script versions use tws_t6_common.gsc 1.0.0; lobby lock also needs tws_t6_hud.gsc 1.0.0. Telemetry and leaderboard use TWS T6 plugin 1.0.0. Telemetry additionally requires Electric Cherry's match/sequence deduplication and score_total support; follow the receiver and plugin rollout order. Disabling telemetry by dvar does not remove its native linking requirements.
  • Deployment: follow the T6 installation instructions, copy the desired scripts and their required dependencies to storage/t6/scripts/zm/, and restart the map. Installing or updating the required plugin needs a full server-process restart.

T5 plugin — 1.0.0

  • Baseline: the TWS-maintained plugin, including configurable HTTP deadlines, status/timing diagnostics, and durable telemetry storage and response helpers.
  • Source covered: t5/plugins/tws-t5-gsc-utils/ and the existing shared plugin build/dependency tooling under tools/.
  • Compatibility: provides the native functions used by tws_t5_telemetry.gsc 1.0.0 and tws_t5_leaderboard.gsc 1.0.0. Upstream source and dependency pins remain in the plugin's upstream.json. Upstream binary downloads do not include these TWS changes.
  • Deployment: build the x86 DLL on Windows, install tws-t5-gsc-utils.dll in Plutonium/plugins/, remove the old upstream DLL if present, and restart the full server process before loading dependent scripts.

T6 plugin — 1.0.0

  • Baseline: the matching TWS T6 plugin with configurable HTTP deadlines, status/timing diagnostics, and durable telemetry storage and response helpers.
  • Source covered: t6/plugins/tws-t6-gsc-utils/ and the existing shared plugin build/dependency tooling under tools/.
  • Compatibility: provides the native functions used by tws_t6_telemetry.gsc 1.0.0 and tws_t6_leaderboard.gsc 1.0.0. Upstream source and dependency pins remain in the plugin's upstream.json. Upstream binary downloads do not include these TWS changes.
  • Deployment: build the x86 DLL on Windows, install tws-t6-gsc-utils.dll in Plutonium/plugins/, remove the old upstream DLL if present, and restart the full server process before loading dependent scripts.