Puck B1153 is here! This one is a big visual and quality-of-life pass. Goals now get the cinematic treatment with slow-motion replays and a celebration cam, the goalie crease is finally a protected zone, and the whole arena has been rebuilt under a unified shader for a cleaner, more consistent look. On top of that there's a mountain of HUD, menu, server and backend improvements. Here's the full changelog:
Gameplay
Goalie crease protection - the crease is now a protected zone. Body-to-body collisions inside it are filtered, and an intruding player shows as a transparent ghost. (Can be disabled per-server in public_game_mode_config.json.)
Casual votekicks are now decided by a whole-lobby majority.
Removed votekick from competitive mode due to abuse. I understand this is not a perfect solution; further iterations/solutions will come in the future.
The game clock now runs through 0:00 before a phase ends (the missing second is back!).
Trimmed the faceoff, replay, and goal scored phases by 1s so their total length stays the same after the clock change.
Match players are now notified of an auto-forfeit when every player on the opposing team leaves.
Raised the player spawn delay to 10 seconds.
Goal Celebrations
Goals now trigger a slow-motion replay as the puck crosses the line, with beat-blended timing.
The camera zooms in on the slow-mo beats, and a celebration cam follows the scorer after a goal.
The goal flash is now tinted to the scoring team's color.
Goal audio is muffled during the slow motion, though the goal horn still rings out.
Visuals & Cosmetics
Cosmetics
New Polymer line of stick skins.
Re-added missing country flags.
Removed the "toothbrush" mustache.
Rendering
Added a Shadow Quality option to video settings, defaulting to High (mostly affects VRAM usage).
Reworked every stick skin under a single unified shader for a cleaner, more consistent look.
New depth-only shader pass applied to sticks.
Added a clear-coat mask to the carbon line and tuned the clear coat across all stick lines.
Smooth shading across the whole arena - rink, goals, puck, players, leg pads, helmets, scoreboard, hangar and spectator booth.
Rebuilt the rink model so the barrier glass is generated dynamically.
Restructured all helmets and fixed unnatural materials, missing flag textures and visor placement.
Reworked scene lighting - disabled HDR, removed screen-space shadows, improved ambient occlusion and rebaked all lightmaps.
The crowd now wears team jerseys sometimes.
HUD & Interface
In-Game HUD
Added a team and position indicator. Current movement speed was relocated to the right of stamina to accommodate. (Can be disabled in settings.)
The minimap now shows player sticks, puck elevation, and a fallen indicator. (Can be disabled in settings.)
The minimap puck now renders as a proper circle instead of sometimes appearing oval.
The minimap now shows during replays and while spectating.
Minimap refresh rate raised to 120 Hz.
Voice Chat
Added a voice transmit indicator to the HUD so you can see when you're talking.
Added a mic test meter to the audio settings.
HUD & Interface
Menus & UI
The pause menu now shows server details - voice chat status and tick rate.
UI icons are now imported as textures instead of sprites to reduce pixelation.
The build label got a background and an F5 hint; the net stats monitor was moved up and given a background.
Competitive 3v3 and 5v5 cards are now labelled COMPETITIVE under the mode name.
The pause menu, chat and scoreboard now work during team and position select.
Esc now backs out one menu level instead of toggling the pause menu, and closes chat or cancels quick-chat.
Added a Vote to Forfeit button to the pause menu (shares logic with the /ff command), plus a Return to Game button.
Overlay menus now dim the screen behind them.
Team player counts are now shown on the team select buttons.
The menu footer shows your Puck username instead of your Steam name.
Dropdowns now mark the selected item with a check and show a dropdown arrow.
Scrollbars now sit beside content instead of overlapping it.
Increased the contrast of all input-field backgrounds.
A connected controller no longer hijacks the mouse cursor.
Chat
Added a /help command that lists the available chat commands.
/help is now split across multiple messages so it fits the chat length limit.
Chat now opens on key press and respects your chat key binding.
Fixed the chat box re-opening after quick inputs or when the chat button was Enter.
A \ indicator now appears on the chat box when typing in team chat.
Fixed long chat messages overlapping and mis-scrolling.
Fixed chat scroll jumping to the top when old messages are trimmed at the max.
The scrollbar now shows while chat is active.
Server Browser
Filters now live in a left sidebar.
The Direct Connect button is now native, with no need to switch on debug tools (F5).
The Direct Connect view now stays up after a failed connection instead of stranding you.
The server list now defaults to sorting by player count, with a cleaner sort icon.
The New Server tabs now have icons, active-tab tints, and descriptions.
"DEDICATED SERVERS" have been renamed to "CLOUD SERVERS" for clarity.
Cloud servers are now Patreon-gated, to reduce the extra cost of providing free cloud servers.
New servers now default to your Puck name.
Failed server starts now show feedback and let you retry.
Scoreboard
Late joiners now correctly see cached player positions on the scoreboard.
Mods Menu
Restyled the mods menu rows and labelled the enable toggle.
A subscribed mod with no local files now shows a warning.
Settings
The debug overlay toggle is now rebindable from F5.
The settings menu no longer resets double-press keybinds back to single press.
Servers, Backend & Connectivity
Server Management
Server admins can no longer be votekicked, and can join servers that are full.
Added banning and unbanning by SteamID64 via chat commands (/ban and /unban).
A server now reports itself ready only after the backend authenticates and the initial scene loads.
Players are held out with a "Server is still starting…" message until the server's mods finish downloading.
The unlisted-server warning no longer fires when a host stops the server intentionally.
Backend reconnection (client-side and server-side) was refactored using exponential backoff with a ping-timeout watchdog; the server keeps retrying after a network outage and logs when it falls off the public browser.
On a config parse failure the server keeps its last-good ban/whitelist lists and default game-mode config; it refuses to start on an invalid server config and reports malformed JSON with the file, line, and path.
uPnP forwarding no longer binds a local socket on the mapped port.
Dedicated servers skip workshop preview downloads and defer plugin loading until the socket is open.
Standardized server startup logs, announce the ready public address, and added terminal color detection with forced UTF-8 console output.
Admin Commands
Restored the admin /start and /warmup commands.
Pause, resume, and phase skips are now announced in chat, naming the admin who did it.
Pause and resume are now rejected when the game is already in that state.
Matchmaking & Backend
Reworked how the pool forms games - groups are now paired by their overall MMR spread rather than the spread between the two teams, producing fairer, more consistent matchups.
Groups are now matched at a steady interval instead of debouncing, so match formation is more predictable.
A group's ping is now derived from the latency of all members, so server selection accounts for everyone in the party.
Repeat offenders now receive progressively longer matchmaking cooldowns.
No cooldown is issued when all players fail to join a match server - a bad server is no longer held against the players.
The client now responds to ping requests using the maximum RTT set in its own client settings.
Migrated matchmaking from Edgegap's Locations and Beacons to Probes.
Widened the list of locations to which a cloud server can be deployed.
Created and implemented Puck's own deployment management service, which will let us deploy servers to locations not supported by the current provider.
Raised all deployment limits, allowing a theoretical maximum of 100 concurrent matches across all regions (previously 25).
Steam
A helpful message now shows when Steam keeps failing to initialize.
The client now recovers from and surfaces a hung Steam web API auth ticket.
Performance
Large pass to cut per-tick allocations across object sync, collisions, snapshot interpolation and events, reducing the frequency of client- and server-induced hitches from garbage collection.
Network metrics, jersey text, elevation indicators and info-log stack traces are now skipped on dedicated servers.
The server browser no longer drops your frames while playing - pings run on dedicated threads and the list sort is debounced.
Bug Fixes
Restored the puck mesh to the Puck layer so its outline and silhouette render again.
Equipped cosmetics are now validated by category and ownership, so players can't join with unowned or empty gear.
Unclaiming a position you were spawned into returns you to position select.
Late joiners now see the correct player position on the scoreboard (re-resolved on session sync).
The settings-reset event now only fires when settings are actually reset.
Players now join with a full chat allowance so you can chat right away.
Guarded against NaN values in stick actions.
Skating, stick and puck sounds are now silenced while a body is frozen.
Fixed a crash during connection approval when connection data was missing.
Connections missing a Steam ID or mod list are now rejected.
Good luck and have fun out on the ice!
