v33 Release Notes
Major Changes
- Doomsday Clock — A new battle-royale style zone gamemode. A shrinking doom zone drains troops (and warships) from doomed sides, with a 10-minute grace period and wave-based squeeze to break late-game stalemates. Now part of the public modifier rotation.
- Ranked 2v2 — Ranked matchmaking now supports 2v2 alongside 1v1, with its own leaderboard ladder, clanmate pairing, and match cancellation for lobbies that don't fill or fully spawn.
- Steam / desktop client — Steam desktop authentication (SteamSDK), configurable WebSocket routing for the Electron shell, and an ad-free desktop experience.
- Login with Google — Sign in with a Google account and link it to an existing account.
- Account usernames + verified badge — Claim an account-level username (
base.suffix, or a bare name for subscribers) and play under it with a verified badge next to your name. - Custom tribe names — Buy a custom tribe name in the store's new Tribes tab and it can appear on bot tribes in public games. Boosts make your tribe appear more often, and a public tribe leaderboard tracks how they do.
- Impassable terrain — Mappers can now mark terrain as impassable, opening up a new class of map design. Several new maps already use it.
- Warship veterancy — Warships gain veterancy over their service life, increasing their health and attack.
- MIRVs are real nukes now — MIRV warheads fly like standard nukes and can be intercepted normally by SAMs. Launching a MIRV also puts the silo on cooldown.
- Anonymous names — A lobby setting that replaces player names with memorable, collision-proof animal names.
- 22 new maps — including Sol, Russia, United States, France, Germany, China, Vietnam, Scandinavia and the first maps built around impassable terrain.
☢️ Gameplay & Balance
- Added the Doomsday Clock battle-royale zone gamemode — Zixer1
- Rebalanced the Doomsday Clock: 10-minute grace period, wave squeeze, slower troop drain, gentler-but-steeper warship attrition — Zixer1
- Doomsday Clock now decays warships alongside troops for doomed sides, and floors the drain at 5% of max instead of wiping to zero — Zixer1
- Doomsday Clock judges teams against the same bar as solo sides — Zixer1
- Doomed warships stay on patrol instead of idling at ports — Zixer1
- Added warship veterancy, with updated in-game instructions — bijx
- MIRV warheads are now standard nukes: real flight, normal SAM interception, per-type speeds — Evan
- Missile silos go on cooldown when launching a MIRV — Evan
- MIRV warheads now spawn properly over impassable terrain — TKTK123456
- Fixed SAM targeting, range miscalculations and nuke pathing — JB940
- Added impassable terrain — FloPinguin
- Fixed minimap priority for impassable terrain pathfinding — FloPinguin
- Added a custom alliance duration lobby control — Zixer1
- Fixed pirating not being disabled when a warship's owner has no port in that body of water — TKTK123456
- Fixed transport ships targeting unreachable inland-lake shores — Navaneeth Prabha
- Fixed transport ship troop counts not updating when a hydrogen bomb hits the player — AmanorsElliot
- Fixed the rail network path length limit and re-added its tests — TKTK123456
- Fixed the factory ghost radius — TKTK123456
- Fixed non-structures being deletable — unne27
- Fixed the nuke preview showing teammate SAMs as threats — Evan
- Highlight the owner of hovered naval units — unne27
- Reduced compact map chance in 1v1 from 50% to 20% — FloPinguin
- Removed the ports-disabled modifier from public games — Evan
🏆 Ranked & Matchmaking
- Added 2v2 ranked matchmaking — Evan
- Added the 2v2 ranked ladder as its own leaderboard tab — Evan
- Ranked 2v2 now prefers pairing clanmates as teammates — Evan
- Ranked 2v2 games end early when a full team is dead or disconnected — Evan
- Increased ranked 2v2 PvP spawn immunity to 1 minute — Evan
- Ranked 2v2 uses compact maps only 50% of the time — Evan
- Cancel ranked matches that don't fill or fully spawn — Evan
- Widened the matchmaking join window and cancel games that start short-handed — Evan
- Show the live queue size while matchmaking, and reconnect on silent disconnects — Evan
- Handle matchmaking socket close codes per the API contract — Evan
- Handle ranked play limits in the client — Evan
- Keep matchmaking games out of lobby reports and salvage invalid entries — Evan
- Mint game ids on the server and randomly route create-game across workers — Evan
- Removed clan tags from the 1v1 ranked leaderboard (it's an individual ladder) — Ryan
- Split the clan tag into its own filterable leaderboard column, with cleaner rank/clan/player cells — Ryan
- Fixed an infinite retry at the end of the ranked leaderboard — Ryan
🗺️ Maps
New Maps
- Sol 🪐 — Massive map of the Solar System (by RickD004)
- Russia 🇷🇺 — Big-map treatment of Russia (by RickD004)
- United States 🇺🇸 — Built for the new impassable terrain feature (by RickD004)
- France 🇫🇷 (by RickD004)
- Germany 🇩🇪 — With state flags (by SpeakIsntThere)
- China 🇨🇳 (by crunchybbb)
- Vietnam 🇻🇳 (by crunchybbb)
- Scandinavia 🇸🇪 (by crunchybbb)
- Balkhash — Pipe map (by RickD004)
- Baltics (by RickD004)
- Caspian Sea — With team spawns (by crunchybbb)
- Clearwater Lakes — Conjoined circles map (by RickD004)
- Crimea (by crunchybbb)
- Finger Lakes (by crunchybbb)
- Gulf of Guinea (by RickD004)
- Hecate Strait (by Liam Langford)
- Irish Sea (by RickD004)
- Las Vegas Strip (by crunchybbb)
- Levant (by RickD004)
- Tierra del Fuego — Featuring impassable terrain (by RickD004)
- Branching Paths (by NotRocketfish)
- More than luck (by Patrick Plays Badly)
Map Improvements & Fixes
- Adds a map layer system that lets mappers overlay PNG images — FloPinguin
- Allow mappers to specify custom tribe spawn coordinates in
info.json— FloPinguin - Added a tribe name themes system with custom tribes support — FloPinguin
- Added tribe themes to all real-world maps, plus custom tribes with spawn coordinates on Los Angeles — crunchybbb
- Multiple terrain changes and fixes across maps, plus further map changes for v33 — RickD004
- Updated map outlines (no resizing, except Oceania) and updated the Dyslexdria map — Patrick Plays Badly
- Small corrections across Dyslexdria, Los Angeles, World Inverted and More than luck; recategorized More than luck and Branching Paths as arcade — Patrick Plays Badly
- Minor updates to Branching Paths — NotRocketfish
- Added flags to flagless nations on the Spain and Italy maps — RickD004
- Standardized the SVGs of flags in the flags folder, plus other flag fixes — RickD004
- Added impassable terrain to the Korea map — crunchybbb
- Took v32 maps out of the "New" category to make room for v33 maps; tagged Branching Paths as new — RickD004, NotRocketfish
- Arcade maps now appear in all playlists — FloPinguin
- Fixed a crash on the Indian Subcontinent map — blon
- Filled a landlocked lake on the NW island of Four Islands to fix port placement — blon
- Prevented AI from placing ports on small lakes — FloPinguin
- Fixed map thumbnails resolving by map id instead of display name — Evan
- Added an Expand Maps button — bijx
- Trimmed archived map names — Ryan
- Updated the color mapping location in the map generator README — Aaron Tidwell
🎨 Cosmetics & Store
- Added a warship cosmetic effect (gradient/transition recolor) — Evan
- Added nuke-trail cosmetic effects with a tabbed effects picker, plus a spiral nuke trail — Evan
- Added nuke-explosion cosmetic effects with per-bomb-type shockwave customization, plus a sparkles explosion type — Evan
- Added a structures cosmetic effect (hover-shown gradient/transition recolor) — Evan
- Added the effects cosmetic category with a transport-ship trail, rendered as a gradient with an animated store swatch — Evan
- Added a search bar to the effects picker modal — Evan
- Added a crown cosmetic type, rendered above player names — Evan
- Merged the skin and effects pickers into a single lobby Cosmetics modal, and collapsed skins under one banner — Evan, Ryan
- Show plutonium and caps balances in the store header — Evan
- Added custom plutonium amount purchases with a cleaner amount UI — Evan, Ryan
- Confirm plutonium and caps purchases before charging — Evan
- Show USD-equivalent value in the cosmetic info tooltip — Evan
- Added claimable subscription rewards UI — Evan
- Restored subscriptions in the store and account modal, and added a checkmarked perk list on subscription tiles — Evan
- Specific rate-limit message on tier change, using shared dialogs for subscription flows — Evan
- Reworked the store into a popup and removed the "subscribe" / "purchase" text — Ryan
- Fixed the store bonus ribbon layout across languages — Aotumuri
- Grouped owned cosmetic variants for performance — Josh Harris
- Fixed cosmetics blocking buttons on mobile — Luke-Dawes
🏕️ Custom Tribe Names
- Added a Tribes tab to the store to buy and manage custom tribe names — Evan
- Custom tribe names now appear on bot tribes in public games — Evan
- Added tribe name boost purchases to the store — Evan
- Added a public tribe-name leaderboard tab — Evan
- Show active boost counts on the tribe leaderboard — Evan
- Show when the next tribe boost expires in the store — Evan
👤 Accounts, Profiles & Stats
- Added account-level custom usernames (
base.suffixplus premium bare names) — Evan - Show account usernames and a verified badge on player-facing lists — Evan
- Added a verified-name toggle so you can play under your account name — Evan
- Prettier username rendering — Ryan
- Login with Google — client UI — Josh Harris
- Show "Linked to Google" once a Google account is linked — Josh Harris
- Added a shareable player profile modal (
#modal=profile&publicID=x), profile links and game history on profiles — Ryan - Added a Clans tab to the profile modal — Ryan
- Added a Games tab to the account modal — Ryan
- Reworked stats into a dedicated embedded stats modal, with a stats button on clan game history and backward compatibility for older games — Ryan
- Renamed "ranking" to "stats" — Ryan
- Let admins see clan tags in FFA — Ryan
- Fixed a bug when not being in a clan on mobile — Ryan
- Discord integration — Ryan
- Added marketing email consent UI (post-login prompt + account settings) — iamlewis
- Added CSV separation between names — Ryan
🖥️ Desktop & Steam
- Steam desktop authentication: SteamSDK, auth branch, audience config, username seeding — Josh Harris
- Exempt Steam-authenticated clients from the Turnstile siteverify — Josh Harris
- Render the Steam account in the account UI — Josh Harris
- Surface the Steam identity on the top-nav account button — Josh Harris
- Added Steam wishlist prompts to the homepage and win modal — Ryan
- Route game WebSockets via a configurable server host for the Electron desktop client — Josh Harris
- Exempt the Electron desktop shell from loading Admiral ads — Josh Harris
- Fixed
getApiBase()returninghttps://undefinedwhenAPI_DOMAINwas unset — Josh Harris
🕵️ Anonymous Names
- Added the anonymize-names feature — Zixer1
- Memorable, collision-proof animal anonymous names — Zixer1
- Surfaced anonymous names as a lobby setting — Zixer1
- Name reveal now works by publicID during game config — Zixer1
- Fixed an anonymize-names desync by seeding the cluster-recalc offset from
id()instead ofname()— Evan - Fixed the anonymous-names setting not hiding names on the map — Evan
📺 Featured Stream
- Added the featured stream feature — Zixer1
- Off-web exclusion, ad-free close, and keeping the stream through the lobby wait — Zixer1
- Mobile flick-to-dismiss — Zixer1
- Keep the Twitch embed at its 400x300 minimum — Zixer1
- Added a Streaming Now panel to the play page with live streamer cards, plus an identity bubble showing your flag, name and skin — Zixer1
- Stopped probing Twitch on every page load to avoid rate limits — Zixer1
🧑🤝🧑 Lobby & Social
- Subscriber-hosted public lobby listing, gated on the
canCreatePublicLobbiesentitlement — Evan - Auto-start listed lobbies after 5 minutes, surviving host modal close during auto-start — Evan
- Disabled host pause in publicly listed games — Evan
- Show notable settings on open-lobby rows in the join modal — Evan
- Show a loading spinner while the Join Lobby list loads — Evan
- Reuse private lobbies — MushroomLamp
- Added an allowlist for private lobbies (OFM) — Zixer1
- Replaced the leave-lobby popup with a custom popup — Ryan
- Allow mobile players to take part in the aftergame — FloPinguin
- Fixed the lobby status bar scrolling out of view when many players join — FloPinguin
- Accept
#as.when adding friends — Ryan - Configurable leaderboard and team stats columns — Ryan
🎛️ Graphics, UI & Quality of Life
- Added graphics presets, simplifying the settings behind an Advanced section — Evan
- Added terrain color settings, with live preview, and restored the default terrain colors — Vivacious Box, Evan
- Added a nuke fallout color graphics option and a structure dots toggle — Evan
- Set the structure border to territory color for the local player — Vivacious Box
- Added a black outline to the alliance icon for terrain contrast — Evan
- Update the coastline color dynamically when the ocean color changes — Berk
- Fixed the ocean color change reverting nuke-created water to land — Evan
- Replaced the small-player highlight toggle with a strength slider, moved into graphics overrides, and raised the default to 35% — Zixer1, Evan
- Standardized gradient
colorSizeto game tiles — Evan - Fall back to a full border recompute on massive tile changes — blon
- Render the spawn overlay with instancing to support large lobbies — Evan
- Gate users without GPU-accelerated WebGL2 instead of running at ~1fps — Evan
- Capped the renderer device-pixel-ratio at 2 — Evan
- Improved spawn phase progress bar visibility and sped up the spawn-phase ring pulse — ItsTimeTooSleep, Evan
- Made train tracks visible from farther out — Evan
- Made the important events panel scrollable — Evan
- Surfaced alliance renewal and rejection events in the important-events panel — Evan
- Added a trade ship captured event with a toggle setting — Evan
- Donation received events are now blue instead of green — Evan
- Host lobby start button turns yellow during countdown — Evan
- Changed factory icons from circles to hexagons — Antonio Lentini
- Right-click now cancels warship/boat selection instead of opening the menu — eastwoodgrant
- Respect the "Disable emojis" setting in all emoji display paths — eastwoodgrant
- Fixed trackpad pinch zoom in Safari — Landon
- Reworked
InputHandler.ts— TKTK123456 - Added billions to the money utils — bijx
- Added an achievement medal overview — bijx
- Fixed classes for the control panel unit display and the control panel / player info gold display — JB940
- Removed the background wrap-around seam on the home page when nav is hidden — Evan
- Show a loading spinner on the account button until auth resolves — Evan
- Prevented the Google CCPA button from shifting layout — blon
- Updated the tutorial video URL — Evan
- Translation updates (mls v5.8) and removed the Discord URL placeholder from translations — Aotumuri
⚡ Performance
- Reduced core live-memory footprint by 45% on large maps — Evan
- Cut core-sim GC churn by 75% cumulative across three passes, and added GC-churn profiling to the perf harness — Evan
- Main-thread memory harness: dropped three map-sized render buffers (−23%) — Evan
- Tick-dispatch timing harness and main-thread tick optimizations (late-game p95 −65%) — Evan
- Return the live
TileSetfromPlayer.tiles()instead of cloning — Evan - Reuse cached TradeShip paths for motion plans — Raka Hourianto
- Cache
maxTroopsduring the leaderboard update — Demonessica - Standardized cardinal-neighbor iteration on
neighbors()N,S,W,E order — Evan
🤖 Nations & Bots
- Fixed nations always attacking nuked territory instead of waiting for the correct strategy — FloPinguin
- Prevented AI from placing ports on small lakes — FloPinguin
- Added the tribe name themes system with custom tribes support — FloPinguin
🛠️ Server, Admin & Tooling
- Added an admin bot HTTP API for managing private games — Evan
- Added a live game stats endpoint to the admin bot API — Evan
- Added a private match telemetry stream — Josh Harris
kick_playercan target a publicId, including disconnected accounts — Zixer1- Include publicID in admin-bot live stats players — Zixer1
- Per-player
killedBy,deathPositionandwinnerfor live standings — Zixer1 - OFM tournament: log final standings and per-kill eliminations — Zixer1
- Integrated batch
username_checkmoderation into game servers — Evan - Archive singleplayer games via the API instead of the game server — Evan
- API schema cleanup — Ryan
- Fixed asset uploads for filenames with apostrophes — Evan
- Removed unused dependencies, dead components and a stale package override — VariableVince
- Added an "assign to me" checkbox to issue templates — Evan
- Exempted Dependabot PRs from the PR gate, fixed the stale bot re-commenting on case-mismatched labels, and removed the PR description validation check — Evan
- Removed the Wicked Sick service-provider paragraph from the privacy policy — iamlewis
🔒 Security & Anti-Cheat
- Reject spawn intents after the spawn phase (anti-teleport) — iamlewis
- Prevent the client from bypassing random spawn selection — FloPinguin
- Reject malformed tile refs and unit ids in intents — a single bad intent could freeze a whole lobby — Evan
- Keep private-lobby allowlist publicIds out of the game record and start message — Evan
- Require a strict majority in 1v1 winner-vote consensus — Josh Harris
- Don't re-challenge Turnstile on lobby reconnect — Evan
- Removed FFA collusion warnings on replay and ranked — Antonio Lentini
- Dependency security bumps — dependabot
🌐 Translators
To be filled in from Crowdin before release